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