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