Line data Source code
1 : /**************************************************************************
2 : * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
3 : * *
4 : * Author: The ALICE Off-line Project. *
5 : * Contributors are mentioned in the code where appropriate. *
6 : * *
7 : * Permission to use, copy, modify and distribute this software and its *
8 : * documentation strictly for non-commercial purposes is hereby granted *
9 : * without fee, provided that the above copyright notice appears in all *
10 : * copies and that both the copyright notice and this permission notice *
11 : * appear in the supporting documentation. The authors make no claims *
12 : * about the suitability of this software for any purpose. It is *
13 : * provided "as is" without express or implied warranty. *
14 : **************************************************************************/
15 :
16 : /* $Id$ */
17 :
18 : //------------------------------------------------------------------------
19 : // AliFRAMEv3.cxx
20 : // symmetric space frame with possibility for holes
21 : // Author: A.Morsch
22 : //------------------------------------------------------------------------
23 :
24 : #include <TGeoBBox.h>
25 : #include <TGeoXtru.h>
26 : #include <TGeoArb8.h>
27 : #include <TGeoCompositeShape.h>
28 : #include <TGeoGlobalMagField.h>
29 : #include <TGeoManager.h>
30 : #include <TGeoMatrix.h>
31 : #include <TGeoPgon.h>
32 : #include <TGeoTrd1.h>
33 : #include <TGeoArb8.h>
34 : #include <TGeoBBox.h>
35 : #include <TGeoTube.h>
36 : #include <TGeoMedium.h>
37 : #include <TGeoBoolNode.h>
38 : #include <TGeoCompositeShape.h>
39 : #include <TString.h>
40 : #include <TSystem.h>
41 : #include <TVirtualMC.h>
42 :
43 : #include "AliFRAMEv3.h"
44 : #include "AliMagF.h"
45 : #include "AliRun.h"
46 : #include "AliConst.h"
47 : #include "AliMC.h"
48 : #include "AliLog.h"
49 : #include "AliTrackReference.h"
50 :
51 :
52 :
53 :
54 12 : ClassImp(AliFRAMEv3)
55 :
56 :
57 : //_____________________________________________________________________________
58 0 : AliFRAMEv3::AliFRAMEv3():
59 0 : fHoles(0)
60 0 : {
61 : // Constructor
62 0 : }
63 :
64 : //_____________________________________________________________________________
65 : AliFRAMEv3::AliFRAMEv3(const char *name, const char *title)
66 0 : : AliFRAME(name,title),
67 0 : fHoles(0)
68 0 : {
69 : // Constructor
70 0 : }
71 :
72 : //___________________________________________
73 : void AliFRAMEv3::CreateGeometry()
74 : {
75 : //Begin_Html
76 : /*
77 : <img src="picts/frame.gif">
78 : */
79 : //End_Html
80 :
81 :
82 : //Begin_Html
83 : /*
84 : <img src="picts/tree_frame.gif">
85 : */
86 : //End_Html
87 :
88 0 : Int_t idrotm[2299];
89 :
90 :
91 :
92 0 : AliMatrix(idrotm[2070], 90.0, 0.0, 90.0, 270.0, 0.0, 0.0);
93 : //
94 0 : AliMatrix(idrotm[2083], 170.0, 0.0, 90.0, 90.0, 80.0, 0.0);
95 0 : AliMatrix(idrotm[2084], 170.0, 180.0, 90.0, 90.0, 80.0, 180.0);
96 0 : AliMatrix(idrotm[2085], 90.0, 180.0, 90.0, 90.0, 0.0, 0.0);
97 : //
98 0 : AliMatrix(idrotm[2086], 80.0, 0.0, 90.0, 90., -10.0, 0.0);
99 0 : AliMatrix(idrotm[2096], 100.0, 0.0, 90.0, 90., 10.0, 0.0);
100 : //
101 0 : AliMatrix(idrotm[2087], -100.0, 0.0, 90.0, 270., -10.0, 0.0);
102 0 : AliMatrix(idrotm[2097], -80.0, 0.0, 90.0, 270., 10.0, 0.0);
103 :
104 : //
105 0 : AliMatrix(idrotm[2088], 90.0, 180.0, 90.0, 270., 0.0, 0.0);
106 0 : AliMatrix(idrotm[2089], 90.0, -90.0, 90.0, 0., 0.0, 0.0);
107 : //
108 0 : AliMatrix(idrotm[2090], 90.0, 0.0, 0.0, 0., 90.0, 90.0);
109 0 : AliMatrix(idrotm[2091], 0.0, 0.0, 90.0, 90., 90.0, 0.0);
110 : //
111 : // Matrices have been imported from Euclid. Some simplification
112 : // seems possible
113 : //
114 :
115 0 : AliMatrix(idrotm[2003], 0.0, 0.0, 90.0, 130.0, 90.0, 40.0);
116 0 : AliMatrix(idrotm[2004], 180.0, 0.0, 90.0, 130.0, 90.0, 40.0);
117 0 : AliMatrix(idrotm[2005], 180.0, 0.0, 90.0, 150.0, 90.0, 240.0);
118 0 : AliMatrix(idrotm[2006], 0.0, 0.0, 90.0, 150.0, 90.0, 240.0);
119 0 : AliMatrix(idrotm[2007], 0.0, 0.0, 90.0, 170.0, 90.0, 80.0);
120 0 : AliMatrix(idrotm[2008], 180.0, 0.0, 90.0, 190.0, 90.0, 280.0);
121 0 : AliMatrix(idrotm[2009], 180.0, 0.0, 90.0, 170.0, 90.0, 80.0);
122 0 : AliMatrix(idrotm[2010], 0.0, 0.0, 90.0, 190.0, 90.0, 280.0);
123 0 : AliMatrix(idrotm[2011], 0.0, 0.0, 90.0, 350.0, 90.0, 260.0);
124 0 : AliMatrix(idrotm[2012], 180.0, 0.0, 90.0, 350.0, 90.0, 260.0);
125 0 : AliMatrix(idrotm[2013], 180.0, 0.0, 90.0, 10.0, 90.0, 100.0);
126 0 : AliMatrix(idrotm[2014], 0.0, 0.0, 90.0, 10.0, 90.0, 100.0);
127 0 : AliMatrix(idrotm[2015], 0.0, 0.0, 90.0, 30.0, 90.0, 300.0);
128 0 : AliMatrix(idrotm[2016], 180.0, 0.0, 90.0, 30.0, 90.0, 300.0);
129 0 : AliMatrix(idrotm[2017], 180.0, 0.0, 90.0, 50.0, 90.0, 140.0);
130 0 : AliMatrix(idrotm[2018], 0.0, 0.0, 90.0, 50.0, 90.0, 140.0);
131 :
132 0 : AliMatrix(idrotm[2019], 180.0, 0.0, 90.0, 130.0, 90.0, 220.0);
133 0 : AliMatrix(idrotm[2020], 180.0, 0.0, 90.0, 50.0, 90.0, 320.0);
134 0 : AliMatrix(idrotm[2021], 180.0, 0.0, 90.0, 150.0, 90.0, 60.0);
135 0 : AliMatrix(idrotm[2022], 180.0, 0.0, 90.0, 30.0, 90.0, 120.0);
136 0 : AliMatrix(idrotm[2023], 180.0, 0.0, 90.0, 170.0, 90.0, 260.0);
137 0 : AliMatrix(idrotm[2024], 180.0, 0.0, 90.0, 190.0, 90.0, 100.0);
138 0 : AliMatrix(idrotm[2025], 180.0, 0.0, 90.0, 350.0, 90.0, 80.0);
139 0 : AliMatrix(idrotm[2026], 180.0, 0.0, 90.0, 10.0, 90.0, 280.0);
140 :
141 0 : AliMatrix(idrotm[2100], 180.0, 0.0, 90.0, 210.0, 90.0, 120.0);
142 0 : AliMatrix(idrotm[2101], 180.0, 0.0, 90.0, 330.0, 90.0, 60.0);
143 :
144 :
145 0 : AliMatrix(idrotm[2027], 0.0, 0.0, 90.0, 50.0, 90.0, 320.0);
146 0 : AliMatrix(idrotm[2028], 0.0, 0.0, 90.0, 150.0, 90.0, 60.0);
147 0 : AliMatrix(idrotm[2029], 0.0, 0.0, 90.0, 30.0, 90.0, 120.0);
148 0 : AliMatrix(idrotm[2030], 0.0, 0.0, 90.0, 10.0, 90.0, 280.0);
149 0 : AliMatrix(idrotm[2031], 0.0, 0.0, 90.0, 170.0, 90.0, 260.0);
150 0 : AliMatrix(idrotm[2032], 0.0, 0.0, 90.0, 190.0, 90.0, 100.0);
151 0 : AliMatrix(idrotm[2033], 0.0, 0.0, 90.0, 350.0, 90.0, 80.0);
152 :
153 :
154 0 : Int_t *idtmed = fIdtmed->GetArray()-1999;
155 : //
156 : // The Main Space Frame
157 : // ALIP2A__0007
158 : // ALIP2A__0008
159 : //
160 0 : Float_t pbox[3], ptrap[11], ptrd1[4], ppgon[10];
161 : Float_t dx, dy, dz;
162 : Int_t i, j;
163 : Int_t jmod = 0;
164 : //
165 : // Constants
166 : //
167 : // Materials
168 0 : const TGeoMedium* kMedAir = gGeoManager->GetMedium("FRAME_Air");
169 0 : const TGeoMedium* kMedSteel = gGeoManager->GetMedium("FRAME_Steel");
170 0 : const TGeoMedium* kMedAlu = gGeoManager->GetMedium("FRAME_Aluminum");
171 0 : const Int_t kAir = idtmed[2004];
172 0 : const Int_t kSteel = idtmed[2064];
173 0 : const Int_t kAlu = idtmed[2008];
174 0 : const Int_t kG10 = idtmed[2021];
175 : // Angles
176 : const Float_t kEps = 0.01;
177 0 : const Float_t krad2deg = 180. / TMath::Pi();
178 0 : const Float_t kdeg2rad = 1. / krad2deg;
179 0 : const Float_t sin10 = TMath::Sin(10. * kdeg2rad);
180 0 : const Float_t tan10 = TMath::Tan(10. * kdeg2rad);
181 0 : const Float_t cos10 = TMath::Cos(10. * kdeg2rad);
182 : // Dimensions
183 : // vertical distance of frame wrt to origin (center of inner rings)
184 : const Float_t hR = 286.00;
185 : // Height of inner frame from lower edge to outer ring (sectors for detectors)
186 : const Float_t iFrH = 119.00;
187 : //
188 : // radial length of web frame elements
189 0 : const Float_t dHz = 113./cos10 - 0.3; // 114.74 (114.5 on drawing)
190 : // Positions of ring bars (ALIP2A_0008)
191 : // outer
192 : const Float_t dymodU[3] = {71.5, 228.5, 339.5};
193 : // inner
194 : const Float_t dymodL[3] = {50.0, 175.0, 297.5};
195 : //
196 : // orientation of web frame elements
197 : const Float_t dymodO[5] = {10., -40., 20., -27.1, 18.4};
198 : // Position of web frame elements
199 0 : Float_t dymodW[5] = {70., 73.6, 224.5, 231.4, 340.2};
200 0 : for (Int_t ii = 0; ii < 5; ii++) {
201 0 : dymodW[ii] = dymodW[ii]-3.*TMath::Tan(dymodO[ii]*kdeg2rad);
202 : }
203 : // Inner ring bars (Pos 6)
204 : const Float_t ringH = 6.00; // Hight
205 : const Float_t ringW = 10.00; // Width of the ring bars in z
206 : const Float_t ringT = 1.00; // Thickness of bars
207 : // inner longitudinal bars 4 x 6
208 : const Float_t longH = 6.00; // Height
209 : const Float_t longW = 4.00; // Width
210 : // outer longitudianl bars 8 x 8
211 : // const Float_t longOD = 8.0;
212 : // some extra space for mother volume
213 0 : const Float_t dext = sin10 * longW/2.+0.01;
214 : // sector hight with extra space
215 0 : const Float_t iFrH0 = iFrH + dext;
216 : // length of inner longitudinal bars
217 : // inner
218 : const Float_t longLI = 615.;
219 : const Float_t zE = 376.5;
220 : //
221 : // Frame mother volume
222 : //
223 0 : TGeoPgon* shB77A = new TGeoPgon(0., 360., 18, 2);
224 0 : shB77A->SetName("shB77A");
225 0 : shB77A->DefineSection( 0, -zE, 280., 423.7);
226 0 : shB77A->DefineSection( 1, zE, 280., 423.7);
227 0 : TGeoBBox* shB77B = new TGeoBBox(3.42, 2., 375.5);
228 0 : shB77B->SetName("shB77B");
229 0 : TGeoTranslation* trB77A = new TGeoTranslation("trB77A", +283.32, 0., 0.);
230 0 : TGeoTranslation* trB77B = new TGeoTranslation("trB77B", -283.32, 0., 0.);
231 0 : trB77A->RegisterYourself();
232 0 : trB77B->RegisterYourself();
233 0 : TGeoCompositeShape* shB77 = new TGeoCompositeShape("shB77", "shB77A+shB77B:trB77A+shB77B:trB77B");
234 0 : TGeoVolume* voB77 = new TGeoVolume("B077", shB77, gGeoManager->GetMedium("FRAME_Air"));
235 0 : voB77->SetName("B077"); // just to avoid a warning
236 0 : TVirtualMC::GetMC()->Gspos("B077", 1, "ALIC", 0., 0., 0., 0, "ONLY");
237 : //
238 : // Reference plane #1 for TRD
239 0 : TGeoPgon* shBREFA = new TGeoPgon(0.0, 360., 18, 2);
240 0 : shBREFA->DefineSection( 0, -376., 280., 280.1);
241 0 : shBREFA->DefineSection( 1, 376., 280., 280.1);
242 0 : shBREFA->SetName("shBREFA");
243 0 : TGeoCompositeShape* shBREF1 = new TGeoCompositeShape("shBREF1", "shBREFA-(shB77B:trB77A+shB77B:trB77B)");
244 0 : TGeoVolume* voBREF = new TGeoVolume("BREF1", shBREF1, gGeoManager->GetMedium("FRAME_Air"));
245 0 : voBREF->SetVisibility(0);
246 0 : TVirtualMC::GetMC()->Gspos("BREF1", 1, "B077", 0., 0., 0., 0, "ONLY");
247 : //
248 : // The outer Frame
249 : //
250 :
251 : Float_t dol = 4.;
252 : Float_t doh = 4.;
253 : Float_t ds = 0.63;
254 : //
255 : // Rings
256 : //
257 0 : dz = 2. * 410.2 * sin10 - 2. * dol * cos10 - 2. * doh * tan10;
258 0 : Float_t l1 = dz / 2.;
259 0 : Float_t l2 = dz / 2. + 2. * doh * tan10;
260 :
261 :
262 0 : TGeoVolumeAssembly* asBI42 = new TGeoVolumeAssembly("BI42");
263 : // Horizontal
264 0 : ptrd1[0] = l2 - 0.6 * tan10;
265 0 : ptrd1[1] = l2;
266 0 : ptrd1[2] = 8.0 / 2.;
267 0 : ptrd1[3] = 0.6 / 2.;
268 0 : TVirtualMC::GetMC()->Gsvolu("BIH142", "TRD1", kSteel, ptrd1, 4);
269 0 : ptrd1[0] = l1;
270 0 : ptrd1[1] = l1 + 0.6 * tan10;
271 0 : ptrd1[2] = 8.0 / 2.;
272 0 : ptrd1[3] = 0.6 / 2.;
273 0 : TVirtualMC::GetMC()->Gsvolu("BIH242", "TRD1", kSteel, ptrd1, 4);
274 :
275 : // Vertical
276 0 : ptrd1[0] = l1 + 0.6 * tan10;
277 0 : ptrd1[1] = l2 - 0.6 * tan10;
278 0 : ptrd1[2] = 0.8 / 2.;
279 0 : ptrd1[3] = 6.8 / 2.;
280 0 : TVirtualMC::GetMC()->Gsvolu("BIV42", "TRD1", kSteel, ptrd1, 4);
281 : // Place
282 0 : asBI42->AddNode(gGeoManager->GetVolume("BIV42"), 1, new TGeoTranslation(0., 0., 0.0));
283 0 : asBI42->AddNode(gGeoManager->GetVolume("BIH142"), 1, new TGeoTranslation(0., 0., 3.7));
284 0 : asBI42->AddNode(gGeoManager->GetVolume("BIH242"), 1, new TGeoTranslation(0., 0., -3.7));
285 : //
286 : // longitudinal bars
287 : //
288 : // 80 x 80 x 6.3
289 : //
290 0 : pbox[0] = dol;
291 0 : pbox[1] = doh;
292 0 : pbox[2] = 345.;
293 0 : TVirtualMC::GetMC()->Gsvolu("B033", "BOX", kSteel, pbox, 3);
294 0 : pbox[0] = dol-ds;
295 0 : pbox[1] = doh-ds;
296 0 : TVirtualMC::GetMC()->Gsvolu("B034", "BOX", kAir, pbox, 3);
297 0 : TVirtualMC::GetMC()->Gspos("B034", 1, "B033", 0., 0., 0., 0, "ONLY");
298 :
299 :
300 : //
301 : // TPC support
302 : //
303 0 : pbox[0] = 3.37;
304 0 : pbox[1] = 2.0;
305 0 : pbox[2] = longLI / 2.;
306 0 : TVirtualMC::GetMC()->Gsvolu("B080", "BOX", kSteel, pbox, 3);
307 0 : pbox[0] = 2.78;
308 0 : pbox[1] = 1.40;
309 0 : pbox[2] = longLI / 2.;
310 0 : TVirtualMC::GetMC()->Gsvolu("B081", "BOX", kAir, pbox, 3);
311 0 : TVirtualMC::GetMC()->Gspos("B081", 1, "B080", 0., 0., 0., 0, "ONLY");
312 :
313 : // Small 2nd reference plane elemenet
314 0 : pbox[0] = 0.05;
315 0 : pbox[1] = 2.0;
316 0 : pbox[2] = longLI / 2.;
317 0 : TVirtualMC::GetMC()->Gsvolu("BREF2", "BOX", kAir, pbox, 3);
318 0 : TVirtualMC::GetMC()->Gspos("BREF2", 1, "B080", 3.37 - 0.05, 0., 0., 0, "ONLY");
319 :
320 0 : TVirtualMC::GetMC()->Gspos("B080", 1, "B077", 283.25, 0., 0., 0, "ONLY");
321 0 : TVirtualMC::GetMC()->Gspos("B080", 2, "B077", -283.25, 0., 0., idrotm[2088], "ONLY");
322 :
323 :
324 : //
325 : // Diagonal bars (1)
326 : //
327 : Float_t h, d, dq, x, theta;
328 :
329 : h = (dymodU[1]-dymodU[0]-2.*dol)*.999;
330 : d = 2.*dol;
331 0 : dq = h*h+dz*dz;
332 :
333 0 : x = TMath::Sqrt((dz*dz-d*d)/dq + d*d*h*h/dq/dq)+d*h/dq;
334 :
335 :
336 0 : theta = krad2deg * TMath::ACos(x);
337 :
338 0 : ptrap[0] = dz/2.;
339 0 : ptrap[1] = theta;
340 0 : ptrap[2] = 0.;
341 0 : ptrap[3] = doh;
342 0 : ptrap[4] = dol/x;
343 0 : ptrap[5] = ptrap[4];
344 0 : ptrap[6] = 0;
345 0 : ptrap[7] = ptrap[3];
346 0 : ptrap[8] = ptrap[4];
347 0 : ptrap[9] = ptrap[4];
348 0 : ptrap[10] = 0;
349 :
350 0 : TVirtualMC::GetMC()->Gsvolu("B047", "TRAP", kSteel, ptrap, 11);
351 0 : ptrap[3] = doh-ds;
352 0 : ptrap[4] = (dol-ds)/x;
353 0 : ptrap[5] = ptrap[4];
354 0 : ptrap[7] = ptrap[3];
355 0 : ptrap[8] = ptrap[4];
356 0 : ptrap[9] = ptrap[4];
357 0 : TVirtualMC::GetMC()->Gsvolu("B048", "TRAP", kAir, ptrap, 11);
358 0 : TVirtualMC::GetMC()->Gspos("B048", 1, "B047", 0.0, 0.0, 0., 0, "ONLY");
359 :
360 : /*
361 : Crosses (inner most)
362 : \\ //
363 : \\//
364 : //\\
365 : // \\
366 : */
367 : h = (2.*dymodU[0]-2.*dol)*.999;
368 : //
369 : // Mother volume
370 : //
371 0 : pbox[0] = h/2;
372 0 : pbox[1] = doh;
373 0 : pbox[2] = dz/2.;
374 0 : TVirtualMC::GetMC()->Gsvolu("BM49", "BOX ", kAir, pbox, 3);
375 :
376 :
377 0 : dq = h*h+dz*dz;
378 0 : x = TMath::Sqrt((dz*dz-d*d)/dq + d*d*h*h/dq/dq)+d*h/dq;
379 0 : theta = krad2deg * TMath::ACos(x);
380 :
381 0 : ptrap[0] = dz/2.-kEps;
382 0 : ptrap[1] = theta;
383 0 : ptrap[2] = 0.;
384 0 : ptrap[3] = doh-kEps;
385 0 : ptrap[4] = dol/x;
386 0 : ptrap[5] = ptrap[4];
387 0 : ptrap[7] = ptrap[3];
388 0 : ptrap[8] = ptrap[4];
389 0 : ptrap[9] = ptrap[4];
390 :
391 0 : TVirtualMC::GetMC()->Gsvolu("B049", "TRAP", kSteel, ptrap, 11);
392 0 : ptrap[0] = ptrap[0]-kEps;
393 0 : ptrap[3] = (doh-ds);
394 0 : ptrap[4] = (dol-ds)/x;
395 0 : ptrap[5] = ptrap[4];
396 0 : ptrap[7] = ptrap[3];
397 0 : ptrap[8] = ptrap[4];
398 0 : ptrap[9] = ptrap[4];
399 0 : TVirtualMC::GetMC()->Gsvolu("B050", "TRAP", kAir, ptrap, 11);
400 0 : TVirtualMC::GetMC()->Gspos("B050", 1, "B049", 0.0, 0.0, 0., 0, "ONLY");
401 0 : TVirtualMC::GetMC()->Gspos("B049", 1, "BM49", 0.0, 0.0, 0., 0, "ONLY");
402 :
403 :
404 0 : Float_t dd1 = d*TMath::Tan(theta*kdeg2rad);
405 0 : Float_t dd2 = d/TMath::Tan(2.*theta*kdeg2rad);
406 0 : Float_t theta2 = TMath::ATan(TMath::Abs(dd2-dd1)/d/2.);
407 :
408 :
409 0 : ptrap[0] = dol;
410 0 : ptrap[1] = theta2*krad2deg;
411 0 : ptrap[2] = 0.;
412 0 : ptrap[3] = doh;
413 0 : ptrap[4] = (dz/2./x-dd1-dd2)/2.;
414 0 : ptrap[5] = ptrap[4];
415 0 : ptrap[6] = 0.;
416 0 : ptrap[7] = ptrap[3];
417 0 : ptrap[8] = dz/4./x;
418 0 : ptrap[9] = ptrap[8];
419 :
420 :
421 0 : TVirtualMC::GetMC()->Gsvolu("B051", "TRAP", kSteel, ptrap, 11);
422 0 : Float_t ddx0 = ptrap[8];
423 :
424 0 : Float_t dd1s = dd1*(1.-2.*ds/d);
425 0 : Float_t dd2s = dd2*(1.-2.*ds/d);
426 0 : Float_t theta2s = TMath::ATan(TMath::Abs(dd2s-dd1s)/(d-2.*ds)/2.);
427 :
428 :
429 0 : ptrap[0] = dol-ds;
430 0 : ptrap[1] = theta2s*krad2deg;
431 0 : ptrap[2] = 0.;
432 0 : ptrap[3] = doh-ds;
433 0 : ptrap[4] = ptrap[4]+ds/d/2.*(dd1+dd2);
434 0 : ptrap[5] = ptrap[4];
435 0 : ptrap[6] = 0.;
436 0 : ptrap[7] = ptrap[3];
437 0 : ptrap[8] = ptrap[8]-ds/2./d*(dd1+dd2);
438 0 : ptrap[9] = ptrap[8];
439 :
440 0 : TVirtualMC::GetMC()->Gsvolu("B052", "TRAP", kAir, ptrap, 11);
441 0 : TVirtualMC::GetMC()->Gspos("B052", 1, "B051", 0.0, 0.0, 0., 0, "ONLY");
442 :
443 : Float_t ddx, ddz, drx, drz, rtheta;
444 :
445 0 : AliMatrix(idrotm[2001], -theta+180, 0.0, 90.0, 90.0, 90.-theta, 0.0);
446 0 : rtheta = (90.-theta)*kdeg2rad;
447 0 : ddx = -ddx0-dol*TMath::Tan(theta2);
448 : ddz = -dol;
449 :
450 0 : drx = TMath::Cos(rtheta) * ddx +TMath::Sin(rtheta) *ddz+pbox[0];
451 0 : drz = -TMath::Sin(rtheta) * ddx +TMath::Cos(rtheta) *ddz-pbox[2];
452 0 : TVirtualMC::GetMC()->Gspos("B051", 1, "BM49",
453 0 : drx, 0.0, drz,
454 0 : idrotm[2001], "ONLY");
455 :
456 0 : AliMatrix(idrotm[2002], -theta, 0.0, 90.0, 90.0, 270.-theta, 0.0);
457 0 : rtheta = (270.-theta)*kdeg2rad;
458 :
459 0 : drx = TMath::Cos(rtheta) * ddx + TMath::Sin(rtheta) * ddz-pbox[0];
460 0 : drz = -TMath::Sin(rtheta) * ddx + TMath::Cos(rtheta) * ddz+pbox[2];
461 0 : TVirtualMC::GetMC()->Gspos("B051", 2, "BM49",
462 0 : drx, 0.0, drz,
463 0 : idrotm[2002], "ONLY");
464 :
465 : //
466 : // Diagonal bars (3)
467 : //
468 : h = ((dymodU[2]-dymodU[1])-2.*dol)*.999;
469 0 : dq = h*h+dz*dz;
470 0 : x = TMath::Sqrt((dz*dz-d*d)/dq + d*d*h*h/dq/dq)+d*h/dq;
471 0 : theta = krad2deg * TMath::ACos(x);
472 :
473 0 : ptrap[0] = dz/2.;
474 0 : ptrap[1] = theta;
475 0 : ptrap[3] = doh;
476 0 : ptrap[4] = dol/x;
477 0 : ptrap[5] = ptrap[4];
478 0 : ptrap[7] = ptrap[3];
479 0 : ptrap[8] = ptrap[4];
480 0 : ptrap[9] = ptrap[4];
481 :
482 0 : TVirtualMC::GetMC()->Gsvolu("B045", "TRAP", kSteel, ptrap, 11);
483 0 : ptrap[3] = doh-ds;
484 0 : ptrap[4] = (dol-ds)/x;
485 0 : ptrap[5] = ptrap[4];
486 0 : ptrap[7] = ptrap[3];
487 0 : ptrap[8] = ptrap[4];
488 0 : ptrap[9] = ptrap[4];
489 0 : TVirtualMC::GetMC()->Gsvolu("B046", "TRAP", kAir, ptrap, 11);
490 0 : TVirtualMC::GetMC()->Gspos("B046", 1, "B045", 0.0, 0.0, 0., 0, "ONLY");
491 :
492 : //
493 : // Positioning of diagonal bars
494 :
495 : Float_t rd = 405.5 + 0.51;
496 0 : dz = (dymodU[1]+dymodU[0])/2.;
497 0 : Float_t dz2 = (dymodU[1]+dymodU[2])/2.;
498 :
499 :
500 :
501 : //
502 : // phi = 60
503 : //
504 :
505 : Float_t phi = 60;
506 0 : dx = rd * TMath::Sin(phi*kdeg2rad);
507 0 : dy = rd * TMath::Cos(phi*kdeg2rad);
508 :
509 0 : TVirtualMC::GetMC()->Gspos("B045", 1, "B077", -dx, dy, dz2, idrotm[2021], "ONLY");
510 0 : TVirtualMC::GetMC()->Gspos("B045", 2, "B077", -dx, dy, -dz2, idrotm[2028], "ONLY");
511 0 : TVirtualMC::GetMC()->Gspos("B045", 3, "B077", dx, dy, dz2, idrotm[2022], "ONLY");
512 0 : TVirtualMC::GetMC()->Gspos("B045", 4, "B077", dx, dy, -dz2, idrotm[2029], "ONLY");
513 :
514 0 : TVirtualMC::GetMC()->Gspos("B045", 5, "B077", dx, -dy, -dz2, idrotm[2021], "ONLY");
515 0 : TVirtualMC::GetMC()->Gspos("B045", 6, "B077", dx, -dy, +dz2, idrotm[2028], "ONLY");
516 0 : TVirtualMC::GetMC()->Gspos("B045", 7, "B077", -dx, -dy, -dz2, idrotm[2022], "ONLY");
517 0 : TVirtualMC::GetMC()->Gspos("B045", 8, "B077", -dx, -dy, +dz2, idrotm[2029], "ONLY");
518 :
519 :
520 :
521 0 : TVirtualMC::GetMC()->Gspos("B047", 1, "B077", -dx, -dy, dz, idrotm[2022], "ONLY");
522 0 : TVirtualMC::GetMC()->Gspos("B047", 2, "B077", -dx, -dy, -dz, idrotm[2029], "ONLY");
523 :
524 0 : TVirtualMC::GetMC()->Gspos("B047", 3, "B077", dx, -dy, dz, idrotm[2021], "ONLY");
525 0 : TVirtualMC::GetMC()->Gspos("B047", 4, "B077", dx, -dy, -dz, idrotm[2028], "ONLY");
526 :
527 :
528 0 : TVirtualMC::GetMC()->Gspos("BM49", 1, "B077", dx, -dy, 0., idrotm[2101], "ONLY");
529 0 : TVirtualMC::GetMC()->Gspos("BM49", 2, "B077", -dx, -dy, 0., idrotm[2100], "ONLY");
530 :
531 : //
532 : // phi = 80
533 : //
534 :
535 : phi = 80;
536 0 : dx = rd * TMath::Sin(phi*kdeg2rad);
537 0 : dy = rd * TMath::Cos(phi*kdeg2rad);
538 :
539 0 : TVirtualMC::GetMC()->Gspos("B047", 13, "B077", -dx, -dy, dz, idrotm[2008], "ONLY");
540 0 : TVirtualMC::GetMC()->Gspos("B047", 14, "B077", -dx, -dy, -dz, idrotm[2010], "ONLY");
541 0 : TVirtualMC::GetMC()->Gspos("B047", 15, "B077", dx, -dy, dz, idrotm[2012], "ONLY");
542 0 : TVirtualMC::GetMC()->Gspos("B047", 16, "B077", dx, -dy, -dz, idrotm[2011], "ONLY");
543 :
544 0 : TVirtualMC::GetMC()->Gspos("B045", 11, "B077", -dx, dy, dz2, idrotm[2023], "ONLY");
545 0 : TVirtualMC::GetMC()->Gspos("B045", 12, "B077", -dx, dy, -dz2, idrotm[2031], "ONLY");
546 0 : TVirtualMC::GetMC()->Gspos("B045", 13, "B077", dx, dy, dz2, idrotm[2026], "ONLY");
547 0 : TVirtualMC::GetMC()->Gspos("B045", 14, "B077", dx, dy, -dz2, idrotm[2030], "ONLY");
548 :
549 0 : TVirtualMC::GetMC()->Gspos("B045", 15, "B077", -dx, -dy, dz2, idrotm[2024], "ONLY");
550 0 : TVirtualMC::GetMC()->Gspos("B045", 16, "B077", -dx, -dy, -dz2, idrotm[2032], "ONLY");
551 0 : TVirtualMC::GetMC()->Gspos("B045", 17, "B077", dx, -dy, dz2, idrotm[2025], "ONLY");
552 0 : TVirtualMC::GetMC()->Gspos("B045", 18, "B077", dx, -dy, -dz2, idrotm[2033], "ONLY");
553 :
554 0 : TVirtualMC::GetMC()->Gspos("BM49", 3, "B077", dx, -dy, 0., idrotm[2025], "ONLY");
555 0 : TVirtualMC::GetMC()->Gspos("BM49", 4, "B077", -dx, -dy, 0., idrotm[2024], "ONLY");
556 :
557 :
558 : //
559 : // The inner frame
560 : //
561 : //
562 : // Mother Volumes
563 : //
564 0 : ptrd1[0] = (hR - longH/2. - dext) * tan10;
565 0 : ptrd1[1] = (hR - longH/2. + iFrH0) * tan10;
566 0 : ptrd1[2] = zE;
567 0 : ptrd1[3] = iFrH0 / 2.;
568 0 : Float_t dd = longW / 2. * cos10 + 0.1;
569 0 : TGeoTrd1* shTRD1 = new TGeoTrd1("shTRD1", ptrd1[0], ptrd1[1], ptrd1[2], ptrd1[3]);
570 0 : TGeoBBox* shBox = new TGeoBBox("shBox", 50., zE+10., 1.);
571 0 : TGeoRotation* rot1 = new TGeoRotation("urot1", 100., 0., 90., 90., 10., 0.);
572 0 : TGeoRotation* rot2 = new TGeoRotation("urot2", 80., 0., 90., 90., -10., 0.);
573 0 : Float_t trotDz = iFrH0 / 2. + 1.;
574 0 : Float_t trotDx = 402. * tan10;
575 0 : TGeoCombiTrans* trot1 = new TGeoCombiTrans(-trotDx, 0., trotDz, rot2);
576 0 : TGeoCombiTrans* trot2 = new TGeoCombiTrans(+trotDx, 0., trotDz, rot1);
577 0 : TGeoUnion* uni = new TGeoUnion(shBox, shBox,trot1, trot2);
578 0 : TGeoCompositeShape* shU = new TGeoCompositeShape("shU", uni);
579 0 : TGeoSubtraction* sub = new TGeoSubtraction(shTRD1, shU, 0, 0);
580 0 : TGeoCompositeShape* shCS = new TGeoCompositeShape("shCS", sub);
581 : // center of segments
582 0 : Float_t r = (hR - longH/2. + iFrH0 / 2. ) - dext;
583 : // center of outer frame
584 : //vertical
585 : Float_t rout1 = 406.0;
586 : // radial
587 0 : Float_t rout2 = 412.3 - 2. * sin10 + 0.25;
588 : //
589 0 : TString module[18];
590 0 : for (i = 0; i < 18; i++) {
591 :
592 : // Create volume i
593 0 : char name[16];
594 : // official module numbering
595 0 : Int_t mod = i + 13;
596 0 : if (mod > 17) mod -= 18;
597 0 : snprintf(name, 16, "BSEGMO%d", mod);
598 : //
599 0 : TGeoVolume* voTRD1 = new TGeoVolume(name, shCS, kMedAir);
600 0 : module[i] = name;
601 : // Place volume i
602 0 : Float_t phi1 = i * 20.;
603 0 : Float_t phi2 = 270. + phi1;
604 0 : if (phi2 >= 360.) phi2 -= 360.;
605 0 : dx = TMath::Sin(phi1 * kdeg2rad) * r;
606 0 : dy = -TMath::Cos(phi1 * kdeg2rad) * r;
607 :
608 0 : char nameR[16];
609 0 : snprintf(nameR, 16, "B43_Rot_%d", i);
610 0 : TGeoRotation* rot = new TGeoRotation(nameR, 90.0, phi1, 0., 0., 90., phi2);
611 0 : AliMatrix(idrotm[2034+i], 90.0, phi1, 0., 0., 90., phi2);
612 0 : TGeoVolume* vol77 = gGeoManager->GetVolume("B077");
613 0 : vol77->AddNode(voTRD1, 1, new TGeoCombiTrans(dx, dy, 0., rot));
614 :
615 : //
616 : // Position elements of outer Frame
617 : //
618 0 : dx = TMath::Sin(phi1*kdeg2rad)*rout1;
619 0 : dy = -TMath::Cos(phi1*kdeg2rad)*rout1;
620 0 : for (j = 0; j < 3; j++)
621 : {
622 0 : dz = dymodU[j];
623 0 : TGeoVolume* vol = gGeoManager->GetVolume("B077");
624 0 : vol->AddNode(asBI42, 6*i+2*j+1, new TGeoCombiTrans(dx, dy, dz, rot));
625 0 : vol->AddNode(asBI42, 6*i+2*j+2, new TGeoCombiTrans(dx, dy, -dz, rot));
626 : }
627 :
628 0 : phi1 = i*20.+10;
629 0 : phi2 = 270+phi1;
630 0 : AliMatrix(idrotm[2052+i], 90.0, phi1, 90., phi2, 0., 0.);
631 :
632 0 : dx = TMath::Sin(phi1*kdeg2rad)*rout2;
633 0 : dy = -TMath::Cos(phi1*kdeg2rad)*rout2;
634 0 : TVirtualMC::GetMC()->Gspos("B033", i+1, "B077", dx, dy, 0., idrotm[2052+i], "ONLY");
635 : //
636 0 : }
637 : // Internal Frame rings
638 : //
639 : //
640 : // Pos 7 60x60x5x6 for inner rings (I-beam)
641 : // Pos 6 100x60x5 for front and rear rings
642 : //
643 : // Front and rear
644 : //
645 :
646 0 : ptrd1[0] = (hR - longH / 2.) * tan10 - dd;
647 0 : ptrd1[1] = (hR + longH / 2.) * tan10 - dd;
648 0 : ptrd1[2] = ringW / 2.;
649 0 : ptrd1[3] = ringH / 2.;
650 :
651 0 : TVirtualMC::GetMC()->Gsvolu("B072", "TRD1", kSteel, ptrd1, 4);
652 :
653 0 : ptrd1[0] = (hR - longH / 2. + 0.5) * tan10 - dd;
654 0 : ptrd1[1] = (hR + longH / 2. - 0.5) * tan10 - dd;
655 0 : ptrd1[2] = ringW / 2. - 0.5;
656 0 : ptrd1[3] = ringH / 2. - 0.5;
657 :
658 0 : TVirtualMC::GetMC()->Gsvolu("B073", "TRD1", kAir, ptrd1, 4);
659 0 : TVirtualMC::GetMC()->Gspos("B073", 1, "B072", 0., 0., 0., 0, "ONLY");
660 : //
661 : // I-Beam
662 : // Mother volume
663 0 : TGeoVolumeAssembly* asBI72 = new TGeoVolumeAssembly("BI72");
664 : // Horizontal
665 : Float_t rIB1 = hR + ringH/2.;
666 : Float_t rIB2 = hR - ringH/2.;
667 0 : ptrd1[0] = (rIB1 - ringT/2.) * tan10 - dd;
668 0 : ptrd1[1] = (rIB1 ) * tan10 - dd;
669 0 : ptrd1[2] = ringH / 2.;
670 0 : ptrd1[3] = ringT / 4.;
671 0 : TVirtualMC::GetMC()->Gsvolu("BIH172", "TRD1", kSteel, ptrd1, 4);
672 0 : ptrd1[0] = (rIB2 ) * tan10 - dd;
673 0 : ptrd1[1] = (rIB2 + ringT/2.) * tan10 - dd;
674 0 : ptrd1[2] = ringH/2.;
675 0 : ptrd1[3] = ringT/4.;
676 0 : TVirtualMC::GetMC()->Gsvolu("BIH272", "TRD1", kSteel, ptrd1, 4);
677 :
678 : // Vertical
679 0 : ptrd1[0] = (rIB2 + ringT/2.) * tan10 - dd;
680 0 : ptrd1[1] = (rIB1 - ringT/2.) * tan10 - dd;
681 0 : ptrd1[2] = 0.6 / 2.;
682 0 : ptrd1[3] = (ringH - ringT) / 2.;
683 0 : TVirtualMC::GetMC()->Gsvolu("BIV72", "TRD1", kSteel, ptrd1, 4);
684 : // Place
685 0 : asBI72->AddNode(gGeoManager->GetVolume("BIV72"), 1, new TGeoTranslation(0., 0., 0.));
686 0 : asBI72->AddNode(gGeoManager->GetVolume("BIH172"), 1, new TGeoTranslation(0., 0., (ringH/2. - ringT/4.)));
687 0 : asBI72->AddNode(gGeoManager->GetVolume("BIH272"), 1, new TGeoTranslation(0., 0., -(ringH/2. - ringT/4.)));
688 :
689 : // Web frame
690 : //
691 : // h x w x s = 60 x 40 x 5
692 : // (attention: elements are half bars, "U" shaped)
693 : //
694 :
695 0 : WebFrame("B063", dHz, dymodO[0], 10.);
696 0 : WebFrame("B163", dHz, dymodO[1], 10.);
697 0 : WebFrame("B263", dHz, dymodO[2], 10.);
698 0 : WebFrame("B363", dHz, dymodO[3], 10.);
699 0 : WebFrame("B463", dHz, dymodO[4], 10.);
700 :
701 0 : dz = -iFrH0 / 2. + ringH / 2. + dext;
702 :
703 0 : Float_t dz0 = -iFrH0 / 2. + longH + 113. / 2. + dext - 0.1;
704 0 : Float_t dx0 = (hR + iFrH/2.) * tan10 - longW / 4. * cos10 - 0.065;
705 0 : for (jmod = 0; jmod < 18; jmod++)
706 : {
707 : //
708 : // ring bars
709 0 : for (i = 0; i < 3; i++) {
710 0 : if (i == 2) {
711 0 : TVirtualMC::GetMC()->Gspos("B072", 6*jmod+i+1, module[jmod], 0, dymodL[i], dz, 0, "ONLY");
712 0 : TVirtualMC::GetMC()->Gspos("B072", 6*jmod+i+4, module[jmod], 0, -dymodL[i], dz, idrotm[2070], "ONLY");
713 : } else {
714 0 : TGeoVolume* vol = gGeoManager->GetVolume(module[jmod]);
715 0 : vol->AddNode(asBI72, 6*jmod+i+1, new TGeoTranslation(0, dymodL[i], dz));
716 0 : vol->AddNode(asBI72, 6*jmod+i+4, new TGeoTranslation(0, -dymodL[i], dz));
717 : }
718 : }
719 : }
720 : //
721 : // outer diagonal web
722 :
723 0 : dy = dymodW[0] - (dHz/2.) * TMath::Tan(dymodO[0] * kdeg2rad);
724 :
725 0 : for (jmod = 0; jmod < 18; jmod++) {
726 0 : TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
727 0 : TVirtualMC::GetMC()->Gspos("B063", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
728 0 : TVirtualMC::GetMC()->Gspos("B063I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
729 0 : TVirtualMC::GetMC()->Gspos("B063", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
730 : }
731 :
732 0 : dy = dymodW[1] - (dHz/2.) * TMath::Tan(dymodO[1] * kdeg2rad);
733 :
734 0 : for (jmod = 0; jmod < 18; jmod++) {
735 0 : TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
736 0 : TVirtualMC::GetMC()->Gspos("B163", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
737 0 : TVirtualMC::GetMC()->Gspos("B163I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
738 0 : TVirtualMC::GetMC()->Gspos("B163", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
739 : }
740 :
741 0 : dy = dymodW[2] - (dHz/2) * TMath::Tan(dymodO[2] * kdeg2rad);
742 :
743 0 : for (jmod = 0; jmod < 18; jmod++) {
744 0 : TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
745 0 : TVirtualMC::GetMC()->Gspos("B263", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
746 0 : TVirtualMC::GetMC()->Gspos("B263I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
747 0 : TVirtualMC::GetMC()->Gspos("B263", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
748 : }
749 :
750 0 : dy = dymodW[3] - (dHz/2.) * TMath::Tan(dymodO[3] * kdeg2rad);
751 :
752 0 : for (jmod = 0; jmod < 18; jmod++) {
753 0 : TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+1, module[jmod], dx0, -dy, dz0, idrotm[2096], "ONLY");
754 0 : TVirtualMC::GetMC()->Gspos("B363", 4*jmod+2, module[jmod], dx0, dy, dz0, idrotm[2097], "ONLY");
755 0 : TVirtualMC::GetMC()->Gspos("B363I", 4*jmod+3, module[jmod], -dx0, dy, dz0, idrotm[2087], "ONLY");
756 0 : TVirtualMC::GetMC()->Gspos("B363", 4*jmod+4, module[jmod], -dx0, -dy, dz0, idrotm[2086], "ONLY");
757 : }
758 :
759 0 : dy = dymodW[4] - (dHz/2.) * TMath::Tan(dymodO[4] * kdeg2rad);
760 :
761 0 : for (jmod = 0; jmod < 18; jmod++) {
762 0 : TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+1, module[jmod], dx0, dy, dz0, idrotm[2096], "ONLY");
763 0 : TVirtualMC::GetMC()->Gspos("B463", 4*jmod+2, module[jmod], dx0, -dy, dz0, idrotm[2097], "ONLY");
764 0 : TVirtualMC::GetMC()->Gspos("B463I", 4*jmod+3, module[jmod], -dx0, -dy, dz0, idrotm[2087], "ONLY");
765 0 : TVirtualMC::GetMC()->Gspos("B463", 4*jmod+4, module[jmod], -dx0, dy, dz0, idrotm[2086], "ONLY");
766 : }
767 :
768 : // longitudinal bars (TPC rails attached)
769 : // new specs:
770 : // h x w x s = 100 x 75 x 6
771 : // Attention: 2 "U" shaped half rods per cell
772 : // longitudinal bars (no TPC rails attached)
773 : // new specs: h x w x s = 40 x 60 x 5
774 : //
775 : //
776 : //
777 0 : Double_t lbox[3];
778 0 : lbox[0] = longW / 4.;
779 0 : lbox[2] = longH / 2.;
780 0 : lbox[1] = longLI / 2.;
781 0 : TVirtualMC::GetMC()->Gsvolu("BA59", "BOX", kSteel, lbox, 3);
782 0 : gGeoManager->GetVolume("BA59")->SetVisContainers();
783 0 : lbox[0] = longW / 4. - 0.25;
784 0 : lbox[2] = longH / 2. - 0.50;
785 0 : TVirtualMC::GetMC()->Gsvolu("BA62", "BOX", kAir, lbox, 3);
786 0 : TVirtualMC::GetMC()->Gspos("BA62", 1, "BA59", 0.25, 0.0, 0.0, 0, "ONLY");
787 :
788 0 : dz = -iFrH0 / 2. + longH / 2. - 1. * sin10 + dext;
789 0 : dx = hR * tan10 - longW / 4. * cos10 - 0.065;
790 0 : for (jmod = 0; jmod < 18; jmod++) {
791 0 : TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+1, module[jmod], dx, 0.0, dz, idrotm[2096], "ONLY");
792 0 : TVirtualMC::GetMC()->Gspos("BA59", 2*jmod+2, module[jmod], -dx, 0.0, dz, idrotm[2087], "ONLY");
793 : }
794 :
795 : //
796 : // Rails for TRD
797 : //
798 : // Pos 1
799 : //
800 : // angular 80 deg profile
801 0 : lbox[2] = 4.0;
802 0 : lbox[0] = 0.2;
803 0 : lbox[1] = longLI / 2.;
804 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_10", "BOX", kSteel, lbox, 3);
805 :
806 0 : ptrd1[0] = 3.;
807 0 : ptrd1[1] = 3. + 0.4 * tan10;
808 0 : ptrd1[2] = longLI / 2.;
809 0 : ptrd1[3] = 0.2;
810 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_11", "TRD1", kSteel, ptrd1, 4);
811 :
812 0 : lbox[2] = 2.0;
813 0 : lbox[0] = 0.3;
814 0 : lbox[1] = longLI / 2.;
815 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_12", "BOX", kAlu, lbox, 3);
816 0 : gGeoManager->GetVolume("BTRDR_12")->SetVisContainers();
817 :
818 0 : lbox[2] = 2.0;
819 0 : lbox[0] = 0.1;
820 0 : lbox[1] = longLI / 2.;
821 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_13", "BOX", kG10, lbox, 3);
822 0 : TVirtualMC::GetMC()->Gspos("BTRDR_13", 1, "BTRDR_12", -0.2, 0.0, 0.0, 0, "ONLY");
823 :
824 0 : lbox[2] = 0.1;
825 0 : lbox[0] = 2.0;
826 0 : lbox[1] = longLI / 2.;
827 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_14", "BOX", kG10, lbox, 3);
828 : dz = -iFrH0 / 2. + longH / 2. + dext;
829 : Float_t zpos = 80.;
830 0 : Int_t isec_1[11] = {0, 1, 2, 3, 4, 5, 13, 14, 15, 16, 17};
831 :
832 0 : for (Int_t index = 0; index < 11; index++) {
833 0 : jmod = isec_1[index];
834 0 : Float_t dz1 = dz + 3. + (zpos - 4.);
835 0 : dx0 = (hR + dz0 + zpos - 4.) * tan10 - (longW / 2. + 0.2) / cos10 - 0.05;
836 0 : if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+1, module[jmod], dx0, 0.0, dz1, idrotm[2096], "ONLY");
837 0 : if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_10", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, idrotm[2086], "ONLY");
838 0 : dx0 -= 0.5;
839 0 : if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_12", 2*jmod+1, module[jmod], dx0, 0.0, dz1, idrotm[2096], "ONLY");
840 0 : if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_12", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, idrotm[2087], "ONLY");
841 0 : dz1 += (4 - 0.2);
842 0 : dz1 += dext;
843 0 : dx0 = (hR + dz0 + zpos - 0.2) * tan10 - (longW / 2. + 3. + 0.4) / cos10;
844 0 : if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+1, module[jmod], dx0, 0.0, dz1, 0, "ONLY");
845 0 : if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_11", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, 0, "ONLY");
846 0 : dz1 -= 0.3;
847 0 : dx0 -= 0.5;
848 0 : if (jmod != 5) TVirtualMC::GetMC()->Gspos("BTRDR_14", 2*jmod+1, module[jmod], dx0, 0.0, dz1, 0, "ONLY");
849 0 : if (jmod != 13) TVirtualMC::GetMC()->Gspos("BTRDR_14", 2*jmod+2, module[jmod], -dx0, 0.0, dz1, 0, "ONLY");
850 : }
851 :
852 : // Pos 2
853 : // 40 x 10
854 0 : lbox[2] = 2.0;
855 0 : lbox[0] = 0.5;
856 0 : lbox[1] = longLI / 2.;
857 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_2", "BOX", kAlu, lbox, 3);
858 0 : lbox[2] = 2.0;
859 0 : lbox[0] = 0.1;
860 0 : lbox[1] = longLI / 2.;
861 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_21", "BOX", kG10, lbox, 3);
862 0 : TVirtualMC::GetMC()->Gspos("BTRDR_21", 1, "BTRDR_2", -0.4, 0.0, 0.0, 0, "ONLY");
863 :
864 0 : Int_t isec_2a[16] = {1, 2, 3, 4, 5, 6, 7, 8, 10, 11, 12, 13, 14, 15, 16, 17};
865 0 : for (Int_t index = 0; index < 16; index++) {
866 0 : jmod = isec_2a[index];
867 0 : dx0 = (hR + dz0 ) * tan10 + 10. * sin10 - (longW / 4. + 0.5) / cos10;
868 0 : if (jmod >8) {
869 0 : TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+1, module[jmod], dx0-1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2096], "ONLY");
870 : } else {
871 0 : TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+2, module[jmod], -dx0+1.5, 0.0, dz + 3. + 8. * cos10, idrotm[2087], "ONLY");
872 : }
873 : }
874 :
875 0 : Int_t isec_2b[6] = {6, 7, 8, 10, 11, 12};
876 0 : for (Int_t index = 0; index < 6; index++) {
877 0 : jmod = isec_2b[index];
878 0 : dx0 = (hR + dz0 + zpos - 3.) * tan10 - (longW / 4. + 0.5) / cos10;
879 0 : if (index < 3) {
880 0 : TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+2, module[jmod], -dx0+1.5, 0.0, dz + 3. + zpos - 3., idrotm[2087], "ONLY");
881 : } else {
882 0 : TVirtualMC::GetMC()->Gspos("BTRDR_2", 2*jmod+1, module[jmod], dx0-1.5, 0.0, dz + 3. + zpos -3. , idrotm[2096], "ONLY");
883 : }
884 : }
885 :
886 :
887 : // Pos 3
888 : // 40 x 14
889 0 : lbox[0] = 2.0;
890 0 : lbox[2] = 0.7;
891 0 : lbox[1] = longLI / 2.;
892 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_3", "BOX", kAlu, lbox, 3);
893 :
894 0 : lbox[0] = 2.0;
895 0 : lbox[2] = 0.1;
896 0 : lbox[1] = longLI / 2.;
897 0 : TVirtualMC::GetMC()->Gsvolu("BTRDR_31", "BOX", kG10, lbox, 3);
898 0 : TVirtualMC::GetMC()->Gspos("BTRDR_31", 1, "BTRDR_3", 0, 0.0, 0.6, 0, "ONLY");
899 :
900 0 : Int_t isec_3[9] = {5, 6, 7, 8, 9, 10, 11, 12, 13};
901 :
902 :
903 :
904 0 : for (Int_t index = 0; index < 9; index++) {
905 0 : jmod = isec_3[index];
906 0 : if (index > 1) TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+1, module[jmod], 50.96-5-2., 0.0, dz+3.7, 0, "ONLY");
907 0 : if (index < 7) TVirtualMC::GetMC()->Gspos("BTRDR_3", 2*jmod+2, module[jmod], -50.96+5+2., 0.0, dz+3.7, 0, "ONLY");
908 : }
909 : //
910 : // Fixation Blocks with tie anchors
911 : //
912 : // inner
913 0 : Float_t thetFB1 = 10./180. * TMath::Pi();
914 0 : Float_t thetFB2 = 40./180. * TMath::Pi();
915 : // half height of the block
916 : Double_t dzFB = 6.;
917 : // half width of the block
918 : Float_t dyFB = 3.9/2.;
919 : // lenth upper face
920 : Float_t dxFB = 46.;
921 : // lower face
922 0 : Float_t dx1FB = dxFB/2. - 2. * dzFB * TMath::Tan(thetFB1);
923 0 : Float_t dx2FB = dxFB/2. - 2. * dzFB * TMath::Tan(thetFB2);
924 :
925 0 : TGeoArb8* shFB1 = new TGeoArb8(dzFB);
926 0 : shFB1->SetVertex(0, -dyFB/2., -dxFB/2.);
927 0 : shFB1->SetVertex(1, -dyFB/2., dxFB/2.);
928 0 : shFB1->SetVertex(2, dyFB/2., dxFB/2.);
929 0 : shFB1->SetVertex(3, dyFB/2., -dxFB/2.);
930 :
931 0 : shFB1->SetVertex(4, -dyFB/2., -dx1FB);
932 0 : shFB1->SetVertex(5, -dyFB/2., dx2FB);
933 0 : shFB1->SetVertex(6, dyFB/2., dx2FB);
934 0 : shFB1->SetVertex(7, dyFB/2., -dx1FB);
935 :
936 0 : TGeoVolume* volFB1 = new TGeoVolume("BTRD_FB1", shFB1, kMedAlu);
937 : //
938 : // tie anchors rectangular profile 4 x 8
939 0 : TGeoVolume* volTAR11 = new TGeoVolume("BTRD_TAR11",
940 0 : new TGeoBBox(dyFB/2., dxFB/2.-0.7, 4.),
941 : kMedAlu);
942 0 : TGeoVolume* volTAR12 = new TGeoVolume("BTRD_TAR12",
943 0 : new TGeoBBox(dyFB/2.-0.25, dxFB/2., 3.-0.5),
944 : kMedAir);
945 0 : volTAR11->AddNode(volTAR12, 1, new TGeoTranslation(0.25, 0., 0.0));
946 : // clamp (about twice the length of the block), 6 mm thick (read off from a foto)
947 0 : TGeoVolume* volTAR13 = new TGeoVolume("BTRD_TAR13",
948 0 : new TGeoBBox(0.3, 45., 3.),
949 : kMedAlu);
950 : // square block with screw r = 0.9 cm
951 0 : TGeoVolume* volTAR141 = new TGeoVolume("BTRD_TAR141",
952 0 : new TGeoBBox(1., 2., 6.),
953 : kMedAir);
954 0 : TGeoVolume* volTAR142 = new TGeoVolume("BTRD_TAR142",
955 0 : new TGeoBBox(1., 2., 6.),
956 : kMedAir);
957 :
958 0 : TGeoVolume* volTAR15 = new TGeoVolume("BTRD_TAR15", new TGeoBBox(1., 2., 3.), kMedAlu);
959 0 : TGeoVolume* volTAR16 = new TGeoVolume("BTRD_TAR16", new TGeoTubeSeg(0., 0.78, 1.5, 90., 270.), kMedSteel);
960 0 : TGeoVolume* volTAR17 = new TGeoVolume("BTRD_TAR17", new TGeoTubeSeg(0., 0.78, 1.5, -90, 90.), kMedSteel);
961 0 : volTAR141->AddNode(volTAR15, 1, new TGeoTranslation(0, 0, 0));
962 0 : volTAR141->AddNode(volTAR16, 1, new TGeoTranslation(1., 0, +4.5));
963 0 : volTAR141->AddNode(volTAR16, 2, new TGeoTranslation(1., 0, -4.5));
964 :
965 0 : volTAR142->AddNode(volTAR15, 1, new TGeoTranslation(0, 0, 0));
966 0 : volTAR142->AddNode(volTAR17, 1, new TGeoTranslation(-1., 0, +4.5));
967 0 : volTAR142->AddNode(volTAR17, 2, new TGeoTranslation(-1., 0, -4.5));
968 :
969 0 : TGeoVolumeAssembly* asFB1 = new TGeoVolumeAssembly("BTRD_FBAS1");
970 0 : TGeoVolumeAssembly* asFB2 = new TGeoVolumeAssembly("BTRD_FBAS2");
971 0 : asFB1->AddNode(volFB1, 1, gGeoIdentity);
972 0 : asFB1->AddNode(volTAR11, 1, new TGeoTranslation(0., 0., -dzFB - 3.));
973 0 : asFB1->AddNode(volTAR13, 1, new TGeoTranslation(-1.36, 4.5, -dzFB-3.));
974 0 : asFB1->AddNode(volTAR141, 1, new TGeoTranslation(0., dxFB-2.+4.5, -dzFB-3.));
975 0 : asFB1->AddNode(volTAR141, 2, new TGeoTranslation(0., -dxFB+2.+4.5, -dzFB-3.));
976 :
977 0 : asFB2->AddNode(volFB1, 2, gGeoIdentity);
978 0 : asFB2->AddNode(volTAR11, 2, new TGeoTranslation(0., 0., -dzFB - 3.));
979 0 : asFB2->AddNode(volTAR13, 2, new TGeoTranslation(1.36, 4.5, -dzFB-3.));
980 0 : asFB2->AddNode(volTAR142, 3, new TGeoTranslation(0., dxFB-2.+4.5, -dzFB-3.));
981 0 : asFB2->AddNode(volTAR142, 4, new TGeoTranslation(0., -dxFB+2.+4.5, -dzFB-3.));
982 : //
983 : // Fixation block outer
984 : //
985 0 : thetFB1 = 20./180. * TMath::Pi();
986 0 : thetFB2 = 27./180. * TMath::Pi();
987 :
988 : dxFB = 42.0;
989 :
990 0 : dx1FB = dxFB/2. - 2. * dzFB * TMath::Tan(thetFB1);
991 0 : dx2FB = dxFB/2. - 2. * dzFB * TMath::Tan(thetFB2);
992 :
993 0 : TGeoArb8* shFB2 = new TGeoArb8(dzFB);
994 0 : shFB2->SetVertex(0, -dyFB/2., -dxFB/2.);
995 0 : shFB2->SetVertex(1, -dyFB/2., dxFB/2.);
996 0 : shFB2->SetVertex(2, dyFB/2., dxFB/2.);
997 0 : shFB2->SetVertex(3, dyFB/2., -dxFB/2.);
998 :
999 0 : shFB2->SetVertex(4, -dyFB/2., -dx1FB);
1000 0 : shFB2->SetVertex(5, -dyFB/2., dx2FB);
1001 0 : shFB2->SetVertex(6, dyFB/2., dx2FB);
1002 0 : shFB2->SetVertex(7, dyFB/2., -dx1FB);
1003 :
1004 0 : TGeoVolume* volFB2 = new TGeoVolume("BTRD_FB2", shFB2, kMedAlu);
1005 0 : TGeoVolume* volTAR21 = new TGeoVolume("BTRD_TAR21",
1006 0 : new TGeoBBox(dyFB/2., dxFB/2., 3.),
1007 : kMedAlu);
1008 0 : TGeoVolume* volTAR22 = new TGeoVolume("BTRD_TAR22",
1009 0 : new TGeoBBox(dyFB/2.-0.25, dxFB/2., 3.-0.5),
1010 : kMedAir);
1011 0 : volTAR21->AddNode(volTAR22, 1, new TGeoTranslation(-0.25, 0., 0.0));
1012 : // tie anchor
1013 0 : TGeoVolume* volTAR23 = new TGeoVolume("BTRD_TAR23", new TGeoBBox(0.3, 40., 3.), kMedAlu);
1014 :
1015 :
1016 0 : TGeoVolumeAssembly* asFB3 = new TGeoVolumeAssembly("BTRD_FBAS3");
1017 0 : TGeoVolumeAssembly* asFB4 = new TGeoVolumeAssembly("BTRD_FBAS4");
1018 0 : asFB3->AddNode(volFB2, 1, gGeoIdentity);
1019 0 : asFB3->AddNode(volTAR21, 1, new TGeoTranslation(0., 0., -dzFB - 3.));
1020 0 : asFB3->AddNode(volTAR23, 1, new TGeoTranslation(-1.36, 0., -dzFB-3.));
1021 0 : asFB3->AddNode(volTAR141, 1, new TGeoTranslation(0., dxFB-2., -dzFB-3.));
1022 0 : asFB3->AddNode(volTAR141, 2, new TGeoTranslation(0., -dxFB+2., -dzFB-3.));
1023 :
1024 0 : asFB4->AddNode(volFB2, 2, gGeoIdentity);
1025 0 : asFB4->AddNode(volTAR21, 2, new TGeoTranslation(0., 0., -dzFB - 3.));
1026 0 : asFB4->AddNode(volTAR23, 2, new TGeoTranslation(1.36, 0.5, -dzFB-3.));
1027 0 : asFB4->AddNode(volTAR142, 3, new TGeoTranslation(0., dxFB-2.+0.5, -dzFB-3.));
1028 0 : asFB4->AddNode(volTAR142, 4, new TGeoTranslation(0., -dxFB+2.+0.5, -dzFB-3.));
1029 :
1030 : Float_t zTA1 = 21.1;
1031 : Float_t yFB1 = 87.6;
1032 : Float_t yFB2 = 231.4;
1033 0 : dx = ((hR - longH/2. + iFrH0 / 2. ) - dext + zTA1) * tan10 -3.9/4.;
1034 :
1035 0 : for (Int_t index = 0; index < 11; index++) {
1036 0 : Int_t imod = isec_1[index];
1037 0 : if (imod !=5)
1038 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS2", index, module[imod], dx, -yFB1, zTA1, idrotm[2097] , "ONLY");
1039 :
1040 0 : if (imod != 13)
1041 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS1", 11+index, module[imod], -dx, -yFB1, zTA1, idrotm[2087] , "ONLY");
1042 :
1043 0 : if (imod != 5)
1044 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS1", 22+index, module[imod], dx, yFB1, zTA1, idrotm[2096] , "ONLY");
1045 :
1046 0 : if (imod != 13)
1047 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS2", 33+index, module[imod], -dx, yFB1, zTA1, idrotm[2086] , "ONLY");
1048 :
1049 0 : if (imod != 5)
1050 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS4", index, module[imod], dx, -yFB2, zTA1, idrotm[2097] , "ONLY");
1051 :
1052 0 : if (imod !=13)
1053 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS3", 11+index, module[imod], -dx, -yFB2, zTA1, idrotm[2087] , "ONLY");
1054 :
1055 0 : if (imod != 5)
1056 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS3", 22+index, module[imod], dx, yFB2, zTA1, idrotm[2096] , "ONLY");
1057 :
1058 0 : if (imod !=13)
1059 0 : TVirtualMC::GetMC()->Gspos("BTRD_FBAS4", 33+index, module[imod], -dx, yFB2, zTA1, idrotm[2086] , "ONLY");
1060 : }
1061 :
1062 : //
1063 : // TOF Support Structures
1064 :
1065 : //
1066 : // Frame extension rectangular beams
1067 0 : lbox[0] = 6;
1068 0 : lbox[1] = 3.;
1069 0 : lbox[2] = 36.0;
1070 0 : TGeoVolume* voBTOFS1 = new TGeoVolume("BTOFS1", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Steel"));
1071 0 : lbox[0] = 5.5;
1072 0 : lbox[1] = 2.5;
1073 0 : lbox[2] = 36.0;
1074 0 : TGeoVolume* voBTOFS11 = new TGeoVolume("BTOFS11", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Air"));
1075 0 : voBTOFS1->AddNode(voBTOFS11, 1, gGeoIdentity);
1076 :
1077 : //
1078 : // Frame extension rectangular beams
1079 : // upper clamps
1080 0 : TGeoXtru* shBTOFS2 = new TGeoXtru(2);
1081 0 : TGeoXtru* shBTOFS3 = new TGeoXtru(2);
1082 0 : TGeoXtru* shBTOFS4 = new TGeoXtru(2);
1083 0 : TGeoXtru* shBTOFS5 = new TGeoXtru(2);
1084 :
1085 0 : Double_t xxtru1[7];
1086 0 : Double_t yxtru1[7];
1087 : // 1
1088 0 : xxtru1[0] = 8.5;
1089 0 : yxtru1[0] = 4.5;
1090 : // 2
1091 0 : xxtru1[1] = -6.0;
1092 0 : yxtru1[1] = 4.5;
1093 : // 3
1094 0 : xxtru1[2] = -8.5;
1095 0 : yxtru1[2] = 4.5 - 2.5 * sin10;
1096 : // 4
1097 0 : xxtru1[3] = 8.5 - 14.5 / cos10;
1098 0 : yxtru1[3] = -6. - 14.5 * sin10;
1099 : // 5
1100 0 : xxtru1[4] = 8.5 - 10.5 / cos10;
1101 0 : yxtru1[4] = -6. - 10.5 * sin10;
1102 : // 6
1103 0 : xxtru1[5] = xxtru1[4] + 8. * sin10;
1104 0 : yxtru1[5] = yxtru1[4] - 8./cos10;
1105 : // 7
1106 0 : xxtru1[6] = 8.5;
1107 0 : yxtru1[6] = -6.0;
1108 :
1109 0 : Double_t xxtru2[7];
1110 0 : for (i = 0; i < 7; i++) xxtru2[i] = -xxtru1[i];
1111 :
1112 0 : Double_t xxtru3[5];
1113 0 : Double_t yxtru3[5];
1114 0 : Double_t xxtru4[5];
1115 0 : for (i = 0; i < 4; i++) {
1116 0 : xxtru3[i] = xxtru1[i];
1117 0 : yxtru3[i] = yxtru1[i];
1118 : }
1119 0 : xxtru3[4] = xxtru1[6];
1120 0 : yxtru3[4] = yxtru1[6];
1121 0 : for (i = 0; i < 5; i++) xxtru4[i] = -xxtru3[i];
1122 :
1123 0 : shBTOFS2->DefinePolygon(7, xxtru1, yxtru1);
1124 0 : shBTOFS2->DefineSection(0, -4.);
1125 0 : shBTOFS2->DefineSection(1, +4.);
1126 :
1127 0 : shBTOFS3->DefinePolygon(7, xxtru2, yxtru1);
1128 0 : shBTOFS3->DefineSection(0, -4.);
1129 0 : shBTOFS3->DefineSection(1, +4.);
1130 0 : TGeoVolume* voBTOFS2 = new TGeoVolume("BTOFS2", shBTOFS2, gGeoManager->GetMedium("FRAME_Steel"));
1131 0 : TGeoVolume* voBTOFS3 = new TGeoVolume("BTOFS3", shBTOFS3, gGeoManager->GetMedium("FRAME_Steel"));
1132 :
1133 : // different fixation for clamps close to web frame
1134 0 : shBTOFS4->DefinePolygon(5, xxtru3, yxtru3);
1135 0 : shBTOFS4->DefineSection(0, -4.);
1136 0 : shBTOFS4->DefineSection(1, +4.);
1137 :
1138 0 : shBTOFS5->DefinePolygon(5, xxtru4, yxtru3);
1139 0 : shBTOFS5->DefineSection(0, -4.);
1140 0 : shBTOFS5->DefineSection(1, +4.);
1141 0 : TGeoVolume* voBTOFS4 = new TGeoVolume("BTOFS4", shBTOFS4, gGeoManager->GetMedium("FRAME_Steel"));
1142 0 : TGeoVolume* voBTOFS5 = new TGeoVolume("BTOFS5", shBTOFS5, gGeoManager->GetMedium("FRAME_Steel"));
1143 :
1144 :
1145 0 : lbox[0] = 5.5;
1146 0 : lbox[1] = 2.5;
1147 0 : lbox[2] = 4.0;
1148 0 : TGeoVolume* voBTOFS21 = new TGeoVolume("BTOFS21", new TGeoBBox(lbox), gGeoManager->GetMedium("FRAME_Air"));
1149 0 : voBTOFS2->AddNode(voBTOFS21, 1, gGeoIdentity);
1150 0 : voBTOFS3->AddNode(voBTOFS21, 2, gGeoIdentity);
1151 0 : voBTOFS4->AddNode(voBTOFS21, 3, gGeoIdentity);
1152 0 : voBTOFS5->AddNode(voBTOFS21, 4, gGeoIdentity);
1153 :
1154 0 : TGeoVolumeAssembly* asTOFS00 = new TGeoVolumeAssembly("BTOFS00");
1155 0 : asTOFS00->AddNode(voBTOFS1, 1, gGeoIdentity);
1156 0 : asTOFS00->AddNode(voBTOFS2, 1, new TGeoTranslation(0., 0., 40.));
1157 0 : asTOFS00->AddNode(voBTOFS2, 2, new TGeoTranslation(0., 0., -40.));
1158 :
1159 0 : TGeoVolumeAssembly* asTOFS01 = new TGeoVolumeAssembly("BTOFS01");
1160 0 : asTOFS01->AddNode(voBTOFS1, 2, gGeoIdentity);
1161 0 : asTOFS01->AddNode(voBTOFS3, 1, new TGeoTranslation(0., 0., 40.));
1162 0 : asTOFS01->AddNode(voBTOFS3, 2, new TGeoTranslation(0., 0., -40.));
1163 :
1164 0 : TGeoVolumeAssembly* asTOFS02 = new TGeoVolumeAssembly("BTOFS02");
1165 0 : asTOFS02->AddNode(voBTOFS1, 3, gGeoIdentity);
1166 0 : asTOFS02->AddNode(voBTOFS2, 3, new TGeoTranslation(0., 0., -40.));
1167 0 : asTOFS02->AddNode(voBTOFS4, 2, new TGeoTranslation(0., 0., 40.));
1168 :
1169 0 : TGeoVolumeAssembly* asTOFS03 = new TGeoVolumeAssembly("BTOFS03");
1170 0 : asTOFS03->AddNode(voBTOFS1, 4, gGeoIdentity);
1171 0 : asTOFS03->AddNode(voBTOFS3, 3, new TGeoTranslation(0., 0., -40.));
1172 0 : asTOFS03->AddNode(voBTOFS5, 2, new TGeoTranslation(0., 0., 40.));
1173 :
1174 :
1175 0 : asTOFS00->SetVisibility(1);
1176 0 : asTOFS01->SetVisibility(1);
1177 :
1178 0 : for (i = 0; i < 18; i++) {
1179 0 : Float_t phi1 = i * 20.;
1180 0 : Float_t phi2 = 270. + phi1;
1181 0 : rot1 = new TGeoRotation(Form("TOFS_R1_%d", i), 90.0, phi1, 90., phi2, 0., 0.);
1182 0 : dx = TMath::Sin((phi1+8.95) * kdeg2rad) * (rout2 + 12.);
1183 0 : dy = -TMath::Cos((phi1+8.95) * kdeg2rad) * (rout2 + 12.);
1184 0 : if ((i >3 && i < 8) || (i > 10 && i < 15)) {
1185 0 : (gGeoManager->GetVolume("B077"))->AddNode(asTOFS03, i, new TGeoCombiTrans(dx, dy, 345.-53.-0.5, rot1));
1186 : } else {
1187 0 : (gGeoManager->GetVolume("B077"))->AddNode(asTOFS01, i, new TGeoCombiTrans(dx, dy, 345.-53.-0.5, rot1));
1188 : }
1189 0 : dx = TMath::Sin((phi1-8.95) * kdeg2rad) * (rout2 + 12.);
1190 0 : dy = -TMath::Cos((phi1-8.95) * kdeg2rad) * (rout2 + 12.);
1191 0 : if ((i >3 && i < 8) || (i > 10 && i <= 15)) {
1192 0 : (gGeoManager->GetVolume("B077"))->AddNode(asTOFS02, i, new TGeoCombiTrans(dx, dy, 345.-53-0.5, rot1));
1193 : } else {
1194 0 : (gGeoManager->GetVolume("B077"))->AddNode(asTOFS00, i, new TGeoCombiTrans(dx, dy, 345.-53-0.5, rot1));
1195 : }
1196 : }
1197 :
1198 : //
1199 : // Thermal shield
1200 : //
1201 :
1202 : Float_t dyM = 99.0;
1203 0 : MakeHeatScreen("M", dyM, idrotm[2090], idrotm[2091]);
1204 : Float_t dyAM = 119.5;
1205 0 : MakeHeatScreen("AM", dyAM, idrotm[2090], idrotm[2091]);
1206 : Float_t dyA = 122.5 - 5.5;
1207 0 : MakeHeatScreen("A" , dyA, idrotm[2090], idrotm[2091]);
1208 :
1209 : //
1210 : //
1211 : //
1212 : dz = -57.2 + 0.6;
1213 0 : for (i = 0; i < 18; i++) {
1214 :
1215 0 : char nameMo[16];
1216 0 : snprintf(nameMo, 16, "BSEGMO%d",i);
1217 : // M
1218 0 : TVirtualMC::GetMC()->Gspos("BTSH_M" , i+1 , nameMo, 0., 0., dz, 0, "ONLY");
1219 : // AM, CM
1220 0 : dy = dymodL[0] + dyAM / 2. + 3.;
1221 0 : TVirtualMC::GetMC()->Gspos("BTSH_AM", i+ 1, nameMo, 0., dy, dz, 0, "ONLY");
1222 0 : TVirtualMC::GetMC()->Gspos("BTSH_AM", i+19, nameMo, 0., -dy, dz, 0, "ONLY");
1223 : // A, C
1224 0 : dy = dymodL[1] + dyA / 2 + 0.4;
1225 0 : TVirtualMC::GetMC()->Gspos("BTSH_A" , i+ 1, nameMo, 0., dy, dz, 0, "ONLY");
1226 0 : TVirtualMC::GetMC()->Gspos("BTSH_A" , i+19, nameMo, 0., -dy, dz, 0, "ONLY");
1227 0 : }
1228 :
1229 :
1230 : //
1231 : // TRD mother volumes
1232 : //
1233 : // absolute position of center 290.43 + 38.95 = 329.38
1234 : // frame center 283.00 + 59.50 = 342.50
1235 : // relative position of TRD 329.38 - 342.50
1236 : //
1237 : // shift wrt v2
1238 : //
1239 : const Float_t zsh = -0.326;
1240 : //
1241 0 : ptrd1[0] = 47.4405; // CBL 28/6/2006
1242 0 : ptrd1[1] = 61.1765; // CBL
1243 0 : ptrd1[2] = 375.5; // CBL
1244 0 : ptrd1[3] = 38.95; // CBL
1245 :
1246 0 : for (i = 0; i < 18; i++) {
1247 0 : char nameCh[16];
1248 0 : snprintf(nameCh, 16, "BTRD%d",i);
1249 0 : char nameMo[16];
1250 0 : snprintf(nameMo, 16, "BSEGMO%d",i);
1251 0 : TVirtualMC::GetMC()->Gsvolu(nameCh, "TRD1", kAir, ptrd1, 4);
1252 0 : gGeoManager->GetVolume(nameCh)->SetVisibility(kFALSE);
1253 0 : TVirtualMC::GetMC()->Gspos(nameCh, 1, nameMo, 0., 0., -12.62 + zsh, 0, "ONLY"); // CBL 28/6/2006
1254 0 : }
1255 :
1256 : //
1257 : // TOF mother volumes as modified by B.Guerzoni
1258 : // to remove overlaps/extrusions in case of aligned TOF SMs
1259 : //
1260 0 : ptrd1[0] = 62.2500;
1261 0 : ptrd1[1] = 64.25;
1262 0 : ptrd1[2] = 372.6;
1263 0 : ptrd1[3] = 14.525/2;
1264 :
1265 0 : char nameChA[16];
1266 0 : snprintf(nameChA, 16, "BTOFA");
1267 0 : TGeoTrd1 *trd1=new TGeoTrd1(nameChA,ptrd1[0],ptrd1[1],ptrd1[2],ptrd1[3]);
1268 0 : trd1->SetName("BTOFA"); // just to avoid a warning
1269 :
1270 0 : char nameChB[16];
1271 0 : snprintf(nameChB, 16, "BTOFB");
1272 0 : TGeoBBox *box1 = new TGeoBBox(nameChB,64.25, 372.6, 1.0);
1273 0 : box1->SetName("BTOFB"); // just to avoid a warning
1274 :
1275 0 : char nameChC[16];
1276 0 : snprintf(nameChC, 16, "BTOFC");
1277 0 : TGeoBBox *box2 = new TGeoBBox(nameChC,62.25, 372.6, 6.2625);
1278 0 : box2->SetName("BTOFC"); // just to avoid a warning
1279 :
1280 0 : TGeoTranslation *tr1 = new TGeoTranslation("trnsl1",0, 0, -14.525/2 );
1281 0 : tr1->RegisterYourself();
1282 0 : TGeoTranslation *tr2 = new TGeoTranslation("trnsl2",0, 0, +1.0 );
1283 0 : tr2->RegisterYourself();
1284 0 : TGeoTranslation *tr3 = new TGeoTranslation("trnsl3",0, 0, 8.2625 );
1285 0 : tr3->RegisterYourself();
1286 0 : TGeoCompositeShape *btofcs =new TGeoCompositeShape("Btofcs","(BTOFA:trnsl1)+(BTOFB:trnsl2)+(BTOFC:trnsl3)");
1287 0 : for (i = 0; i < 18; i++) {
1288 0 : char nameCh[16];
1289 0 : snprintf(nameCh, 16, "BTOF%d",i);
1290 0 : char nameMo[16];
1291 0 : snprintf(nameMo, 16, "BSEGMO%d",i);
1292 0 : TGeoVolume* btf = new TGeoVolume(nameCh, btofcs, gGeoManager->GetMedium("FRAME_Air"));
1293 0 : btf->SetName(nameCh);
1294 0 : gGeoManager->GetVolume(nameCh)->SetVisibility(kFALSE);
1295 0 : TVirtualMC::GetMC()->Gspos(nameCh, 1, nameMo, 0., 0., 43.525 + zsh, 0, "ONLY");
1296 0 : }
1297 :
1298 : //Create TOF Rail
1299 0 : char nameRaV1[16];
1300 0 : snprintf(nameRaV1, 16, "RaV1");
1301 0 : TGeoBBox *boxRaV1 = new TGeoBBox(nameRaV1, 0.5 ,350.0, 1.5);
1302 0 : char nameRaO1[16];
1303 0 : snprintf(nameRaO1, 16, "RaO1");
1304 0 : TGeoBBox *boxRaO1 = new TGeoBBox(nameRaO1, 1.5 ,350.0, 0.5);
1305 0 : TGeoCompositeShape* C1=(TGeoCompositeShape*) CreateTOFRail(45.61);
1306 0 : C1->SetName("C1");
1307 0 : TGeoCompositeShape* C2=(TGeoCompositeShape*) CreateTOFRail(61.61);
1308 0 : C2->SetName("C2");
1309 0 : TGeoCompositeShape* C3=(TGeoCompositeShape*) CreateTOFRail(63.11);
1310 0 : C3->SetName("C3");
1311 0 : TGeoCompositeShape* C4=(TGeoCompositeShape*) CreateTOFRail(61.61);
1312 0 : C4->SetName("C4");
1313 0 : TGeoCompositeShape* C5=(TGeoCompositeShape*) CreateTOFRail(45.61);
1314 0 : C5->SetName("C5");
1315 0 : TGeoTranslation *trRaO1 = new TGeoTranslation("trRaO1",1., 0., -2.);
1316 0 : trRaO1->RegisterYourself();
1317 0 : TGeoTranslation *trC1 = new TGeoTranslation("trC1",-3.39, -286.6, -0.15);
1318 0 : trC1->RegisterYourself();
1319 0 : TGeoTranslation *trC2 = new TGeoTranslation("trC2",-3.39, -152., -0.15);
1320 0 : trC2->RegisterYourself();
1321 0 : TGeoTranslation *trC3 = new TGeoTranslation("trC3",-3.39, +8.5, -0.15);
1322 0 : trC3->RegisterYourself();
1323 0 : TGeoTranslation *trC4 = new TGeoTranslation("trC4",-3.39, +151.8, -0.15);
1324 0 : trC4->RegisterYourself();
1325 0 : TGeoTranslation *trC5 = new TGeoTranslation("trC5",-3.39, 286.6, -0.15);
1326 0 : trC5->RegisterYourself();
1327 :
1328 0 : TGeoCompositeShape *TOFrail =new TGeoCompositeShape("TOFrail","(RaV1+RaO1:trRaO1)+C1:trC1+C2:trC2+C3:trC3+C4:trC4+C5:trC5");
1329 :
1330 0 : char nameTR[16];
1331 0 : snprintf(nameTR, 16, "VolTOFrail");
1332 0 : TGeoVolume* VolTOFrail = new TGeoVolume(nameTR, TOFrail, gGeoManager->GetMedium("FRAME_Aluminum"));
1333 0 : VolTOFrail->SetName(nameTR);
1334 0 : gGeoManager->GetVolume(nameTR)->SetVisibility(kTRUE);
1335 0 : AliMatrix(idrotm[2102], 90.0, 180.0, 90.0, 270.0, 0.0, 180.0);
1336 :
1337 0 : for (i = 0; i < 18; i++) {
1338 0 : char nameMo[16];
1339 0 : snprintf(nameMo, 16, "BSEGMO%d",i);
1340 0 : TVirtualMC::GetMC()->Gspos("VolTOFrail", 2*i, nameMo, -66.27, 0., +56.33 + zsh, 0, "ONLY");
1341 0 : TVirtualMC::GetMC()->Gspos("VolTOFrail", 2*i+1, nameMo, 66.27, 0., +56.33 + zsh, idrotm[2102], "ONLY");
1342 0 : }
1343 :
1344 : //
1345 : // Geometry of Rails starts here
1346 : //
1347 : //
1348 : //
1349 : // Rails for space-frame
1350 : //
1351 0 : Float_t rbox[3];
1352 :
1353 0 : rbox[0] = 25.00;
1354 0 : rbox[1] = 27.50;
1355 0 : rbox[2] = 600.00;
1356 0 : TVirtualMC::GetMC()->Gsvolu("BRS1", "BOX", kAir, rbox, 3);
1357 :
1358 0 : rbox[0] = 25.00;
1359 0 : rbox[1] = 3.75;
1360 0 : TVirtualMC::GetMC()->Gsvolu("BRS2", "BOX", kSteel, rbox, 3);
1361 :
1362 0 : rbox[0] = 3.00;
1363 0 : rbox[1] = 20.00;
1364 0 : TVirtualMC::GetMC()->Gsvolu("BRS3", "BOX", kSteel, rbox, 3);
1365 :
1366 0 : TVirtualMC::GetMC()->Gspos("BRS2", 1, "BRS1", 0., -27.5+3.75, 0., 0, "ONLY");
1367 0 : TVirtualMC::GetMC()->Gspos("BRS2", 2, "BRS1", 0., 27.5-3.75, 0., 0, "ONLY");
1368 0 : TVirtualMC::GetMC()->Gspos("BRS3", 1, "BRS1", 0., 0., 0., 0, "ONLY");
1369 0 : TVirtualMC::GetMC()->Gspos("BRS1", 1, "ALIC", -430.-3., -190., 0., 0, "ONLY");
1370 0 : TVirtualMC::GetMC()->Gspos("BRS1", 2, "ALIC", 430.+3., -190., 0., 0, "ONLY");
1371 :
1372 0 : rbox[0] = 3.0;
1373 0 : rbox[1] = 145./4.;
1374 0 : rbox[2] = 25.0;
1375 0 : TVirtualMC::GetMC()->Gsvolu("BRS4", "BOX", kSteel, rbox, 3);
1376 :
1377 0 : TVirtualMC::GetMC()->Gspos("BRS4", 1, "ALIC", 430.+3., -190.+55./2.+rbox[1], 224., 0, "ONLY");
1378 0 : TVirtualMC::GetMC()->Gspos("BRS4", 2, "ALIC", 430.+3., -190.+55./2.+rbox[1], -224., 0, "ONLY");
1379 :
1380 : //
1381 : // The Backframe
1382 : //
1383 : // Inner radius
1384 : Float_t kBFMRin = 270.0;
1385 : // Outer Radius
1386 : Float_t kBFMRou = 417.5;
1387 : // Width
1388 : Float_t kBFMdz = 118.0;
1389 : //
1390 : //
1391 : // Rings
1392 : Float_t kBFRdr = 7.5;
1393 : Float_t kBFRdz = 8.0;
1394 : //
1395 : //
1396 : // Bars and Spokes
1397 : //
1398 : Float_t kBFBd = 8.0;
1399 : Float_t kBFBdd = 0.6;
1400 :
1401 :
1402 : // The Mother volume
1403 0 : Float_t tpar[3];
1404 0 : tpar[0] = kBFMRin;
1405 0 : tpar[1] = kBFMRou;
1406 0 : tpar[2] = kBFMdz / 2.;
1407 0 : TVirtualMC::GetMC()->Gsvolu("BFMO", "TUBE", kAir, tpar, 3);
1408 :
1409 : // CBL ////////////////////////////////////////////////////////
1410 : //
1411 : // TRD mother volume
1412 : //
1413 :
1414 0 : ptrd1[0] = 47.4405 - 0.3;
1415 0 : ptrd1[1] = 61.1765 - 0.3;
1416 0 : ptrd1[2] = kBFMdz / 2.;
1417 0 : ptrd1[3] = 38.95;
1418 0 : TVirtualMC::GetMC()->Gsvolu("BFTRD", "TRD1", kAir, ptrd1, 4);
1419 0 : gGeoManager->GetVolume("BFTRD")->SetVisibility(kFALSE);
1420 :
1421 0 : for (i = 0; i < 18; i++) {
1422 :
1423 0 : Float_t phiBF = i * 20.0;
1424 0 : dx = TMath::Sin(phiBF*kdeg2rad)*(342.0-12.62);
1425 0 : dy = -TMath::Cos(phiBF*kdeg2rad)*(342.0-12.62);
1426 0 : TVirtualMC::GetMC()->Gspos("BFTRD",i,"BFMO",dx,dy,0.0,idrotm[2034+i],"ONLY");
1427 :
1428 : }
1429 :
1430 : // CBL ////////////////////////////////////////////////////////
1431 :
1432 : // Rings
1433 : //
1434 : // Inner Ring
1435 0 : tpar[0] = kBFMRin;
1436 0 : tpar[1] = tpar[0] + kBFRdr;
1437 0 : tpar[2] = kBFRdz / 2.;
1438 :
1439 0 : TVirtualMC::GetMC()->Gsvolu("BFIR", "TUBE", kSteel, tpar, 3);
1440 :
1441 0 : tpar[0] = tpar[0] + kBFBdd;
1442 0 : tpar[1] = tpar[1] - kBFBdd;
1443 0 : tpar[2] = (kBFRdz - 2. * kBFBdd) / 2.;
1444 :
1445 0 : TVirtualMC::GetMC()->Gsvolu("BFII", "TUBE", kAir, tpar, 3);
1446 0 : TVirtualMC::GetMC()->Gspos("BFII", 1, "BFIR", 0., 0., 0., 0, "ONLY");
1447 :
1448 : //
1449 : // Outer RING
1450 0 : tpar[0] = kBFMRou - kBFRdr + 0.1;
1451 0 : tpar[1] = kBFMRou;
1452 0 : tpar[2] = kBFRdz / 2.;
1453 :
1454 0 : TVirtualMC::GetMC()->Gsvolu("BFOR", "TUBE", kSteel, tpar, 3);
1455 :
1456 0 : tpar[0] = tpar[0] + kBFBdd;
1457 0 : tpar[1] = tpar[1] - kBFBdd;
1458 0 : tpar[2] = (kBFRdz - 2. * kBFBdd) / 2.;
1459 :
1460 0 : TVirtualMC::GetMC()->Gsvolu("BFOO", "TUBE", kAir, tpar, 3);
1461 0 : TVirtualMC::GetMC()->Gspos("BFOO", 1, "BFOR", 0., 0., 0., 0, "ONLY");
1462 :
1463 :
1464 0 : dz = kBFMdz/2. - kBFRdz / 2.;
1465 0 : TVirtualMC::GetMC()->Gspos("BFIR", 1, "BFMO", 0., 0., dz, 0, "ONLY");
1466 0 : TVirtualMC::GetMC()->Gspos("BFIR", 2, "BFMO", 0., 0., -dz, 0, "ONLY");
1467 0 : TVirtualMC::GetMC()->Gspos("BFOR", 1, "BFMO", 0., 0., dz, 0, "ONLY");
1468 0 : TVirtualMC::GetMC()->Gspos("BFOR", 2, "BFMO", 0., 0., -dz, 0, "ONLY");
1469 :
1470 : //
1471 : // Longitudinal Bars
1472 : //
1473 0 : Float_t bpar[3];
1474 :
1475 0 : bpar[0] = kBFBd/2;
1476 0 : bpar[1] = bpar[0];
1477 0 : bpar[2] = kBFMdz/2. - kBFBd;
1478 0 : TVirtualMC::GetMC()->Gsvolu("BFLB", "BOX ", kSteel, bpar, 3);
1479 :
1480 0 : bpar[0] = bpar[0] - kBFBdd;
1481 0 : bpar[1] = bpar[1] - kBFBdd;
1482 0 : bpar[2] = bpar[2] - kBFBdd;
1483 0 : TVirtualMC::GetMC()->Gsvolu("BFLL", "BOX ", kAir, bpar, 3);
1484 0 : TVirtualMC::GetMC()->Gspos("BFLL", 1, "BFLB", 0., 0., 0., 0, "ONLY");
1485 :
1486 0 : for (i = 0; i < 18; i++)
1487 : {
1488 0 : Float_t ro = kBFMRou - kBFBd / 2. - 0.02;
1489 0 : Float_t ri = kBFMRin + kBFBd / 2.;
1490 :
1491 0 : Float_t phi0 = Float_t(i) * 20.;
1492 :
1493 0 : Float_t xb = ri * TMath::Cos(phi0 * kDegrad);
1494 0 : Float_t yb = ri * TMath::Sin(phi0 * kDegrad);
1495 0 : AliMatrix(idrotm[2090+i], 90.0, phi0, 90.0, phi0 + 270., 0., 0.);
1496 :
1497 0 : TVirtualMC::GetMC()->Gspos("BFLB", i + 1, "BFMO", xb, yb, 0., idrotm[2090 + i], "ONLY");
1498 :
1499 0 : xb = ro * TMath::Cos(phi0 * kDegrad);
1500 0 : yb = ro * TMath::Sin(phi0 * kDegrad);
1501 :
1502 0 : TVirtualMC::GetMC()->Gspos("BFLB", i + 19, "BFMO", xb, yb, 0., idrotm[2090 +i], "ONLY");
1503 : }
1504 :
1505 : //
1506 : // Radial Bars
1507 : //
1508 0 : bpar[0] = (kBFMRou - kBFMRin - 2. * kBFRdr) / 2.;
1509 0 : bpar[1] = kBFBd/2;
1510 0 : bpar[2] = bpar[1];
1511 : //
1512 : // Avoid overlap with circle
1513 : Float_t rr = kBFMRou - kBFRdr;
1514 0 : Float_t delta = rr - TMath::Sqrt(rr * rr - kBFBd * kBFBd / 4.) + 0.01;
1515 0 : bpar[0] -= delta /2.;
1516 :
1517 :
1518 0 : TVirtualMC::GetMC()->Gsvolu("BFRB", "BOX ", kSteel, bpar, 3);
1519 :
1520 0 : bpar[0] = bpar[0] - kBFBdd;
1521 0 : bpar[1] = bpar[1] - kBFBdd;
1522 0 : bpar[2] = bpar[2] - kBFBdd;
1523 0 : TVirtualMC::GetMC()->Gsvolu("BFRR", "BOX ", kAir, bpar, 3);
1524 0 : TVirtualMC::GetMC()->Gspos("BFRR", 1, "BFRB", 0., 0., 0., 0, "ONLY");
1525 :
1526 0 : Int_t iphi[10] = {0, 1, 3, 6, 8, 9, 10, 12, 15, 17};
1527 :
1528 0 : for (i = 0; i < 10; i++)
1529 : {
1530 :
1531 0 : Float_t rb = (kBFMRin + kBFMRou)/2.;
1532 0 : Float_t phib = Float_t(iphi[i]) * 20.;
1533 :
1534 0 : Float_t xb = rb * TMath::Cos(phib * kDegrad);
1535 0 : Float_t yb = rb * TMath::Sin(phib * kDegrad);
1536 :
1537 0 : TVirtualMC::GetMC()->Gspos("BFRB", i + 1, "BFMO", xb, yb, dz, idrotm[2034 + iphi[i]], "ONLY");
1538 0 : TVirtualMC::GetMC()->Gspos("BFRB", i + 11, "BFMO", xb, yb, -dz, idrotm[2034 + iphi[i]], "ONLY");
1539 :
1540 : }
1541 :
1542 0 : TVirtualMC::GetMC()->Gspos("BFMO", i + 19, "ALIC", 0, 0, - 376. - kBFMdz/2. - 0.5 , 0, "ONLY");
1543 :
1544 :
1545 :
1546 : //
1547 : //
1548 : // The Baby Frame
1549 : //
1550 : //
1551 : //
1552 : // Inner radius
1553 : Float_t kBBMRin = 278.0;
1554 : // Outer Radius
1555 : Float_t kBBMRou = 410.5;
1556 : // Width
1557 : Float_t kBBMdz = 223.0;
1558 : Float_t kBBBdz = 6.0;
1559 : Float_t kBBBdd = 0.6;
1560 :
1561 :
1562 : // The Mother volume
1563 :
1564 0 : ppgon[0] = 0.;
1565 0 : ppgon[1] = 360.;
1566 0 : ppgon[2] = 18.;
1567 :
1568 0 : ppgon[3] = 2.;
1569 0 : ppgon[4] = -kBBMdz / 2. ;
1570 0 : ppgon[5] = kBBMRin;
1571 0 : ppgon[6] = kBBMRou;
1572 :
1573 0 : ppgon[7] = -ppgon[4];
1574 0 : ppgon[8] = ppgon[5];
1575 0 : ppgon[9] = ppgon[6];
1576 :
1577 0 : TVirtualMC::GetMC()->Gsvolu("BBMO", "PGON", kAir, ppgon, 10);
1578 0 : TVirtualMC::GetMC()->Gsdvn("BBCE", "BBMO", 18, 2);
1579 :
1580 : // CBL ////////////////////////////////////////////////////////
1581 : //
1582 : // TRD mother volume
1583 : //
1584 :
1585 0 : AliMatrix(idrotm[2092], 90.0, 90.0, 0.0, 0.0, 90.0, 0.0);
1586 :
1587 0 : ptrd1[0] = 47.4405 - 2.5;
1588 0 : ptrd1[1] = 61.1765 - 2.5;
1589 0 : ptrd1[2] = kBBMdz / 2.;
1590 0 : ptrd1[3] = 38.95;
1591 0 : TVirtualMC::GetMC()->Gsvolu("BBTRD", "TRD1", kAir, ptrd1, 4);
1592 0 : gGeoManager->GetVolume("BBTRD")->SetVisibility(kFALSE);
1593 0 : TVirtualMC::GetMC()->Gspos("BBTRD", 1, "BBCE", 342.0-12.62, 0.0, 0.0, idrotm[2092], "ONLY");
1594 :
1595 : // CBL ////////////////////////////////////////////////////////
1596 :
1597 : // Longitudinal bars
1598 0 : bpar[0] = kBBBdz/2.;
1599 0 : bpar[1] = bpar[0];
1600 0 : bpar[2] = kBBMdz/2. - kBBBdz;
1601 0 : TVirtualMC::GetMC()->Gsvolu("BBLB", "BOX ", kSteel, bpar, 3);
1602 0 : bpar[0] -= kBBBdd;
1603 0 : bpar[1] -= kBBBdd;
1604 0 : bpar[2] -= kBBBdd;
1605 0 : TVirtualMC::GetMC()->Gsvolu("BBLL", "BOX ", kAir, bpar, 3);
1606 0 : TVirtualMC::GetMC()->Gspos("BBLL", 1, "BBLB", 0., 0., 0., 0, "ONLY");
1607 :
1608 0 : dx = kBBMRin + kBBBdz/2. + (bpar[1] + kBBBdd) * TMath::Sin(10. * kDegrad);
1609 0 : dy = dx * TMath::Tan(10. * kDegrad) - kBBBdz/2./TMath::Cos(10. * kDegrad);
1610 0 : TVirtualMC::GetMC()->Gspos("BBLB", 1, "BBCE", dx, dy, 0., idrotm[2052], "ONLY");
1611 :
1612 0 : dx = kBBMRou - kBBBdz/2. - (bpar[1] + kBBBdd) * TMath::Sin(10. * kDegrad);
1613 0 : dy = dx * TMath::Tan(10. * kDegrad) - kBBBdz/2./TMath::Cos(10. * kDegrad);
1614 :
1615 0 : TVirtualMC::GetMC()->Gspos("BBLB", 2, "BBCE", dx, dy, 0., idrotm[2052], "ONLY");
1616 :
1617 : //
1618 : // Radial Bars
1619 : //
1620 0 : bpar[0] = (kBBMRou - kBBMRin) / 2. - kBBBdz;
1621 0 : bpar[1] = kBBBdz/2;
1622 0 : bpar[2] = bpar[1];
1623 :
1624 0 : TVirtualMC::GetMC()->Gsvolu("BBRB", "BOX ", kSteel, bpar, 3);
1625 0 : bpar[0] -= kBBBdd;
1626 0 : bpar[1] -= kBBBdd;
1627 0 : bpar[2] -= kBBBdd;
1628 0 : TVirtualMC::GetMC()->Gsvolu("BBRR", "BOX ", kAir, bpar, 3);
1629 0 : TVirtualMC::GetMC()->Gspos("BBRR", 1, "BBRB", 0., 0., 0., 0, "ONLY");
1630 :
1631 :
1632 0 : dx = (kBBMRou + kBBMRin) / 2.;
1633 0 : dy = ((kBBMRou + kBBMRin)/ 2) * TMath::Tan(10 * kDegrad) - kBBBdz / 2./ TMath::Cos(10 * kDegrad);
1634 0 : dz = kBBMdz/2. - kBBBdz / 2.;
1635 :
1636 0 : TVirtualMC::GetMC()->Gspos("BBRB", 1, "BBCE", dx, dy, dz, idrotm[2052], "ONLY");
1637 0 : TVirtualMC::GetMC()->Gspos("BBRB", 2, "BBCE", dx, dy, - dz, idrotm[2052], "ONLY");
1638 0 : TVirtualMC::GetMC()->Gspos("BBRB", 3, "BBCE", dx, dy, 0., idrotm[2052], "ONLY");
1639 :
1640 : //
1641 : // Circular bars
1642 : //
1643 : // Inner
1644 :
1645 0 : bpar[1] = kBBMRin * TMath::Sin(10. * kDegrad);
1646 0 : bpar[0] = kBBBdz/2;
1647 0 : bpar[2] = bpar[0];
1648 0 : TVirtualMC::GetMC()->Gsvolu("BBC1", "BOX ", kSteel, bpar, 3);
1649 0 : bpar[0] -= kBBBdd;
1650 0 : bpar[1] -= kBBBdd;
1651 0 : bpar[2] -= kBBBdd;
1652 0 : TVirtualMC::GetMC()->Gsvolu("BBC2", "BOX ", kAir, bpar, 3);
1653 0 : TVirtualMC::GetMC()->Gspos("BBC2", 1, "BBC1", 0., 0., 0., 0, "ONLY");
1654 0 : dx = kBBMRin + kBBBdz/2;
1655 : dy = 0.;
1656 0 : TVirtualMC::GetMC()->Gspos("BBC1", 1, "BBCE", dx, dy, dz, 0, "ONLY");
1657 0 : TVirtualMC::GetMC()->Gspos("BBC1", 2, "BBCE", dx, dy, -dz, 0, "ONLY");
1658 : //
1659 : // Outer
1660 0 : bpar[1] = (kBBMRou - kBBBdz) * TMath::Sin(10. * kDegrad);
1661 0 : bpar[0] = kBBBdz/2;
1662 0 : bpar[2] = bpar[0];
1663 0 : TVirtualMC::GetMC()->Gsvolu("BBC3", "BOX ", kSteel, bpar, 3);
1664 0 : bpar[0] -= kBBBdd;
1665 0 : bpar[1] -= kBBBdd;
1666 0 : bpar[2] -= kBBBdd;
1667 0 : TVirtualMC::GetMC()->Gsvolu("BBC4", "BOX ", kAir, bpar, 3);
1668 0 : TVirtualMC::GetMC()->Gspos("BBC4", 1, "BBC3", 0., 0., 0., 0, "ONLY");
1669 0 : dx = kBBMRou - kBBBdz/2;
1670 : dy = 0.;
1671 0 : TVirtualMC::GetMC()->Gspos("BBC3", 1, "BBCE", dx, dy, dz, 0, "ONLY");
1672 0 : TVirtualMC::GetMC()->Gspos("BBC3", 2, "BBCE", dx, dy, - dz, 0, "ONLY");
1673 : //
1674 : // Diagonal Bars
1675 : //
1676 : h = (kBBMRou - kBBMRin - 2. * kBBBdz);;
1677 : d = kBBBdz;
1678 0 : dz = kBBMdz/2. - 1.6 * kBBBdz;
1679 0 : dq = h*h+dz*dz;
1680 :
1681 0 : x = TMath::Sqrt((dz*dz-d*d)/dq + d*d*h*h/dq/dq)+d*h/dq;
1682 :
1683 :
1684 0 : theta = kRaddeg * TMath::ACos(x);
1685 :
1686 0 : ptrap[0] = dz/2.;
1687 0 : ptrap[1] = theta;
1688 0 : ptrap[2] = 0.;
1689 0 : ptrap[3] = d/2;
1690 0 : ptrap[4] = d/x/2;
1691 0 : ptrap[5] = ptrap[4];
1692 0 : ptrap[6] = 0;
1693 0 : ptrap[7] = ptrap[3];
1694 0 : ptrap[8] = ptrap[4];
1695 0 : ptrap[9] = ptrap[4];
1696 0 : ptrap[10] = 0;
1697 0 : TVirtualMC::GetMC()->Gsvolu("BBD1", "TRAP", kSteel, ptrap, 11);
1698 0 : ptrap[3] = d/2-kBBBdd;
1699 0 : ptrap[4] = (d/2-kBBBdd)/x;
1700 0 : ptrap[5] = ptrap[4];
1701 0 : ptrap[7] = ptrap[3];
1702 0 : ptrap[8] = ptrap[4];
1703 0 : ptrap[9] = ptrap[4];
1704 0 : TVirtualMC::GetMC()->Gsvolu("BBD3", "TRAP", kAir, ptrap, 11);
1705 0 : TVirtualMC::GetMC()->Gspos("BBD3", 1, "BBD1", 0.0, 0.0, 0., 0, "ONLY");
1706 : dx = (kBBMRou + kBBMRin) / 2.;
1707 0 : dy = ((kBBMRou + kBBMRin)/ 2) * TMath::Tan(10 * kDegrad) - kBBBdz / 2./ TMath::Cos(10 * kDegrad);
1708 0 : TVirtualMC::GetMC()->Gspos("BBD1", 1, "BBCE", dx, dy, dz/2. + kBBBdz/2., idrotm[2052], "ONLY");
1709 :
1710 :
1711 0 : ptrap[0] = dz/2.;
1712 0 : ptrap[1] = -theta;
1713 0 : ptrap[2] = 0.;
1714 0 : ptrap[3] = d/2;
1715 0 : ptrap[4] = d/2/x;
1716 0 : ptrap[5] = ptrap[4];
1717 0 : ptrap[6] = 0;
1718 0 : ptrap[7] = ptrap[3];
1719 0 : ptrap[8] = ptrap[4];
1720 0 : ptrap[9] = ptrap[4];
1721 0 : ptrap[10] = 0;
1722 0 : TVirtualMC::GetMC()->Gsvolu("BBD2", "TRAP", kSteel, ptrap, 11);
1723 0 : ptrap[3] = d/2-kBBBdd;
1724 0 : ptrap[4] = (d/2-kBBBdd)/x;
1725 0 : ptrap[5] = ptrap[4];
1726 0 : ptrap[7] = ptrap[3];
1727 0 : ptrap[8] = ptrap[4];
1728 0 : ptrap[9] = ptrap[4];
1729 0 : TVirtualMC::GetMC()->Gsvolu("BBD4", "TRAP", kAir, ptrap, 11);
1730 0 : TVirtualMC::GetMC()->Gspos("BBD4", 1, "BBD2", 0.0, 0.0, 0., 0, "ONLY");
1731 : dx = (kBBMRou + kBBMRin) / 2.;
1732 0 : dy = ((kBBMRou + kBBMRin)/ 2) * TMath::Tan(10 * kDegrad) - kBBBdz / 2./ TMath::Cos(10 * kDegrad);
1733 0 : TVirtualMC::GetMC()->Gspos("BBD2", 1, "BBCE", dx, dy, -dz/2. - kBBBdz/2., idrotm[2052], "ONLY");
1734 :
1735 :
1736 0 : TVirtualMC::GetMC()->Gspos("BBMO", 1, "ALIC", 0., 0., + 376. + kBBMdz / 2. + 0.5, 0, "ONLY");
1737 :
1738 :
1739 0 : }
1740 :
1741 : //___________________________________________
1742 : void AliFRAMEv3::AddAlignableVolumes() const
1743 : {
1744 : // Add the 18 spaceframe sectors as alignable volumes
1745 0 : TString basesymname("FRAME/Sector");
1746 0 : TString basevolpath("ALIC_1/B077_1/BSEGMO");
1747 0 : TString symname;
1748 0 : TString volpath;
1749 :
1750 0 : for(Int_t sec=0; sec<18; sec++)
1751 : {
1752 0 : symname = basesymname;
1753 0 : symname += sec;
1754 0 : volpath = basevolpath;
1755 0 : volpath += sec;
1756 0 : volpath += "_1";
1757 0 : if(!gGeoManager->SetAlignableEntry(symname.Data(),volpath.Data()))
1758 0 : AliFatal(Form("Alignable entry %s not created. Volume path %s not valid",
1759 : symname.Data(),volpath.Data()));
1760 : }
1761 0 : }
1762 :
1763 : //___________________________________________
1764 : void AliFRAMEv3::CreateMaterials()
1765 : {
1766 : // Creates the materials
1767 : Float_t epsil, stemax, tmaxfd, deemax, stmin;
1768 :
1769 : epsil = 1.e-4; // Tracking precision,
1770 : stemax = -0.01; // Maximum displacement for multiple scat
1771 : tmaxfd = -20.; // Maximum angle due to field deflection
1772 : deemax = -.3; // Maximum fractional energy loss, DLS
1773 : stmin = -.8;
1774 0 : Int_t isxfld = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
1775 0 : Float_t sxmgmx = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
1776 :
1777 :
1778 0 : Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
1779 0 : Float_t zsteel[4] = { 26.,24.,28.,14. };
1780 0 : Float_t wsteel[4] = { .715,.18,.1,.005 };
1781 :
1782 : //Air
1783 :
1784 0 : Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
1785 0 : Float_t zAir[4]={6.,7.,8.,18.};
1786 0 : Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
1787 : Float_t dAir = 1.20479E-3;
1788 :
1789 : // G10
1790 : // G10 60% SiO2 40% epoxy
1791 0 : Float_t ag10[4]= {12.01, 1., 15.994, 28.086};
1792 0 : Float_t zg10[4] = { 6., 1., 8., 14.};
1793 0 : Float_t wg10[4] = {0.194, 0.023, 0.443, 0.340};
1794 :
1795 :
1796 0 : AliMixture(22, "G10", ag10, zg10, 1.7 , 4, wg10);
1797 :
1798 0 : AliMixture(65, "STEEL$", asteel, zsteel, 7.88, 4, wsteel);
1799 0 : AliMixture(5, "AIR$ ", aAir, zAir, dAir,4, wAir);
1800 0 : AliMaterial(9, "ALU ", 26.98, 13., 2.7, 8.9, 37.2);
1801 :
1802 0 : AliMedium(65, "Steel", 65, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1803 0 : AliMedium( 5, "Air", 5, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1804 0 : AliMedium( 9, "Aluminum", 9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1805 0 : AliMedium(22, "G10", 22, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
1806 :
1807 0 : }
1808 :
1809 : //_____________________________________________________________________________
1810 : void AliFRAMEv3::Init()
1811 : {
1812 : //
1813 : // Initialise the module after the geometry has been defined
1814 : //
1815 0 : if(AliLog::GetGlobalDebugLevel()>0) {
1816 0 : printf("%s: **************************************"
1817 : " FRAME "
1818 0 : "**************************************\n",ClassName());
1819 0 : printf("\n%s: Version 2 of FRAME initialised, symmetric FRAME\n\n",ClassName());
1820 0 : printf("%s: **************************************"
1821 : " FRAME "
1822 0 : "**************************************\n",ClassName());
1823 0 : }
1824 : //
1825 : // The reference volume id
1826 0 : fRefVolumeId1 = TVirtualMC::GetMC()->VolId("BREF1");
1827 0 : fRefVolumeId2 = TVirtualMC::GetMC()->VolId("BREF2");
1828 0 : }
1829 :
1830 : Int_t AliFRAMEv3::IsVersion() const
1831 : {
1832 : // Returns the version of the FRAME (1 if no holes, 0 otherwise)
1833 : Int_t version = 0;
1834 0 : if (fHoles == 0) version = 1;
1835 0 : return version;
1836 : }
1837 :
1838 : void AliFRAMEv3::StepManager()
1839 : {
1840 : //
1841 : // Stepmanager of AliFRAMEv3.cxx
1842 : // Used for recording of reference tracks entering the spaceframe mother volume
1843 : //
1844 0 : Int_t copy, id;
1845 :
1846 : //
1847 : // Only charged tracks
1848 0 : if( !(TVirtualMC::GetMC()->TrackCharge()) ) return;
1849 : //
1850 : // Only tracks entering mother volume
1851 : //
1852 :
1853 0 : id=TVirtualMC::GetMC()->CurrentVolID(copy);
1854 :
1855 0 : if ((id != fRefVolumeId1) && (id != fRefVolumeId2)) return;
1856 0 : if(!TVirtualMC::GetMC()->IsTrackEntering()) return;
1857 : //
1858 : // Add the reference track
1859 : //
1860 0 : AddTrackReference(gAlice->GetMCApp()->GetCurrentTrackNumber(), AliTrackReference::kFRAME);
1861 0 : }
1862 :
1863 :
1864 :
1865 : void AliFRAMEv3::MakeHeatScreen(const char* name, Float_t dyP, Int_t rot1, Int_t rot2)
1866 : {
1867 : // Heat screen panel
1868 : //
1869 0 : Int_t *idtmed = fIdtmed->GetArray()-1999;
1870 0 : const Int_t kAir = idtmed[2004];
1871 0 : const Int_t kAlu = idtmed[2008];
1872 :
1873 : Float_t dx, dy;
1874 0 : char mname[16];
1875 0 : char cname [16];
1876 0 : char t1name[16];
1877 0 : char t2name[16];
1878 0 : char t3name[16];
1879 0 : char t4name[16];
1880 0 : char t5name[16];
1881 :
1882 : //
1883 0 : Float_t dxP = 2. * (287. * TMath::Sin(10.* TMath::Pi()/180.) - 2.);
1884 : Float_t dzP = 1.05;
1885 : //
1886 : // Mother volume
1887 0 : Float_t thshM[3];
1888 0 : thshM[0] = dxP / 2.;
1889 0 : thshM[1] = dyP / 2.;
1890 0 : thshM[2] = dzP / 2.;
1891 0 : snprintf(mname, 16, "BTSH_%s", name);
1892 0 : TVirtualMC::GetMC()->Gsvolu(mname, "BOX ", kAir, thshM, 3);
1893 : //
1894 : // Aluminum sheet
1895 0 : thshM[2] = 0.025;
1896 0 : snprintf(cname, 16, "BTSHA_%s", name);
1897 0 : TVirtualMC::GetMC()->Gsvolu(cname, "BOX ", kAlu, thshM, 3);
1898 0 : TVirtualMC::GetMC()->Gspos(cname, 1, mname, 0., 0., -0.5, 0);
1899 : //
1900 : // Tubes
1901 0 : Float_t thshT[3];
1902 0 : thshT[0] = 0.4;
1903 0 : thshT[1] = 0.5;
1904 0 : thshT[2] = (dyP / 2. - 8.);
1905 : //
1906 0 : snprintf(t1name, 16, "BTSHT1_%s", name);
1907 0 : TVirtualMC::GetMC()->Gsvolu(t1name, "TUBE", kAlu, thshT, 3);
1908 0 : dx = - dxP / 2. + 8. - 0.5;
1909 0 : TVirtualMC::GetMC()->Gspos(t1name, 1, mname, dx, 0., 0.025, rot1);
1910 : //
1911 0 : snprintf(t2name, 16, "BTSHT2_%s", name);
1912 0 : snprintf(t3name, 16, "BTSHT3_%s", name);
1913 0 : snprintf(t4name, 16, "BTSHT4_%s", name);
1914 0 : snprintf(t5name, 16, "BTSHT5_%s", name);
1915 0 : thshT[2] = (thshM[1] - 12.);
1916 0 : TVirtualMC::GetMC()->Gsvolu(t2name, "TUBE", kAlu, thshT, 3);
1917 0 : thshT[2] = 7.9/2.;
1918 0 : TVirtualMC::GetMC()->Gsvolu(t3name, "TUBE", kAlu, thshT, 3);
1919 0 : thshT[2] = 23.9/2.;
1920 0 : TVirtualMC::GetMC()->Gsvolu(t4name, "TUBE", kAlu, thshT, 3);
1921 :
1922 : Int_t sig = 1;
1923 : Int_t ipo = 1;
1924 0 : for (Int_t i = 0; i < 5; i++) {
1925 0 : sig *= -1;
1926 0 : dx += 8.00;
1927 0 : dy = 4. * sig;
1928 0 : Float_t dy1 = - (thshM[1] - 15.5) * sig;
1929 0 : Float_t dy2 = - (thshM[1] - 7.5) * sig;
1930 :
1931 0 : TVirtualMC::GetMC()->Gspos(t2name, ipo++, mname, dx, dy, 0.025, rot1);
1932 0 : dx += 6.9;
1933 0 : TVirtualMC::GetMC()->Gspos(t2name, ipo++, mname, dx, dy, 0.025, rot1);
1934 :
1935 0 : TVirtualMC::GetMC()->Gspos(t3name, i+1, mname, dx - 3.45, dy1, 0.025, rot2);
1936 0 : TVirtualMC::GetMC()->Gspos(t4name, i+1, mname, dx - 3.45, dy2, 0.025, rot2);
1937 : }
1938 0 : dx += 8.;
1939 0 : TVirtualMC::GetMC()->Gspos(t1name, 2, mname, dx, 0., 0.025, rot1);
1940 0 : TVirtualMC::GetMC()->Gspos(t3name, 6, mname, dx - 3.45, -(thshM[1] - 7.5), 0.025, rot2);
1941 0 : }
1942 :
1943 :
1944 :
1945 : void AliFRAMEv3::WebFrame(const char* name, Float_t dHz, Float_t theta0, Float_t phi0)
1946 : {
1947 : //
1948 : // Create a web frame element
1949 : //
1950 : phi0 = 0.;
1951 0 : Int_t *idtmed = fIdtmed->GetArray()-1999;
1952 0 : const Float_t krad2deg = 180. / TMath::Pi();
1953 0 : const Float_t kdeg2rad = 1. / krad2deg;
1954 0 : const Int_t kAir = idtmed[2004];
1955 0 : const Int_t kSteel = idtmed[2064];
1956 :
1957 0 : Float_t ptrap[11];
1958 0 : char nameA[16];
1959 0 : snprintf(nameA, 16, "%sA", name );
1960 :
1961 0 : char nameI[16];
1962 0 : snprintf(nameI, 16, "%sI", name );
1963 :
1964 0 : theta0 *= kdeg2rad;
1965 0 : phi0 *= kdeg2rad;
1966 : // Float_t theta = TMath::ATan(TMath::Tan(theta0)/TMath::Sin(phi0));
1967 0 : Float_t theta = TMath::Pi()/2.;
1968 0 : Float_t phi = TMath::ACos(TMath::Cos(theta0) * TMath::Cos(phi0));
1969 :
1970 0 : if (phi0 < 0) phi = -phi;
1971 :
1972 0 : phi *= krad2deg;
1973 0 : theta *= krad2deg;
1974 :
1975 0 : ptrap[0] = dHz/2;
1976 0 : ptrap[2] = theta;
1977 0 : ptrap[1] = phi;
1978 0 : ptrap[3] = 6./cos(theta0 * kdeg2rad)/2.;
1979 0 : ptrap[4] = 1.;
1980 0 : ptrap[5] = ptrap[4];
1981 0 : ptrap[6] = 0;
1982 0 : ptrap[7] = ptrap[3];
1983 0 : ptrap[8] = ptrap[4];
1984 0 : ptrap[9] = ptrap[4];
1985 0 : ptrap[10] = 0;
1986 0 : TVirtualMC::GetMC()->Gsvolu(name, "TRAP", kSteel, ptrap, 11);
1987 0 : TVirtualMC::GetMC()->Gsvolu(nameI, "TRAP", kSteel, ptrap, 11);
1988 0 : ptrap[3] = (6. - 1.)/cos(theta0 * kdeg2rad)/2.;
1989 0 : ptrap[4] = 0.75;
1990 0 : ptrap[5] = ptrap[4];
1991 0 : ptrap[7] = ptrap[3];
1992 0 : ptrap[8] = ptrap[4];
1993 0 : ptrap[9] = ptrap[4];
1994 :
1995 0 : TVirtualMC::GetMC()->Gsvolu(nameA, "TRAP", kAir, ptrap, 11);
1996 0 : TVirtualMC::GetMC()->Gspos(nameA, 1, name, -0.25, 0.0, 0., 0, "ONLY");
1997 0 : TVirtualMC::GetMC()->Gspos(nameA, 2, nameI, +0.25, 0.0, 0., 0, "ONLY");
1998 0 : gGeoManager->GetVolume(name)->SetVisContainers();;
1999 0 : gGeoManager->GetVolume(nameI)->SetVisContainers();;
2000 0 : }
2001 :
2002 : TGeoCompositeShape* AliFRAMEv3::CreateTOFRail (Float_t y)
2003 : {
2004 0 : char nameSostA1[16];
2005 0 : snprintf(nameSostA1, 16, "SostA1");
2006 0 : TGeoBBox *boxSostA1 = new TGeoBBox(nameSostA1, 0.5, y, 2.0);
2007 0 : char nameCV[16];
2008 0 : snprintf(nameCV, 16, "CV");
2009 0 : TGeoArb8 *CV = new TGeoArb8(nameCV, 2.35);
2010 0 : CV->SetVertex(0, 0.89, -y);
2011 0 : CV->SetVertex(1, 0.89, y);
2012 0 : CV->SetVertex(2, 0.09, y);
2013 0 : CV->SetVertex(3, 0.09, -y);
2014 0 : CV->SetVertex(4, -0.09, -y);
2015 0 : CV->SetVertex(5, -0.09, y);
2016 0 : CV->SetVertex(6, -0.89, y);
2017 0 : CV->SetVertex(7, -0.89, -y);
2018 0 : char nameCOB[16];
2019 0 : snprintf(nameCOB, 16, "COB");
2020 0 : TGeoBBox *boxCOB = new TGeoBBox(nameCOB, 2.0, y, 0.4);
2021 0 : char nameCOT[16];
2022 0 : snprintf(nameCOT, 16, "COT");
2023 0 : TGeoBBox *boxCOT = new TGeoBBox(nameCOT, 1.7, y, 0.4);
2024 :
2025 :
2026 0 : TGeoTranslation *trCOB = new TGeoTranslation("trCOB",2.09, 0., -2.75 );
2027 0 : trCOB->RegisterYourself();
2028 0 : TGeoTranslation *trCOT = new TGeoTranslation("trCOT",0.81, 0., +2.75 );
2029 0 : trCOT->RegisterYourself();
2030 0 : TGeoTranslation *trSostA1 = new TGeoTranslation("trSostA1", 2.39, 0., -0.35 );
2031 0 : trSostA1->RegisterYourself();
2032 :
2033 0 : TGeoCompositeShape *btofS1 =new TGeoCompositeShape("BtofS1","CV+(COB:trCOB)+(COT:trCOT)+(SostA1:trSostA1)");
2034 0 : return btofS1;
2035 :
2036 0 : }
|