FairRoot/PandaRoot
createRootGeoFileBwEnd_2017.C
Go to the documentation of this file.
1  //-------------------------------------------------------------//
2  // This macro creates the Backward EndCap (BwEndCap) geometry
3  // of the EMC detector for PANDA.
4  //
5  // Author: Luigi Capozza, HIM/Uni Mainz (10.05.2017)
6  //-------------------------------------------------------------//
7 
8 
9 //------------------------------------------------------ definition of constants
10 
11 static const Double_t mm = 1.0e-1; // 1 mm in cm
12 
13 
14 //----------------------------- Dimensions and position in z direction
15 
16 static const Double_t kMPThickness = 30.0*mm; // mounting plate thickness
17 static const Double_t kMPInsDist = 86.0*mm; // distance mounting plate - insert
18 static const Double_t kInsertLength = 45.0*mm; // Length (in z direction) of a Al insert
19 static const Double_t kCapsuleLength = 42.0*mm; // Length of Al capsule (containing the APFEL preamp)
20 static const Double_t kCrLength = 200.0*mm; // Length of Crystal
21 static const Double_t kAlvLength = kCrLength + kCapsuleLength; // Alveole's length
22 static const Double_t kCrystFrontCoolingDist = 6.0*mm; // distance crystals - front cooling
23 static const Double_t kFrontCoolingThickness = 15.0*mm; // front cooling thickness
24 static const Double_t kFrontVIPThickness = 10.0*mm; // front VIP thickness
25 static const Double_t kCoverThickness = 4.0*mm; // alu cover thickness
26 
27 
28 // total z length of BWEC inner volume = gap + insert + alveove + gap + front cooling + VIP
29 static const Double_t kInnerVolLength =
31 
32 // total z length of BWEC = MP + (gap + insert + alveove + gap + front cooling + VIP) + cover
33 static const Double_t kBWECzLength = kMPThickness + kInnerVolLength + kCoverThickness; // should be 438.0*mm;
34 
35 
36 // inner volume position inside the outer volume
38 
39 // modules position inside the inner volume (the origin of the module volume is on the center of the alveole)
40 static const Double_t kModuleZpos = 0.5*( (kMPInsDist + kInsertLength) -
42 
43 
44 // VIPs and cooling
46 static const Double_t kSideVIPZpos = 0.0;
48 
49 
50 
51 
52 
53 //----------------------------- Dimensions and position in xy direction
54 
55 
56 //----------------------------- Alveole w/ PWO crystals + capsules + inserts
57 //--- dimensions
58 static const Double_t kCrWidth = 24.4*mm; // Width of crystal
59 static const Double_t kCrHeight = 24.4*mm; // Height of crystal
60 
61 static const Double_t kAlvHoleWidth = kCrWidth + 0.5*mm; // Width of alveole hole containing one crystal
62 static const Double_t kAlvWallThickness = 0.3*mm; // Wall thickness of carbon fibre alveoles
63 static const Double_t k4x4AlvWidth = 4.*kAlvHoleWidth + 5.*kAlvWallThickness; // Outer width of a 4x4 alveole
64 static const Double_t kSingleAlvWidth = kAlvHoleWidth + 2.*kAlvWallThickness; // Outer width of a 1x1 alveole
65 
66 static const Double_t kInsAlvDiff = 0.45*mm; // distance between outer surf of insert and of alveole
67 static const Double_t kInsertWidth = k4x4AlvWidth - 2.*kInsAlvDiff; // Width of a Al insert
68 static const Double_t kInsHoleWidth1 = 0.25*kInsertWidth - 2.*5.0*mm; // Width of Al insert' hole for a 1x1 crystals
69 static const Double_t kInsHoleWidth2 = 0.50*kInsertWidth - 2.*5.0*mm; // Width of Al insert' hole for a 2x2 crystals
70 
71 //--- positions
72 static const Double_t firstCrystPosX = -1.5*(kAlvHoleWidth + kAlvWallThickness);
73 static const Double_t firstCrystPosY = 1.5*(kAlvHoleWidth + kAlvWallThickness);
74 static const Double_t crystDPos = kAlvHoleWidth + kAlvWallThickness;
75 
76 
77 
78 
79 //----------------------------- Submodule layouts derived from the basic 4x4 array
80 const Int_t kNSubmoduleType = 6;
81 
82 //--- 1: crystal present, 0: no crystal
83 
84 static const Int_t AlvLayout0[]={1,1,1,1,
85  1,1,1,1,
86  1,1,1,1,
87  1,1,1,1};
88 
89 static const Int_t AlvLayout1[]={1,1,1,1,
90  1,1,1,1,
91  1,1,1,1,
92  1,1,0,0};
93 
94 static const Int_t AlvLayout2[]={1,1,1,1,
95  1,1,1,1,
96  1,1,1,1,
97  0,0,0,0};
98 
99 static const Int_t AlvLayout3[]={1,1,1,1,
100  1,1,1,1,
101  1,1,1,1,
102  0,0,1,1};
103 
104 static const Int_t AlvLayout4[]={1,1,0,0,
105  1,1,1,0,
106  1,1,1,1,
107  1,1,1,1};
108 
109 static const Int_t AlvLayout5[]={0,0,0,0,
110  0,0,0,0,
111  0,0,0,0,
112  1,0,0,0};
113 
114 
115 //----------------------------- Submodule shapes are implented as TGeoXtru objects
116 //--- Here the data for the polygonal sections for alveoles and inserts
117 
118 //--- submodule type 0
119 static const Int_t nVtx0 = 4;
120 static const Double_t v0X[nVtx0] = {
121  -0.5*k4x4AlvWidth, +0.5*k4x4AlvWidth,
122  +0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth};
123 static const Double_t v0Y[nVtx0] = {
124  -0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth,
125  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth};
126 
127 
128 //--- submodule type 1
129 static const Int_t nVtx1 = 6;
130 static const Double_t v1X[nVtx1] = {
131  -0.5*k4x4AlvWidth,
133  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth,
134  -0.5*k4x4AlvWidth};
135 static const Double_t v1Y[nVtx1] = {
136  -0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth,
137  -0.5*k4x4AlvWidth + kAlvWallThickness + kAlvHoleWidth,
138  -0.5*k4x4AlvWidth + kAlvWallThickness + kAlvHoleWidth,
139  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth};
140 
141 
142 //--- submodule type 2
143 static const Int_t nVtx2 = 4;
144 static const Double_t v2X[nVtx2] = {
145  -0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth,
146  +0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth};
147 static const Double_t v2Y[nVtx2] = {
148  -0.5*k4x4AlvWidth + kAlvHoleWidth + kAlvWallThickness,
149  -0.5*k4x4AlvWidth + kAlvHoleWidth + kAlvWallThickness,
150  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth};
151 
152 //--- submodule type 3
153 static const Int_t nVtx3 = 6;
154 static const Double_t v3X[nVtx3] = {
155  -0.5*k4x4AlvWidth,
157  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth,
158  -0.5*k4x4AlvWidth};
159 static const Double_t v3Y[nVtx3] = {
160  -0.5*k4x4AlvWidth + kAlvWallThickness + kAlvHoleWidth,
161  -0.5*k4x4AlvWidth + kAlvWallThickness + kAlvHoleWidth,
162  -0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth,
163  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth};
164 
165 //--- submodule type 4
166 static const Int_t nVtx4 = 8;
167 static const Double_t v4X[nVtx4] = {
168  -0.5*k4x4AlvWidth,
169  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth,
170  +0.5*k4x4AlvWidth - kAlvWallThickness - kAlvHoleWidth,
171  +0.5*k4x4AlvWidth - kAlvWallThickness - kAlvHoleWidth,
173  -0.5*k4x4AlvWidth};
174 static const Double_t v4Y[nVtx4] = {
175  -0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth,
176  +0.5001*kAlvWallThickness, 0.5001*kAlvWallThickness, // extra micron to avoid representation error
177  +0.5*k4x4AlvWidth - kAlvWallThickness - kAlvHoleWidth,
178  +0.5*k4x4AlvWidth - kAlvWallThickness - kAlvHoleWidth,
179  +0.5*k4x4AlvWidth, 0.5*k4x4AlvWidth};
180 
181 //--- submodule type 5
182 static const Int_t nVtx5 = 4;
183 static const Double_t v5X[nVtx5] = {
184  -0.5*k4x4AlvWidth,
185  -0.5*k4x4AlvWidth + kSingleAlvWidth,
186  -0.5*k4x4AlvWidth + kSingleAlvWidth,
187  -0.5*k4x4AlvWidth};
188 static const Double_t v5Y[nVtx5] = {
189  -0.5*k4x4AlvWidth, -0.5*k4x4AlvWidth,
190  -0.5*k4x4AlvWidth + kSingleAlvWidth,
191  -0.5*k4x4AlvWidth + kSingleAlvWidth};
192 
193 
194 
195 //----------------------------- Positions of submodules in the calorimeter
196 static const Int_t kNsubmodQuarter = 10;
197 static const Double_t kOuterSideR = 372.0*mm;
198 static const Double_t kDistBtwAlvs = 0.55*mm;
199 static const Double_t kSubmodPosUnit = k4x4AlvWidth + kDistBtwAlvs;
200 static const Double_t kCornerShift = 16.4*mm;
201 
202 //--- submodules on the upper side
203 static const Double_t kSubmodPos0[3] = {-1.*kSubmodPosUnit, kOuterSideR - 0.5*k4x4AlvWidth , kModuleZpos};
204 static const Double_t kSubmodPos1[3] = {0.0*kSubmodPosUnit, kOuterSideR - 0.5*k4x4AlvWidth , kModuleZpos};
205 static const Double_t kSubmodPos2[3] = {+1.*kSubmodPosUnit, kOuterSideR - 0.5*k4x4AlvWidth , kModuleZpos};
206 static const Double_t kSubmodPos3[3] = {-1.*kSubmodPosUnit, kOuterSideR - 1.5*k4x4AlvWidth - kDistBtwAlvs , kModuleZpos};
207 static const Double_t kSubmodPos4[3] = {0.0*kSubmodPosUnit, kOuterSideR - 1.5*k4x4AlvWidth - kDistBtwAlvs , kModuleZpos};
208 static const Double_t kSubmodPos5[3] = {+1.*kSubmodPosUnit, kOuterSideR - 1.5*k4x4AlvWidth - kDistBtwAlvs , kModuleZpos};
209 
210 //--- submodules on the upper-right corner
211 static const Double_t kSubmodPos6[3] = {+2.*kSubmodPosUnit, kOuterSideR - 1.5*k4x4AlvWidth - kDistBtwAlvs - kCornerShift, kModuleZpos};
212 static const Double_t kSubmodPos7[3] = {+3.*kSubmodPosUnit, kOuterSideR - 1.5*k4x4AlvWidth - kDistBtwAlvs - kCornerShift, kModuleZpos};
213 static const Double_t kSubmodPos8[3] = {+2.*kSubmodPosUnit, kOuterSideR - 0.5*k4x4AlvWidth - kCornerShift, kModuleZpos};
214 static const Double_t kSubmodPos9[3] = {+3.*kSubmodPosUnit, kOuterSideR - 0.5*k4x4AlvWidth - kCornerShift, kModuleZpos};
215 
216 // Simplification on y of kSubmodPos9: the 1x1 alveole should be glued
217 // to its neighbour in vertical direction, therefore an extra term of
218 // kDistBtwAlvs (0.55 mm) should be used. This term is left out here.
219 // This way the arrangement will be just rotated for the other corners
220 // without modification of the "loose" crystal position.
221 
222 
223 
224 //----------------------------- outer/inner BWEC volume
225 
226 //--- dimensions
227 
228 static const Double_t kBWECinnerRadius = 165.0*mm;
229 static const Double_t kBWECouterRadius = 438.0*mm;
230 static const Double_t kBWECxyWidth = 401.6*mm;
231 
232 
233 
234 //------------------------------------------------------ VIPs and cooling shells
235 
236 //--- dimensions
237 
238 static const Double_t kSideVIPThickness = 10.0*mm;
239 static const Double_t kSideVIPRout = kBWECouterRadius-kCoverThickness;
240 static const Double_t kSideVIPRin = kSideVIPRout - kSideVIPThickness;
241 static const Double_t kSideVIPxyOuterWidth = kBWECxyWidth - kCoverThickness;
242 static const Double_t kSideVIPxyInnerWidth = kSideVIPxyOuterWidth - kSideVIPThickness;
244 
245 static const Double_t kInnerVIPRin = kBWECinnerRadius+kCoverThickness;
246 static const Double_t kInnerVIPRout = kInnerVIPRin + kSideVIPThickness;
247 
248 static const Double_t kSideCoolingThickness = 15.0*mm;
249 
250 
251 
252 //------------------------------------------------------ end definition of constants
253 
254 
255 
256 
257 //------------------------------------------------------ geometry construction macro
259 
260 
261  //----------------------------- initialisations
262  gSystem->Load("libGeoBase");
263  gSystem->Load("libParBase");
264  gSystem->Load("libBase");
265  gSystem->Load("libPndData");
266  gSystem->Load("libPassive");
267 
268 
269 
270  //----------------------------- load/create materials/media
271  FairGeoLoader* geoLoad = new FairGeoLoader("TGeo","FairGeoLoader");
272  FairGeoInterface *geoFace = geoLoad->getGeoInterface();
273  geoFace->setMediaFile("/home/luigi/him/sw/pandaroot6/fairsoft_may16p1/pandaroot/geometry/media_pnd.geo");
274  geoFace->readMedia();
275  geoFace->print();
276 
277  FairGeoMedia *Media = geoFace->getMedia();
278  FairGeoBuilder *geobuild=geoLoad->getGeoBuilder();
279 
280  FairGeoMedium *N2 = Media->getMedium("Nitrogen");
281  FairGeoMedium *PWO = Media->getMedium("PWO");
282  FairGeoMedium *Prepreg = Media->getMedium("Prepreg");
283  FairGeoMedium *Alu = Media->getMedium("aluminium");
284  FairGeoMedium *VIPmat = Media->getMedium("FumedSilica");
285  FairGeoMedium *CSmat = Media->getMedium("CoolingShellMix");
286 
287  Int_t nmed=geobuild->createMedium(N2);
288  nmed=geobuild->createMedium(PWO);
289  nmed=geobuild->createMedium(Prepreg);
290  nmed=geobuild->createMedium(Alu);
291  nmed=geobuild->createMedium(VIPmat);
292  nmed=geobuild->createMedium(CSmat);
293 
294 
295  //----------------------------- define mother volume
296  TGeoManager* gGeoMan = (TGeoManager*)gROOT->FindObject("FAIRGeom");
297 
298  TGeoVolume *top = new TGeoVolumeAssembly("Emc4");
299 
300  gGeoMan->SetTopVolume(top);
301 
302 
303  //----------------------------- outer/inner BWEC volume
304  TGeoTube *outerTube = new TGeoTube("outerTube",kBWECinnerRadius,kBWECouterRadius,0.5*kBWECzLength);
305  TGeoBBox *outerBox = new TGeoBBox("outerBox",kBWECxyWidth,kBWECxyWidth,0.5*kBWECzLength+0.1);
306  TGeoCompositeShape *outerVol = new TGeoCompositeShape("outerVol","outerTube*outerBox");
307 
308  TGeoVolume* BWECouterVol = new TGeoVolume("BWECouterVol",outerVol,gGeoMan->GetMedium("aluminium"));
309  BWECouterVol->SetLineColor(kGray);
310  BWECouterVol->SetLineWidth(5);
311  BWECouterVol->SetLineStyle(kDashed);
312  cout<<"transp: "<<BWECouterVol->GetTransparency()<<endl;
313 
314  top->AddNode(BWECouterVol,0);
315 
316 
317  TGeoTube *innerTube = new TGeoTube("innerTube",
318  kBWECinnerRadius+kCoverThickness,
319  kBWECouterRadius-kCoverThickness,
320  0.5*kInnerVolLength);
321 
322  TGeoBBox *innerBox = new TGeoBBox("innerBox",
323  kBWECxyWidth-kCoverThickness,
324  kBWECxyWidth-kCoverThickness,
325  0.5*kInnerVolLength+0.1);
326 
327  TGeoCompositeShape *innerVol = new TGeoCompositeShape("innerVol","innerTube*innerBox");
328  TGeoTranslation *t1 = new TGeoTranslation(0.0,0.0,kInnerVolZpos);
329 
330  TGeoVolume* BWECinnerVol = new TGeoVolume("BWECinnerVol",innerVol,gGeoMan->GetMedium("Nitrogen"));
331  BWECinnerVol->SetLineColor(kAzure+10);
332 
333  BWECouterVol->AddNode(BWECinnerVol,0,t1);
334 
335 
336 
337 
338  //----------------------------- submodules with alveoles, crystals, capsules...
339  //--- version with composite shapes for the alveoles (holes are subtracted volumes)
340  int crystalNo = 0;
341  int holeNo = 0;
342  int capsuleNo = 0;
343 
344 
345  //--- submodule type 0: 4x4 array
346  TGeoBBox *alveoleBox = new TGeoBBox("alveoleBox",0.5*k4x4AlvWidth,0.5*k4x4AlvWidth,0.5*kAlvLength);
347  const Double_t *vX[kNSubmoduleType] = {v0X,v1X,v2X,v3X,v4X,v5X};
348  const Double_t *vY[kNSubmoduleType] = {v0Y,v1Y,v2Y,v3Y,v4Y,v5Y};
349 
350  //--- submodule type 1
351  TGeoXtru *alvXtru1 = new TGeoXtru(2); alvXtru1->SetName("alvXtru1");
352  alvXtru1->DefinePolygon(nVtx1,v1X,v1Y);
353  alvXtru1->DefineSection(0,-0.5*kAlvLength,0.0,0.0,1.0);
354  alvXtru1->DefineSection(1,+0.5*kAlvLength,0.0,0.0,1.0);
355 
356  //--- submodule type 2
357  TGeoXtru *alvXtru2 = new TGeoXtru(2); alvXtru2->SetName("alvXtru2");
358  alvXtru2->DefinePolygon(nVtx2,v2X,v2Y);
359  alvXtru2->DefineSection(0,-0.5*kAlvLength,0.0,0.0,1.0);
360  alvXtru2->DefineSection(1,+0.5*kAlvLength,0.0,0.0,1.0);
361 
362  //--- submodule type 3
363  TGeoXtru *alvXtru3 = new TGeoXtru(2); alvXtru3->SetName("alvXtru3");
364  alvXtru3->DefinePolygon(nVtx3,v3X,v3Y);
365  alvXtru3->DefineSection(0,-0.5*kAlvLength,0.0,0.0,1.0);
366  alvXtru3->DefineSection(1,+0.5*kAlvLength,0.0,0.0,1.0);
367 
368  //--- submodule type 4
369  TGeoXtru *alvXtru4 = new TGeoXtru(2); alvXtru4->SetName("alvXtru4");
370  alvXtru4->DefinePolygon(nVtx4,v4X,v4Y);
371  alvXtru4->DefineSection(0,-0.5*kAlvLength,0.0,0.0,1.0);
372  alvXtru4->DefineSection(1,+0.5*kAlvLength,0.0,0.0,1.0);
373 
374  //--- "loose" crystals in the corners or submodule type 5
375  TGeoXtru *alvXtru5 = new TGeoXtru(2); alvXtru5->SetName("alvXtru5");
376  alvXtru5->DefinePolygon(nVtx5,v5X,v5Y);
377  alvXtru5->DefineSection(0,-0.5*kAlvLength,0.0,0.0,1.0);
378  alvXtru5->DefineSection(1,+0.5*kAlvLength,0.0,0.0,1.0);
379 
380 
381  //--- shape of alveole hole to be subtracted from the bulk alveole shapes
382  TGeoBBox *alvHoleBox = new TGeoBBox("alvHoleBox",0.5*kAlvHoleWidth,0.5*kAlvHoleWidth,0.5*kAlvLength+0.1*mm);
383 
384  //--- gathering shapes and layout maps (AlvLayout#) into arrays
385  const Int_t *AlvLayout[kNSubmoduleType] = {AlvLayout0,AlvLayout1,AlvLayout2,AlvLayout3,AlvLayout4,AlvLayout5};
386  TGeoShape *alveoleBulkShape[]={alveoleBox,alvXtru1,alvXtru2,alvXtru3,alvXtru4,alvXtru5};
387  TGeoCompositeShape *alveoleShape[kNSubmoduleType];
388 
389  TString tname,holeVolFormula[kNSubmoduleType];
390  for(Int_t i=0; i<kNSubmoduleType; ++i) holeVolFormula[i] = "";
391  TGeoTranslation* holeInAlvXYtrans;
392 
393  //--- definition of subtraction formulas for the alveole types
394  for(Int_t i=0; i<16;++i){
395  tname = "t"; tname += i;
396  holeInAlvXYtrans = new TGeoTranslation(tname,firstCrystPosX + (i%4)*crystDPos, firstCrystPosY - (i/4)*crystDPos, 0.0);
397  holeInAlvXYtrans->RegisterYourself();
398  for(Int_t k=0; k<kNSubmoduleType; ++k){
399  if(AlvLayout[k][i]){
400  if(holeVolFormula[k] != "") holeVolFormula[k] += " + ";
401  holeVolFormula[k] += "alvHoleBox:"+tname;
402  }
403  }
404  }
405 
406  //--- subtraction of alveole holes
407  for(Int_t i=0; i<kNSubmoduleType; ++i){
408  TString shapeName = "alveoleShape"; shapeName += i;
409  TString shapeFormula = TString(alveoleBulkShape[i]->GetName()) + " - (" + holeVolFormula[i] + ")";
410  alveoleShape[i] = new TGeoCompositeShape(shapeName,shapeFormula);
411  cout<<"Subtraction formula for alveole type "<<i<<": "<<shapeFormula<<endl;
412  }
413 
414 
415  //--- the alveole volumes
416  TGeoVolume* BWECalveole[kNSubmoduleType];
417  for(Int_t i=0; i<kNSubmoduleType; ++i){
418  TString volName = "BWECalveole"; volName += i;
419  BWECalveole[i] = new TGeoVolume(volName, alveoleShape[i], gGeoMan->GetMedium("Prepreg"));
420  BWECalveole[i]->SetLineColor(kGray+3);
421  BWECalveole[i]->SetFillStyle(2001);
422  }
423 
424 
425  //--- the crystal and Al capsule volumes and attributes
426  TGeoBBox *crystalBox = new TGeoBBox("crystalBox",0.5*kCrWidth,0.5*kCrHeight,0.5*kCrLength);
427  TGeoBBox *capsuleBox = new TGeoBBox("capsuleBox",0.5*kCrWidth,0.5*kCrHeight,0.5*kCapsuleLength);
428 
429  TGeoVolume* PWOcrystal = new TGeoVolume("PWOCrystal",crystalBox,gGeoMan->GetMedium("PWO"));
430  TGeoVolume* crystCapsule = new TGeoVolume("crystCapsule",capsuleBox,gGeoMan->GetMedium("aluminium"));
431 
432  TGeoTranslation* crystInAlvZtrans = new TGeoTranslation(0.0,0.0,0.5*kCapsuleLength);
433  TGeoTranslation* capsuleInAlvZtrans = new TGeoTranslation(0.0,0.0,-0.5*kCrLength);
434 
435  PWOcrystal -> SetLineColor(kWhite);
436  crystCapsule -> SetLineColor(kGray);
437 
438 
439  //--- Al insert vol
440  TGeoBBox *insertBox = new TGeoBBox("insertBox", 0.5*kInsertWidth,0.5*kInsertWidth,0.5*kInsertLength); // 4x4 alveole bulk
441  TGeoBBox *insHoleBox1 = new TGeoBBox("insHoleBox1",0.5*kInsHoleWidth1,0.5*kInsHoleWidth1,0.5*kInsertLength+0.1); // 1x1 hole
442  TGeoBBox *insHoleBox2 = new TGeoBBox("insHoleBox2",0.5*kInsHoleWidth2,0.5*kInsHoleWidth1,0.5*kInsertLength+0.1); // 2x1 hole
443  TGeoBBox *insHoleBox4 = new TGeoBBox("insHoleBox4",0.5*kInsHoleWidth2,0.5*kInsHoleWidth2,0.5*kInsertLength+0.1); // 2x2 hole
444 
445  Double_t insVX[kNSubmoduleType][16],insVY[kNSubmoduleType][16];
446  Int_t nVtx[kNSubmoduleType] = {nVtx0,nVtx1,nVtx2,nVtx3,nVtx4,nVtx5};
447  TGeoXtru* insertXtru[kNSubmoduleType];
448  TGeoCompositeShape* insertShape[kNSubmoduleType];
449 
450  // Translations for holes and composition formulas
451  const Int_t nInsHoleTrans = 8;
452  TGeoTranslation* insHoleTrans[nInsHoleTrans];
453  insHoleTrans[0] = new TGeoTranslation("insHtr1",-0.25*kInsertWidth,+0.25*kInsertWidth,0.0); // 1: 2x2 up-left
454  insHoleTrans[1] = new TGeoTranslation("insHtr2",+0.25*kInsertWidth,+0.25*kInsertWidth,0.0); // 2: 2x2 up-right
455  insHoleTrans[2] = new TGeoTranslation("insHtr3",-0.25*kInsertWidth,-0.25*kInsertWidth,0.0); // 3: 2x2 down-left
456  insHoleTrans[3] = new TGeoTranslation("insHtr4",+0.25*kInsertWidth,-0.25*kInsertWidth,0.0); // 4: 2x2 down-right
457  insHoleTrans[4] = new TGeoTranslation("insHtr5",-0.25*kInsertWidth,-0.125*kInsertWidth,0.0); // 5: 2x1 down-left
458  insHoleTrans[5] = new TGeoTranslation("insHtr6",+0.25*kInsertWidth,-0.125*kInsertWidth,0.0); // 6: 2x1 down-right
459  insHoleTrans[6] = new TGeoTranslation("insHtr7",+0.125*kInsertWidth,+0.125*kInsertWidth,0.0); // 7: 1x1 up-right (middle)
460  insHoleTrans[7] = new TGeoTranslation("insHtr8",-0.375*kInsertWidth,-0.375*kInsertWidth,0.0); // 8: 1x1 down-left (corner)
461  for(Int_t i=0;i<nInsHoleTrans;++i) insHoleTrans[i]->RegisterYourself();
462  TString insSubFormula[kNSubmoduleType];
463  insSubFormula[0] = "insertBox - insHoleBox4:insHtr1 - insHoleBox4:insHtr2 - insHoleBox4:insHtr3 - insHoleBox4:insHtr4";
464  insSubFormula[1] = "insertXtru1 - insHoleBox4:insHtr1 - insHoleBox4:insHtr2 - insHoleBox4:insHtr3 - insHoleBox2:insHtr6";
465  insSubFormula[2] = "insertXtru2 - insHoleBox4:insHtr1 - insHoleBox4:insHtr2 - insHoleBox2:insHtr5 - insHoleBox2:insHtr6";
466  insSubFormula[3] = "insertXtru3 - insHoleBox4:insHtr1 - insHoleBox4:insHtr2 - insHoleBox2:insHtr5 - insHoleBox4:insHtr4";
467  insSubFormula[4] = "insertXtru4 - insHoleBox4:insHtr1 - insHoleBox1:insHtr7 - insHoleBox4:insHtr3 - insHoleBox4:insHtr4";
468  insSubFormula[5] = "insertXtru5 - insHoleBox1:insHtr8";
469 
470 
471  insertShape[0] = new TGeoCompositeShape("insertShape0",insSubFormula[0]);
472  TGeoVolume* insert[kNSubmoduleType];
473  insert[0] = new TGeoVolume("insert0",insertShape[0],gGeoMan->GetMedium("aluminium"));
474  insert[0]->SetLineColor(kYellow+1);
475 
476  for(Int_t subi=1;subi<kNSubmoduleType;++subi){
477  for(Int_t i=0; i<nVtx[subi]; ++i){
478  insVX[subi][i] = vX[subi][i] + (vX[subi][i]<0 ? 1.0:-1.0)*kInsAlvDiff;
479  insVY[subi][i] = vY[subi][i] + (vY[subi][i]<0 ? 1.0:-1.0)*kInsAlvDiff;
480  }
481  TString shapeName = "insertXtru"; shapeName += subi;
482  insertXtru[subi] = new TGeoXtru(2); insertXtru[subi]->SetName(shapeName);
483  insertXtru[subi]->DefinePolygon(nVtx[subi],insVX[subi],insVY[subi]);
484  insertXtru[subi]->DefineSection(0,-0.5*kInsertLength,0.0,0.0,1.0);
485  insertXtru[subi]->DefineSection(1,+0.5*kInsertLength,0.0,0.0,1.0);
486 
487  shapeName = "insertShape"; shapeName += subi;
488  insertShape[subi] = new TGeoCompositeShape(shapeName,insSubFormula[subi]);
489  TString volName = "insert"; volName += subi;
490  insert[subi] = new TGeoVolume(volName,insertShape[subi],gGeoMan->GetMedium("aluminium"));
491  insert[subi]->SetLineColor(kYellow+1);
492  }
493  TGeoTranslation* insertZtrans = new TGeoTranslation(0.0,0.0,-0.5*(kAlvLength+kInsertLength));
494 
495 
496 
497  //--- volume assemblies describing the BWEC submodules
498  TGeoVolumeAssembly* BWECsubmodule[kNSubmoduleType];
499  for(Int_t i=0; i<kNSubmoduleType; ++i){
500  TString volName = "BWECsubmodule"; volName += i;
501  BWECsubmodule[i] = new TGeoVolumeAssembly(volName);
502 
503  //--- adding the carbon fibre alveole
504  BWECsubmodule[i]->AddNode(BWECalveole[i],i);
505 
506  //--- adding the crystals and Al capsules
507  for(Int_t icr=0; icr<16;++icr){
508  TGeoTranslation *crystTrans = new TGeoTranslation(firstCrystPosX + (icr%4)*crystDPos, firstCrystPosY - (icr/4)*crystDPos, 0.5*kCapsuleLength);
509  TGeoTranslation *capslTrans = new TGeoTranslation(firstCrystPosX + (icr%4)*crystDPos, firstCrystPosY - (icr/4)*crystDPos,-0.5*kCrLength);
510  if( AlvLayout[i][icr] ){
511  BWECsubmodule[i]->AddNode(PWOcrystal ,icr, crystTrans);
512  BWECsubmodule[i]->AddNode(crystCapsule,icr, capslTrans);
513  }
514  }
515 
516  //--- adding Al insert
517  BWECsubmodule[i]->AddNode(insert[i], 0, insertZtrans);
518 
519  }
520 
521 
522 
523  //----------------------------- Quarters of the BWEC: side (6 submodules) + corner (4 submodules)
524  TGeoVolumeAssembly *BWECquarter = new TGeoVolumeAssembly("BWECquarter");
525 
526  // side
527  BWECquarter->AddNode(BWECsubmodule[0],0,new TGeoTranslation(kSubmodPos0[0],kSubmodPos0[1],kSubmodPos0[2]));
528  BWECquarter->AddNode(BWECsubmodule[0],1,new TGeoTranslation(kSubmodPos1[0],kSubmodPos1[1],kSubmodPos1[2]));
529  BWECquarter->AddNode(BWECsubmodule[0],2,new TGeoTranslation(kSubmodPos2[0],kSubmodPos2[1],kSubmodPos2[2]));
530  BWECquarter->AddNode(BWECsubmodule[1],3,new TGeoTranslation(kSubmodPos3[0],kSubmodPos3[1],kSubmodPos3[2]));
531  BWECquarter->AddNode(BWECsubmodule[2],4,new TGeoTranslation(kSubmodPos4[0],kSubmodPos4[1],kSubmodPos4[2]));
532  BWECquarter->AddNode(BWECsubmodule[3],5,new TGeoTranslation(kSubmodPos5[0],kSubmodPos5[1],kSubmodPos5[2]));
533 
534  // corner
535  BWECquarter->AddNode(BWECsubmodule[0],8,new TGeoTranslation(kSubmodPos6[0],kSubmodPos6[1],kSubmodPos6[2]));
536  BWECquarter->AddNode(BWECsubmodule[4],9,new TGeoTranslation(kSubmodPos7[0],kSubmodPos7[1],kSubmodPos7[2]));
537  BWECquarter->AddNode(BWECsubmodule[4],6,new TGeoTranslation(kSubmodPos8[0],kSubmodPos8[1],kSubmodPos8[2]));
538  BWECquarter->AddNode(BWECsubmodule[5],7,new TGeoTranslation(kSubmodPos9[0],kSubmodPos9[1],kSubmodPos9[2]));
539 
540  TGeoRotation *quarterRot[4];
541  for(Int_t qi=0; qi<4; ++qi){
542  quarterRot[qi] = new TGeoRotation;
543  TString rotName("quarterRot"); rotName += qi;
544  quarterRot[qi]->SetName(rotName);
545  quarterRot[qi]->RotateZ(90.*qi);
546  quarterRot[qi]->RegisterYourself();
547  BWECinnerVol->AddNode(BWECquarter,qi,quarterRot[qi]);
548  }
549 
550 
551 
552  //----------------------------- Dead material volumes: VIPs and cooling shells
553  //--- front VIP
554  TGeoTube *frontVIPTube = new TGeoTube("frontVIPTube",kInnerVIPRout,kSideVIPRin,0.5*kFrontVIPThickness);
555 
556  TGeoBBox *frontVIPrBox = new TGeoBBox("frontVIPBox",kSideVIPxyInnerWidth,kSideVIPxyInnerWidth,
557  0.5*kFrontVIPThickness+0.1);
558  TGeoCompositeShape* frontVIPshape = new TGeoCompositeShape("frontVIPshape","frontVIPTube*frontVIPBox");
559  TGeoVolume* frontVIP = new TGeoVolume("frontVIP",frontVIPshape,gGeoMan->GetMedium("FumedSilica"));
560  frontVIP->SetLineColor(kGray+1);
561  frontVIP->SetLineStyle(kSolid);
562  BWECinnerVol->AddNode(frontVIP,0,new TGeoTranslation(0.0,0.0,kFrontVIPZpos));
563 
564 
565  //--- front Cooling
566  TGeoTube *frontCoolingTube = new TGeoTube("frontCoolingTube",kInnerVIPRout,kSideVIPRin,0.5*kFrontCoolingThickness);
567 
568  TGeoBBox *frontCoolingBox = new TGeoBBox("frontCoolingBox",kSideVIPxyInnerWidth,kSideVIPxyInnerWidth,
569  0.5*kFrontCoolingThickness+0.1);
570  TGeoCompositeShape* frontCoolingshape = new TGeoCompositeShape("frontCoolingshape","frontCoolingTube*frontCoolingBox");
571  TGeoVolume* frontCooling = new TGeoVolume("frontCooling",frontCoolingshape,gGeoMan->GetMedium("CoolingShellMix"));
572  frontCooling->SetLineColor(kWhite);
573  frontCooling->SetLineStyle(kSolid);
574  BWECinnerVol->AddNode(frontCooling,0,new TGeoTranslation(0.0,0.0,kFrontCoolingZpos));
575 
576 
577  //--- Side VIP
578  TGeoTube* sideVIPTubeOut = new TGeoTube("sideVIPTubeOut",1.0,kSideVIPRout,0.5*kSideVIPLength);
579  TGeoTube* sideVIPTubeIn = new TGeoTube("sideVIPTubeIn", 0.0,kSideVIPRin, 0.5*kSideVIPLength+0.1);
580  TGeoBBox *sideVIPBoxOut = new TGeoBBox("sideVIPBoxOut",kSideVIPxyOuterWidth,kSideVIPxyOuterWidth,0.5*kSideVIPLength+0.11);
581  TGeoBBox *sideVIPBoxIn = new TGeoBBox("sideVIPBoxIn", kSideVIPxyInnerWidth,kSideVIPxyInnerWidth,0.5*kSideVIPLength+0.11);
582  TGeoCompositeShape* sideVIPshape =
583  new TGeoCompositeShape("sideVIPshape","(sideVIPTubeOut*sideVIPBoxOut)-(sideVIPTubeIn*sideVIPBoxIn)" );
584  TGeoVolume* sideVIP = new TGeoVolume("sideVIP",sideVIPshape,gGeoMan->GetMedium("FumedSilica"));
585  sideVIP->SetLineColor(kGray+1);
586  sideVIP->SetLineStyle(kSolid);
587  BWECinnerVol->AddNode(sideVIP,0,new TGeoTranslation(0.0,0.0,kSideVIPZpos));
588 
589  //--- Inner VIP
590  TGeoTube* innerVIPTube = new TGeoTube("sideVIPTubeOut",kInnerVIPRin,kInnerVIPRout,0.5*kSideVIPLength);
591  TGeoVolume* innerVIP = new TGeoVolume("innerVIP",innerVIPTube,gGeoMan->GetMedium("FumedSilica"));
592  innerVIP->SetLineColor(kGray+1);
593  innerVIP->SetLineStyle(kSolid);
594  BWECinnerVol->AddNode(innerVIP,0,new TGeoTranslation(0.0,0.0,kSideVIPZpos));
595 
596 
597 
598  //--- Side and inner Cooling
599  TGeoTube *sideCoolingTube = new TGeoTube("sideCoolingTube",kInnerVIPRout,kSideVIPRin,0.5*(kAlvLength+kInsertLength));
600  TGeoBBox *sideCoolingBox = new TGeoBBox("sideCoolingBox",kSideVIPxyInnerWidth,kSideVIPxyInnerWidth,0.5*(kAlvLength+kInsertLength)+0.1);
601 
602  //--- Complex shape for the hole. Building it up from the data for the alveole Xtru objects.
603  Double_t shVX[kNSubmoduleType][16],shVY[kNSubmoduleType][16];
604  TGeoXtru *shellHXtru[kNSubmoduleType];
605 
606  for(Int_t subi=0;subi<kNSubmoduleType;++subi){
607  for(Int_t i=0; i<nVtx[subi]; ++i){
608  shVX[subi][i] = vX[subi][i] + ((vX[subi][i]<0) ? -1.0:1.0)*(kDistBtwAlvs+(subi==0?0.5*mm:0.1*mm));
609  shVY[subi][i] = vY[subi][i] + ((vY[subi][i]<0) ? -1.0:1.0)*(kDistBtwAlvs+(subi==0?0.5*mm:0.1*mm));
610  }
611  if(subi == 5) { // special case for the "loose" crystal
612  shVX[subi][1] = vX[subi][1] + kDistBtwAlvs + 0.1*mm;
613  shVX[subi][2] = vX[subi][2] + kDistBtwAlvs + 0.1*mm; shVY[subi][2] = vY[subi][2] + kDistBtwAlvs + 0.1*mm;
614  shVY[subi][3] = vY[subi][3] + kDistBtwAlvs + 0.1*mm;
615  }
616  TString shapeName = "shXtru"; shapeName += subi;
617  shellHXtru[subi] = new TGeoXtru(2); shellHXtru[subi]->SetName(shapeName);
618  shellHXtru[subi]->DefinePolygon(nVtx[subi],shVX[subi],shVY[subi]);
619  shellHXtru[subi]->DefineSection(0,-0.5*(kAlvLength+kInsertLength+2.),0.0,0.0,1.0);
620  shellHXtru[subi]->DefineSection(1,+0.5*(kAlvLength+kInsertLength+2.),0.0,0.0,1.0);
621  }
622 
623  TGeoTranslation *shTransl[kNsubmodQuarter];
626  TString shXtruName[kNsubmodQuarter]={"shXtru0","shXtru0","shXtru0","shXtru1","shXtru2",
627  "shXtru3","shXtru0","shXtru4","shXtru4","shXtru5"};
628 
629  TString unionFormula="";
630  for(Int_t i=0; i<kNsubmodQuarter; ++i){
631  TString trName = "shTr"; trName += i;
632  shTransl[i] = new TGeoTranslation(trName,shTrV[i][0],shTrV[i][1],shTrV[i][2]-kInsertLength);
633  shTransl[i]->RegisterYourself();
634  unionFormula += (unionFormula=="")?"":" + ";
635  unionFormula += shXtruName[i]+":"+trName;
636  }
637  cout<<unionFormula<<endl;
638  TGeoCompositeShape* sideCoolingHoleShape = new TGeoCompositeShape("sideCoolHole",unionFormula);
639 
640  TString sideCoolingFormula = "sideCoolingTube*sideCoolingBox";
641  for(Int_t qi=0; qi<4; ++qi) sideCoolingFormula += TString(" - sideCoolHole:")+quarterRot[qi]->GetName();
642  cout<<sideCoolingFormula<<endl;
643 
644  TGeoCompositeShape* sideCoolingShape = new TGeoCompositeShape("sideCoolingShape",sideCoolingFormula);
645  TGeoVolume* sideCooling = new TGeoVolume("sideCooling",sideCoolingShape,gGeoMan->GetMedium("aluminium"));
646  sideCooling->SetLineColor(kWhite);
647  sideCooling->SetLineStyle(kSolid);
648  BWECinnerVol->AddNodeOverlap(sideCooling,0,new TGeoTranslation(0.0,0.0,kModuleZpos-0.5*kInsertLength));
649 
650 
651 
652 
653  // checks:
655  cout<<"check: "<<0.5*kInnerVolLength - (kModuleZpos + 0.5*kAlvLength + kFrontVIPThickness + kFrontCoolingThickness)<<endl;;
656 
657  // to be used in PndEmc.cxx for calculating the position of the bw emc
658  TGeoNode *outer=top->FindNode("BWECouterVol_0");
659  if(outer != NULL){
660  TGeoCompositeShape* shape=(TGeoCompositeShape*)outer->GetVolume()->GetShape();
661  Double_t origin[3]={0,0,0}, zdir[3]={0,0,1};
662  Double_t halfLength = shape->DistFromInside(origin,zdir);
663  printf("halfLength = %e, fullLength = %e\n",halfLength,2.*halfLength);
664  }
665 
666 
667 
668  gGeoMan->CloseGeometry();
669 
670 
671  TString outfile = "/home/luigi/him/sw/pandaroot6/fairsoft_may16p1/pandaroot/macro/emc/dedicated/emc_module4_2017-tmp.root";
672  TFile *fout = new TFile(outfile,"RECREATE");
673  //top->SetDirectory(fout);
674  top->Write();
675  fout->Close();
676 
677  //gGeoMan->Export(outfile);
678 
679 
680 
681  //----------------------------- visibility
682  PWOcrystal -> SetVisibility(kFALSE);
683  crystCapsule -> SetVisibility(kTRUE);
684  BWECalveole[0] -> SetVisibility(kTRUE);
685  BWECalveole[1] -> SetVisibility(kTRUE);
686  BWECalveole[2] -> SetVisibility(kTRUE);
687  BWECalveole[3] -> SetVisibility(kTRUE);
688  BWECalveole[4] -> SetVisibility(kTRUE);
689  BWECalveole[5] -> SetVisibility(kTRUE);
690  insert[0] -> SetVisibility(kTRUE);
691  insert[1] -> SetVisibility(kTRUE);
692  insert[2] -> SetVisibility(kTRUE);
693  insert[3] -> SetVisibility(kTRUE);
694  insert[4] -> SetVisibility(kTRUE);
695  insert[5] -> SetVisibility(kTRUE);
696  frontVIP -> SetVisibility(kFALSE);
697  sideVIP -> SetVisibility(kFALSE);
698  innerVIP -> SetVisibility(kFALSE);
699  frontCooling -> SetVisibility(kFALSE);
700  sideCooling -> SetVisibility(kFALSE);
701  BWECinnerVol -> SetVisibility(kFALSE);
702  BWECouterVol -> SetVisibility(kFALSE);
703 
704 
705  crystCapsule -> SetLineWidth(1);
706  BWECalveole[0] -> SetLineWidth(1);
707  BWECalveole[1] -> SetLineWidth(1);
708  BWECalveole[2] -> SetLineWidth(1);
709  BWECalveole[3] -> SetLineWidth(1);
710  BWECalveole[4] -> SetLineWidth(1);
711  BWECalveole[5] -> SetLineWidth(1);
712  insert[0] -> SetLineWidth(1);
713  insert[1] -> SetLineWidth(1);
714  insert[2] -> SetLineWidth(1);
715  insert[3] -> SetLineWidth(1);
716  insert[4] -> SetLineWidth(1);
717  insert[5] -> SetLineWidth(1);
718  frontVIP -> SetLineWidth(1);
719  sideVIP -> SetLineWidth(1);
720  innerVIP -> SetLineWidth(1);
721  frontCooling -> SetLineWidth(1);
722  sideCooling -> SetLineWidth(1);
723  BWECinnerVol -> SetLineWidth(1);
724  BWECouterVol -> SetLineWidth(1);
725 
726  top->Raytrace();
727  gStyle->SetCanvasPreferGL(kTRUE);
728  gGeoManager->SetTopVisible();
729  gGeoManager->SetVisOption(0);
730  gGeoManager->SetVisLevel(11);
731  //top->Draw("ogl");
732  top->Draw("ogle");
733 
734 
735  new TBrowser;
736 
737 }
static const Int_t AlvLayout2[]
static const Int_t AlvLayout1[]
printf("RealTime=%f seconds, CpuTime=%f seconds\n", rtime, ctime)
static const Double_t kSideVIPLength
static const Double_t kInsHoleWidth1
static const Double_t v4Y[nVtx4]
static const Int_t nVtx2
static const Double_t kSubmodPos4[3]
static const Double_t kSubmodPos8[3]
static const Double_t kCrLength
static const Double_t kSideVIPZpos
static const Double_t kCoverThickness
FairGeoLoader * geoLoad
Int_t i
Definition: run_full.C:25
static const Double_t kInnerVolZpos
FairGeoMedia * Media
static const Double_t v0X[nVtx0]
TGeoManager * gGeoMan
static const Double_t v0Y[nVtx0]
static const Double_t kFrontCoolingZpos
static const Int_t nVtx3
static const Int_t AlvLayout4[]
static const Double_t v3X[nVtx3]
static const Double_t kSubmodPos0[3]
static const Double_t kSingleAlvWidth
static const Double_t v5Y[nVtx5]
static const Double_t kCrWidth
TString rotName
static const Double_t kSubmodPos6[3]
static const Int_t kNsubmodQuarter
static const Double_t kFrontVIPZpos
static const Double_t kSubmodPosUnit
static const Double_t kDistBtwAlvs
static const Double_t kBWECinnerRadius
static const Int_t AlvLayout3[]
trDW RegisterYourself()
static const Double_t k4x4AlvWidth
static const Double_t kMPThickness
TGeoManager * gGeoManager
static const Double_t v4X[nVtx4]
static const Double_t kInsertWidth
TGeoVolume * top
static const Int_t AlvLayout5[]
static const Double_t kInsAlvDiff
Int_t t1
Definition: hist-t7.C:106
static const Double_t kBWECouterRadius
static const Double_t v1Y[nVtx1]
static const Double_t kInnerVolLength
static const Double_t crystDPos
static const Double_t v3Y[nVtx3]
static const Int_t nVtx4
static const Double_t kModuleZpos
FairGeoBuilder * geobuild
static const Double_t kMPInsDist
TGeoShape * shape
static const Int_t nVtx1
static const Double_t v1X[nVtx1]
Double_t
static const Double_t v5X[nVtx5]
static const Double_t kAlvHoleWidth
static const Double_t firstCrystPosX
static const Double_t kSubmodPos1[3]
static const Int_t nVtx5
static const Double_t kSideVIPRout
static const Double_t kInsertLength
static const Int_t nVtx0
static const Double_t kSubmodPos5[3]
static const Double_t kInnerVIPRin
static const Double_t kCapsuleLength
static const Double_t kCrHeight
static const Double_t v2Y[nVtx2]
static const Double_t kSubmodPos7[3]
static const Double_t kBWECxyWidth
h1p SetLineWidth(2)
Double_t const mm
static const Double_t kBWECzLength
static const Double_t kSubmodPos9[3]
static const Double_t kSideVIPxyOuterWidth
static const Double_t kAlvWallThickness
static const Double_t kFrontVIPThickness
static const Double_t kFrontCoolingThickness
static const Double_t kSubmodPos3[3]
static const Double_t kCornerShift
static const Double_t kInnerVIPRout
void createRootGeoFileBwEnd_2017()
static const Double_t kSideVIPRin
const Int_t kNSubmoduleType
static const Double_t firstCrystPosY
FairGeoInterface * geoFace
static const Double_t kOuterSideR
vDisk SetLineColor(colYellow)
static const Int_t AlvLayout0[]
static const Double_t kSubmodPos2[3]
static const Double_t v2X[nVtx2]
static const Double_t kAlvLength
static const Double_t kCrystFrontCoolingDist
static const Double_t kSideVIPThickness
TString outfile
static const Double_t kSideVIPxyInnerWidth
static const Double_t kSideCoolingThickness
static const Double_t kInsHoleWidth2