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