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