1 /**************************************************************************
\r
2 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
\r
4 * Author: The ALICE Off-line Project. *
\r
5 * Contributors are mentioned in the code where appropriate. *
\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
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
21 // Mario Sitta <sitta@to.infn.it>
\r
22 // Chinorat Kobdaj (kobdaj@g.sut.ac.th)
\r
23 //*************************************************************************
\r
26 /* $Id: AliITSUv0Layer.cxx */
\r
27 // General Root includes
\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
47 const Double_t AliITSUv0Layer::fgkDefaultSensorThick = 300*fgkmicron;
\r
48 const Double_t AliITSUv0Layer::fgkDefaultLadderThick = 1*fgkcm;
\r
50 ClassImp(AliITSUv0Layer)
\r
52 #define SQ(A) (A)*(A)
\r
54 //________________________________________________________________________
\r
55 AliITSUv0Layer::AliITSUv0Layer():
\r
56 AliITSv11Geometry(),
\r
70 fStaveModel(kModel0)
\r
73 // Standard constructor
\r
77 //________________________________________________________________________
\r
78 AliITSUv0Layer::AliITSUv0Layer(Int_t debug):
\r
79 AliITSv11Geometry(debug),
\r
93 fStaveModel(kModel0)
\r
96 // Constructor setting debugging level
\r
100 //________________________________________________________________________
\r
101 AliITSUv0Layer::AliITSUv0Layer(Int_t lay, Int_t debug):
\r
102 AliITSv11Geometry(debug),
\r
116 fStaveModel(kModel0)
\r
119 // Constructor setting layer number and debugging level
\r
123 //________________________________________________________________________
\r
124 AliITSUv0Layer::AliITSUv0Layer(Int_t lay, Bool_t turbo, Int_t debug):
\r
125 AliITSv11Geometry(debug),
\r
139 fStaveModel(kModel0)
\r
142 // Constructor setting layer number and debugging level
\r
143 // for a "turbo" layer (i.e. where ladders overlap in phi)
\r
147 //________________________________________________________________________
\r
148 AliITSUv0Layer::AliITSUv0Layer(const AliITSUv0Layer &s):
\r
149 AliITSv11Geometry(s.GetDebug()),
\r
150 fLayerNumber(s.fLayerNumber),
\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
166 // Copy constructor
\r
170 //________________________________________________________________________
\r
171 AliITSUv0Layer& AliITSUv0Layer::operator=(const AliITSUv0Layer &s)
\r
174 // Assignment operator
\r
176 if(&s == this) return *this;
\r
178 fLayerNumber = s.fLayerNumber;
\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
196 //________________________________________________________________________
\r
197 AliITSUv0Layer::~AliITSUv0Layer() {
\r
203 //________________________________________________________________________
\r
204 void AliITSUv0Layer::CreateLayer(TGeoVolume *moth){
\r
206 // Creates the actual Layer and places inside its mother volume
\r
209 // moth : the TGeoVolume owing the volume structure
\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
221 Double_t xpos, ypos, zpos;
\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
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
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
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
250 // If a Turbo layer is requested, do it and exit
\r
252 CreateLayerTurbo(moth);
\r
257 // First create the ladder container
\r
258 alpha = (360./(2*fNLadders))*DegToRad();
\r
260 // fLadderWidth = fLayRadius*Tan(alpha);
\r
262 snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLayerPattern(),fLayerNumber);
\r
263 TGeoVolume *layVol = new TGeoVolumeAssembly(volname);
\r
264 layVol->SetUniqueID(fDetTypeID);
\r
266 // layVol->SetVisibility(kFALSE);
\r
267 layVol->SetVisibility(kTRUE);
\r
268 layVol->SetLineColor(1);
\r
270 TGeoVolume *laddVol = CreateLadder();
\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
282 layVol->AddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos,
\r
283 new TGeoRotation("",phi,0,0)));
\r
287 // Finally put everything in the mother volume
\r
288 moth->AddNode(layVol, 1, 0);
\r
291 // Upgrade geometry is served
\r
295 //________________________________________________________________________
\r
296 void AliITSUv0Layer::CreateLayerTurbo(TGeoVolume *moth){
\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
304 // moth : the TGeoVolume owing the volume structure
\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
318 Double_t xpos, ypos, zpos;
\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
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
337 // Now build up the layer
\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
349 layVol->AddNode(laddVol, j, new TGeoCombiTrans( xpos, ypos, zpos,
\r
350 new TGeoRotation("", phi-fLadderTilt,0,0)));
\r
354 // Finally put everything in the mother volume
\r
355 moth->AddNode(layVol, 1, 0);
\r
360 //________________________________________________________________________
\r
361 TGeoVolume* AliITSUv0Layer::CreateLadder(const TGeoManager *mgr){
\r
363 // Creates the actual Ladder
\r
366 // mgr : the GeoManager (used only to get the proper material)
\r
372 // Created: 22 Jun 2011 Mario Sitta
\r
376 Double_t xlen, ylen, zlen;
\r
377 Double_t xpos, ypos, zpos, zmod;
\r
381 // First create all needed shapes
\r
382 alpha = (360./(2*fNLadders))*DegToRad();
\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
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
401 // We have all shapes: now create the real volumes
\r
402 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
404 snprintf(volname, 30, "%s%d", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
405 TGeoVolume *laddVol = new TGeoVolume(volname, ladder, medAir);
\r
407 // laddVol->SetVisibility(kFALSE);
\r
408 laddVol->SetVisibility(kTRUE);
\r
409 laddVol->SetLineColor(2);
\r
410 TGeoVolume *modVol = CreateModule(xlen,ylen, zlen);
\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
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
423 // put mechanical stave structure, only inner barrel up to now
\r
424 if (fLayerNumber<3) {
\r
425 TGeoVolume *mechLaddVol = CreateStaveStruct(xlen,zlen);
\r
427 laddVol->AddNode(mechLaddVol, fNModules, new TGeoCombiTrans(0, -0.15-ylen, 0, new TGeoRotation("",0, 0, 180)));
\r
431 // Done, return the ladder
\r
435 //________________________________________________________________________
\r
436 TGeoVolume* AliITSUv0Layer::CreateStaveStruct(const Double_t xlad,
\r
437 const Double_t zlad,
\r
438 const TGeoManager *mgr){
\r
440 // Create the mechanical stave structure
\r
445 // mgr : the GeoManager (used only to get the proper material)
\r
451 // Created: 22 Mar 2013 Chinorat Kobdaj
\r
452 // Updated: 26 Apr 2013 Mario Sitta
\r
455 TGeoVolume *mechLaddVol = 0;
\r
457 switch (fStaveModel) {
\r
459 mechLaddVol = CreateStaveModelDummy(xlad,zlad,mgr);
\r
462 mechLaddVol = CreateStaveModel0(xlad,zlad,mgr);
\r
465 mechLaddVol = CreateStaveModel1(xlad,zlad,mgr);
\r
468 mechLaddVol = CreateStaveModel21(xlad,zlad,mgr);
\r
471 mechLaddVol = CreateStaveModel22(xlad,zlad,mgr);
\r
474 mechLaddVol = CreateStaveModel3(xlad,zlad,mgr);
\r
477 AliFatal(Form("Unknown stave model %d",fStaveModel));
\r
481 return mechLaddVol;
\r
485 //________________________________________________________________________
\r
486 TGeoVolume* AliITSUv0Layer::CreateStaveModelDummy(const Double_t ,
\r
488 const TGeoManager *){
\r
490 // Create dummy stave
\r
495 // mgr : the GeoManager (used only to get the proper material)
\r
501 // Created: 22 Mar 2013 Chinorat Kobdaj
\r
502 // Updated: 26 Apr 2013 Mario Sitta
\r
505 // Done, return the stave structur
\r
509 //________________________________________________________________________
\r
510 TGeoVolume* AliITSUv0Layer::CreateStaveModel0(const Double_t xlad,
\r
511 const Double_t zlad,
\r
512 const TGeoManager *mgr){
\r
514 // Create the mechanical stave structure for Model 0 of TDR
\r
519 // mgr : the GeoManager (used only to get the proper material)
\r
525 // Created: 22 Mar 2013 Chinorat Kobdaj
\r
526 // Updated: 26 Apr 2013 Mario Sitta
\r
529 // Materials defined in AliITSUv0
\r
530 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
531 TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$");
\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
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
557 AliDebug(1, Form("BuildLevel %d\n",fBuildLevel));
\r
560 snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
562 Double_t z=0, y=-0.011+0.0150, x=0;
\r
564 TGeoVolume *mechLaddVol = 0;
\r
566 if (fBuildLevel < 5) {
\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
576 mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);
\r
577 mechLaddVol->SetLineColor(12);
\r
578 mechLaddVol->SetFillColor(12);
\r
579 mechLaddVol->SetVisibility(kTRUE);
\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
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
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
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
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
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
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
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
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
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
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
689 // Done, return the stave structur
\r
690 return mechLaddVol;
\r
694 //________________________________________________________________________
\r
695 TGeoVolume* AliITSUv0Layer::CreateStaveModel1(const Double_t xlad,
\r
696 const Double_t zlad,
\r
697 const TGeoManager *mgr){
\r
699 // Create the mechanical stave structure for Model 1 of TDR
\r
704 // mgr : the GeoManager (used only to get the proper material)
\r
710 // Created: 22 Mar 2013 Chinorat Kobdaj
\r
711 // Updated: 26 Apr 2013 Mario Sitta
\r
714 // Materials defined in AliITSUv0
\r
715 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
716 TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$");
\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
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
742 TGeoVolume *mechLaddVol = 0;
\r
745 snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
748 // detailed structure ++++++++++++++
\r
749 Double_t z=0, y=-0.011+0.0150, x=0;
\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
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
766 mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);
\r
767 mechLaddVol->SetLineColor(12);
\r
768 mechLaddVol->SetFillColor(12);
\r
769 mechLaddVol->SetVisibility(kTRUE);
\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
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
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
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
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
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
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
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
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
888 // Done, return the stave structur
\r
889 return mechLaddVol;
\r
893 //________________________________________________________________________
\r
894 TGeoVolume* AliITSUv0Layer::CreateStaveModel21(const Double_t xlad,
\r
895 const Double_t zlad,
\r
896 const TGeoManager *mgr){
\r
898 // Create the mechanical stave structure for Model 2.1 of TDR
\r
903 // mgr : the GeoManager (used only to get the proper material)
\r
909 // Created: 22 Mar 2013 Chinorat Kobdaj
\r
910 // Updated: 26 Apr 2013 Mario Sitta
\r
913 // Materials defined in AliITSUv0
\r
914 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
915 TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$");
\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
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
949 snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
951 Double_t z=0, y=-(kConeOutRadius+0.03)+0.0385, x=0;
\r
953 TGeoVolume *mechLaddVol = 0;
\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
964 mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);
\r
965 mechLaddVol->SetLineColor(12);
\r
966 mechLaddVol->SetFillColor(12);
\r
967 mechLaddVol->SetVisibility(kTRUE);
\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
978 if (fBuildLevel < 4) {
\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
988 if (fBuildLevel < 3) {
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1116 // Done, return the stave structure
\r
1117 return mechLaddVol;
\r
1121 //________________________________________________________________________
\r
1122 TGeoVolume* AliITSUv0Layer::CreateStaveModel22(const Double_t xlad,
\r
1123 const Double_t zlad,
\r
1124 const TGeoManager *mgr){
\r
1126 // Create the mechanical stave structure for Model 2.2 of TDR
\r
1129 // xlad : X length
\r
1130 // zlad : Z length
\r
1131 // mgr : the GeoManager (used only to get the proper material)
\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
1142 // Materials defined in AliITSUv0
\r
1143 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
1144 TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$");
\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
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
1180 Int_t loop = (Int_t)(kStaveLength/(2*kL1));
\r
1183 snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
1185 Double_t z=0, y=-(2*kConeOutRadius)+klay1+klay2+fSensorThick/2-0.0004, x=0;
\r
1187 TGeoVolume *mechLaddVol = 0;
\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
1201 mechLaddVol = new TGeoVolume(volname, mechStruct, medAir);
\r
1202 mechLaddVol->SetLineColor(12);
\r
1203 mechLaddVol->SetFillColor(12);
\r
1204 mechLaddVol->SetVisibility(kTRUE);
\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
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
1224 if (fBuildLevel < 3) {
\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
1242 //Vertex structure
\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
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
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
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
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
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
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
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
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
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
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
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
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
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
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
1359 // Done, return the stave structe
\r
1360 return mechLaddVol;
\r
1364 //________________________________________________________________________
\r
1365 TGeoVolume* AliITSUv0Layer::CreateStaveModel3(const Double_t xlad,
\r
1366 const Double_t zlad,
\r
1367 const TGeoManager *mgr){
\r
1369 // Create the mechanical stave structure for Model 3 of TDR
\r
1372 // xlad : X length
\r
1373 // zlad : Z length
\r
1374 // mgr : the GeoManager (used only to get the proper material)
\r
1380 // Created: 28 May 2013 Chinorat Kobdaj
\r
1381 // Updated: Mario Sitta
\r
1382 // Updated: Wanchaloem Poonsawat
\r
1385 // Materials defined in AliITSUv0
\r
1386 TGeoMedium *medAir = mgr->GetMedium("ITS_AIR$");
\r
1387 TGeoMedium *medWater = mgr->GetMedium("ITS_WATER$");
\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
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 stave_height = 0.3;
\r
1403 Double_t H = stave_height/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
1433 snprintf(volname, 30, "%s%d_StaveStruct", AliITSUGeomTGeo::GetITSLadderPattern(), fLayerNumber);
\r
1435 // detailed structure ++++++++++++++
\r
1436 Double_t z=0, y=0-0.007, x=0;
\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
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,stave_height,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
1458 // Silicon micro channels numbers
\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
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
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
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
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
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
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
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
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
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
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
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
1552 //Head(back) microchannel
\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
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
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
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
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
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
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
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
1615 if (fBuildLevel < 4) {
\r
1617 //**********cooling inlet outlet
\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
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
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
1653 if (fBuildLevel < 3) {
\r
1655 //Bottom filament CFRP black-12 Carbon structure TGeoBBox (thickness,width,length)
\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
1678 // Top filament CERP black-12 Carbon structure TGeoBBox (length,thickness,width)
\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
1700 if (fBuildLevel < 2) {
\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
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
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
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
1735 // Done, return the stave structur
\r
1736 return mechLaddVol;
\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
1745 // Creates the actual Module
\r
1748 // xlad,zlad : the ladder dimensions
\r
1749 // mgr : the GeoManager (used only to get the proper material)
\r
1755 // Created: 22 Jun 2011 Mario Sitta
\r
1759 Double_t xlen, ylen, zlen;
\r
1760 Double_t xpos, ypos, zpos;
\r
1763 // First create all needed shapes
\r
1766 TGeoBBox *module = new TGeoBBox(xlad, ylad, zlad/fNModules);
\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
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
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
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
1794 // Now build up the module
\r
1796 ypos = -module->GetDY() + sensor->GetDY();
\r
1799 modVol->AddNode(sensVol, 1, new TGeoTranslation(xpos, ypos, zpos));
\r
1801 // Done, return the module
\r
1805 //________________________________________________________________________
\r
1806 Double_t AliITSUv0Layer::RadiusOfTurboContainer(){
\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
1813 // none (all needed parameters are class members)
\r
1818 // the radius of the container if >0, else flag to use the lower vertex
\r
1820 // Created: 08 Mar 2012 Mario Sitta
\r
1823 Double_t rr, delta, z, lladd, rladd;
\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
1828 rladd = fLayRadius + 0.5*fLadderThick;
\r
1829 delta = (0.5*fLadderThick)/CosD(fLadderTilt);
\r
1830 z = (0.5*fLadderThick)*TanD(fLadderTilt);
\r
1832 rr = rladd - delta;
\r
1833 lladd = (0.5*fLadderWidth) - z;
\r
1835 if ( (rr*SinD(fLadderTilt) < lladd) )
\r
1836 return (rr*CosD(fLadderTilt));
\r
1841 //________________________________________________________________________
\r
1842 void AliITSUv0Layer::SetLadderTilt(const Double_t t)
\r
1845 // Sets the Ladder tilt angle (for turbo layers only)
\r
1848 // t : the ladder tilt angle
\r
1854 // Created: 08 Jul 2011 Mario Sitta
\r
1860 AliError("Not a Turbo layer");
\r
1864 //________________________________________________________________________
\r
1865 void AliITSUv0Layer::SetLadderWidth(const Double_t w){
\r
1867 // Sets the Ladder width (for turbo layers only)
\r
1870 // w : the ladder width
\r
1876 // Created: 08 Jul 2011 Mario Sitta
\r
1882 AliError("Not a Turbo layer");
\r