14 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
17 gSystem->Load(
"libGeoBase");
18 gSystem->Load(
"libParBase");
19 gSystem->Load(
"libBase");
20 gSystem->Load(
"libPndData");
21 gSystem->Load(
"libPassive");
24 TFile*
fi =
new TFile(outfile,
"RECREATE");
28 FairGeoLoader*
geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
29 FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
30 geoFace->setMediaFile(
"../../../../geometry/media_pnd.geo");
34 FairGeoMedia *
Media = geoFace->getMedia();
35 FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
37 FairGeoMedium *medGe = Media->getMedium(
"germanium");
38 Int_t nmedGe=geobuild->createMedium(medGe);
41 FairGeoMedium *medcap = Media->getMedium(
"HYPaluminium");
42 Int_t nmedcap=geobuild->createMedium(medcap);
44 TGeoMedium *Ge =
gGeoManager->GetMedium(
"germanium");
47 TGeoMedium *Al_sol =
gGeoManager->GetMedium(
"HYPaluminium");
51 TGeoManager *
geom = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
52 TGeoVolume *
top =
new TGeoVolumeAssembly(
"hpGe");
53 TGeoVolume *strange =
new TGeoVolumeAssembly(
"strange");
56 geom->SetTopVolume(top);
61 TGeoVolume *Strahlrohr =geom->MakeTube(
"Strahlrohr",Al_sol,0,7.5,150);
62 Strahlrohr->SetLineColor(kBlue);
66 TGeoVolume *Außenhülle =geom->MakeTube(
"Außenhülle",Al_sol,45,45.5,100);
67 Außenhülle->SetLineColor(kBlue);
72 TGeoVolume *HoldingStruc =geom->MakeBox(
"HoldingStruc",Al_sol,1,45,50);
73 HoldingStruc->SetLineColor(kGreen);
77 TGeoSphere *Kugel =
new TGeoSphere(
"Kugel",1,30,0,180,0,360);
78 TGeoVolume *Kugell =
new TGeoVolume(
"Kugell",Kugel,Al_sol);
79 Kugell->SetLineColor(kBlue);
80 Kugell->SetTransparency(99);
85 TGeoSphere *Origin =
new TGeoSphere(
"Origin",0,1,0,180,0,360);
86 TGeoVolume *Originn =
new TGeoVolume(
"Originn",Origin,Al_sol);
87 Originn->SetLineColor(kGreen);
92 double orangexy[16]={-2.0065,6.5042 , -3.9982,3.0203 , -2.2317,0 , 2.0065,6.5042 , -3.0594,8.2379 , -5.5748,3.9280 , -3.2774,0 , 3.0594,8.3279};
93 double gelbxy[16]={-2.2317,0 , -3.9982,-3.0203 , -2.0065,-6.5042 , 2.0065,-6.5042 , -3.2774,0 , -5.5748,-3.9280 , -3.0594,-8.3279 , 3.0594,-8.3279};
94 double braunxy[16]={2.0065,-6.5042 , 3.9982,-3.0203 , 2.2317,0 , -2.2317,0 , 3.0594,-8.3279 , 5.5748,-3.9580 , 3.2774,0 , -3.2774,0};
95 double grauxy[16]={2.2317,0 , 3.9982,3.0203 , 2.0065,6.5042 , -2.2317,0 , 3.2774,0 , 5.5748,3.9250 , 3.0594,8.3279 , -3.2774,0};
98 TGeoArb8 *orange =
new TGeoArb8 (
"orange",12.95/2, orangexy );
99 TGeoArb8 *gelb =
new TGeoArb8 (
"gelb",12.95/2, gelbxy );
100 TGeoArb8 *braun =
new TGeoArb8 (
"braun",12.95/2, braunxy );
101 TGeoArb8 *grau =
new TGeoArb8 (
"grau",12.95/2, grauxy );
105 double orangeInxy[16]={-1.9198,6.3539 , -3.8251,3.0212 , -2.0581,0 , 1.9198,6.3539 , -2.9726,8.1776 , -5.4016,3.9289 , -3.1037,0 , 2.9726,8.1776};
107 double gelbInxy[16]={-2.0581,0 , -3.8251,-3.0212 , -1.9198,-6.3539 , 1.9198,-6.3539 , -3.1037,0 , -5.4016,-3.9289 , -2.9726,-8.1776 , 2.9726,-8.1776};
108 double braunInxy[16]={1.9198,-6.3539 , 3.8251,-3.0212 , 2.0581,0 , -2.0581,0 , 2.9726,-8.1776 , 5.4016,-3.9289 , 3.1037,0 , -3.1057,0};
109 double grauInxy[16]={2.0581,0, 3.8251,3.0212 , 1.9198,6.3539 , -2.0581,0 , 3.1037,0 , 5.4016,3.9289 , 2.9726,8.1776 , -3.1037,0};
112 TGeoTranslation *In_Z =
new TGeoTranslation(
"In_Z",0,0,0.15);
113 In_Z->RegisterYourself();
114 TGeoArb8 *orangeIn =
new TGeoArb8 (
"orangeIn",(12.95-0.15)/2, orangeInxy );
115 TGeoArb8 *gelbIn =
new TGeoArb8 (
"gelbIn",(12.95-0.15)/2, gelbInxy );
116 TGeoArb8 *braunIn =
new TGeoArb8 (
"braunIn",(12.95-0.15)/2, braunInxy );
117 TGeoArb8 *grauIn =
new TGeoArb8 (
"grauIn",(12.95-0.15)/2, grauInxy );
122 double up1_2xy[16]={-3.0594,8.3279 , -5.5748,3.9280 , -5.4016,3.9289 , -2.9726,8.1776 ,
123 -3.2618,8.6784 , -5.9787,3.9260 , -5.4016,3.9289 , -2.9726,8.1776};
124 double up2_3xy[16]={-5.5748,3.9280 , -3.2774,0 , -3.1037,0 , -5.4016,3.9289 ,
125 -5.9787,3.9260 , -3.6824,0 , -3.1037,0 , -5.4016,3.9289};
126 double up3_4xy[16]={-3.2774,0 , -5.5748,-3.9280 , -5.4016,-3.9289 , -3.1037,0 ,
127 -3.6824,0 , -5.9787,-3.9260 , -5.4016,-3.9289 , -3.1037,0};
128 double up4_5xy[16]={-5.5748,-3.9280 , -3.0594,-8.3279 , -2.9726,-8.1776 ,
130 -5.9789,-3.9260 , -3.2618,-8.6784 , -2.9726,-8.1776 , -5.4016,-3.9289};
131 double up5_6xy[16]={-3.0594,-8.3279 , 3.0594,-8.3279 , 2.9726,-8.1776 , -2.9726,-8.1776 , -3.2618,-8.6784 , 3.2618,-8.6784 , 2.9726,-8.1776 , -2.9726,-8.1776};
132 double up6_7xy[16]={5.5748,-3.9280 , 3.0594,-8.3279 , 2.9726,-8.1776 ,
133 5.4016,-3.9289 , 5.9789,-3.9260 , 3.2618,-8.6784 , 2.9726,-8.1776 , 5.4016,-3.9289};
134 double up7_8xy[16]={3.2774,0 , 5.5748,-3.9280 , 5.4016,-3.9289 , 3.1037,0 ,
135 3.6824,0 , 5.9787,-3.9260 , 5.4016,-3.9289 , 3.1037,0};
137 double up8_9xy[16]={5.5748,3.9280 , 3.2774,0 , 3.1037,0 , 5.4016,3.9289 ,
138 5.9787,3.9260 , 3.6824,0 , 3.1037,0 , 5.4016,3.9289};
140 double up9_10xy[16]={3.0594,8.3279 , 5.5748,3.9280 , 5.4016,3.9289 , 2.9726,8.1776 ,
141 3.2618,8.6784 , 5.9787,3.9260 , 5.4016,3.9289 , 2.9726,8.1776};
142 double up10_1xy[16]={-3.0594,8.3279 , 3.0594,8.3279 , 2.9726,8.1776 , -2.9726,8.1776 , -3.2618,8.6784 , 3.2618,8.6784 , 2.9726,8.1776 , -2.9726,8.1776};
143 TGeoArb8 *up1_2 =
new TGeoArb8 (
"up1_2",2.5, up1_2xy );
144 TGeoArb8 *up2_3 =
new TGeoArb8 (
"up2_3",2.5, up2_3xy );
145 TGeoArb8 *up3_4 =
new TGeoArb8 (
"up3_4",2.5, up3_4xy );
146 TGeoArb8 *up4_5 =
new TGeoArb8 (
"up4_5",2.5, up4_5xy );
147 TGeoArb8 *up5_6 =
new TGeoArb8 (
"up5_6",2.5, up5_6xy );
148 TGeoArb8 *up6_7 =
new TGeoArb8 (
"up6_7",2.5, up6_7xy );
149 TGeoArb8 *up7_8 =
new TGeoArb8 (
"up7_8",2.5, up7_8xy );
150 TGeoArb8 *up8_9 =
new TGeoArb8 (
"up8_9",2.5, up8_9xy );
151 TGeoArb8 *up9_10 =
new TGeoArb8 (
"up9_10",2.5, up9_10xy );
153 TGeoArb8 *up10_1 =
new TGeoArb8 (
"up10_1",2.5, up10_1xy );
154 TGeoTranslation *up_Z =
new TGeoTranslation(
"up_Z",0,0,12.95/2+5./2);
155 up_Z->RegisterYourself();
160 double xDeckel[10] = {-3.2618,-5.9787,-3.6824,-5.9787,-3.2618,3.2618,5.9787,3.6824,5.9787,3.2618};
162 double yDeckel[10] ={8.6784,3.9260,0,-3.9260,-8.6784,-8.6784,-3.9260,0,3.9260,8.6784};
164 TGeoXtru *Deckel =
new TGeoXtru (2);
165 Deckel->DefinePolygon(10,xDeckel,yDeckel);
166 Deckel->DefineSection(0,12.95/2+5,0,0,1);
167 Deckel->DefineSection(1,12.95/2+5+0.5,0,0,1);
168 TGeoVolume *DeckelVol =
new TGeoVolume(
"Deckel",Deckel,Al_sol);
169 TGeoCompositeShape *KappenForm =
new TGeoCompositeShape(
"KappenForm",
"orange+gelb+braun+grau-orangeIn:In_Z-gelbIn:In_Z-braunIn:In_Z-grauIn:In_Z+up1_2:up_Z+up2_3:up_Z+up3_4:up_Z+up4_5:up_Z+up5_6:up_Z+up6_7:up_Z+up7_8:up_Z+up8_9:up_Z+up9_10:up_Z+up10_1:up_Z");
170 TGeoVolume *Kappe =
new TGeoVolume(
"Kappe",KappenForm,Al_sol);
171 Kappe->SetLineColor(kBlue);
172 DeckelVol->SetLineColor(kBlue);
182 TGeoTube *CapTube =
new TGeoTube(
"CapTube",0,3.75,5);
183 TGeoPgon *CapPgon =
new TGeoPgon(
"CapPgon",0.,360.,6,2);
184 CapPgon->DefineSection(0,-5,3.0571,3.8);
185 CapPgon->DefineSection(1,4.9094,3.75,3.8);
186 double CapThickness = 0.08;
187 double Scale = (3.0571-CapThickness)/3.0571;
188 TGeoTube *CapInTube =
new TGeoTube(
"CapInTube",0,3.75*Scale,5);
189 TGeoPgon *CapInPgon =
new TGeoPgon(
"CapInPgon",0.,360.,6,2);
190 CapInPgon->DefineSection(0,-5,3.0571-CapThickness,3.8);
191 CapInPgon->DefineSection(1,4.9094,3.75-CapThickness,3.8);
192 TGeoTube *CapTop =
new TGeoTube(
"CapTop",0,3.75,CapThickness/2);
193 TGeoTranslation *CapTop_Z =
new TGeoTranslation(
"CapTop_Z",0,0,5-CapThickness/2);
194 CapTop_Z->RegisterYourself();
195 TGeoCompositeShape *CapOutForm=
new TGeoCompositeShape(
"CapOutForm",
"(CapTube-CapPgon)");
196 TGeoCompositeShape *CapInForm=
new TGeoCompositeShape(
"CapInForm",
"(CapInTube-CapInPgon)");
197 TGeoTranslation *Cap_Z =
new TGeoTranslation(
"Cap_Z",0,0,CapThickness);
198 Cap_Z->RegisterYourself();
199 TGeoCompositeShape *CapForm =
new TGeoCompositeShape(
"CapForm",
"CapOutForm-CapInForm:Cap_Z+CapTop:CapTop_Z");
201 TGeoVolume *Capsule =
new TGeoVolume(
"Capsule",CapForm,Al_sol);
202 Capsule->SetTransparency(10);
203 Capsule->SetLineColor(10);
207 double VacThickness = 0.08;
208 double Scale2 =(3.0571-CapThickness-VacThickness)/3.0571;
209 cout << Scale2 << endl;
210 TGeoTube *CryTube =
new TGeoTube(
"CryTube",0,3.75,3.5);
211 TGeoPgon *CryPgon =
new TGeoPgon(
"CryPgon",0.,360.,6,2);
212 CryPgon->DefineSection(0,-3.5,3.0571-CapThickness-VacThickness,3.8);
213 CryPgon->DefineSection(1,1.5+4.9094,3.75-CapThickness-VacThickness,3.8);
214 TGeoTube *CryHole =
new TGeoTube(
"CryHole",0,0.5,3);
215 TGeoTranslation *CryHoleTrans =
new TGeoTranslation(
"CryHoleTrans",0,0,0.5);
216 CryHoleTrans->RegisterYourself();
217 TGeoCompositeShape *CryForm=
new TGeoCompositeShape(
"CryForm",
"((CryTube-CryPgon)-CryHole:CryHoleTrans)");
219 TGeoVolume *Crystal =
new TGeoVolume(
"Crystal",CryForm,Ge);
220 Crystal->SetLineColor(kGreen);
221 Crystal->SetFillColor(kGreen);
222 TGeoTranslation *CryTrans =
new TGeoTranslation(0,0,5-1.5+CapThickness+VacThickness);
223 CryTrans->RegisterYourself();
229 TGeoVolume *CryCap[48];
230 for(
int i = 0;
i < 48;
i++)
232 CryCap[
i]=
new TGeoVolumeAssembly(
"CryCap");
233 CryCap[
i]->AddNode(Crystal,
i+1,CryTrans);
234 CryCap[
i]->AddNode(Capsule,100+
i+1,
new TGeoTranslation(0,0,5));
236 double TripleXOffset = 0;
237 double TripleYOffset = 3.0693;
238 TGeoRotation *CryCap1rot =
new TGeoRotation(
"CryCap1rot", 0,+4,-0);
239 CryCap1rot->RegisterYourself();
240 TGeoCombiTrans *CryCap1Combitrans =
new TGeoCombiTrans(0+TripleXOffset,-TripleYOffset,0.45+0.2843,CryCap1rot);
241 CryCap1Combitrans->RegisterYourself();
243 TGeoRotation *CryCap2rot =
new TGeoRotation(
"CryCap2rot", 0,-4,-0);
244 CryCap2rot->RegisterYourself();
245 TGeoCombiTrans *CryCap2Combitrans =
new TGeoCombiTrans(0,TripleYOffset,0.45+0.2843,CryCap2rot);
246 CryCap2Combitrans->RegisterYourself();
248 TGeoRotation *CryCap3rot =
new TGeoRotation(
"CryCap3rot", 0,-4,0);
249 CryCap3rot->RegisterYourself();
250 TGeoCombiTrans *CryCap3Combitrans =
new TGeoCombiTrans(0+TripleXOffset,6.1386+TripleYOffset,0.45+0.2843,CryCap3rot);
251 CryCap3Combitrans->RegisterYourself();
253 cout <<
"test0" << endl;
256 TGeoVolume *Pointingtube = geom->MakeTube(
"Pointer",Al_sol,0,0.2,150);
258 TGeoVolume *Cluster[24];
259 TGeoVolume *ClusterTemp[24];
260 for(
int i = 0;
i < 24;
i ++)
263 sprintf(buffer,
"Cluster_%d",
i);
264 Cluster[
i]=
new TGeoVolumeAssembly(buffer);
265 ClusterTemp[
i]=
new TGeoVolumeAssembly(
"ClusterTemp");
267 ClusterTemp[
i]->AddNode(Kappe,200+
i+1,
new TGeoTranslation(0,0,6.475));
268 ClusterTemp[
i]->AddNode(DeckelVol,300+
i+1,
new TGeoTranslation(0,0,6.475));
269 ClusterTemp[
i]->AddNode(CryCap[2*
i],1000+i+1,CryCap1Combitrans);
271 ClusterTemp[
i]->AddNode(CryCap[2*i+1],2000+i+1,CryCap2Combitrans);
273 cout <<
"winkel "<< 180/
Pi*TMath::ATan(12.5751/-26.3009) << endl;
274 cout <<
"winkel2 "<< 180/
Pi*TMath::ATan(7.0801/-26.3009) << endl;
275 TGeoRotation *ClusterTemprot =
new TGeoRotation;
277 ClusterTemprot->RotateY(180);
278 ClusterTemprot->RotateX(0);
279 ClusterTemprot->RegisterYourself();
281 Cluster[
i]->AddNode(ClusterTemp[i],400+i,
new TGeoCombiTrans(0,0,0,ClusterTemprot));
285 cout <<
"test1" << endl;
296 ClusterPlacer(-5.5,12.8525, -26.5436, GlobalZOffset , 1000, strange,Cluster[0],23.1678, 27.7747, -20.74+23.1678);
298 ClusterPlacer(-12.3507,8.4346, -26.0061, GlobalZOffset , 2000, strange,Cluster[1],55.6699, 29.9031, -50.21+55.6699);
299 ClusterPlacer(-5.5,23.0778, -18.3621, GlobalZOffset , 3000, strange,Cluster[2],13.4046, 52.2607, -8.3+13.4046);
301 ClusterPlacer(-12.0846,19.6444, -19.1849, GlobalZOffset , 4000, strange,Cluster[3],31.5985, 50.2457, -21.67+31.5985);
303 ClusterPlacer(-18.1658,14.9679, -18.6003, GlobalZOffset , 5000, strange,Cluster[4],50.5126, 51.6831, -35.43+50.5126);
305 ClusterPlacer(-20.9778,5.5762, -20.7083, GlobalZOffset , 6000, strange,Cluster[5],75.1143, 46.348, 9.44+75.1143);
309 ClusterPlacer(-5.5,-12.8525, -26.5436, GlobalZOffset , 7000, strange,Cluster[6],180-23.1678, 27.7747, 180-(-20.74+23.1678));
311 ClusterPlacer(-12.3507,-8.4346, -26.0061, GlobalZOffset , 8000, strange,Cluster[7],180-55.6699, 29.9031, 180-(-50.21+55.6699));
312 ClusterPlacer(-5.5,-23.0778, -18.3621, GlobalZOffset , 9000, strange,Cluster[8],180-13.4046, 52.2607, 180-(-8.3+13.4046));
314 ClusterPlacer(-12.0846,-19.6444, -19.1849, GlobalZOffset , 10000, strange,Cluster[9],180-31.5985, 50.2457, 180-(-21.67+31.5985));
316 ClusterPlacer(-18.1658,-14.9679, -18.6003, GlobalZOffset , 11000, strange,Cluster[10],180-50.5126, 51.6831, 180-(-35.43+50.5126));
318 ClusterPlacer(-20.9778,-5.5762, -20.7083, GlobalZOffset , 12000, strange,Cluster[11],180-75.1143, 46.348, 180-(9.44+75.1143));
322 ClusterPlacer(5.5,-12.8525, -26.5436, GlobalZOffset , 13000, strange,Cluster[12],180+23.1678, 27.7747, 180+(-20.74+23.1678));
324 ClusterPlacer(12.3507,-8.4346, -26.0061, GlobalZOffset , 14000, strange,Cluster[13],180+55.6699, 29.9031, 180+(-50.21+55.6699));
325 ClusterPlacer(5.5,-23.0778, -18.3621, GlobalZOffset , 15000, strange,Cluster[14],180+13.4046, 52.2607, 180+(-8.3+13.4046));
327 ClusterPlacer(12.0846,-19.6444, -19.1849, GlobalZOffset , 160000, strange,Cluster[15],180+31.5985, 50.2457, 180+(-21.67+31.5985));
329 ClusterPlacer(18.1658,-14.9679, -18.6003, GlobalZOffset , 17000, strange,Cluster[16],180+50.5126, 51.6831, 180+(-35.43+50.5126));
331 ClusterPlacer(20.9778,-5.5762, -20.7083, GlobalZOffset , 18000, strange,Cluster[17],180+75.1143, 46.348, 180+(9.44+75.1143));
335 ClusterPlacer(5.5,12.8525, -26.5436, GlobalZOffset , 19000, strange,Cluster[18],-23.1678, 27.7747, -(-20.74+23.1678));
337 ClusterPlacer(12.3507,8.4346, -26.0061, GlobalZOffset , 20000, strange,Cluster[19],-55.6699, 29.9031, -(-50.21+55.6699));
338 ClusterPlacer(5.5,23.0778, -18.3621, GlobalZOffset , 21000, strange,Cluster[20],-13.4046, 52.2607, -(-8.3+13.4046));
340 ClusterPlacer(12.0846,19.6444, -19.1849, GlobalZOffset , 22000, strange,Cluster[21],-31.5985, 50.2457, -(-21.67+31.5985));
342 ClusterPlacer(18.1658,14.9679, -18.6003, GlobalZOffset , 23000, strange,Cluster[22],-50.5126, 51.6831, -(-35.43+50.5126));
344 ClusterPlacer(20.9778,5.5762, -20.7083, GlobalZOffset , 24000, strange,Cluster[23],-75.1143, 46.348, -(9.44+75.1143));
347 top->AddNode(strange,0);
348 geom->CloseGeometry();
352 strange->Draw(
"ogl");
353 geom->CheckOverlaps(0.0000000001,option=
"d");
354 geom->PrintOverlaps();
355 cout <<
"Anzahl der Objekte: "<< ObjektNr << endl;
TGeoManager * gGeoManager
FairGeoBuilder * geobuild
void ClusterPlacer(double x, double y, double z, double GlobalZOffset, int ObjectNo, TGeoVolume *top, TGeoVolume *Clusterr, double phi, double theta, double psi)
FairGeoInterface * geoFace