decrease vacuum density for FLUKA
[u/mrichter/AliRoot.git] / STRUCT / AliDIPOv2.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 //  Magnetic Dipole version 1                                                //
21 //                                                                           //
22 //Begin_Html
23 /*
24 <img src="picts/AliDIPOv2Class.gif">
25 </pre>
26 <br clear=left>
27 <font size=+2 color=red>
28 <p>The responsible person for this module is
29 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
30 </font>
31 <pre>
32 */
33 //End_Html
34 //                                                                           //
35 //                                                                           //
36
37 #include <TGeoManager.h>
38 #include <TGeoGlobalMagField.h>
39 #include <TGeoVolume.h>
40 #include <TVirtualMC.h>
41 #include <TArrayI.h>
42
43 #include "AliConst.h"
44 #include "AliDIPOv2.h"
45 #include "AliMagF.h"
46 #include "AliRun.h"
47  
48 ClassImp(AliDIPOv2)
49  
50 //_____________________________________________________________________________
51 AliDIPOv2::AliDIPOv2() 
52 {
53   //
54   // Last design of magnetic dipole version 2
55   //
56 }
57  
58 //_____________________________________________________________________________
59 AliDIPOv2::AliDIPOv2(const char *name, const char *title)
60   : AliDIPO(name,title)
61 {
62   //
63   // Standard constructor for the magnetic dipole version 2    
64 }
65
66 void AliDIPOv2::CreateGeometry()
67 {
68   //
69   // Creation of the geometry of the magnetic DIPOLE version 2
70   //
71
72     CreateSpectrometerDipole();
73     CreateCompensatorDipole();
74 }
75
76
77 //_____________________________________________________________________________
78 void AliDIPOv2::CreateSpectrometerDipole()
79 {
80   //
81   // Creation of the geometry of the magnetic DIPOLE version 2
82   //
83
84   Float_t cpar[5], tpar[18], ypar[12];
85   Float_t dz, dx, dy;
86   Int_t idrotm[1899];
87   Float_t accMax, the1, phi1, the2, phi2, the3, phi3;
88   
89   Int_t *idtmed = fIdtmed->GetArray()-1799;
90
91 //  const Int_t kCoil = 1813;
92 //  const Int_t kCable= 1811;
93
94   const Int_t kCoil = 1808;
95   const Int_t kCable= 1808;
96   
97   accMax = 9.;   // ANGLE POLAIRE MAXIMUM 
98
99   //       DIPOLE MAGNET 
100   const Float_t kZDipole = 975; 
101
102   tpar[ 0] = 0.; 
103   tpar[ 1] = 360.;
104   tpar[ 2] = 4.; 
105   //
106   tpar[ 3] = -250.55 + kZDipole;
107   tpar[ 4] =  30.1;
108   tpar[ 5] = 527.34; 
109   //
110   tpar[ 6] = 37. + kZDipole;
111   tpar[ 7] =  30.1;
112   tpar[ 8] = 527.34;
113   //
114   tpar[ 9] = 37. + kZDipole;
115   tpar[10] = tpar[ 9] * TMath::Tan(2. * TMath::Pi() / 180.);
116   tpar[11] = 527.34;
117   //
118   tpar[12] = 260.55 + kZDipole;
119   tpar[13] = tpar[12] * TMath::Tan(2. * TMath::Pi() / 180.);
120   tpar[14] = 527.34;
121   TVirtualMC::GetMC()->Gsvolu("DDIP", "PCON", idtmed[1874], tpar, 15);
122   //
123   //       Coils 
124   // air - m.f. 
125   cpar[0] = 207.;
126   cpar[1] = 274.;
127   cpar[2] = 37.65;
128   cpar[3] = 119.;
129   cpar[4] = 241.; 
130   //   coil - high cuts
131   TVirtualMC::GetMC()->Gsvolu("DC1 ", "TUBS", idtmed[kCoil+40], cpar, 5);
132   cpar[3] = -61.;
133   cpar[4] = 61.;
134   TVirtualMC::GetMC()->Gsvolu("DC2 ", "TUBS", idtmed[kCoil+40], cpar, 5);
135
136   //  coil - low cuts cuts
137   cpar[0] = 207.;
138 //  cpar[1] = cpar[0] + 10.;
139   cpar[1] = 217;
140   cpar[3] = 119.;
141   cpar[4] = 241.;
142
143   TVirtualMC::GetMC()->Gsvolu("DC3 ", "TUBS", idtmed[kCoil], cpar, 5);
144   cpar[0] = 207.; 
145   cpar[1] = 217; 
146   cpar[3] = -61.;
147   cpar[4] = 61.;
148   TVirtualMC::GetMC()->Gsvolu("DC4 ", "TUBS", idtmed[kCoil], cpar, 5);
149
150   TVirtualMC::GetMC()->Gspos("DC3 ", 1, "DC1 ", 0., 0., 0., 0, "ONLY");
151   TVirtualMC::GetMC()->Gspos("DC4 ", 1, "DC2 ", 0., 0., 0., 0, "ONLY");
152
153 //  dz =  37.65 - 243.55
154   dz = -205.9-2.45;
155   dx = 5.;
156   TVirtualMC::GetMC()->Gspos("DC1 ", 1, "DDIP",  dx, 0.,  dz+kZDipole, 0, "ONLY");
157   TVirtualMC::GetMC()->Gspos("DC1 ", 2, "DDIP",  dx, 0., -dz+kZDipole, 0, "ONLY");
158   TVirtualMC::GetMC()->Gspos("DC2 ", 1, "DDIP", -dx, 0.,  dz+kZDipole, 0, "ONLY");
159   TVirtualMC::GetMC()->Gspos("DC2 ", 2, "DDIP", -dx, 0., -dz+kZDipole, 0, "ONLY");
160   the1 = 180.;
161   phi1 = 0.;
162   the2 = 90.;
163   phi2 = 151.;
164   the3 = 90.;
165   phi3 = 61.;
166   AliMatrix(idrotm[1800], the1, phi1, the2, phi2, the3, phi3);
167   phi2 = 29.;  //90-61
168   the3 = -90.;
169   phi3 = -61.;
170   AliMatrix(idrotm[1801], the1, phi1, the2, phi2, the3, phi3);
171   the1 = 0.;
172   phi1 = 0.;
173   the2 = 90.;
174   phi2 = 151.;
175   the3 = 90.;
176   phi3 = 61.;
177   AliMatrix(idrotm[1802], the1, phi1, the2, phi2, the3, phi3);
178   phi2 = 29.;
179   the3 = -90.;
180   phi3 = -61.;
181   AliMatrix(idrotm[1803], the1, phi1, the2, phi2, the3, phi3);
182
183   cpar[0] = 25.;
184   cpar[1] = 100.3; //25+75.3
185   cpar[2] = 33.5;
186   cpar[3] = 270.;
187   cpar[4] = 360.;
188 //*  coil high cuts
189   TVirtualMC::GetMC()->Gsvolu("DC11", "TUBS", idtmed[kCoil+40], cpar, 5);
190
191   dx = TMath::Sin(30.5*kDegrad) * -(207.+33.5)+5./TMath::Sin(30.5*kDegrad); 
192   dy = TMath::Cos(30.5*kDegrad) * -(207.+33.5);  
193   dz = cpar[1] - 243.55-2.45;
194   TVirtualMC::GetMC()->Gspos("DC11", 1, "DDIP",  dx, dy,  dz+kZDipole, idrotm[1800], "ONLY");
195   TVirtualMC::GetMC()->Gspos("DC11", 2, "DDIP",  dx, dy, -dz+kZDipole, idrotm[1802], "ONLY");
196   TVirtualMC::GetMC()->Gspos("DC11", 3, "DDIP", -dx, dy,  dz+kZDipole, idrotm[1801], "ONLY");
197   TVirtualMC::GetMC()->Gspos("DC11", 4, "DDIP", -dx, dy, -dz+kZDipole, idrotm[1803], "ONLY");
198
199
200
201 //* ... higher cuts
202   cpar[0] = 25.;
203   cpar[1] = 100.3; //25+75.3
204   cpar[2] = 33.5;
205   cpar[3] = 0.;
206   cpar[4] = 90.;
207 //*  coil high cuts
208   TVirtualMC::GetMC()->Gsvolu("DC12", "TUBS", idtmed[kCoil+40], cpar, 5);
209
210   dx = TMath::Sin(30.5*kDegrad) * -(207.+33.5)+5./TMath::Sin(30.5*kDegrad); 
211   dy = TMath::Cos(30.5*kDegrad) *(207.+33.5);  
212   dz = cpar[1] - 243.55-2.45;
213   TVirtualMC::GetMC()->Gspos("DC12", 1, "DDIP",  dx, dy,  dz+kZDipole, idrotm[1801], "ONLY");
214   TVirtualMC::GetMC()->Gspos("DC12", 2, "DDIP",  dx, dy, -dz+kZDipole, idrotm[1803], "ONLY");
215   TVirtualMC::GetMC()->Gspos("DC12", 3, "DDIP", -dx, dy,  dz+kZDipole, idrotm[1800], "ONLY");
216   TVirtualMC::GetMC()->Gspos("DC12", 4, "DDIP", -dx, dy, -dz+kZDipole, idrotm[1802], "ONLY");
217
218   the1 = 90.;
219   phi1 = 61.;
220   the2 = 90.;
221   phi2 = 151.;
222   the3 = 0.;
223   phi3 = 0.;
224   AliMatrix(idrotm[1804], the1, phi1, the2, phi2, the3, phi3);
225   the1 = 90.;
226   phi1 = -61.;
227   the2 = 90.;
228   phi2 = -151.;
229   AliMatrix(idrotm[1805], the1, phi1, the2, phi2, the3, phi3);
230   the1 = 90.;
231   phi1 = 119.; //180 -61
232   the2 = 90.;
233   phi2 = 209.; //270-61
234   AliMatrix(idrotm[1806], the1, phi1, the2, phi2, the3, phi3);
235   the1 = 90.;
236   phi1 = -119.;
237   the2 = 90.;
238   phi2 = -209.;
239   AliMatrix(idrotm[1807], the1, phi1, the2, phi2, the3, phi3); 
240
241 //*  coil - high cuts
242
243   tpar[0] = 37.65;
244   tpar[1] = 33.5;
245   tpar[2] = 145.5;
246   TVirtualMC::GetMC()->Gsvolu("DL1 ", "BOX ", idtmed[kCoil+40], tpar, 3);
247
248 // coil - low cuts
249
250   tpar[0] = 5.;
251   dx = 37.65  - 5.;  
252   TVirtualMC::GetMC()->Gsvolu("DL2 ", "BOX ", idtmed[kCoil], tpar, 3);
253   TVirtualMC::GetMC()->Gspos("DL2 ", 1, "DL1 ", dx, 0., 0., 0, "ONLY");
254
255   dx =-53.62;
256   dy =-241.26819;
257   dz = 0.; 
258   TVirtualMC::GetMC()->Gspos("DL1 ", 1, "DDIP", dx,  dy, dz+kZDipole, idrotm[1804], "ONLY");
259   TVirtualMC::GetMC()->Gspos("DL1 ", 2, "DDIP", dx, -dy, dz+kZDipole, idrotm[1805], "ONLY");
260   TVirtualMC::GetMC()->Gspos("DL1 ", 3, "DDIP",-dx,  dy, dz+kZDipole, idrotm[1806], "ONLY");
261   TVirtualMC::GetMC()->Gspos("DL1 ", 4, "DDIP",-dx, -dy, dz+kZDipole, idrotm[1807], "ONLY");
262
263   // Contactor
264
265  //  high cuts
266
267   //Steel outer face planes
268
269   cpar[0] = 207.-18.6;
270   cpar[1] = 274.+18.6;
271   cpar[2] = 1.;
272   cpar[3] = -50.;
273   cpar[4] = 50.; 
274  
275   TVirtualMC::GetMC()->Gsvolu("DCO1", "TUBS", idtmed[1818], cpar, 5);
276   dx = -5.;
277   dz = 168.25-1.5-1.;
278   TVirtualMC::GetMC()->Gspos("DCO1", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
279   dz = 243.55+4.5+1.5+1.;
280   TVirtualMC::GetMC()->Gspos("DCO1", 2, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
281   
282   // 9.06.2000
283
284   //  cpar[0] = 207.-18.6;
285   //  cpar[1] = 274.+18.6;
286   // cpar[2] = 1.;
287   cpar[3] = 180.-50.;
288   cpar[4] = 180.+50.; 
289  
290   TVirtualMC::GetMC()->Gsvolu("DCO2", "TUBS", idtmed[1818], cpar, 5);
291   dx = +5.;
292   dz = 168.25-1.5-1.;
293   TVirtualMC::GetMC()->Gspos("DCO2", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
294   dz = 243.55+4.5+1.5+1.;
295   TVirtualMC::GetMC()->Gspos("DCO2", 2, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
296  
297
298
299   // Resin face planes
300
301   cpar[0] = 207.;
302   cpar[1] = 274.;
303   cpar[2] = .75;
304   cpar[3] = -50.;
305   cpar[4] = 50.; 
306  
307   TVirtualMC::GetMC()->Gsvolu("DCO3", "TUBS", idtmed[1812], cpar, 5);
308   dx = -5;
309   dz = 168.25-0.75;
310   TVirtualMC::GetMC()->Gspos("DCO3", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
311   dz = 243.55+4.5+0.75;
312   TVirtualMC::GetMC()->Gspos("DCO3", 2, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
313
314   // 9.06.2000
315
316   cpar[3] = 180.-50.;
317   cpar[4] = 180.+50.; 
318   TVirtualMC::GetMC()->Gsvolu("DCO4", "TUBS", idtmed[1812], cpar, 5);
319   dx = +5;
320   dz = 168.25-0.75;
321   TVirtualMC::GetMC()->Gspos("DCO4", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
322   dz = 243.55+4.5+0.75 ;
323   TVirtualMC::GetMC()->Gspos("DCO4", 2, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
324
325  
326   // G10 face plane
327
328   cpar[0] = 207.;
329   cpar[1] = 274.;
330   cpar[2] = 2.25;
331   cpar[3] = -50.;
332   cpar[4] = 50.; 
333  
334   TVirtualMC::GetMC()->Gsvolu("DCO5", "TUBS", idtmed[1810], cpar, 5);
335
336   dx = -5;
337   dz = 243.55+2.25;
338   TVirtualMC::GetMC()->Gspos("DCO5", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
339
340   // 9.06.2000
341
342   cpar[3] = 180.-50.;
343   cpar[4] = 180.+50.; 
344
345   TVirtualMC::GetMC()->Gsvolu("DCO6", "TUBS", idtmed[1810], cpar, 5);
346
347   dx = +5;
348   dz = 243.55+2.25;
349   TVirtualMC::GetMC()->Gspos("DCO6", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
350
351   //Steel supported planes
352
353   cpar[0] = 274.+1.5+2.;
354   cpar[1] = 274.+18.6;
355   cpar[2] = 1.;
356   cpar[3] = -50.;
357   cpar[4] = 50.;  
358  
359   TVirtualMC::GetMC()->Gsvolu("DCO7", "TUBS", idtmed[1818], cpar, 5);
360
361   dx = -5;
362   dz = 168.25+1.;
363   TVirtualMC::GetMC()->Gspos("DCO7", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
364
365   // 9.06.2000
366   cpar[0] = 274.+1.5+2.;
367   cpar[1] = 274.+18.6;
368   cpar[2] = 1.;
369   cpar[3] = 180.-50.;
370   cpar[4] = 180.+50.; 
371
372  
373   TVirtualMC::GetMC()->Gsvolu("DCO8", "TUBS", idtmed[1818], cpar, 5);
374
375   dx = +5;
376   dz = 168.25+1.;
377   TVirtualMC::GetMC()->Gspos("DCO8", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
378
379   //
380
381   cpar[0] = 207.- 18.6;
382   cpar[1] = 207.- 2.- 1.5;
383   cpar[2] = 1.;
384   cpar[3] = -50.;
385   cpar[4] = 50.; 
386
387   TVirtualMC::GetMC()->Gsvolu("DCO9", "TUBS", idtmed[1818], cpar, 5);
388
389   dx = -5;
390   dz = 168.25+1.;
391   TVirtualMC::GetMC()->Gspos("DCO9", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
392
393   // 9.06.2000
394
395   cpar[0] = 207.- 18.6;
396   cpar[1] = 207.- 2.- 1.5;
397   cpar[2] = 1.;
398   cpar[3] = 180.-50.;
399   cpar[4] = 180.+50.; 
400
401   TVirtualMC::GetMC()->Gsvolu("DCOA", "TUBS", idtmed[1818], cpar, 5);
402
403   dx = +5;
404   dz = 168.25+1.;
405   TVirtualMC::GetMC()->Gspos("DCOA", 1, "DDIP", dx, 0, dz+kZDipole, 0, "ONLY");
406
407
408   // Sides steel planes
409
410   cpar[0] = 207. - 1.5 -2.;
411   cpar[1] = 207. - 1.5;
412   cpar[2] = ((243.55+4.5+1.5)-168.25)/2;
413   cpar[3] = -50.;
414   cpar[4] = 50.; 
415  
416   TVirtualMC::GetMC()->Gsvolu("DCOB", "TUBS", idtmed[1818], cpar, 5);
417
418   cpar[0] = 274. + 1.5;
419   cpar[1] = 274. + 1.5 +2.;
420
421   TVirtualMC::GetMC()->Gsvolu("DCOC", "TUBS", idtmed[1818], cpar, 5);
422
423   dx=-5.;
424   dz = ((243.55+4.5+1.5)+168.25)/2;
425   TVirtualMC::GetMC()->Gspos("DCOB", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
426   TVirtualMC::GetMC()->Gspos("DCOC", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
427
428   // 9.06.2000
429
430   cpar[0] = 207. - 1.5 -2.;
431   cpar[1] = 207. - 1.5;
432   cpar[2] = ((243.55+4.5+1.5)-168.25)/2;
433   cpar[3] = 180.-50.;
434   cpar[4] = 180.+50.; 
435
436   TVirtualMC::GetMC()->Gsvolu("DCOD", "TUBS", idtmed[1818], cpar, 5);
437
438   cpar[0] = 274. + 1.5;
439   cpar[1] = 274. + 1.5 +2.;
440
441   TVirtualMC::GetMC()->Gsvolu("DCOE", "TUBS", idtmed[1818], cpar, 5);
442
443   dx=+5.;
444   dz = ((243.55+4.5+1.5)+168.25)/2;
445   TVirtualMC::GetMC()->Gspos("DCOD", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
446   TVirtualMC::GetMC()->Gspos("DCOE", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
447
448
449   // Top and bottom resin  planes
450
451   cpar[0] = 207. - 1.5;
452   cpar[1] = 207.;
453   cpar[2] = ((243.55+4.5+1.5)-168.25)/2;
454   cpar[3] = -50.;
455   cpar[4] = 50.; 
456  
457   TVirtualMC::GetMC()->Gsvolu("DCOF", "TUBS", idtmed[1812], cpar, 5);
458
459   cpar[0] = 274.;
460   cpar[1] = 274. + 1.5;
461
462   TVirtualMC::GetMC()->Gsvolu("DCOG", "TUBS", idtmed[1812], cpar, 5);
463
464
465   dx=-5.;
466   dz = ((243.55+4.5+1.5)+168.25)/2;
467   TVirtualMC::GetMC()->Gspos("DCOF", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
468   TVirtualMC::GetMC()->Gspos("DCOG", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
469
470   // 9.06.2000
471   cpar[0] = 207. - 1.5;
472   cpar[1] = 207.;
473   cpar[2] = ((243.55+4.5+1.5)-168.25)/2;
474
475   cpar[3] = 180.-50.;
476   cpar[4] = 180.+50.; 
477
478   TVirtualMC::GetMC()->Gsvolu("DCOH", "TUBS", idtmed[1812], cpar, 5);
479
480   cpar[0] = 274.;
481   cpar[1] = 274. + 1.5;
482
483   TVirtualMC::GetMC()->Gsvolu("DCOI", "TUBS", idtmed[1812], cpar, 5);
484
485
486   dx=+5.;
487   dz = ((243.55+4.5+1.5)+168.25)/2;
488   TVirtualMC::GetMC()->Gspos("DCOH", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
489   TVirtualMC::GetMC()->Gspos("DCOI", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
490
491
492   // Aluminum cabels
493
494   cpar[0] = 274. + 1.5  +2.;
495   cpar[1] = 274. + 1.5  +2. + 80.;
496   cpar[2] = 5.05/2;
497   cpar[3] = -24.;
498   cpar[4] = 24.; 
499  
500   TVirtualMC::GetMC()->Gsvolu("DCOJ", "TUBS", idtmed[kCable], cpar, 5);
501
502   //  dx = 274. + 1.5  +2. +40.;
503   //  dx = 5. + 1.5 +2. +40.;
504   //  dx = 5. + 1.5 +2.;
505   dx=-5.;
506   dz = 168.25 + 5.05 + 5.05/2;
507   TVirtualMC::GetMC()->Gspos("DCOJ", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
508
509   dz = 243.55 - 5.05/2;
510   TVirtualMC::GetMC()->Gspos("DCOJ", 2, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
511
512   // 9.06.2000
513
514   cpar[3] = 180.-24.;
515   cpar[4] = 180.+24.; 
516
517    TVirtualMC::GetMC()->Gsvolu("DCOK", "TUBS", idtmed[kCable], cpar, 5);
518
519   //  dx = 274. + 1.5  +2. +40.;
520   //  dx = 5. + 1.5 +2. +40.;
521   //  dx = 5. + 1.5 +2.;
522   dx=+5.;
523   dz = 168.25 + 5.05 + 5.05/2;
524   TVirtualMC::GetMC()->Gspos("DCOK", 1, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
525
526   dz = 243.55 - 5.05/2;
527   TVirtualMC::GetMC()->Gspos("DCOK", 2, "DDIP", dx,  0, dz+kZDipole, 0, "ONLY");
528
529  
530   //   YOKE 
531
532 // Top and bottom blocks
533   ypar[0] = 298.1; 
534   ypar[1] = 69.5;
535   ypar[2] = 155.75;
536
537 // iron- high cuts
538   TVirtualMC::GetMC()->Gsvolu("DY1 ", "BOX ", idtmed[1858], ypar, 3);
539   ypar[0] = 144.+10.; 
540   ypar[1] = 193.3+10.;
541   ypar[2] = 5.;
542   ypar[3] = 155.75;
543   dy = -69.5 + 5.;
544 // iron- low cuts
545   TVirtualMC::GetMC()->Gsvolu("DY11", "TRD1", idtmed[1818], ypar, 4);
546   TVirtualMC::GetMC()->Gspos("DY11", 1, "DY1 ", 0.,  dy, 0., 0, "ONLY");
547
548   dy = 365.5;
549   dz = 4.95;
550   TVirtualMC::GetMC()->Gspos("DY1 ", 1, "DDIP", 0.,  dy, -dz+kZDipole, 0, "ONLY");
551
552   the1 = 270.;
553   phi1 = 0.;
554   the2 = 270.;
555   phi2 = 90.;
556   the3 = 0.;
557   phi3 = 0.;
558   AliMatrix(idrotm[1808], the1, phi1, the2, phi2, the3, phi3);
559   TVirtualMC::GetMC()->Gspos("DY1 ", 2, "DDIP", 0., -dy, -dz+kZDipole, idrotm[1808] , "ONLY");
560
561 // side walls
562   //  ypar[0] = 579./2.; 
563   ypar[0] = 296.; 
564   ypar[1] = 0.;
565   ypar[2] = 0.;
566   ypar[3] = 155.75;
567   ypar[4] = 47.9;
568   ypar[5] = 72.55;
569   ypar[6] = 4.3058039629;
570   // z+ 
571   ypar[7] = 155.75;
572   ypar[8] = 47.9;
573   ypar[9] = 72.55;
574   ypar[10] = 4.3058039629;
575
576 // iron - high cuts
577
578   TVirtualMC::GetMC()->Gsvolu("DY2 ", "TRAP", idtmed[1858], ypar,11);
579
580   ypar[4] = 47.9 -5.;
581   ypar[5] = 72.55 -5.;
582
583   ypar[8] = 47.9 -5.;
584   ypar[9] = 72.55 -5.;
585
586
587 // iron - low cuts
588
589   TVirtualMC::GetMC()->Gsvolu("DY22", "TRAP", idtmed[1818], ypar,11);
590
591   dy = 0.;
592   dx = -5.;
593
594   TVirtualMC::GetMC()->Gspos("DY22", 1, "DY2 ", dx,  dy, 0., 0, "ONLY");
595
596   the1 = 90.;
597   phi1 = 180.;
598   the2 = 180.;
599   phi2 = 180.;
600   the3 = 90.;
601   phi3 = 90.;
602   AliMatrix(idrotm[1809], the1, phi1, the2, phi2, the3, phi3);
603
604   the1 = 90.;
605   phi1 = 0.;
606   the2 = 180.;
607   phi2 = 0.;
608   the3 = 90.;
609   phi3 = 90.;
610   AliMatrix(idrotm[1810], the1, phi1, the2, phi2, the3, phi3);
611
612   dx = 228.875;
613   dz = - 4.95;
614   
615   TVirtualMC::GetMC()->Gspos("DY2 ", 1, "DDIP",  dx, 0.0,  dz+kZDipole, idrotm[1809], "ONLY");
616   TVirtualMC::GetMC()->Gspos("DY2 ", 2, "DDIP", -dx, 0.0,  dz+kZDipole, idrotm[1810], "ONLY");
617   
618   AliMatrix(idrotm[1811], 270., 0., 90., 90., 180., 0.);
619   TVirtualMC::GetMC()->Gspos("DDIP", 1, "ALIC", 0., 0., 0., idrotm[1811], "ONLY");
620   gGeoManager->SetVolumeAttribute("DDIP", "SEEN", 0);
621 }
622
623
624 void AliDIPOv2::CreateCompensatorDipole()
625 {
626     //
627     //  Geometry of the compensator Dipole MBWMD (was MCB @ SPS)
628     //  LAB I/EA Note 74.10
629     //  6/5/1974
630     //
631     const Float_t kHCoil       =  22.;  // Coil Height
632     const Float_t kWCoil       =  12.;  // Coil Width
633     const Float_t kLCoilH      = 250.;  // Hor. Coil Length
634     const Float_t kRCoilC      =  31.;  // Circ Coil Radius
635     const Float_t kWBase       = 125.;  // Base Width
636     const Float_t kHBase       =  30.;  // Base Height
637     
638     const Float_t kWUYoke      =  16.;
639     const Float_t kHUYoke      =  31.;
640
641     const Float_t kWLYoke      =  50.0;
642     const Float_t kHLYoke      =  61.0;
643     const Float_t kLLYoke      =  kLCoilH + kRCoilC;
644
645     const Float_t kWApperture  =  12.;
646     const Float_t kDCoil       =  kHUYoke + kHLYoke - 6. - 2. * kRCoilC;
647     
648     const Float_t kH           =  kHBase +  kHUYoke +  kHLYoke;
649     
650     Int_t *idtmed = fIdtmed->GetArray()-1799;
651     Int_t idrotm[1899];
652 //
653     Float_t pbox[3];
654 //  Mother volumes
655     TGeoVolumeAssembly* asDCM0 = new TGeoVolumeAssembly("DCM0");
656     asDCM0->SetName("DCM0");
657     
658 //
659 //  Mother volume containing lower coil
660     pbox[0] = kWLYoke / 2.;
661     pbox[1] = kHLYoke / 2.;
662     pbox[2] = kLLYoke / 2.;
663     
664     TVirtualMC::GetMC()->Gsvolu("DCML", "BOX", idtmed[1809 + 40], pbox, 3);
665 //
666 // Base
667     pbox[0] = kWBase / 2.;
668     pbox[1] = kHBase / 2.;
669     TVirtualMC::GetMC()->Gsvolu("DCBA", "BOX", idtmed[1809 + 40], pbox, 3);
670 //
671 // Coil: straight sections, horizontal
672     pbox[0] = kWCoil  / 2.;
673     pbox[1] = kHCoil  / 2.;
674     pbox[2] = kLCoilH / 2.;
675     TVirtualMC::GetMC()->Gsvolu("DCH1", "BOX", idtmed[1816 + 40], pbox, 3);
676 //
677 // Coil: straight sections, horizontal
678     pbox[0] = kWCoil  / 2.;
679     pbox[1] = kHCoil  / 2.;
680     pbox[2] = kLCoilH / 2.;
681     TVirtualMC::GetMC()->Gsvolu("DCH2", "BOX", idtmed[1816 + 40], pbox, 3);
682
683 //
684 // Mother volume containing upper coil
685     pbox[0] =  kWUYoke / 2.;
686     pbox[1] =  kHUYoke / 2.;
687     pbox[2] =  kLCoilH / 2.;
688     TVirtualMC::GetMC()->Gsvolu("DCMU", "BOX", idtmed[1809 + 40], pbox, 3);
689
690 //
691 // Coil: straight sections, vertical
692     pbox[0] = kWCoil / 2.;
693     pbox[1] = kDCoil / 2.;
694     pbox[2] = kHCoil / 2.;
695     
696     TVirtualMC::GetMC()->Gsvolu("DCCV", "BOX", idtmed[1816 + 40], pbox, 3);
697 //
698 // Coil: circular section 
699
700     Float_t ptubs[5];
701     ptubs[0] = kRCoilC - kHCoil;
702     ptubs[1] = kRCoilC;
703     ptubs[2] = kWCoil / 2.;
704     ptubs[3] =  0.;
705     ptubs[4] = 90.;
706     TVirtualMC::GetMC()->Gsvolu("DCC1", "TUBS", idtmed[1816 + 40], ptubs, 5);
707 //
708 // Clamps
709     Float_t ppgon[10];
710     ppgon[0] =  0.;
711     ppgon[1] = 90.;
712     ppgon[2] =  1.;
713     ppgon[3] =  2.;
714     ppgon[4] = -1.;
715     ppgon[5] =  0.;
716     ppgon[6] = 24.75;
717     ppgon[7] =  1.;
718     ppgon[8] =  0.;
719     ppgon[9] = 24.75;
720     TVirtualMC::GetMC()->Gsvolu("DCLA", "PGON", idtmed[1809 + 40], ppgon, 10);
721 //
722 // Assemble all
723 //
724     AliMatrix(idrotm[1811], -90., 0., 90., 90.,   0., 0.);
725     AliMatrix(idrotm[1812],   0., 0., 90., 90.,  90., 0.);  
726     AliMatrix(idrotm[1813], 180., 0., 90., 90.,  90., 0.);
727     AliMatrix(idrotm[1814],   0., 180., 90., 270.,  90., 0.);
728     AliMatrix(idrotm[1815], 180., 180., 90., 270.,  90., 0.);  
729     
730     Float_t dx, dy, dz;
731     Float_t dy0 = 0.;
732
733     dy0 = -kH / 2. + kHBase/2.;
734     TVirtualMC::GetMC()->Gspos("DCBA", 1, "DCM0",  0., dy0, 15.0, 0, "ONLY");
735     
736     // Lower coil
737     dx = ( kWLYoke - kWCoil) / 2.;
738     dy = (-kHLYoke + kHCoil) / 2. + 6.;
739     TVirtualMC::GetMC()->Gspos("DCH1", 1, "DCML",  dx, dy,  -kRCoilC / 2., 0, "ONLY");
740     // Lower mother volume
741     dx = (kWLYoke + kWApperture) / 2.;
742     dy0 += (kHBase +  kHLYoke) / 2.;
743     TVirtualMC::GetMC()->Gspos("DCML", 1, "DCM0", -dx, dy0, kRCoilC / 2., 0, "ONLY");
744     TVirtualMC::GetMC()->Gspos("DCML", 2, "DCM0", +dx, dy0, kRCoilC / 2., idrotm[1811], "ONLY");
745     
746     dx = (kWUYoke - kWCoil) / 2.;
747     dy = (kHUYoke - kHCoil) / 2;
748     // Upper coil
749     TVirtualMC::GetMC()->Gspos("DCH2", 1, "DCMU",   dx,  dy, 0., 0, "ONLY");
750     // Upper mother volume
751     dx = (kWUYoke + kWApperture) / 2.;
752     dy0 +=  (kHLYoke + kHUYoke) / 2.;
753     TVirtualMC::GetMC()->Gspos("DCMU", 1, "DCM0", -dx, dy0, 0., 0, "ONLY");
754     TVirtualMC::GetMC()->Gspos("DCMU", 2, "DCM0", +dx, dy0, 0., idrotm[1811], "ONLY");
755
756     // Vertical coils
757     dx =  (kWCoil +  kWApperture) / 2.;
758     dy =  kH / 2. - kDCoil / 2. - kRCoilC;
759     dz =  (kLCoilH - kHCoil) / 2. + kRCoilC;
760     TVirtualMC::GetMC()->Gspos("DCCV", 1, "DCM0",  dx,  dy, -dz, 0, "ONLY");
761     TVirtualMC::GetMC()->Gspos("DCCV", 2, "DCM0", -dx,  dy, -dz, 0, "ONLY");
762
763     dx = (kWLYoke - kWCoil) / 2.;
764     dy = -kHLYoke / 2. + kDCoil / 2. + 6. + kRCoilC;
765     dz =  kLLYoke / 2. - kHCoil / 2.;
766     
767     TVirtualMC::GetMC()->Gspos("DCCV", 3, "DCML", dx, dy,  dz, 0, "ONLY");
768
769
770
771     // Circular coil
772     dx =  (kWCoil +  kWApperture) / 2.;
773     dy = dy0 + kHUYoke / 2. - kRCoilC;
774     dz =  kLCoilH / 2.;
775     TVirtualMC::GetMC()->Gspos("DCC1", 1, "DCM0", -dx, dy,  dz, idrotm[1812], "ONLY");
776     TVirtualMC::GetMC()->Gspos("DCC1", 2, "DCM0", +dx, dy,  dz, idrotm[1812], "ONLY");
777     TVirtualMC::GetMC()->Gspos("DCC1", 3, "DCM0", +dx, dy, -dz, idrotm[1813], "ONLY");
778     TVirtualMC::GetMC()->Gspos("DCC1", 4, "DCM0", -dx, dy, -dz, idrotm[1813], "ONLY");
779     dy = -kH / 2. + kHBase + 6. + kRCoilC;
780     TVirtualMC::GetMC()->Gspos("DCC1", 5, "DCM0", +dx, dy, -dz, idrotm[1815], "ONLY");
781     TVirtualMC::GetMC()->Gspos("DCC1", 6, "DCM0", -dx, dy, -dz, idrotm[1815], "ONLY");
782
783     dx = ( kWLYoke - kWCoil) / 2.;
784     dy =  -kHLYoke / 2. + 6. + kRCoilC;
785     dz =  kLLYoke / 2. - kRCoilC;
786     TVirtualMC::GetMC()->Gspos("DCC1", 7, "DCML", dx, dy, dz, idrotm[1814], "ONLY");
787
788 //  Clamps
789     dx = kWApperture / 2. + kWUYoke;
790     dy = -kH / 2. + kHLYoke + kHBase;
791     
792
793     TVirtualMC::GetMC()->Gspos("DCLA", 1, "DCM0",  dx, dy, -119., 0, "ONLY");
794     TVirtualMC::GetMC()->Gspos("DCLA", 2, "DCM0",  dx, dy,  -44., 0, "ONLY");
795     TVirtualMC::GetMC()->Gspos("DCLA", 3, "DCM0",  dx, dy,   46., 0, "ONLY");
796     TVirtualMC::GetMC()->Gspos("DCLA", 4, "DCM0",  dx, dy,  119., 0, "ONLY");
797
798     TVirtualMC::GetMC()->Gspos("DCLA", 5, "DCM0",  -dx, dy, -119., idrotm[1811], "ONLY");
799     TVirtualMC::GetMC()->Gspos("DCLA", 6, "DCM0",  -dx, dy,  -44., idrotm[1811], "ONLY");
800     TVirtualMC::GetMC()->Gspos("DCLA", 7, "DCM0",  -dx, dy,   46., idrotm[1811], "ONLY");
801     TVirtualMC::GetMC()->Gspos("DCLA", 8, "DCM0",  -dx, dy,  119., idrotm[1811], "ONLY");
802
803
804     AliMatrix(idrotm[1816], 270., 0., 90., 90.,  180., 0.);  
805     TVirtualMC::GetMC()->Gspos("DCM0", 1, "ALIC",  0., -12.,  1075., idrotm[1816], "ONLY");
806 }
807
808
809 //_____________________________________________________________________________
810 void AliDIPOv2::CreateMaterials()
811 {
812   //
813   // Create Materials for Magnetic Dipole version 2
814   //
815   
816   Int_t isxfld1   = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Integ();
817   Int_t isxfld2   = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->PrecInteg();
818   Float_t sxmgmx  = ((AliMagF*)TGeoGlobalMagField::Instance()->GetField())->Max();
819   
820   
821   Float_t asteel[4] = { 55.847,51.9961,58.6934,28.0855 };
822   Float_t zsteel[4] = { 26.,24.,28.,14. };
823   Float_t wsteel[4] = { .715,.18,.1,.005 };
824
825   Float_t acoil[3]  = { 26.98,1.01,16. };
826   Float_t zcoil[3]  = { 13.,1.,8. };
827   Float_t wcoil[3]  = { .66,.226,.114 };
828
829   Float_t aresi[3]  = { 1.01,12.011,16.};
830   Float_t zresi[3]  = { 1.,6.,8. };
831   Float_t wresi[3]  = { .0644,.7655,.1701 };
832
833   Float_t aG10[5] = { 1.01,12.011,16.,28.085 ,79.904 };
834   Float_t zG10[5] = { 1.,6.,8.,14.,35. };
835   Float_t wG10[5] = { .02089,.22338,.28493,.41342,.05738 };
836
837     // AIR
838
839   Float_t aAir[4]={12.0107,14.0067,15.9994,39.948};
840   Float_t zAir[4]={6.,7.,8.,18.};
841   Float_t wAir[4]={0.000124,0.755267,0.231781,0.012827};
842   Float_t dAir = 1.20479E-3;
843   Float_t dAir1 = 1.20479E-10;
844
845   
846   Float_t epsil, stmin, deemax, tmaxfd, stemax;
847   
848   // --- Define the various materials for GEANT --- 
849   //     Aluminum 
850   AliMaterial( 9, "ALUMINIUM0$", 26.98, 13., 2.7, 8.9, 37.2);
851   AliMaterial(29, "ALUMINIUM1$", 26.98, 13., 2.7, 8.9, 37.2);
852   AliMaterial(49, "ALUMINIUM2$", 26.98, 13., 2.7, 8.9, 37.2);
853   
854   //     Iron 
855   AliMaterial(10, "IRON0$     ", 55.85, 26., 7.87, 1.76, 17.1);
856   AliMaterial(30, "IRON1$     ", 55.85, 26., 7.87, 1.76, 17.1);
857   AliMaterial(50, "IRON2$     ", 55.85, 26., 7.87, 1.76, 17.1);
858   //     Copper
859   AliMaterial(17, "COPPER0$   ", 63.55, 29., 8.96, 1.43, 15.1);
860   AliMaterial(37, "COPPER1$   ", 63.55, 29., 8.96, 1.43, 15.1);
861   AliMaterial(57, "COPPER2$   ", 63.55, 29., 8.96, 1.43, 15.1);
862   //     Air 
863   AliMixture(15, "AIR0$      ", aAir, zAir, dAir, 4, wAir);
864   AliMixture(35, "AIR1$      ", aAir, zAir, dAir, 4, wAir);
865   AliMixture(55, "AIR2$      ", aAir, zAir, dAir, 4, wAir);
866   AliMixture(75, "AIR_MUON   ", aAir, zAir, dAir, 4, wAir);
867   //     Vacuum 
868   AliMixture(16, "VACUUM0$ ", aAir, zAir, dAir1, 4, wAir);
869   AliMixture(36, "VACUUM1$ ", aAir, zAir, dAir1, 4, wAir);
870   AliMixture(56, "VACUUM2$ ", aAir, zAir, dAir1, 4, wAir);
871   
872   //     stainless Steel 
873   AliMixture(19, "STAINLESS STEEL0$", asteel, zsteel, 7.88, 4, wsteel);
874   AliMixture(39, "STAINLESS STEEL1$", asteel, zsteel, 7.88, 4, wsteel);
875   AliMixture(59, "STAINLESS STEEL2$", asteel, zsteel, 7.88, 4, wsteel);
876   
877   //     Coil 
878   AliMixture(14, "Al0$", acoil, zcoil, 2.122, 3, wcoil);
879   AliMixture(34, "Al1$", acoil, zcoil, 2.122, 3, wcoil);
880   AliMixture(54, "Al2$", acoil, zcoil, 2.122, 3, wcoil);
881
882   //RESIN
883   AliMixture(13, "RESIN0$", aresi, zresi, 1.05, 3, wresi);
884   AliMixture(33, "RESIN1$", aresi, zresi, 1.05, 3, wresi);
885   AliMixture(53, "RESIN2$", aresi, zresi, 1.05, 3, wresi);  
886
887   //G10
888   AliMixture(11, "G100$", aG10, zG10, 1.7, 5, wG10);
889   AliMixture(31, "G101$", aG10, zG10, 1.7, 5, wG10);
890   AliMixture(51, "G102$", aG10, zG10, 1.7, 5, wG10); 
891  
892   // **************** 
893   //     Defines tracking media parameters. 
894   //     Les valeurs sont commentees pour laisser le defaut 
895   //     a GEANT (version 3-21, page CONS200), f.m. 
896   epsil  = .001;  // Tracking precision, 
897   stemax = -1.;   // Maximum displacement for multiple scat 
898   tmaxfd = -20.;  // Maximum angle due to field deflection 
899   deemax = -.3;   // Maximum fractional energy loss, DLS 
900   stmin  = -.8;
901   // *************** 
902   
903   //    Aluminum 
904   AliMedium( 9, "ALU_C0          ",  9, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
905   AliMedium(29, "ALU_C1          ", 29, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
906   AliMedium(49, "ALU_C2          ", 49, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
907   
908   //    Iron 
909   AliMedium(10, "FE_C0           ", 10, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
910   AliMedium(30, "FE_C1           ", 30, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
911   AliMedium(50, "FE_C2           ", 50, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
912   
913   //    Air 
914   AliMedium(15, "AIR_C0          ", 15, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
915   AliMedium(35, "AIR_C1          ", 35, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
916   AliMedium(55, "AIR_C2          ", 55, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
917   AliMedium(75, "AIR_MUON        ", 75, 0, isxfld2, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
918   
919   //    Vacuum 
920   AliMedium(16, "VA_C0           ", 16, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
921   AliMedium(36, "VA_C1           ", 36, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
922   AliMedium(56, "VA_C2           ", 56, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
923   
924   //    Steel 
925   AliMedium(19, "ST_C0           ", 19, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
926   AliMedium(39, "ST_C1           ", 39, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
927   AliMedium(59, "ST_C3           ", 59, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
928   
929   //    Coil 
930   AliMedium(14, "Coil_C1         ", 14, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
931   AliMedium(34, "Coil_C2         ", 34, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
932   AliMedium(54, "Coil_C3         ", 54, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
933
934   //    Resin 
935   AliMedium(13, "RESIN_C0        ", 13, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
936   AliMedium(33, "RESIN_C1        ", 33, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
937   AliMedium(53, "RESIN_C2        ", 53, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
938
939   //    G10 
940   AliMedium(11, "G10_C0          ", 11, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
941   AliMedium(31, "G10_C1          ", 31, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
942   AliMedium(51, "G10_C2          ", 51, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
943   //
944   //    Copper
945   AliMedium(17, "Cu_C0           ", 17, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
946   AliMedium(37, "Cu_C1           ", 37, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
947   AliMedium(57, "Cu_C2           ", 57, 0, isxfld1, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
948
949 }
950
951
952
953
954
955