Option for more PX/RB 24 Shielding
[u/mrichter/AliRoot.git] / STRUCT / AliHALLv3.cxx
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 //                                                                           //
20 //  Experimental Hall                                                        //
21 //  This class contains the description of the experimental hall             //
22 //  and the shielding blocks.                                                // 
23 //  Author: Andreas Morsch                                                   //
24 //  andreas.morsch@cern.ch                                                   //
25 //                                                                           //
26 ///////////////////////////////////////////////////////////////////////////////
27
28 #include <TVirtualMC.h>
29
30 #include "AliConst.h"
31 #include "AliHALLv3.h"
32 #include "AliMagF.h"
33 #include "AliRun.h"
34 #include "AliLog.h"
35 #include <TGeoVolume.h>
36 #include <TGeoManager.h>
37 #include <TGeoMatrix.h>
38 #include <TGeoCompositeShape.h>
39 #include <TGeoBBox.h>
40 #include <TGeoTube.h>
41 #include <TGeoPgon.h>
42 #include <TGeoPcon.h>
43 #include <TGeoCone.h>
44 #include <TGeoTrd1.h>
45 #include <TGeoArb8.h>
46
47 ClassImp(AliHALL)
48  
49 //_____________________________________________________________________________
50 AliHALLv3::AliHALLv3() : fNewShield24(0)
51 {
52   //
53   // Default constructor for the experimental Hall
54   //
55 }
56  
57 //_____________________________________________________________________________
58 AliHALLv3::AliHALLv3(const char *name, const char *title)
59   : AliHALL(name,title), fNewShield24(0)
60 {
61   //
62   // Standard constructor for the experimental Hall
63   //
64
65 }
66  
67 //_____________________________________________________________________________
68 void AliHALLv3::CreateGeometry()
69 {
70   //
71   // Create the geometry of the exprimental hall
72   //
73   Float_t r2, dy;
74   Float_t phid, phim, h, r;
75   Float_t w1, dh, am, bm, dl,cm, hm, dr, dx, xl;
76   Float_t hullen;
77   Float_t phi;
78
79   // The top volume
80   //
81   TGeoVolume* top = gGeoManager->GetVolume("ALIC");
82   TGeoVolumeAssembly* asHall = new TGeoVolumeAssembly("HALL");
83   
84   // Rotations
85   // rotation by 90 deg in the y-z plane
86   TGeoRotation* rot000 = new TGeoRotation("rot000",  90., 0.,180.,  0.,    90., 90.);  
87   TGeoRotation* rot001 = new TGeoRotation("rot001", 270., 0., 90., 90.,   180.,  0.);  
88
89   // Materials
90   TGeoMedium* kMedCC     = gGeoManager->GetMedium("HALL_CC_C2");
91   TGeoMedium* kMedST     = gGeoManager->GetMedium("HALL_STST_C2");
92   TGeoMedium* kMedAir    = gGeoManager->GetMedium("HALL_AIR_C2");
93   
94   // Floor thickness 
95   Float_t dyFloor  =  190.;
96   // Floor width
97   Float_t dxFloor  = 1400.;
98   // Floor level 
99   Float_t  yFloor  = -801.;
100   // Pit centre
101   Float_t  zPit    = 2300.;
102   // Pit radius
103   Float_t  rPit    = 1140.;
104   // Hall end 
105   Float_t  zHall24 = 1700.;
106   Float_t  zHall26 = 1900.;
107     // Overlap between hall and pit radius
108   Float_t oPit = zHall24 - (zPit - rPit);
109   // Length of the L3 floor
110   Float_t dzL3 = 1700.;
111   // Start of hall roof in y
112   Float_t yHall = 500.;
113   // Radius of the hall roof
114   Float_t rHall = 1070.;
115   //
116   Float_t epsBig   = 100.;
117   Float_t epsSmall =   1.;
118   
119   
120
121   //
122   // RB24/26 Tunnel Floor 
123   r   = 220.;
124   h   = 140.;
125   phi = TMath::ACos(h / r);
126   xl  = r * TMath::Sin(phi);
127   dr  = 1600.;
128   dh  = dr * TMath::Cos(phi);
129   dl  = dr * TMath::Sin(phi);
130   if (gAlice->GetModule("ZDC") == 0) {
131     //     No ZDC 
132     hullen = 370.;
133   } else {
134     
135     //     ZDC is present 
136     hullen = 6520.;
137   }
138
139   TGeoVolume* voHUFL = new TGeoVolume("HUFL",
140                                       new TGeoTrd1(xl +dl, xl, hullen, dh / 2.),
141                                       kMedCC);
142   r2 = hullen + zHall26;
143   asHall->AddNode(voHUFL, 1, new TGeoCombiTrans(70., -100. - dh / 2., -r2 - 0.755, rot000));
144
145   //
146   // RB24/26 wall 
147   phid     = phi * kRaddeg;
148   TGeoVolume* voHUWA = new TGeoVolume("HUWA",
149                                       new TGeoTubeSeg(r, r+dr, hullen, phid - 90. + 0.002, 270. - phid - 0.002),
150                                       kMedCC);
151   asHall->AddNode(voHUWA, 1, new TGeoTranslation(70., 40., -zHall26 - hullen + 0.002 ));
152   //
153   // Air inside tunnel
154   TGeoTube* shHUWAT1 = new TGeoTube(0., r, hullen);
155   shHUWAT1->SetName("shHUWAT1");
156   //
157   // Space for ZDC
158   TGeoBBox*    shHUWAT2 = new TGeoBBox(70., 110., hullen + 20.);
159   shHUWAT2->SetName("shHUWAT2");
160   TGeoTranslation*   tHUWAT2 = new TGeoTranslation("tHUWAT2", -70., -30., 0.);
161   tHUWAT2->RegisterYourself();
162
163   TGeoBBox*    shHUWAT3 = new TGeoBBox(270., 110., hullen + 20.);
164   shHUWAT3->SetName("shHUWAT3");
165   TGeoTranslation*   tHUWAT3 = new TGeoTranslation("tHUWAT3", 0., -110. - 140., 0.);
166   tHUWAT3->RegisterYourself();
167   
168   TGeoCompositeShape*  shHUWAT = new TGeoCompositeShape("HUWAT", "(shHUWAT1-shHUWAT2:tHUWAT2)-shHUWAT3:tHUWAT3");
169   TGeoVolume* voHUWAT = new TGeoVolume("HUWAT", shHUWAT, kMedAir);
170   asHall->AddNode(voHUWAT, 1, new TGeoTranslation(70., 40., -zHall26 - hullen - 0.755));
171   
172   //
173   //  Hall floor 
174   //  RB26 side
175   phid      = 16.197;
176   Float_t dzFloor26 = zHall26 - dzL3/2.;
177   TGeoBBox* shHHF1 = new TGeoBBox(dxFloor/2. + 470., dyFloor/2., dzFloor26/2. - 0.002);
178   shHHF1->SetName("shHHF1");
179   TGeoVolume* voHHF1 = new TGeoVolume("HHF1", shHHF1, kMedCC);
180   asHall->AddNode(voHHF1, 2, new TGeoTranslation(0., yFloor, -(dzL3/2. + dzFloor26/2.)));
181   // RB24 side
182   Float_t dzFloor24 = zHall24 - dzL3/2.;
183   TGeoBBox* shHHF41 = new TGeoBBox(dxFloor/2. + 470., dyFloor/2., dzFloor24/2.);
184   shHHF41->SetName("shHHF41");
185   TGeoTube* shHHF42 = new TGeoTube(0., rPit + epsBig, dyFloor/2.);
186   shHHF42->SetName("shHHF42");
187   TGeoCombiTrans* trHHF42 = new TGeoCombiTrans("trHHF42", 0., 0., dzFloor24/2. + rPit - oPit, rot000);
188   trHHF42->RegisterYourself();
189   
190   TGeoCompositeShape*  shHHF4 = new TGeoCompositeShape("HHF4", "shHHF41+shHHF42:trHHF42");
191   TGeoVolume* voHHF4 = new TGeoVolume("HHF4", shHHF4, kMedCC);
192   asHall->AddNode(voHHF4, 1, new TGeoTranslation(0., yFloor,  dzL3/2. + dzFloor24/2.));
193
194
195   //
196   //  Hall side walls 
197   Float_t trH1   = (1273.78 - dyFloor)/ 2.;
198   Float_t trBL1  = 207.3;
199   Float_t trTL1  =  50.;
200   Float_t trALP1 = TMath::ATan((trBL1 - trTL1) / 2. / trH1) * kRaddeg;
201   dx = 1.5 * trBL1 - 0.5 * trTL1 + dxFloor/2. + dyFloor * TMath::Tan(phid * kDegrad);
202   TGeoVolume* voHHW11 = new TGeoVolume("HHW11",
203                                        new TGeoTrap(dzFloor26/2. - 0.002, 0., 0., 
204                                                     trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
205                                        kMedCC);
206   TGeoVolume* voHHW12 = new TGeoVolume("HHW12",
207                                        new TGeoTrap(dzFloor24/2., 0., 0., 
208                                                     trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
209                                        kMedCC);
210  
211   dy = yFloor + dyFloor/2. + trH1;
212   
213   asHall->AddNode(voHHW12, 1, new TGeoTranslation( dx, dy,  (dzL3/2. + dzFloor24/2.)));
214   asHall->AddNode(voHHW12, 2, new TGeoCombiTrans (-dx, dy,  (dzL3/2. + dzFloor24/2.), rot001));
215   asHall->AddNode(voHHW11, 1, new TGeoTranslation( dx, dy, -(dzL3/2. + dzFloor26/2.)));
216   asHall->AddNode(voHHW11, 2, new TGeoCombiTrans (-dx, dy, -(dzL3/2. + dzFloor26/2.), rot001));
217
218   Float_t boDY =  (yHall - (yFloor + dyFloor/2.) - 2. * trH1)/ 2.;
219   Float_t dzHall = zHall26 + zHall24;
220
221   TGeoVolume* voHBW1 = new TGeoVolume("HBW1", new TGeoBBox(50., boDY, dzHall / 2. - 0.05), kMedCC);
222
223   asHall->AddNode(voHBW1, 1,  new TGeoTranslation( 1120., yHall - boDY, (zHall24-zHall26)/2.));
224   asHall->AddNode(voHBW1, 2,  new TGeoTranslation(-1120., yHall - boDY, (zHall24-zHall26)/2.));
225
226   //
227   // Slanted wall close to L3 magnet 
228   //
229   phim =  45.;
230   hm   = 790.;
231   am   = hm * TMath::Tan(phim / 2. * kDegrad);
232   bm   = (hm + 76.) / hm * am;
233   cm   = bm * 2. / TMath::Sqrt(2.);
234   trH1   =  (1273.78 - cm) / 2. - 0.002;
235   trBL1  =  235. - cm * TMath::Tan(phid * kDegrad) / 2.;
236   trTL1  =   50.;
237   trALP1 = TMath::ATan((trBL1 - trTL1) / 2. / trH1) * kRaddeg;
238
239   w1 = trBL1;
240   dx = cm * TMath::Tan(phid * kDegrad) + dxFloor/2. + trBL1 * 1.5 - trTL1 * .5;
241
242   TGeoVolume* voHHW2 = new TGeoVolume("HHW2",
243                                       new TGeoTrap(dzL3/2. - 0.002, 0., 0., 
244                                                    trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
245                                       kMedCC);
246
247   r2 = cm + yFloor - dyFloor/2. + trH1;
248
249   asHall->AddNode(voHHW2, 1, new TGeoTranslation(dx, r2, 0.));
250   asHall->AddNode(voHHW2, 2, new TGeoCombiTrans(-dx, r2, 0., rot001));
251
252   trH1   = cm / 2.;
253   trBL1  = w1 + cm / 2.;
254   trTL1  = w1;
255   trALP1 = TMath::ATan(.5) * kRaddeg;
256   dx = 1170. - trBL1 * .5 - trTL1 * .5;
257
258   TGeoVolume* voHHW3 = new TGeoVolume("HHW3",
259                                       new TGeoTrap(dzL3/2., 0., 0., 
260                                                    trH1, trBL1, trTL1, trALP1, trH1, trBL1, trTL1, trALP1),
261                                       kMedCC);
262
263   r2 = trH1 - 896.;
264   asHall->AddNode(voHHW3, 1, new TGeoTranslation( dx, r2, 0.));
265   asHall->AddNode(voHHW3, 2, new TGeoCombiTrans (-dx, r2, 0., rot001));
266   //
267   // Floor L3
268   Float_t dyFloorL3  = 76.;
269   Float_t dx1FloorL3 = rHall + epsBig - 2. * trBL1;
270   Float_t dx2FloorL3 = dx1FloorL3 + TMath::Tan(phim * kDegrad) * dyFloorL3;
271   
272   
273   TGeoVolume* voHHF2 = new TGeoVolume("HHF2", 
274                                       new TGeoTrd1(dx1FloorL3 - 0.5, dx2FloorL3 - 0.5, dzL3/2., dyFloorL3/2.), 
275                                       kMedCC);
276
277   asHall->AddNode(voHHF2, 1, new TGeoCombiTrans(0., yFloor - dyFloor / 2. + dyFloorL3 / 2. - 0.5,0., rot000));
278   //
279   // Tunnel roof and pit
280   // Roof
281   TGeoTubeSeg* shHHC11 = new TGeoTubeSeg(rHall, rHall + 100., dzHall / 2., 0., 180.);
282   shHHC11->SetName("shHHC11");
283   // Pit 
284   TGeoTube*    shHHC12 = new TGeoTube(rPit, rPit + 100., 1000.);
285   shHHC12->SetName("shHHC12");
286   // Pit inside
287   TGeoTube*    shHHC13 = new TGeoTube(   0, rPit - epsSmall, 1000.);
288   shHHC13->SetName("shHHC13");
289   // Roof inside
290   TGeoTubeSeg* shHHC14 = new TGeoTubeSeg(0., rHall, dzHall / 2. + epsBig, 0., 180.);
291   shHHC14->SetName("shHHC14");
292
293   TGeoCombiTrans* trHHC = new TGeoCombiTrans("trHHC", 0., 1000., dzHall/2. + rPit - oPit, rot000);
294   trHHC->RegisterYourself();
295   TGeoCompositeShape*  shHHC1 = new TGeoCompositeShape("HHC1", "shHHC11+shHHC12:trHHC-(shHHC14+shHHC13:trHHC)");
296   TGeoVolume* voHHC1 = new TGeoVolume("HHC1", shHHC1, kMedCC);
297
298   asHall->AddNode(voHHC1, 1, new TGeoTranslation(0., yHall, -(zHall26-zHall24)/2.));
299
300
301   //
302   // Pit wall ground level
303   dy = yFloor + 1206. / 2. + dyFloor/2.;
304   TGeoTube* shHHCPW1 = new TGeoTube(rPit, rPit + 100., 1206./2.);
305   shHHCPW1->SetName("shHHCPW1");
306   TGeoCombiTrans* trHHCPW1 = new TGeoCombiTrans("trHHCPW1", 0., 0., 0., rot000);
307   trHHCPW1->RegisterYourself();
308
309   TGeoBBox* shHHCPW2 = new TGeoBBox(rPit + 100., 1206./ 2. + 20., rPit + 100.);
310   shHHCPW2->SetName("shHHCPW2");
311   
312   TGeoTube* shHHCPW3 = new TGeoTube(0., 60., 60.);
313   shHHCPW3->SetName("shHHCPW3");
314
315   
316   TGeoTranslation* trHHCPW2 = new TGeoTranslation("trHHCPW2", 0., 0., -(rPit + 100.) - oPit);
317   trHHCPW2->RegisterYourself();
318
319   TGeoTranslation* trHHCPW3 = new TGeoTranslation("trHHCPW3", 0., -dy, rPit + 50.);
320   trHHCPW3->RegisterYourself();
321
322   TGeoCompositeShape*  shHHCPW 
323       = new TGeoCompositeShape("HHCPW", "shHHCPW1:trHHCPW1-(shHHCPW2:trHHCPW2+shHHCPW3:trHHCPW3)");
324   TGeoVolume* voHHCPW = new TGeoVolume("HHCPW", shHHCPW, kMedCC);
325
326   asHall->AddNode(voHHCPW, 1, new TGeoTranslation(0., dy, 2300.));
327   // 
328   // Foundations of the Muon Spectrometer
329   // Drawing ALIP2A_0110
330   //
331   TGeoVolumeAssembly* asFMS = new TGeoVolumeAssembly("asFMS");
332   Float_t zFil = -1465.86 - 60.;
333   // Muon Filter Foundation
334   // Pillars
335   dy = 263.54/2.;
336   Float_t ys = yFloor + dyFloor / 2.;
337   TGeoVolume* voFmsMfPil = new TGeoVolume("FmsMfPil", new TGeoBBox( 50., dy, 165.), kMedCC);
338   ys += dy;
339   asFMS->AddNode(voFmsMfPil, 1, new TGeoTranslation(-330. + 50., ys, zFil + 165. - 90.));
340   asFMS->AddNode(voFmsMfPil, 2, new TGeoTranslation( 330. - 50., ys, zFil + 165  - 90.));
341   //
342   // Transverse bars
343   ys += dy;
344   dy = 91.32/2.;
345   ys += dy;
346   TGeoVolume* voFmsMfTb1 = new TGeoVolume("FmsMfTb1", new TGeoBBox(330., dy,  60.), kMedCC);
347   asFMS->AddNode(voFmsMfTb1, 1, new TGeoTranslation(0., ys, zFil));
348   ys += dy;
349   dy = 41.14/2.;
350   ys += dy;
351   TGeoVolume* voFmsMfTb2 = new TGeoVolume("FmsMfTb2", new TGeoBBox(330., dy,  60.), kMedCC);
352   asFMS->AddNode(voFmsMfTb2, 1, new TGeoTranslation(0., ys, zFil));
353   //
354   // Dipole foundation
355   ys = yFloor + dyFloor / 2.;
356   dy = (263.54 - 6.2)/2.;
357   ys += dy;
358   TGeoVolume* voFmsDf1 = new TGeoVolume("FmsDf1", new TGeoBBox(370., dy,  448.0 / 2.), kMedCC);
359   asFMS->AddNode(voFmsDf1, 1, new TGeoTranslation(0., ys, zFil + 240. + 224.));
360   TGeoVolume* voFmsDf2 = new TGeoVolume("FmsDf2", new TGeoBBox(370., (263.54 + 110.)/2.,  112.0 / 2.), kMedCC);
361   asFMS->AddNode(voFmsDf2, 1, new TGeoTranslation(0., ys - 110./2., zFil + 688. + 56.));
362
363   //
364   // Shielding in front of L3 magnet in PX24 and UX25
365   // Drawing ALIP2I__0016
366   //
367
368   TGeoVolumeAssembly* asShRb24 = new TGeoVolumeAssembly("ShRb24");
369   //
370   // Side walls 
371   // start 7450 from IP
372   TGeoVolume* voShRb24Sw = new TGeoVolume("ShRb24Sw", new TGeoBBox(80., 420., 520.), kMedCC);
373   asShRb24->AddNode(voShRb24Sw, 1, new TGeoTranslation(+315, -420. + 140., 0.));
374   asShRb24->AddNode(voShRb24Sw, 2, new TGeoTranslation(-315, -420. + 140., 0.));
375   //
376   // Roof
377   TGeoVolume* voShRb24Ro = new TGeoVolume("ShRb24Ro", new TGeoBBox(395., 80., 520.), kMedCC);
378   asShRb24->AddNode(voShRb24Ro, 1, new TGeoTranslation(0., +80. + 140., 0.));
379   //
380   // Concrete Plug
381   TGeoBBox* shShRb24Pl1 = new TGeoBBox(235., 140., 40.);
382   shShRb24Pl1->SetName("ShRb24Pl1");
383   // Steel Plug
384   TGeoBBox* shShRb24Pl4 = new TGeoBBox(15., 20., 40.);
385   shShRb24Pl4->SetName("ShRb24Pl4");
386
387   TGeoBBox* shShRb24Pl41 = new TGeoBBox(15., 20., 45.);
388   shShRb24Pl41->SetName("ShRb24Pl41");
389   
390   //
391   // Opening for beam pipe
392   Float_t dxShRb24Pl = 14.5;
393   Float_t dyShRb24Pl = 20.0;
394   if (fNewShield24) {
395     dxShRb24Pl = 6.;
396     dyShRb24Pl = 6.;
397   }
398   TGeoBBox* shShRb24Pl2 = new TGeoBBox(dxShRb24Pl, dyShRb24Pl, 60.);
399   shShRb24Pl2->SetName("ShRb24Pl2");
400   //
401   // Opening for tubes
402   TGeoBBox* shShRb24Pl3 = new TGeoBBox(20., 60., 60.);
403   shShRb24Pl3->SetName("ShRb24Pl3");
404
405   TGeoTranslation* trPl3 = new TGeoTranslation("trPl3", +235. -90., 80., 0.);
406   trPl3->RegisterYourself();
407
408   TGeoTranslation* trPl4 = new TGeoTranslation("trPl4", 0., -6., 0.);
409   trPl4->RegisterYourself();
410   TGeoTranslation* trPl5 = new TGeoTranslation("trPl5", 0., +6., 0.);
411   trPl5->RegisterYourself();
412
413   TGeoCompositeShape*  shRb24Pl   = 0;
414   TGeoCompositeShape*  shRb24PlSS = 0;
415   if (!fNewShield24) {
416     shRb24Pl = new TGeoCompositeShape("Rb24Pl", "ShRb24Pl1-ShRb24Pl2:trPl4-ShRb24Pl3:trPl3");
417   } else {
418     shRb24Pl   = new TGeoCompositeShape("Rb24Pl",   "ShRb24Pl1-(ShRb24Pl41:trPl4+ShRb24Pl3:trPl3)");
419     shRb24PlSS = new TGeoCompositeShape("Rb24PlSS", "ShRb24Pl4-ShRb24Pl2:trPl5");
420   }
421
422   TGeoVolume* voRb24Pl = new TGeoVolume("Rb24Pl", shRb24Pl, kMedCC);
423
424   asShRb24->AddNode(voRb24Pl, 1, new TGeoTranslation(0., 0., 520. - 40.));
425   if (fNewShield24) {
426     TGeoVolume* voRb24PlSS = new TGeoVolume("Rb24PlSS", shRb24PlSS, kMedST);
427     asShRb24->AddNode(voRb24PlSS, 1, new TGeoTranslation(0., -6., 520. - 40.));
428    }
429
430
431   //
432   // Concrete platform and shielding PX24
433   // Drawing LHCJUX 250014
434   //
435   TGeoVolumeAssembly* asShPx24 = new TGeoVolumeAssembly("ShPx24");
436   // Platform
437   TGeoVolume* voShPx24Pl = new TGeoVolume("ShPx24Pl", new TGeoBBox(1613.5/2., 120./2., 1205./2.), kMedCC);
438   asShPx24->AddNode(voShPx24Pl, 1, new TGeoTranslation(55., -140. - 60., 0.));
439   // Pillars
440   TGeoVolume* voShPx24Pi = new TGeoVolume("ShPx24Pi", new TGeoBBox(160./2., 440./2., 40/2.), kMedCC);
441   asShPx24->AddNode(voShPx24Pi, 1, new TGeoTranslation(-180. - 80., -220. -260.,  1205./2. - 20.));
442   asShPx24->AddNode(voShPx24Pi, 2, new TGeoTranslation(+290. + 80., -220. -260.,  1205./2. - 20.));
443   asShPx24->AddNode(voShPx24Pi, 3, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. + 20. + 120.));
444   asShPx24->AddNode(voShPx24Pi, 4, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. + 20. + 120.));
445   asShPx24->AddNode(voShPx24Pi, 5, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. - 20. + 480.));
446   asShPx24->AddNode(voShPx24Pi, 6, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. - 20. + 480.));
447   asShPx24->AddNode(voShPx24Pi, 7, new TGeoTranslation(-180. - 80., -220. -260., -1205./2. - 20. + 800.));
448   asShPx24->AddNode(voShPx24Pi, 8, new TGeoTranslation(+290. + 80., -220. -260., -1205./2. - 20. + 800.));
449   // Side Walls 
450   TGeoVolume* voShPx24Sw = new TGeoVolume("ShPx24Sw", new TGeoBBox(160./2., 280./2., 1205./2.), kMedCC);
451   asShPx24->AddNode(voShPx24Sw, 1, new TGeoTranslation(-180, 0., 0.));
452   asShPx24->AddNode(voShPx24Sw, 2, new TGeoTranslation(+290, 0., 0.));
453   // Roof
454   TGeoVolume* voShPx24Ro = new TGeoVolume("ShPx24Ro", new TGeoBBox(630./2., 160./2., 1205./2.), kMedCC);
455   asShPx24->AddNode(voShPx24Ro, 1, new TGeoTranslation(55., 80.+ 140., 0.));
456   asHall->AddNode(asShRb24, 1, new TGeoTranslation(0., 0., +745. + 520.));
457   asHall->AddNode(asShPx24, 1, new TGeoTranslation(0., 0., +745. + 1040. + 1205./ 2.));
458   // Stainless Steel Plug 80 cm thick
459   TGeoBBox* shShPx24Pl1 = new TGeoBBox(155., 140., 40.);
460   shShPx24Pl1->SetName("ShPx24Pl1");
461   // Opening for beam pipe
462   Float_t dxPx24Pl2 =  9.5;
463   Float_t dyPx24Pl2 = 14.0;
464   // Option for new shielding closer to the beam pipe
465   if (fNewShield24) {
466     dxPx24Pl2 = 6.;
467     dyPx24Pl2 = 6.;
468   }
469   //
470   TGeoBBox* shShPx24Pl2 = new TGeoBBox(dxPx24Pl2, dyPx24Pl2, 60.);
471   shShPx24Pl2->SetName("ShPx24Pl2");
472   TGeoTranslation* trPl2  = new TGeoTranslation("trPl2",  -55., 0., 0.);
473   trPl2->RegisterYourself();
474
475   TGeoCompositeShape*  shPx24Pl = new TGeoCompositeShape("Px24Pl", "ShPx24Pl1-ShPx24Pl2:trPl2");
476   TGeoVolume* voPx24Pl = new TGeoVolume("Px24Pl", shPx24Pl, kMedST);
477   asShPx24->AddNode(voPx24Pl, 1, new TGeoTranslation(55., 0., -1205./2. + 40.));
478   asHall->AddNode(asFMS, 1, new TGeoTranslation(0.,  0., 0.));
479   
480   //
481   top->AddNode(asHall, 1, gGeoIdentity);
482   
483 }