FairRoot/PandaRoot
hypGeGeoCOSYGermaniums.C
Go to the documentation of this file.
1 #include "TGeoManager.h"
2 double Pi = TMath::Pi();
3 
5 {
6  TString outfileWithoutPath = "hypGeGeoSingle_ExperimentGeometry.root";
7  return outfileWithoutPath;
8 }
9 
10 int hypGeGeoCOSYGermaniums(Double_t ClusterRadius_ext = 30)
11 {
12 
13  gROOT->Macro("$VMCWORKDIR/gconfig/rootlogon.C");
14 
15  // Load this libraries
16  gSystem->Load("libGeoBase");
17  gSystem->Load("libParBase");
18  gSystem->Load("libBase");
19  gSystem->Load("libPndData");
20  gSystem->Load("libPassive");
21  gSystem->Load("libHypGe");
22 
23 
24  TString outfileWithoutPath = BuildOutputNameDetector(ClusterRadius_ext);
25 
26  TString outfile= "../../../../geometry/";
27  outfile += outfileWithoutPath;
28 
29  TFile* fi = new TFile(outfile,"RECREATE");
30 
31  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
32  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
33  geoFace->setMediaFile("../../../../geometry/media_pnd.geo");
34  geoFace->readMedia();
35  //geoFace->print();
36 
37  FairGeoMedia *Media = geoFace->getMedia();
38  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
39 
40  FairGeoMedium *medGe = Media->getMedium("germanium");
41  Int_t nmedGe=geobuild->createMedium(medGe);
42 
43 
44  FairGeoMedium *medcap = Media->getMedium("HYPaluminium");
45  Int_t nmedcap=geobuild->createMedium(medcap);
46 
47  TGeoMedium *Ge = gGeoManager->GetMedium("germanium");
48 
49 
50  TGeoMedium *Al = gGeoManager->GetMedium("HYPaluminium");
51 
52  FairGeoMedium *medSilicon = Media->getMedium("HYPsilicon");
53  Int_t nmedcap=geobuild->createMedium(medSilicon);
54 
55  TGeoMedium *Silicon = gGeoManager->GetMedium("HYPsilicon");
56 
57  TGeoManager *geom = (TGeoManager*)gROOT->FindObject("FAIRGeom");
58  TGeoVolume *top = new TGeoVolumeAssembly("hpGe");
59  TGeoVolume *Realtop = new TGeoVolumeAssembly("Realtop");
60 
61 //cout<<" geom "<<geom<<endl;
62  geom->SetTopVolume(top);
63 
64  Int_t CrystalNumber = 1;
65  Double_t GlobalZOffset = 0;
66  Double_t ClusterRadius = ClusterRadius_ext; //default is 30
67 
69  //MBP -> PlaceBeamPipe(Realtop);
70 
72  //MCTF -> PlaceCTFrame(Realtop,new TGeoTranslation(0,0,GlobalZOffset));
73 
74 
75 
76 
77  PndGeoHypGeSingleCluster *SingleCluster = new PndGeoHypGeSingleCluster(Ge,Al,1);
78 
79  SingleCluster ->PlaceCluster(Realtop, GlobalZOffset,30, 90,90,-90,&CrystalNumber);
80  //SingleCluster ->PlaceCluster(Realtop, GlobalZOffset,90, 90,270,-90,&CrystalNumber);
81 
82  TGeoVolume* SiPm = geom->MakeBox("CrystalSiPm_1",Silicon,0.15,0.15,0.005);
83  SiPm->SetLineColor(kYellow);
84  SiPm->SetFillColor(kYellow);
85  TGeoRotation *SiPmRot = new TGeoRotation("SiPmRot",0,0,0);
86  Realtop->AddNode(SiPm,1000,new TGeoCombiTrans(60,0,10,SiPmRot));
87 
88  TGeoVolume* SiPm2 = geom->MakeBox("CrystalSiPm_2",Silicon,0.15,0.15,0.005);
89  SiPm2->SetLineColor(kYellow);
90  SiPm2->SetFillColor(kYellow);
91  Realtop->AddNode(SiPm2,1001,new TGeoCombiTrans(-25,0,20,SiPmRot));
92 
93  TGeoVolume* Piezo = geom->MakeBox("CrystalPiezo",Silicon,0.75,0.25,0.2);
94  Piezo->SetLineColor(kBlue);
95  Piezo->SetFillColor(kBlue);
96  Realtop->AddNode(Piezo,1002,new TGeoCombiTrans(0,0,5.2,SiPmRot));
97 
98 
99  top->AddNode(Realtop,0);
100  Realtop->PrintNodes();
101  geom->CloseGeometry();
102  cout << "# of Nodes: " << Realtop->CountNodes(10,1) << endl;
103  SingleCluster->PrintNodes(0);
104  top->Write();
105  fi->Close();
106 
107  //Realtop->Browse(new TBrowser);
108  //c1 = new TCanvas("c1","hypGe",800,600);Realtop->Draw("");// Realtop->Raytrace();
109  Realtop->Draw("ogl");
110 
111 
112  //c1->x3d();
113  //geom->CheckOverlaps(0.0000000001,option="d"); //1 Overlap von Strahlrohr + Kugel ist normal!!!!!!!!!!!!!!!!!
114  //geom->PrintOverlaps();
115 
116 
117  return 0;
118 }
119 
120 
TGeoMedium * medSilicon
FairGeoLoader * geoLoad
FairGeoMedia * Media
TString BuildOutputNameDetector(Double_t ClusterRadius)
TGeoManager * gGeoManager
TGeoVolume * top
FairGeoBuilder * geobuild
TFile * fi
Double_t
void PlaceCluster(TGeoVolume *top, TGeoMatrix *ClusterPlaceAndDirectionTranslation, Int_t *CrystalNumber)
int hypGeGeoCOSYGermaniums(Double_t ClusterRadius_ext=30)
FairGeoInterface * geoFace
Double_t Pi
TString outfile