FairRoot/PandaRoot
hypGeGeoBuilderDouble30cmRadius.C
Go to the documentation of this file.
1 #include "TGeoManager.h"
2 double Pi = TMath::Pi();
3 
4 
5 
7 {
8 
9  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
10 
11  // Load this libraries
12  gSystem->Load("libGeoBase");
13  gSystem->Load("libParBase");
14  gSystem->Load("libBase");
15  gSystem->Load("libPndData");
16  gSystem->Load("libPassive");
17  gSystem->Load("libHypGe");
18 
19  TString outfile= "../../../../geometry/hypGeGeoDoubleCluster_V3.root";
20 
21  TFile* fi = new TFile(outfile,"RECREATE");
22 
23  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
24  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
25  geoFace->setMediaFile("../../../../geometry/media_pnd.geo");
26  geoFace->readMedia();
27  //geoFace->print();
28 
29  FairGeoMedia *Media = geoFace->getMedia();
30  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
31 
32  FairGeoMedium *medGe = Media->getMedium("germanium");
33  Int_t nmedGe=geobuild->createMedium(medGe);
34 
35 
36  FairGeoMedium *medcap = Media->getMedium("HYPaluminium");
37  Int_t nmedcap=geobuild->createMedium(medcap);
38 
39  TGeoMedium *Ge = gGeoManager->GetMedium("germanium");
40 
41 
42  TGeoMedium *Al = gGeoManager->GetMedium("HYPaluminium");
43 
44 
45 
46  TGeoManager *geom = (TGeoManager*)gROOT->FindObject("FAIRGeom");
47  TGeoVolume *top = new TGeoVolumeAssembly("hpGe");
48  TGeoVolume *Realtop = new TGeoVolumeAssembly("Realtop");
49 
50 //cout<<" geom "<<geom<<endl;
51  geom->SetTopVolume(top);
52 
53  Int_t CrystalNumber = 1;
54  Double_t GlobalZOffset = -55;
55  Double_t ClusterRadius = 30;
56 
58  //MBP -> PlaceBeamPipe(Realtop);
59 
61  //MCTF -> PlaceCTFrame(Realtop,new TGeoTranslation(0,0,GlobalZOffset));
62 
63 
64 
65 
66  PndGeoHypGeDoubleCluster *DoubleCluster = new PndGeoHypGeDoubleCluster(Ge,Al,1);
67 
68 
69 //geometry is build in 4 quarters:
70 // 3 | 2
71 // ----o---- looking in +z (beam forward) direction
72 // 4 | 1
73  for (Int_t iHalves = 0; iHalves < 2; iHalves++)
74  {
75 
76  //iHalves = 0 -> right half (first and second quarter), iHalves = 1 -> left half (third and fourth quarter) (looking in +z (beam forward) direction
77  //first quarter
78 
79  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 180-23.1678, 27.7747, 180-(-20.74),&CrystalNumber);
80 
81  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 180-55.6699, 29.9031, 180-(-50.21),&CrystalNumber);
82 
83  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 180-13.4046, 52.2607, 180-(-8.3),&CrystalNumber);
84 
85  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves +180-31.5985, 50.2457, 180-(-21.67) ,&CrystalNumber);
86 
87  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 180-50.5126, 51.6831, 180-(-35.43),&CrystalNumber);
88 
89  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 180-75.1143, 46.348, 180-(9.44),&CrystalNumber);
90 
91  //second quarter
92  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 23.1678, 27.7747, -20.74,&CrystalNumber);
93 
94  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 55.6699, 29.9031, -50.21,&CrystalNumber);
95 
96  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 13.4046, 52.2607, -8.3,&CrystalNumber);
97 
98  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 31.5985, 50.2457, -21.67,&CrystalNumber);
99 
100  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 50.5126, 51.6831, -35.43,&CrystalNumber);
101 
102  DoubleCluster ->PlaceCluster(Realtop, GlobalZOffset,ClusterRadius, 180*iHalves + 75.1143, 46.348, 9.44,&CrystalNumber);
103  }
104 
105 
106  top->AddNode(Realtop,0);
107  Realtop->PrintNodes();
108  geom->CloseGeometry();
109  cout << "# of Nodes: " << Realtop->CountNodes(10,1) << endl;
110  DoubleCluster->PrintNodes(0);
111  top->Write();
112  fi->Close();
113 
114  //Realtop->Browse(new TBrowser);
115  //c1 = new TCanvas("c1","hypGe",800,600);Realtop->Draw("");// Realtop->Raytrace();
116  Realtop->Draw("ogl");
117 
118 
119  //c1->x3d();
120  //geom->CheckOverlaps(0.0000000001,option="d"); //1 Overlap von Strahlrohr + Kugel ist normal!!!!!!!!!!!!!!!!!
121  //geom->PrintOverlaps();
122 
123 
124  return 0;
125 }
126 
127 
FairGeoLoader * geoLoad
FairGeoMedia * Media
int hypGeGeoBuilderDouble30cmRadius()
TGeoManager * gGeoManager
TGeoVolume * top
FairGeoBuilder * geobuild
TFile * fi
Double_t
void PlaceCluster(TGeoVolume *top, TGeoMatrix *ClusterPlaceAndDirectionTranslation, Int_t *CrystalNumber)
FairGeoInterface * geoFace
Double_t Pi
TString outfile