8 Double_t display= par[4]*( 20-copyNo);
9 Double_t position= par[0]+(copyNo)*par[2];
11 origin.SetXYZ(0, display,position);
28 Double_t halfLength = par[3] + copyNo * par[4];
29 Layer.SetXYZ(par[5],halfLength,par[1]);
44 b = rotma->GetRotationMatrix();
47 for (Int_t
i=0;
i<9;
i++) {
53 cout<<
" matrix "<<b[
i]<<endl;
55 v.SetX(b[0]*vec.X()+b[1]*vec.Y()+b[2]*vec.Z());
56 v.SetY(b[3]*vec.X()+b[4]*vec.Y()+b[5]*vec.Z());
57 v.SetZ(b[6]*vec.X()+b[7]*vec.Y()+b[8]*vec.Z());
68 gROOT->Macro(
"$VMCWORKDIR/gconfig/rootlogon.C");
71 gSystem->Load(
"libGeoBase");
72 gSystem->Load(
"libParBase");
73 gSystem->Load(
"libBase");
74 gSystem->Load(
"libPndData");
75 gSystem->Load(
"libPassive");
79 TFile*
fi =
new TFile(outfile,
"RECREATE");
81 FairGeoLoader*
geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
82 FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
83 geoFace->setMediaFile(
"../../geometry/media_pnd.geo");
87 FairGeoMedia *
Media = geoFace->getMedia();
88 FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
90 FairGeoMedium *medab = Media->getMedium(
"HYPdiamond");
91 Int_t nmedGe=geobuild->createMedium(medab);
94 FairGeoMedium *medsci = Media->getMedium(
"HYPsilicon");
95 Int_t nmedsci=geobuild->createMedium(medsci);
97 FairGeoMedium *medcar = Media->getMedium(
"HYPcarbon");
98 Int_t nmedC=geobuild->createMedium(medcar);
102 TGeoManager*
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
104 TGeoVolume *
top =
new TGeoVolumeAssembly(
"hypst");
106 gGeoMan->SetTopVolume(top);
108 TGeoVolume *complex =
new TGeoVolumeAssembly(
"complex");
111 const Int_t
max = 80;
145 Int_t NbOfLayers = 20;
147 Double_t lt = fAbsorberThickness + fGapThickness;
156 TGeoRotation*
rot =
new TGeoRotation();
157 TGeoRotation*
rot2 =
new TGeoRotation();
161 TGeoVolume *BoxAsmb[4];
164 TGeoVolume *LayAsmb[80];
169 TGeoVolume *LaySi[80];
170 TGeoVolume *LayAb[80];
175 for(
int i=0;
i<4;
i++){
178 rot->SetAngles(0,0,0);
179 rot2->SetAngles(0,0,0);
181 rot->RotateZ((-1*
i)*90.0);
182 rot2->RotateZ(-1*
i*90.0);
185 v2 =
new TVector3(
rotate(TVector3((stsyz/2)-hole,stsyz/2,0.),rot2));
186 sprintf(tempname,
"stgQuad%d",
i+1);
187 sprintf(name4,
"transQuad%d",
i+1);
189 TGeoCombiTrans* trc5 =
new TGeoCombiTrans(v2->x(), v2->y(), v2->z(),
190 new TGeoRotation (*rot));
191 trc5->SetName(name4);
192 trc5->RegisterYourself();
194 BoxAsmb[
d]=
new TGeoVolumeAssembly(tempname);
195 complex->AddNode(BoxAsmb[d],0,trc5);
200 string tmaterial[4]={
"HYPdiamond",
"HYPdiamond",
"beryllium",
"aluminium"};
202 char tmplay[100],tmplayb[100],tmpAbs[100], tmpGap[100],tmpVAbs[100], tmpVGap[100];
205 Double_t firstPosition = -0.5*SecTargThick + 0.5*LayThick;
208 Double_t firstLength = 0.5*SecTargSizeYZ + lengthpar;
211 Double_t lastLength = SecTargSizeYZ;
215 TVector3 vecAbs,vecGap;
221 Double_t fStartPosition = firstPosition;
222 Double_t fHalfLayThick = 0.5*LayThick;
224 Double_t fHalfLengthFirst = 0.5 * firstLength;
225 Double_t fHalfLengthIncr = 0.5 *(lastLength-firstLength)/NbOfLayers;
226 Double_t fHalfLastLength = 0.5*lastLength;
228 Double_t param[6]={fStartPosition,fHalfLayThick,fSpacing,fHalfLengthFirst,
229 fHalfLengthIncr,fHalfLastLength};
236 for(Int_t
i=0;
i<20;
i++)
247 v_Pos.SetY(-v_Pos.y());
249 v_Pos.SetZ(-v_Pos.z());
263 zla[
i]= fAbsorberThickness/2;
268 vecAbs.SetZ(-fGapThickness/2.0);
278 zlg[
i]= fGapThickness/2.0;
283 vecGap.SetZ(fAbsorberThickness/2);
299 for(Int_t j=0; j<4;j++)
304 for(Int_t k=0; k<20; k++)
312 sprintf(tmplay,
"stgLay%d",k);
313 sprintf(tmpAbs,
"stgBlAb%d",k);
314 sprintf(tmpGap,
"stgBlSi%d",k);
315 sprintf(tmpVAbs,
"stglAb%d",k);
316 sprintf(tmpVGap,
"stglSi%d",k);
318 sprintf(name,
"transAb%d",k);
319 sprintf(name1,
"transSi%d",k);
320 sprintf(name2,
"transLay%d",k);
322 LayAsmb[
t]=
new TGeoVolumeAssembly(tmplay);
328 BoxAb[
t] =
new TGeoBBox(tmpAbs,da[k],ha[k],zla[k]);
329 LayAb[
t] =
new TGeoVolume(tmpVAbs,BoxAb[t],gGeoMan->GetMedium(
"HYPdiamond"));
330 BoxSi[
t] =
new TGeoBBox(tmpGap,dg[k],hg[k],zlg[k]);
331 LaySi[
t] =
new TGeoVolume(tmpVGap,BoxSi[t],gGeoMan->GetMedium(
"HYPsilicon"));
332 LaySi[
t]->SetLineColor(kPink);
333 LayAb[
t]->SetLineColor(kYellow);
334 TGeoCombiTrans*
trc1 =
new TGeoCombiTrans(xa[k],ya[k],za[k],
new TGeoRotation ());
336 trc1->RegisterYourself();
337 LayAsmb[
t]->AddNode(LayAb[t],k, trc1);
338 TGeoCombiTrans*
trc2 =
new TGeoCombiTrans(xg[k],yg[k],zg[k],
new TGeoRotation ());
339 trc2->SetName(name1);
340 trc2->RegisterYourself();
341 LayAsmb[
t]->AddNode(LaySi[t],k, trc2);
342 TGeoCombiTrans*
trc3 =
new TGeoCombiTrans(xl[k],yl[k],zl[k],
new TGeoRotation ());
343 trc3->SetName(name2);
344 trc3->RegisterYourself();
345 BoxAsmb[j]->AddNode(LayAsmb[t],k,trc3);
352 for(Int_t k=20; k<40; k++)
360 sprintf(tmplay,
"stgLay%d",k);
361 sprintf(tmpAbs,
"stgBlAb%d",k);
362 sprintf(tmpGap,
"stgBlSi%d",k);
363 sprintf(tmpVAbs,
"stglAb%d",k);
364 sprintf(tmpVGap,
"stglSi%d",k);
366 sprintf(name,
"transAb%d",k);
367 sprintf(name1,
"transSi%d",k);
368 sprintf(name2,
"transLay%d",k);
370 LayAsmb[
t]=
new TGeoVolumeAssembly(tmplay);
376 BoxAb[
t] =
new TGeoBBox(tmpAbs,da[k-20],ha[k-20],zla[k-20]);
377 LayAb[
t] =
new TGeoVolume(tmpVAbs,BoxAb[k],gGeoMan->GetMedium(
"HYPdiamond"));
378 BoxSi[
t] =
new TGeoBBox(tmpGap,dg[k-20],hg[k-20],zlg[k-20]);
379 LaySi[
t] =
new TGeoVolume(tmpVGap,BoxSi[t],gGeoMan->GetMedium(
"HYPsilicon"));
380 LaySi[
t]->SetLineColor(kPink);
381 LayAb[
t]->SetLineColor(kYellow);
382 TGeoCombiTrans*
trc1 =
new TGeoCombiTrans(xa[k-20],ya[k-20],za[k-20],
new TGeoRotation ());
384 trc1->RegisterYourself();
385 LayAsmb[
t]->AddNode(LayAb[t],k, trc1);
387 TGeoCombiTrans*
trc2 =
new TGeoCombiTrans(xg[k-20],yg[k-20],zg[k-20],
new TGeoRotation ());
388 trc2->SetName(name1);
389 trc2->RegisterYourself();
390 LayAsmb[
t]->AddNode(LaySi[t],k, trc2);
392 TGeoCombiTrans*
trc3 =
new TGeoCombiTrans(xl[k-20],yl[k-20],zl[k-20],
new TGeoRotation ());
393 trc3->SetName(name2);
394 trc3->RegisterYourself();
395 BoxAsmb[j]->AddNode(LayAsmb[t],k,trc3);
403 for(Int_t k=40; k<60; k++)
411 sprintf(tmplay,
"stgLay%d",k);
412 sprintf(tmpAbs,
"stgBlAb%d",k);
413 sprintf(tmpGap,
"stgBlSi%d",k);
414 sprintf(tmpVAbs,
"stglAb%d",k);
415 sprintf(tmpVGap,
"stglSi%d",k);
417 sprintf(name,
"transAb%d",k);
418 sprintf(name1,
"transSi%d",k);
419 sprintf(name2,
"transLay%d",k);
421 LayAsmb[
t]=
new TGeoVolumeAssembly(tmplay);
427 BoxAb[
t] =
new TGeoBBox(tmpAbs,da[k-40],ha[k-40],zla[k-40]);
428 LayAb[
t] =
new TGeoVolume(tmpVAbs,BoxAb[t],gGeoMan->GetMedium(
"HYPdiamond"));
429 BoxSi[
t] =
new TGeoBBox(tmpGap,dg[k-40],hg[k-40],zlg[k-40]);
430 LaySi[
t] =
new TGeoVolume(tmpVGap,BoxSi[t],gGeoMan->GetMedium(
"HYPsilicon"));
431 LaySi[
t]->SetLineColor(kPink);
432 LayAb[
t]->SetLineColor(kYellow);
434 TGeoCombiTrans*
trc1 =
new TGeoCombiTrans(xa[k-40],ya[k-40],za[k-40],
new TGeoRotation ());
436 trc1->RegisterYourself();
437 LayAsmb[
t]->AddNode(LayAb[t],k, trc1);
439 TGeoCombiTrans*
trc2 =
new TGeoCombiTrans(xg[k-40],yg[k-40],zg[k-40],
new TGeoRotation ());
440 trc2->SetName(name1);
441 trc2->RegisterYourself();
442 LayAsmb[
t]->AddNode(LaySi[t],k, trc2);
444 TGeoCombiTrans*
trc3 =
new TGeoCombiTrans(xl[k-40],yl[k-40],zl[k-40],
new TGeoRotation ());
445 trc3->SetName(name2);
446 trc3->RegisterYourself();
447 BoxAsmb[j]->AddNode(LayAsmb[t],k,trc3);
454 for(Int_t k=60; k<80; k++)
462 sprintf(tmplay,
"stgLay%d",k);
463 sprintf(tmpAbs,
"stgBlAb%d",k);
464 sprintf(tmpGap,
"stgBlSi%d",k);
465 sprintf(tmpVAbs,
"stglAb%d",k);
466 sprintf(tmpVGap,
"stglSi%d",k);
468 sprintf(name,
"transAb%d",k);
469 sprintf(name1,
"transSi%d",k);
470 sprintf(name2,
"transLay%d",k);
472 LayAsmb[
t]=
new TGeoVolumeAssembly(tmplay);
478 BoxAb[
t] =
new TGeoBBox(tmpAbs,da[k-60],ha[k-60],zla[k-60]);
479 LayAb[
t] =
new TGeoVolume(tmpVAbs,BoxAb[t],gGeoMan->GetMedium(
"HYPdiamond"));
480 BoxSi[
t] =
new TGeoBBox(tmpGap,dg[k-60],hg[k-60],zlg[k-60]);
481 LaySi[
t] =
new TGeoVolume(tmpVGap,BoxSi[t],gGeoMan->GetMedium(
"HYPsilicon"));
482 LaySi[
t]->SetLineColor(kPink);
483 LayAb[
t]->SetLineColor(kYellow);
485 TGeoCombiTrans*
trc1 =
new TGeoCombiTrans(xa[k-60],ya[k-60],za[k-60],
new TGeoRotation ());
487 trc1->RegisterYourself();
488 LayAsmb[
t]->AddNode(LayAb[t],k, trc1);
489 TGeoCombiTrans*
trc2 =
new TGeoCombiTrans(xg[k-60],yg[k-60],zg[k-60],
new TGeoRotation ());
490 trc2->SetName(name1);
491 trc2->RegisterYourself();
492 LayAsmb[
t]->AddNode(LaySi[t],k, trc2);
493 TGeoCombiTrans*
trc3 =
new TGeoCombiTrans(xl[k-60],yl[k-60],zl[k-60],
new TGeoRotation ());
494 trc3->SetName(name2);
495 trc3->RegisterYourself();
496 BoxAsmb[j]->AddNode(LayAsmb[t],k,trc3);
506 pipe =
new TGeoTube(
"stghypPipe",0.69,0.7,10.);
507 hyppipe =
new TGeoVolume(
"stglpipe",pipe,gGeoMan->GetMedium(
"HYPcarbon"));
509 TGeoCombiTrans* trc4 =
new TGeoCombiTrans(0., 0., 0.,
new TGeoRotation ());
511 trc4->SetName(
"transpipe");
512 trc4->RegisterYourself();
513 complex->AddNode(hyppipe, 0,trc4);
515 top->AddNode(complex,0,
new TGeoCombiTrans(0., 0., -76.5,
new TGeoRotation ()));
517 gGeoMan->CloseGeometry();
TVector3 ComputeDimensions(const int copyNo, Double_t *par)
friend F32vec4 max(const F32vec4 &a, const F32vec4 &b)
Double_t const fAbsorberThickness
FairGeoBuilder * geobuild
TVector3 rotate(TVector3 vec, TGeoRotation *rotma)
int create_HypSTxy3Cmic_rootgeo3()
FairGeoInterface * geoFace
TVector3 ComputeTransformation(const int copyNo, Double_t *par)