12 Double_t beamlineangle = -TMath::DegToRad()*0.0;
56 gSystem->Load(
"libGeoBase");
57 gSystem->Load(
"libParBase");
58 gSystem->Load(
"libBase");
59 gSystem->Load(
"libPndData");
60 gSystem->Load(
"libPassive");
63 TFile*
fi =
new TFile(outfile,
"RECREATE");
65 FairGeoLoader*
geoLoad =
new FairGeoLoader(
"TGeo",
"FairGeoLoader");
66 FairGeoInterface *
geoFace = geoLoad->getGeoInterface();
68 geoFace->setMediaFile(
"$VMCWORKDIR/geometry/media_pnd.geo");
73 FairGeoMedia *
Media = geoFace->getMedia();
74 FairGeoBuilder *
geobuild=geoLoad->getGeoBuilder();
83 Int_t
nmed=geobuild->createMedium(MediumAir);
84 nmed=geobuild->createMedium(MediumTyvek);
85 nmed=geobuild->createMedium(MediumCarbon);
86 nmed=geobuild->createMedium(MediumLead);
87 nmed=geobuild->createMedium(MediumScint);
88 nmed=geobuild->createMedium(MediumFiber);
90 TGeoManager*
gGeoMan = (TGeoManager*)gROOT->FindObject(
"FAIRGeom");
94 TGeoVolume *
top =
new TGeoVolumeAssembly(
"Emc5");
96 gGeoMan->SetTopVolume(top);
104 TGeoShape*
SuperModuleShape =
new TGeoBBox(name,suprModXsize/2.,suprModYsize/2.,thickness/2.);
105 name =
"FscSuperModuleVolume";
107 TGeoVolume*
SuperModuleVolume =
new TGeoVolume(name, SuperModuleShape, gGeoMan->GetMedium(medium));
108 SuperModuleVolume->SetLineColor(2);
111 name =
"FscTyvekShape";
112 TGeoShape*
TyvekShape =
new TGeoBBox(name,suprModXsize/2. - paperbundle,suprModYsize/2. - paperbundle,thickness/2. - paperbundle);
113 name =
"FscTyvekVolume";
115 TGeoVolume*
TyvekVolume =
new TGeoVolume(name, TyvekShape, gGeoMan->GetMedium(medium));
116 TyvekVolume->SetLineColor(3);
117 SuperModuleVolume->AddNode(TyvekVolume,0);
120 name =
"FscModuleShape";
121 TGeoShape*
ModuleShape =
new TGeoBBox(name,cellxsize/2.,cellysize/2.,holder_thickness/2.);
122 name =
"FscModuleVolume";
124 TGeoVolume*
ModuleVolume =
new TGeoVolume(name, ModuleShape, gGeoMan->GetMedium(medium));
125 ModuleVolume->SetLineColor(2);
135 x = -cellxsize + 2.*(cellxsize/(
Double_t)nClsSuperModuleX)*(ix - 0.5);
136 y = -cellxsize + 2.*(cellxsize/(
Double_t)nClsSuperModuleY)*(iy - 0.5);
137 cout<<
"===Inside supermodule"<<endl;
138 cout <<
"x="<<x<<
" y="<<y<<endl;
139 cout <<
"ix="<<ix<<
" iy="<<iy<<endl;
141 iCombTrans =
new TGeoCombiTrans(x,y,0,
new TGeoRotation(rot));
142 name =
"FscModuleVolume";
144 iCombTrans->SetName(name);
145 iCombTrans->RegisterYourself();
146 TyvekVolume->AddNode(ModuleVolume,iCopy,iCombTrans);
152 name =
"FscLayerHolderShape";
153 TGeoShape*
LayerHolderShape =
new TGeoBBox(name, cellxsize/2. - crystalspace, cellysize/2. - crystalspace, cell_thickness/2.);
154 name =
"FscLayerHolderVolume";
162 name =
"FscLeadShape";
163 TGeoShape*
LeadShape =
new TGeoBBox(name, cellxsize/2. - crystalspace, cellysize/2. - crystalspace, Pb_thickness/2.);
164 name =
"FscLeadVolume";
166 TGeoVolume*
LeadVolume =
new TGeoVolume(name, LeadShape, gGeoMan->GetMedium(medium));
167 LeadVolume->SetLineColor(4);
168 iCombTrans =
new TGeoCombiTrans(0,0,-cell_thickness/2.+Pb_thickness/2.,
new TGeoRotation(rot));
169 LayerHolderVolume->AddNode(LeadVolume,0,iCombTrans);
171 name =
"FscSciShape";
172 TGeoShape*
SciShape =
new TGeoBBox(name, cellxsize/2. - crystalspace, cellysize/2. - crystalspace, Sci_thickness/2.);
173 name =
"FscSciVolume";
175 TGeoVolume*
SciVolume =
new TGeoVolume(name, SciShape, gGeoMan->GetMedium(medium));
176 SciVolume->SetLineColor(5);
177 iCombTrans =
new TGeoCombiTrans(0,0,cell_thickness/2.-Sci_thickness/2.,
new TGeoRotation(rot));
178 LayerHolderVolume->AddNode(SciVolume,0,iCombTrans);
186 z = -holder_thickness/2. + 0.5 * cell_thickness *(2.*iz - 1.);
187 iCombTrans =
new TGeoCombiTrans(0,0,z,
new TGeoRotation(rot));
188 name =
"FscLayerHolder";
190 ModuleVolume->AddNode(LayerHolderVolume,iz-1,iCombTrans);
196 name =
"FscFibHoleSHape";
198 TGeoShape*
FiberHoleShape =
new TGeoTube(name, 0., fiber_hole_r, (holder_thickness)/2.);
199 name =
"FscFibHoleVolume";
201 TGeoVolume*
FiberHoleVolume =
new TGeoVolume(name, FiberHoleShape, gGeoMan->GetMedium(medium));
206 x = -Absorb_xsize/2. + (Absorb_xsize/(
Double_t)numfibers)*(ix - 0.5);
207 y = -Absorb_ysize/2. + (Absorb_ysize/(
Double_t)numfibers)*(iy - 0.5);
209 iCombTrans =
new TGeoCombiTrans(x,y,0,
new TGeoRotation(rot));
210 name =
"FscFibHoleVolume";
212 iCombTrans->SetName(name);
213 iCombTrans->RegisterYourself();
216 ModuleVolume->AddNodeOverlap(FiberHoleVolume,iCopy,iCombTrans);
222 name =
"FscFiberShape";
224 TGeoShape*
FiberShape =
new TGeoTube(name, 0., fiber_r, (holder_thickness)/2.);
225 name =
"FscFiberVolume";
227 TGeoVolume*
FiberVolume =
new TGeoVolume(name, FiberShape, gGeoMan->GetMedium(medium));
228 FiberVolume->SetLineColor(5);
229 iCombTrans =
new TGeoCombiTrans(0,0,0,
new TGeoRotation(rot));
230 FiberHoleVolume->AddNode(FiberVolume,0,iCombTrans);
241 x = 0.5 * suprModXsize * (2. * ix - numcellsx/nClsSuperModuleX - 1.);
242 y = 0.5 * suprModYsize * (2. * iy - numcellsy/nClsSuperModuleY - 1.);
243 cout<<
"======Supermodules"<<endl;
244 cout <<
"x="<<x<<
" y="<<y<<endl;
245 cout <<
"ix="<<ix<<
" iy="<<iy<<endl;
247 iCombTrans =
new TGeoCombiTrans(x,y,0.,
new TGeoRotation(rot));
248 name =
"FscSuperModuleVolume";
250 CopyCode = 100*ix+iy;
252 iCombTrans->SetName(name);
253 iCombTrans->RegisterYourself();
255 top->AddNode(SuperModuleVolume,CopyCode,iCombTrans);
270 TFile *
fb =
new TFile(FileName);
271 TGeoVolume *
MechFsc=(TGeoVolume *)fb->Get(
"topNode");
274 MechFsc->PrintNodes();
276 TGeoNode *
n=MechFsc->GetNode(0);
285 MFscVol->PrintNodes();
291 rotMechFsc.RotateX(-90.);
292 rotMechFsc.RotateY(180.);
296 top->AddNode(MFscVol,0,
new TGeoCombiTrans(11.0, 4.8, -38.9,
new TGeoRotation(rotMechFsc)));
301 gGeoMan->CloseGeometry();
TGeoCombiTrans * iCombTrans
TGeoShape * SuperModuleShape
FairGeoMedium * MediumFiber
const Double_t fiber_hole_r
const Double_t Sci_thickness
const Int_t nClsSuperModuleX
FairGeoMedium * MediumAir
const Int_t nClsSuperModuleY
FairGeoMedium * MediumCarbon
const Double_t Pb_thickness
TGeoVolume * LayerHolderVolume
FairGeoBuilder * geobuild
const Double_t paperbundle
FairGeoInterface * geoFace
TGeoVolume * ModuleVolume
const Double_t Absorb_xsize
const Double_t Air_thickness
TGeoShape * LayerHolderShape
Double_t holder_thickness
FairGeoMedium * MediumTyvek
FairGeoMedium * MediumLead
const Double_t Absorb_ysize
const Double_t tyvekbundle
TGeoVolume * SuperModuleVolume
static T Max(const T &x, const T &y)
TGeoShape * FiberHoleShape
FairGeoMedium * MediumScint
TGeoVolume * FiberHoleVolume