Correcting geometry (corresponds to version 1.9)
[u/mrichter/AliRoot.git] / STRUCT / AliMAG.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 /*
17 $Log$
18 Revision 1.11  2002/10/17 16:33:07  hristov
19 Corrected check of the MC type
20
21 Revision 1.10  2002/10/17 16:14:05  hristov
22 MAG geometry with resolved MANY (I.Hrivnacova)
23
24 Revision 1.9  2001/05/16 14:57:22  alibrary
25 New files for folders and Stack
26
27 Revision 1.8  2000/10/02 21:28:15  fca
28 Removal of useless dependecies via forward declarations
29
30 Revision 1.7  2000/06/11 12:35:56  morsch
31 Coding rule violations corrected
32
33 Revision 1.6  1999/09/29 09:24:30  fca
34 Introduction of the Copyright and cvs Log
35
36 */
37
38 ///////////////////////////////////////////////////////////////////////////////
39 //                                                                           //
40 //  L3 Magnet                                                                //
41 //                                                                           //
42 //Begin_Html
43 /*
44 <img src="picts/AliMAGClass.gif">
45 </pre>
46 <br clear=left>
47 <font size=+2 color=red>
48 <p>The responsible person for this module is
49 <a href="mailto:andreas.morsch@cern.ch">Andreas Morsch</a>.
50 </font>
51 <pre>
52 */
53 //End_Html
54 //                                                                           //
55 ///////////////////////////////////////////////////////////////////////////////
56  
57 #include "AliMAG.h"
58 #include "AliRun.h"
59 #include "AliMC.h"
60 #include "AliMagF.h"
61  
62 ClassImp(AliMAG)
63  
64 //_____________________________________________________________________________
65 AliMAG::AliMAG()
66 {
67   //
68   // Default constructor for L3 magnet
69   //
70 }
71  
72 //_____________________________________________________________________________
73 AliMAG::AliMAG(const char *name, const char *title)
74   : AliModule(name,title)
75 {
76   //
77   // Standard constructor for L3 magnet
78   //
79   //Begin_Html
80   /*
81     <img src="picts/aliMAG.gif">
82   */
83   //End_Html
84   
85   SetMarkerColor(7);
86   SetMarkerStyle(2);
87   SetMarkerSize(0.4);
88 }
89
90 //_____________________________________________________________________________
91 void AliMAG::CreateGeometry()
92 {
93   //
94   // Create geometry for L3 magnet
95   //
96   //Begin_Html
97   /*
98     <img src="picts/mag.gif">
99   */
100   //End_Html
101   //Begin_Html
102   /*
103     <img src="picts/tree_mag.gif">
104   */
105   //End_Html
106   
107   Int_t *idtmed = fIdtmed->GetArray()-299;
108   
109   Float_t dpar[13];
110   Int_t idrotm[399];
111   Float_t par[10];
112   
113   // ANGLE POLAIRE MAXIMUM 
114   
115   //  Define Mother 
116   
117   par[0] = 22.5;
118   par[1] = 360.;
119   par[2] = 8.;
120   par[3] = 2.;
121   par[4] = -600.;
122   par[5] = 580.;
123   par[6] = 790.;
124   par[7] = 600.;
125   par[8] = 580.;
126   par[9] = 790.;
127   gMC->Gsvolu("L3MO", "PGON", idtmed[334], par, 10);
128   gMC->Gspos("L3MO", 1, "ALIC", 0., -30., 0., 0, "ONLY");
129   
130   // Define coils 
131   
132   par[5] = 585.;
133   par[6] = 690.;
134   par[8] = 585.;
135   par[9] = 690.;
136   gMC->Gsvolu("L3CO", "PGON", idtmed[328], par, 10);
137   gMC->Gspos("L3CO", 1, "L3MO", 0., 0., 0., 0, "ONLY");
138   
139   par[5] = 580.;
140   par[6] = 585.;
141   par[8] = 580.;
142   par[9] = 585.;
143   gMC->Gsvolu("L3C1", "PGON", idtmed[308], par, 10);
144   gMC->Gspos("L3C1", 1, "L3MO", 0., 0., 0., 0, "ONLY");
145   
146   // Define yoke 
147   
148   par[5] = 690.;
149   par[6] = 790.;
150   par[8] = 690.;
151   par[9] = 790.;
152   gMC->Gsvolu("L3YO", "PGON", idtmed[329], par, 10);
153   gMC->Gspos("L3YO", 1, "L3MO", 0., 0., 0., 0, "ONLY");
154   
155   // Define the return yoke of L3 (DOOR) 
156   
157   par[4] = 600.;
158   par[5] = 0.;
159   par[6] = 790.;
160   par[7] = 700.;
161   par[8] = par[5];
162   par[9] = par[6];
163   gMC->Gsvolu("L3DO", "PGON", idtmed[334], par, 10);
164   gMC->Gsvolu("L3DX", "PGON", idtmed[334], par, 10);
165   
166   par[4] = 610.;
167   par[5] = 0.;
168   par[6] = 790.;
169   par[7] = 700.;
170   par[8] = par[5];
171   par[9] = par[6];
172   gMC->Gsvolu("L3FR", "PGON", idtmed[329], par, 10);
173   gMC->Gsvolu("L3FX", "PGON", idtmed[329], par, 10);
174   
175   // INNER LAYER 
176   
177   par[4] = 600.;
178   par[7] = 610.;
179   gMC->Gsvolu("L3IR", "PGON", idtmed[309], par, 10);
180   gMC->Gsvolu("L3IX", "PGON", idtmed[309], par, 10);
181   
182   //     DOOR OPENING 
183   
184   dpar[0] = 22.5;
185   dpar[1] = 360;
186   dpar[2] = 8.;
187   dpar[3] = 3.;
188   dpar[4] = 610.;
189   dpar[5] = 0.;
190   dpar[6] = 163.5;
191   dpar[7] = 670.;
192   dpar[8] = dpar[5];
193   dpar[9] = dpar[6];
194   dpar[10] = 700.;
195   dpar[11] = dpar[5];
196   dpar[12] = dpar[6] + 50.;
197   gMC->Gsvolu("L3O1", "PGON", idtmed[314], dpar, 13);
198   gMC->Gsvolu("L3O3", "PGON", idtmed[314], dpar, 13);
199   par[4] = 600.;
200   par[5] = 0.;
201   par[6] = 163.5;
202   par[7] = 610.;
203   par[8] = 0.;
204   par[9] = 163.5;
205   gMC->Gsvolu("L3O2", "PGON", idtmed[314], par, 10);
206   gMC->Gsvolu("L3O4", "PGON", idtmed[314], par, 10);
207   
208   //     THE DOOR OPENING HAS TO BE PLACED WITH 'MANY' SINCE THE REGION 
209   //     WILL CONTAIN A MUON CHAMBER, BEAM PIPE AND BEAM SHIELD 
210   //     PLACED WITH 'ONLY'. 
211   
212   AliMatrix(idrotm[300], 90., 0., 90., 90., 180., 0.);
213
214   gMC->Gspos("L3DO", 1, "ALIC", 0., -30., 0., 0, "MANY");
215   gMC->Gspos("L3FR", 1, "L3DO", 0., 0., 0., 0, "MANY");
216   gMC->Gspos("L3IR", 1, "L3DO", 0., 0., 0., 0, "MANY");
217   
218   gMC->Gspos("L3DX", 1, "ALIC", 0., -30., 0., idrotm[300], "MANY");
219   gMC->Gspos("L3FX", 1, "L3DX", 0., 0., 0., 0, "MANY");
220   gMC->Gspos("L3IX", 1, "L3DX", 0., 0., 0., 0, "MANY");
221
222   if(strcmp(gMC->GetName(),"TGeant3")) {
223
224     gMC->Gspos("L3O1", 1, "L3FR", 0., 30., 0., 0, "MANY");
225     gMC->Gspos("L3O2", 1, "L3IR", 0., 30., 0., 0, "MANY");
226     gMC->Gspos("L3O3", 1, "L3FX", 0., 30., 0., 0, "MANY");
227     gMC->Gspos("L3O4", 1, "L3IX", 0., 30., 0., 0, "MANY");
228
229   }
230   else {
231     gMC->Gspos("L3O1", 1, "ALIC", 0., 0., 0., 0, "MANY");
232     gMC->Gspos("L3O2", 1, "ALIC", 0., 0., 0., 0, "MANY");
233     gMC->Gsbool("L3O1", "L3DO");
234     gMC->Gsbool("L3O2", "L3DO");
235   
236     gMC->Gspos("L3O3", 1, "ALIC", 0., 0., 0., idrotm[300], "MANY");
237     gMC->Gspos("L3O4", 1, "ALIC", 0., 0., 0., idrotm[300], "MANY");
238     gMC->Gsbool("L3O3", "L3DX");
239     gMC->Gsbool("L3O4", "L3DX");
240   }      
241 }
242
243 //_____________________________________________________________________________
244 void AliMAG::CreateMaterials()
245 {
246   //
247   // Create materials for L3 magnet
248   //
249   
250   Int_t   isxfld = gAlice->Field()->Integ();
251   Float_t sxmgmx = gAlice->Field()->Max();
252   
253   Float_t epsil, stmin, deemax, tmaxfd, stemax;
254   // --- Define the various materials for GEANT --- 
255   
256   //     Aluminum 
257   AliMaterial(9, "Al$", 26.98, 13., 2.7, 8.9, 37.2);
258   AliMaterial(29, "Al$", 26.98, 13., 2.7, 8.9, 37.2);
259   
260   //     Iron 
261   AliMaterial(10, "Fe$", 55.85, 26., 7.87, 1.76, 17.1);
262   AliMaterial(30, "Fe$", 55.85, 26., 7.87, 1.76, 17.1);
263   
264   //     Air 
265   AliMaterial(15, "Air$", 14.61, 7.3, .001205, 30420., 67500);
266   AliMaterial(35, "Air$", 14.61, 7.3, .001205, 30420., 67500);
267   
268   // **************** 
269   //     Defines tracking media parameters. 
270   //     Les valeurs sont commentees pour laisser le defaut 
271   //     a GEANT (version 3-21, page CONS200), f.m. 
272   epsil  = .001;  // Tracking precision, 
273   stemax = -1.;   // Maximum displacement for multiple scat 
274   tmaxfd = -20.;  // Maximum angle due to field deflection 
275   deemax = -.3;   // Maximum fractional energy loss, DLS 
276   stmin  = -.8;
277   // *************** 
278   
279   //    IRON 
280   
281   AliMedium(10, "FE_C0             ", 10, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
282   AliMedium(30, "FE_C1             ", 30, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
283   
284   //     ALUMINUM 
285
286   AliMedium(9, "ALU_C0            ",  9, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
287   AliMedium(29, "ALU_C1            ", 29, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
288   
289   //     AIR 
290   
291   AliMedium(15, "AIR_C0            ", 15, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
292   AliMedium(35, "AIR_C1            ", 35, 0, isxfld, sxmgmx, tmaxfd, stemax, deemax, epsil, stmin);
293 }
294
295 //_____________________________________________________________________________
296 void AliMAG::DrawModule()
297 {
298   //
299   // Draw a shaded view of the L3 magnet
300   //
301 }
302
303 //_____________________________________________________________________________
304 void AliMAG::Init()
305 {
306   //
307   // Initialise L3 magnet after it has been built
308   Int_t i;
309   //
310   if(fDebug) {
311     printf("\n%s: ",ClassName());
312     for(i=0;i<35;i++) printf("*");
313     printf(" MAG_INIT ");
314     for(i=0;i<35;i++) printf("*");
315     printf("\n%s: ",ClassName());
316     //
317     // Here the MAG initialisation code (if any!)
318     for(i=0;i<80;i++) printf("*");
319     printf("\n");
320   }
321 }
322