Fixing the (main part of) coding conventions.
[u/mrichter/AliRoot.git] / ITS / UPGRADE / AliITSUv0Layer.cxx
1 /**************************************************************************\r
2  * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *\r
3  *                                                                        *\r
4  * Author: The ALICE Off-line Project.                                    *\r
5  * Contributors are mentioned in the code where appropriate.              *\r
6  *                                                                        *\r
7  * Permission to use, copy, modify and distribute this software and its   *\r
8  * documentation strictly for non-commercial purposes is hereby granted   *\r
9  * without fee, provided that the above copyright notice appears in all   *\r
10  * copies and that both the copyright notice and this permission notice   *\r
11  * appear in the supporting documentation. The authors make no claims     *\r
12  * about the suitability of this software for any purpose. It is          *\r
13  * provided "as is" without express or implied warranty.                  *\r
14  **************************************************************************/\r
15 \r
16 //*************************************************************************\r
17 // This class Defines the Geometry for the ITS Upgrade using TGeo\r
18 // This is a work class used to study different configurations\r
19 // during the development of the new ITS structure.\r
20 //\r
21 //  Mario Sitta <sitta@to.infn.it>\r
22 //  Chinorat Kobdaj (kobdaj@g.sut.ac.th)\r
23 //*************************************************************************\r
24 \r
25 \r
26 /* $Id: AliITSUv0Layer.cxx  */\r
27 // General Root includes\r
28 #include <TMath.h>\r
29 // Root Geometry includes\r
30 //#include <AliLog.h>\r
31 #include <TGeoManager.h>\r
32 #include <TGeoVolume.h>\r
33 #include <TGeoPcon.h>\r
34 #include <TGeoCone.h>\r
35 #include <TGeoTube.h> // contaings TGeoTubeSeg\r
36 #include <TGeoArb8.h>\r
37 #include <TGeoXtru.h>\r
38 #include <TGeoCompositeShape.h>\r
39 #include <TGeoMatrix.h>\r
40 #include "AliITSUv0Layer.h"\r
41 #include "AliITSUGeomTGeo.h"\r
42 #include <TGeoBBox.h>\r
43 #include <TGeoShape.h>\r
44 #include <TGeoTrd1.h>\r
45 using namespace TMath;\r
46 \r
47 const Double_t AliITSUv0Layer::fgkDefaultSensorThick = 300*fgkmicron;\r
48 const Double_t AliITSUv0Layer::fgkDefaultLadderThick =   1*fgkcm;\r
49 \r
50 ClassImp(AliITSUv0Layer)\r
51 \r
52 #define SQ(A) (A)*(A)\r
53 \r
54 //________________________________________________________________________\r
55 AliITSUv0Layer::AliITSUv0Layer(): \r
56   AliITSv11Geometry(),\r
57   fLayerNumber(0),\r
58   fPhi0(0),\r
59   fLayRadius(0),\r
60   fZLength(0),\r
61   fSensorThick(0),\r
62   fLadderThick(0),\r
63   fLadderWidth(0),\r
64   fLadderTilt(0),\r
65   fNLadders(0),\r
66   fNModules(0),\r
67   fDetTypeID(0),\r
68   fIsTurbo(0),\r
69   fBuildLevel(0),\r
70   fStaveModel(kModel0)\r
71 {\r
72   //\r
73   // Standard constructor\r
74   //\r
75 }\r
76 \r
77 //________________________________________________________________________\r
78 AliITSUv0Layer::AliITSUv0Layer(Int_t debug): \r
79   AliITSv11Geometry(debug),\r
80   fLayerNumber(0),\r
81   fPhi0(0),\r
82   fLayRadius(0),\r
83   fZLength(0),\r
84   fSensorThick(0),\r
85   fLadderThick(0),\r
86   fLadderWidth(0),\r
87   fLadderTilt(0),\r
88   fNLadders(0),\r
89   fNModules(0),\r
90   fDetTypeID(0),\r
91   fIsTurbo(0),\r
92   fBuildLevel(0),\r
93   fStaveModel(kModel0)\r
94 {\r
95   //\r
96   // Constructor setting debugging level\r
97   //\r
98 }\r
99 \r
100 //________________________________________________________________________\r
101 AliITSUv0Layer::AliITSUv0Layer(Int_t lay, Int_t debug): \r
102   AliITSv11Geometry(debug),\r
103   fLayerNumber(lay),\r
104   fPhi0(0),\r
105   fLayRadius(0),\r
106   fZLength(0),\r
107   fSensorThick(0),\r
108   fLadderThick(0),\r
109   fLadderWidth(0),\r
110   fLadderTilt(0),\r
111   fNLadders(0),\r
112   fNModules(0),\r
113   fDetTypeID(0),\r
114   fIsTurbo(0),\r
115   fBuildLevel(0),\r
116   fStaveModel(kModel0)\r
117 {\r
118   //\r
119   // Constructor setting layer number and debugging level\r
120   //\r
121 }\r
122 \r
123 //________________________________________________________________________\r
124 AliITSUv0Layer::AliITSUv0Layer(Int_t lay, Bool_t turbo, Int_t debug): \r
125   AliITSv11Geometry(debug),\r
126   fLayerNumber(lay),\r
127   fPhi0(0),\r
128   fLayRadius(0),\r
129   fZLength(0),\r
130   fSensorThick(0),\r
131   fLadderThick(0),\r
132   fLadderWidth(0),\r
133   fLadderTilt(0),\r
134   fNLadders(0),\r
135   fNModules(0),\r
136   fDetTypeID(0),\r
137   fIsTurbo(turbo),\r
138   fBuildLevel(0),\r
139   fStaveModel(kModel0)\r
140 {\r
141   //\r
142   // Constructor setting layer number and debugging level\r
143   // for a "turbo" layer (i.e. where ladders overlap in phi)\r
144   //\r
145 }\r
146 \r
147 //________________________________________________________________________\r
148 AliITSUv0Layer::AliITSUv0Layer(const AliITSUv0Layer &s):\r
149   AliITSv11Geometry(s.GetDebug()),\r
150   fLayerNumber(s.fLayerNumber),\r
151   fPhi0(s.fPhi0),\r
152   fLayRadius(s.fLayRadius),\r
153   fZLength(s.fZLength),\r
154   fSensorThick(s.fSensorThick),\r
155   fLadderThick(s.fLadderThick),\r
156   fLadderWidth(s.fLadderWidth),\r
157   fLadderTilt(s.fLadderTilt),\r
158   fNLadders(s.fNLadders),\r
159   fNModules(s.fNModules),\r
160   fDetTypeID(s.fDetTypeID),\r
161   fIsTurbo(s.fIsTurbo),\r
162   fBuildLevel(s.fBuildLevel),\r
163   fStaveModel(s.fStaveModel)\r
164 {\r
165   //\r
166   // Copy constructor\r
167   //\r
168 }\r
169 \r
170 //________________________________________________________________________\r
171 AliITSUv0Layer& AliITSUv0Layer::operator=(const AliITSUv0Layer &s)\r
172 {\r
173   //\r
174   // Assignment operator \r
175   //\r
176   if(&s == this) return *this;\r
177 \r
178   fLayerNumber = s.fLayerNumber;\r
179   fPhi0        = s.fPhi0;\r
180   fLayRadius   = s.fLayRadius;\r
181   fZLength     = s.fZLength;\r
182   fSensorThick = s.fSensorThick;\r
183   fLadderThick = s.fLadderThick;\r
184   fLadderWidth = s.fLadderWidth;\r
185   fLadderTilt  = s.fLadderTilt;\r
186   fNLadders    = s.fNLadders;\r
187   fNModules    = s.fNModules;\r
188   fIsTurbo     = s.fIsTurbo;\r
189   fDetTypeID   = s.fDetTypeID;\r
190   fBuildLevel  = s.fBuildLevel;\r
191   fStaveModel  = s.fStaveModel;\r
192 \r
193   return *this;\r
194 }\r
195 \r
196 //________________________________________________________________________\r
197 AliITSUv0Layer::~AliITSUv0Layer() {\r
198   //\r
199   // Destructor\r
200   //\r
201 }\r
202 \r
203 //________________________________________________________________________\r
204 void AliITSUv0Layer::CreateLayer(TGeoVolume *moth){\r
205 //\r
206 // Creates the actual Layer and places inside its mother volume\r
207 //\r
208 // Input:\r
209 //         moth : the TGeoVolume owing the volume structure\r
210 //\r
211 // Output:\r
212 //\r
213 // Return:\r
214 //\r
215 // Created:      17 Jun 2011  Mario Sitta\r
216 // Updated:      08 Jul 2011  Mario Sitta\r
217 // Updated:      20 May 2013  Mario Sitta  Layer is Assembly instead of Tube\r
218 //\r
219   // Local variables\r
220   char volname[30];\r
221   Double_t xpos, ypos, zpos;\r
222   Double_t alpha;\r
223 \r
224 \r
225   // Check if the user set the proper parameters\r
226   if (fLayRadius <= 0) AliFatal(Form("Wrong layer radius (%f)",fLayRadius));\r
227   if (fZLength   <= 0) AliFatal(Form("Wrong layer length (%f)",fZLength));\r
228   if (fNLadders  <= 0) AliFatal(Form("Wrong number of ladders (%d)",fNLadders));\r
229   if (fNModules  <= 0) AliFatal(Form("Wrong number of modules (%d)",fNModules));\r
230 \r
231   if (fLadderThick <= 0) {\r
232     AliInfo(Form("Ladder thickness wrong or not set (%f), using default (%f)",\r
233                  fLadderThick,fgkDefaultLadderThick));\r
234     fLadderThick = fgkDefaultLadderThick;\r
235   }\r
236 \r
237   if (fSensorThick <= 0) {\r
238     AliInfo(Form("Sensor thickness wrong or not set (%f), using default (%f)",\r
239                  fSensorThick,fgkDefaultSensorThick));\r
240     fSensorThick = fgkDefaultSensorThick;\r
241   }\r
242 \r
243   if (fSensorThick > fLadderThick) {\r
244     AliWarning(Form("Sensor thickness (%f) is greater than ladder thickness (%f), fixing",\r
245                  fSensorThick,fLadderThick));\r
246     fSensorThick = fLadderThick;\r
247   }\r
248 \r
249 \r
250   // If a Turbo layer is requested, do it and exit\r
251   if (fIsTurbo) {\r
252     CreateLayerTurbo(moth);\r
253     return;\r
254   }\r
255 \r
256 \r
257   // First create the ladder container\r
258   alpha = (360./(2*fNLadders))*DegToRad();\r
259 \r
260   //  fLadderWidth = fLayRadius*Tan(alpha);\r
261 \r
262   snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLayerPattern(),fLayerNumber);\r
263   TGeoVolume *layVol = new TGeoVolumeAssembly(volname);\r
264   layVol->SetUniqueID(fDetTypeID);\r
265 \r
266 //  layVol->SetVisibility(kFALSE);\r
267   layVol->SetVisibility(kTRUE);\r
268   layVol->SetLineColor(1);\r
269 \r
270   TGeoVolume *laddVol = CreateLadder();\r
271 \r
272 \r
273   // Now build up the layer\r
274   alpha = 360./fNLadders;\r
275   Double_t r = fLayRadius + ((TGeoBBox*)laddVol->GetShape())->GetDY();\r
276   for (Int_t j=0; j<fNLadders; j++) {\r
277     Double_t phi = j*alpha + fPhi0;\r
278     xpos = r*CosD(phi);// r*SinD(-phi);\r
279     ypos = r*SinD(phi);// r*CosD(-phi);\r
280     zpos = 0.;\r
281     phi += 90;\r
282     layVol->AddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos,\r
283                                                     new TGeoRotation("",phi,0,0)));\r
284   }\r
285 \r
286 \r
287   // Finally put everything in the mother volume\r
288   moth->AddNode(layVol, 1, 0);\r
289 \r
290 \r
291   // Upgrade geometry is served\r
292   return;\r
293 }\r
294 \r
295 //________________________________________________________________________\r
296 void AliITSUv0Layer::CreateLayerTurbo(TGeoVolume *moth){\r
297 //\r
298 // Creates the actual Layer and places inside its mother volume\r
299 // A so-called "turbo" layer is a layer where ladders overlap in phi\r
300 // User can set width and tilt angle, no check is performed here\r
301 // to avoid volume overlaps\r
302 //\r
303 // Input:\r
304 //         moth : the TGeoVolume owing the volume structure\r
305 //\r
306 // Output:\r
307 //\r
308 // Return:\r
309 //\r
310 // Created:      08 Jul 2011  Mario Sitta\r
311 // Updated:      08 Mar 2012  Mario Sitta  Correct way to compute container R\r
312 // Updated:      20 May 2013  Mario Sitta  Layer is Assemgbly instead of Tube\r
313 //\r
314 \r
315 \r
316   // Local variables\r
317   char volname[30];\r
318   Double_t xpos, ypos, zpos;\r
319   Double_t alpha;\r
320 \r
321 \r
322   // Check if the user set the proper (remaining) parameters\r
323   if (fLadderWidth <= 0)\r
324     AliFatal(Form("Wrong ladder width (%f)",fLadderWidth));\r
325   if (Abs(fLadderTilt) > 45)\r
326     AliWarning(Form("Ladder tilt angle (%f) greater than 45deg",fLadderTilt));\r
327 \r
328 \r
329   snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLayerPattern(), fLayerNumber);\r
330   TGeoVolume *layVol = new TGeoVolumeAssembly(volname);\r
331   layVol->SetUniqueID(fDetTypeID);\r
332   layVol->SetVisibility(kTRUE);\r
333   layVol->SetLineColor(1);\r
334   TGeoVolume *laddVol = CreateLadder();\r
335 \r
336 \r
337   // Now build up the layer\r
338 \r
339 \r
340   // Now build up the layer\r
341   alpha = 360./fNLadders;\r
342   Double_t r = fLayRadius + ((TGeoBBox*)laddVol->GetShape())->GetDY();\r
343   for (Int_t j=0; j<fNLadders; j++) {\r
344     Double_t phi = j*alpha + fPhi0;\r
345     xpos = r*CosD(phi);// r*SinD(-phi);\r
346     ypos = r*SinD(phi);// r*CosD(-phi);\r
347     zpos = 0.;\r
348     phi += 90;\r
349     layVol->AddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos,\r
350                                                     new TGeoRotation("", phi-fLadderTilt,0,0)));\r
351   }\r
352 \r
353 \r
354   // Finally put everything in the mother volume\r
355   moth->AddNode(layVol, 1, 0);\r
356 \r
357   return;\r
358 }\r
359 \r
360 //________________________________________________________________________\r
361 TGeoVolume* AliITSUv0Layer::CreateLadder(const TGeoManager *mgr){\r
362 //\r
363 // Creates the actual Ladder\r
364 //\r
365 // Input:\r
366 //         mgr  : the GeoManager (used only to get the proper material)\r
367 //\r
368 // Output:\r
369 //\r
370 // Return:\r
371 //\r
372 // Created:      22 Jun 2011  Mario Sitta\r
373 //\r
374 \r
375   char volname[30];\r
376   Double_t xlen, ylen, zlen;\r
377   Double_t xpos, ypos, zpos, zmod;\r
378   Double_t alpha;\r
379 \r
380 \r
381   // First create all needed shapes\r
382   alpha = (360./(2*fNLadders))*DegToRad();\r
383 \r
384   // The ladder\r
385   xlen = fLayRadius*Tan(alpha);\r
386   if (fIsTurbo) xlen = 0.5*fLadderWidth;\r
387   ylen = 0.5*fLadderThick;\r
388   zlen = 0.5*fZLength;\r
389 \r
390   Double_t yplus = 0.46;\r
391   //  Double_t origin[]={0,-yplus/2,0};\r
392   //  TGeoBBox *ladder = new TGeoBBox(xlen, ylen+yplus/2, zlen, origin);\r
393   TGeoXtru *ladder = new TGeoXtru(2); //z sections\r
394   Double_t xv[5] = {xlen,xlen,0,-xlen,-xlen};\r
395   Double_t yv[5] = {ylen+0.09,-0.15,-yplus-fSensorThick,-0.15,ylen+0.09};    \r
396   ladder->DefinePolygon(5,xv,yv);\r
397   ladder->DefineSection(0,-zlen,0,0,1.);\r
398   ladder->DefineSection(1,+zlen,0,0,1.);\r
399   \r
400 \r
401   // We have all shapes: now create the real volumes\r
402   TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");\r
403 \r
404   snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
405   TGeoVolume *laddVol = new TGeoVolume(volname, ladder, medAir);\r
406 \r
407   //  laddVol->SetVisibility(kFALSE);\r
408   laddVol->SetVisibility(kTRUE);\r
409   laddVol->SetLineColor(2);\r
410   TGeoVolume *modVol = CreateModule(xlen,ylen, zlen);\r
411 \r
412 \r
413   // Now build up the ladder\r
414   zmod = ((TGeoBBox*)modVol->GetShape())->GetDZ();\r
415   for (Int_t j=0; j<fNModules; j++) {\r
416     xpos = 0.;\r
417     ypos = 0.01;  // Remove small overlap - M.S: 21may13\r
418     zpos = -ladder->GetDZ() + j*2*zmod + zmod;\r
419     laddVol->AddNode(modVol, j, new TGeoTranslation(xpos, ypos, zpos));\r
420   }\r
421  \r
422 \r
423   // put mechanical stave structure, only inner barrel up to now\r
424   if (fLayerNumber<3) {\r
425     TGeoVolume *mechLaddVol = CreateStaveStruct(xlen,zlen); \r
426     if (mechLaddVol)\r
427       laddVol->AddNode(mechLaddVol, fNModules, new TGeoCombiTrans(0, -0.15-ylen, 0, new TGeoRotation("",0, 0, 180)));\r
428   }\r
429   \r
430 \r
431   // Done, return the ladder\r
432   return laddVol;\r
433 }\r
434 \r
435 //________________________________________________________________________\r
436 TGeoVolume* AliITSUv0Layer::CreateStaveStruct(const Double_t xlad,\r
437                                               const Double_t zlad,\r
438                                               const TGeoManager *mgr){\r
439 //\r
440 // Create the mechanical stave structure\r
441 //\r
442 // Input:\r
443 //         xlad : X length\r
444 //         zlad : Z length\r
445 //         mgr  : the GeoManager (used only to get the proper material)\r
446 //\r
447 // Output:\r
448 //\r
449 // Return:\r
450 //\r
451 // Created:      22 Mar 2013  Chinorat Kobdaj\r
452 // Updated:      26 Apr 2013  Mario Sitta\r
453 //\r
454 \r
455   TGeoVolume *mechLaddVol = 0;\r
456 \r
457   switch (fStaveModel) {\r
458     case kModelDummy:\r
459       mechLaddVol = CreateStaveModelDummy(xlad,zlad,mgr);\r
460       break;\r
461     case kModel0:\r
462       mechLaddVol = CreateStaveModel0(xlad,zlad,mgr);\r
463       break;\r
464     case kModel1:\r
465       mechLaddVol = CreateStaveModel1(xlad,zlad,mgr);\r
466       break;\r
467     case kModel21:\r
468       mechLaddVol = CreateStaveModel21(xlad,zlad,mgr);\r
469       break;\r
470     case kModel22:\r
471       mechLaddVol = CreateStaveModel22(xlad,zlad,mgr);\r
472       break;\r
473     case kModel3:\r
474       mechLaddVol = CreateStaveModel3(xlad,zlad,mgr);\r
475       break;\r
476     default:\r
477       AliFatal(Form("Unknown stave model %d",fStaveModel));\r
478       break;\r
479   }\r
480 \r
481   return mechLaddVol; \r
482 }\r
483 \r
484 \r
485 //________________________________________________________________________\r
486 TGeoVolume* AliITSUv0Layer::CreateStaveModelDummy(const Double_t ,\r
487                                               const Double_t ,\r
488                                               const TGeoManager *) const {\r
489 //\r
490 // Create dummy stave\r
491 //\r
492 // Input:\r
493 //         xlad : X length\r
494 //         zlad : Z length\r
495 //         mgr  : the GeoManager (used only to get the proper material)\r
496 //\r
497 // Output:\r
498 //\r
499 // Return:\r
500 //\r
501 // Created:      22 Mar 2013  Chinorat Kobdaj\r
502 // Updated:      26 Apr 2013  Mario Sitta\r
503 //\r
504 \r
505   // Done, return the stave structur\r
506   return 0;\r
507 }\r
508 \r
509 //________________________________________________________________________\r
510 TGeoVolume* AliITSUv0Layer::CreateStaveModel0(const Double_t xlad,\r
511                                               const Double_t zlad,\r
512                                               const TGeoManager *mgr){\r
513 //\r
514 // Create the mechanical stave structure for Model 0 of TDR\r
515 //\r
516 // Input:\r
517 //         xlad : X length\r
518 //         zlad : Z length\r
519 //         mgr  : the GeoManager (used only to get the proper material)\r
520 //\r
521 // Output:\r
522 //\r
523 // Return:\r
524 //\r
525 // Created:      22 Mar 2013  Chinorat Kobdaj\r
526 // Updated:      26 Apr 2013  Mario Sitta\r
527 //\r
528   \r
529   // Materials defined in AliITSUv0\r
530   TGeoMedium *medAir    = mgr->GetMedium("ITS_AIR$");\r
531   TGeoMedium *medWater  = mgr->GetMedium("ITS_WATER$");\r
532 \r
533   TGeoMedium *medM60J3K    = mgr->GetMedium("ITS_M60J3K$"); \r
534   TGeoMedium *medKapton    = mgr->GetMedium("ITS_KAPTON(POLYCH2)$");\r
535   TGeoMedium *medGlue      = mgr->GetMedium("ITS_GLUE$");\r
536   TGeoMedium *medFlexCable = mgr->GetMedium("ITS_FLEXCABLE$");\r
537 \r
538   // Local parameters\r
539   Double_t kConeOutRadius = 0.15/2;\r
540   Double_t kConeInRadius = 0.1430/2;\r
541   Double_t kStaveLength = zlad*2;\r
542   Double_t kStaveWidth = xlad*2-kConeOutRadius*2;\r
543   Double_t kWidth = kStaveWidth/4;//1/2 of kWidth\r
544   Double_t kStaveHeight = 0.3;\r
545   Double_t kHeight = kStaveHeight/2;\r
546   Double_t kAlpha = 90-67;//90-33.69;\r
547   Double_t kTheta = kAlpha*TMath::DegToRad();\r
548   Double_t kS1 = kWidth/TMath::Sin(kTheta);\r
549   Double_t kL1 = kWidth/TMath::Tan(kTheta);\r
550   Double_t kS2 = TMath::Sqrt(kHeight*kHeight + kS1*kS1);//TMath::Sin(the2);\r
551   Double_t kThe2 = TMath::ATan(kHeight/kS1);\r
552   Double_t kBeta = kThe2*TMath::RadToDeg();\r
553   // Int_t  loop = kStaveLength/(kL1);\r
554   // Double_t s3 = kWidth/(2*TMath::Sin(kTheta));\r
555   // Double_t s4 = 3*kWidth/(2*TMath::Sin(kTheta));\r
556 \r
557   AliDebug(1, Form("BuildLevel %d\n",fBuildLevel));\r
558 \r
559   char volname[30];\r
560   snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
561 \r
562   Double_t z=0, y=-0.011+0.0150, x=0;\r
563 \r
564    TGeoVolume *mechLaddVol = 0;\r
565 \r
566   if (fBuildLevel < 5) {\r
567 \r
568     // world (trapezoid)\r
569     TGeoXtru *mechStruct = new TGeoXtru(2); //z sections\r
570     Double_t xv[5] = {kStaveWidth/2+0.1,kStaveWidth/2+0.1,0,-kStaveWidth/2-0.1,-kStaveWidth/2-0.1};\r
571     Double_t yv[5] = {-kConeOutRadius*2-0.07,0,kStaveHeight,0,-kConeOutRadius*2-0.07};    \r
572     mechStruct->DefinePolygon(5,xv,yv);\r
573     mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.);\r
574     mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.);\r
575 \r
576     mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);\r
577     mechLaddVol->SetLineColor(12);\r
578     mechLaddVol->SetFillColor(12); \r
579     mechLaddVol->SetVisibility(kTRUE);\r
580       \r
581     // detailed structure ++++++++++++++\r
582     //Pipe Kapton grey-35\r
583     TGeoTube *coolTube = new TGeoTube(kConeInRadius,kConeOutRadius,kStaveLength/2);\r
584     TGeoVolume *volCoolTube= new TGeoVolume("pipe", coolTube, medKapton);\r
585     volCoolTube->SetFillColor(35);\r
586     volCoolTube->SetLineColor(35);\r
587     mechLaddVol->AddNode(volCoolTube,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0));\r
588     mechLaddVol->AddNode(volCoolTube,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0));\r
589   }\r
590 \r
591   if (fBuildLevel < 4) {\r
592     TGeoTube *coolTubeW = new TGeoTube(0.,kConeInRadius,kStaveLength/2);\r
593     TGeoVolume *volCoolTubeW= new TGeoVolume("pipeWater", coolTubeW, medWater);\r
594     volCoolTubeW->SetFillColor(4);\r
595     volCoolTubeW->SetLineColor(4);\r
596     mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x+(kStaveWidth/2),y-(kHeight-kConeOutRadius),0));\r
597     mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x-(kStaveWidth/2),y-(kHeight-kConeOutRadius),0));\r
598   }\r
599 \r
600   //frequency of filament\r
601   //n = 4 means very dense(4 filaments per interval)\r
602   //n = 2 means dense(2 filaments per interval)\r
603   Int_t n =4;\r
604   Int_t loop = (Int_t)(kStaveLength/(4*kL1/n) + 2/n)-1;\r
605   if (fBuildLevel < 3) {\r
606     //Top CFRP Filament black-12 Carbon structure TGeoBBox (length,thickness,width)\r
607     TGeoBBox *t2=new TGeoBBox(kS2,0.007/2,0.15/2);//(kS2,0.002,0.02);\r
608     TGeoVolume *volT2=new TGeoVolume("TopFilament", t2, medM60J3K);\r
609     volT2->SetLineColor(12);\r
610     volT2->SetFillColor(12); \r
611 \r
612     for(int i=1;i<loop;i++){  //i<60;i++){\r
613       mechLaddVol->AddNode(volT2,4*i+0,\r
614                                   new TGeoCombiTrans(x+kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1),\r
615                                                      new TGeoRotation("volT2",90,90-kAlpha,90-kBeta)));\r
616       mechLaddVol->AddNode(volT2,4*i+1,\r
617                                   new TGeoCombiTrans(x-kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1),\r
618                                                      new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta)));\r
619       mechLaddVol->AddNode(volT2,4*i+2,\r
620                                   new TGeoCombiTrans(x+kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1),\r
621                                                      new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta)));\r
622       mechLaddVol->AddNode(volT2,4*i+3,\r
623                                   new TGeoCombiTrans(x-kWidth,y+(2*kConeOutRadius),z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2,//z-14.25+(i*2*kL1),  \r
624                                                      new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta)));\r
625     }\r
626 \r
627 \r
628     //Bottom CFRP Filament black-12 Carbon structure  TGeoBBox (thickness,width,length)\r
629     TGeoBBox *t1=new TGeoBBox(0.007/2,0.15/2,kS1);//(0.002,0.02,kS1);\r
630     TGeoVolume *volT1=new TGeoVolume("CFRPBottom", t1, medM60J3K);\r
631     volT1->SetLineColor(12);\r
632     volT1->SetFillColor(12); \r
633 \r
634     for(int i=1;i<loop;i++){\r
635       mechLaddVol->AddNode(volT1,4*i+0,\r
636                                   new TGeoCombiTrans(x+kWidth,y-kHeight,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(i*2*kL1),  \r
637                                                      new TGeoRotation("volT1",-90,kAlpha,0)));\r
638       mechLaddVol->AddNode(volT1,4*i+1,\r
639                                   new TGeoCombiTrans(x-kWidth,y-kHeight,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2,  //z-14.25+(i*2*kL1), \r
640                                                      new TGeoRotation("volT1",90,kAlpha,0)));\r
641       mechLaddVol->AddNode(volT1,4*i+2,\r
642                                   new TGeoCombiTrans(x+kWidth,y-kHeight,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), \r
643                                                      new TGeoRotation("volT1",-90,-kAlpha,0)));\r
644       mechLaddVol->AddNode(volT1,4*i+3,\r
645                                   new TGeoCombiTrans(x-kWidth,y-kHeight,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), \r
646                                                      new TGeoRotation("volT1",-90,+kAlpha,0)));\r
647     }\r
648   }\r
649    \r
650   if (fBuildLevel < 2) {\r
651     // Glue CFRP-Silicon layers TGeoBBox(thickness,width,kS1);\r
652     TGeoBBox *tG=new TGeoBBox(0.0075/2,0.18/2,kS1);\r
653     TGeoVolume *volTG=new TGeoVolume("Glue1", tG, medGlue);\r
654     volTG->SetLineColor(5);\r
655     volTG->SetFillColor(5); \r
656 \r
657     for(int i=1;i<loop;i++){ //i<60;i++){\r
658       mechLaddVol->AddNode(volTG,4*i+0,\r
659                                   new TGeoCombiTrans(x+kWidth,y-0.16,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(2*kL1*i), \r
660                                                      new TGeoRotation("volTG",-90,kAlpha,0)));\r
661       mechLaddVol->AddNode(volTG,4*i+1,\r
662                                   new TGeoCombiTrans(x-kWidth,y-0.16,z-kStaveLength/2+((4/n)*kL1*i)+kS1/2, //z-14.25+(2*kL1*i), \r
663                                                      new TGeoRotation("volTG",90,kAlpha,0)));\r
664       mechLaddVol->AddNode(volTG,4*i+2,\r
665                                   new TGeoCombiTrans(x+kWidth,y-0.16,z-kStaveLength/2+((4/n)*i*kL1)+kS1/2, //z-14.25+(i*2*kL1), \r
666                                                      new TGeoRotation("volTG",-90,-kAlpha,0)));\r
667       mechLaddVol->AddNode(volTG,4*i+3,\r
668                                   new TGeoCombiTrans(x-kWidth,y-0.16,z-kStaveLength/2+(i*(4/n)*kL1)+kS1/2, //z-14.25+(i*2*kL1), \r
669                                                      new TGeoRotation("volTG",-90,+kAlpha,0)));\r
670     }\r
671 \r
672     TGeoBBox *glue = new TGeoBBox(xlad, 0.005/2, zlad);\r
673     TGeoVolume *volGlue=new TGeoVolume("Glue2", glue, medGlue);\r
674     volGlue->SetLineColor(5);\r
675     volGlue->SetFillColor(5); \r
676     //mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0)));\r
677     mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0)));\r
678   }\r
679 \r
680   if (fBuildLevel < 1) {\r
681     //Flex cable brown-28 TGeoBBox(width,thickness,length); \r
682     TGeoBBox *kapCable = new TGeoBBox(xlad, 0.01/2, zlad);\r
683     TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable);\r
684     volCable->SetLineColor(28);\r
685     volCable->SetFillColor(28); \r
686     mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0)));\r
687  }\r
688 \r
689   // Done, return the stave structur\r
690   return mechLaddVol;\r
691 }\r
692 \r
693 \r
694 //________________________________________________________________________\r
695 TGeoVolume* AliITSUv0Layer::CreateStaveModel1(const Double_t xlad,\r
696                                               const Double_t zlad,\r
697                                               const TGeoManager *mgr){\r
698 //\r
699 // Create the mechanical stave structure for Model 1 of TDR\r
700 //\r
701 // Input:\r
702 //         xlad : X length\r
703 //         zlad : Z length\r
704 //         mgr  : the GeoManager (used only to get the proper material)\r
705 //\r
706 // Output:\r
707 //\r
708 // Return:\r
709 //\r
710 // Created:      22 Mar 2013  Chinorat Kobdaj\r
711 // Updated:      26 Apr 2013  Mario Sitta\r
712 //\r
713   \r
714   // Materials defined in AliITSUv0\r
715   TGeoMedium *medAir    = mgr->GetMedium("ITS_AIR$");\r
716   TGeoMedium *medWater  = mgr->GetMedium("ITS_WATER$");\r
717 \r
718   TGeoMedium *medM60J3K    = mgr->GetMedium("ITS_M60J3K$"); \r
719   TGeoMedium *medKapton    = mgr->GetMedium("ITS_KAPTON(POLYCH2)$");\r
720   TGeoMedium *medGlue      = mgr->GetMedium("ITS_GLUE$");\r
721   TGeoMedium *medFlexCable = mgr->GetMedium("ITS_FLEXCABLE$");\r
722 \r
723   // Local parameters\r
724   Double_t kConeOutRadius = 0.15/2;\r
725   //    Double_t kConeInRadius = 0.1430/2;\r
726   Double_t kStaveLength = zlad*2;\r
727   //    Double_t kStaveWidth = xlad*2-kConeOutRadius*2;\r
728   Double_t kStaveWidth = xlad*2;\r
729   Double_t kWidth = kStaveWidth/4;//1/2 of kWidth\r
730   Double_t kStaveHeight = 0.3;\r
731   Double_t kHeight = kStaveHeight/2;\r
732   Double_t kAlpha = 90-33.;//90-30;\r
733   Double_t kTheta = kAlpha*TMath::DegToRad();\r
734   Double_t kS1 = kWidth/TMath::Sin(kTheta);\r
735   Double_t kL1 = kWidth/TMath::Tan(kTheta);\r
736   Double_t kS2 = TMath::Sqrt(kHeight*kHeight + kS1*kS1);//TMath::Sin(the2);\r
737   Double_t kThe2 = TMath::ATan(kHeight/kS1);\r
738   Double_t kBeta = kThe2*TMath::RadToDeg();\r
739   Int_t  loop = (Int_t)((kStaveLength/(2*kL1))/2);\r
740   \r
741 \r
742   TGeoVolume *mechLaddVol = 0;\r
743 \r
744   char volname[30];\r
745   snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
746     \r
747 \r
748   // detailed structure ++++++++++++++\r
749   Double_t z=0, y=-0.011+0.0150, x=0;\r
750 \r
751   // Polimide micro channels numbers\r
752   Double_t yMC = y-kHeight+0.01;\r
753   Int_t nb = (Int_t)(kStaveWidth/0.1)+1;\r
754   Double_t xladMC = (nb*0.1-0.08)/2;\r
755 \r
756 \r
757   if (fBuildLevel < 5) {\r
758     // world (trapezoid)\r
759     TGeoXtru *mechStruct = new TGeoXtru(2); //z sections\r
760     Double_t xv[5] = {kStaveWidth/2+0.1,kStaveWidth/2+0.1,0,-kStaveWidth/2-0.1,-kStaveWidth/2-0.1};\r
761     Double_t yv[5] = {-kConeOutRadius*2-0.07,0,kStaveHeight,0,-kConeOutRadius*2-0.07};    \r
762     mechStruct->DefinePolygon(5,xv,yv);\r
763     mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.);\r
764     mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.);\r
765 \r
766     mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);\r
767     mechLaddVol->SetLineColor(12);\r
768     mechLaddVol->SetFillColor(12); \r
769     mechLaddVol->SetVisibility(kTRUE);\r
770       \r
771     // Polimide micro channels numbers\r
772     TGeoBBox *tM0=new TGeoBBox(xladMC, 0.005/2, zlad);\r
773     TGeoVolume *volTM0=new TGeoVolume("MicroChanCover", tM0, medKapton);\r
774     volTM0->SetLineColor(35);\r
775     volTM0->SetFillColor(35); \r
776     mechLaddVol->AddNode(volTM0, 0, new TGeoCombiTrans(x,-0.0125+yMC, z, new TGeoRotation("",0, 0, 0)));\r
777     mechLaddVol->AddNode(volTM0, 1, new TGeoCombiTrans(x,+0.0125+yMC, z, new TGeoRotation("",0, 0, 0)));\r
778       \r
779     TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zlad);\r
780     TGeoVolume *volTM0b=new TGeoVolume("MicroChanWalls", tM0b, medKapton);\r
781     volTM0b->SetLineColor(35);\r
782     volTM0b->SetFillColor(35); \r
783     for (Int_t ib=0;ib<nb;ib++) {\r
784       mechLaddVol->AddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0)));\r
785     }\r
786       \r
787   }\r
788     \r
789   if (fBuildLevel < 4) {\r
790     // Water in Polimide micro channels\r
791     TGeoBBox *water=new TGeoBBox(0.08/2, 0.02/2, zlad+0.1);\r
792     TGeoVolume *volWater=new TGeoVolume("Water", water, medWater);\r
793     volWater->SetLineColor(4);\r
794     volWater->SetFillColor(4); \r
795     for (Int_t ib=0;ib<(nb-1);ib++) {\r
796       mechLaddVol->AddNode(volWater, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.06,yMC, z, new TGeoRotation("",0, 0, 0)));\r
797     }\r
798   }\r
799     \r
800   if (fBuildLevel < 3) {\r
801     //Bottom filament CFRP black-12 Carbon structure TGeoBBox (thickness,width,length)\r
802     Double_t filWidth = 0.04;\r
803     Double_t filHeight= 0.02;\r
804     TGeoBBox *t1=new TGeoBBox(filHeight/2,filWidth/2,kS1);\r
805     TGeoVolume *volT1=new TGeoVolume("CFRPBottom", t1, medM60J3K);\r
806     volT1->SetLineColor(12);\r
807     volT1->SetFillColor(12); \r
808     for(int i=0;i<loop;i++){//i<30;i++){\r
809       mechLaddVol->AddNode(volT1,4*i+0,\r
810                                   new TGeoCombiTrans(x+kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+(4*kL1)+kS1/2, \r
811                                                      new TGeoRotation("volT1",-90,kAlpha,0)));\r
812       mechLaddVol->AddNode(volT1,4*i+1,\r
813                                   new TGeoCombiTrans(x-kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+(4*kL1*i)+kS1/2, \r
814                                                      new TGeoRotation("volT1",90,kAlpha,0)));\r
815       mechLaddVol->AddNode(volT1,4*i+2,\r
816                                   new TGeoCombiTrans(x+kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, \r
817                                                      new TGeoRotation("volT1",-90,-kAlpha,0)));\r
818       mechLaddVol->AddNode(volT1,4*i+3,\r
819                                   new TGeoCombiTrans(x-kWidth,y-kHeight+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, \r
820                                                      new TGeoRotation("volT1",-90,+kAlpha,0)));\r
821     }\r
822 \r
823       // Top filament CFRP black-12 Carbon structure TGeoBBox (length,thickness,width)\r
824     TGeoBBox *t2=new TGeoBBox(kS2,filHeight/2,filWidth/2);\r
825     TGeoVolume *volT2=new TGeoVolume("CFRPTop", t2, medM60J3K);\r
826     volT2->SetLineColor(12);\r
827     volT2->SetFillColor(12); \r
828     for(int i=0;i<loop;i++){ //i<30;i++){\r
829       mechLaddVol->AddNode(volT2,4*i+0,\r
830                                   new TGeoCombiTrans(x+kWidth,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*kL1)+kS1/2,\r
831                                                      new TGeoRotation("volT2",90,90-kAlpha,90-kBeta)));\r
832       mechLaddVol->AddNode(volT2,4*i+1,\r
833                                   new TGeoCombiTrans(x-kWidth,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*kL1)+kS1/2,\r
834                                                      new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta)));\r
835       mechLaddVol->AddNode(volT2,4*i+2,\r
836                                   new TGeoCombiTrans(x+kWidth,y+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2,\r
837                                                      new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta)));\r
838       mechLaddVol->AddNode(volT2,4*i+3,\r
839                                   new TGeoCombiTrans(x-kWidth,y+0.04+filHeight/2,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, \r
840                                                      new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta)));\r
841     }\r
842   }\r
843 \r
844   if (fBuildLevel < 2) {\r
845     // Glue between filament and polimide micro channel\r
846     TGeoBBox *t3=new TGeoBBox(0.01/2,0.04,kS1);\r
847     TGeoVolume *volT3=new TGeoVolume("FilamentGlue", t3, medGlue);\r
848     volT3->SetLineColor(5);\r
849     volT3->SetFillColor(5); \r
850     for(int i=0;i<loop;i++){//i<30;i++){\r
851       mechLaddVol->AddNode(volT3,4*i+0,\r
852                                   new TGeoCombiTrans(x+kWidth,y-kHeight+0.0325,z-kStaveLength/2+(4*kL1*i)+kS1/2, \r
853                                                      new TGeoRotation("volT1",-90,kAlpha,0)));\r
854       mechLaddVol->AddNode(volT3,4*i+1,\r
855                                   new TGeoCombiTrans(x-kWidth,y-kHeight+0.0325,z-kStaveLength/2+(4*kL1*i)+kS1/2, \r
856                                                      new TGeoRotation("volT1",90,kAlpha,0)));\r
857       mechLaddVol->AddNode(volT3,4*i+2,\r
858                                   new TGeoCombiTrans(x+kWidth,y-kHeight+0.0325,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, \r
859                                                      new TGeoRotation("volT1",-90,-kAlpha,0)));\r
860       mechLaddVol->AddNode(volT3,4*i+3,\r
861                                   new TGeoCombiTrans(x-kWidth,y-kHeight+0.0325,z-kStaveLength/2+2*kL1+(i*4*kL1)+kS1/2, \r
862                                                      new TGeoRotation("volT1",-90,+kAlpha,0)));\r
863     }\r
864       \r
865     // Glue microchannel and sensor\r
866     TGeoBBox *glueM = new TGeoBBox(xlad, 0.01/2, zlad);\r
867     TGeoVolume *volGlueM=new TGeoVolume("MicroChanGlue", glueM, medGlue);\r
868     volGlueM->SetLineColor(5);\r
869     volGlueM->SetFillColor(5); \r
870     mechLaddVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x, y-0.16, z, new TGeoRotation("",0, 0, 0)));\r
871 \r
872     // Glue sensor and kapton\r
873     TGeoBBox *glue = new TGeoBBox(xlad, 0.005/2, zlad);\r
874     TGeoVolume *volGlue=new TGeoVolume("SensorGlue", glue, medGlue);\r
875     volGlue->SetLineColor(5);\r
876     volGlue->SetFillColor(5); \r
877     mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005, z, new TGeoRotation("",0, 0, 0)));\r
878   }\r
879 \r
880   if (fBuildLevel < 1) {\r
881     TGeoBBox *kapCable = new TGeoBBox(xlad, 0.01/2, zlad);\r
882     TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable);\r
883     volCable->SetLineColor(28);\r
884     volCable->SetFillColor(28); \r
885     mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.165-fSensorThick-0.005-0.01, z, new TGeoRotation("",0, 0, 0)));\r
886   }\r
887     \r
888   // Done, return the stave structur\r
889   return mechLaddVol;\r
890 \r
891 }\r
892 \r
893 //________________________________________________________________________\r
894 TGeoVolume* AliITSUv0Layer::CreateStaveModel21(const Double_t xlad,\r
895                                                const Double_t zlad,\r
896                                                const TGeoManager *mgr){\r
897 //\r
898 // Create the mechanical stave structure for Model 2.1 of TDR\r
899 //\r
900 // Input:\r
901 //         xlad : X length\r
902 //         zlad : Z length\r
903 //         mgr  : the GeoManager (used only to get the proper material)\r
904 //\r
905 // Output:\r
906 //\r
907 // Return:\r
908 //\r
909 // Created:      22 Mar 2013  Chinorat Kobdaj\r
910 // Updated:      26 Apr 2013  Mario Sitta\r
911 //\r
912   \r
913   // Materials defined in AliITSUv0\r
914   TGeoMedium *medAir    = mgr->GetMedium("ITS_AIR$");\r
915   TGeoMedium *medWater  = mgr->GetMedium("ITS_WATER$");\r
916 \r
917   TGeoMedium *medM60J3K    = mgr->GetMedium("ITS_M60J3K$"); \r
918   TGeoMedium *medKapton    = mgr->GetMedium("ITS_KAPTON(POLYCH2)$");\r
919   TGeoMedium *medGlue      = mgr->GetMedium("ITS_GLUE$");\r
920   TGeoMedium *medFlexCable = mgr->GetMedium("ITS_FLEXCABLE$");\r
921   TGeoMedium *medK13D2U2k  = mgr->GetMedium("ITS_K13D2U2k$");\r
922   TGeoMedium *medFGS003    = mgr->GetMedium("ITS_FGS003$"); \r
923   TGeoMedium *medCarbonFleece = mgr->GetMedium("ITS_CarbonFleece$"); \r
924 \r
925   // Local parameters\r
926   Double_t kConeOutRadius =0.151384/2;\r
927   Double_t kConeInRadius = 0.145034/2;\r
928   Double_t kStaveLength = zlad;\r
929   Double_t kStaveWidth = xlad*2;\r
930   Double_t kWidth = (kStaveWidth+0.005)/4;\r
931   Double_t kStaveHeigth = 0.33;//0.33;\r
932   Double_t kHeight = (kStaveHeigth+0.025)/2;\r
933   Double_t kAlpha = 57; //56.31;\r
934   Double_t kTheta = kAlpha*TMath::DegToRad();\r
935   Double_t kS1 = (kStaveWidth/4)/TMath::Sin(kTheta);\r
936   Double_t kL1 = (kStaveWidth/4)/TMath::Tan(kTheta);\r
937   Double_t kS2 = sqrt(kHeight*kHeight + kS1*kS1);//TMath::Sin(the2);\r
938   Double_t kThe2 = TMath::ATan(kHeight/kS1);\r
939   Double_t kBeta = kThe2*TMath::RadToDeg();\r
940   // Double_t lay1 = 0.003157;\r
941   Double_t kLay1 = 0.003;//Amec carbon\r
942   // Double_t lay2 = 0.0043215;//C Fleece carbon\r
943   Double_t kLay2 = 0.002;//C Fleece carbon\r
944   Double_t kLay3 = 0.007;//K13D2U carbon\r
945   Int_t  loop = (Int_t)(kStaveLength/(2*kL1));\r
946 \r
947 \r
948   char volname[30];\r
949   snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
950 \r
951   Double_t z=0, y=-(kConeOutRadius+0.03)+0.0385, x=0;\r
952 \r
953   TGeoVolume *mechLaddVol = 0;\r
954 \r
955   if (fBuildLevel < 5) {\r
956     // world (trapezoid)\r
957     TGeoXtru *mechStruct = new TGeoXtru(2); //z sections\r
958     Double_t xv[5] = {kStaveWidth/2+0.1,kStaveWidth/2+0.1,0,-kStaveWidth/2-0.1,-kStaveWidth/2-0.1};\r
959     Double_t yv[5] = {-kConeOutRadius*2-0.07,0,kStaveHeigth,0,-kConeOutRadius*2-0.07};    \r
960     mechStruct->DefinePolygon(5,xv,yv);\r
961     mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.);\r
962     mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.);\r
963 \r
964     mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);\r
965     mechLaddVol->SetLineColor(12);\r
966     mechLaddVol->SetFillColor(12); \r
967     mechLaddVol->SetVisibility(kTRUE);  \r
968       \r
969     //Pipe Kapton grey-35 \r
970     TGeoCone *cone1 = new TGeoCone(kStaveLength,kConeInRadius,kConeOutRadius,kConeInRadius,kConeOutRadius);\r
971     TGeoVolume *volCone1= new TGeoVolume("PolyimidePipe", cone1, medKapton);\r
972     volCone1->SetFillColor(35);\r
973     volCone1->SetLineColor(35);\r
974     mechLaddVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z));\r
975     mechLaddVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z));\r
976   }\r
977 \r
978   if (fBuildLevel < 4) {\r
979     \r
980     TGeoTube *coolTubeW = new TGeoTube(0.,kConeInRadius,kStaveLength);\r
981     TGeoVolume *volCoolTubeW= new TGeoVolume("Water", coolTubeW, medWater);\r
982     volCoolTubeW->SetFillColor(4);\r
983     volCoolTubeW->SetLineColor(4);\r
984     mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z));\r
985     mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z));\r
986   }\r
987 \r
988   if (fBuildLevel < 3) {\r
989     //top fillament\r
990     // Top filament M60J black-12 Carbon structure TGeoBBox (length,thickness,width)\r
991     TGeoBBox *t2=new TGeoBBox(kS2,0.02/2,0.04/2); //TGeoBBox *t2=new TGeoBBox(kS2,0.01,0.02);\r
992     TGeoVolume *volT2=new TGeoVolume("TopFilament", t2, medM60J3K);\r
993     volT2->SetLineColor(12);\r
994     volT2->SetFillColor(12); \r
995     for(int i=0;i<loop;i++){// i<28;i++){\r
996       mechLaddVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta)));\r
997       mechLaddVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta)));\r
998       mechLaddVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta)));\r
999       mechLaddVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth,y+kHeight+(0.12/2)-0.014+0.007,z-kStaveLength+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta)));\r
1000 //    mechLaddVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight-(0.12/2)+0.072,z+kStaveLength+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta)));\r
1001 \r
1002  }\r
1003  \r
1004     //wall side structure out\r
1005     TGeoBBox *box4 = new TGeoBBox(0.03/2,0.12/2,kStaveLength-0.50);\r
1006     TGeoVolume *plate4 = new TGeoVolume("WallOut",box4,medM60J3K);\r
1007     plate4->SetFillColor(35);\r
1008     plate4->SetLineColor(35);\r
1009     mechLaddVol->AddNode(plate4,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0)));\r
1010     mechLaddVol->AddNode(plate4,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+(0.03/2),y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate4",0,0,0)));\r
1011     //wall side in\r
1012     TGeoBBox *box5 = new TGeoBBox(0.015/2,0.12/2,kStaveLength-0.50);\r
1013     TGeoVolume *plate5 = new TGeoVolume("WallIn",box5,medM60J3K);\r
1014     plate5->SetFillColor(12);\r
1015     plate5->SetLineColor(12);\r
1016     mechLaddVol->AddNode(plate5,1,new TGeoCombiTrans(x+(2*kStaveWidth/4)-0.03-0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0)));\r
1017     mechLaddVol->AddNode(plate5,2,new TGeoCombiTrans(x-(2*kStaveWidth/4)+0.03+0.015/2,y-0.0022-kConeOutRadius+0.12/2+0.007,z,new TGeoRotation("plate5",0,0,0)));\r
1018 \r
1019      //Amec Thermasol red-2 cover tube FGS300\r
1020     TGeoConeSeg *cons1 = new TGeoConeSeg(kStaveLength-0.50,kConeOutRadius,kConeOutRadius+kLay1,kConeOutRadius,kConeOutRadius+kLay1,0,180);\r
1021     TGeoVolume *cone11 = new TGeoVolume("ThermasolPipeCover",cons1,medFGS003);\r
1022     cone11->SetFillColor(2);\r
1023     cone11->SetLineColor(2);\r
1024     mechLaddVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone11",0,0,0)));\r
1025     mechLaddVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone11",0,0,0)));\r
1026 \r
1027     TGeoBBox *box2 = new TGeoBBox((0.50-(2*kConeOutRadius))/2,kLay1/2,kStaveLength-0.50);\r
1028     TGeoVolume *plate2 = new TGeoVolume("ThermasolMiddle",box2,medFGS003);\r
1029     plate2->SetFillColor(2);\r
1030     plate2->SetLineColor(2);\r
1031     mechLaddVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate2",0,0,0)));\r
1032 \r
1033     TGeoBBox *box21 = new TGeoBBox((0.75-0.25-kConeOutRadius-kLay1)/2,kLay1/2,kStaveLength-0.50);\r
1034     TGeoVolume *plate21 = new TGeoVolume("ThermasolLeftRight",box21,medFGS003);\r
1035     plate21->SetFillColor(2);\r
1036     plate21->SetLineColor(2);\r
1037     mechLaddVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0)));\r
1038     mechLaddVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(kLay1/2),y-kConeOutRadius+(kLay1/2),z,new TGeoRotation("plate21",0,0,0)));\r
1039 \r
1040     TGeoBBox *box22 = new TGeoBBox((kLay1/2),kConeOutRadius/2,kStaveLength-0.50);\r
1041     TGeoVolume *plate22 = new TGeoVolume("ThermasolVertical",box22,medFGS003);\r
1042     plate22->SetFillColor(2);\r
1043     plate22->SetLineColor(2);\r
1044     mechLaddVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1045     mechLaddVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1046     mechLaddVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1047     mechLaddVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(kLay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1048 \r
1049     //C Fleece\r
1050     TGeoConeSeg *cons2 = new TGeoConeSeg(kStaveLength-0.50,kConeOutRadius+kLay1,kConeOutRadius+kLay1+kLay2,kConeOutRadius+kLay1,kConeOutRadius+kLay1+kLay2,0,180); \r
1051     TGeoVolume *cone12 = new TGeoVolume("CFleecePipeCover",cons2,medCarbonFleece);\r
1052     cone12->SetFillColor(28);\r
1053     cone12->SetLineColor(28);\r
1054     mechLaddVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("Cone12",0,0,0)));\r
1055     mechLaddVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("Cone12",0,0,0)));\r
1056 \r
1057     TGeoBBox *box3 = new TGeoBBox((0.50-(2*(kConeOutRadius+kLay1)))/2,kLay2/2,kStaveLength-0.50);\r
1058     TGeoVolume *plate3 = new TGeoVolume("CFleeceMiddle",box3,medCarbonFleece);\r
1059     plate3->SetFillColor(28);\r
1060     plate3->SetLineColor(28);\r
1061     mechLaddVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate3",0,0,0)));\r
1062 \r
1063     TGeoBBox *box31 = new TGeoBBox((0.75-0.25-kConeOutRadius-kLay1)/2,kLay2/2,kStaveLength-0.50);\r
1064     TGeoVolume *plate31 = new TGeoVolume("CFleeceLeftRight",box31,medCarbonFleece);\r
1065     plate31->SetFillColor(28);\r
1066     plate31->SetLineColor(28);\r
1067     mechLaddVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0)));\r
1068     mechLaddVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(0.75-0.25-kConeOutRadius-kLay1)/2,y-kConeOutRadius+kLay1+(kLay2/2),z,new TGeoRotation("plate31",0,0,0)));\r
1069 \r
1070     TGeoBBox *box32 = new TGeoBBox((kLay2/2),(kConeOutRadius-kLay1)/2,kStaveLength-0.50);\r
1071     TGeoVolume *plate32 = new TGeoVolume("CFleeceVertical",box32,medCarbonFleece);\r
1072     plate32->SetFillColor(28);\r
1073     plate32->SetLineColor(28);\r
1074     mechLaddVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1075     mechLaddVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1076     mechLaddVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+kLay1+(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1077     mechLaddVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-kLay1-(kLay2/2),y+(kLay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1078 \r
1079 \r
1080     //K13D2U carbon plate\r
1081     TGeoBBox *box1 = new TGeoBBox(2*kWidth,kLay3/2,kStaveLength-0.50);\r
1082     TGeoVolume *plate1 = new TGeoVolume("CarbonPlate",box1,medK13D2U2k);\r
1083     plate1->SetFillColor(5);\r
1084     plate1->SetLineColor(5);\r
1085     mechLaddVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(kLay3/2)),z,new TGeoRotation("plate1",0,0,0)));\r
1086 \r
1087     //C Fleece bottom plate \r
1088     TGeoBBox *box6 = new TGeoBBox(2*kWidth,kLay2/2,kStaveLength-0.50);\r
1089     TGeoVolume *plate6 = new TGeoVolume("CFleeceBottom",box6,medCarbonFleece);\r
1090     plate6->SetFillColor(2);\r
1091     plate6->SetLineColor(2);\r
1092     mechLaddVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)),z,new TGeoRotation("plate1",0,0,0)));\r
1093       \r
1094       \r
1095   }\r
1096 \r
1097   if (fBuildLevel < 2) {\r
1098     //Glue layers and kapton\r
1099     TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, 0.005/2, zlad);\r
1100     TGeoVolume *volGlue=new TGeoVolume("Glue", glue, medGlue);\r
1101     volGlue->SetLineColor(5);\r
1102     volGlue->SetFillColor(5); \r
1103     mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+(0.01/2)), z, new TGeoRotation("",0, 0, 0)));\r
1104     mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x,y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+(0.01/2)), z, new TGeoRotation("",0, 0, 0)));\r
1105   }\r
1106 \r
1107   if (fBuildLevel < 1) {\r
1108     TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, 0.01/2, zlad);\r
1109     TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable);\r
1110     volCable->SetLineColor(28);\r
1111     volCable->SetFillColor(28); \r
1112     mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+kLay3+(kLay2/2)+0.01+fSensorThick+0.01+(0.01/2)), z, new TGeoRotation("",0, 0, 0)));\r
1113   }\r
1114     \r
1115 \r
1116   // Done, return the stave structure\r
1117   return mechLaddVol;\r
1118   \r
1119 }\r
1120 // new model22\r
1121 //________________________________________________________________________\r
1122 TGeoVolume* AliITSUv0Layer::CreateStaveModel22(const Double_t xlad,\r
1123                                                const Double_t zlad,\r
1124                                                const TGeoManager *mgr){\r
1125 //\r
1126 // Create the mechanical stave structure for Model 2.2 of TDR\r
1127 //\r
1128 // Input:\r
1129 //         xlad : X length\r
1130 //         zlad : Z length\r
1131 //         mgr  : the GeoManager (used only to get the proper material)\r
1132 //\r
1133 // Output:\r
1134 //\r
1135 // Return:\r
1136 //\r
1137 // Created:      22 Mar 2013  Chinorat Kobdaj\r
1138 // Updated:      26 Apr 2013  Mario Sitta\r
1139 // Updated:      30 Apr 2013  Wanchaloem Poonsawat \r
1140 //\r
1141   \r
1142   // Materials defined in AliITSUv0\r
1143   TGeoMedium *medAir    = mgr->GetMedium("ITS_AIR$");\r
1144   TGeoMedium *medWater  = mgr->GetMedium("ITS_WATER$");\r
1145 \r
1146   TGeoMedium *medM60J3K    = mgr->GetMedium("ITS_M60J3K$"); \r
1147   TGeoMedium *medKapton    = mgr->GetMedium("ITS_KAPTON(POLYCH2)$");\r
1148   TGeoMedium *medGlue      = mgr->GetMedium("ITS_GLUE$");\r
1149   TGeoMedium *medFlexCable = mgr->GetMedium("ITS_FLEXCABLE$");\r
1150   TGeoMedium *medK13D2U2k  = mgr->GetMedium("ITS_K13D2U2k$");\r
1151   TGeoMedium *medFGS003    = mgr->GetMedium("ITS_FGS003$"); \r
1152   TGeoMedium *medCarbonFleece = mgr->GetMedium("ITS_CarbonFleece$"); \r
1153 \r
1154   // Local parameters\r
1155   Double_t kConeOutRadius =0.107/2;//0.107/2;\r
1156   Double_t kConeInRadius = 0.1015/2;//0.10105/2\r
1157   Double_t kStaveLength = zlad;\r
1158   Double_t kStaveWidth = xlad*2;\r
1159   Double_t kWidth = (kStaveWidth)/4;\r
1160   Double_t kStaveHeight = 0.283;//0.33;\r
1161   Double_t kHeight = (kStaveHeight)/2;\r
1162   Double_t kAlpha = 57;//56.31;\r
1163   Double_t kTheta = kAlpha*TMath::DegToRad();\r
1164   Double_t kS1 = ((kStaveWidth)/4)/TMath::Sin(kTheta);\r
1165   Double_t kL1 = (kStaveWidth/4)/TMath::Tan(kTheta);\r
1166   Double_t kS2 = sqrt(kHeight*kHeight + kS1*kS1);//TMath::Sin(kThe2);\r
1167   Double_t kThe2 = TMath::ATan(kHeight/(0.375-0.036));\r
1168   Double_t kBeta = kThe2*TMath::RadToDeg();\r
1169   Double_t klay1 = 0.003;//Amec carbon\r
1170   Double_t klay2 = 0.002;//C Fleece carbon\r
1171   Double_t klay3 = 0.007;//CFplate K13D2U carbon\r
1172   Double_t klay4 = 0.007;//GluekStaveLength/2\r
1173   Double_t klay5 = 0.01;//Flex cable\r
1174   Double_t kTopVertexMaxWidth = 0.072;\r
1175   Double_t kTopVertexHeight = 0.04;\r
1176   Double_t kSideVertexMWidth = 0.052;\r
1177   Double_t kSideVertexHeight = 0.11; \r
1178 \r
1179  \r
1180   Int_t  loop = (Int_t)(kStaveLength/(2*kL1));\r
1181 \r
1182   char volname[30];\r
1183   snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
1184 \r
1185   Double_t z=0, y=-(2*kConeOutRadius)+klay1+klay2+fSensorThick/2-0.0004, x=0;\r
1186 \r
1187   TGeoVolume *mechLaddVol = 0;\r
1188 \r
1189   if (fBuildLevel < 5) {\r
1190     // world (trapezoid)\r
1191     TGeoXtru *mechStruct = new TGeoXtru(2); //z sections\r
1192     Double_t xv[6] = {kStaveWidth/2,kStaveWidth/2,0.012,-0.012,-kStaveWidth/2,-kStaveWidth/2}; \r
1193     /* Double_t yv[6] = {-2*(kConeOutRadius+klay1+1.5*klay2+klay3+klay4+fSensorThick+klay5),\r
1194                         0-0.02,kStaveHeight+0.01,kStaveHeight+0.01,0-0.02,\r
1195                         -2*(kConeOutRadius+klay1+1.5*klay2+klay3+klay4+fSensorThick+klay5)};  // (kConeOutRadius*2)-0.0635 */\r
1196     Double_t yv[6] = {-(kConeOutRadius*2)-0.06395,0-0.02,kStaveHeight+0.01,kStaveHeight+0.01,0-0.02,-(kConeOutRadius*2)-0.06395};  // (kConeOutRadius*2)-0.064\r
1197     mechStruct->DefinePolygon(6,xv,yv);\r
1198     mechStruct->DefineSection(0,-kStaveLength,0,0,1.);\r
1199     mechStruct->DefineSection(1,kStaveLength,0,0,1.);\r
1200 \r
1201     mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);\r
1202     mechLaddVol->SetLineColor(12);\r
1203     mechLaddVol->SetFillColor(12); \r
1204     mechLaddVol->SetVisibility(kTRUE);  \r
1205       \r
1206     //Polyimide Pipe Kapton grey-35 \r
1207     TGeoCone *cone1 = new TGeoCone(kStaveLength,kConeInRadius,kConeOutRadius-0.0001,kConeInRadius,kConeOutRadius-0.0001);\r
1208     TGeoVolume *volCone1= new TGeoVolume("PolyimidePipe", cone1, medKapton);\r
1209     volCone1->SetFillColor(35);\r
1210     volCone1->SetLineColor(35);\r
1211     mechLaddVol->AddNode(volCone1,1,new TGeoTranslation(x+0.25,y,z));\r
1212     mechLaddVol->AddNode(volCone1,2,new TGeoTranslation(x-0.25,y,z));\r
1213     }\r
1214 \r
1215   if (fBuildLevel < 4) {\r
1216     TGeoTube *coolTubeW = new TGeoTube(0.,kConeInRadius-0.0001,kStaveLength);\r
1217     TGeoVolume *volCoolTubeW= new TGeoVolume("Water", coolTubeW, medWater);\r
1218     volCoolTubeW->SetFillColor(4);\r
1219     volCoolTubeW->SetLineColor(4);\r
1220     mechLaddVol->AddNode(volCoolTubeW,0,new TGeoTranslation(x-0.25,y,z));\r
1221     mechLaddVol->AddNode(volCoolTubeW,1,new TGeoTranslation(x+0.25,y,z));\r
1222   }\r
1223 \r
1224   if (fBuildLevel < 3) {\r
1225     //top fillament\r
1226     // Top filament M60J black-12 Carbon structure TGeoBBox (length,thickness,width)\r
1227     TGeoBBox *t2=new TGeoBBox(kS2-0.028,0.02/2,0.02/2); //0.04/2//TGeoBBox *t2=new TGeoBBox(kS2,0.01,0.02);//kS2-0.03 old Config.C\r
1228     TGeoVolume *volT2=new TGeoVolume("TopFilament", t2, medM60J3K);\r
1229     volT2->SetLineColor(12);\r
1230     volT2->SetFillColor(12); \r
1231     for(int i=0;i<loop;i++){// i<28;i++){\r
1232       // 1) Front Left Top Filament\r
1233        mechLaddVol->AddNode(volT2,i*4+1,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,90-kBeta)));\r
1234       // 2) Front Right Top Filament\r
1235       mechLaddVol->AddNode(volT2,i*4+2,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,-90+kBeta)));\r
1236       // 3) Back Left  Top Filament\r
1237       mechLaddVol->AddNode(volT2,i*4+3,new TGeoCombiTrans(x+kWidth+0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,-90+kAlpha,90-kBeta)));\r
1238       // 4) Back Right Top Filament\r
1239       mechLaddVol->AddNode(volT2,i*4+4,new TGeoCombiTrans(x-kWidth-0.0036,y+kHeight+0.01,z-kStaveLength+0.1+2*kL1+(i*4*kL1)+kS1/2, new TGeoRotation("volT2",90,90-kAlpha,-90+kBeta)));\r
1240    }\r
1241  \r
1242      //Vertex  structure \r
1243 \r
1244       //top ver trd1\r
1245       TGeoTrd1 *trd1 = new TGeoTrd1(0,kTopVertexMaxWidth/2,kStaveLength,kTopVertexHeight/2);\r
1246       TGeoVolume *ibdv = new TGeoVolume("TopVertex",trd1,medM60J3K);\r
1247       ibdv->SetFillColor(12);\r
1248       ibdv->SetLineColor(12);\r
1249       mechLaddVol->AddNode(ibdv,1,new TGeoCombiTrans(x,y+kStaveHeight+0.03,z,new TGeoRotation("ibdv",0.,-90,0)));//y+kStaveHeight+0.056\r
1250 \r
1251       //left trd2\r
1252       TGeoTrd1 *trd2 = new TGeoTrd1(0,kSideVertexMWidth/2,kStaveLength, kSideVertexHeight/2);\r
1253       TGeoVolume *ibdv2 = new TGeoVolume("LeftVertex",trd2,medM60J3K);\r
1254       ibdv2->SetFillColor(12);\r
1255       ibdv2->SetLineColor(12);\r
1256       mechLaddVol->AddNode(ibdv2,1,new TGeoCombiTrans(x+kStaveWidth/2-0.06,y-0.0355,z,new TGeoRotation("ibdv2",-103.3,90,0))); //x-kStaveWidth/2-0.09 old Config.C y-0.0355,\r
1257 \r
1258       //right trd3\r
1259       TGeoTrd1 *trd3 = new TGeoTrd1(0,kSideVertexMWidth/2,kStaveLength, kSideVertexHeight/2);\r
1260       TGeoVolume *ibdv3 = new TGeoVolume("RightVertex",trd3,medM60J3K);\r
1261       ibdv3->SetFillColor(12);\r
1262       ibdv3->SetLineColor(12);\r
1263       mechLaddVol->AddNode(ibdv3,1,new TGeoCombiTrans(x-kStaveWidth/2+0.06,y-0.0355,z,new TGeoRotation("ibdv3",103.3,90,0))); //x-kStaveWidth/2+0.09 old Config.C\r
1264       \r
1265      //Carbon Fleece\r
1266       TGeoConeSeg *cons2 = new TGeoConeSeg(zlad,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,kConeOutRadius+klay1,kConeOutRadius+klay1+klay2,0,180); \r
1267       TGeoVolume *cone12 = new TGeoVolume("CarbonFleecePipeCover",cons2,medCarbonFleece);\r
1268       cone12->SetFillColor(28);\r
1269       cone12->SetLineColor(28);\r
1270       mechLaddVol->AddNode(cone12,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone12",0,0,0)));\r
1271       mechLaddVol->AddNode(cone12,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone12",0,0,0)));\r
1272 \r
1273       TGeoBBox *box3 = new TGeoBBox((0.50-(2*(kConeOutRadius+klay1)))/2,klay2/2,zlad);//kStaveLength-0.50);\r
1274       TGeoVolume *plate3 = new TGeoVolume("CarbonFleeceMiddle",box3,medCarbonFleece);\r
1275       plate3->SetFillColor(28);\r
1276       plate3->SetLineColor(28);\r
1277       mechLaddVol->AddNode(plate3,1,new TGeoCombiTrans(x,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate3",0,0,0)));\r
1278 \r
1279       TGeoBBox *box31 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,klay2/2,zlad);\r
1280       TGeoVolume *plate31 = new TGeoVolume("CarbonFleeceLeftRight",box31,medCarbonFleece);\r
1281       plate31->SetFillColor(28);\r
1282       plate31->SetLineColor(28);\r
1283       mechLaddVol->AddNode(plate31,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(0.75-0.25-kConeOutRadius-klay1)/2+0.0025,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0)));\r
1284       mechLaddVol->AddNode(plate31,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(0.75-0.25-kConeOutRadius-klay1)/2-0.0025,y-kConeOutRadius+klay1+(klay2/2),z,new TGeoRotation("plate31",0,0,0)));\r
1285 \r
1286       TGeoBBox *box32 = new TGeoBBox((klay2/2),(kConeOutRadius-klay1)/2,zlad);\r
1287       TGeoVolume *plate32 = new TGeoVolume("CarbonFleeceVertical",box32,medCarbonFleece);\r
1288       plate32->SetFillColor(28);\r
1289       plate32->SetLineColor(28);\r
1290       mechLaddVol->AddNode(plate32,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1291       mechLaddVol->AddNode(plate32,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1292       mechLaddVol->AddNode(plate32,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+klay1+(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1293       mechLaddVol->AddNode(plate32,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-klay1-(klay2/2),y+(klay1-kConeOutRadius)/2,z,new TGeoRotation("plate32",0,0,0)));\r
1294 \r
1295      //Amec Thermasol red-2 cover tube FGS300 or Carbon Paper\r
1296       TGeoConeSeg *cons1 = new TGeoConeSeg(zlad,kConeOutRadius,kConeOutRadius+klay1-0.0001,kConeOutRadius,kConeOutRadius+klay1-0.0001,0,180);//kConeOutRadius+klay1-0.0001\r
1297       TGeoVolume *cone11 = new TGeoVolume("ThermasolPipeCover",cons1,medFGS003);\r
1298       cone11->SetFillColor(2);\r
1299       cone11->SetLineColor(2);\r
1300       mechLaddVol->AddNode(cone11,1,new TGeoCombiTrans(x+0.25,y,z,new TGeoRotation("cone11",0,0,0)));\r
1301       mechLaddVol->AddNode(cone11,2,new TGeoCombiTrans(x-0.25,y,z,new TGeoRotation("cone11",0,0,0)));\r
1302 \r
1303       TGeoBBox *box2 = new TGeoBBox((0.50-(2*kConeOutRadius))/2,(klay1/2),zlad);//kStaveLength-0.50);\r
1304       TGeoVolume *plate2 = new TGeoVolume("ThermasolMiddle",box2,medFGS003);\r
1305       plate2->SetFillColor(2);\r
1306       plate2->SetLineColor(2);\r
1307       mechLaddVol->AddNode(plate2,1,new TGeoCombiTrans(x,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate2",0,0,0)));\r
1308 \r
1309       TGeoBBox *box21 = new TGeoBBox((0.75-0.25-kConeOutRadius-klay1)/2+0.0025,(klay1/2),zlad);\r
1310       TGeoVolume *plate21 = new TGeoVolume("ThermasolLeftRight",box21,medFGS003);\r
1311       plate21->SetFillColor(2);\r
1312       plate21->SetLineColor(2);\r
1313       mechLaddVol->AddNode(plate21,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(0.75-0.25-kConeOutRadius)/2-(klay1/2)+0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0)));\r
1314       mechLaddVol->AddNode(plate21,2,new TGeoCombiTrans(x-0.25-kConeOutRadius-(0.75-0.25-kConeOutRadius)/2+(klay1/2)-0.0025,y-kConeOutRadius+(klay1/2),z,new TGeoRotation("plate21",0,0,0)));\r
1315 \r
1316       TGeoBBox *box22 = new TGeoBBox((klay1/2),kConeOutRadius/2,zlad);\r
1317       TGeoVolume *plate22 = new TGeoVolume("ThermasolVertical",box22,medFGS003);\r
1318       plate22->SetFillColor(2);\r
1319       plate22->SetLineColor(2);\r
1320       mechLaddVol->AddNode(plate22,1,new TGeoCombiTrans(x+0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1321       mechLaddVol->AddNode(plate22,2,new TGeoCombiTrans(x+0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1322       mechLaddVol->AddNode(plate22,3,new TGeoCombiTrans(x-0.25+kConeOutRadius+(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1323       mechLaddVol->AddNode(plate22,4,new TGeoCombiTrans(x-0.25-kConeOutRadius-(klay1/2),y-kConeOutRadius/2,z,new TGeoRotation("plate22",0,0,0)));\r
1324 \r
1325      //K13D2U CF plate\r
1326       TGeoBBox *box1 = new TGeoBBox(2*kWidth,(klay3)/2,zlad);\r
1327       TGeoVolume *plate1 = new TGeoVolume("CFPlate",box1,medK13D2U2k);\r
1328       plate1->SetFillColor(5);\r
1329       plate1->SetLineColor(5);\r
1330       mechLaddVol->AddNode(plate1,1,new TGeoCombiTrans(x,y-(kConeOutRadius+(klay3/2)),z,new TGeoRotation("plate1",0,0,0)));\r
1331 \r
1332      //C Fleece bottom plate \r
1333       TGeoBBox *box6 = new TGeoBBox(2*kWidth,(klay2)/2,zlad);\r
1334       TGeoVolume *plate6 = new TGeoVolume("CarbonFleeceBottom",box6,medCarbonFleece);\r
1335       plate6->SetFillColor(2);\r
1336       plate6->SetLineColor(2);\r
1337       mechLaddVol->AddNode(plate6,1,new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+(klay2/2)),z,new TGeoRotation("plate6",0,0,0)));\r
1338 \r
1339     }\r
1340    if (fBuildLevel < 2) {\r
1341       //Glue klayers and kapton\r
1342      TGeoBBox *glue = new TGeoBBox(kStaveWidth/2, (klay4)/2, zlad);\r
1343       TGeoVolume *volGlue=new TGeoVolume("Glue", glue, medGlue);\r
1344       volGlue->SetLineColor(5);\r
1345       volGlue->SetFillColor(5); \r
1346       // mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4/2)), z, new TGeoRotation("",0, 0, 0)));\r
1347       mechLaddVol->AddNode(volGlue, 0, new TGeoCombiTrans(x,y-(kConeOutRadius+klay3+klay2+(klay4)/2)+0.00005, z, new TGeoRotation("",0, 0, 0)));\r
1348     }\r
1349 \r
1350      if (fBuildLevel < 1) {\r
1351      //Flex Cable or Bus\r
1352       TGeoBBox *kapCable = new TGeoBBox(kStaveWidth/2, klay5/2, zlad);//klay5/2\r
1353       TGeoVolume *volCable=new TGeoVolume("FlexCable", kapCable, medFlexCable);\r
1354       volCable->SetLineColor(28);\r
1355       volCable->SetFillColor(28); \r
1356       //      mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.0002, z, new TGeoRotation("",0, 0, 0)));\r
1357       mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-(kConeOutRadius+klay3+klay2+klay4+fSensorThick+(klay5)/2)+0.0002, z, new TGeoRotation("",0, 0, 0)));\r
1358       }\r
1359     // Done, return the stave structe\r
1360     return mechLaddVol;\r
1361 }\r
1362 \r
1363 // model3\r
1364 //________________________________________________________________________\r
1365 TGeoVolume* AliITSUv0Layer::CreateStaveModel3(const Double_t xlad,\r
1366                                                const Double_t zlad,\r
1367                                                const TGeoManager *mgr){\r
1368 //\r
1369 // Create the mechanical stave structure for Model 3 of TDR\r
1370 //\r
1371 // Input:\r
1372 //         xlad : X length\r
1373 //         zlad : Z length\r
1374 //         mgr  : the GeoManager (used only to get the proper material)\r
1375 //\r
1376 // Output:\r
1377 //\r
1378 // Return:\r
1379 //\r
1380 // Created:      28 May 2013  Chinorat Kobdaj\r
1381 // Updated:                   Mario Sitta\r
1382 // Updated:                   Wanchaloem Poonsawat \r
1383 //\r
1384   \r
1385   // Materials defined in AliITSUv0\r
1386   TGeoMedium *medAir    = mgr->GetMedium("ITS_AIR$");\r
1387   TGeoMedium *medWater  = mgr->GetMedium("ITS_WATER$");\r
1388 \r
1389   TGeoMedium *medM60J3K    = mgr->GetMedium("ITS_M60J3K$"); \r
1390   TGeoMedium *medKapton    = mgr->GetMedium("ITS_KAPTON(POLYCH2)$");\r
1391   TGeoMedium *medGlue      = mgr->GetMedium("ITS_GLUE$");\r
1392   TGeoMedium *medFlexCable = mgr->GetMedium("ITS_FLEXCABLE$");\r
1393   //TGeoMedium *medK13D2U2k  = mgr->GetMedium("ITS_K13D2U2k$");\r
1394   //TGeoMedium *medFGS003    = mgr->GetMedium("ITS_FGS003$"); \r
1395   //TGeoMedium *medCarbonFleece = mgr->GetMedium("ITS_CarbonFleece$"); \r
1396 \r
1397   // Local parameters\r
1398     Double_t kConeOutRadius = 0.15/2;\r
1399     Double_t kStaveLength = zlad*2;\r
1400     Double_t kStaveWidth = xlad*2;\r
1401     Double_t w = kStaveWidth/4;//1/2 of W\r
1402     Double_t staveHeight = 0.3;\r
1403     Double_t h = staveHeight/2;\r
1404     Double_t alpha = 90-33.;//90-30;\r
1405     Double_t the1 = alpha*TMath::DegToRad();\r
1406     Double_t s1 = w/TMath::Sin(the1);\r
1407     Double_t l = w/TMath::Tan(the1);\r
1408     Double_t s2 = TMath::Sqrt(h*h + s1*s1);//TMath::Sin(the2);\r
1409     Double_t the2 = TMath::ATan(h/s1);\r
1410     Double_t beta = the2*TMath::RadToDeg();\r
1411     Double_t klay4 = 0.007; //Glue\r
1412     Double_t klay5 = 0.01; //Flexcable\r
1413     Int_t  loop = (kStaveLength/(2*l))/2;\r
1414     Double_t hh = 0.01;\r
1415        Double_t ang1 = 0*TMath::DegToRad();\r
1416        Double_t ang2 = 0*TMath::DegToRad();\r
1417        Double_t ang3 = 0*TMath::DegToRad();\r
1418        Int_t modules = 4;\r
1419        Double_t headWidth=0.25;\r
1420        Double_t smcLength=kStaveLength/modules-2*headWidth;//6.25;\r
1421        Double_t smcWidth=kStaveWidth;\r
1422        Double_t smcSide1Thick=0.03;\r
1423        Double_t vaporThick=0.032;\r
1424        Double_t liquidThick=0.028;\r
1425        Double_t smcSide2Thick=0.01;\r
1426        Double_t smcSide3Thick=0.0055;\r
1427        Double_t smcSide4Thick=0.0095;\r
1428        Double_t smcSide5Thick=0.0075;\r
1429        Double_t smcSpace=0.01;\r
1430 \r
1431 \r
1432     char volname[30];\r
1433     snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);\r
1434     \r
1435     // detailed structure ++++++++++++++\r
1436     Double_t z=0, y=0-0.007, x=0;\r
1437 \r
1438     // Polimide micro channels numbers\r
1439     Double_t yMC = y-h+0.01;\r
1440     Int_t nb = (Int_t)(kStaveWidth/0.1)+1;\r
1441     Double_t xladMC = (nb*0.1-0.08)/2;\r
1442 \r
1443 \r
1444     TGeoVolume *mechLaddVol = 0;\r
1445     if (fBuildLevel < 5) {\r
1446       // world (trapezoid)\r
1447       TGeoXtru *mechStruct = new TGeoXtru(2); //z sections\r
1448       Double_t xv[5] = {kStaveWidth/2+0.1,kStaveWidth/2+0.1,0,-kStaveWidth/2-0.1,-kStaveWidth/2-0.1};\r
1449       Double_t yv[5] = {-kConeOutRadius*2-0.07,0,staveHeight,0,-kConeOutRadius*2-0.07};    \r
1450       mechStruct->DefinePolygon(5,xv,yv);\r
1451       mechStruct->DefineSection(0,-kStaveLength-0.1,0,0,1.);\r
1452       mechStruct->DefineSection(1,kStaveLength+0.1,0,0,1.);\r
1453       mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);\r
1454       mechLaddVol->SetLineColor(12);\r
1455       mechLaddVol->SetFillColor(12); \r
1456       mechLaddVol->SetVisibility(kTRUE);\r
1457 \r
1458        // Silicon micro channels numbers\r
1459       \r
1460       TGeoBBox *tM0a=new TGeoBBox(smcWidth/2, 0.003/2, headWidth/2);\r
1461       TGeoVolume *volTM0a=new TGeoVolume("microChanTop1", tM0a, medKapton);\r
1462       volTM0a->SetLineColor(35);\r
1463       volTM0a->SetFillColor(35); \r
1464 \r
1465       for(Int_t  mo=1; mo<=modules; mo++) {\r
1466       mechLaddVol->AddNode(volTM0a, 0, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));\r
1467       mechLaddVol->AddNode(volTM0a, 1, new TGeoCombiTrans(x,yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));\r
1468       }\r
1469       TGeoBBox *tM0c=new TGeoBBox(0.3/2, 0.003/2,smcLength/2);\r
1470       TGeoVolume *volTM0c=new TGeoVolume("microChanTop2", tM0c, medKapton);\r
1471       volTM0c->SetLineColor(35);\r
1472       volTM0c->SetFillColor(35); \r
1473       for(Int_t  mo=1; mo<=modules; mo++) {\r
1474       mechLaddVol->AddNode(volTM0c, 0, new TGeoCombiTrans(x+(smcWidth/2)-(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));\r
1475       mechLaddVol->AddNode(volTM0c, 1, new TGeoCombiTrans(x-(smcWidth/2)+(0.3/2),yMC+0.03, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1476       }\r
1477       TGeoBBox *tM0c1=new TGeoBBox(0.2225/2, 0.003/2,smcLength/2);\r
1478       TGeoVolume *volTM0c1=new TGeoVolume("microChanBot1", tM0c1, medKapton);\r
1479       volTM0c1->SetLineColor(6);\r
1480       volTM0c1->SetFillColor(6); \r
1481       for(Int_t  mo=1; mo<=modules; mo++) {\r
1482       mechLaddVol->AddNode(volTM0c1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1483       mechLaddVol->AddNode(volTM0c1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+(0.2225/2),yMC+0.03-hh-(0.003), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1484       }\r
1485       TGeoBBox *tM0c2=new TGeoBBox(0.072/2, 0.003/2,smcLength/2);\r
1486       TGeoVolume *volTM0c2=new TGeoVolume("microChanBot2", tM0c2, medKapton);\r
1487       volTM0c2->SetLineColor(35);\r
1488       volTM0c2->SetFillColor(35); \r
1489       for(Int_t  mo=1; mo<=modules; mo++) {\r
1490       mechLaddVol->AddNode(volTM0c2, 0, new TGeoCombiTrans(x+smcWidth/2-(0.072/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1491       }\r
1492       TGeoBBox *tM0c2r=new TGeoBBox(0.068/2, 0.003/2,smcLength/2);\r
1493       TGeoVolume *volTM0c2r=new TGeoVolume("microChanBot3", tM0c2r, medKapton);\r
1494       volTM0c2r->SetLineColor(35);\r
1495       volTM0c2r->SetFillColor(35); \r
1496       for(Int_t  mo=1; mo<=modules; mo++) {      \r
1497       mechLaddVol->AddNode(volTM0c2r, 0, new TGeoCombiTrans(x-smcWidth/2+(0.068/2),yMC+0.03-(0.035+0.0015)-(0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1498       }\r
1499       TGeoBBox *tM0d=new TGeoBBox(smcSide1Thick/2, 0.035/2,smcLength/2);\r
1500       TGeoVolume *volTM0d=new TGeoVolume("microChanSide1", tM0d, medKapton);\r
1501       volTM0d->SetLineColor(12);\r
1502       volTM0d->SetFillColor(12); \r
1503       for(Int_t  mo=1; mo<=modules; mo++) {\r
1504       mechLaddVol->AddNode(volTM0d, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1505       mechLaddVol->AddNode(volTM0d, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1506       }\r
1507 \r
1508       TGeoBBox *tM0d1=new TGeoBBox(smcSide2Thick/2, 0.035/2,smcLength/2);\r
1509       TGeoVolume *volTM0d1=new TGeoVolume("microChanSide2", tM0d1, medKapton);\r
1510       volTM0d1->SetLineColor(12);\r
1511       volTM0d1->SetFillColor(12); \r
1512       for(Int_t  mo=1; mo<=modules; mo++) {\r
1513       mechLaddVol->AddNode(volTM0d1, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1514       mechLaddVol->AddNode(volTM0d1, 1, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick/2),yMC+0.03-(0.003+0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1515       }\r
1516       TGeoBBox *tM0d2=new TGeoBBox(smcSide3Thick/2, (hh+0.003)/2, smcLength/2);\r
1517       TGeoVolume *volTM0d2=new TGeoVolume("microChanSide3", tM0d2, medKapton);\r
1518       volTM0d2->SetLineColor(12);\r
1519       volTM0d2->SetFillColor(12); \r
1520       for(Int_t  mo=1; mo<=modules; mo++) {\r
1521       mechLaddVol->AddNode(volTM0d2, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1522       }\r
1523       TGeoBBox *tM0d2r=new TGeoBBox(smcSide4Thick/2, (hh+0.003)/2, smcLength/2);\r
1524       TGeoVolume *volTM0d2r=new TGeoVolume("microChanSide4", tM0d2r, medKapton);\r
1525       volTM0d2r->SetLineColor(12);\r
1526       volTM0d2r->SetFillColor(12); \r
1527       for(Int_t  mo=1; mo<=modules; mo++) {\r
1528       mechLaddVol->AddNode(volTM0d2r, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick/2),yMC+0.03-(0.003+hh+0.003)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1529       }\r
1530       TGeoBBox *tM0e=new TGeoBBox(smcSide5Thick/2, hh/2,smcLength/2);\r
1531       TGeoVolume *volTM0e=new TGeoVolume("microChanSide5", tM0e, medKapton);    \r
1532       volTM0e->SetLineColor(12);\r
1533       volTM0e->SetFillColor(12); \r
1534       for(Int_t  mo=1; mo<=modules; mo++) {\r
1535       for (Int_t ie=0;ie<11;ie++) {\r
1536         mechLaddVol->AddNode(volTM0e, 0, new TGeoCombiTrans(x-(ie*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace-(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1537         mechLaddVol->AddNode(volTM0e, 1, new TGeoCombiTrans(x+(ie*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(liquidThick)+(smcSide2Thick)+(smcSide4Thick)+smcSpace+(smcSide5Thick/2),yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1538          }\r
1539       }\r
1540       \r
1541       TGeoBBox *tM0f=new TGeoBBox(0.02/2, hh/2, smcLength/2);\r
1542       TGeoVolume *volTM0f=new TGeoVolume("microChanTop3", tM0f, medKapton);\r
1543       //Double_t smcChannels=12;\r
1544       Double_t smcCloseWallvapor=smcWidth/2-smcSide1Thick-vaporThick-smcSide2Thick-smcSide3Thick-12*smcSpace-11*smcSide5Thick;\r
1545       Double_t smcCloseWallliquid=smcWidth/2-smcSide1Thick-liquidThick-smcSide2Thick-smcSide4Thick-12*smcSpace-11*smcSide5Thick;\r
1546       volTM0f->SetLineColor(12);\r
1547       volTM0f->SetFillColor(12); \r
1548       for(Int_t  mo=1; mo<=modules; mo++) {\r
1549        mechLaddVol->AddNode(volTM0f, 0, new TGeoCombiTrans(x+smcCloseWallvapor-(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1550        mechLaddVol->AddNode(volTM0f, 1, new TGeoCombiTrans(x-smcCloseWallliquid+(0.02)/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1551       }\r
1552       //Head(back) microchannel\r
1553 \r
1554       TGeoBBox *tM0hb=new TGeoBBox(smcWidth/2, 0.025/2, headWidth/2);\r
1555       TGeoVolume *volTM0hb=new TGeoVolume("microChanHeadBackBottom1", tM0hb, medKapton);\r
1556       volTM0hb->SetLineColor(4);\r
1557       volTM0hb->SetFillColor(4); \r
1558       for(Int_t  mo=1; mo<=modules; mo++) {\r
1559       mechLaddVol->AddNode(volTM0hb, 0, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1560       mechLaddVol->AddNode(volTM0hb, 1, new TGeoCombiTrans(x,yMC+0.03-0.0145-(0.025)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(headWidth/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1561       }\r
1562       TGeoBBox *tM0h1=new TGeoBBox(smcWidth/2, 0.013/2, 0.05/2);\r
1563       TGeoVolume *volTM0h1=new TGeoVolume("microChanHeadBackBottom2", tM0h1, medKapton);\r
1564       volTM0h1->SetLineColor(5);\r
1565       volTM0h1->SetFillColor(5); \r
1566       for(Int_t  mo=1; mo<=modules; mo++) {\r
1567       mechLaddVol->AddNode(volTM0h1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-headWidth+(0.05/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1568       }\r
1569       TGeoBBox *tM0h2=new TGeoBBox(smcWidth/2, 0.003/2, 0.18/2);\r
1570       TGeoVolume *volTM0h2=new TGeoVolume("microChanHeadBackBottom7", tM0h2, medKapton);\r
1571       volTM0h2->SetLineColor(6);\r
1572       volTM0h2->SetFillColor(6);\r
1573       for(Int_t  mo=1; mo<=modules; mo++) {\r
1574       mechLaddVol->AddNode(volTM0h2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-0.02-(0.18/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1575       }\r
1576       TGeoBBox *tM0h3=new TGeoBBox(smcWidth/2, 0.013/2, 0.02/2);\r
1577       TGeoVolume *volTM0h3=new TGeoVolume("microChanHeadBackBottom3", tM0h3, medKapton);\r
1578       volTM0h3->SetLineColor(5);\r
1579       volTM0h3->SetFillColor(5); \r
1580       for(Int_t  mo=1; mo<=modules; mo++) {\r
1581       mechLaddVol->AddNode(volTM0h3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth-smcLength/2-(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1582       }\r
1583       TGeoBBox *tM0b1=new TGeoBBox(smcWidth/2, 0.013/2, 0.03/2);\r
1584       TGeoVolume *volTM0b1=new TGeoVolume("microChanHeadBackBottom4", tM0b1, medKapton);\r
1585       volTM0b1->SetLineColor(5);\r
1586       volTM0b1->SetFillColor(5); \r
1587       for(Int_t  mo=1; mo<=modules; mo++) {\r
1588       mechLaddVol->AddNode(volTM0b1, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+headWidth-(0.03/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1589       }\r
1590       TGeoBBox *tM0b2=new TGeoBBox(smcWidth/2, 0.003/2, 0.2/2);\r
1591       TGeoVolume *volTM0b2=new TGeoVolume("microChanHeadBackBottom5", tM0b2, medKapton);\r
1592       volTM0b2->SetLineColor(6);\r
1593       volTM0b2->SetFillColor(6); \r
1594       for(Int_t  mo=1; mo<=modules; mo++) {\r
1595       mechLaddVol->AddNode(volTM0b2, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-0.01-(0.003/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+0.02+(0.2/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1596       }\r
1597       TGeoBBox *tM0b3=new TGeoBBox(smcWidth/2, 0.013/2, 0.02/2);\r
1598       TGeoVolume *volTM0b3=new TGeoVolume("microChanHeadBackBottom6", tM0b3, medKapton);\r
1599       volTM0b3->SetLineColor(5);\r
1600       volTM0b3->SetFillColor(5); \r
1601       for(Int_t  mo=1; mo<=modules; mo++) {\r
1602       mechLaddVol->AddNode(volTM0b3, 0, new TGeoCombiTrans(x,yMC+0.03-0.0015-(0.013/2), z+(mo-3)*kStaveLength/4+smcLength/2+headWidth+smcLength/2+(0.02/2), new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1603       }\r
1604      \r
1605       TGeoBBox *tM0b=new TGeoBBox(0.02/2, 0.02/2, zlad);\r
1606       TGeoVolume *volTM0b=new TGeoVolume("microChanWalls", tM0b, medKapton);\r
1607       volTM0b->SetLineColor(35);\r
1608       volTM0b->SetFillColor(35); \r
1609       for (Int_t ib=0;ib<nb;ib++) {\r
1610         //mechLaddVol->AddNode(volTM0b, ib, new TGeoCombiTrans(x+ib*0.1-xladMC+0.01,yMC, z, new TGeoRotation("",0, 0, 0)));\r
1611       }\r
1612       \r
1613       } \r
1614     \r
1615     if (fBuildLevel < 4) {\r
1616 \r
1617       //**********cooling  inlet outlet\r
1618 \r
1619       TGeoBBox *tM0dv=new TGeoBBox(vaporThick/2, 0.035/2,smcLength/2);\r
1620       TGeoVolume *volTM0dv=new TGeoVolume("microChanVapor", tM0dv, medWater);\r
1621       volTM0dv->SetLineColor(2);\r
1622       volTM0dv->SetFillColor(2);\r
1623       for(Int_t  mo=1; mo<=modules; mo++) {\r
1624       mechLaddVol->AddNode(volTM0dv, 0, new TGeoCombiTrans(x+smcWidth/2-(smcSide1Thick)-(vaporThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1625       }\r
1626       TGeoBBox *tM0dl=new TGeoBBox(liquidThick/2, 0.035/2,smcLength/2);\r
1627       TGeoVolume *volTM0dl=new TGeoVolume("microChanLiquid", tM0dl, medWater);\r
1628       volTM0dl->SetLineColor(3);\r
1629       volTM0dl->SetFillColor(3); \r
1630       for(Int_t  mo=1; mo<=modules; mo++) {\r
1631       mechLaddVol->AddNode(volTM0dl, 0, new TGeoCombiTrans(x-smcWidth/2+(smcSide1Thick)+(liquidThick/2),yMC+0.03-0.0015-(0.035)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1632       }\r
1633       // small cooling fluid now using water wait for freeon value  \r
1634       TGeoBBox *tM0dlq=new TGeoBBox(smcSpace/2, hh/2,smcLength/2);\r
1635       TGeoVolume *volTM0dlq=new TGeoVolume("smallLiquid", tM0dlq, medWater);\r
1636       volTM0dlq->SetLineColor(3);\r
1637       volTM0dlq->SetFillColor(3); \r
1638       TGeoBBox *tM0dvp=new TGeoBBox(smcSpace/2, hh/2,smcLength/2);\r
1639       TGeoVolume *volTM0dvp=new TGeoVolume("microChanVapor", tM0dvp, medWater);\r
1640       volTM0dvp->SetLineColor(2);\r
1641       volTM0dvp->SetFillColor(2); \r
1642       for(Int_t  mo=1; mo<=modules; mo++) {\r
1643       for (Int_t is=0;is<12;is++) {\r
1644         mechLaddVol->AddNode(volTM0dlq, 0, new TGeoCombiTrans(x+(is*(smcSpace+smcSide5Thick))-smcWidth/2+(smcSide1Thick)+(vaporThick)+(smcSide2Thick)+(smcSide3Thick)+smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1645         mechLaddVol->AddNode(volTM0dvp, 1, new TGeoCombiTrans(x-(is*(smcSpace+smcSide5Thick))+smcWidth/2-(smcSide1Thick)-(vaporThick)-(smcSide2Thick)-(smcSide3Thick)-smcSpace/2,yMC+0.03-(0.003+hh)/2, z+(mo-3)*kStaveLength/4+smcLength/2+headWidth, new TGeoRotation("",ang1, ang2, ang3)));//("",0, 0, 0)));\r
1646       }\r
1647       }\r
1648 \r
1649       //*************\r
1650 \r
1651     }\r
1652     \r
1653     if (fBuildLevel < 3) {\r
1654 \r
1655       //Bottom filament CFRP black-12 Carbon structure TGeoBBox (thickness,width,length)\r
1656  \r
1657       Double_t filWidth = 0.04;\r
1658       Double_t filHeight= 0.02;\r
1659       TGeoBBox *t1=new TGeoBBox(filHeight/2,filWidth/2,s1);\r
1660       TGeoVolume *volT1=new TGeoVolume("bottomFilament", t1, medM60J3K);\r
1661       volT1->SetLineColor(12);\r
1662       volT1->SetFillColor(12); \r
1663       for(int i=0;i<loop;i++){//i<30;i++){\r
1664         mechLaddVol->AddNode(volT1,4*i+0,\r
1665                                     new TGeoCombiTrans(x+w,y-h+0.04+filHeight/2,z-kStaveLength/2+(4*l*i)+s1/2, \r
1666                                                        new TGeoRotation("volT1",-90,alpha,0)));\r
1667         mechLaddVol->AddNode(volT1,4*i+1,\r
1668                                     new TGeoCombiTrans(x-w,y-h+0.04+filHeight/2,z-kStaveLength/2+(4*l*i)+s1/2, \r
1669                                                        new TGeoRotation("volT1",90,alpha,0)));\r
1670         mechLaddVol->AddNode(volT1,4*i+2,\r
1671                                     new TGeoCombiTrans(x+w,y-h+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, \r
1672                                                        new TGeoRotation("volT1",-90,-alpha,0)));\r
1673         mechLaddVol->AddNode(volT1,4*i+3,\r
1674                                     new TGeoCombiTrans(x-w,y-h+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, \r
1675                                                        new TGeoRotation("volT1",-90,+alpha,0)));\r
1676         }\r
1677  \r
1678      // Top filament CERP black-12 Carbon structure TGeoBBox (length,thickness,width)\r
1679 \r
1680       TGeoBBox *t2=new TGeoBBox(s2,filHeight/2,filWidth/2);\r
1681       TGeoVolume *volT2=new TGeoVolume("topFilament", t2, medM60J3K);\r
1682       volT2->SetLineColor(12);\r
1683       volT2->SetFillColor(12); \r
1684       for(int i=0;i<loop;i++){ //i<30;i++){\r
1685         mechLaddVol->AddNode(volT2,4*i+0,\r
1686                                     new TGeoCombiTrans(x+w,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*l)+s1/2,\r
1687                                                        new TGeoRotation("volT2",90,90-alpha,90-beta)));\r
1688         mechLaddVol->AddNode(volT2,4*i+1,\r
1689                                     new TGeoCombiTrans(x-w,y+0.04+filHeight/2,z-kStaveLength/2+(i*4*l)+s1/2,\r
1690                                                        new TGeoRotation("volT2",90,-90+alpha,-90+beta)));\r
1691         mechLaddVol->AddNode(volT2,4*i+2,\r
1692                                     new TGeoCombiTrans(x+w,y+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2,\r
1693                                                        new TGeoRotation("volT2",90,-90+alpha,90-beta)));\r
1694         mechLaddVol->AddNode(volT2,4*i+3,\r
1695                                     new TGeoCombiTrans(x-w,y+0.04+filHeight/2,z-kStaveLength/2+2*l+(i*4*l)+s1/2, \r
1696                                                        new TGeoRotation("volT2",90,90-alpha,-90+beta)));\r
1697         }\r
1698     }\r
1699 \r
1700     if (fBuildLevel < 2) {\r
1701 \r
1702       // Glue Filament and Silicon MicroChannel\r
1703       TGeoBBox *tM0=new TGeoBBox(xladMC/5, klay4/2, zlad);\r
1704       TGeoVolume *volTM0=new TGeoVolume("glueFM", tM0,medGlue );\r
1705       volTM0->SetLineColor(5);\r
1706       volTM0->SetFillColor(5); \r
1707       mechLaddVol->AddNode(volTM0, 0, new TGeoCombiTrans(x-xlad/2-0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0)));\r
1708       mechLaddVol->AddNode(volTM0, 1, new TGeoCombiTrans(x+xlad/2+0.25,0.03+yMC, z, new TGeoRotation("",0, 0, 0)));\r
1709 \r
1710             \r
1711       // Glue microchannel and sensor\r
1712       TGeoBBox *glueM = new TGeoBBox(xladMC/5, klay4/2, zlad);\r
1713       TGeoVolume *volGlueM=new TGeoVolume("glueMS", glueM, medGlue);\r
1714       volGlueM->SetLineColor(5);\r
1715       volGlueM->SetFillColor(5); \r
1716       mechLaddVol->AddNode(volGlueM, 0, new TGeoCombiTrans(x-xlad/2-0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0)));\r
1717       mechLaddVol->AddNode(volGlueM, 1, new TGeoCombiTrans(x+xlad/2+0.25,yMC-0.01, z, new TGeoRotation("",0, 0, 0)));\r
1718      \r
1719        // Glue sensor and kapton\r
1720       TGeoBBox *glue = new TGeoBBox(xlad, klay4/2, zlad);\r
1721       TGeoVolume *volGlue=new TGeoVolume("glueSensorBus", glue, medGlue);\r
1722       volGlue->SetLineColor(5);\r
1723       volGlue->SetFillColor(5); \r
1724        mechLaddVol->AddNode(volGlue, 1, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4/2, z, new TGeoRotation("",0, 0, 0)));\r
1725     }      \r
1726 \r
1727     if (fBuildLevel < 1) {\r
1728       TGeoBBox *kapCable = new TGeoBBox(xlad, klay5/2, zlad);\r
1729       TGeoVolume *volCable=new TGeoVolume("Flexcable", kapCable, medFlexCable);\r
1730       volCable->SetLineColor(28);\r
1731       volCable->SetFillColor(28); \r
1732       mechLaddVol->AddNode(volCable, 0, new TGeoCombiTrans(x, y-0.154-fSensorThick-klay4-klay5/2, z, new TGeoRotation("",0, 0, 0)));\r
1733     }\r
1734 \r
1735   // Done, return the stave structur\r
1736     return mechLaddVol;\r
1737  }\r
1738 \r
1739 //________________________________________________________________________\r
1740 TGeoVolume* AliITSUv0Layer::CreateModule(const Double_t xlad,\r
1741                                          const Double_t ylad,   \r
1742                                          const Double_t zlad,\r
1743                                          const TGeoManager *mgr){\r
1744 //\r
1745 // Creates the actual Module\r
1746 //\r
1747 // Input:\r
1748 //         xlad,zlad : the ladder dimensions\r
1749 //         mgr  : the GeoManager (used only to get the proper material)\r
1750 //\r
1751 // Output:\r
1752 //\r
1753 // Return:\r
1754 //\r
1755 // Created:      22 Jun 2011  Mario Sitta\r
1756 //\r
1757 \r
1758   char volname[30];\r
1759   Double_t xlen, ylen, zlen;\r
1760   Double_t xpos, ypos, zpos;\r
1761 \r
1762 \r
1763   // First create all needed shapes\r
1764 \r
1765   // The module\r
1766   TGeoBBox *module = new TGeoBBox(xlad,  ylad, zlad/fNModules);\r
1767 \r
1768   // The sensor\r
1769   xlen = module->GetDX();\r
1770   ylen = 0.5*fSensorThick;\r
1771   zlen = module->GetDZ();\r
1772   TGeoBBox *sensor = new TGeoBBox(xlen, ylen, zlen);\r
1773 \r
1774 \r
1775   // We have all shapes: now create the real volumes\r
1776   //TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");\r
1777   TGeoMedium *medSi  = mgr->GetMedium("ITS_SI$");\r
1778 \r
1779   snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSModulePattern(), fLayerNumber);\r
1780   // TGeoVolume *modVol = new TGeoVolume(volname, module, medAir);\r
1781   TGeoVolume *modVol = new TGeoVolume(volname, module, medSi);\r
1782   modVol->SetVisibility(kTRUE);\r
1783   modVol->SetLineColor(1);\r
1784 \r
1785   snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSSensorPattern(), fLayerNumber);\r
1786   TGeoVolume *sensVol = new TGeoVolume(volname, sensor, medSi);\r
1787   sensVol->SetVisibility(kTRUE);\r
1788   sensVol->SetLineColor(8);\r
1789   sensVol->SetLineWidth(1);\r
1790   sensVol->SetFillColor(sensVol->GetLineColor());\r
1791   sensVol->SetFillStyle(4000); // 0% transparent\r
1792 \r
1793 \r
1794   // Now build up the module\r
1795   xpos = 0.;\r
1796   ypos = -module->GetDY() + sensor->GetDY();\r
1797   zpos = 0.;\r
1798 \r
1799   modVol->AddNode(sensVol, 1, new TGeoTranslation(xpos, ypos, zpos));\r
1800 \r
1801   // Done, return the module\r
1802   return modVol;\r
1803 }\r
1804 \r
1805 //________________________________________________________________________\r
1806 Double_t AliITSUv0Layer::RadiusOfTurboContainer(){\r
1807 //\r
1808 // Computes the inner radius of the air container for the Turbo configuration\r
1809 // as the radius of either the circle tangent to the ladder or the circle\r
1810 // passing for the ladder's lower vertex\r
1811 //\r
1812 // Input:\r
1813 //         none (all needed parameters are class members)\r
1814 //\r
1815 // Output:\r
1816 //\r
1817 // Return:\r
1818 //        the radius of the container if >0, else flag to use the lower vertex\r
1819 //\r
1820 // Created:      08 Mar 2012  Mario Sitta\r
1821 //\r
1822 \r
1823   Double_t rr, delta, z, lladd, rladd;\r
1824 \r
1825   if (fLadderThick > 89.) // Very big angle: avoid overflows since surely\r
1826     return -1;            // the radius from lower vertex is the right value\r
1827 \r
1828   rladd = fLayRadius + 0.5*fLadderThick;\r
1829   delta = (0.5*fLadderThick)/CosD(fLadderTilt);\r
1830   z     = (0.5*fLadderThick)*TanD(fLadderTilt);\r
1831 \r
1832   rr = rladd - delta;\r
1833   lladd = (0.5*fLadderWidth) - z;\r
1834 \r
1835   if ( (rr*SinD(fLadderTilt) < lladd) )\r
1836     return (rr*CosD(fLadderTilt));\r
1837   else\r
1838     return -1;\r
1839 }\r
1840 \r
1841 //________________________________________________________________________\r
1842 void AliITSUv0Layer::SetLadderTilt(const Double_t t)\r
1843 {\r
1844 //\r
1845 // Sets the Ladder tilt angle (for turbo layers only)\r
1846 //\r
1847 // Input:\r
1848 //         t :  the ladder tilt angle\r
1849 //\r
1850 // Output:\r
1851 //\r
1852 // Return:\r
1853 //\r
1854 // Created:      08 Jul 2011  Mario Sitta\r
1855 //\r
1856 \r
1857   if (fIsTurbo)\r
1858     fLadderTilt = t;\r
1859   else\r
1860     AliError("Not a Turbo layer");\r
1861 \r
1862 }\r
1863 \r
1864 //________________________________________________________________________\r
1865 void AliITSUv0Layer::SetLadderWidth(const Double_t w){\r
1866 //\r
1867 // Sets the Ladder width (for turbo layers only)\r
1868 //\r
1869 // Input:\r
1870 //         w :  the ladder width\r
1871 //\r
1872 // Output:\r
1873 //\r
1874 // Return:\r
1875 //\r
1876 // Created:      08 Jul 2011  Mario Sitta\r
1877 //\r
1878 \r
1879   if (fIsTurbo)\r
1880     fLadderWidth = w;\r
1881   else\r
1882     AliError("Not a Turbo layer");\r
1883 \r
1884 }\r
1885 \r