870ba8303068c400d76e21a5a8bb64b813f2b3fa
[u/mrichter/AliRoot.git] / FMD / AliFMDv0.cxx
1 ///////////////////////////////////////////////////////////////////////////////
2 //                                                                           //
3 //  Forward Multiplicity Detector version 0                                  //
4 //                                                                           //
5 //Begin_Html
6 /*
7 <img src="picts/AliFMDv0Class.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 "AliRun.h"
21 #include "AliFMDv0.h"
22 #include "AliMC.h"
23  
24 ClassImp(AliFMDv0)
25  
26 //_____________________________________________________________________________
27 AliFMDv0::AliFMDv0() : AliFMD()
28 {
29   //
30   // Default constructor for FMD version 0
31   //
32 }
33  
34 //_____________________________________________________________________________
35 AliFMDv0::AliFMDv0(const char *name, const char *title)
36   : AliFMD(name,title)
37 {
38   //
39   // Standard constructor for FMD version 0
40   //
41 }
42  
43 //___________________________________________
44 void AliFMDv0::CreateGeometry()
45 {
46   //
47   // Creation of the geometry of the FMD version 0
48   //
49   //Begin_Html
50   /*
51     <img src="picts/AliFMDv0Tree.gif">
52   */
53   //End_Html
54   //Begin_Html
55   /*
56     <img src="picts/AliFMDv0.gif">
57   */
58   //End_Html
59
60   AliMC* pMC = AliMC::GetMC();
61   
62   Float_t rout, z;
63   Float_t par[3], rin;
64   
65   Int_t *idtmed = fIdtmed->GetArray()-899;    
66   
67   // ******************************************************** 
68   //       DEFINE RIGHT DISK#3  OF FMD 
69   // ******************************************************** 
70   
71   //       Define parameters 
72   
73   rin  = 4.5;
74   rout = 10.5;
75   z    = 85.;
76   //       Ring #1 
77   par[0] = rin;
78   par[1] = rout;
79   par[2] = 1.5;
80   pMC->Gsvolu("R1R3", "TUBE", idtmed[900], par, 3);
81   pMC->Gspos("R1R3", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
82   //       Ring #2 
83   par[0] = rout;
84   par[1] = rout + .65;
85   par[2] = 1.5;
86   pMC->Gsvolu("R2R3", "TUBE", idtmed[901], par, 3);
87   pMC->Gspos("R2R3", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
88   //       Ring #3 
89   par[0] = rout + .65;
90   par[1] = rout + 5.65;
91   par[2] = .025;
92   pMC->Gsvolu("R3R3", "TUBE", idtmed[902], par, 3);
93   pMC->Gspos("R3R3", 1, "ALIC", 0., 0., z + 1.525, 0, "ONLY");
94   // *********************************************************** 
95   //       DEFINE LEFT DISK#3 OF FMD 
96   // *********************************************************** 
97   
98   //       Define parameters 
99   
100   rin  = 4.5;
101   rout = 10.5;
102   z    = -85.;
103   //       Ring #1 
104   par[0] = rin;
105   par[1] = rout;
106   par[2] = 1.5;
107   pMC->Gsvolu("R1L3", "TUBE", idtmed[900], par, 3);
108   pMC->Gspos("R1L3", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
109   //       Ring #2 
110   par[0] = rout;
111   par[1] = rout + .65;
112   par[2] = 1.5;
113   pMC->Gsvolu("R2L3", "TUBE", idtmed[901], par, 3);
114   pMC->Gspos("R2L3", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
115   //       Ring #3 
116   par[0] = rout + .65;
117   par[1] = rout + 5.65;
118   par[2] = .025;
119   pMC->Gsvolu("R3L3", "TUBE", idtmed[902], par, 3);
120   pMC->Gspos("R3L3", 1, "ALIC", 0., 0., z - 1.525, 0, "ONLY");
121   // ******************************************************** 
122   //       DEFINE RIGHT DISK#2  OF FMD 
123   // ******************************************************** 
124   
125   //       Define parameters 
126   
127   rin  = 8.;
128   rout = 14.;
129   z    = 69.7;
130   //       Ring #1 
131   par[0] = rin;
132   par[1] = rout;
133   par[2] = 1.5;
134   pMC->Gsvolu("R1R2", "TUBE", idtmed[900], par, 3);
135   pMC->Gspos("R1R2", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
136   //       Ring #2 
137   par[0] = rout;
138   par[1] = rout + .65;
139   par[2] = 1.5;
140   pMC->Gsvolu("R2R2", "TUBE", idtmed[901], par, 3);
141   pMC->Gspos("R2R2", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
142   //       Ring #3 
143   par[0] = rout + .65;
144   par[1] = rout + 5.65;
145   par[2] = .025;
146   pMC->Gsvolu("R3R2", "TUBE", idtmed[902], par, 3);
147   pMC->Gspos("R3R2", 1, "ALIC", 0., 0., z + 1.525, 0, "ONLY");
148   // *********************************************************** 
149   //       DEFINE LEFT DISK#2 OF FMD 
150   // *********************************************************** 
151   
152   //       Define parameters 
153   
154   rin  = 8.;
155   rout = 14.;
156   z    = -69.7;
157   //       Ring #1 
158   par[0] = rin;
159   par[1] = rout;
160   par[2] = 1.5;
161   pMC->Gsvolu("R1L2", "TUBE", idtmed[900], par, 3);
162   pMC->Gspos("R1L2", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
163   //       Ring #2 
164   par[0] = rout;
165   par[1] = rout + .65;
166   par[2] = 1.5;
167   pMC->Gsvolu("R2L2", "TUBE", idtmed[901], par, 3);
168   pMC->Gspos("R2L2", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
169   //       Ring #3 
170   par[0] = rout + .65;
171   par[1] = rout + 5.65;
172   par[2] = .025;
173   pMC->Gsvolu("R3L2", "TUBE", idtmed[902], par, 3);
174   pMC->Gspos("R3L2", 1, "ALIC", 0., 0., z - 1.525, 0, "ONLY");
175   // ******************************************************** 
176   //       DEFINE RIGHT DISK#1  OF FMD 
177   // ******************************************************** 
178   
179   //       Define parameters 
180   
181   rin  = 8.;
182   rout = 17.5;
183   z    = 42.5;
184   //       Ring #1 
185   par[0] = rin;
186   par[1] = rout;
187   par[2] = 1.5;
188   pMC->Gsvolu("R1R1", "TUBE", idtmed[900], par, 3);
189   pMC->Gspos("R1R1", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
190   //       Ring #2 
191   par[0] = rout;
192   par[1] = rout + .65;
193   par[2] = 1.5;
194   pMC->Gsvolu("R2R1", "TUBE", idtmed[901], par, 3);
195   pMC->Gspos("R2R1", 1, "ALIC", 0., 0., z + 1.5, 0, "ONLY");
196   //       Ring #3 
197   par[0] = rout + .65;
198   par[1] = rout + 5.65;
199   par[2] = .025;
200   pMC->Gsvolu("R3R1", "TUBE", idtmed[902], par, 3);
201   pMC->Gspos("R3R1", 1, "ALIC", 0., 0., z + 1.525, 0, "ONLY");
202   // *********************************************************** 
203   //       DEFINE LEFT DISK#1 OF FMD 
204   // *********************************************************** 
205   
206   //       Define parameters 
207   
208   rin  = 8.;
209   rout = 17.5;
210   z    = -42.5;
211   //       Ring #1 
212   par[0] = rin;
213   par[1] = rout;
214   par[2] = 1.5;
215   pMC->Gsvolu("R1L1", "TUBE", idtmed[900], par, 3);
216   pMC->Gspos("R1L1", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
217   //       Ring #2 
218   par[0] = rout;
219   par[1] = rout + .65;
220   par[2] = 1.5;
221   pMC->Gsvolu("R2L1", "TUBE", idtmed[901], par, 3);
222   pMC->Gspos("R2L1", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
223   //       Ring #3 
224   par[0] = rout + .65;
225   par[1] = rout + 5.65;
226   par[2] = .025;
227   pMC->Gsvolu("R3L1", "TUBE", idtmed[902], par, 3);
228   pMC->Gspos("R3L1", 1, "ALIC", 0., 0., z - 1.525, 0, "ONLY");
229   // *********************************************************** 
230   //       DEFINE LEFT DISK#4 OF FMD 
231   // *********************************************************** 
232
233   //       Define parameters 
234
235   rin  = 4.2;
236   rout = 13.;
237   z    = -229.5;
238   //       Ring #1 
239   par[0] = rin;
240   par[1] = rout;
241   par[2] = 1.5;
242   pMC->Gsvolu("R1L4", "TUBE", idtmed[900], par, 3);
243   pMC->Gspos("R1L4", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
244   //       Ring #2 
245   par[0] = rout;
246   par[1] = rout + .65;
247   par[2] = 1.5;
248   pMC->Gsvolu("R2L4", "TUBE", idtmed[901], par, 3);
249   pMC->Gspos("R2L4", 1, "ALIC", 0., 0., z - 1.5, 0, "ONLY");
250   //       Ring #3 
251   par[0] = rout + .65;
252   par[1] = rout + 5.65;
253   par[2] = .025;
254   pMC->Gsvolu("R3L4", "TUBE", idtmed[902], par, 3);
255   pMC->Gspos("R3L4", 1, "ALIC", 0., 0., z - 1.525, 0, "ONLY");
256 }
257
258 //_____________________________________________________________________________
259 void AliFMDv0::DrawModule()
260 {
261   //
262   // Draw a shaded view of the FMD version 0
263   //
264
265   AliMC* pMC = AliMC::GetMC();
266   
267   // Set everything unseen
268   pMC->Gsatt("*", "seen", -1);
269   // 
270   // Set ALIC mother transparent
271   pMC->Gsatt("ALIC","SEEN",0);
272   //
273   // Set the volumes visible
274   pMC->Gsatt("R1R3","SEEN",1);
275   pMC->Gsatt("R2R3","SEEN",1);
276   pMC->Gsatt("R3R3","SEEN",1);
277   pMC->Gsatt("R1L3","SEEN",1);
278   pMC->Gsatt("R2L3","SEEN",1);
279   pMC->Gsatt("R3L3","SEEN",1);
280   pMC->Gsatt("R1R2","SEEN",1);
281   pMC->Gsatt("R2R2","SEEN",1);
282   pMC->Gsatt("R3R2","SEEN",1);
283   pMC->Gsatt("R1L2","SEEN",1);
284   pMC->Gsatt("R2L2","SEEN",1);
285   pMC->Gsatt("R3L2","SEEN",1);
286   pMC->Gsatt("R1R1","SEEN",1);
287   pMC->Gsatt("R2R1","SEEN",1);
288   pMC->Gsatt("R3R1","SEEN",1);
289   pMC->Gsatt("R1L1","SEEN",1);
290   pMC->Gsatt("R2L1","SEEN",1);
291   pMC->Gsatt("R3L1","SEEN",1);
292   pMC->Gsatt("R1L4","SEEN",1);
293   pMC->Gsatt("R2L4","SEEN",1);
294   pMC->Gsatt("R3L4","SEEN",1);
295   //
296   pMC->Gdopt("hide", "on");
297   pMC->Gdopt("shad", "on");
298   pMC->Gsatt("*", "fill", 7);
299   pMC->SetClipBox(".");
300   pMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
301   pMC->DefaultRange();
302   pMC->Gdraw("alic", 40, 30, 0, 6, 9, .08, .08);
303   pMC->Gdhead(1111, "Forward Multiplicity Detector version 0");
304   pMC->Gdman(13, 9, "MAN");
305 }
306
307 //_____________________________________________________________________________
308 void AliFMDv0::CreateMaterials()
309 {
310   //
311   // Create Materials for version 0 of FMD
312   //
313
314   //     Material for ring #1 
315   Float_t ar1[8] = { 55.8,58.7,52.,47.9,16.,28.,207.2,27. };
316   Float_t zr1[8] = { 26.,28.,24.,22.,8.,14.,82.,13. };
317   Float_t wr1[8] = { .27,.081,.054,.045,.18,.25,.06,.06 };
318   //     Material for ring #2 
319   Float_t ar2[3] = { 55.8,27.,16. };
320   Float_t zr2[3] = { 26.,13.,8. };
321   Float_t wr2[3] = { .35,.34,.31 };
322   //     Material for ring #3 
323   Float_t ar3[3] = { 28.,27.,16. };
324   Float_t zr3[3] = { 14.,13.,8. };
325   Float_t wr3[3] = { .37,.33,.3 };
326   
327   Float_t epsil, stmin, deemax, tmaxfd, stemax;
328   
329   Int_t   ISXFLD = gAlice->Field()->Integ();
330   Float_t SXMGMX = gAlice->Field()->Max();
331   
332   //     Ring #1 
333   
334   AliMixture(1, "FMD_R1$", ar1, zr1, 2.69, 8, wr1);
335   
336   //     Ring #2 
337   
338   AliMixture(2, "FMD_R2$", ar2, zr2, 2.63, 3, wr2);
339   
340   //     Ring #3 
341   
342   AliMixture(3, "FMD_R3$", ar3, zr3, 3.15, 3, wr3);
343   // ******************************************************* 
344   //     Defines tracking media parameters. 
345   // ******************************************************* 
346   epsil  = .001; // Tracking precision, DLS 
347   stemax = -1.;  // Maximum displacement for multiple scattering 
348   tmaxfd = -20.; // Maximum angle due to field deflection 
349   deemax = -.3;  // Maximum fractional energy loss, DLS 
350   stmin  = -.8;
351   // ******************************************************** 
352   AliMedium(1, "FMD_R1_L3        ", 1, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
353   AliMedium(2, "FMD_R2_L3        ", 2, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
354   AliMedium(3, "FMD_R3_L3        ", 3, 0, ISXFLD, SXMGMX, tmaxfd, stemax, deemax, epsil, stmin);
355 }
356
357
358