]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSv11GeometrySupport.cxx
Possibility of switching on Lorentz drift in SPD (G. Bruno)
[u/mrichter/AliRoot.git] / ITS / AliITSv11GeometrySupport.cxx
CommitLineData
172b0d90 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
cee918ed 16// This class Defines the Geometry for the ITS services and support cones
17// outside of the ceneteral volume (except for the Ceneteral support
18// cylinders. Other classes define the rest of the ITS. Specificaly the ITS
19// The SSD support cone,SSD Support centeral cylinder, SDD support cone,
20// The SDD cupport centeral cylinder, the SPD Thermal Sheald, The supports
21// and cable trays on both the RB26 (muon dump) and RB24 sides, and all of
22// the cabling from the ladders/stave ends out past the TPC.
23
172b0d90 24/* $Id$ */
172b0d90 25// General Root includes
172b0d90 26#include <TMath.h>
172b0d90 27// Root Geometry includes
543b7370 28//#include <AliLog.h>
172b0d90 29#include <TGeoManager.h>
30#include <TGeoVolume.h>
31#include <TGeoPcon.h>
32#include <TGeoCone.h>
33#include <TGeoTube.h> // contaings TGeoTubeSeg
34#include <TGeoArb8.h>
db486a6e 35#include <TGeoXtru.h>
172b0d90 36#include <TGeoCompositeShape.h>
37#include <TGeoMatrix.h>
172b0d90 38#include "AliITSv11GeometrySupport.h"
39
40ClassImp(AliITSv11GeometrySupport)
41
42#define SQ(A) (A)*(A)
43
44//______________________________________________________________________
a275e8ba 45void AliITSv11GeometrySupport::SPDCone(TGeoVolume *moth,TGeoManager *mgr)
46{
47//
48// Creates the SPD thermal shield as a volume assembly
49// and adds it to the mother volume
50// (this is actually a merge of the previous SPDThermalSheald method
51// of AliITSv11GeometrySupport.cxx,v 1.9 2007/06/06 and the
52// CreateSPDThermalShield method of AliITSv11Hybrid)
53//
54// Input:
55// moth : the TGeoVolume owing the volume structure
56// mgr : the GeoManager (default gGeoManager)
57// Output:
58//
59// Created: ??? ???
60// Updated: 11 Dec 2007 Mario Sitta
61//
62// Technical data are taken from: ALICE-Thermal Screen "Cone transition"
63// (thermal-screen1_a3.ps), "Cylinder" (thermal-screen2_a3.ps), "Half
64// assembly" (thermal-screen3_a3.ps), "Flange" (thermal-screen4_a3.ps)
65
66
67 // Dimensions of the Central shield
68 const Double_t kHalfLengthCentral = 400.*fgkmm;
69 const Double_t kThicknessCentral = 0.4*fgkmm;
70 const Double_t kInnerRadiusCentral = 8.1475*fgkcm;
71 const Double_t kOuterRadiusCentral = 9.9255*fgkcm;
72 const Double_t kInnerACentral = 3.1674*fgkcm;
73 const Double_t kInnerBCentral = 2.023 *fgkcm;
74 const Double_t kOuterACentral = 2.4374*fgkcm;
75 const Double_t kOuterBCentral = 3.8162*fgkcm;
76 // Dimensions of the EndCap shield
77 const Double_t kHalfLengthEndCap = 25.*fgkmm;
78 const Double_t kThicknessEndCap = 2.0*fgkmm;
79 const Double_t kInnerRadiusEndCap = 8.0775*fgkcm;
80 const Double_t kOuterRadiusEndCap = 9.9955*fgkcm;
81 const Double_t kInnerAEndCap = 3.1453*fgkcm;
82 const Double_t kInnerBEndCap = 2.0009*fgkcm;
83 const Double_t kOuterAEndCap = 2.4596*fgkcm;
84 const Double_t kOuterBEndCap = 3.8384*fgkcm;
85 // Dimensions of the Cone shield
86 const Double_t kHalfLengthCone = 145.*fgkmm;
87 const Double_t kThicknessCone = 0.3*fgkmm;
88 const Double_t kInnerRadialCone = 37.3*fgkcm;
89 const Double_t kOuterRadialCone = 39.0*fgkcm;
90 const Double_t kInnerACone = 14.2344*fgkcm;
91 // const Double_t kInnerBCone = 9.0915*fgkcm;
92 const Double_t kOuterACone = 9.5058*fgkcm;
93 // const Double_t kOuterBCone = 14.8831*fgkcm;
94 // Dimensions of the Flange's Ring and Wing
95 const Double_t kHalfLengthRing = 7.5*fgkmm;
96 const Double_t kThicknessRing = 0.3*fgkmm;
97 const Double_t kInnerRadiusRing = 37.3*fgkcm;
98 const Double_t kOuterRadiusRing = 42.0*fgkcm;
99 const Double_t kOuterRadiusWing = 49.25*fgkcm;
100 const Double_t kWideWing = 6.0*fgkcm;
101 const Double_t kThetaWing = 45.0;
102 // Common data
103 const Double_t kTheta = 36.0*TMath::DegToRad();
104 const Double_t kThicknessOmega = 0.3*fgkmm;
105
106 // Local variables
107 Double_t x, y;
108 Double_t xshld[24], yshld[24];
109 Double_t xair[24] , yair[24];
110 Double_t xomega[48], yomega[48];
111 // Double_t *xyarb8;
112
113 // The entire shield is made up of two half central shields
114 // symmetric with respect to the XZ plane, four half end cap
115 // shields, again symmetric with respect to the XZ plane, and four
116 // half cones, symmetric with respect to the XZ plane too.
117
118 TGeoVolumeAssembly *vM = new TGeoVolumeAssembly("ITSspdThermalShield");
119
120 // The central half shield: a half tube of carbon fiber,
121 // a similar but proportionally smaller half tube of air inside it,
122 // and a Omega-shaped carbon fiber insert inside the air.
123 // They are all XTru shapes
124
125 TGeoXtru *centralshape = new TGeoXtru(2);
126
127 CreateSPDThermalShape(kInnerACentral,kInnerBCentral,kInnerRadiusCentral,
128 kOuterACentral,kOuterBCentral,kOuterRadiusCentral,
129 kTheta,xshld,yshld);
130
131 centralshape->DefinePolygon(24,xshld,yshld);
132 centralshape->DefineSection(0,-kHalfLengthCentral);
133 centralshape->DefineSection(1, kHalfLengthCentral);
134
135 // Now rescale to get the air volume dimensions
136 InsidePoint(xshld[23], yshld[23],
137 xshld[ 0], yshld[ 0],
138 xshld[ 1], yshld[ 1], kThicknessCentral,
139 xair[0], yair[0]);
140 for (Int_t i=1; i<23; i++) {
141 InsidePoint(xshld[i-1], yshld[i-1],
142 xshld[ i ], yshld[ i ],
143 xshld[i+1], yshld[i+1], kThicknessCentral,
144 xair[i], yair[i]);
145 }
146 InsidePoint(xshld[22], yshld[22],
147 xshld[23], yshld[23],
148 xshld[ 0], yshld[ 0], kThicknessCentral,
149 xair[23], yair[23]);
150
151 // Create the air shape
152 TGeoXtru *centralairshape = new TGeoXtru(2);
153
154 centralairshape->DefinePolygon(24,xair,yair);
155 centralairshape->DefineSection(0,-kHalfLengthCentral);
156 centralairshape->DefineSection(1, kHalfLengthCentral);
157
158 // Create the Omega insert
159 TGeoXtru *centralomegashape = new TGeoXtru(2);
160
161 CreateSPDOmegaShape(xair,yair,kTheta,kThicknessOmega,xomega,yomega);
162
163 centralomegashape->DefinePolygon(48,xomega,yomega);
164 centralomegashape->DefineSection(0,-kHalfLengthCentral);
165 centralomegashape->DefineSection(1, kHalfLengthCentral);
166
167 // The end cap half shield: a half tube of carbon fiber,
168 // a similar but proportionally smaller half tube of air inside it,
169 // and a Omega-shaped carbon fiber insert inside the air.
170 // They are all XTru shapes
171
172 TGeoXtru *endcapshape = new TGeoXtru(2);
173
174 CreateSPDThermalShape(kInnerAEndCap,kInnerBEndCap,kInnerRadiusEndCap,
175 kOuterAEndCap,kOuterBEndCap,kOuterRadiusEndCap,
176 kTheta,xshld,yshld);
177
178 endcapshape->DefinePolygon(24,xshld,yshld);
179 endcapshape->DefineSection(0,-kHalfLengthEndCap);
180 endcapshape->DefineSection(1, kHalfLengthEndCap);
181
182 // Now rescale to get the air volume dimensions
183 InsidePoint(xshld[23], yshld[23],
184 xshld[ 0], yshld[ 0],
185 xshld[ 1], yshld[ 1], kThicknessEndCap,
186 xair[0], yair[0]);
187 for (Int_t i=1; i<23; i++) {
188 InsidePoint(xshld[i-1], yshld[i-1],
189 xshld[ i ], yshld[ i ],
190 xshld[i+1], yshld[i+1], kThicknessEndCap,
191 xair[i], yair[i]);
192 }
193 InsidePoint(xshld[22], yshld[22],
194 xshld[23], yshld[23],
195 xshld[ 0], yshld[ 0], kThicknessEndCap,
196 xair[23], yair[23]);
197
198 // Create the air shape
199 TGeoXtru *endcapairshape = new TGeoXtru(2);
200
201 endcapairshape->DefinePolygon(24,xair,yair);
202 endcapairshape->DefineSection(0,-kHalfLengthEndCap);
203 endcapairshape->DefineSection(1, kHalfLengthEndCap);
204
205 // Create the Omega insert
206 TGeoXtru *endcapomegashape = new TGeoXtru(2);
207
208 CreateSPDOmegaShape(xair,yair,kTheta,kThicknessOmega,xomega,yomega);
209
210 endcapomegashape->DefinePolygon(48,xomega,yomega);
211 endcapomegashape->DefineSection(0,-kHalfLengthEndCap);
212 endcapomegashape->DefineSection(1, kHalfLengthEndCap);
213
214 // The cone half shield is more complex since there is no basic
215 // TGeo shape to describe it correctly. So it is made of a series
216 // of TGeoArb8 shapes filled with air, which all together make up the
217 // the cone AND its internal insert. Part of the following code is
218 // adapted from SPDThermalSheald method.
219
220 // Filled portions
221 TGeoArb8 *sC1 = new TGeoArb8(kHalfLengthCone);
222 TGeoArb8 *sC2 = new TGeoArb8(kHalfLengthCone);
223
224 CreateSPDThermalShape(kInnerACentral,kInnerBCentral,kInnerRadiusCentral,
225 kOuterACentral,kOuterBCentral,kOuterRadiusCentral,
226 kTheta,xshld,yshld);
227
228 sC1->SetVertex(0,xshld[12],yshld[12]);
229 sC1->SetVertex(1,xshld[11],yshld[11]);
230 sC1->SetVertex(2,xshld[ 0],yshld[ 0]);
231 sC1->SetVertex(3,xshld[23],yshld[23]);
232
233 sC2->SetVertex(0,xshld[11],yshld[11]);
234 sC2->SetVertex(1,xshld[10],yshld[10]);
235 sC2->SetVertex(2,xshld[ 1],yshld[ 1]);
236 sC2->SetVertex(3,xshld[ 0],yshld[ 0]);
237
238 // Drawings give only the radius, convert it to the apothegm
239 Double_t kInnerRadiusCone = TMath::Sqrt(kInnerRadialCone*kInnerRadialCone
240 - 0.25*kInnerACone*kInnerACone);
241 Double_t kOuterRadiusCone = TMath::Sqrt(kOuterRadialCone*kOuterRadialCone
242 - 0.25*kOuterACone*kOuterACone);
243
244 Double_t xco[4], yco[4], xci[4], yci[4];
245
246 for (Int_t i=0; i<2; i++) {
247 Double_t th = i*kTheta*TMath::RadToDeg();
248 xco[2*i ] = kOuterRadiusCone*SinD(th) - 0.5*kOuterACone*CosD(th);
249 yco[2*i ] = kOuterRadiusCone*CosD(th) + 0.5*kOuterACone*SinD(th);
250 xci[2*i ] = kInnerRadiusCone*SinD(th) - 0.5*kInnerACone*CosD(th);
251 yci[2*i ] = kInnerRadiusCone*CosD(th) + 0.5*kInnerACone*SinD(th);
252 xco[2*i+1] = kOuterRadiusCone*SinD(th) + 0.5*kOuterACone*CosD(th);
253 yco[2*i+1] = kOuterRadiusCone*CosD(th) - 0.5*kOuterACone*SinD(th);
254 xci[2*i+1] = kInnerRadiusCone*SinD(th) + 0.5*kInnerACone*CosD(th);
255 yci[2*i+1] = kInnerRadiusCone*CosD(th) - 0.5*kInnerACone*SinD(th);
256 }
257
258 sC1->SetVertex(4,xco[0],yco[0]);
259 sC1->SetVertex(5,xco[1],yco[1]);
260 sC1->SetVertex(6,xci[1],yci[1]);
261 sC1->SetVertex(7,xci[0],yci[0]);
262
263 sC2->SetVertex(4,xco[1],yco[1]);
264 sC2->SetVertex(5,xco[2],yco[2]);
265 sC2->SetVertex(6,xci[2],yci[2]);
266 sC2->SetVertex(7,xci[1],yci[1]);
267
268 // Air holes
269 TGeoArb8 *sCh1 = new TGeoArb8(kHalfLengthCone);
270 TGeoArb8 *sCh2 = new TGeoArb8(kHalfLengthCone);
271
272 for(Int_t i=0; i<4; i++){
273 InsidePoint(sC1->GetVertices()[((i+3)%4)*2+0],
274 sC1->GetVertices()[((i+3)%4)*2+1],
275 sC1->GetVertices()[i*2+0],
276 sC1->GetVertices()[i*2+1],
277 sC1->GetVertices()[((i+1)%4)*2+0],
278 sC1->GetVertices()[((i+1)%4)*2+1],-kThicknessCone,x,y);
279 sCh1->SetVertex(i,x,y);
280
281 InsidePoint(sC1->GetVertices()[((i+3)%4 +4)*2+0],
282 sC1->GetVertices()[((i+3)%4 +4)*2+1],
283 sC1->GetVertices()[(i+4)*2+0],
284 sC1->GetVertices()[(i+4)*2+1],
285 sC1->GetVertices()[((i+1)%4 +4)*2+0],
286 sC1->GetVertices()[((i+1)%4 +4)*2+1],-kThicknessCone,x,y);
287 sCh1->SetVertex(i+4,x,y);
288
289 InsidePoint(sC2->GetVertices()[((i+3)%4)*2+0],
290 sC2->GetVertices()[((i+3)%4)*2+1],
291 sC2->GetVertices()[i*2+0],
292 sC2->GetVertices()[i*2+1],
293 sC2->GetVertices()[((i+1)%4)*2+0],
294 sC2->GetVertices()[((i+1)%4)*2+1],-kThicknessCone,x,y);
295 sCh2->SetVertex(i,x,y);
296
297 InsidePoint(sC2->GetVertices()[((i+3)%4 +4)*2+0],
298 sC2->GetVertices()[((i+3)%4 +4)*2+1],
299 sC2->GetVertices()[(i+4)*2+0],
300 sC2->GetVertices()[(i+4)*2+1],
301 sC2->GetVertices()[((i+1)%4 +4)*2+0],
302 sC2->GetVertices()[((i+1)%4 +4)*2+1],-kThicknessCone,x,y);
303 sCh2->SetVertex(i+4,x,y);
304 }
305
306 // Finally the carbon fiber Ring with its Wings and their
307 // stesalite inserts. They are Tube and TubeSeg shapes
308
309 TGeoTube *ringshape = new TGeoTube(kInnerRadiusRing,kOuterRadiusRing,
310 kHalfLengthRing);
311
312 TGeoTube *ringinsertshape = new TGeoTube(kInnerRadiusRing+kThicknessRing,
313 kOuterRadiusRing-kThicknessRing,
314 kHalfLengthRing-kThicknessRing);
315
316 Double_t angleWideWing, angleWideWingThickness;
317 angleWideWing = (kWideWing/kOuterRadiusWing)*TMath::RadToDeg();
318 angleWideWingThickness = (kThicknessRing/kOuterRadiusWing)*TMath::RadToDeg();
319
320 TGeoTubeSeg *wingshape = new TGeoTubeSeg(kOuterRadiusRing,kOuterRadiusWing,
321 kHalfLengthRing, 0, angleWideWing);
322
323 TGeoTubeSeg *winginsertshape = new TGeoTubeSeg(kOuterRadiusRing,
324 kOuterRadiusWing-kThicknessRing, kHalfLengthRing-kThicknessRing,
325 angleWideWingThickness, angleWideWing-angleWideWingThickness);
326
327
328 // We have the shapes: now create the real volumes
329
330 TGeoMedium *medSPDcf = mgr->GetMedium("ITS_SPD shield$");
331 TGeoMedium *medSPDair = mgr->GetMedium("ITS_SPD AIR$");
332 TGeoMedium *medSPDste = mgr->GetMedium("ITS_G10FR4$"); // stesalite
333
334 TGeoVolume *centralshield = new TGeoVolume("SPDcentralshield",
335 centralshape,medSPDcf);
336 centralshield->SetVisibility(kTRUE);
337 centralshield->SetLineColor(7);
338 centralshield->SetLineWidth(1);
339
340 TGeoVolume *centralairshield = new TGeoVolume("SPDcentralairshield",
341 centralairshape,medSPDair);
342 centralairshield->SetVisibility(kTRUE);
343 centralairshield->SetLineColor(5); // Yellow
344 centralairshield->SetLineWidth(1);
345 centralairshield->SetFillColor(centralairshield->GetLineColor());
346 centralairshield->SetFillStyle(4090); // 90% transparent
347
348 TGeoVolume *centralomega = new TGeoVolume("SPDcentralomega",
349 centralomegashape,medSPDcf);
350 centralomega->SetVisibility(kTRUE);
351 centralomega->SetLineColor(7);
352 centralomega->SetLineWidth(1);
353
354 centralairshield->AddNode(centralomega,1,0);
355 centralshield->AddNode(centralairshield,1,0);
356
357 TGeoVolume *endcapshield = new TGeoVolume("SPDendcapshield",
358 endcapshape,medSPDcf);
359 endcapshield->SetVisibility(kTRUE);
360 endcapshield->SetLineColor(7);
361 endcapshield->SetLineWidth(1);
362
363 TGeoVolume *endcapairshield = new TGeoVolume("SPDendcapairshield",
364 endcapairshape,medSPDair);
365 endcapairshield->SetVisibility(kTRUE);
366 endcapairshield->SetLineColor(5); // Yellow
367 endcapairshield->SetLineWidth(1);
368 endcapairshield->SetFillColor(endcapairshield->GetLineColor());
369 endcapairshield->SetFillStyle(4090); // 90% transparent
370
371 TGeoVolume *endcapomega = new TGeoVolume("SPDendcapomega",
372 endcapomegashape,medSPDcf);
373 endcapomega->SetVisibility(kTRUE);
374 endcapomega->SetLineColor(7);
375 endcapomega->SetLineWidth(1);
376
377 endcapairshield->AddNode(endcapomega,1,0);
378 endcapshield->AddNode(endcapairshield,1,0);
379
380 TGeoVolume *vC1 = new TGeoVolume("SPDconeshieldV1",sC1,medSPDcf);
381 vC1->SetVisibility(kTRUE);
382 vC1->SetLineColor(7);
383 vC1->SetLineWidth(1);
384
385 TGeoVolume *vCh1 = new TGeoVolume("SPDconeshieldH1",sCh1,medSPDair);
386
387 vCh1->SetVisibility(kTRUE);
388 vCh1->SetLineColor(5); // Yellow
389 vCh1->SetLineWidth(1);
390 vCh1->SetFillColor(vCh1->GetLineColor());
391 vCh1->SetFillStyle(4090); // 90% transparent
392
393 vC1->AddNode(vCh1,1,0);
394
395 TGeoVolume *vC2 = new TGeoVolume("SPDconeshieldV2",sC2,medSPDcf);
396
397 vC2->SetVisibility(kTRUE);
398 vC2->SetLineColor(7);
399 vC2->SetLineWidth(1);
400
401 TGeoVolume *vCh2 = new TGeoVolume("SPDconeshieldH2",sCh2,medSPDair);
402
403 vCh2->SetVisibility(kTRUE);
404 vCh2->SetLineColor(5); // Yellow
405 vCh2->SetLineWidth(1);
406 vCh2->SetFillColor(vCh2->GetLineColor());
407 vCh2->SetFillStyle(4090); // 90% transparent
408
409 vC2->AddNode(vCh2,1,0);
410
411 TGeoVolume *ring = new TGeoVolume("SPDshieldring",ringshape,medSPDcf);
412 ring->SetVisibility(kTRUE);
413 ring->SetLineColor(7);
414 ring->SetLineWidth(1);
415
416 TGeoVolume *ringinsert = new TGeoVolume("SPDshieldringinsert",
417 ringinsertshape,medSPDste);
418 ringinsert->SetVisibility(kTRUE);
419 ringinsert->SetLineColor(3); // Green
420// ringinsert->SetLineWidth(1);
421 ringinsert->SetFillColor(ringinsert->GetLineColor());
422 ringinsert->SetFillStyle(4010); // 10% transparent
423
424 ring->AddNode(ringinsert,1,0);
425
426 TGeoVolume *wing = new TGeoVolume("SPDshieldringwing",wingshape,medSPDcf);
427 wing->SetVisibility(kTRUE);
428 wing->SetLineColor(7);
429 wing->SetLineWidth(1);
430
431 TGeoVolume *winginsert = new TGeoVolume("SPDshieldringinsert",
432 winginsertshape,medSPDste);
433 winginsert->SetVisibility(kTRUE);
434 winginsert->SetLineColor(3); // Green
435// winginsert->SetLineWidth(1);
436 winginsert->SetFillColor(winginsert->GetLineColor());
437 winginsert->SetFillStyle(4010); // 10% transparent
438
439 wing->AddNode(winginsert,1,0);
440
441
442 // Add all volumes in the assembly
443 vM->AddNode(centralshield,1,0);
444 vM->AddNode(centralshield,2,new TGeoRotation("",180,0,0));
445
446 vM->AddNode(endcapshield,1,
447 new TGeoTranslation(0,0, kHalfLengthCentral+kHalfLengthEndCap));
448 vM->AddNode(endcapshield,2,
449 new TGeoTranslation(0,0,-kHalfLengthCentral-kHalfLengthEndCap));
450 vM->AddNode(endcapshield,3,new TGeoCombiTrans(
451 0, 0, kHalfLengthCentral+kHalfLengthEndCap,
452 new TGeoRotation("",180,0,0) ) );
453 vM->AddNode(endcapshield,4,new TGeoCombiTrans(
454 0, 0,-kHalfLengthCentral-kHalfLengthEndCap,
455 new TGeoRotation("",180,0,0) ) );
456
457 for (Int_t i=0; i<10; i++) {
458 Double_t thetaC12 = kTheta*TMath::RadToDeg();
459 vM->AddNode(vC1,2*i+1, new TGeoCombiTrans(
460 0, 0, kHalfLengthCentral+2*kHalfLengthEndCap+kHalfLengthCone,
461 new TGeoRotation("",0, 0,i*thetaC12) ) );
462 vM->AddNode(vC1,2*i+2, new TGeoCombiTrans(
463 0, 0, -kHalfLengthCentral-2*kHalfLengthEndCap-kHalfLengthCone,
464 new TGeoRotation("",0,180,i*thetaC12) ) );
465 vM->AddNode(vC2,2*i+1, new TGeoCombiTrans(
466 0, 0, kHalfLengthCentral+2*kHalfLengthEndCap+kHalfLengthCone,
467 new TGeoRotation("",0, 0,i*thetaC12) ) );
468 vM->AddNode(vC2,2*i+2, new TGeoCombiTrans(
469 0, 0, -kHalfLengthCentral-2*kHalfLengthEndCap-kHalfLengthCone,
470 new TGeoRotation("",0,180,i*thetaC12) ) );
471 }
472
473 vM->AddNode(ring,1,new TGeoTranslation(0, 0,
474 kHalfLengthCentral+2*kHalfLengthEndCap+2*kHalfLengthCone
475 +kHalfLengthRing));
476 vM->AddNode(ring,2,new TGeoTranslation(0, 0,
477 -kHalfLengthCentral-2*kHalfLengthEndCap-2*kHalfLengthCone
478 -kHalfLengthRing));
479
480 for (Int_t i=0; i<4; i++) {
481 Double_t thetaW = kThetaWing*(2*i+1);
482 vM->AddNode(wing,2*i+1,new TGeoCombiTrans(0, 0,
483 kHalfLengthCentral+2*kHalfLengthEndCap+2*kHalfLengthCone
484 +kHalfLengthRing, new TGeoRotation("",thetaW,0,0) ));
485 vM->AddNode(wing,2*i+2,new TGeoCombiTrans(0, 0,
486 -kHalfLengthCentral-2*kHalfLengthEndCap-2*kHalfLengthCone
487 -kHalfLengthRing, new TGeoRotation("",thetaW,0,0) ));
488 }
489
490 // Some debugging if requested
491 if(GetDebug(1)){
492 vM->PrintNodes();
493 vM->InspectShape();
494 }
495
496 // Finally put the entire shield in the mother volume
497 moth->AddNode(vM,1,0);
498
499 return;
500}
501
502//______________________________________________________________________
503void AliITSv11GeometrySupport::CreateSPDThermalShape(
504 Double_t ina, Double_t inb, Double_t inr,
505 Double_t oua, Double_t oub, Double_t our,
506 Double_t t, Double_t *x , Double_t *y )
507{
508//
509// Creates the proper sequence of X and Y coordinates to determine
510// the base XTru polygon for the SPD thermal shapes
511//
512// Input:
513// ina, inb : inner shape sides
514// inr : inner radius
515// oua, oub : outer shape sides
516// our : outer radius
517// t : theta angle
518//
519// Output:
520// x, y : coordinate vectors [24]
521//
522// Created: 14 Nov 2007 Mario Sitta
523// Updated: 11 Dec 2007 Mario Sitta
524//
525 Double_t xlocal[6],ylocal[6];
526
527 //Create the first inner quadrant (X > 0)
528 FillSPDXtruShape(ina,inb,inr,t,xlocal,ylocal);
529 for (Int_t i=0; i<6; i++) {
530 x[i] = xlocal[i];
531 y[i] = ylocal[i];
532 }
533
534 // Then reflex on the second quadrant (X < 0)
535 for (Int_t i=0; i<6; i++) {
536 x[23-i] = -x[i];
537 y[23-i] = y[i];
538 }
539
540 // Now create the first outer quadrant (X > 0)
541 FillSPDXtruShape(oua,oub,our,t,xlocal,ylocal);
542 for (Int_t i=0; i<6; i++) {
543 x[11-i] = xlocal[i];
544 y[11-i] = ylocal[i];
545 }
546
547 // Finally reflex on the second quadrant (X < 0)
548 for (Int_t i=0; i<6; i++) {
549 x[12+i] = -x[11-i];
550 y[12+i] = y[11-i];
551 }
552
553 return;
554}
555
556//______________________________________________________________________
557void AliITSv11GeometrySupport::CreateSPDOmegaShape(
558 Double_t *xin, Double_t *yin, Double_t t,
559 Double_t d, Double_t *x, Double_t *y)
560{
561//
562// Creates the proper sequence of X and Y coordinates to determine
563// the SPD Omega XTru polygon
564//
565// Input:
566// xin, yin : coordinates of the air volume
567// d : Omega shape thickness
568// t : theta angle
569//
570// Output:
571// x, y : coordinate vectors [48]
572//
573// Created: 17 Nov 2007 Mario Sitta
574// Updated: 11 Dec 2007 Mario Sitta
575//
576 Double_t xlocal[6],ylocal[6];
577
578 // First determine various parameters
579 Double_t ina = TMath::Sqrt( (xin[23]-xin[0])*(xin[23]-xin[0]) +
580 (yin[23]-yin[0])*(yin[23]-yin[0]) );
581 Double_t inb = TMath::Sqrt( (xin[ 1]-xin[0])*(xin[ 1]-xin[0]) +
582 (yin[ 1]-yin[0])*(yin[ 1]-yin[0]) );
583 Double_t inr = yin[0];
584 Double_t oua = TMath::Sqrt( (xin[12]-xin[11])*(xin[12]-xin[11]) +
585 (yin[12]-yin[11])*(yin[12]-yin[11]) );
586 Double_t oub = TMath::Sqrt( (xin[10]-xin[11])*(xin[10]-xin[11]) +
587 (yin[10]-yin[11])*(yin[10]-yin[11]) );
588 Double_t our = yin[11];
589
590 //Create the first inner pseudo-quadrant
591 FillSPDXtruShape(ina,inb,inr,t,xlocal,ylocal);
592 x[ 1] = xlocal[0];
593 y[ 1] = ylocal[0];
594
595 x[ 2] = xlocal[1];
596 y[ 2] = ylocal[1];
597
598 x[ 5] = xlocal[2];
599 y[ 5] = ylocal[2];
600
601 x[ 6] = xlocal[3];
602 y[ 6] = ylocal[3];
603
604 x[ 9] = xlocal[4];
605 y[ 9] = ylocal[4];
606
607 x[10] = xlocal[5];
608 y[10] = ylocal[5];
609
610 //Create the first outer pseudo-quadrant
611 FillSPDXtruShape(oua,oub,our,t,xlocal,ylocal);
612 x[23] = xlocal[0];
613 y[23] = ylocal[0];
614
615 x[20] = xlocal[1];
616 y[20] = ylocal[1];
617
618 x[19] = xlocal[2];
619 y[19] = ylocal[2];
620
621 x[16] = xlocal[3];
622 y[16] = ylocal[3];
623
624 x[15] = xlocal[4];
625 y[15] = ylocal[4];
626
627 x[11] = xlocal[5];
628 y[11] = ylocal[5];
629
630 //Create the second inner pseudo-quadrant
631 FillSPDXtruShape(ina+2*d,inb-2*d,inr+d,t,xlocal,ylocal);
632 x[22] = xlocal[0];
633 y[22] = ylocal[0];
634
635 x[21] = xlocal[1];
636 y[21] = ylocal[1];
637
638 x[18] = xlocal[2];
639 y[18] = ylocal[2];
640
641 x[17] = xlocal[3];
642 y[17] = ylocal[3];
643
644 x[14] = xlocal[4];
645 y[14] = ylocal[4];
646
647 x[13] = xlocal[5];
648 y[13] = ylocal[5];
649
650 //Create the second outer pseudo-quadrant
651 FillSPDXtruShape(oua-2*d,oub+2*d,our-d,t,xlocal,ylocal);
652 x[ 0] = xlocal[0];
653 y[ 0] = ylocal[0];
654
655 x[ 3] = xlocal[1];
656 y[ 3] = ylocal[1];
657
658 x[ 4] = xlocal[2];
659 y[ 4] = ylocal[2];
660
661 x[ 7] = xlocal[3];
662 y[ 7] = ylocal[3];
663
664 x[ 8] = xlocal[4];
665 y[ 8] = ylocal[4];
666
667 x[12] = xlocal[5];
668 y[12] = ylocal[5];
669
670 // These need to be fixed explicitly
671 y[10] = yin[5];
672 y[11] = yin[6];
673 x[12] = x[11];
674 y[12] = y[11] + d;
675 x[13] = x[10] + d;
676 y[13] = y[12];
677
678 // Finally reflex on the negative side
679 for (Int_t i=0; i<24; i++) {
680 x[24+i] = -x[23-i];
681 y[24+i] = y[23-i];
682 }
683
684 // Wow ! We've finished
685 return;
172b0d90 686}
a275e8ba 687
172b0d90 688//______________________________________________________________________
a275e8ba 689void AliITSv11GeometrySupport::FillSPDXtruShape(Double_t a, Double_t b,
690 Double_t r, Double_t t,
691 Double_t *x, Double_t *y)
692{
693//
694// Creates the partial sequence of X and Y coordinates to determine
695// the lateral part of the SPD thermal shield
696//
697// Input:
698// a, b : shape sides
699// r : radius
700// t : theta angle
701//
702// Output:
703// x, y : coordinate vectors [6]
704//
705// Created: 14 Nov 2007 Mario Sitta
706//
707 x[0] = a/2;
708 y[0] = r;
709
710 x[1] = x[0] + b * TMath::Cos(t/2);
711 y[1] = y[0] - b * TMath::Sin(t/2);
712
713 x[2] = x[1] + a * TMath::Cos(t);
714 y[2] = y[1] - a * TMath::Sin(t);
715
716 x[3] = x[2] + b * TMath::Cos(3*t/2);
717 y[3] = y[2] - b * TMath::Sin(3*t/2);
718
719 x[4] = x[3] + a * TMath::Cos(2*t);
720 y[4] = y[3] - a * TMath::Sin(2*t);
721
722 x[5] = x[4];
723 y[5] = 0.;
724
725 return;
172b0d90 726}
a275e8ba 727
172b0d90 728//______________________________________________________________________
543b7370 729void AliITSv11GeometrySupport::SDDCone(TGeoVolume *moth,TGeoManager *mgr){
172b0d90 730 // Define the detail SDD support cone geometry.
731 // Inputs:
543b7370 732 // TGeoVolume *moth The mother volume to place this object.
733 // TGeoManager *mgr The pointer to the Geo-Manager defaule gGeoManager
172b0d90 734 // Outputs:
735 // none.
736 // Return:
737 // none.
738 //
739 // From Cilindro Centrale - Lavorazioni, ALR 0816/1 04/08/03 File
740 // name SDD/Cilindro.hpgl
cee918ed 741 const Double_t ktsLength = 790.0*fgkmm; // Thermal Sheeld length
742 const Double_t ktsInsertoLength= 15.0*fgkmm; // ????
743 const Double_t ktsOuterR = 0.5*(220.+10.)*fgkmm; // ????
744 const Double_t ktsInnerR = 0.5*(220.-10.)*fgkmm; // ????
745 const Double_t ktscarbonFiberth= 0.02*fgkmm; // ????
746 const Double_t ktsBoltDiameter = 6.0*fgkmm; // M6 screw
747 const Double_t ktsBoltDepth = 6.0*fgkmm; // in volume sC
748 const Double_t ktsBoltRadius = 0.5*220.*fgkmm; // Radius in volume sC
749 const Double_t ktsBoltAngle0 = 0.0*fgkDegree; // Angle in volume sC
750 const Double_t ktsBoltdAngle = 30.0*fgkDegree; // Angle in Volume sC
751 Double_t x,y,z,t,t0,rmin,rmax;
172b0d90 752 Int_t i,n;
cee918ed 753 TGeoTube *sA,*sB,*sC,*sD;
172b0d90 754 TGeoTranslation *tran;
755 TGeoRotation *rot;
756 TGeoCombiTrans *rotran;
cee918ed 757 TGeoMedium *medSDDcf,*medSDDfs,*medSDDfo,*medSDDss;
172b0d90 758
cee918ed 759 sA = new TGeoTube("ITS SDD Central Cylinder",ktsInnerR,ktsOuterR,
760 0.5*ktsLength);
761 sB = new TGeoTube("ITS SDD CC Foam",ktsInnerR+ktscarbonFiberth,
762 ktsOuterR-ktscarbonFiberth,
763 0.5*(ktsLength-2.0*ktsInsertoLength));
764 sC = new TGeoTube("ITS SDD CC Inserto",ktsInnerR+ktscarbonFiberth,
765 ktsOuterR-ktscarbonFiberth,0.5*ktsLength);
766 sD = new TGeoTube("ITS SDD CC M6 bolt end",0.0,0.5*ktsBoltDiameter,
767 0.5*ktsBoltDepth);
543b7370 768 if(GetDebug(1)){
d5219d0d 769 sA->InspectShape();
770 sB->InspectShape();
771 sC->InspectShape();
772 sD->InspectShape();
543b7370 773 } // end if GetDebug(1)
172b0d90 774 //
cee918ed 775 medSDDcf = mgr->GetMedium("ITSssdCarbonFiber");
776 medSDDfs = mgr->GetMedium("ITSssdStaselite4411w");
777 medSDDfo = mgr->GetMedium("ITSssdRohacell50A");
778 medSDDss = mgr->GetMedium("ITSssdStainlessSteal");
779 TGeoVolume *vA,*vB,*vC,*vD;
780 vA = new TGeoVolume("ITSsddCentCylCF",sA,medSDDcf);
781 vA->SetVisibility(kTRUE);
782 vA->SetLineColor(4);
783 vA->SetLineWidth(1);
784 vA->SetFillColor(vA->GetLineColor());
d5219d0d 785 vA->SetFillStyle(4030); // 30% transparent
cee918ed 786 vB = new TGeoVolume("ITSsddCentCylF",sB,medSDDfo);
787 vB->SetVisibility(kTRUE);
788 vB->SetLineColor(3);
789 vB->SetLineWidth(1);
790 vB->SetFillColor(vB->GetLineColor());
d5219d0d 791 vB->SetFillStyle(4050); // 50% transparent
cee918ed 792 vC = new TGeoVolume("ITSsddCentCylSt",sC,medSDDfs);
793 vC->SetVisibility(kTRUE);
794 vC->SetLineColor(2);
795 vC->SetLineWidth(1);
796 vC->SetFillColor(vC->GetLineColor());
d5219d0d 797 vC->SetFillStyle(4050); // 50% transparent
cee918ed 798 vD = new TGeoVolume("ITSsddCentCylSS",sD,medSDDss);
799 vD->SetVisibility(kTRUE);
800 vD->SetLineColor(1);
801 vD->SetLineWidth(1);
802 vD->SetFillColor(vD->GetLineColor());
d5219d0d 803 vD->SetFillStyle(4050); // 50% transparent
cee918ed 804 //
805 moth->AddNode(vA,1,0);
806 vA->AddNode(vC,1,0);
807 vC->AddNode(vB,1,0);
808 n = (Int_t)((360.*fgkDegree)/ktsBoltdAngle);
172b0d90 809 for(i=0;i<n;i++){
cee918ed 810 t = ktsBoltAngle0+((Double_t)i)*ktsBoltdAngle;
811 x = ktsBoltRadius*CosD(t);
812 y = ktsBoltRadius*SinD(t);
813 z = 0.5*(ktsLength-ktsBoltDepth);
172b0d90 814 tran = new TGeoTranslation("",x,y,z);
cee918ed 815 vC->AddNode(vD,i+1,tran);
172b0d90 816 tran = new TGeoTranslation("",x,y,-z);
cee918ed 817 vC->AddNode(vD,i+n+1,tran);
172b0d90 818 } // end for i
543b7370 819 if(GetDebug(1)){
cee918ed 820 vA->PrintNodes();
821 vB->PrintNodes();
822 vC->PrintNodes();
823 vD->PrintNodes();
172b0d90 824 } // end if
825 // SDD Suport Cone
826 //
827 //
cee918ed 828 const Double_t kconThickness = 10.5*fgkmm;//Thickness Rohacell+car. fib.
829 const Double_t kconCthick = 1.5*fgkmm; // Carbon finber thickness
830 const Double_t kconRcurv = 15.0*fgkmm; // Radius of curvature.
831 const Double_t kconTc = 45.0; // angle of SDD cone [degrees].
832 const Double_t kconZouterMilled = 23.0*fgkmm;
833 const Double_t kconZcylinder = 186.0*fgkmm;
543b7370 834 // fudge factor of 0.05cm.
835 const Double_t kconZ0 = kconZcylinder + 0.5*ktsLength+0.05;
cee918ed 836 //const Int_t kconNspoaks = 12;
837 //const Int_t kconNmounts = 4;
838 //const Double_t kconDmountAngle = 9.0; // degrees
839 const Double_t kconRoutMax = 0.5*560.0*fgkmm;
840 const Double_t kconRoutMin = 0.5*539.0*fgkmm;
172b0d90 841 // Holes in cone for cables
cee918ed 842 const Double_t kconPhiHole1 = 0.0*fgkDegree;
843 const Double_t kcondPhiHole1 = 25.0*fgkDegree;
844 const Double_t kconRholeMax1 = 0.5*528.*fgkmm;
845 const Double_t kconRholeMin1 = 0.5*464.*fgkmm;
846 const Double_t kconPhiHole2 = 0.0*fgkDegree;
847 const Double_t kcondPhiHole2 = 50.0*fgkDegree;
848 const Double_t kconRholeMax2 = 0.5*375.*fgkmm;
849 const Double_t kconRholeMin2 = 0.5*280.*fgkmm;
850 //
851 //const Int_t kconNpostsOut = 6;
852 //const Int_t kconNpostsIn = 3;
853 //const Double_t kconPhi0PostOut = 0.0; // degree
854 //const Double_t kconPhi0PostIn = 0.0; // degree
855 //const Double_t kcondRpostOut = 16.0*fgkmm;
856 //const Double_t kcondRpostIn = 16.0*fgkmm;
857 //const Double_t kconZpostMaxOut = 116.0*fgkmm;
858 //const Double_t kconZpostMaxIn = 190.0*fgkmm;
859 const Double_t kconRinMax = 0.5*216*fgkmm;
860 const Double_t kconRinCylinder = 0.5*231.0*fgkmm;
861 //const Double_t kconRinHole = 0.5*220.0*fgkmm;
862 const Double_t kconRinMin = 0.5*210.0*fgkmm;
863 const Double_t kcondZin = 15.0*fgkmm; // ???
864 const Double_t kSinkconTc = SinD(kconTc);
865 const Double_t kCoskconTc = CosD(kconTc);
866 const Double_t kTankconTc = TanD(kconTc);
867 //
868 TGeoPcon *sE,*sF,*sG,*sH,*sI,*sJ,*sK;
869 TGeoCompositeShape *sL,*sM,*sN;
870 //
871 Double_t dza = kconThickness/kSinkconTc-
872 (kconRoutMax-kconRoutMin)/kTankconTc;
172b0d90 873 if(dza<=0){ // The number or order of the points are in error for a proper
874 // call to pcons!
875 Error("SDDcone","The definition of the points for a call to PCONS is"
876 " in error. abort.");
877 return;
878 } // end if
cee918ed 879 sE = new TGeoPcon("ITSsddSuportConeCarbonFiberSurfaceE",0.0,360.0,12);
880 sE->Z(0) = 0.0;
881 sE->Rmin(0) = kconRoutMin;
882 sE->Rmax(0) = kconRoutMax;
883 sE->Z(1) = kconZouterMilled - dza;
884 sE->Rmin(1) = sE->GetRmin(0);
885 sE->Rmax(1) = sE->GetRmax(0);
886 sE->Z(2) = kconZouterMilled;
887 sE->Rmax(2) = sE->GetRmax(0);
888 RadiusOfCurvature(kconRcurv,0.,sE->GetZ(1),sE->GetRmin(1),kconTc,z,rmin);
889 sE->Z(3) = z;
890 sE->Rmin(3) = rmin;
891 sE->Rmin(2) = RminFrom2Points(sE,3,1,sE->GetZ(2));
892 RadiusOfCurvature(kconRcurv,0.,sE->GetZ(2),sE->GetRmax(2),kconTc,z,rmax);
893 sE->Z(4) = z;
894 sE->Rmax(4) = rmax;
895 sE->Rmin(4) = RminFromZpCone(sE,3,kconTc,sE->GetZ(4),0.0);
896 sE->Rmax(3) = RmaxFrom2Points(sE,4,2,sE->GetZ(3));
897 sE->Rmin(7) = kconRinMin;
898 sE->Rmin(8) = kconRinMin;
899 RadiusOfCurvature(kconRcurv,90.0,0.0,kconRinMax,90.0-kconTc,z,rmax);
900 sE->Rmax(8) = rmax;
901 sE->Z(8) = ZFromRmaxpCone(sE,4,kconTc,sE->GetRmax(8));
902 sE->Z(9) = kconZcylinder;
903 sE->Rmin(9) = kconRinMin;
904 sE->Z(10) = sE->GetZ(9);
905 sE->Rmin(10) = kconRinCylinder;
906 sE->Rmin(11) = kconRinCylinder;
907 sE->Rmax(11) = sE->GetRmin(11);
908 rmin = sE->GetRmin(8);
909 RadiusOfCurvature(kconRcurv,90.0-kconTc,sE->GetZ(8),sE->GetRmax(8),90.0,
910 z,rmax);
911 rmax = kconRinMax;
912 sE->Z(11) = z+(sE->GetZ(8)-z)*(sE->GetRmax(11)-rmax)/
913 (sE->GetRmax(8)-rmax);
914 sE->Rmax(9) = RmaxFrom2Points(sE,11,8,sE->GetZ(9));
915 sE->Rmax(10) = sE->GetRmax(9);
916 sE->Z(6) = z-kcondZin;
917 sE->Z(7) = sE->GetZ(6);
918 sE->Rmax(6) = RmaxFromZpCone(sE,4,kconTc,sE->GetZ(6));
919 sE->Rmax(7) = sE->GetRmax(6);
920 RadiusOfCurvature(kconRcurv,90.,sE->GetZ(6),0.0,90.0-kconTc,z,rmin);
921 sE->Z(5) = z;
922 sE->Rmin(5) = RminFromZpCone(sE,3,kconTc,z);
923 sE->Rmax(5) = RmaxFromZpCone(sE,4,kconTc,z);
924 RadiusOfCurvature(kconRcurv,90.-kconTc,0.0,sE->Rmin(5),90.0,z,rmin);
925 sE->Rmin(6) = rmin;
172b0d90 926 // Inner Core, Inserto material
cee918ed 927 sF = new TGeoPcon("ITSsddSuportConeInsertoStesaliteF",0.,360.0,9);
928 sF->Z(0) = sE->GetZ(0);
929 sF->Rmin(0) = sE->GetRmin(0)+kconCthick;
930 sF->Rmax(0) = sE->GetRmax(0)-kconCthick;
931 sF->Z(1) = sE->GetZ(1);
932 sF->Rmin(1) = sF->GetRmin(0);
933 sF->Rmax(1) = sF->GetRmax(0);
934 sF->Z(2) = sE->GetZ(2);
935 sF->Rmax(2) = sF->GetRmax(1);
936 RadiusOfCurvature(kconRcurv-kconCthick,0.,sF->GetZ(1),sF->GetRmax(1),
937 kconTc,z,rmin);
938 sF->Z(3) = z;
939 sF->Rmin(3) = rmin;
940 sF->Rmin(2) = RminFrom2Points(sF,3,1,sF->GetZ(2));
941 RadiusOfCurvature(kconRcurv+kconCthick,0.,sF->GetZ(2),sF->GetRmax(2),
942 kconTc,z,rmax);
943 sF->Z(4) = z;
944 sF->Rmax(4) = rmax;
945 sF->Rmin(4) = RmaxFromZpCone(sE,2,kconTc,sF->GetZ(4),
946 -kconCthick);
947 sF->Rmax(3) = RmaxFrom2Points(sF,4,2,sF->GetZ(3));
948 sF->Rmin(7) = sE->GetRmin(7);
949 sF->Rmin(8) = sE->GetRmin(8);
950 sF->Z(6) = sE->GetZ(6)+kconCthick;
951 sF->Rmin(6) = sE->GetRmin(6);
952 sF->Z(7) = sF->GetZ(6);
953 sF->Rmax(8) = sE->GetRmax(8)-kconCthick*kSinkconTc;
954 RadiusOfCurvature(kconRcurv+kconCthick,90.0,sF->GetZ(6),sF->GetRmin(6),
955 90.0-kconTc,z,rmin);
956 sF->Z(5) = z;
957 sF->Rmin(5) = rmin;
958 sF->Rmax(5) = RmaxFromZpCone(sF,4,kconTc,z);
959 sF->Rmax(6) = RmaxFromZpCone(sF,4,kconTc,sF->GetZ(6));
960 sF->Rmax(7) = sF->GetRmax(6);
961 sF->Z(8) = ZFromRmaxpCone(sF,4,kconTc,sF->GetRmax(8),-kconCthick);
172b0d90 962 // Inner Core, Inserto material
cee918ed 963 sG = new TGeoPcon("ITSsddSuportConeFoamCoreG",0.0,360.0,4);
964 RadiusOfCurvature(kconRcurv+kconCthick,0.0,sF->GetZ(1),sF->GetRmin(1),
965 kconTc,z,rmin);
966 sG->Z(0) = z;
967 sG->Rmin(0) = rmin;
968 sG->Rmax(0) = sG->GetRmin(0);
969 sG->Z(1) = sG->GetZ(0)+(kconThickness-2.0*kconCthick)/kSinkconTc;;
970 sG->Rmin(1) = RminFromZpCone(sF,3,kconTc,sG->GetZ(1));
971 sG->Rmax(1) = RmaxFromZpCone(sF,4,kconTc,sG->GetZ(1));
972 sG->Z(2) = sE->GetZ(5)-kconCthick;
973 sG->Rmin(2) = RminFromZpCone(sF,3,kconTc,sG->GetZ(2));
974 sG->Rmax(2) = RmaxFromZpCone(sF,4,kconTc,sG->GetZ(2));
975 sG->Z(3) = sF->GetZ(5)+(kconThickness-2.0*kconCthick)*kCoskconTc;
976 sG->Rmax(3) = RmaxFromZpCone(sF,4,kconTc,sG->GetZ(3));
977 sG->Rmin(3) = sG->GetRmax(3);
cee918ed 978 //
979 sH = new TGeoPcon("ITSsddSuportConeHoleH",kconPhiHole1,kcondPhiHole1,4);
980 sH->Rmin(0) = kconRholeMax1;
981 sH->Rmax(0) = sH->GetRmin(0);
982 sH->Z(0) = ZFromRminpCone(sE,3,kconTc,sH->GetRmin(0));
983 sH->Rmax(1) = sH->GetRmax(0);
984 sH->Z(1) = ZFromRmaxpCone(sE,4,kconTc,sH->GetRmax(1));
985 sH->Rmin(1) = RminFromZpCone(sE,3,kconTc,sH->GetZ(1));
986 sH->Rmin(2) = kconRholeMin1;
987 sH->Z(2) = ZFromRminpCone(sE,3,kconTc,sH->GetRmin(2));
988 sH->Rmax(2) = RmaxFromZpCone(sE,4,kconTc,sH->GetZ(2));
989 sH->Rmin(3) = sH->GetRmin(2);
990 sH->Rmax(3) = sH->GetRmin(3);
991 sH->Z(3) = ZFromRminpCone(sE,3,kconTc,sH->GetRmin(3));
cee918ed 992 //
993 x = kconCthick/(0.5*(kconRholeMax1+kconRholeMin1));
994 t0 = kconPhiHole1 - x*fgkRadian;
995 t = kcondPhiHole1 + 2.0*x*fgkRadian;
996 sI = new TGeoPcon("ITSsddSuportConeHoleI",t0,t,4);
997 sI->Rmin(0) = kconRholeMax1+kconCthick;
998 sI->Rmax(0) = sI->GetRmin(0);
999 sI->Z(0) = ZFromRminpCone(sF,3,kconTc,sI->GetRmin(0));
1000 sI->Rmax(1) = sI->GetRmax(0);
1001 sI->Z(1) = ZFromRmaxpCone(sF,4,kconTc,sI->GetRmax(1));
1002 sI->Rmin(1) = RminFromZpCone(sF,3,kconTc,sI->GetZ(1));
1003 sI->Rmin(2) = kconRholeMin1-kconCthick;
1004 sI->Z(2) = ZFromRminpCone(sF,3,kconTc,sI->GetRmin(2));
1005 sI->Rmax(2) = RmaxFromZpCone(sF,4,kconTc,sI->GetZ(2));
1006 sI->Rmin(3) = sI->GetRmin(2);
1007 sI->Rmax(3) = sI->GetRmin(3);
1008 sI->Z(3) = ZFromRmaxpCone(sF,4,kconTc,sI->GetRmax(3));
cee918ed 1009 //
1010 sJ = new TGeoPcon("ITSsddSuportConeHoleJ",kconPhiHole2,
1011 kcondPhiHole2,4);
1012 sJ->Rmin(0) = kconRholeMax2;
1013 sJ->Rmax(0) = sJ->GetRmin(0);
1014 sJ->Z(0) = ZFromRminpCone(sE,3,kconTc,sJ->GetRmin(0));
1015 sJ->Rmax(1) = sJ->GetRmax(0);
1016 sJ->Z(1) = ZFromRmaxpCone(sE,4,kconTc,sJ->GetRmax(1));
1017 sJ->Rmin(1) = RminFromZpCone(sE,3,kconTc,sJ->GetZ(1));
1018 sJ->Rmin(2) = kconRholeMin2;
1019 sJ->Z(2) = ZFromRminpCone(sE,3,kconTc,sJ->GetRmin(2));
1020 sJ->Rmax(2) = RmaxFromZpCone(sE,4,kconTc,sJ->GetZ(2));
1021 sJ->Rmin(3) = sJ->GetRmin(2);
1022 sJ->Rmax(3) = sJ->GetRmin(3);
1023 sJ->Z(3) = ZFromRmaxpCone(sE,4,kconTc,sJ->GetRmax(3));
cee918ed 1024 //
1025 x = kconCthick/(0.5*(kconRholeMax2+kconRholeMin2));
1026 t0 = kconPhiHole2 - x*fgkRadian;
1027 t = kcondPhiHole2 + 2.0*x*fgkRadian;
1028 sK = new TGeoPcon("ITSsddSuportConeHoleK",t0,t,4);
1029 sK->Rmin(0) = kconRholeMax2+kconCthick;
1030 sK->Rmax(0) = sK->GetRmin(0);
1031 sK->Z(0) = ZFromRminpCone(sF,3,kconTc,sK->GetRmin(0));
1032 sK->Rmax(1) = sK->GetRmax(0);
1033 sK->Z(1) = ZFromRmaxpCone(sF,4,kconTc,sK->GetRmax(1));
1034 sK->Rmin(1) = RminFromZpCone(sF,3,kconTc,sK->GetZ(1));
1035 sK->Rmin(2) = kconRholeMin2-kconCthick;
1036 sK->Z(2) = ZFromRminpCone(sF,3,kconTc,sK->GetRmin(2));
1037 sK->Rmax(2) = RmaxFromZpCone(sF,4,kconTc,sK->GetZ(2));
1038 sK->Rmin(3) = sK->GetRmin(2);
1039 sK->Rmax(3) = sK->GetRmin(3);
1040 sK->Z(3) = ZFromRmaxpCone(sF,4,kconTc,sK->GetRmax(3));
cee918ed 1041 //
172b0d90 1042 rot = new TGeoRotation("ITSsddRotZ30",0.0,0.0,30.0);
1043 rot->RegisterYourself();
543b7370 1044 if(GetDebug(1)) rot->Print();
172b0d90 1045 rot = new TGeoRotation("ITSsddRotZ60",0.0,0.0,60.0);
1046 rot->RegisterYourself();
543b7370 1047 if(GetDebug(1)) rot->Print();
172b0d90 1048 rot = new TGeoRotation("ITSsddRotZ90",0.0,0.0,90.0);
1049 rot->RegisterYourself();
543b7370 1050 if(GetDebug(1)) rot->Print();
172b0d90 1051 rot = new TGeoRotation("ITSsddRotZ120",0.0,0.0,120.0);
1052 rot->RegisterYourself();
543b7370 1053 if(GetDebug(1)) rot->Print();
172b0d90 1054 rot = new TGeoRotation("ITSsddRotZ150",0.0,0.0,150.0);
1055 rot->RegisterYourself();
543b7370 1056 if(GetDebug(1)) rot->Print();
172b0d90 1057 rot = new TGeoRotation("ITSsddRotZ180",0.0,0.0,180.0);
1058 rot->RegisterYourself();
543b7370 1059 if(GetDebug(1)) rot->Print();
172b0d90 1060 rot = new TGeoRotation("ITSsddRotZ210",0.0,0.0,210.0);
1061 rot->RegisterYourself();
543b7370 1062 if(GetDebug(1)) rot->Print();
172b0d90 1063 rot = new TGeoRotation("ITSsddRotZ240",0.0,0.0,240.0);
1064 rot->RegisterYourself();
543b7370 1065 if(GetDebug(1)) rot->Print();
172b0d90 1066 rot = new TGeoRotation("ITSsddRotZ270",0.0,0.0,270.0);
1067 rot->RegisterYourself();
543b7370 1068 if(GetDebug(1)) rot->Print();
172b0d90 1069 rot = new TGeoRotation("ITSsddRotZ300",0.0,0.0,300.0);
1070 rot->RegisterYourself();
543b7370 1071 if(GetDebug(1)) rot->Print();
172b0d90 1072 rot = new TGeoRotation("ITSsddRotZ330",0.0,0.0,330.0);
1073 rot->RegisterYourself();
543b7370 1074 if(GetDebug(1)) rot->Print();
cee918ed 1075 sL = new TGeoCompositeShape("ITS SDD Suport Cone","((((((((((((((((("
1076 "ITSsddSuportConeCarbonFiberSurfaceE -"
1077 "ITSsddSuportConeHoleH) -"
1078 "ITSsddSuportConeHoleH:ITSsddRotZ30) -"
1079 "ITSsddSuportConeHoleH:ITSsddRotZ60) -"
1080 "ITSsddSuportConeHoleH:ITSsddRotZ90) -"
1081 "ITSsddSuportConeHoleH:ITSsddRotZ120) -"
1082 "ITSsddSuportConeHoleH:ITSsddRotZ150) -"
1083 "ITSsddSuportConeHoleH:ITSsddRotZ180) -"
1084 "ITSsddSuportConeHoleH:ITSsddRotZ210) -"
1085 "ITSsddSuportConeHoleH:ITSsddRotZ240) -"
1086 "ITSsddSuportConeHoleH:ITSsddRotZ270) -"
1087 "ITSsddSuportConeHoleH:ITSsddRotZ300) -"
1088 "ITSsddSuportConeHoleH:ITSsddRotZ330) -"
1089 "ITSsddSuportConeHoleJ) -"
1090 "ITSsddSuportConeHoleJ:ITSsddRotZ60) -"
1091 "ITSsddSuportConeHoleJ:ITSsddRotZ120) -"
1092 "ITSsddSuportConeHoleJ:ITSsddRotZ180) -"
172b0d90 1093 "ITSsddSuportConeHoleJ:ITSsddRotZ240) -"
cee918ed 1094 "ITSsddSuportConeHoleJ:ITSsddRotZ300");
1095 sM = new TGeoCompositeShape("ITS SDD Suport Cone Inserto Stesalite",
1096 "((((((((((((((((("
1097 "ITSsddSuportConeInsertoStesaliteF -"
1098 "ITSsddSuportConeHoleI) -"
1099 "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
1100 "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
1101 "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
1102 "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
1103 "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
1104 "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
1105 "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
1106 "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
1107 "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
1108 "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
1109 "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
1110 "ITSsddSuportConeHoleK) -"
1111 "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
1112 "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
1113 "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
1114 "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
1115 "ITSsddSuportConeHoleK:ITSsddRotZ300");
1116 sN = new TGeoCompositeShape("ITS SDD Suport Cone Foam Core",
1117 "((((((((((((((((("
1118 "ITSsddSuportConeFoamCoreG -"
1119 "ITSsddSuportConeHoleI) -"
1120 "ITSsddSuportConeHoleI:ITSsddRotZ30) -"
1121 "ITSsddSuportConeHoleI:ITSsddRotZ60) -"
1122 "ITSsddSuportConeHoleI:ITSsddRotZ90) -"
1123 "ITSsddSuportConeHoleI:ITSsddRotZ120) -"
1124 "ITSsddSuportConeHoleI:ITSsddRotZ150) -"
1125 "ITSsddSuportConeHoleI:ITSsddRotZ180) -"
1126 "ITSsddSuportConeHoleI:ITSsddRotZ210) -"
1127 "ITSsddSuportConeHoleI:ITSsddRotZ240) -"
1128 "ITSsddSuportConeHoleI:ITSsddRotZ270) -"
1129 "ITSsddSuportConeHoleI:ITSsddRotZ300) -"
1130 "ITSsddSuportConeHoleI:ITSsddRotZ330) -"
1131 "ITSsddSuportConeHoleK) -"
1132 "ITSsddSuportConeHoleK:ITSsddRotZ60) -"
1133 "ITSsddSuportConeHoleK:ITSsddRotZ120) -"
1134 "ITSsddSuportConeHoleK:ITSsddRotZ180) -"
1135 "ITSsddSuportConeHoleK:ITSsddRotZ240) -"
1136 "ITSsddSuportConeHoleK:ITSsddRotZ300");
172b0d90 1137 //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
543b7370 1138 if(GetDebug(1)){
d5219d0d 1139 sE->InspectShape();
1140 sF->InspectShape();
1141 sG->InspectShape();
1142 sH->InspectShape();
1143 sI->InspectShape();
1144 sJ->InspectShape();
1145 sK->InspectShape();
1146 sL->InspectShape();
1147 sM->InspectShape();
1148 sN->InspectShape();
543b7370 1149 } // end if GetDebug(1)
d5219d0d 1150 //
cee918ed 1151 TGeoVolume *vL,*vM,*vN;
1152 vL = new TGeoVolume("ITSsddConeL",sL,medSDDcf);
1153 vL->SetVisibility(kTRUE);
1154 vL->SetLineColor(4);
1155 vL->SetLineWidth(1);
1156 vL->SetFillColor(vL->GetLineColor());
1157 vL->SetFillStyle(4000); // 0% transparent
1158 vM = new TGeoVolume("ITSsddConeM",sM,medSDDfs);
1159 vM->SetVisibility(kTRUE);
1160 vM->SetLineColor(2);
1161 vM->SetLineWidth(1);
1162 vM->SetFillColor(vM->GetLineColor());
1163 vM->SetFillStyle(4010); // 10% transparent
1164 vN = new TGeoVolume("ITSsddConeN",sN,medSDDfo);
1165 vN->SetVisibility(kTRUE);
1166 vN->SetLineColor(7);
1167 vN->SetLineWidth(1);
1168 vN->SetFillColor(vN->GetLineColor());
1169 vN->SetFillStyle(4050); // 50% transparent
1170 //
1171 vM->AddNode(vN,1,0);
1172 vL->AddNode(vM,1,0);
1173 tran = new TGeoTranslation("",0.0,0.0,-kconZ0);
1174 moth->AddNode(vL,1,tran);
1175 rot = new TGeoRotation("",0.0,180.0*fgkDegree,0.0);
1176 rotran = new TGeoCombiTrans("",0.0,0.0,kconZ0,rot);
cee918ed 1177 moth->AddNode(vL,2,rotran);
543b7370 1178 if(GetDebug(1)){
d5219d0d 1179 tran->Print();
1180 rot->Print();
1181 rotran->Print();
cee918ed 1182 vL->PrintNodes();
1183 vM->PrintNodes();
1184 vN->PrintNodes();
172b0d90 1185 } // end if
543b7370 1186 //delete rot;// rot not explicity used in AddNode functions.
172b0d90 1187}
1188//______________________________________________________________________
543b7370 1189void AliITSv11GeometrySupport::SSDCone(TGeoVolume *moth,TGeoManager *mgr){
172b0d90 1190 // Define the detail SSD support cone geometry.
1191 // Inputs:
543b7370 1192 // TGeoVolume *moth The mother volume to place this object.
1193 // TGeoManager *mgr A pointer to the Geo-Manager default gGeoManager
172b0d90 1194 // Outputs:
1195 // none.
1196 // Return:
1197 // none.
1198 //
1199 Int_t i,j;
cee918ed 1200 Double_t t,t0,dt,x,y,z,vl[3],vg[3],x0,y0,rmin,rmax;
1201 TGeoMedium *medSSDcf = 0; // SSD support cone Carbon Fiber materal number.
1202 TGeoMedium *medSSDfs = 0; // SSD support cone inserto stesalite 4411w.
1203 TGeoMedium *medSSDfo = 0; // SSD support cone foam, Rohacell 50A.
1204 TGeoMedium *medSSDss = 0; // SSD support cone screw material,Stainless
1205 TGeoMedium *medSSDair = 0; // SSD support cone Air
1206 TGeoMedium *medSSDal = 0; // SSD support cone SDD mounting bracket Al
cee918ed 1207 medSSDcf = mgr->GetMedium("ITSssdCarbonFiber");
1208 medSSDfs = mgr->GetMedium("ITSssdStaselite4411w");
1209 medSSDfo = mgr->GetMedium("ITSssdRohacell50A");
1210 medSSDss = mgr->GetMedium("ITSssdStainlessSteal");
1211 medSSDair= mgr->GetMedium("ITSssdAir");
1212 medSSDal = mgr->GetMedium("ITSssdAl");
172b0d90 1213 //
1214 // SSD Central cylinder/Thermal Sheald.
cee918ed 1215 const Double_t kcylZlength = 1140.0*fgkmm; //
1216 const Double_t kcylZFoamlength = 1020.0*fgkmm; //
1217 const Double_t kcylROuter = 0.5*595.0*fgkmm; //
1218 const Double_t kcylRInner = 0.5*560.5*fgkmm; //
1219 const Double_t kcylCthick = 0.64*fgkmm; //
1220 const Double_t kcylFoamThick = 5.0*fgkmm; //
543b7370 1221 const Double_t kcylRholes = 0.5*570.0*fgkmm;
cee918ed 1222 const Double_t kcylZM6 = 6.0*fgkmm; //
1223 const Double_t kcylRM6 = 0.5*6.0*fgkmm;
543b7370 1224 const Double_t kcylPhi0M6 = 4.5*fgkDegree;
cee918ed 1225 const Int_t kcylNM6 = 40;
1226 const Double_t kcylZPin = 10.0*fgkmm;
1227 const Double_t kcylRPin = 0.5*4.0*fgkmm;
1228 const Double_t kcylPhi0Pin = (90.0+4.5)*fgkDegree;
1229 const Int_t kcylNPin = 2;
1230 //
1231 TGeoPcon *sCA,*sCB;
d5219d0d 1232 TGeoTube *sCC,*sCD,*sCE;
172b0d90 1233 //
1234 //Begin_Html
1235 /*
1236 <img src="picts/ITS/file_name.gif">
1237 <P>
1238 <FONT FACE'"TIMES">
1239 ITS SSD centreal support and thermal sheal cylinder.
1240 </FONT>
1241 </P>
1242 */
1243 //End_Html
d5219d0d 1244 //
1245 sCC = new TGeoTube("ITS SSD Thermal Centeral Rohacell CylinderCC",
1246 kcylROuter-kcylCthick-kcylFoamThick,
1247 kcylROuter-kcylCthick,0.5*kcylZFoamlength);
cee918ed 1248 sCA = new TGeoPcon("ITS SSD Thermal Centeral Carbon Fiber CylinderCA",
1249 0.0,360.0,6);
1250 sCB = new TGeoPcon("ITS SSD Thermal Centeral Stesalite CylinderCB",
1251 0.0,360.0,6);
cee918ed 1252 sCA->Z(0) = -0.5*kcylZlength;
1253 sCA->Rmin(0) = kcylRInner;
1254 sCA->Rmax(0) = kcylROuter;
1255 sCA->Z(1) = sCA->GetZ(0) + kcylZM6;
1256 sCA->Rmin(1) = sCA->GetRmin(0);
1257 sCA->Rmax(1) = sCA->GetRmax(0);
1258 sCA->Z(2) = -0.5*kcylZFoamlength;
1259 sCA->Rmin(2) = kcylROuter - 2.0*kcylCthick-kcylFoamThick;
1260 sCA->Rmax(2) = sCA->GetRmax(0);
1261 sCA->Z(3) = -sCA->GetZ(2);
1262 sCA->Rmin(3) = sCA->GetRmin(2);
1263 sCA->Rmax(3) = sCA->GetRmax(2);
1264 sCA->Z(4) = -sCA->GetZ(1);
1265 sCA->Rmin(4) = sCA->GetRmin(1);
1266 sCA->Rmax(4) = sCA->GetRmax(1);
1267 sCA->Z(5) = -sCA->GetZ(0);
1268 sCA->Rmin(5) = sCA->GetRmin(0);
1269 sCA->Rmax(5) = sCA->GetRmax(0);
1270 //
1271 sCB->Z(0) = sCA->GetZ(0);
1272 sCB->Rmin(0) = sCA->GetRmin(0) + kcylCthick;
1273 sCB->Rmax(0) = sCA->GetRmax(0) - kcylCthick;
1274 sCB->Z(1) = sCA->GetZ(1);
1275 sCB->Rmin(1) = sCA->GetRmin(1) + kcylCthick;
1276 sCB->Rmax(1) = sCA->GetRmax(1) - kcylCthick;
1277 sCB->Z(2) = sCA->GetZ(2);
1278 sCB->Rmin(2) = sCA->GetRmin(2) + kcylCthick;
1279 sCB->Rmax(2) = sCA->GetRmax(2) - kcylCthick;
1280 sCB->Z(3) = sCA->GetZ(3);
1281 sCB->Rmin(3) = sCA->GetRmin(3) + kcylCthick;
1282 sCB->Rmax(3) = sCA->GetRmax(3) - kcylCthick;
1283 sCB->Z(4) = sCA->GetZ(4);
1284 sCB->Rmin(4) = sCA->GetRmin(4) + kcylCthick;
1285 sCB->Rmax(4) = sCA->GetRmax(4) - kcylCthick;
1286 sCB->Z(5) = sCA->GetZ(5);
1287 sCB->Rmin(5) = sCA->GetRmin(5) + kcylCthick;
1288 sCB->Rmax(5) = sCA->GetRmax(5) - kcylCthick;
1289 //
d5219d0d 1290 sCD = new TGeoTube("ITS SSD Thermal Centeral Cylinder M6 screwCD",
cee918ed 1291 0.0,kcylRM6,0.5*kcylZM6);
d5219d0d 1292 sCE = new TGeoTube("ITS SSD Thermal Centeral Cylinder PinCE",
cee918ed 1293 0.0,kcylRPin,0.5*kcylZPin);
1294 //
543b7370 1295 if(GetDebug(1)){
d5219d0d 1296 sCA->InspectShape();
1297 sCB->InspectShape();
1298 sCC->InspectShape();
1299 sCD->InspectShape();
1300 sCE->InspectShape();
1301 } // end if GetDegut()
cee918ed 1302 TGeoVolume *vCA,*vCB,*vCC,*vCD,*vCE;
1303 vCA = new TGeoVolume("ITSssdCentCylCA",sCA,medSSDcf);
1304 vCA->SetVisibility(kTRUE);
1305 vCA->SetLineColor(4); // blue
1306 vCA->SetLineWidth(1);
1307 vCA->SetFillColor(vCA->GetLineColor());
1308 vCA->SetFillStyle(4000); // 0% transparent
1309 vCB = new TGeoVolume("ITSssdCentCylCB",sCB,medSSDfs);
1310 vCB->SetVisibility(kTRUE);
1311 vCB->SetLineColor(2); // red
1312 vCB->SetLineWidth(1);
1313 vCB->SetFillColor(vCB->GetLineColor());
1314 vCB->SetFillStyle(4050); // 50% transparent
1315 vCC = new TGeoVolume("ITSssdCentCylCC",sCC,medSSDfo);
1316 vCC->SetVisibility(kTRUE);
1317 vCC->SetLineColor(3); // green
1318 vCC->SetLineWidth(1);
1319 vCC->SetFillColor(vCC->GetLineColor());
1320 vCC->SetFillStyle(4050); // 50% transparent
d5219d0d 1321 vCD = new TGeoVolume("ITSssdCentCylCD",sCD,medSSDss);
cee918ed 1322 vCD->SetVisibility(kTRUE);
1323 vCD->SetLineColor(1); // black
1324 vCD->SetLineWidth(1);
1325 vCD->SetFillColor(vCD->GetLineColor());
1326 vCD->SetFillStyle(4000); // 0% transparent
d5219d0d 1327 vCE = new TGeoVolume("ITSssdCentCylCE",sCE,medSSDss);
cee918ed 1328 vCE->SetVisibility(kTRUE);
1329 vCE->SetLineColor(1); // black
1330 vCE->SetLineWidth(1);
1331 vCE->SetFillColor(vCE->GetLineColor());
1332 vCE->SetFillStyle(4000); // 0% transparent
172b0d90 1333 // Insert Bolt and Pins in both the Cone and Cylinder at the same time.
cee918ed 1334 vCB->AddNode(vCC,1,0);
1335 vCA->AddNode(vCB,1,0);
1336 moth->AddNode(vCA,1,0);
543b7370 1337 if(GetDebug(1)){
cee918ed 1338 vCA->PrintNodes();
1339 vCB->PrintNodes();
1340 vCC->PrintNodes();
d5219d0d 1341 vCD->PrintNodes();
1342 vCE->PrintNodes();
172b0d90 1343 } // end if
1344 //
1345 // SSD Cone
1346 // Data from Drawings ALR 0743/2E "Supporto Globale Settore SSD" and
1347 // ALR 0743/2A "Supporto Generale Settore SSD".
1348 //
cee918ed 1349 const Double_t kconThick = 13.0*fgkmm; // Thickness of Cone.
1350 const Double_t kconCthick = 0.75*fgkmm; // Car. finber thickness
1351 const Double_t kconRCurv0 = 10.0*fgkmm; // Radius of curvature.
1352 const Double_t kconRCurv1 = 25.0*fgkmm; // Radius of curvature.
1353 const Double_t kconT = 39.0*fgkDegree; // angle of SSD cone.
1354 const Double_t kconZOuterRing = 47.0*fgkmm;
1355 const Double_t kconZOuterRingMill = kconZOuterRing-5.0*fgkmm;
1356 const Double_t kconZToCylinder = 170.0*fgkmm;
1357 const Double_t kconZLengthMill = 171.5*fgkmm;
1358 const Double_t kconZLength = 176.5*fgkmm-
1359 (kconZOuterRing-kconZOuterRingMill);
1360 //const Double_t kconZInnerRing = 161.5*fgkmm-
1361 // (kconZOuterRing-kconZOuterRingMill);
1362 const Double_t kconZOuterRingInside = 30.25*fgkmm-
1363 (kconZOuterRing-kconZOuterRingMill);
1364 const Double_t kconZDisplacement = kconZToCylinder + 0.5*kcylZlength;
1365 const Double_t kconROuterMax = 0.5*985.0*fgkmm;
1366 const Double_t kconROuterMin = 0.5*945.0*fgkmm;
1367 const Double_t kconRCylOuterMill = 0.5*597.0*fgkmm;
1368 const Double_t kconRInnerMin = 0.5*562.0*fgkmm;
1369 //const Double_t kconRCentCurv0 = 0.5*927.0*fgkmm;
1370 const Double_t kconRCentCurv1 = 0.5*593.0*fgkmm;
1371 const Double_t kconRCentCurv2 = 0.5*578.0*fgkmm;
172b0d90 1372 // Foam core.
cee918ed 1373 const Double_t kconRohacellL0 = 112.3*fgkmm;
1374 const Double_t kconRohacellL1 = 58.4*fgkmm;
172b0d90 1375 // Screws and pins in outer SSD cone ring
cee918ed 1376 const Double_t kconROutHoles = 0.5*965.0*fgkmm;
1377 const Double_t kconRScrewM5by12 = 0.5*5.0*fgkmm;
1378 const Double_t kconLScrewM5by12 = 0.5*12.0*fgkmm;
1379 const Int_t kconNScrewM5by12 = 2;
1380 const Double_t kconRPinO6 = 0.5*6.0*fgkmm;
1381 const Double_t kconLPinO6 = 0.5*10.0*fgkmm;
1382 const Int_t kconNPinO6 = 3;
1383 const Int_t kconNRailScrews = 4;
1384 const Int_t kconNRailPins = 2;
1385 const Int_t kconNmounts = 4;
1386 const Double_t kconMountPhi0 = 9.0*fgkDegree; // degrees
1387 //
1388 const Double_t kconCableHoleROut = 0.5*920.0*fgkmm;
1389 const Double_t kconCableHoleRinner = 0.5*800.0*fgkmm;
1390 const Double_t kconCableHoleWidth = 200.0*fgkmm;
1391 const Double_t kconCableHoleAngle = 42.0*fgkDegree;
1392 //const Double_t kconCableHolePhi0 = 90.0/4.0*fgkDegree;
1393 //const Int_t kconNCableHoles = 8;
1394 const Double_t kconCoolHoleWidth = 40.0*fgkmm;
1395 const Double_t kconCoolHoleHight = 30.0*fgkmm;
1396 const Double_t kconCoolHoleRmin = 350.0*fgkmm;
1397 //const Double_t kconCoolHolephi0 = 90.0/4.0*fgkDegree;
1398 //const Int_t kconNCoolHoles = 8;
1399 const Double_t kconMountHoleWidth = 20.0*fgkmm;
1400 const Double_t kconMountHoleHight = 20.0*fgkmm;
1401 const Double_t kconMountHoleRmin = 317.5*fgkmm;
1402 //const Double_t kconMountHolephi0 = 0.0*fgkDegree;
1403 //const Int_t kconNMountHoles = 6;
172b0d90 1404 // SSD cone Wings with holes.
cee918ed 1405 const Double_t kconWingRmax = 527.5*fgkmm;
1406 const Double_t kconWingWidth = 70.0*fgkmm;
1407 const Double_t kconWingThick = 10.0*fgkmm;
1408 const Double_t kconWingPhi0 = 45.0*fgkDegree;
1409 //const Int_t kconNWings = 4;
172b0d90 1410 // SSD-SDD Thermal/Mechanical cylinder mounts
543b7370 1411 const Double_t kconRM6Head = 0.5*8.0*fgkmm;
cee918ed 1412 const Double_t kconZM6Head = 8.5*fgkmm;
172b0d90 1413 //
1414 // SSD-SDD Mounting bracket
cee918ed 1415 const Double_t ksupPRmin = 0.5*539.0*fgkmm;// see SDD RoutMin
1416 const Double_t ksupPRmax = 0.5*585.0*fgkmm;
543b7370 1417 const Double_t ksupPZ = 4.0*fgkmm;
cee918ed 1418 const Double_t ksupPPhi1 = (-0.5*70.*fgkmm/ksupPRmax)*fgkRadian;
1419 const Double_t ksupPPhi2 = -ksupPPhi1;
1420 //
1421 const Double_t kSinkconTc = SinD(kconT);
1422 const Double_t kCoskconTc = CosD(kconT);
1423 //
1424 TGeoPcon *sA0,*sB0,*sC0,*sF0,*sQ;
1425 TGeoConeSeg *sAh1,*sBh1;
1426 TGeoArb8 *sAh2,*sBh2;
1427 TGeoBBox *sAh3,*sBh3,*sAh4,*sBh4;
1428 TGeoConeSeg *sG,*sH;
1429 TGeoTubeSeg *sT;
1430 TGeoTube *sD,*sE,*sR,*sS;
1431 TGeoCompositeShape *sA,*sB,*sC,*sF;
172b0d90 1432 //
1433 // Lets start with the upper left outer carbon fiber surface.
1434 // Between za[2],rmaxa[2] and za[4],rmaxa[4] there is a curved section
cee918ed 1435 // given by rmaxa = rmaxa[2]-r*Sind(t) for 0<=t<=kconT and
1436 // za = za[2] + r*Cosd(t) for 0<=t<=kconT. Simularly between za[1],rmina[1
172b0d90 1437 // and za[3],rmina[3] there is a curve section given by
cee918ed 1438 // rmina = rmina[1]-r*Sind(t) for 0<=t<=kconT and za = za[1]+r&Sind(t)
1439 // for t<=0<=kconT. These curves have been replaced by straight lines
172b0d90 1440 // between the equivelent points for simplicity.
cee918ed 1441 // Poly-cone Volume sA0. Top part of SSD cone Carbon Fiber.
1442 sA0 = new TGeoPcon("ITSssdSuportConeCarbonFiberSurfaceA0",0.0,360.0,15);
1443 sA0->Z(0) = 0.0;
1444 sA0->Rmin(0) = kconROuterMin;
1445 sA0->Rmax(0) = kconROuterMax;
1446 sA0->Z(1) = kconZOuterRingInside-kconRCurv0;
1447 sA0->Rmin(1) = sA0->GetRmin(0);
1448 sA0->Rmax(1) = sA0->GetRmax(0);
1449 sA0->Z(2) = kconZOuterRingInside;
1450 sA0->Rmin(2) = sA0->GetRmin(1)-kconRCurv0;
1451 sA0->Rmax(2) = sA0->GetRmax(0);
1452 sA0->Z(3) = sA0->GetZ(2);
1453 sA0->Rmin(3) = -1000; // See Below
1454 sA0->Rmax(3) = sA0->GetRmax(0);
1455 sA0->Z(4) = kconZOuterRingMill-kconRCurv0;
1456 sA0->Rmin(4) = -1000; // See Below
1457 sA0->Rmax(4) = sA0->GetRmax(0);
1458 sA0->Z(5) = kconZOuterRingMill;
1459 sA0->Rmin(5) = -1000; // See Below
1460 sA0->Rmax(5) = sA0->GetRmax(4) - kconRCurv0;
1461 sA0->Z(6) = sA0->GetZ(5);
1462 sA0->Rmin(6) = -1000; // See Below
1463 sA0->Rmax(6) = -1000; // See Below
1464 sA0->Z(7) = sA0->GetZ(6)+kconRCurv0*(1.-kCoskconTc);
1465 sA0->Rmin(7) = -1000; // See Below
1466 sA0->Rmax(7) = -1000; // See Below
1467 sA0->Z(8) = -1000; // See Below
1468 sA0->Rmin(8) = kconRCentCurv2+kconRCurv1*kSinkconTc; // See Below
1469 sA0->Rmax(8) = -1000; // See Below
1470 sA0->Z(9) = -1000; // See Below
1471 sA0->Rmin(9) = kconRCentCurv2;
1472 sA0->Rmax(9) = -1000; // See Below
1473 sA0->Z(10) = -1000; // See Below
1474 sA0->Rmin(10)= kconRInnerMin;
1475 sA0->Rmax(10)= -1000; // See Below
1476 sA0->Z(11) = kconZLengthMill-kconRCurv0*(1.0-kCoskconTc);
1477 sA0->Rmin(11)= sA0->GetRmin(10);
1478 sA0->Rmax(11)= kconRCentCurv1+kconRCurv0*kSinkconTc;
1479 sA0->Z(12) = kconZToCylinder;
1480 sA0->Rmin(12)= sA0->GetRmin(10);
1481 sA0->Rmax(12)= -1000; // See Below
1482 sA0->Z(13) = sA0->GetZ(12);
1483 sA0->Rmin(13)= kconRCylOuterMill;
1484 sA0->Rmax(13)= -1000; // See Below
1485 z = kconZLengthMill;
1486 rmin = kconRCentCurv1;
1487 rmax = rmin;
1488 sA0->Z(14) = -1000; // See Below
1489 sA0->Rmin(14)= sA0->GetRmin(13);
1490 sA0->Rmax(14)= sA0->GetRmin(14);
1491 // Compute values undefined above
1492 sA0->Z(14) = Xfrom2Points(sA0->GetZ(11),sA0->GetRmax(11),z,rmax,
1493 sA0->GetRmax(14));
1494 sA0->Z(8) = ZFromRmaxpCone(sA0,11,90.-kconT,sA0->GetRmin(8),-kconThick);
1495 sA0->Rmax(8) = RmaxFromZpCone(sA0,11,90.-kconT,sA0->GetZ(8),0.0);
1496 sA0->Z(9) = sA0->GetZ(8)+kconRCurv1*(1.-kCoskconTc);
1497 sA0->Z(10) = sA0->GetZ(9);
1498 sA0->Rmin(3) = RminFromZpCone(sA0,8,90.-kconT,sA0->GetZ(3),0.0);
1499 sA0->Rmin(4) = RminFromZpCone(sA0,3,90.-kconT,sA0->GetZ(4),0.0);
1500 sA0->Rmin(5) = RminFromZpCone(sA0,3,90.-kconT,sA0->GetZ(5),0.0);
1501 sA0->Rmin(7) = RminFromZpCone(sA0,3,90.-kconT,sA0->GetZ(7),0.0);
1502 sA0->Rmax(7) = RmaxFromZpCone(sA0,11,90.-kconT,sA0->GetZ(7),0.0);
1503 sA0->Rmin(6) = sA0->GetRmin(5);
1504 sA0->Rmax(6) = RmaxFromZpCone(sA0,11,90.-kconT,sA0->GetZ(7),0.0);
1505 sA0->Rmax(9) = RmaxFromZpCone(sA0,11,90.-kconT,sA0->GetZ(9),0.0);
1506 sA0->Rmax(10)= sA0->GetRmax(9);
1507 t = TanD(270.+kconT);
1508 sA0->Rmax(12)= RmaxFrom2Points(sA0,11,14,sA0->GetZ(12));
1509 sA0->Rmax(13)= sA0->GetRmax(12);
cee918ed 1510 //
1511 // Poly-cone Volume B. Stesalite inside volume sA0.
172b0d90 1512 // Now lets define the Inserto Stesalite 4411w material volume.
cee918ed 1513 // Poly-cone Volume sA0. Top part of SSD cone Carbon Fiber.
1514 sB0 = new TGeoPcon("ITSssdSuportConeStaseliteB0",0.0,360.0,15);
1515 //
1516 sB0->Z(0) = sA0->GetZ(0);
1517 sB0->Rmin(0) = sA0->GetRmin(0) + kconCthick;
1518 sB0->Rmax(0) = sA0->GetRmax(0) - kconCthick;
543b7370 1519 //printf("A0#%d ",1);
cee918ed 1520 InsidePoint(sA0,0,1,2,kconCthick,sB0,1,kFALSE); // Rmin
1521 sB0->Rmax(1) = sB0->Rmax(0);
543b7370 1522 //printf("A0#%d ",2);
cee918ed 1523 InsidePoint(sA0,1,2,3,kconCthick,sB0,2,kFALSE); // Rmin
1524 sB0->Rmax(2) = sB0->Rmax(0);
543b7370 1525 //printf("A0#%d ",3);
cee918ed 1526 InsidePoint(sA0,2,3,9,kconCthick,sB0,3,kFALSE);
1527 sB0->Rmax(3) = sB0->Rmax(0);
543b7370 1528 //printf("A0#%d ",4);
cee918ed 1529 InsidePoint(sA0,0,4,5,kconCthick,sB0,4,kTRUE); // Rmax
1530 sB0->Rmin(4) = -1000.; // see Bellow
543b7370 1531 //printf("A0#%d ",5);
cee918ed 1532 InsidePoint(sA0,4,5,6,kconCthick,sB0,5,kTRUE); // Rmax
1533 sB0->Rmin(5) = -1000.; // see Bellow
543b7370 1534 //printf("A0#%d ",6);
cee918ed 1535 InsidePoint(sA0,5,6,7,kconCthick,sB0,6,kTRUE); // Rmax
1536 sB0->Rmin(6) = -1000.; // see Bellow
543b7370 1537 //printf("A0#%d ",7);
cee918ed 1538 InsidePoint(sA0,6,7,11,kconCthick,sB0,7,kTRUE); // Rmax
1539 sB0->Rmin(7) = -1000.; // see Bellow
543b7370 1540 //printf("A0#%d ",8);
cee918ed 1541 InsidePoint(sA0,3,8,9,kconCthick,sB0,8,kFALSE); // Rmin
1542 sB0->Rmax(8) = -1000.; // see Bellow
543b7370 1543 //printf("A0#%d ",9);
cee918ed 1544 InsidePoint(sA0,8,9,10,kconCthick,sB0,9,kFALSE); // Rmin
1545 sB0->Rmax(9) = -1000.; // see Bellow
1546 sB0->Z(10) = sA0->GetZ(10) + kconCthick;
1547 sB0->Rmin(10)= sA0->GetRmin(10);
1548 sB0->Rmax(10)= -1000.; // see Bellow
543b7370 1549 //printf("A0#%d ",11);
cee918ed 1550 InsidePoint(sA0,7,11,14,kconCthick,sB0,11,kTRUE); // Rmax
1551 sB0->Rmin(11)= sA0->GetRmin(10);
1552 sB0->Z(12) = sA0->GetZ(12);
1553 sB0->Rmin(12)= sA0->GetRmin(12);
1554 sB0->Rmax(12)= -1000.; // see Bellow
1555 sB0->Z(13) = sA0->GetZ(13);
1556 sB0->Rmin(13)= sA0->GetRmin(13);
1557 sB0->Rmax(13)= -1000.; // see Bellow
1558 sB0->Z(14) = sA0->GetZ(14) - kconCthick;
1559 sB0->Rmin(14)= sA0->GetRmin(14);
1560 sB0->Rmax(14)= sB0->Rmin(14); // Close?
1561 sB0->Rmin(4) = RminFrom2Points(sB0,3,8,sB0->GetZ(4));
1562 sB0->Rmin(5) = RminFrom2Points(sB0,3,8,sB0->GetZ(5));
1563 sB0->Rmin(6) = sB0->GetRmin(5);
1564 sB0->Rmin(7) = RminFrom2Points(sB0,3,8,sB0->GetZ(7));
1565 sB0->Rmax(8) = RmaxFrom2Points(sB0,7,11,sB0->GetZ(8));
1566 sB0->Rmax(9) = RmaxFrom2Points(sB0,7,11,sB0->GetZ(9));
1567 sB0->Rmax(10)= sB0->GetRmax(9);
1568 sB0->Rmax(12)= RmaxFrom2Points(sB0,11,14,sB0->GetZ(12));
1569 sB0->Rmax(13)= RmaxFrom2Points(sB0,11,14,sB0->GetZ(13));
cee918ed 1570 //
1571 // Poly-cone Volume sC0. Foam inside volume sA0.
172b0d90 1572 // Now lets define the Rohacell foam material volume.
cee918ed 1573 sC0 = new TGeoPcon("ITSssdSuportConeRohacellC0",0.0,360.0,4);
1574 sC0->Z(1) = sB0->GetZ(7);
1575 sC0->Rmax(1) = sB0->GetRmax(7);
1576 sC0->Rmin(1) = RminFrom2Points(sB0,3,8,sC0->GetZ(1));
1577 sC0->Rmin(0) = sC0->GetRmax(1);
1578 sC0->Rmax(0) = sC0->GetRmin(0);
1579 sC0->Z(0) = Zfrom2MinPoints(sB0,3,8,sC0->Rmin(0));
1580 t = kconThick-2.0*kconCthick;
1581 sC0->Rmax(3) = sC0->GetRmax(0)-kCoskconTc*TMath::Sqrt(
1582 kconRohacellL0*kconRohacellL0-t*t)+t*kSinkconTc;
1583 sC0->Rmin(3) = sC0->GetRmax(3);
1584 sC0->Z(3) = ZFromRmaxpCone(sB0,11,90.-kconT,sC0->GetRmax(3),0.0);;
1585 sC0->Rmin(2) = sC0->GetRmin(3);
1586 sC0->Z(2) = ZFromRminpCone(sB0,3,90.-kconT,sC0->GetRmin(2),0.0);
1587 sC0->Rmax(2) = RmaxFromZpCone(sB0,11,90.0-kconT,sC0->GetZ(2),0.0);
cee918ed 1588 //
d5219d0d 1589 // Poly-cone Volume sF0. Second Foam inside volume sA0.
172b0d90 1590 // Now lets define the Rohacell foam material volume.
cee918ed 1591 sF0 = new TGeoPcon("ITSssdSuportConeRohacellCF0",0.0,360.0,4);
1592 sF0->Z(2) = sB0->GetZ(8);
1593 sF0->Rmin(2) = sB0->GetRmin(8);
1594 sF0->Rmax(2) = sB0->GetRmax(8);
1595 sF0->Z(0) = sF0->GetZ(2)-kconRohacellL1*kSinkconTc;
1596 sF0->Rmin(0) = sF0->GetRmin(2)+kconRohacellL1*kCoskconTc;
1597 sF0->Rmax(0) = sF0->GetRmin(0);
1598 sF0->Z(1) = ZFromRmaxpCone(sB0,11,90.-kconT,sF0->GetRmax(0),0.0);;
1599 sF0->Rmax(1) = sF0->GetRmax(0);
1600 sF0->Rmin(1) = RminFrom2Points(sB0,3,8,sF0->GetZ(1));
1601 sF0->Rmax(3) = sF0->GetRmin(2)+(kconThick-2.0*kconCthick)*kCoskconTc;
1602 sF0->Rmin(3) = sF0->GetRmax(3);
1603 sF0->Z(3) = ZFromRmaxpCone(sB0,11,90.-kconT,sF0->GetRmax(3),0.0);
172b0d90 1604 // Holes for Cables to pass Through is created by the intersection
cee918ed 1605 // between a cone segment and an Arb8, One for the volume sA0 and a
1606 // larger one for the volumes sB0 and sC0, so that the surface is covered
1607 // in carbon figer (volume sA0).
1608 sAh1 = new TGeoConeSeg("ITSssdCableHoleAh1",
1609 0.5*kconZLength,kconCableHoleRinner,
1610 kconCableHoleROut,kconCableHoleRinner,
1611 kconCableHoleROut,
1612 90.-(0.5*kconCableHoleWidth/
1613 kconCableHoleROut)*fgkRadian,
1614 90.+(0.5*kconCableHoleWidth/
1615 kconCableHoleROut)*fgkRadian);
1616 sBh1 = new TGeoConeSeg("ITSssdCableHoleBh1",0.5*kconZLength,
1617 kconCableHoleRinner-kconCthick,
1618 kconCableHoleROut+kconCthick,
1619 kconCableHoleRinner-kconCthick,
1620 kconCableHoleROut+kconCthick,
1621 90.-(((0.5*kconCableHoleWidth+kconCthick)/
1622 (kconCableHoleROut+kconCthick)))*fgkRadian,
1623 90.+(((0.5*kconCableHoleWidth+kconCthick)/
1624 (kconCableHoleROut+kconCthick)))*fgkRadian);
1625 x0 = sAh1->GetRmax1()*CosD(sAh1->GetPhi2());
1626 y0 = sAh1->GetRmax1()*SinD(sAh1->GetPhi2());
1627 sAh2 = new TGeoArb8("ITSssdCableHoleAh2",0.5*kconZLength);
1628 y = sAh1->GetRmax1();
1629 x = x0+(y-y0)/TanD(90.0+kconCableHoleAngle);
1630 sAh2->SetVertex(0,x,y);
1631 y = sAh1->GetRmin1()*SinD(sAh1->GetPhi2());
1632 x = x0+(y-y0)/TanD(90.0+kconCableHoleAngle);
1633 sAh2->SetVertex(3,x,y);
1634 x0 = sAh1->GetRmax1()*CosD(sAh1->GetPhi1());
1635 y0 = sAh1->GetRmax1()*SinD(sAh1->GetPhi1());
1636 y = sAh1->GetRmax1();
1637 x = x0+(y-y0)/TanD(90.0-kconCableHoleAngle);
1638 sAh2->SetVertex(1,x,y);
1639 y = sAh1->GetRmin1()*SinD(sAh1->GetPhi1());
1640 x = x0+(y-y0)/TanD(90.0-kconCableHoleAngle);
1641 sAh2->SetVertex(2,x,y);
1642 //
1643 x0 = sBh1->GetRmax1()*CosD(sBh1->GetPhi2());
1644 y0 = sBh1->GetRmax1()*SinD(sBh1->GetPhi2());
1645 sBh2 = new TGeoArb8("ITSssdCableHoleBh2",0.5*kconZLength);
1646 y = sBh1->GetRmax1();
1647 x = x0+(y-y0)/TanD(90.0+kconCableHoleAngle);
1648 sBh2->SetVertex(0,x,y);
1649 y = sBh1->GetRmin1()*SinD(sBh1->GetPhi2());
1650 x = x0+(y-y0)/TanD(90.0+kconCableHoleAngle);
1651 sBh2->SetVertex(3,x,y);
1652 x0 = sBh1->GetRmax1()*CosD(sBh1->GetPhi1());
1653 y0 = sBh1->GetRmax1()*SinD(sBh1->GetPhi1());
1654 y = sBh1->GetRmax1();
1655 x = x0+(y-y0)/TanD(90.0-kconCableHoleAngle);
1656 sBh2->SetVertex(1,x,y);
1657 y = sBh1->GetRmin1()*SinD(sBh1->GetPhi1());
1658 x = x0+(y-y0)/TanD(90.0-kconCableHoleAngle);
1659 sBh2->SetVertex(2,x,y);
172b0d90 1660 for(i=0;i<4;i++){ // define points at +dz
cee918ed 1661 sAh2->SetVertex(i+4,(sAh2->GetVertices())[2*i],
1662 (sAh2->GetVertices())[1+2*i]);
1663 sBh2->SetVertex(i+4,(sBh2->GetVertices())[2*i],
1664 (sBh2->GetVertices())[1+2*i]);
172b0d90 1665 } // end for i
cee918ed 1666 sAh3 = new TGeoBBox("ITSssdCoolingHoleAh3",0.5*kconCoolHoleWidth,
d5219d0d 1667 0.5*kconCoolHoleHight,kconZLength);
cee918ed 1668 sBh3 = new TGeoBBox("ITSssdCoolingHoleBh3",
1669 0.5*kconCoolHoleWidth+kconCthick,
d5219d0d 1670 0.5*kconCoolHoleHight+kconCthick,kconZLength);
cee918ed 1671 sAh4 = new TGeoBBox("ITSssdMountingPostHoleAh4",0.5*kconMountHoleWidth,
1672 0.5*kconMountHoleHight,0.5*kconZLength);
d5219d0d 1673 z = sF0->GetZ(0)-sF0->GetZ(sF0->GetNz()-1);
1674 if(z<0.0) z = -z;
cee918ed 1675 sBh4 = new TGeoBBox("ITSssdMountingPostHoleBh4",
1676 0.5*kconMountHoleWidth+kconCthick,
d5219d0d 1677 0.5*kconMountHoleHight+kconCthick,0.5*z);
172b0d90 1678 // SSD Cone Wings
cee918ed 1679 sG = new TGeoConeSeg("ITSssdWingCarbonFiberSurfaceG",
1680 0.5*kconWingThick,kconROuterMax-kconCthick,
1681 kconWingRmax,kconROuterMax-kconCthick,kconWingRmax,
1682 kconWingPhi0-(0.5*kconWingWidth/kconWingRmax)*fgkRadian,
1683 kconWingPhi0+(0.5*kconWingWidth/kconWingRmax)*fgkRadian);
1684 sH = new TGeoConeSeg("ITSssdWingStaseliteH",
1685 0.5*kconWingThick-kconCthick,kconROuterMax-kconCthick,
1686 kconWingRmax-kconCthick,
1687 kconROuterMax-kconCthick,
1688 kconWingRmax-kconCthick,
1689 kconWingPhi0-((0.5*kconWingWidth-kconCthick)/
1690 (kconWingRmax-kconCthick))*fgkRadian,
1691 kconWingPhi0+((0.5*kconWingWidth-kconCthick)/
1692 (kconWingRmax-kconCthick))*fgkRadian);
172b0d90 1693 // SDD support plate, SSD side.
cee918ed 1694 //Poly-cone Volume sT.
1695 sT = new TGeoTubeSeg("ITSssdsddMountingBracketT",ksupPRmin,ksupPRmax,
543b7370 1696 0.5*ksupPZ,ksupPPhi1,ksupPPhi2);
172b0d90 1697 //
1698 TGeoRotation *rotZ225 =new TGeoRotation("ITSssdConeZ225", 0.0,0.0, 22.5);
1699 rotZ225->RegisterYourself();
1700 TGeoRotation *rotZ675 =new TGeoRotation("ITSssdConeZ675", 0.0,0.0, 67.5);
1701 rotZ675->RegisterYourself();
1702 TGeoRotation *rotZ90 =new TGeoRotation("ITSssdConeZ90", 0.0,0.0, 90.0);
1703 rotZ90->RegisterYourself();
1704 TGeoRotation *rotZ1125=new TGeoRotation("ITSssdConeZ1125",0.0,0.0,112.5);
1705 rotZ1125->RegisterYourself();
1706 TGeoRotation *rotZ1575=new TGeoRotation("ITSssdConeZ1575",0.0,0.0,157.5);
1707 rotZ1575->RegisterYourself();
1708 TGeoRotation *rotZ180 =new TGeoRotation("ITSssdConeZ180", 0.0,0.0,180.0);
1709 rotZ180->RegisterYourself();
1710 TGeoRotation *rotZ2025=new TGeoRotation("ITSssdConeZ2025",0.0,0.0,202.5);
1711 rotZ2025->RegisterYourself();
1712 TGeoRotation *rotZ2475=new TGeoRotation("ITSssdConeZ2475",0.0,0.0,247.5);
1713 rotZ2475->RegisterYourself();
1714 TGeoRotation *rotZ270 =new TGeoRotation("ITSssdConeZ270", 0.0,0.0,270.0);
1715 rotZ270->RegisterYourself();
1716 TGeoRotation *rotZ2925=new TGeoRotation("ITSssdConeZ2925",0.0,0.0,292.5);
1717 rotZ2925->RegisterYourself();
1718 TGeoRotation *rotZ3375=new TGeoRotation("ITSssdConeZ3375",0.0,0.0,337.5);
1719 rotZ3375->RegisterYourself();
1720 //
cee918ed 1721 vl[0] = 0.0;vl[1] = kconCoolHoleRmin+0.5*kconCoolHoleHight;vl[2] = 0.0;
172b0d90 1722 rotZ225->LocalToMaster(vl,vg);
1723 TGeoCombiTrans *rotranA225 = new TGeoCombiTrans("ITSssdConeTZ225",vg[0],
1724 vg[1],vg[2],rotZ225);
1725 rotranA225->RegisterYourself();
1726 rotZ675->LocalToMaster(vl,vg);
1727 TGeoCombiTrans *rotranA675 = new TGeoCombiTrans("ITSssdConeTZ675", vg[0],
1728 vg[1],vg[2],rotZ675);
1729 rotranA675->RegisterYourself();
1730 rotZ1125->LocalToMaster(vl,vg);
1731 TGeoCombiTrans *rotranA1125 = new TGeoCombiTrans("ITSssdConeTZ1125",vg[0],
1732 vg[1],vg[2],rotZ1125);
1733 rotranA1125->RegisterYourself();
1734 rotZ1575->LocalToMaster(vl,vg);
1735 TGeoCombiTrans *rotranA1575 = new TGeoCombiTrans("ITSssdConeTZ1575",vg[0],
1736 vg[1],vg[2],rotZ1575);
1737 rotranA1575->RegisterYourself();
1738 rotZ2025->LocalToMaster(vl,vg);
1739 TGeoCombiTrans *rotranA2025 = new TGeoCombiTrans("ITSssdConeTZ2025",vg[0],
1740 vg[1],vg[2],rotZ2025);
1741 rotranA2025->RegisterYourself();
1742 rotZ2475->LocalToMaster(vl,vg);
1743 TGeoCombiTrans *rotranA2475 = new TGeoCombiTrans("ITSssdConeTZ2475",vg[0],
1744 vg[1],vg[2],rotZ2475);
1745 rotranA2475->RegisterYourself();
1746 rotZ2925->LocalToMaster(vl,vg);
1747 TGeoCombiTrans *rotranA2925 = new TGeoCombiTrans("ITSssdConeTZ2925",vg[0],
1748 vg[1],vg[2],rotZ2925);
1749 rotranA2925->RegisterYourself();
1750 rotZ3375->LocalToMaster(vl,vg);
1751 TGeoCombiTrans *rotranA3375 = new TGeoCombiTrans("ITSssdConeTZ3375",vg[0],
1752 vg[1],vg[2],rotZ3375);
1753 rotranA3375->RegisterYourself();
1754 TGeoRotation *rotZ30 = new TGeoRotation("ITSssdConeZ30", 0.0,0.0, 30.0);
1755 TGeoRotation *rotZ60 = new TGeoRotation("ITSssdConeZ60", 0.0,0.0, 60.0);
1756 //TGeoRotation *rotZ120 = new TGeoRotation("ITSssdConeZ120",0.0,0.0,120.0);
1757 TGeoRotation *rotZ150 = new TGeoRotation("ITSssdConeZ150",0.0,0.0,150.0);
1758 TGeoRotation *rotZ210 = new TGeoRotation("ITSssdConeZ210",0.0,0.0,210.0);
1759 //TGeoRotation *rotZ240 = new TGeoRotation("ITSssdConeZ240",0.0,0.0,240.0);
1760 TGeoRotation *rotZ300 = new TGeoRotation("ITSssdConeZ300",0.0,0.0,300.0);
1761 TGeoRotation *rotZ330 = new TGeoRotation("ITSssdConeZ330",0.0,0.0,330.0);
cee918ed 1762 vl[0] = kconMountHoleRmin+0.5*kconMountHoleHight; vl[1] = 0.0; vl[2] = 0.0;
d5219d0d 1763 for(i=0;i<sF0->GetNz();i++) vl[2] += sF0->GetZ(i);
1764 vl[2] /= (Double_t)(sF0->GetNz());
172b0d90 1765 rotZ30->LocalToMaster(vl,vg);
d5219d0d 1766 TGeoCombiTrans *rotranA30 = new TGeoCombiTrans("ITSssdConeTZ30",vg[0],
1767 vg[1],vg[2],rotZ30);
172b0d90 1768 rotranA30->RegisterYourself();
1769 rotZ90->LocalToMaster(vl,vg);
1770 TGeoCombiTrans *rotranA90 = new TGeoCombiTrans("ITSssdConeTZ90", vg[0],
1771 vg[1],vg[2],rotZ90);
1772 rotranA90->RegisterYourself();
1773 rotZ150->LocalToMaster(vl,vg);
1774 TGeoCombiTrans *rotranA150 = new TGeoCombiTrans("ITSssdConeTZ150",vg[0],
1775 vg[1],vg[2],rotZ150);
1776 rotranA150->RegisterYourself();
1777 rotZ210->LocalToMaster(vl,vg);
1778 TGeoCombiTrans *rotranA210 = new TGeoCombiTrans("ITSssdConeTZ210",vg[0],
1779 vg[1],vg[2],rotZ210);
1780 rotranA210->RegisterYourself();
1781 rotZ270->LocalToMaster(vl,vg);
1782 TGeoCombiTrans *rotranA270 = new TGeoCombiTrans("ITSssdConeTZ270",vg[0],
1783 vg[1],vg[2],rotZ270);
1784 rotranA270->RegisterYourself();
1785 rotZ330->LocalToMaster(vl,vg);
1786 TGeoCombiTrans *rotranA330 = new TGeoCombiTrans("ITSssdConeTZ330",vg[0],
1787 vg[1],vg[2],rotZ330);
1788 rotranA330->RegisterYourself();
cee918ed 1789 vl[0] = 0.0; vl[1] = 0.0; vl[2] = sA0->GetZ(10)+sT->GetDz();
172b0d90 1790 rotZ60->LocalToMaster(vl,vg);
1791 TGeoCombiTrans *rotranBrTZ60 = new TGeoCombiTrans("ITSssdConeBrTZ60",
1792 vg[0],vg[1],vg[2],rotZ60);
1793 rotranBrTZ60->RegisterYourself();
1794 TGeoCombiTrans *rotranBrTZ180 = new TGeoCombiTrans("ITSssdConeBrTZ180",
1795 vg[0],vg[1],vg[2],rotZ180);
1796 rotranBrTZ180->RegisterYourself();
1797 TGeoCombiTrans *rotranBrTZ300 = new TGeoCombiTrans("ITSssdConeBrTZ300",
1798 vg[0],vg[1],vg[2],rotZ300);
1799 rotranBrTZ300->RegisterYourself();
543b7370 1800 if(GetDebug(1)){
d5219d0d 1801 rotZ225->Print();
1802 rotZ675->Print();
1803 rotZ90->Print();
1804 rotZ1125->Print();
1805 rotZ1575->Print();
1806 rotZ180->Print();
1807 rotZ2025->Print();
1808 rotZ2475->Print();
1809 rotZ270->Print();
1810 rotZ2925->Print();
1811 rotZ3375->Print();
1812 rotranA225->Print();
1813 rotranA675->Print();
1814 rotranA1125->Print();
1815 rotranA1575->Print();
1816 rotranA2025->Print();
1817 rotranA2475->Print();
1818 rotranA2925->Print();
1819 rotranA3375->Print();
1820 rotZ60->Print();
1821 rotZ300->Print();
1822 rotranA30->Print();
1823 rotranA90->Print();
1824 rotranA150->Print();
1825 rotranA210->Print();
1826 rotranA270->Print();
1827 rotranA330->Print();
1828 rotranBrTZ60->Print();
1829 rotranBrTZ180->Print();
1830 rotranBrTZ300->Print();
543b7370 1831 } // end if GetDebug(1)
cee918ed 1832 sA = new TGeoCompositeShape("ITSssdSuportConeCarbonFiberSurfaceA",
1833 "(((((((((((((((((((((((((((("
172b0d90 1834 "ITSssdSuportConeCarbonFiberSurfaceA0 +"
1835 "ITSssdWingCarbonFiberSurfaceG) +"
1836 "ITSssdWingCarbonFiberSurfaceG:ITSssdConeZ90) +"
1837 "ITSssdWingCarbonFiberSurfaceG:ITSssdConeZ180) +"
1838 "ITSssdWingCarbonFiberSurfaceG:ITSssdConeZ270) -"
d5219d0d 1839 "(ITSssdCableHoleAh1:ITSssdConeZ225*ITSssdCableHoleAh2:ITSssdConeZ225)) -"
1840 "(ITSssdCableHoleAh1:ITSssdConeZ675*ITSssdCableHoleAh2:ITSssdConeZ675)) -"
1841 "(ITSssdCableHoleAh1:ITSssdConeZ1125*ITSssdCableHoleAh2:ITSssdConeZ1125)) -"
1842 "(ITSssdCableHoleAh1:ITSssdConeZ1575*ITSssdCableHoleAh2:ITSssdConeZ1575)) -"
1843 "(ITSssdCableHoleAh1:ITSssdConeZ2025*ITSssdCableHoleAh2:ITSssdConeZ2025)) -"
1844 "(ITSssdCableHoleAh1:ITSssdConeZ2475*ITSssdCableHoleAh2:ITSssdConeZ2475)) -"
1845 "(ITSssdCableHoleAh1:ITSssdConeZ2925*ITSssdCableHoleAh2:ITSssdConeZ2925)) -"
1846 "(ITSssdCableHoleAh1:ITSssdConeZ3375*ITSssdCableHoleAh2:ITSssdConeZ3375)) -"
172b0d90 1847 "ITSssdCoolingHoleAh3:ITSssdConeTZ225) -"
1848 "ITSssdCoolingHoleAh3:ITSssdConeTZ675) -"
1849 "ITSssdCoolingHoleAh3:ITSssdConeTZ1125) -"
1850 "ITSssdCoolingHoleAh3:ITSssdConeTZ1575) -"
1851 "ITSssdCoolingHoleAh3:ITSssdConeTZ2025) -"
1852 "ITSssdCoolingHoleAh3:ITSssdConeTZ2475) -"
1853 "ITSssdCoolingHoleAh3:ITSssdConeTZ2925) -"
1854 "ITSssdCoolingHoleAh3:ITSssdConeTZ3375) -"
1855 "ITSssdMountingPostHoleAh4:ITSssdConeTZ30) -"
1856 "ITSssdMountingPostHoleAh4:ITSssdConeTZ90) -"
1857 "ITSssdMountingPostHoleAh4:ITSssdConeTZ150) -"
1858 "ITSssdMountingPostHoleAh4:ITSssdConeTZ210) -"
1859 "ITSssdMountingPostHoleAh4:ITSssdConeTZ270) -"
1860 "ITSssdMountingPostHoleAh4:ITSssdConeTZ330) -"
1861 "ITSssdsddMountingBracketT:ITSssdConeBrTZ60) -"
1862 "ITSssdsddMountingBracketT:ITSssdConeBrTZ180) -"
1863 "ITSssdsddMountingBracketT:ITSssdConeBrTZ300"
1864 );
cee918ed 1865 sB = new TGeoCompositeShape("ITSssdSuportConeStaseliteB",
1866 "(((((((((((((((((((((((((((("
172b0d90 1867 "ITSssdSuportConeStaseliteB0 +"
1868 "ITSssdWingStaseliteH) +"
1869 "ITSssdWingStaseliteH:ITSssdConeZ90) +"
1870 "ITSssdWingStaseliteH:ITSssdConeZ180) +"
1871 "ITSssdWingStaseliteH:ITSssdConeZ270) -"
d5219d0d 1872 "(ITSssdCableHoleBh1:ITSssdConeZ225*ITSssdCableHoleBh2:ITSssdConeZ225)) -"
1873 "(ITSssdCableHoleBh1:ITSssdConeZ675*ITSssdCableHoleBh2:ITSssdConeZ675)) -"
1874 "(ITSssdCableHoleBh1:ITSssdConeZ1125*ITSssdCableHoleBh2:ITSssdConeZ1125)) -"
1875 "(ITSssdCableHoleBh1:ITSssdConeZ1575*ITSssdCableHoleBh2:ITSssdConeZ1575)) -"
1876 "(ITSssdCableHoleBh1:ITSssdConeZ2025*ITSssdCableHoleBh2:ITSssdConeZ2025)) -"
1877 "(ITSssdCableHoleBh1:ITSssdConeZ2475*ITSssdCableHoleBh2:ITSssdConeZ2475)) -"
1878 "(ITSssdCableHoleBh1:ITSssdConeZ2925*ITSssdCableHoleBh2:ITSssdConeZ2925)) -"
1879 "(ITSssdCableHoleBh1:ITSssdConeZ3375*ITSssdCableHoleBh2:ITSssdConeZ3375)) -"
172b0d90 1880 "ITSssdCoolingHoleBh3:ITSssdConeTZ225) -"
1881 "ITSssdCoolingHoleBh3:ITSssdConeTZ675) -"
1882 "ITSssdCoolingHoleBh3:ITSssdConeTZ1125) -"
1883 "ITSssdCoolingHoleBh3:ITSssdConeTZ1575) -"
1884 "ITSssdCoolingHoleBh3:ITSssdConeTZ2025) -"
1885 "ITSssdCoolingHoleBh3:ITSssdConeTZ2475) -"
1886 "ITSssdCoolingHoleBh3:ITSssdConeTZ2925) -"
1887 "ITSssdCoolingHoleBh3:ITSssdConeTZ3375) -"
1888 "ITSssdMountingPostHoleBh4:ITSssdConeTZ30) -"
1889 "ITSssdMountingPostHoleBh4:ITSssdConeTZ90) -"
1890 "ITSssdMountingPostHoleBh4:ITSssdConeTZ150) -"
1891 "ITSssdMountingPostHoleBh4:ITSssdConeTZ210) -"
1892 "ITSssdMountingPostHoleBh4:ITSssdConeTZ270) -"
1893 "ITSssdMountingPostHoleBh4:ITSssdConeTZ330) -"
1894 "ITSssdsddMountingBracketT:ITSssdConeBrTZ60) -"
1895 "ITSssdsddMountingBracketT:ITSssdConeBrTZ180) -"
1896 "ITSssdsddMountingBracketT:ITSssdConeBrTZ300"
1897 );
cee918ed 1898 sC = new TGeoCompositeShape("ITSssdSuportConeRohacellC",
d5219d0d 1899 "((((((("
1900 "ITSssdSuportConeRohacellC0 -"
1901 "ITSssdCableHoleBh1:ITSssdConeZ225*ITSssdCableHoleBh2:ITSssdConeZ225) -"
1902 "ITSssdCableHoleBh1:ITSssdConeZ675*ITSssdCableHoleBh2:ITSssdConeZ675) -"
1903 "ITSssdCableHoleBh1:ITSssdConeZ1125*ITSssdCableHoleBh2:ITSssdConeZ1125) -"
1904 "ITSssdCableHoleBh1:ITSssdConeZ1575*ITSssdCableHoleBh2:ITSssdConeZ1575) -"
1905 "ITSssdCableHoleBh1:ITSssdConeZ2025*ITSssdCableHoleBh2:ITSssdConeZ2025) -"
1906 "ITSssdCableHoleBh1:ITSssdConeZ2475*ITSssdCableHoleBh2:ITSssdConeZ2475) -"
1907 "ITSssdCableHoleBh1:ITSssdConeZ2925*ITSssdCableHoleBh2:ITSssdConeZ2925) -"
1908 "ITSssdCableHoleBh1:ITSssdConeZ3375*ITSssdCableHoleBh2:ITSssdConeZ3375 "
172b0d90 1909 );
cee918ed 1910 sF = new TGeoCompositeShape("ITSssdSuportConeRohacellCF",
1911 "((((("
d5219d0d 1912 "ITSssdSuportConeRohacellCF0 -"
172b0d90 1913 "ITSssdMountingPostHoleBh4:ITSssdConeTZ30) -"
1914 "ITSssdMountingPostHoleBh4:ITSssdConeTZ90) -"
1915 "ITSssdMountingPostHoleBh4:ITSssdConeTZ150) -"
1916 "ITSssdMountingPostHoleBh4:ITSssdConeTZ210) -"
1917 "ITSssdMountingPostHoleBh4:ITSssdConeTZ270) -"
d5219d0d 1918 "ITSssdMountingPostHoleBh4:ITSssdConeTZ330"
172b0d90 1919 );
1920 //
1921 // In volume SCB, th Inserto Stesalite 4411w material volume, there
1922 // are a number of Stainless steel screw and pin studs which will be
1923 // filled with screws/studs.
cee918ed 1924 sD = new TGeoTube("ITS Screw+stud used to mount things to the SSD "
1925 "support cone",
1926 0.0,kconRScrewM5by12,kconLScrewM5by12);
cee918ed 1927 sE = new TGeoTube("ITS pin used to mount things to the "
1928 "SSD support cone",0.0,kconRPinO6,kconLPinO6);
172b0d90 1929 // Bolt heads holding the SSD-SDD tube to the SSD cone.
1930 // Bolt -- PolyCone
cee918ed 1931 //Poly-cone Volume sQ.
543b7370 1932 sQ = new TGeoPcon("ITS SSD Thermal sheald M6 screw headQ",0.0,360.0,4);
cee918ed 1933 sQ->Z(0) = sA0->GetZ(12);
1934 sQ->Rmin(0) = 0.0;
1935 sQ->Rmax(0) = kcylRM6;
543b7370 1936 sQ->Z(1) = sA0->GetZ(10) + kconZM6Head;
cee918ed 1937 sQ->Rmin(1) = 0.0;
1938 sQ->Rmax(1) = kcylRM6;
1939 sQ->Z(2) = sQ->GetZ(1);
1940 sQ->Rmin(2) = 0.0;
1941 sQ->Rmax(2) = kconRM6Head;
543b7370 1942 sQ->Z(3) = sA0->GetZ(10)+ksupPZ;
cee918ed 1943 sQ->Rmin(3) = 0.0;
543b7370 1944 sQ->Rmax(3) = kconRM6Head;
172b0d90 1945 // air infront of bolt (stasolit Volume K) -- Tube
cee918ed 1946 sR = new TGeoTube("ITS Air in front of bolt (in stasolit)R",
1947 sQ->GetRmin(3),sQ->GetRmax(3),0.5*(ksupPZ-kconCthick));
172b0d90 1948 // air infront of bolt (carbon fiber volume I) -- Tube
cee918ed 1949 sS = new TGeoTube("ITS Air in front of Stainless Steal Screw end, M6S",
1950 sQ->GetRmin(3),sQ->GetRmax(3),0.5*kconCthick);
cee918ed 1951 //
543b7370 1952 if(GetDebug(1)){
d5219d0d 1953 sA0->InspectShape();
1954 sB0->InspectShape();
1955 sC0->InspectShape();
1956 sF0->InspectShape();
1957 sQ->InspectShape();
1958 sAh1->InspectShape();
1959 sBh1->InspectShape();
1960 sAh2->InspectShape();
1961 sBh2->InspectShape();
1962 sAh3->InspectShape();
1963 sBh3->InspectShape();
1964 sAh4->InspectShape();
1965 sBh4->InspectShape();
1966 sG->InspectShape();
1967 sH->InspectShape();
1968 sT->InspectShape();
1969 sD->InspectShape();
1970 sE->InspectShape();
1971 sR->InspectShape();
1972 sS->InspectShape();
1973 sA->InspectShape();
1974 sB->InspectShape();
1975 sC->InspectShape();
1976 sF->InspectShape();
543b7370 1977 } // end if GetDebug(1)
cee918ed 1978 TGeoVolume *vA,*vB,*vC,*vD,*vE,*vF,*vQ,*vR,*vS,*vT;
1979 //
1980 vA = new TGeoVolume("ITSssdConeA",sA,medSSDcf); // Carbon Fiber
1981 vA->SetVisibility(kTRUE);
1982 vA->SetLineColor(4); // blue
1983 vA->SetLineWidth(1);
1984 vA->SetFillColor(vA->GetLineColor());
d5219d0d 1985 vA->SetFillStyle(4050); // 50% transparent
cee918ed 1986 vB = new TGeoVolume("ITSssdConeB",sB,medSSDfs); // Staselite
1987 vB->SetVisibility(kTRUE);
1988 vB->SetLineColor(2); // red
1989 vB->SetLineWidth(1);
1990 vB->SetFillColor(vB->GetLineColor());
d5219d0d 1991 vB->SetFillStyle(4050); // 50% transparent
cee918ed 1992 vC = new TGeoVolume("ITSssdConeC",sC,medSSDfo); // Rohacell
1993 vC->SetVisibility(kTRUE);
1994 vC->SetLineColor(3); // green
1995 vC->SetLineWidth(1);
1996 vC->SetFillColor(vC->GetLineColor());
1997 vC->SetFillStyle(4050); // 50% transparent
1998 vF = new TGeoVolume("ITSssdConeF",sF,medSSDfo); // Rohacell;
1999 vF->SetVisibility(kTRUE);
2000 vF->SetLineColor(3); // green
2001 vF->SetLineWidth(1);
2002 vF->SetFillColor(vF->GetLineColor());
2003 vF->SetFillStyle(4050); // 50% transparent
2004 vD = new TGeoVolume("ITSssdConeD",sD,medSSDss);
2005 vD->SetVisibility(kTRUE);
2006 vD->SetLineColor(1); // black
2007 vD->SetLineWidth(1);
2008 vD->SetFillColor(vD->GetLineColor());
2009 vD->SetFillStyle(4000); // 0% transparent
2010 vE = new TGeoVolume("ITSssdConeE",sE,medSSDss);
2011 vE->SetVisibility(kTRUE);
2012 vE->SetLineColor(1); // black
2013 vE->SetLineWidth(1);
2014 vE->SetFillColor(vE->GetLineColor());
2015 vE->SetFillStyle(4000); // 0% transparent
2016 vQ = new TGeoVolume("ITSssdConeQ",sQ,medSSDss);
2017 vQ->SetVisibility(kTRUE);
2018 vQ->SetLineColor(1); // black
2019 vQ->SetLineWidth(1);
2020 vQ->SetFillColor(vQ->GetLineColor());
d5219d0d 2021 vQ->SetFillStyle(4000); // 0% transparent
cee918ed 2022 vR = new TGeoVolume("ITSssdConeR",sR,medSSDair);
2023 vR->SetVisibility(kTRUE);
2024 vR->SetLineColor(5); // yellow
2025 vR->SetLineWidth(1);
2026 vR->SetFillColor(vR->GetLineColor());
2027 vR->SetFillStyle(4090); // 90% transparent
2028 vS = new TGeoVolume("ITSssdConeS",sS,medSSDair);
2029 vS->SetVisibility(kTRUE);
2030 vS->SetLineColor(5); // yellow
2031 vS->SetLineWidth(1);
2032 vS->SetFillColor(vS->GetLineColor());
2033 vS->SetFillStyle(4090); // 90% transparent
2034 vT = new TGeoVolume("ITSssdsddMountingBracket",sT,medSSDal);
2035 vT->SetVisibility(kTRUE);
2036 vT->SetLineColor(5); // yellow
2037 vT->SetLineWidth(1);
2038 vT->SetFillColor(vT->GetLineColor());
2039 vT->SetFillStyle(4000); // 0% transparent
172b0d90 2040 //
2041 TGeoCombiTrans *rotran;
2042 TGeoTranslation *tran;
cee918ed 2043 tran = new TGeoTranslation("ITSssdConeTrans",0.0,0.0,-kconZDisplacement);
172b0d90 2044 TGeoRotation *rotY180 = new TGeoRotation("",0.0,180.0,0.0);
2045 TGeoCombiTrans *flip = new TGeoCombiTrans("ITSssdConeFlip",
cee918ed 2046 0.0,0.0,kconZDisplacement,rotY180);
543b7370 2047 //delete rotY180;// rot not explicity used in AddNode functions.
172b0d90 2048 //
2049 //
2050 //
2051 //
cee918ed 2052 vA->AddNode(vB,1,0);
2053 vB->AddNode(vC,1,0);
2054 vB->AddNode(vF,1,0);
2055 moth->AddNode(vA,1,tran); // RB24 side
2056 moth->AddNode(vA,2,flip); // RB26 side (Absorber)
172b0d90 2057 //
2058 //
2059 //
2060 // Insert Bolt and Pins in both the Cone and Cylinder at the same time.
cee918ed 2061 Int_t nCopyCDv=0,nCopyCEv=0,nCopyQv=0,nCopyvR=0,nCopySv=0,nCopyTv=0;
2062 Int_t nCopyvD=0,nCopyvE=0;
543b7370 2063 z = sCB->GetZ(0)+sCD->GetDz(); // sCB->GetZ(0)<0!
cee918ed 2064 dt = (360.0/((Double_t)kcylNPin));
2065 for(i=0;i<kcylNPin;i++){
172b0d90 2066 t = ((Double_t)i)*dt;
cee918ed 2067 x = kcylRholes*CosD(t+kcylPhi0Pin);
2068 y = kcylRholes*SinD(t+kcylPhi0Pin);
172b0d90 2069 tran = new TGeoTranslation("",x,y,z);
cee918ed 2070 vCB->AddNode(vCD,++nCopyCDv,tran);
172b0d90 2071 tran = new TGeoTranslation("",x,y,-z);
cee918ed 2072 vCB->AddNode(vCD,++nCopyCDv,tran);
172b0d90 2073 } // end for i
cee918ed 2074 dt = (360.0/((Double_t)kcylNM6));
2075 for(i=0;i<kcylNM6;i++){
172b0d90 2076 t = ((Double_t)i)*dt;
cee918ed 2077 x = kcylRholes*CosD(t+kcylPhi0M6);
2078 y = kcylRholes*SinD(t+kcylPhi0M6);
543b7370 2079 z = sCB->GetZ(0)+sCE->GetDz(); // sCB->GetZ()<0!
172b0d90 2080 tran = new TGeoTranslation("",x,y,z);
cee918ed 2081 vCB->AddNode(vCE,++nCopyCEv,tran);
172b0d90 2082 tran = new TGeoTranslation("",x,y,-z);
cee918ed 2083 vCB->AddNode(vCE,++nCopyCEv,tran);
172b0d90 2084 tran = new TGeoTranslation("",x,y,0.0);
cee918ed 2085 vB->AddNode(vQ,++nCopyQv,tran);
2086 if(!((t<rotranBrTZ60->GetRotation()->GetPhiRotation()+sT->GetPhi2()&&
2087 t>rotranBrTZ60->GetRotation()->GetPhiRotation()-sT->GetPhi1())||
2088 (t<rotranBrTZ180->GetRotation()->GetPhiRotation()+sT->GetPhi2()&&
2089 t>rotranBrTZ180->GetRotation()->GetPhiRotation()-sT->GetPhi1())||
2090 (t<rotranBrTZ300->GetRotation()->GetPhiRotation()+sT->GetPhi2()&&
2091 t>rotranBrTZ300->GetRotation()->GetPhiRotation()-sT->GetPhi1()))){
2092 // If not at an angle where the bracket sT is located.
2093 tran = new TGeoTranslation("",x,y,sB0->GetZ(10)-sR->GetDz());
2094 vB->AddNode(vR,++nCopyvR,tran);
2095 tran = new TGeoTranslation("",x,y,sA0->GetZ(10)-sS->GetDz());
2096 vA->AddNode(vS,++nCopySv,tran);
172b0d90 2097 } // end if
2098 } // end for i
2099 // Add the mounting brackets to the RB24 side only.
cee918ed 2100 vl[0] = 0.0;
2101 vl[1] = 0.0;
2102 vl[2] = sA0->GetZ(10)+kconZDisplacement-sT->GetDz();
172b0d90 2103 rotZ60->LocalToMaster(vl,vg);
2104 rotran = new TGeoCombiTrans("",vg[0],vg[1],vg[2],rotZ60);
cee918ed 2105 moth->AddNode(vT,++nCopyTv,rotran);
172b0d90 2106 rotZ180->LocalToMaster(vl,vg);
2107 rotran = new TGeoCombiTrans("",vg[0],vg[1],vg[2],rotZ180);
cee918ed 2108 moth->AddNode(vT,++nCopyTv,rotran);
172b0d90 2109 rotZ300->LocalToMaster(vl,vg);
2110 rotran = new TGeoCombiTrans("",vg[0],vg[1],vg[2],rotZ300);
cee918ed 2111 moth->AddNode(vT,++nCopyTv,rotran);
172b0d90 2112 //
2113 Double_t da[] = {-3.5,-1.5,1.5,3.5};
2114 for(i=0;i<2;i++){ // Mounting for ITS-TPC bracket or ITS-Rails
c023549c 2115 t0 = 180.*((Double_t)i);
cee918ed 2116 for(j=-kconNScrewM5by12/2;j<=kconNScrewM5by12/2;j++)if(j!=0){
172b0d90 2117 //screws per ITS-TPC brkt
c023549c 2118 t = t0 + 5.0*((Double_t)j);
cee918ed 2119 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2120 kconROutHoles*SinD(t),
543b7370 2121 sB0->GetZ(0)+sE->GetDz());
2122 vB->AddNode(vE,++nCopyvE,tran);
172b0d90 2123 } // end or j
cee918ed 2124 for(j=-kconNPinO6/2;j<=kconNPinO6/2;j++){ // pins per ITS-TPC bracket
c023549c 2125 t = t0 + 3.0*((Double_t)j);
cee918ed 2126 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2127 kconROutHoles*SinD(t),
2128 sB0->GetZ(0)+sD->GetDz());
543b7370 2129 vB->AddNode(vD,++nCopyvD,tran);
172b0d90 2130 } // end or j
543b7370 2131 t0 = (-5.5+191.*((Double_t)i));
cee918ed 2132 for(j=0;j<kconNRailScrews;j++){ // screws per ITS-rail bracket
c023549c 2133 t = t0+da[j];
cee918ed 2134 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2135 kconROutHoles*SinD(t),
543b7370 2136 sB0->GetZ(0)+sE->GetDz());
2137 vB->AddNode(vE,++nCopyvE,tran);
172b0d90 2138 } // end or j
543b7370 2139 t0 = (95.5+191.*((Double_t)i));
cee918ed 2140 for(j=-kconNRailPins/2;j<=kconNRailPins/2;j++)if(j!=0){
172b0d90 2141 // pins per ITS-rail bracket
543b7370 2142 t = t0+(5.5*((Double_t)j));
cee918ed 2143 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2144 kconROutHoles*SinD(t),
2145 sB0->GetZ(0)+sD->GetDz());
543b7370 2146 vB->AddNode(vD,++nCopyvD,tran);
172b0d90 2147 } // end or j
2148 } // end for i
cee918ed 2149 for(i=0;i<kconNmounts;i++){
172b0d90 2150 // mounting points for SPD-cone+Beam-pipe support
cee918ed 2151 t0 = (45.0+((Double_t)i)*360./((Double_t)kconNmounts));
172b0d90 2152 for(j=-1;j<=1;j++)if(j!=0){ // 2 screws per bracket
cee918ed 2153 t = t0+((Double_t)j)*0.5*kconMountPhi0;
2154 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2155 kconROutHoles*SinD(t),
2156 sB0->GetZ(0)+sD->GetDz());
2157 vB->AddNode(vD,++nCopyvD,tran);
172b0d90 2158 } // end for j
2159 for(j=0;j<1;j++){ // 1 pin per bracket
2160 t = t0;
cee918ed 2161 tran = new TGeoTranslation("",kconROutHoles*CosD(t),
2162 kconROutHoles*SinD(t),
2163 sB0->GetZ(0)+sD->GetDz());
2164 vB->AddNode(vE,++nCopyvE,tran);
172b0d90 2165 } // end for j
2166 } // end for i
543b7370 2167 if(GetDebug(1)){
cee918ed 2168 vA->PrintNodes();
2169 vB->PrintNodes();
2170 vC->PrintNodes();
2171 vD->PrintNodes();
2172 vE->PrintNodes();
2173 vF->PrintNodes();
2174 vQ->PrintNodes();
2175 vR->PrintNodes();
2176 vS->PrintNodes();
2177 vT->PrintNodes();
172b0d90 2178 } // end if
2179}
2180
2181//______________________________________________________________________
543b7370 2182void AliITSv11GeometrySupport::ServicesCableSupport(TGeoVolume *moth,
2183 TGeoManager *mgr){
172b0d90 2184 // Define the detail ITS cable support trays on both the RB24 and
2185 // RB26 sides..
2186 // Inputs:
543b7370 2187 // TGeoVolume *moth The mother volume to place this object.
2188 // TGeoManager *mgr A pointer to the Geo-Manager default gGeoManager
172b0d90 2189 // Outputs:
2190 // none.
2191 // Return:
2192 // none.
2193 // Based on the Drawings SSup_201A.jpg unless otherwise stated,
2194 // Volumes A...,
cee918ed 2195 TGeoMedium *medSUPcf = 0; // SUP support cone Carbon Fiber materal nbr.
2196 TGeoMedium *medSUPfs = 0; // SUP support cone inserto stesalite 4411w.
2197 TGeoMedium *medSUPfo = 0; // SUP support cone foam, Rohacell 50A.
2198 TGeoMedium *medSUPss = 0; // SUP support cone screw material,Stainless
2199 TGeoMedium *medSUPair = 0; // SUP support cone Air
2200 TGeoMedium *medSUPal = 0; // SUP support cone SDD mounting bracket Al
2201 TGeoMedium *medSUPwater = 0; // SUP support cone Water
cee918ed 2202 medSUPcf = mgr->GetMedium("ITSssdCarbonFiber");
2203 medSUPfs = mgr->GetMedium("ITSssdStaselite4411w");
2204 medSUPfo = mgr->GetMedium("ITSssdRohacell50A");
2205 medSUPss = mgr->GetMedium("ITSssdStainlessSteal");
2206 medSUPair = mgr->GetMedium("ITSssdAir");
2207 medSUPal = mgr->GetMedium("ITSssdAl");
2208 medSUPwater = mgr->GetMedium("ITSssdWater");
172b0d90 2209 //
543b7370 2210 Int_t i,j,iRmin;
db486a6e 2211 Double_t x,y,z,t,t0,dt,di,r,l,local[3],master[3];
2212 Char_t name[100];
2213 Double_t r1,r2,m;
2214 // RB 24, Open Side.
cee918ed 2215 const Double_t kfrm24Z0 = 900*fgkmm;//SSup_203A.jpg
2216 const Double_t kfrm24Thss = 5.0*fgkmm;
2217 const Double_t kfrm24Rss = 444.5*fgkmm-kfrm24Thss; //SSup_204A.jpg
2218 const Double_t kfrm24Width = 10.0*fgkmm;
2219 const Double_t kfrm24Hight = 10.0*fgkmm;
2220 const Double_t kfrm24Phi0 = 15.2*fgkDegree; // SSup_602A.jpg
2221 const Double_t kfrm24Phi1 = (90.0-7.6)*fgkDegree; // SSup_802A.jpg
2222 const Double_t kfrm24ZssSection = (415.0-10.0)*fgkmm;
2223 const Int_t kfrm24NZsections = 4;
2224 const Int_t kfrm24NPhiSections = 4;
2225 const Int_t kfrm24NPhi = 4;
db486a6e 2226 // These numbers are guessed at.
2227 const Double_t kfrm24ZfracAngle = 0.55; // frational z length to brack
2228 const Double_t kfrm24Angle = 10.0*fgkDegree; // Guessed at
2229 //
2230 TGeoTubeSeg *sA24[kfrm24NZsections+1];
2231 TGeoArb8 *sB24[kfrm24NZsections+1];
db486a6e 2232 Double_t zA24[kfrm24NZsections+1];
2233 l = 4.*kfrm24ZssSection+5*kfrm24Width;
543b7370 2234 j = iRmin = 0;
db486a6e 2235 for(i=0;i<kfrm24NZsections+1;i++){
2236 sprintf(name,"ITS sup Cable tray support frame radial section A24[%d]",
2237 i);
2238 r1 = kfrm24Rss;
2239 if(i==0) zA24[i] = kfrm24Width;
2240 else zA24[i] = zA24[i-1] + kfrm24ZssSection + kfrm24Width;
2241 if(zA24[i]>l*kfrm24ZfracAngle){ // break, radii get larger
2242 r1 = kfrm24Rss + (zA24[i]-kfrm24ZfracAngle*l)*SinD(kfrm24Angle);
2243 } // end if
2244 r2 = r1+kfrm24Thss;
2245 sA24[i] = new TGeoTubeSeg(name,r1,r2,0.5*kfrm24Width,kfrm24Phi0,
2246 kfrm24Phi1);
543b7370 2247 if(i>0)if(sA24[i-1]->GetRmin()==sA24[i]->GetRmin()) j = iRmin = i;
db486a6e 2248 } // end for i
2249 for(i=0;i<kfrm24NZsections;i++){
2250 sprintf(name,"ITS sup Cable tray support frame Z section B24[%d]",i);
2251 sB24[i] = new TGeoArb8(name,0.5*kfrm24ZssSection);
2252 sB24[i]->SetVertex(0,sA24[i]->GetRmin(),0.5*kfrm24Hight);
2253 sB24[i]->SetVertex(1,sA24[i]->GetRmax(),0.5*kfrm24Hight);
2254 sB24[i]->SetVertex(2,sA24[i]->GetRmin(),-0.5*kfrm24Hight);
2255 sB24[i]->SetVertex(3,sA24[i]->GetRmax(),-0.5*kfrm24Hight);
2256 sB24[i]->SetVertex(4,sA24[i+1]->GetRmin(),0.5*kfrm24Hight);
2257 sB24[i]->SetVertex(5,sA24[i+1]->GetRmax(),0.5*kfrm24Hight);
2258 sB24[i]->SetVertex(6,sA24[i+1]->GetRmin(),-0.5*kfrm24Hight);
2259 sB24[i]->SetVertex(7,sA24[i+1]->GetRmax(),-0.5*kfrm24Hight);
2260 } // end for i
543b7370 2261 if(GetDebug(1)){
db486a6e 2262 for(i=0;i<kfrm24NZsections+1;i++) sA24[i]->InspectShape();
2263 for(i=0;i<kfrm24NZsections;i++) sB24[i]->InspectShape();
543b7370 2264 } // end if GetDebug(1)
2265 TGeoVolume *vA24[kfrm24NZsections+1],*vB24[kfrm24NZsections];
2266 TGeoVolumeAssembly *vM24;
172b0d90 2267 TGeoTranslation *tran;
db486a6e 2268 TGeoRotation *rot,*rot1;
172b0d90 2269 TGeoCombiTrans *tranrot;
2270 //
db486a6e 2271 for(i=0;i<kfrm24NZsections+1;i++){
2272 vA24[i] = 0;
2273 sprintf(name,"ITSsupFrameA24[%d]",i);
2274 vA24[i] = new TGeoVolume(name,sA24[i],medSUPss);
2275 vA24[i]->SetVisibility(kTRUE);
2276 vA24[i]->SetLineColor(1); // black
2277 vA24[i]->SetLineWidth(1);
2278 vA24[i]->SetFillColor(vA24[i]->GetLineColor());
2279 vA24[i]->SetFillStyle(4000); // 0% transparent
2280 } // end for i
2281 for(i=0;i<kfrm24NZsections;i++){
2282 vB24[i] = 0;
2283 sprintf(name,"ITSsupFrameB24[%d]",i);
2284 vB24[i] = new TGeoVolume(name,sB24[i],medSUPss);
2285 vB24[i]->SetVisibility(kTRUE);
2286 vB24[i]->SetLineColor(1); // black
2287 vB24[i]->SetLineWidth(1);
2288 vB24[i]->SetFillColor(vB24[i]->GetLineColor());
2289 vB24[i]->SetFillStyle(4000); // 0% transparent
2290 } // end for i
543b7370 2291 vM24 = new TGeoVolumeAssembly("ITSsupFrameM24");
2292 //vM24->SetVisibility(kTRUE);
2293 //vM24->SetLineColor(7); // light blue
2294 //vM24->SetLineWidth(1);
2295 //vM24->SetFillColor(vM24->GetLineColor());
2296 //vM24->SetFillStyle(4090); // 90% transparent
cee918ed 2297 //
db486a6e 2298 Int_t ncopyB24[kfrm24NPhiSections];
cee918ed 2299 t0 = kfrm24Phi0;
2300 dt = (kfrm24Phi1-kfrm24Phi0)/((Double_t)kfrm24NPhiSections);
2301 for(i=0;i<=kfrm24NZsections;i++){
db486a6e 2302 z = zA24[i];
172b0d90 2303 tran = new TGeoTranslation("",0.0,0.0,z);
db486a6e 2304 vM24->AddNode(vA24[i],1,tran);
2305 if(i<kfrm24NZsections){
2306 ncopyB24[i] = 1;
2307 for(j=0;j<=kfrm24NPhiSections;j++){
2308 t = t0 + ((Double_t)j)*dt;
2309 rot = new TGeoRotation("",0.0,0.0,t);
2310 tranrot = new TGeoCombiTrans("",0.0,0.0,z+sB24[i]->GetDz(),rot);
543b7370 2311 //delete rot;// rot not explicity used in AddNode functions.
db486a6e 2312 vM24->AddNode(vB24[i],ncopyB24[i]++,tranrot);
2313 } // end for j
2314 } // end if
172b0d90 2315 } // end for i
db486a6e 2316 tran = new TGeoTranslation("",0.0,0.0,kfrm24Z0);
cee918ed 2317 moth->AddNode(vM24,1,tran);
2318 for(i=1;i<kfrm24NPhi;i++){
172b0d90 2319 di = (Double_t) i;
2320 rot = new TGeoRotation("",0.0,0.0,90.0*di);
db486a6e 2321 tranrot = new TGeoCombiTrans("",0.0,0.0,kfrm24Z0,rot);
543b7370 2322 //delete rot;// rot not explicity used in AddNode functions.
cee918ed 2323 moth->AddNode(vM24,i+1,tranrot);
172b0d90 2324 } // end for i
543b7370 2325 if(GetDebug(1)){
db486a6e 2326 for(i=0;i<kfrm24NZsections+1;i++) vA24[i]->PrintNodes();
2327 for(i=0;i<kfrm24NZsections;i++) vB24[i]->PrintNodes();
cee918ed 2328 vM24->PrintNodes();
172b0d90 2329 } // end if
db486a6e 2330 //==================================================================
2331 // RB24 Cable Tray
2332 const Double_t kct24WidthBottom = 44.0*fgkmm; // Serv-C_208.jpg
2333 const Double_t kct24WidthTop = 46.0*fgkmm; // Serv-C_208.jpg
2334 const Double_t kct24Hight = 51.0*fgkmm; // Serv-C_208.jpg
2335 const Double_t kct24AlThick = 1.0*fgkmm; // Serv-C_208.jpg
2336 const Double_t kct24CapWidth = 46.0*fgkmm; // Serv-C_208.jpg
2337 const Double_t kct24CapEar = 5.0*fgkmm; // Guess
2338 const Double_t kct24Rmin = 455.0*fgkmm; // Serv-C_203.jpg
2339 const Double_t kct24CoolSectionH = 470.0*fgkmm-kct24Rmin;// Serv-C_203.jpg
2340 const Double_t kct24CoolCableDivEar = 2.0*fgkmm; // Guess
2341 const Int_t kct24Ntrays = 48; // Serv-C_205.jpg
2342 //const Int_t kct24Ntubes = 3; // Serv-C_208.jpg
2343 // Patch Pannels for RB 24 side
2344 const Double_t kft24PPHightSPDFMD = 72.0*fgkmm; // Serv-C_SPD/FMD.jpg
2345 const Double_t kft24PPHightSDDSSD = 104.0*fgkmm; // Serv-C_SDD/SSD.jpg
2346 const Double_t kft24PPlength = 350.0*fgkmm;//Serv-C_SPD/SDD/SSD/FMD_1.jpg
2347 const Double_t kft24Theta = 2.0*TMath::ATan2(kct24WidthBottom,
2348 2.0*kct24Rmin)*fgkRadian; //
2349 const Int_t kft24NPatchPannels = 20; //
2350 //
2351 Double_t xp[12],yp[12];
2352 TGeoPcon *sMT24;
2353 TGeoXtru *sT24,*sTs24,*sTl24,*sTt24,*sU24,*sVl24,*sVs24,*sW24;
2354 TGeoXtru *s3PP24,*s2PP24,*sV3PP24,*sV2PP24;
2355 // Outer Tray Full
2356 sT24 = new TGeoXtru(3);
2357 sT24->SetName("ITS sup Full Cable Tray for RB24 Side T24");
2358 xp[0] = -0.5*kct24WidthBottom;
543b7370 2359 yp[0] = sA24[0]->GetRmax();
db486a6e 2360 yp[1] = yp[0] + kct24Hight-kct24CapEar;
2361 xp[1] = Xfrom2Points(xp[0],yp[0],-0.5*kct24WidthTop+kct24AlThick,
2362 yp[0]+kct24Hight,yp[1]);
2363 yp[2] = yp[1];
2364 xp[2] = xp[1]-kct24AlThick;
2365 xp[3] = -0.5*kct24CapWidth;
2366 yp[3] = yp[0] + kct24Hight;
2367 xp[4] = -xp[3];
2368 yp[4] = yp[3];
2369 xp[5] = -xp[2];
2370 yp[5] = yp[2];
2371 xp[6] = -xp[1];
2372 yp[6] = yp[1];
2373 xp[7] = -xp[0];
2374 yp[7] = yp[0];
2375 sT24->DefinePolygon(8,xp,yp);
543b7370 2376 sT24->DefineSection(0,zA24[0]-kfrm24Width,0.0,0.0,1.0);
2377 sT24->DefineSection(1,zA24[iRmin],0.0,0.0,1.0);
2378 sT24->DefineSection(2,zA24[kfrm24NZsections]+kfrm24Width,0.0,
2379 sA24[kfrm24NZsections]->GetRmax()-sA24[0]->GetRmin());
db486a6e 2380 // RB 24 full tray no divider (for ALG and T0-V0 cables?)
2381 sW24 = new TGeoXtru(3);
2382 sW24->SetName("ITS sup Cable Tray No Divider for RB24 Side W24");
2383 xp[0] = sT24->GetX(0) + kct24AlThick;
543b7370 2384 yp[0] = sT24->GetY(0) + kct24AlThick;
db486a6e 2385 yp[1] = sT24->GetY(3) - kct24AlThick;
2386 xp[1] = Xfrom2Points(sT24->GetX(0),sT24->GetY(0),sT24->GetX(1),
2387 sT24->GetY(1),yp[1]) + kct24AlThick;
2388 xp[2] = -xp[1];
2389 yp[2] = yp[1];
2390 xp[3] = -xp[0];
2391 yp[3] = yp[0];
2392 sW24->DefinePolygon(4,xp,yp);
2393 for(i=0;i<sT24->GetNz();i++){
2394 sW24->DefineSection(i,sT24->GetZ(i),sT24->GetXOffset(i),
2395 sT24->GetYOffset(i),sT24->GetScale(i));
2396 } // end for i
2397 // Outer Tray Short
2398 sTs24 = new TGeoXtru(3);
2399 sTs24->SetName("ITS sup Short Cable Tray for RB24 Side Ts24");
2400 yp[0] = sT24->GetY(0) + kct24CoolSectionH;
2401 xp[0] = Xfrom2Points(sT24->GetX(0),sT24->GetY(0),sT24->GetX(1),
2402 sT24->GetY(1),yp[0]);
2403 for(i=1;i<7;i++){
2404 xp[i] = sT24->GetX(i);
2405 yp[i] = sT24->GetY(i);
2406 } // end for i
2407 xp[7] = -xp[0];
2408 yp[7] = yp[0];
2409 sTs24->DefinePolygon(8,xp,yp);
543b7370 2410 sTs24->DefineSection(0,zA24[0] -kfrm24Width+kft24PPlength);
2411 sTs24->DefineSection(1,zA24[iRmin]);
2412 sTs24->DefineSection(2,zA24[kfrm24NZsections]+kfrm24Width,
2413 sT24->GetXOffset(2),
db486a6e 2414 sT24->GetYOffset(2),sT24->GetScale(2));
2415 // Outer Tray Long
2416 sTl24 = new TGeoXtru(3);
2417 sTl24->SetName("ITS sup Long Cable Tray for RB24 Side Tl24");
2418 for(i=0;i<8;i++){
2419 xp[i] = sTs24->GetX(i);
2420 yp[i] = sTs24->GetY(i);
2421 } // End for i
2422 sTl24->DefinePolygon(8,xp,yp);
543b7370 2423 sTl24->DefineSection(0,zA24[0]-kfrm24Width,0.0,0.0,1.0);
2424 sTl24->DefineSection(1,zA24[iRmin],0.0,0.0,1.0);
2425 sTl24->DefineSection(2,zA24[kfrm24NZsections]+kfrm24Width,0.0,
2426 sA24[kfrm24NZsections]->GetRmax()-sA24[0]->GetRmin(),1.0);
db486a6e 2427 // Outer Tray for air Tubes
2428 sTt24 = new TGeoXtru(3);
2429 sTt24->SetName("ITS sup Long Air Tube Tray for RB24 Side Tt24");
2430 xp[0] = sT24->GetX(0);
2431 yp[0] = sT24->GetY(0);
2432 xp[1] = sTl24->GetX(0);
2433 yp[1] = sTl24->GetY(0);
2434 xp[2] = -xp[1];
2435 yp[2] = yp[1];
2436 xp[3] = -xp[0];
543b7370 2437 yp[3] = yp[0];
db486a6e 2438 sTt24->DefinePolygon(4,xp,yp);
543b7370 2439 sTt24->DefineSection(0,zA24[0]-kfrm24Width,0.0,0.0,1.0);
2440 sTt24->DefineSection(1,zA24[iRmin],0.0,0.0,1.0);
2441 sTt24->DefineSection(2,zA24[kfrm24NZsections]+kfrm24Width,0.0,
2442 sA24[kfrm24NZsections]->GetRmax()-sA24[0]->GetRmin());
db486a6e 2443 // Inner opening for cooling (lower) {inside sTt24}
2444 sU24 = new TGeoXtru(3);
2445 sU24->SetName("ITS sup Cable Tray Cooling tube space RB24 Side U24");
2446 xp[0] = sTt24->GetX(0) + kct24AlThick;
2447 yp[0] = sTt24->GetY(0) + kct24AlThick;
2448 xp[1] = sTt24->GetX(1) + kct24AlThick;
2449 yp[1] = sTt24->GetY(1) - kct24AlThick;
2450 xp[2] = -xp[1];
2451 yp[2] = yp[1];
2452 xp[3] = -xp[0];
2453 yp[3] = yp[0];
2454 sU24->DefinePolygon(4,xp,yp);
2455 for(i=0;i<sTt24->GetNz();i++){
2456 sU24->DefineSection(i,sTt24->GetZ(i),sTt24->GetXOffset(i),
2457 sTt24->GetYOffset(i),sTt24->GetScale(i));
2458 } // end for i
2459 // Inner opening for cables (upper) {inside sTl24}
2460 sVl24 = new TGeoXtru(3);
2461 sVl24->SetName("ITS sup Cable Tray Cable space RB24 Side Vl24");
2462 xp[0] = sTl24->GetX(0)+2.0*kct24AlThick;
2463 yp[0] = sTl24->GetY(0);
2464 yp[1] = yp[0] + kct24CoolCableDivEar;
2465 xp[1] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),
2466 sTl24->GetX(1),sTl24->GetY(1),yp[1])+2.0*kct24AlThick;
2467 yp[2] = yp[1];
2468 xp[2] = xp[1] - kct24AlThick;
2469 yp[3] = sTl24->GetY(3) - kct24AlThick;
2470 xp[3] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),sTl24->GetX(1),
2471 sTl24->GetY(1),yp[3]) + kct24AlThick;
2472 xp[4] = -xp[3];
2473 yp[4] = yp[3];
2474 xp[5] = -xp[2];
2475 yp[5] = yp[2];
2476 xp[6] = -xp[1];
2477 yp[6] = yp[1];
2478 xp[7] = -xp[0];
2479 yp[7] = yp[0];
2480 sVl24->DefinePolygon(8,xp,yp);
2481 for(i=0;i<sTl24->GetNz();i++){
2482 sVl24->DefineSection(i,sTl24->GetZ(i),sTl24->GetXOffset(i),
2483 sTl24->GetYOffset(i),sTl24->GetScale(i));
2484 } // end for i
2485 // Inner opening for cables (upper) {inside sTs24}
2486 sVs24 = new TGeoXtru(3);
2487 sVs24->SetName("ITS sup Cable Tray Cable space RB24 Side Vs24");
2488 sVs24->DefinePolygon(8,xp,yp);
2489 for(i=0;i<8;i++){
2490 xp[i] = sVl24->GetX(i);
2491 yp[i] = sVl24->GetY(i);
2492 } // end for i
2493 for(i=0;i<sTl24->GetNz();i++){
2494 sVs24->DefineSection(i,sTs24->GetZ(i),sTs24->GetXOffset(i),
2495 sTs24->GetYOffset(i),sTs24->GetScale(i));
2496 } // end for i
2497 //------------------------------------------------------------------
2498 // Patch Pannels on RB 24 Side
2499 rot = new TGeoRotation("",0.0,0.0,-kft24Theta); // Gets Used later as well
2500 rot1 = new TGeoRotation("",0.0,0.0,kft24Theta); // Gets Used later as well
2501 s3PP24 = new TGeoXtru(2);
2502 s3PP24->SetName("ITS sup 3 bay pach pannel RB24 side 3PP24");
2503 yp[5] = sT24->GetY(7) + kct24CoolSectionH;
2504 xp[5] = Xfrom2Points(sT24->GetX(7),sT24->GetY(7),sT24->GetX(6),
2505 sT24->GetY(6),yp[6]);
2506 yp[6] = sT24->GetY(0) + kct24CoolSectionH;
2507 xp[6] = Xfrom2Points(sT24->GetX(0),sT24->GetY(0),sT24->GetX(1),
2508 sT24->GetY(1),yp[9]);
2509 local[0] = xp[6]; local[1] = yp[6]; local[2] = 0.0;
2510 rot1->LocalToMaster(local,master);
2511 xp[0] = master[0];
2512 yp[0] = master[1];
2513 local[0] = xp[6]; local[1] = yp[6] + kft24PPHightSDDSSD; local[2] = 0.0;
2514 rot1->LocalToMaster(local,master);
2515 xp[1] = master[0];
2516 yp[1] = master[1];
2517 xp[2] = -xp[1];
2518 yp[2] = yp[1];
2519 xp[3] = -xp[0];
2520 yp[3] = yp[0];
2521 local[0] = xp[6]; local[1] = yp[6]; local[2] = 0.0;
2522 rot1->MasterToLocal(local,master);
2523 xp[4] = master[0];
2524 yp[4] = master[1];
2525 local[0] = xp[5]; local[1] = yp[5]; local[2] = 0.0;
2526 rot1->LocalToMaster(local,master);
2527 xp[7] = master[0];
2528 yp[7] = master[1];
2529 s3PP24->DefinePolygon(8,xp,yp);
2530 s3PP24->DefineSection(0,0.0);
2531 s3PP24->DefineSection(1,kft24PPlength);
2532 //
2533 s2PP24 = new TGeoXtru(2);
2534 s2PP24->SetName("ITS sup 2 bay pach pannel RB24 side 2PP24");
2535 local[1] = sTl24->GetY(3); local[2] = 0.0;
2536 local[0] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),
2537 sTl24->GetX(1),sTl24->GetY(1),local[1]);
2538 rot1->LocalToMaster(local,master);
2539 xp[0] = master[0];
2540 yp[0] = master[1];
2541 local[1] = sTl24->GetY(3) + kft24PPHightSPDFMD; local[2] = 0.0;
2542 local[0] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),
2543 sTl24->GetX(1),sTl24->GetY(1),local[1]);
2544 rot1->LocalToMaster(local,master);
2545 xp[1] = master[0];
2546 yp[1] = master[1];
2547 yp[2] = sTl24->GetY(4) + kft24PPHightSPDFMD;
2548 xp[2] = Xfrom2Points(sTl24->GetX(6),sTl24->GetY(6),
2549 sTl24->GetX(7),sTl24->GetY(7),yp[2]);
2550 yp[3] = sTl24->GetY(7);
2551 xp[3] = Xfrom2Points(sTl24->GetX(6),sTl24->GetY(6),
2552 sTl24->GetX(7),sTl24->GetY(7),yp[3]);
2553 xp[4] = sTl24->GetX(3);
2554 yp[4] = sTl24->GetY(3);
2555 local[0] = sTl24->GetX(4);local[1] = sTl24->GetY(4); local[2] = 0.0;
2556 rot1->LocalToMaster(local,master);
2557 xp[5] = master[0];
2558 yp[5] = master[1];
2559 s2PP24->DefinePolygon(6,xp,yp);
2560 s2PP24->DefineSection(0,0.0);
2561 s2PP24->DefineSection(1,kft24PPlength);
2562 //
2563 sV3PP24 = new TGeoXtru(2);
2564 sV3PP24->SetName("ITS sup Patch Pannel 3 Bay inside Rb24 side V3PP24");
2565 xp[0] = s3PP24->GetX(0) + kct24AlThick;
543b7370 2566 yp[0] = s3PP24->GetY(0) + kct24AlThick;
db486a6e 2567 local[1] = s3PP24->GetY(6) + kft24PPHightSDDSSD - kct24AlThick;local[2]=0.;
2568 local[0] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),
2569 sTl24->GetX(1),sTl24->GetY(1),local[1]);
2570 rot1->LocalToMaster(local,master);
2571 xp[1] = master[0];
2572 yp[1] = master[1];
2573 xp[2] = -xp[1];
2574 yp[2] = yp[1];
2575 xp[3] = -xp[0];
2576 yp[3] = yp[0];
2577 xp[4] = s3PP24->GetX(4);
2578 yp[4] = s3PP24->GetY(4);
2579 xp[5] = s3PP24->GetX(5);
2580 yp[5] = s3PP24->GetY(5);
2581 xp[6] = s3PP24->GetX(6);
2582 yp[6] = s3PP24->GetY(6);
2583 xp[7] = s3PP24->GetX(7);
2584 yp[7] = s3PP24->GetY(7);
2585 sV3PP24->DefinePolygon(8,xp,yp);
2586 sV3PP24->DefineSection(0,s3PP24->GetZ(0),s3PP24->GetXOffset(0),
2587 s3PP24->GetYOffset(0),s3PP24->GetScale(0));
2588 sV3PP24->DefineSection(1,s3PP24->GetZ(1),s3PP24->GetXOffset(1),
2589 s3PP24->GetYOffset(1),s3PP24->GetScale(1));
2590 //
2591 sV2PP24 = new TGeoXtru(2);
2592 sV2PP24->SetName("ITS sup Patch Pannel 2 Bay inside Rb24 side V2PP24");
2593 xp[0] = s2PP24->GetX(0) + kct24AlThick;
543b7370 2594 yp[0] = s2PP24->GetY(0) + kct24AlThick;
db486a6e 2595 local[1] = sTl24->GetY(3) + kft24PPHightSPDFMD - kct24AlThick;local[2]=0.;
2596 local[0] = Xfrom2Points(sTl24->GetX(0),sTl24->GetY(0),
2597 sTl24->GetX(1),sTl24->GetY(1),local[1]);
2598 rot1->LocalToMaster(local,master);
2599 xp[1] = master[0];
2600 yp[1] = master[1];
2601 yp[2] = sTl24->GetY(4) + kft24PPHightSPDFMD - kct24AlThick;
2602 xp[2] = Xfrom2Points(sTl24->GetX(6),sTl24->GetY(6),
2603 sTl24->GetX(7),sTl24->GetY(7),yp[2]);
2604 yp[3] = sTl24->GetY(4);
2605 xp[3] = Xfrom2Points(sTl24->GetX(6),sTl24->GetY(6),
2606 sTl24->GetX(7),sTl24->GetY(7),yp[3]);;
2607 xp[4] = s2PP24->GetX(4);
2608 yp[4] = s2PP24->GetY(4);
2609 xp[5] = s2PP24->GetX(5);
2610 yp[5] = s2PP24->GetY(5);
2611 sV2PP24->DefinePolygon(6,xp,yp);
2612 sV2PP24->DefineSection(0,s2PP24->GetZ(0),s2PP24->GetXOffset(0),
2613 s2PP24->GetYOffset(0),s2PP24->GetScale(0));
2614 sV2PP24->DefineSection(1,s2PP24->GetZ(1),s2PP24->GetXOffset(1),
2615 s2PP24->GetYOffset(1),s2PP24->GetScale(1));
2616 // RB 24 Tray Mother Volume
2617 sMT24 = new TGeoPcon("ITS sup Cable Tray Mother Volume RB24 MT24",
2618 0.0,360.0,5);
2619 sMT24->Z(0) = 0.0;
543b7370 2620 sMT24->Rmin(0) = sA24[0]->GetRmax();
db486a6e 2621 sMT24->Rmax(0) = TMath::Max(TMath::Hypot(s3PP24->GetX(1),s3PP24->GetY(1)),
2622 TMath::Hypot(s2PP24->GetX(1),s2PP24->GetY(1)));
2623
2624 sMT24->Z(1) = sMT24->GetZ(0) + kft24PPlength;
2625 sMT24->Rmin(1) = sMT24->GetRmin(0);
2626 sMT24->Rmax(1) = sMT24->GetRmax(0);
2627 sMT24->Z(2) = sMT24->GetZ(1);
2628 sMT24->Rmin(2) = sMT24->GetRmin(0);
2629 sMT24->Rmax(2) = sMT24->GetRmax(0) - kft24PPHightSPDFMD;
2630
543b7370 2631 sMT24->Z(3) = sMT24->GetZ(0) + zA24[iRmin] - zA24[0] -kfrm24Width;
2632 sMT24->Rmin(3) = sA24[iRmin]->GetRmin();
db486a6e 2633 sMT24->Rmax(3) = TMath::Hypot(sT24->GetX(3),sT24->GetY(3));
543b7370 2634 sMT24->Z(4) = sMT24->GetZ(0) + zA24[kfrm24NZsections] + kfrm24Width -
2635 zA24[0] -kfrm24Width;
2636 sMT24->Rmin(4) = sA24[kfrm24NZsections]->GetRmax();
db486a6e 2637 sMT24->Rmax(4) = TMath::Hypot(sT24->GetX(3)+sT24->GetXOffset(2),
2638 sT24->GetY(3)+sT24->GetYOffset(2));
2639 //
543b7370 2640 if(GetDebug(1)){
db486a6e 2641 sT24->InspectShape();
2642 sW24->InspectShape();
2643 sTl24->InspectShape();
2644 sTs24->InspectShape();
2645 sTt24->InspectShape();
2646 sU24->InspectShape();
2647 sVl24->InspectShape();
2648 sVs24->InspectShape();
2649 s3PP24->InspectShape();
2650 s2PP24->InspectShape();
2651 sV3PP24->InspectShape();
2652 sV2PP24->InspectShape();
2653 sMT24->InspectShape();
543b7370 2654 } // end if GetDebug(1)
db486a6e 2655 //
2656 TGeoVolume *vC24[kct24Ntrays],*vT24[kct24Ntrays],*vPP24[kft24NPatchPannels];
543b7370 2657 TGeoVolume *vWTV024,*vW24,*vU24,*vUFMD24,*vVl24,*vVlFMD24,*vVs24;
db486a6e 2658 TGeoVolume *vV3PP24,*vV2PP24,*vV2PPFMD24;
543b7370 2659 TGeoVolumeAssembly *vMT24;
2660 vMT24 = new TGeoVolumeAssembly("ITSsupCableTrayMotherMT24");
2661 //vMT24->SetVisibility(kTRUE);
2662 //vMT24->SetLineColor(8); // white
2663 //vMT24->SetLineWidth(1);
2664 //vMT24->SetFillColor(vMT24->GetLineColor());
2665 //vMT24->SetFillStyle(4100); // 100% transparent
db486a6e 2666 //
2667 vU24 = new TGeoVolume("ITSsupCableTrayLowerU24",sU24,medSUPair);
2668 vU24->SetVisibility(kTRUE);
2669 vU24->SetLineColor(7); // light blue
2670 vU24->SetLineWidth(1);
2671 vU24->SetFillColor(vU24->GetLineColor());
2672 vU24->SetFillStyle(4090); // 90% transparent
2673 vUFMD24 = new TGeoVolume("FMDsupCableTrayLowerU24",sU24,medSUPair);
2674 vUFMD24->SetVisibility(kTRUE);
2675 vUFMD24->SetLineColor(7); // light blue
2676 vUFMD24->SetLineWidth(1);
2677 vUFMD24->SetFillColor(vUFMD24->GetLineColor());
2678 vUFMD24->SetFillStyle(4090); // 90% transparent
2679 vVl24 = new TGeoVolume("ITSsupCableTrayUpperV24",sVl24,medSUPair);
2680 vVl24->SetVisibility(kTRUE);
2681 vVl24->SetLineColor(7); // light blue
2682 vVl24->SetLineWidth(1);
2683 vVl24->SetFillColor(vVl24->GetLineColor());
2684 vVl24->SetFillStyle(4090); // 90% transparent
2685 vVlFMD24 = new TGeoVolume("FMDsupCableTrayUpperVl24",sVl24,medSUPair);
2686 vVlFMD24->SetVisibility(kTRUE);
2687 vVlFMD24->SetLineColor(7); // light blue
2688 vVlFMD24->SetLineWidth(1);
2689 vVlFMD24->SetFillColor(vVlFMD24->GetLineColor());
2690 vVlFMD24->SetFillStyle(4090); // 90% transparent
2691 vVs24 = new TGeoVolume("ITSsupCableTrayUpperVs24",sVs24,medSUPair);
2692 vVs24->SetVisibility(kTRUE);
2693 vVs24->SetLineColor(7); // light blue
2694 vVs24->SetLineWidth(1);
2695 vVs24->SetFillColor(vVs24->GetLineColor());
2696 vVs24->SetFillStyle(4090); // 90% transparent
2697 vW24 = new TGeoVolume("ITSsupCableTrayUpperW24",sW24,medSUPair);
2698 vW24->SetVisibility(kTRUE);
2699 vW24->SetLineColor(7); // light blue
2700 vW24->SetLineWidth(1);
2701 vW24->SetFillColor(vW24->GetLineColor());
2702 vW24->SetFillStyle(4090); // 90% transparent
2703 //
2704 vWTV024 = new TGeoVolume("V0supCableTrayUpperWTV024",sW24,medSUPair);
2705 vWTV024->SetVisibility(kTRUE);
2706 vWTV024->SetLineColor(7); // light blue
2707 vWTV024->SetLineWidth(1);
2708 vWTV024->SetFillColor(vWTV024->GetLineColor());
2709 vWTV024->SetFillStyle(4090); // 90% transparent
2710 //
2711 vV3PP24 = new TGeoVolume("ITSsup3BayPachPannelInsideV3PP24",sV3PP24,medSUPair);
2712 vV3PP24->SetVisibility(kTRUE);
2713 vV3PP24->SetLineColor(8); // white
2714 vV3PP24->SetLineWidth(1);
2715 vV3PP24->SetFillColor(vV3PP24->GetLineColor());
2716 vV3PP24->SetFillStyle(4100); // 100% transparent
2717 vV2PP24 = new TGeoVolume("ITSsup2BayPachPannelInsideV2PP24",sV2PP24,medSUPair);
2718 vV2PP24->SetVisibility(kTRUE);
2719 vV2PP24->SetLineColor(8); // white
2720 vV2PP24->SetLineWidth(1);
2721 vV2PP24->SetFillColor(vV2PP24->GetLineColor());
2722 vV2PP24->SetFillStyle(4100); // 100% transparent
2723 vV2PPFMD24 = new TGeoVolume("FMDsup2BayPachPannelInsideV2PP24",sV2PP24,medSUPair);
2724 vV2PPFMD24->SetVisibility(kTRUE);
2725 vV2PPFMD24->SetLineColor(8); // white
2726 vV2PPFMD24->SetLineWidth(1);
2727 vV2PPFMD24->SetFillColor(vV2PPFMD24->GetLineColor());
2728 vV2PPFMD24->SetFillStyle(4100); // 100% transparent
2729 //
543b7370 2730 //delete rot;
2731 //delete rot1;
db486a6e 2732 //
2733 Double_t tha[kct24Ntrays],thb[kft24NPatchPannels];
2734 for(i=0;i<kct24Ntrays/4;i++) {
2735 if(i==0) tha[0] = 17.0+0.5*kft24Theta;
2736 else tha[i] = tha[i-1] + kft24Theta;
2737 tha[i+ kct24Ntrays/4] = 90.0 + tha[i];
2738 tha[i+ kct24Ntrays/2] = 180.0 + tha[i];
2739 tha[i+3*kct24Ntrays/4] = 270.0 + tha[i];
2740 } // end for i
543b7370 2741 if(GetDebug(1)) for(i=0;i<kct24Ntrays;i++) Info("ServicesCableSupport",
db486a6e 2742 "tha[%d]=%f",i,tha[i]);
2743 Char_t *airName[kct24Ntrays]={"FMD0","SDD0","SSD0","SSD1","SPD0","SPD1",
2744 "TV00","SDD1","SDD2","SPD2","SPD3","ALG0",
2745 "SPD4","SPD5","SSD2","SSD3","SPD6","SPD7",
2746 "TV01","SDD3","SDD4","SPD8","SPD9","ALG1",
2747 "FMD1","SDD5","SSD4","SSD5","SPDA","SPDB",
2748 "TV02","SDD6","SDD7","SPDC","SPDD","ALG2",
2749 "SPDE","SPDF","SSD6","SSD7","SPDG","SPDH",
2750 "TV03","SDD8","SDD9","SPDI","SPDJ","ALG3"};
2751 Char_t *trayName[kct24Ntrays]={"FMD0","SSD0","SSD1","SSD2","SSD3","SPD0",
2752 "TV00","SDD0","SDD1","SDD2","SPD1","ALG0",
2753 "SPD2","SSD4","SSD5","SSD6","SSD7","SPD3",
2754 "TV01","SDD3","SDD4","SDD5","SPD4","ALG1",
2755 "FMD1","SSD8","SSD9","SSDA","SSDB","SPD5",
2756 "TV02","SDD6","SDD7","SDD8","SPD6","ALG2",
2757 "SPD7","SSDC","SSDD","SSDE","SSDF","SPD8",
2758 "TV03","SDD9","SDDA","SDDB","SPD9","ALG3"};
2759 //
2760 //Int_t ncopyW24=1,ncopyU24=1,ncopyV24=1;
2761 j = 0;
2762 for(i=0;i<kct24Ntrays;i++){
2763 if(strncmp(trayName[i],"FMD",3)==0){
2764 sprintf(name,"FMDsupCableTrayT24[%s]",trayName[i]);
2765 vT24[i] = new TGeoVolume(name,sTl24,medSUPal);
2766 vT24[i]->AddNode(vVlFMD24,1,0);
2767 }else if(strncmp(trayName[i],"TV0",3)==0){
2768 sprintf(name,"V0supCableTrayT24[%s]",trayName[i]);
2769 vT24[i] = new TGeoVolume(name,sT24,medSUPal);
2770 vT24[i]->AddNode(vWTV024,1,0);
2771 }else if(strncmp(trayName[i],"ALG",3)==0){ // ITS Alignment Channel
2772 sprintf(name,"ITSsupCableTrayT24[%s]",trayName[i]);
2773 vT24[i] = new TGeoVolume(name,sT24,medSUPal);
2774 vT24[i]->AddNode(vW24,1,0);
2775 }else if(strncmp(trayName[i],"SPD",3)==0){ /*ITS SPD*/
2776 sprintf(name,"ITSsupCableTrayT24[%s]",trayName[i]);
2777 vT24[i] = new TGeoVolume(name,sTl24,medSUPal);
2778 vT24[i]->AddNode(vVl24,1,0);
2779 }else { /*ITS*/
2780 sprintf(name,"ITSsupCableTrayT24[%s]",trayName[i]);
2781 vT24[i] = new TGeoVolume(name,sTs24,medSUPal); /// replace solid
2782 vT24[i]->AddNode(vVs24,1,0);
2783 } // end if
2784 vT24[i]->SetVisibility(kTRUE);
2785 vT24[i]->SetLineColor(6); // purple
2786 vT24[i]->SetLineWidth(1);
2787 vT24[i]->SetFillColor(vT24[i]->GetLineColor());
2788 vT24[i]->SetFillStyle(4000); // 0% transparent
2789 rot = new TGeoRotation("",0.0,0.0,tha[i]-90.0);
543b7370 2790 if(GetDebug(1)) rot->Print();
db486a6e 2791 vMT24->AddNode(vT24[i],1,rot);
2792 //
2793 if(strncmp(trayName[i],"FMD",3)==0){
2794 sprintf(name,"FMDsupAirTubeTrayT24[%s]",airName[i]);
2795 vC24[j] = new TGeoVolume(name,sTt24,medSUPair);
2796 vC24[j]->AddNode(vUFMD24,1,0);
2797 }else if(strncmp(trayName[i],"TV0",3)==0){
2798 continue;
2799 }else if(strncmp(trayName[i],"ALG",3)==0){
2800 continue;
2801 }else{ /*ITS*/
2802 sprintf(name,"ITSsupAirTubTrayT24[%s]",airName[i]);
2803 vC24[j] = new TGeoVolume(name,sTt24,medSUPair);
2804 vC24[j]->AddNode(vU24,1,0);
2805 } // end if
2806 vC24[j]->SetVisibility(kTRUE);
2807 vC24[j]->SetLineColor(6); // purple
2808 vC24[j]->SetLineWidth(1);
2809 vC24[j]->SetFillColor(vC24[j]->GetLineColor());
2810 vC24[j]->SetFillStyle(4000); // 0% transparent
2811 vMT24->AddNode(vC24[j++],1,rot);
2812 } // end for i
2813 for(i=0;i<kft24NPatchPannels/4;i++) {
2814 if(i==0) thb[0] = 17.0+0.5*kft24Theta;
2815 else{
2816 if(i%2) thb[i] = thb[i-1] + 3.0*kft24Theta;
2817 else thb[i] = thb[i-1] + 2.0*kft24Theta;
2818 } // end if-else
2819 thb[i+ kft24NPatchPannels/4] = 90.0 + thb[i];
2820 thb[i+ kft24NPatchPannels/2] = 180.0 + thb[i];
2821 thb[i+3*kft24NPatchPannels/4] = 270.0 + thb[i];
2822 } // end for i
2823 Char_t *pachName[kft24NPatchPannels]={"FMD0","SSD0","SPD0","SDD0","SPD1",
2824 "SPD2","SSD1","SPD3","SDD1","SPD4",
2825 "FMD1","SSD2","SPD5","SDD2","SPD6",
2826 "SPD7","SSD3","SPD8","SDD3","SPD9"};
2827 for(i=0;i<kft24NPatchPannels;i++){
2828 if(strncmp(pachName[i],"FMD",3)==0){
2829 sprintf(name,"FMDsupPatchPannelPP24[%s]",pachName[i]);
2830 vPP24[i] = new TGeoVolume(name,s2PP24,medSUPal);
2831 vPP24[i]->AddNode(vV2PPFMD24,1,0);
2832 }else if(strncmp(pachName[i],"SPD",3)==0){ /*ITS SPD*/
2833 sprintf(name,"ITSsupPathcPannelPP24[%s]",pachName[i]);
2834 vPP24[i] = new TGeoVolume(name,s2PP24,medSUPal);
2835 vPP24[i]->AddNode(vV2PP24,1,0);
2836 }else { /*ITS*/
2837 sprintf(name,"ITSsupPathcPannelPP24[%s]",pachName[i]);
2838 vPP24[i] = new TGeoVolume(name,s3PP24,medSUPal); /// replace solid
2839 vPP24[i]->AddNode(vV3PP24,1,0);
2840 } // end if
2841 vPP24[i]->SetVisibility(kTRUE);
2842 vPP24[i]->SetLineColor(6); // purple
2843 vPP24[i]->SetLineWidth(1);
2844 vPP24[i]->SetFillColor(vPP24[i]->GetLineColor());
2845 vPP24[i]->SetFillStyle(4000); // 0% transparent
2846 rot = new TGeoRotation("",0.0,0.0,thb[i]-90.0);
543b7370 2847 if(GetDebug(1)) rot->Print();
db486a6e 2848 vMT24->AddNode(vPP24[i],1,rot);
2849 } // end for i
2850 tran = new TGeoTranslation("",0.0,0.0,kfrm24Z0);
2851 moth->AddNode(vMT24,1,tran);
543b7370 2852 if(GetDebug(1)){
db486a6e 2853 for(i=0;i<kct24Ntrays;i++) vT24[i]->PrintNodes();
2854 for(i=0;i<kct24Ntrays-8;i++) vC24[i]->PrintNodes();
2855 vU24->PrintNodes();
2856 vUFMD24->PrintNodes();
2857 vVl24->PrintNodes();
2858 vVlFMD24->PrintNodes();
2859 vVs24->PrintNodes();
2860 vW24->PrintNodes();
2861 vWTV024->PrintNodes();
2862 vMT24->PrintNodes();
2863 } // end if
172b0d90 2864 //==================================================================
2865 //
db486a6e 2866 // RB 26, Muon Absober side
cee918ed 2867 const Double_t kfrm26Z0 = -900*fgkmm;//SSup_203A.jpg
2868 const Double_t kfrm26Thss = 5.0*fgkmm;
2869 const Double_t kfrm26R0ss = 444.5*fgkmm-kfrm26Thss; //SSup_204A.jpg
2870 const Double_t kfrm26R1ss = 601.6*fgkmm-kfrm26Thss; //SSup_208A.jpg
2871 const Double_t kfrm26Width = 10.0*fgkmm;
2872 //const Double_t kfrm26Hight = 10.0*fgkmm;
2873 const Double_t kfrm26Phi0 = 15.2*fgkDegree; // SSup_602A.jpg
2874 const Double_t kfrm26Phi1 = (90.0-7.6)*fgkDegree; // SSup_802A.jpg
2875 const Double_t kfrm26ZssSection = (415.0-10.0)*fgkmm;
2876 const Int_t kfrm26NZsections = 4;
2877 const Int_t kfrm26NPhiSections = 4;
2878 const Int_t kfrm26NPhi = 4;
543b7370 2879 TGeoConeSeg *sA26[kfrm26NZsections+1];//,*sM26;//Cylinderial support structure
cee918ed 2880 TGeoArb8 *sB26; // Cylinderial support structure
543b7370 2881 /*
cee918ed 2882 sM26 = new TGeoConeSeg("ITS sup Cable tray support frame mother volume "
2883 "M26",0.5*(4.*kfrm26ZssSection+5*kfrm26Width),
2884 kfrm26R1ss,kfrm26R1ss+kfrm26Thss,
2885 kfrm26R0ss,kfrm26R0ss+kfrm26Thss,
2886 kfrm26Phi0,kfrm26Phi1);
543b7370 2887 */
cee918ed 2888 m = -((kfrm26R1ss-kfrm26R0ss)/
2889 (((Double_t)kfrm26NZsections)*(kfrm26ZssSection+kfrm26Width)));
2890 for(i=0;i<kfrm26NZsections+1;i++){
2891 di = ((Double_t) i)*(kfrm26ZssSection+kfrm26Width);
172b0d90 2892 sprintf(name,
2893 "ITS sup Cable tray support frame radial section A26[%d]",i);
cee918ed 2894 r1 = kfrm26R1ss+m*di;
2895 r2 = kfrm26R1ss+m*(di+kfrm26Width);
2896 sA26[i] = new TGeoConeSeg(name,0.5*kfrm26Width,r2,r2+kfrm26Thss,
2897 r1,r1+kfrm26Thss,kfrm26Phi0,kfrm26Phi1);
172b0d90 2898 } // end for i
cee918ed 2899 sB26 = new TGeoArb8("ITS sup Cable tray support frame Z section B26",
2900 0.5*kfrm26ZssSection);
2901 r = 0.25*(sA26[0]->GetRmax1()+sA26[0]->GetRmin1()+
2902 sA26[1]->GetRmax2()+sA26[1]->GetRmin2());
2903 sB26->SetVertex(0,sA26[0]->GetRmax2()-r,+0.5*kfrm26Width);
2904 sB26->SetVertex(1,sA26[0]->GetRmax2()-r,-0.5*kfrm26Width);
2905 sB26->SetVertex(2,sA26[0]->GetRmin2()-r,-0.5*kfrm26Width);
2906 sB26->SetVertex(3,sA26[0]->GetRmin2()-r,+0.5*kfrm26Width);
2907 sB26->SetVertex(4,sA26[1]->GetRmax1()-r,+0.5*kfrm26Width);
2908 sB26->SetVertex(5,sA26[1]->GetRmax1()-r,-0.5*kfrm26Width);
2909 sB26->SetVertex(6,sA26[1]->GetRmin1()-r,-0.5*kfrm26Width);
2910 sB26->SetVertex(7,sA26[1]->GetRmin1()-r,+0.5*kfrm26Width);
543b7370 2911 if(GetDebug(1)){
d5219d0d 2912 for(i=0;i<kfrm26NZsections+1;i++) sA26[i]->InspectShape();
543b7370 2913 //sM26->InspectShape();
d5219d0d 2914 sB26->InspectShape();
543b7370 2915 } // end if GetDebug(1)
d5219d0d 2916 //
543b7370 2917 TGeoVolume *vA26[kfrm26NZsections+1],*vB26;
2918 TGeoVolumeAssembly *vM26;
cee918ed 2919 //
2920 for(i=0;i<kfrm26NZsections+1;i++){
172b0d90 2921 sprintf(name,"ITSsupFrameA26[%d]",i);
cee918ed 2922 vA26[i] = new TGeoVolume(name,sA26[i],medSUPss);
2923 vA26[i]->SetVisibility(kTRUE);
2924 vA26[i]->SetLineColor(1); // black
2925 vA26[i]->SetLineWidth(1);
2926 vA26[i]->SetFillColor(vA26[i]->GetLineColor());
2927 vA26[i]->SetFillStyle(4000); // 0% transparent
172b0d90 2928 } // end for i
cee918ed 2929 vB26 = new TGeoVolume("ITSsupFrameB26",sB26,medSUPss);
2930 vB26->SetVisibility(kTRUE);
2931 vB26->SetLineColor(1); // black
2932 vB26->SetLineWidth(1);
2933 vB26->SetFillColor(vB26->GetLineColor());
2934 vB26->SetFillStyle(4000); // 0% transparent
543b7370 2935 vM26 = new TGeoVolumeAssembly("ITSsupFrameM26");
2936 //vM26 = new TGeoVolume("ITSsupFrameM26",sM26,medSUPair);
2937 //vM26->SetVisibility(kTRUE);
2938 //vM26->SetLineColor(7); // light blue
2939 //vM26->SetLineWidth(1);
2940 //vM26->SetFillColor(vM26->GetLineColor());
2941 //vM26->SetFillStyle(4090); // 90% transparent
cee918ed 2942 //
2943 Int_t ncopyB26=1;
2944 t0 = kfrm26Phi0;
2945 dt = (kfrm26Phi1-kfrm26Phi0)/((Double_t)kfrm26NPhiSections);
2946 for(i=0;i<=kfrm26NZsections;i++){
2947 di = ((Double_t) i)*(kfrm26ZssSection+kfrm26Width);
543b7370 2948 z = 0.5*(4.*kfrm26ZssSection+5*kfrm26Width);
2949 z = -z+sA26[i]->GetDz() + di;
172b0d90 2950 tran = new TGeoTranslation("",0.0,0.0,z);
cee918ed 2951 vM26->AddNode(vA26[i],1,tran);
2952 z = z+sB26->GetDz();
2953 if(i<kfrm26NZsections)for(j=0;j<=kfrm26NPhiSections;j++){
2954 r = 0.25*(sA26[i]->GetRmax1()+sA26[i]->GetRmin1()+
2955 sA26[i+1]->GetRmax2()+sA26[i+1]->GetRmin2());
172b0d90 2956 t = t0 + ((Double_t)j)*dt;
2957 rot = new TGeoRotation("",0.0,0.0,t);
c023549c 2958 y = r*SinD(t);
2959 x = r*CosD(t);
172b0d90 2960 tranrot = new TGeoCombiTrans("",x,y,z,rot);
543b7370 2961 //delete rot; // rot not explicity used in AddNode functions.
cee918ed 2962 vM26->AddNode(vB26,ncopyB26++,tranrot);
172b0d90 2963 } // end for j
2964 } // end for i
543b7370 2965 tran = new TGeoTranslation("",0.0,0.0,kfrm26Z0-0.5*(4.*kfrm26ZssSection+5*kfrm26Width));
cee918ed 2966 moth->AddNode(vM26,1,tran);
2967 for(i=1;i<kfrm26NPhi;i++){
172b0d90 2968 rot = new TGeoRotation("",0.0,0.0,90.0*((Double_t)i));
2969 tranrot = new TGeoCombiTrans(*tran,*rot);
543b7370 2970 //delete rot; // rot not explicity used in AddNode functions.
cee918ed 2971 moth->AddNode(vM26,i+1,tranrot);
172b0d90 2972 } // end for i
543b7370 2973 if(GetDebug(1)){
cee918ed 2974 for(i=0;i<kfrm26NZsections+1;i++) vA26[i]->PrintNodes();
2975 vB26->PrintNodes();
2976 vM26->PrintNodes();
172b0d90 2977 } // end if
2978}