Include stdlib.h for exit
[u/mrichter/AliRoot.git] / FMD / AliFMDv1.cxx
1 ///////////////////////////////////////////////////////////////////////////////
2 //                                                                           //
3 //  Forward Multiplicity Detector Version 1                                  //
4 //                                                                           //
5 //Begin_Html
6 /*
7 <img src="picts/AliFMDv1Class.gif">
8 </pre>
9 <br clear=left>
10 <font size=+2 color=red>
11 <p>The responsible person for this module is
12 <a href="mailto:Valeri.Kondratiev@cern.ch">Valeri Kondratiev</a>.
13 </font>
14 <pre>
15 */
16 //End_Html
17 //                                                                           //
18 ///////////////////////////////////////////////////////////////////////////////
19
20 #include <stdlib.h>
21
22 #include "AliRun.h"
23 #include "AliFMDv1.h"
24 #include "AliMC.h"
25 #include "AliConst.h"
26  
27  
28 ClassImp(AliFMDv1)
29  
30 //_____________________________________________________________________________
31 AliFMDv1::AliFMDv1()
32 {
33   //
34   // Defautl constructor for FMD version 1
35   //
36 }
37  
38 //_____________________________________________________________________________
39 AliFMDv1::AliFMDv1(const char *name, const char *title)
40   : AliFMD(name,title)
41 {
42   //
43   // Standard constructor for FMD version 1
44   //
45   AliModule *start = gAlice->GetModule("START");
46   if(start) {
47     Error("ctor","This version of FMD is incompatible with START\n");
48     exit(1);
49   }
50 }
51  
52 //_____________________________________________________________________________
53 void AliFMDv1::CreateGeometry()
54 {
55   //
56   // Creation of the geometry of the FMD version 1
57   //
58   //Begin_Html
59   /*
60     <img src="picts/AliFMDv1Tree.gif">
61   */
62   //End_Html
63   //Begin_Html
64   /*
65     <img src="picts/AliFMDv1.gif">
66   */
67   //End_Html
68
69   
70   Float_t rout;
71   Float_t z;
72   Float_t h1, h2, t0, t1, t2;
73   Float_t tt;
74   Float_t par[3], rin;
75   const Float_t v1 = 42.0;
76   const Float_t v2 = 4.5;
77   const Float_t v3 = 5.62;
78   const Float_t v4 = 16.0;
79   
80   Int_t *idtmed = fIdtmed->GetArray()-899;    
81   
82   // ******************************************************** 
83   //     DEFINE RIGHT DISK#3  OF FMD 
84   // ******************************************************** 
85   
86   //     Define parameters 
87   
88   rin  = 4.5;
89   rout = 10.5;
90   z    = 85.;
91   tt   = 2.5;
92   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
93   h2   = .4;
94   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
95   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
96   t2   = v4/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
97   
98   // *******Inner slice*********** 
99   //     Inner steel wall 
100   par[0] = rin - .02;
101   par[1] = rin;
102   par[2] = 1.5;
103   gMC->Gsvolu("IWR3", "TUBE", idtmed[899], par, 3);
104   gMC->Gspos("IWR3", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
105   //     Front steel wall 
106   par[0] = rin;
107   par[1] = rout;
108   par[2] = .01;
109   gMC->Gsvolu("FWR3", "TUBE", idtmed[899], par, 3);
110   gMC->Gspos("FWR3", 1, "ALIC", 0., 0., z + .01, 0, "ONLY");
111   //     Rear steel wall 
112   gMC->Gsvolu("RWR3", "TUBE", idtmed[899], par, 3);
113   gMC->Gspos("RWR3", 1, "ALIC", 0., 0., z + 2.99, 0, "ONLY");
114   //     MCP 
115   par[0] = rin;
116   par[1] = rout;
117   par[2] = .07;
118   gMC->Gsvolu("MPR3", "TUBE", idtmed[900], par, 3);
119   gMC->Gspos("MPR3", 1, "ALIC", 0., 0., z + 1.57, 0, "ONLY");
120   //     Silicon plate 
121   par[0] = rin;
122   par[1] = rout;
123   par[2] = .019;
124   gMC->Gsvolu("SPR3", "TUBE", idtmed[901], par, 3);
125   gMC->Gspos("SPR3", 1, "ALIC", 0., 0., z + 1.719, 0, "ONLY");
126   //     Summator plate 
127   par[0] = rin;
128   par[1] = rout;
129   par[2] = .01;
130   gMC->Gsvolu("SMR3", "TUBE", idtmed[902], par, 3);
131   gMC->Gspos("SMR3", 1, "ALIC", 0., 0., z + 2.01, 0, "ONLY");
132   // *******Outer slice ******* 
133   //     Ceramic plate 
134   par[0] = rout;
135   par[1] = rout + h1;
136   par[2] = 1.25;
137   gMC->Gsvolu("CPR3", "TUBE", idtmed[902], par, 3);
138   gMC->Gspos("CPR3", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
139   //     Covar spring 
140   par[0] = rout;
141   par[1] = rout + h1;
142   par[2] = t0 / 2.;
143   gMC->Gsvolu("C1R3", "TUBE", idtmed[903], par, 3);
144   gMC->Gspos("C1R3", 1, "ALIC", 0., 0., z + .25 - t0 / 2., 0, "ONLY");
145   gMC->Gsvolu("C2R3", "TUBE", idtmed[903], par, 3);
146   gMC->Gspos("C2R3", 1, "ALIC", 0., 0., z + 2.75 + t0 / 2., 0, "ONLY");
147   //     Getter camera 
148   par[0] = rout + h1;
149   par[1] = rout + h1 + h2;
150   par[2] = t1 / 2.;
151   gMC->Gsvolu("GKR3", "TUBE", idtmed[903], par, 3);
152   gMC->Gspos("GKR3", 1, "ALIC", 0., 0., z + .25 + t1 / 2., 0, "ONLY");
153   //     Ceramic slice 
154   par[0] = rout + h1;
155   par[1] = rout + h1 + h2;
156   par[2] = t2 / 2.;
157   gMC->Gsvolu("SCR3", "TUBE", idtmed[902], par, 3);
158   gMC->Gspos("SCR3", 1, "ALIC", 0., 0., z + .25 + t1 + t2 / 2., 0, "ONLY");
159   // ******Electronic slice ******* 
160   //     Silicon ring 
161   par[0] = rout + h1 + h2;
162   par[1] = rout + h1 + h2 + 5.;
163   par[2] = .025;
164   gMC->Gsvolu("SER3", "TUBE", idtmed[901], par, 3);
165   gMC->Gspos("SER3", 1, "ALIC", 0., 0., z + 1.57 - .025, 0, "ONLY");
166   //     Ceramic ring 
167   par[0] = rout + h1 + h2;
168   par[1] = rout + h1 + h2 + 5.;
169   par[2] = .025;
170   gMC->Gsvolu("CER3", "TUBE", idtmed[902], par, 3);
171   gMC->Gspos("CER3", 1, "ALIC", 0., 0., z + 1.58 + .025, 0, "ONLY");
172   // *********************************************************** 
173   //     DEFINE LEFT DISK#3 OF FMD 
174   // *********************************************************** 
175   
176   //     Define parameters 
177   
178   rin  = 4.5;
179   rout = 10.5;
180   z    = -85.;
181   tt   = 2.5;
182   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
183   h2   = .4;
184   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
185   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
186   t2   = v4/  (h2 * kPI * (h2 + (h1 + rout) * 2.));
187   
188   // *******Inner slice*********** 
189   //     Inner steel wall 
190   par[0] = rin - .02;
191   par[1] = rin;
192   par[2] = 1.5;
193   gMC->Gsvolu("IWL3", "TUBE", idtmed[899], par, 3);
194   gMC->Gspos("IWL3", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
195   //     Front steel wall 
196   par[0] = rin;
197   par[1] = rout;
198   par[2] = .01;
199   gMC->Gsvolu("FWL3", "TUBE", idtmed[899], par, 3);
200   gMC->Gspos("FWL3", 1, "ALIC", 0., 0., z - .01, 0, "ONLY");
201   //     Rear steel wall 
202   gMC->Gsvolu("RWL3", "TUBE", idtmed[899], par, 3);
203   gMC->Gspos("RWL3", 1, "ALIC", 0., 0., z - 2.99, 0, "ONLY");
204   //     MCP 
205   par[0] = rin;
206   par[1] = rout;
207   par[2] = .07;
208   gMC->Gsvolu("MPL3", "TUBE", idtmed[900], par, 3);
209   gMC->Gspos("MPL3", 1, "ALIC", 0., 0., z - 1.57, 0, "ONLY");
210   //     Silicon plate 
211   par[0] = rin;
212   par[1] = rout;
213   par[2] = .019;
214   gMC->Gsvolu("SPL3", "TUBE", idtmed[901], par, 3);
215   gMC->Gspos("SPL3", 1, "ALIC", 0., 0., z - 1.719, 0, "ONLY");
216   //     Summator plate 
217   par[0] = rin;
218   par[1] = rout;
219   par[2] = .01;
220   gMC->Gsvolu("SML3", "TUBE", idtmed[902], par, 3);
221   gMC->Gspos("SML3", 1, "ALIC", 0., 0., z - 2.01, 0, "ONLY");
222   // *******Outer slice ******* 
223   //     Ceramic plate 
224   par[0] = rout;
225   par[1] = rout + h1;
226   par[2] = 1.25;
227   gMC->Gsvolu("CPL3", "TUBE", idtmed[902], par, 3);
228   gMC->Gspos("CPL3", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
229   //     Covar spring 
230   par[0] = rout;
231   par[1] = rout + h1;
232   par[2] = t0 / 2.;
233   gMC->Gsvolu("C1L3", "TUBE", idtmed[903], par, 3);
234   gMC->Gspos("C1L3", 1, "ALIC", 0., 0., z - .25 + t0 / 2., 0, "ONLY");
235   gMC->Gsvolu("C2L3", "TUBE", idtmed[903], par, 3);
236   gMC->Gspos("C2L3", 1, "ALIC", 0., 0., z - 2.75 - t0 / 2., 0, "ONLY");
237   //     Getter camera 
238   par[0] = rout + h1;
239   par[1] = rout + h1 + h2;
240   par[2] = t1 / 2.;
241   gMC->Gsvolu("GKL3", "TUBE", idtmed[903], par, 3);
242   gMC->Gspos("GKL3", 1, "ALIC", 0., 0., z - .25 - t1 / 2., 0, "ONLY");
243   //     Ceramic slice 
244   par[0] = rout + h1;
245   par[1] = rout + h1 + h2;
246   par[2] = t2 / 2.;
247   gMC->Gsvolu("SCL3", "TUBE", idtmed[902], par, 3);
248   gMC->Gspos("SCL3", 1, "ALIC", 0., 0., z - .25 - t1 - t2 / 2., 0, "ONLY");
249   // ******Electronic slice ******* 
250   //     Silicon ring 
251   par[0] = rout + h1 + h2;
252   par[1] = rout + h1 + h2 + 5.;
253   par[2] = .025;
254   gMC->Gsvolu("SEL3", "TUBE", idtmed[901], par, 3);
255   gMC->Gspos("SEL3", 1, "ALIC", 0., 0., z - 1.57 + .025, 0, "ONLY");
256   //     Ceramic ring 
257   par[0] = rout + h1 + h2;
258   par[1] = rout + h1 + h2 + 5.;
259   par[2] = .025;
260   gMC->Gsvolu("CEL3", "TUBE", idtmed[902], par, 3);
261   gMC->Gspos("CEL3", 1, "ALIC", 0., 0., z - 1.58 - .025, 0, "ONLY");
262   // ******************************************************** 
263   //     DEFINE RIGHT DISK#2  OF FMD 
264   // ******************************************************** 
265   
266   //     Define parameters 
267   
268   rin  = 8.;
269   rout = 14.;
270   z    = 69.7;
271   tt   = 2.5;
272   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
273   h2   = .4;
274   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
275   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
276   t2   = v4/  (h2 * kPI * (h2 + (h1 + rout) * 2.));
277   
278   // *******Inner slice*********** 
279   //     Inner steel wall 
280   par[0] = rin - .02;
281   par[1] = rin;
282   par[2] = 1.5;
283   gMC->Gsvolu("IWR2", "TUBE", idtmed[899], par, 3);
284   gMC->Gspos("IWR2", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
285   //     Front steel wall 
286   par[0] = rin;
287   par[1] = rout;
288   par[2] = .01;
289   gMC->Gsvolu("FWR2", "TUBE", idtmed[899], par, 3);
290   gMC->Gspos("FWR2", 1, "ALIC", 0., 0., z + .01, 0, "ONLY");
291   //     Rear steel wall 
292   gMC->Gsvolu("RWR2", "TUBE", idtmed[899], par, 3);
293   gMC->Gspos("RWR2", 1, "ALIC", 0., 0., z + 2.99, 0, "ONLY");
294   //     MCP 
295   par[0] = rin;
296   par[1] = rout;
297   par[2] = .07;
298   gMC->Gsvolu("MPR2", "TUBE", idtmed[900], par, 3);
299   gMC->Gspos("MPR2", 1, "ALIC", 0., 0., z + 1.57, 0, "ONLY");
300   //     Silicon plate 
301   par[0] = rin;
302   par[1] = rout;
303   par[2] = .019;
304   gMC->Gsvolu("SPR2", "TUBE", idtmed[901], par, 3);
305   gMC->Gspos("SPR2", 1, "ALIC", 0., 0., z + 1.719, 0, "ONLY");
306   //     Summator plate 
307   par[0] = rin;
308   par[1] = rout;
309   par[2] = .01;
310   gMC->Gsvolu("SMR2", "TUBE", idtmed[902], par, 3);
311   gMC->Gspos("SMR2", 1, "ALIC", 0., 0., z + 2.01, 0, "ONLY");
312   // *******Outer slice ******* 
313   //     Ceramic plate 
314   par[0] = rout;
315   par[1] = rout + h1;
316   par[2] = 1.25;
317   gMC->Gsvolu("CPR2", "TUBE", idtmed[902], par, 3);
318   gMC->Gspos("CPR2", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
319   //     Covar spring 
320   par[0] = rout;
321   par[1] = rout + h1;
322   par[2] = t0 / 2.;
323   gMC->Gsvolu("C1R2", "TUBE", idtmed[903], par, 3);
324   gMC->Gspos("C1R2", 1, "ALIC", 0., 0., z + .25 - t0 / 2., 0, "ONLY");
325   gMC->Gsvolu("C2R2", "TUBE", idtmed[903], par, 3);
326   gMC->Gspos("C2R2", 1, "ALIC", 0., 0., z + 2.75 + t0 / 2., 0, "ONLY");
327   //     Getter camera 
328   par[0] = rout + h1;
329   par[1] = rout + h1 + h2;
330   par[2] = t1 / 2.;
331   gMC->Gsvolu("GKR2", "TUBE", idtmed[903], par, 3);
332   gMC->Gspos("GKR2", 1, "ALIC", 0., 0., z + .25 + t1 / 2., 0, "ONLY");
333   //     Ceramic slice 
334   par[0] = rout + h1;
335   par[1] = rout + h1 + h2;
336   par[2] = t2 / 2.;
337   gMC->Gsvolu("SCR2", "TUBE", idtmed[902], par, 3);
338   gMC->Gspos("SCR2", 1, "ALIC", 0., 0., z + .25 + t1 + t2 / 2., 0, "ONLY");
339   // ******Electronic slice ******* 
340   //     Silicon ring 
341   par[0] = rout + h1 + h2;
342   par[1] = rout + h1 + h2 + 5.;
343   par[2] = .025;
344   gMC->Gsvolu("SER2", "TUBE", idtmed[901], par, 3);
345   gMC->Gspos("SER2", 1, "ALIC", 0., 0., z + 1.57 - .025, 0, "ONLY");
346   //     Ceramic ring 
347   par[0] = rout + h1 + h2;
348   par[1] = rout + h1 + h2 + 5.;
349   par[2] = .025;
350   gMC->Gsvolu("CER2", "TUBE", idtmed[902], par, 3);
351   gMC->Gspos("CER2", 1, "ALIC", 0., 0., z + 1.58 + .025, 0, "ONLY");
352   // *********************************************************** 
353   //       DEFINE LEFT DISK#2 OF FMD 
354   // *********************************************************** 
355   
356   //       Define parameters 
357   
358   rin  = 8.;
359   rout = 14.;
360   z    = -69.7;
361   tt   = 2.5;
362   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
363   h2   = .4;
364   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
365   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
366   t2   = v4/  (h2 * kPI * (h2 + (h1 + rout) * 2.));
367   
368   // *******Inner slice*********** 
369   //     Inner steel wall 
370   par[0] = rin - .02;
371   par[1] = rin;
372   par[2] = 1.5;
373   gMC->Gsvolu("IWL2", "TUBE", idtmed[899], par, 3);
374   gMC->Gspos("IWL2", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
375   //     Front steel wall 
376   par[0] = rin;
377   par[1] = rout;
378   par[2] = .01;
379   gMC->Gsvolu("FWL2", "TUBE", idtmed[899], par, 3);
380   gMC->Gspos("FWL2", 1, "ALIC", 0., 0., z - .01, 0, "ONLY");
381   //     Rear steel wall 
382   gMC->Gsvolu("RWL2", "TUBE", idtmed[899], par, 3);
383   gMC->Gspos("RWL2", 1, "ALIC", 0., 0., z - 2.99, 0, "ONLY");
384   //     MCP 
385   par[0] = rin;
386   par[1] = rout;
387   par[2] = .07;
388   gMC->Gsvolu("MPL2", "TUBE", idtmed[900], par, 3);
389   gMC->Gspos("MPL2", 1, "ALIC", 0., 0., z - 1.57, 0, "ONLY");
390   //     Silicon plate 
391   par[0] = rin;
392   par[1] = rout;
393   par[2] = .019;
394   gMC->Gsvolu("SPL2", "TUBE", idtmed[901], par, 3);
395   gMC->Gspos("SPL2", 1, "ALIC", 0., 0., z - 1.719, 0, "ONLY");
396   //     Summator plate 
397   par[0] = rin;
398   par[1] = rout;
399   par[2] = .01;
400   gMC->Gsvolu("SML2", "TUBE", idtmed[902], par, 3);
401   gMC->Gspos("SML2", 1, "ALIC", 0., 0., z - 2.01, 0, "ONLY");
402   // *******Outer slice ******* 
403   //     Ceramic plate 
404   par[0] = rout;
405   par[1] = rout + h1;
406   par[2] = 1.25;
407   gMC->Gsvolu("CPL2", "TUBE", idtmed[902], par, 3);
408   gMC->Gspos("CPL2", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
409   //     Covar spring 
410   par[0] = rout;
411   par[1] = rout + h1;
412   par[2] = t0 / 2.;
413   gMC->Gsvolu("C1L2", "TUBE", idtmed[903], par, 3);
414   gMC->Gspos("C1L2", 1, "ALIC", 0., 0., z - .25 + t0 / 2., 0, "ONLY");
415   gMC->Gsvolu("C2L2", "TUBE", idtmed[903], par, 3);
416   gMC->Gspos("C2L2", 1, "ALIC", 0., 0., z - 2.75 - t0 / 2., 0, "ONLY");
417   //     Getter camera 
418   par[0] = rout + h1;
419   par[1] = rout + h1 + h2;
420   par[2] = t1 / 2.;
421   gMC->Gsvolu("GKL2", "TUBE", idtmed[903], par, 3);
422   gMC->Gspos("GKL2", 1, "ALIC", 0., 0., z - .25 - t1 / 2., 0, "ONLY");
423   //     Ceramic slice 
424   par[0] = rout + h1;
425   par[1] = rout + h1 + h2;
426   par[2] = t2 / 2.;
427   gMC->Gsvolu("SCL2", "TUBE", idtmed[902], par, 3);
428   gMC->Gspos("SCL2", 1, "ALIC", 0., 0., z - .25 - t1 - t2 / 2., 0, "ONLY");
429   // ******Electronic slice ******* 
430   //     Silicon ring 
431   par[0] = rout + h1 + h2;
432   par[1] = rout + h1 + h2 + 5.;
433   par[2] = .025;
434   gMC->Gsvolu("SEL2", "TUBE", idtmed[901], par, 3);
435   gMC->Gspos("SEL2", 1, "ALIC", 0., 0., z - 1.57 + .025, 0, "ONLY");
436   //     Ceramic ring 
437   par[0] = rout + h1 + h2;
438   par[1] = rout + h1 + h2 + 5.;
439   par[2] = .025;
440   gMC->Gsvolu("CEL2", "TUBE", idtmed[902], par, 3);
441   gMC->Gspos("CEL2", 1, "ALIC", 0., 0., z - 1.58 - .025, 0, "ONLY");
442   // ******************************************************** 
443   //     DEFINE RIGHT DISK#1  OF FMD 
444   // ******************************************************** 
445   
446   //     Define parameters 
447
448   rin  = 8.;
449   rout = 17.5;
450   z    = 42.5;
451   tt   = 2.5;
452   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
453   h2   = .4;
454   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
455   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
456   t2   = v4/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
457   
458   // *******Inner slice*********** 
459   //     Inner steel wall 
460   par[0] = rin - .02;
461   par[1] = rin;
462   par[2] = 1.5;
463   gMC->Gsvolu("IWR1", "TUBE", idtmed[899], par, 3);
464   gMC->Gspos("IWR1", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
465   //     Front steel wall 
466   par[0] = rin;
467   par[1] = rout;
468   par[2] = .01;
469   gMC->Gsvolu("FWR1", "TUBE", idtmed[899], par, 3);
470   gMC->Gspos("FWR1", 1, "ALIC", 0., 0., z + .01, 0, "ONLY");
471   //     Rear steel wall 
472   gMC->Gsvolu("RWR1", "TUBE", idtmed[899], par, 3);
473   gMC->Gspos("RWR1", 1, "ALIC", 0., 0., z + 2.99, 0, "ONLY");
474   //     MCP 
475   par[0] = rin;
476   par[1] = rout;
477   par[2] = .07;
478   gMC->Gsvolu("MPR1", "TUBE", idtmed[900], par, 3);
479   gMC->Gspos("MPR1", 1, "ALIC", 0., 0., z + 1.57, 0, "ONLY");
480   //     Silicon plate 
481   par[0] = rin;
482   par[1] = rout;
483   par[2] = .019;
484   gMC->Gsvolu("SPR1", "TUBE", idtmed[901], par, 3);
485   gMC->Gspos("SPR1", 1, "ALIC", 0., 0., z + 1.719, 0, "ONLY");
486   //     Summator plate 
487   par[0] = rin;
488   par[1] = rout;
489   par[2] = .01;
490   gMC->Gsvolu("SMR1", "TUBE", idtmed[902], par, 3);
491   gMC->Gspos("SMR1", 1, "ALIC", 0., 0., z + 2.01, 0, "ONLY");
492   // *******Outer slice ******* 
493   //     Ceramic plate 
494   par[0] = rout;
495   par[1] = rout + h1;
496   par[2] = 1.25;
497   gMC->Gsvolu("CPR1", "TUBE", idtmed[902], par, 3);
498   gMC->Gspos("CPR1", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
499   //     Covar spring 
500   par[0] = rout;
501   par[1] = rout + h1;
502   par[2] = t0 / 2.;
503   gMC->Gsvolu("C1R1", "TUBE", idtmed[903], par, 3);
504   gMC->Gspos("C1R1", 1, "ALIC", 0., 0., z + .25 - t0 / 2., 0, "ONLY");
505   gMC->Gsvolu("C2R1", "TUBE", idtmed[903], par, 3);
506   gMC->Gspos("C2R1", 1, "ALIC", 0., 0., z + 2.75 + t0 / 2., 0, "ONLY");
507   //     Getter camera 
508   par[0] = rout + h1;
509   par[1] = rout + h1 + h2;
510   par[2] = t1 / 2.;
511   gMC->Gsvolu("GKR1", "TUBE", idtmed[903], par, 3);
512   gMC->Gspos("GKR1", 1, "ALIC", 0., 0., z + .25 + t1 / 2., 0, "ONLY");
513   //     Ceramic slice 
514   par[0] = rout + h1;
515   par[1] = rout + h1 + h2;
516   par[2] = t2 / 2.;
517   gMC->Gsvolu("SCR1", "TUBE", idtmed[902], par, 3);
518   gMC->Gspos("SCR1", 1, "ALIC", 0., 0., z + .25 + t1 + t2 / 2., 0, "ONLY");
519   // ******Electronic slice ******* 
520   //     Silicon ring 
521   par[0] = rout + h1 + h2;
522   par[1] = rout + h1 + h2 + 5.;
523   par[2] = .025;
524   gMC->Gsvolu("SER1", "TUBE", idtmed[901], par, 3);
525   gMC->Gspos("SER1", 1, "ALIC", 0., 0., z + 1.57 - .025, 0, "ONLY");
526   //     Ceramic ring 
527   par[0] = rout + h1 + h2;
528   par[1] = rout + h1 + h2 + 5.;
529   par[2] = .025;
530   gMC->Gsvolu("CER1", "TUBE", idtmed[902], par, 3);
531   gMC->Gspos("CER1", 1, "ALIC", 0., 0., z + 1.58 + .025, 0, "ONLY");
532   // *********************************************************** 
533   //     DEFINE LEFT DISK#1 OF FMD 
534   // *********************************************************** 
535   
536   //     Define parameters 
537   
538   rin  = 8.;
539   rout = 17.5;
540   z    = -42.5;
541   tt   = 2.5;
542   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
543   h2   = .4;
544   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
545   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
546   t2   = v4/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
547   
548   // *******Inner slice*********** 
549   //     Inner steel wall 
550   par[0] = rin - .02;
551   par[1] = rin;
552   par[2] = 1.5;
553   gMC->Gsvolu("IWL1", "TUBE", idtmed[899], par, 3);
554   gMC->Gspos("IWL1", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
555   //     Front steel wall 
556   par[0] = rin;
557   par[1] = rout;
558   par[2] = .01;
559   gMC->Gsvolu("FWL1", "TUBE", idtmed[899], par, 3);
560   gMC->Gspos("FWL1", 1, "ALIC", 0., 0., z - .01, 0, "ONLY");
561   //     Rear steel wall 
562   gMC->Gsvolu("RWL1", "TUBE", idtmed[899], par, 3);
563   gMC->Gspos("RWL1", 1, "ALIC", 0., 0., z - 2.99, 0, "ONLY");
564   //     MCP 
565   par[0] = rin;
566   par[1] = rout;
567   par[2] = .07;
568   gMC->Gsvolu("MPL1", "TUBE", idtmed[900], par, 3);
569   gMC->Gspos("MPL1", 1, "ALIC", 0., 0., z - 1.57, 0, "ONLY");
570   //     Silicon plate 
571   par[0] = rin;
572   par[1] = rout;
573   par[2] = .019;
574   gMC->Gsvolu("SPL1", "TUBE", idtmed[901], par, 3);
575   gMC->Gspos("SPL1", 1, "ALIC", 0., 0., z - 1.719, 0, "ONLY");
576   //     Summator plate 
577   par[0] = rin;
578   par[1] = rout;
579   par[2] = .01;
580   gMC->Gsvolu("SML1", "TUBE", idtmed[902], par, 3);
581   gMC->Gspos("SML1", 1, "ALIC", 0., 0., z - 2.01, 0, "ONLY");
582   // *******Outer slice ******* 
583   //     Ceramic plate 
584   par[0] = rout;
585   par[1] = rout + h1;
586   par[2] = 1.25;
587   gMC->Gsvolu("CPL1", "TUBE", idtmed[902], par, 3);
588   gMC->Gspos("CPL1", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
589   //     Covar spring 
590   par[0] = rout;
591   par[1] = rout + h1;
592   par[2] = t0 / 2.;
593   gMC->Gsvolu("C1L1", "TUBE", idtmed[903], par, 3);
594   gMC->Gspos("C1L1", 1, "ALIC", 0., 0., z - .25 + t0 / 2., 0, "ONLY");
595   gMC->Gsvolu("C2L1", "TUBE", idtmed[903], par, 3);
596   gMC->Gspos("C2L1", 1, "ALIC", 0., 0., z - 2.75 - t0 / 2., 0, "ONLY");
597   //     Getter camera 
598   par[0] = rout + h1;
599   par[1] = rout + h1 + h2;
600   par[2] = t1 / 2.;
601   gMC->Gsvolu("GKL1", "TUBE", idtmed[903], par, 3);
602   gMC->Gspos("GKL1", 1, "ALIC", 0., 0., z - .25 - t1 / 2., 0, "ONLY");
603   //     Ceramic slice 
604   par[0] = rout + h1;
605   par[1] = rout + h1 + h2;
606   par[2] = t2 / 2.;
607   gMC->Gsvolu("SCL1", "TUBE", idtmed[902], par, 3);
608   gMC->Gspos("SCL1", 1, "ALIC", 0., 0., z - .25 - t1 - t2 / 2., 0, "ONLY");
609   // ******Electronic slice ******* 
610   //     Silicon ring 
611   par[0] = rout + h1 + h2;
612   par[1] = rout + h1 + h2 + 5.;
613   par[2] = .025;
614   gMC->Gsvolu("SEL1", "TUBE", idtmed[901], par, 3);
615   gMC->Gspos("SEL1", 1, "ALIC", 0., 0., z - 1.57 + .025, 0, "ONLY");
616   //     Ceramic ring 
617   par[0] = rout + h1 + h2;
618   par[1] = rout + h1 + h2 + 5.;
619   par[2] = .025;
620   gMC->Gsvolu("CEL1", "TUBE", idtmed[902], par, 3);
621   gMC->Gspos("CEL1", 1, "ALIC", 0., 0., z - 1.58 - .025, 0, "ONLY");
622   // *********************************************************** 
623   //     DEFINE LEFT DISK#4 OF FMD 
624   // *********************************************************** 
625   
626   //     Define parameters 
627   
628   rin  = 4.2;
629   rout = 13.;
630   z    = -229.5;
631   tt   = 2.5;
632   h1   = TMath::Sqrt(rout * rout + v1/ (tt * kPI)) - rout;
633   h2   = .4;
634   t0   = v2/ (h1 * kPI * (h1 + rout * 2.));
635   t1   = v3/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
636   t2   = v4/ (h2 * kPI * (h2 + (h1 + rout) * 2.));
637   
638   // *******Inner slice*********** 
639   //     Inner steel wall 
640   par[0] = rin - .02;
641   par[1] = rin;
642   par[2] = 1.5;
643   gMC->Gsvolu("IWL4", "TUBE", idtmed[899], par, 3);
644   gMC->Gspos("IWL4", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
645   //     Front steel wall 
646   par[0] = rin;
647   par[1] = rout;
648   par[2] = .01;
649   gMC->Gsvolu("FWL4", "TUBE", idtmed[899], par, 3);
650   gMC->Gspos("FWL4", 1, "ALIC", 0., 0., z - .01, 0, "ONLY");
651   //     Rear steel wall 
652   gMC->Gsvolu("RWL4", "TUBE", idtmed[899], par, 3);
653   gMC->Gspos("RWL4", 1, "ALIC", 0., 0., z - 2.99, 0, "ONLY");
654   //     MCP 
655   par[0] = rin;
656   par[1] = rout;
657   par[2] = .07;
658   gMC->Gsvolu("MPL4", "TUBE", idtmed[900], par, 3);
659   gMC->Gspos("MPL4", 1, "ALIC", 0., 0., z - 1.57, 0, "ONLY");
660   //     Silicon plate 
661   par[0] = rin;
662   par[1] = rout;
663   par[2] = .019;
664   gMC->Gsvolu("SPL4", "TUBE", idtmed[901], par, 3);
665   gMC->Gspos("SPL4", 1, "ALIC", 0., 0., z - 1.719, 0, "ONLY");
666   //     Summator plate 
667   par[0] = rin;
668   par[1] = rout;
669   par[2] = .01;
670   gMC->Gsvolu("SML4", "TUBE", idtmed[902], par, 3);
671   gMC->Gspos("SML4", 1, "ALIC", 0., 0., z - 2.01, 0, "ONLY");
672   // *******Outer slice ******* 
673   //     Ceramic plate 
674   par[0] = rout;
675   par[1] = rout + h1;
676   par[2] = 1.25;
677   gMC->Gsvolu("CPL4", "TUBE", idtmed[902], par, 3);
678   gMC->Gspos("CPL4", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
679   //     Covar spring 
680   par[0] = rout;
681   par[1] = rout + h1;
682   par[2] = t0 / 2.;
683   gMC->Gsvolu("C1L4", "TUBE", idtmed[903], par, 3);
684   gMC->Gspos("C1L4", 1, "ALIC", 0., 0., z - .25 + t0 / 2., 0, "ONLY");
685   gMC->Gsvolu("C2L4", "TUBE", idtmed[903], par, 3);
686   gMC->Gspos("C2L4", 1, "ALIC", 0., 0., z - 2.75 - t0 / 2., 0, "ONLY");
687   //       Getter camera 
688   par[0] = rout + h1;
689   par[1] = rout + h1 + h2;
690   par[2] = t1 / 2.;
691   gMC->Gsvolu("GKL4", "TUBE", idtmed[903], par, 3);
692   gMC->Gspos("GKL4", 1, "ALIC", 0., 0., z - .25 - t1 / 2., 0, "ONLY");
693   //     Ceramic slice 
694   par[0] = rout + h1;
695   par[1] = rout + h1 + h2;
696   par[2] = t2 / 2.;
697   gMC->Gsvolu("SCL4", "TUBE", idtmed[902], par, 3);
698   gMC->Gspos("SCL4", 1, "ALIC", 0., 0., z - .25 - t1 - t2 / 2., 0, "ONLY");
699   // ******Electronic slice ******* 
700   //     Silicon ring 
701   par[0] = rout + h1 + h2;
702   par[1] = rout + h1 + h2 + 5.;
703   par[2] = .025;
704   gMC->Gsvolu("SEL4", "TUBE", idtmed[901], par, 3);
705   gMC->Gspos("SEL4", 1, "ALIC", 0., 0., z - 1.57 + .025, 0, "ONLY");
706   //     Ceramic ring 
707   par[0] = rout + h1 + h2;
708   par[1] = rout + h1 + h2 + 5.;
709   par[2] = .025;
710   gMC->Gsvolu("CEL4", "TUBE", idtmed[902], par, 3);
711   gMC->Gspos("CEL4", 1, "ALIC", 0., 0., z - 1.58 - .025, 0, "ONLY");
712 }
713  
714 //_____________________________________________________________________________
715 void AliFMDv1::DrawModule()
716 {
717   //
718   // Draw a shaded view of the FMD version 1
719   //
720
721   
722   // Set everything unseen
723   gMC->Gsatt("*", "seen", -1);
724   // 
725   // Set ALIC mother transparent
726   gMC->Gsatt("ALIC","SEEN",0);
727   //
728   // Set the volumes visible
729   gMC->Gsatt("IWR3","seen",1);
730   gMC->Gsatt("FWR3","seen",1);
731   gMC->Gsatt("RWR3","seen",1);
732   gMC->Gsatt("MPR3","seen",1);
733   gMC->Gsatt("SPR3","seen",1);
734   gMC->Gsatt("SMR3","seen",1);
735   gMC->Gsatt("CPR3","seen",1);
736   gMC->Gsatt("C1R3","seen",1);
737   gMC->Gsatt("C2R3","seen",1);
738   gMC->Gsatt("GKR3","seen",1);
739   gMC->Gsatt("SCR3","seen",1);
740   gMC->Gsatt("SER3","seen",1);
741   gMC->Gsatt("CER3","seen",1);
742   gMC->Gsatt("IWL3","seen",1);
743   gMC->Gsatt("FWL3","seen",1);
744   gMC->Gsatt("RWL3","seen",1);
745   gMC->Gsatt("MPL3","seen",1);
746   gMC->Gsatt("SPL3","seen",1);
747   gMC->Gsatt("SML3","seen",1);
748   gMC->Gsatt("CPL3","seen",1);
749   gMC->Gsatt("C1L3","seen",1);
750   gMC->Gsatt("C2L3","seen",1);
751   gMC->Gsatt("GKL3","seen",1);
752   gMC->Gsatt("SCL3","seen",1);
753   gMC->Gsatt("SEL3","seen",1);
754   gMC->Gsatt("CEL3","seen",1);
755   gMC->Gsatt("IWR2","seen",1);
756   gMC->Gsatt("FWR2","seen",1);
757   gMC->Gsatt("RWR2","seen",1);
758   gMC->Gsatt("MPR2","seen",1);
759   gMC->Gsatt("SPR2","seen",1);
760   gMC->Gsatt("SMR2","seen",1);
761   gMC->Gsatt("CPR2","seen",1);
762   gMC->Gsatt("C1R2","seen",1);
763   gMC->Gsatt("C2R2","seen",1);
764   gMC->Gsatt("GKR2","seen",1);
765   gMC->Gsatt("SCR2","seen",1);
766   gMC->Gsatt("SER2","seen",1);
767   gMC->Gsatt("CER2","seen",1);
768   gMC->Gsatt("IWL2","seen",1);
769   gMC->Gsatt("FWL2","seen",1);
770   gMC->Gsatt("RWL2","seen",1);
771   gMC->Gsatt("MPL2","seen",1);
772   gMC->Gsatt("SPL2","seen",1);
773   gMC->Gsatt("SML2","seen",1);
774   gMC->Gsatt("CPL2","seen",1);
775   gMC->Gsatt("C1L2","seen",1);
776   gMC->Gsatt("C2L2","seen",1);
777   gMC->Gsatt("GKL2","seen",1);
778   gMC->Gsatt("SCL2","seen",1);
779   gMC->Gsatt("SEL2","seen",1);
780   gMC->Gsatt("CEL2","seen",1);
781   gMC->Gsatt("IWR1","seen",1);
782   gMC->Gsatt("FWR1","seen",1);
783   gMC->Gsatt("RWR1","seen",1);
784   gMC->Gsatt("MPR1","seen",1);
785   gMC->Gsatt("SPR1","seen",1);
786   gMC->Gsatt("SMR1","seen",1);
787   gMC->Gsatt("CPR1","seen",1);
788   gMC->Gsatt("C1R1","seen",1);
789   gMC->Gsatt("C2R1","seen",1);
790   gMC->Gsatt("GKR1","seen",1);
791   gMC->Gsatt("SCR1","seen",1);
792   gMC->Gsatt("SER1","seen",1);
793   gMC->Gsatt("CER1","seen",1);
794   gMC->Gsatt("IWL1","seen",1);
795   gMC->Gsatt("FWL1","seen",1);
796   gMC->Gsatt("RWL1","seen",1);
797   gMC->Gsatt("MPL1","seen",1);
798   gMC->Gsatt("SPL1","seen",1);
799   gMC->Gsatt("SML1","seen",1);
800   gMC->Gsatt("CPL1","seen",1);
801   gMC->Gsatt("C1L1","seen",1);
802   gMC->Gsatt("C2L1","seen",1);
803   gMC->Gsatt("GKL1","seen",1);
804   gMC->Gsatt("SCL1","seen",1);
805   gMC->Gsatt("SEL1","seen",1);
806   gMC->Gsatt("CEL1","seen",1);
807   gMC->Gsatt("IWL4","seen",1);
808   gMC->Gsatt("FWL4","seen",1);
809   gMC->Gsatt("RWL4","seen",1);
810   gMC->Gsatt("MPL4","seen",1);
811   gMC->Gsatt("SPL4","seen",1);
812   gMC->Gsatt("SML4","seen",1);
813   gMC->Gsatt("CPL4","seen",1);
814   gMC->Gsatt("C1L4","seen",1);
815   gMC->Gsatt("C2L4","seen",1);
816   gMC->Gsatt("GKL4","seen",1);
817   gMC->Gsatt("SCL4","seen",1);
818   gMC->Gsatt("SEL4","seen",1);
819   gMC->Gsatt("CEL4","seen",1);
820   //
821   gMC->Gdopt("hide", "on");
822   gMC->Gdopt("shad", "on");
823   gMC->Gsatt("*", "fill", 7);
824   gMC->SetClipBox(".");
825   gMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
826   gMC->DefaultRange();
827   gMC->Gdraw("alic", 40, 30, 0, 6, 9, .08, .08);
828   gMC->Gdhead(1111, "Forward Multiplicity Detector version 1");
829   gMC->Gdman(13, 9, "MAN");
830 }
831
832 //_____________________________________________________________________________
833 void AliFMDv1::CreateMaterials()
834 {
835   //
836   // Create materials for version 1 of FMD
837   //
838
839   //     Steel for chamber 
840   Float_t ast[4]  = { 55.847,58.71,51.996,47.9 };
841   Float_t zst[4]  = { 26.,28.,24.,22. };
842   Float_t wst[4]  = { .6,.18,.12,.1 };
843   //     Lead glass for MCP 
844   Float_t amcp[3] = { 15.9994,28.086,207.19 };
845   Float_t zmcp[3] = { 8.,14.,82. };
846   Float_t wmcp[3] = { .43,.375,.195 };
847   //     Ceramic for plates 
848   Float_t acer[2] = { 26.98,15.9994 };
849   Float_t zcer[2] = { 13.,8. };
850   Float_t wcer[2] = { .4,.6 };
851   
852   Float_t epsil, stmin, deemax, tmaxfd, stemax;
853   
854   Int_t   ISXFLD = gAlice->Field()->Integ();
855   Float_t SXMGMX = gAlice->Field()->Max();
856   
857   //     Silicon 
858   
859   AliMaterial(2, "SI$", 28.086, 14., 2.33, 9.36, 45.5);
860   
861   //     Covar 
862   
863   AliMaterial(4, "FE$", 55.85, 26., 8.3, 1.67, 15.9);
864   
865   //     Steel 
866   
867   AliMixture(0, "FMD_STEEL$", ast, zst, 7.9, 4, wst);
868   
869   //     Lead glass 
870   
871   AliMixture(1, "FMD_MCP$", amcp, zmcp, 1.55, 3, wmcp);
872   
873   //     Ceramic 
874   
875   AliMixture(3, "FMD_CERAMIC$", acer, zcer, 3.96, -2, wcer);
876   // ******************************************************* 
877   //     Defines tracking media parameters. 
878   // ******************************************************* 
879   epsil  = .001; // Tracking precision, DLS 
880   stemax = -1.;  // Maximum displacement for multiple scattering 
881   tmaxfd = -20.; // Maximum angle due to field deflection 
882   deemax = -.3;  // Maximum fractional energy loss, DLS 
883   stmin  = -.8;
884   // ******************************************************** 
885   AliMedium(0, "STEEL_L3          ", 0, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
886   AliMedium(1, "LEAD_GLASS_L3     ", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
887   AliMedium(2, "SILICON_L3        ", 2, 1, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
888   AliMedium(3, "CERAMIC_L3        ", 3, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
889   AliMedium(4, "COVAR_L3          ", 4, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
890 }
891