79889bb008c42c29c2d9c0853f9d965361c51f5b
[u/mrichter/AliRoot.git] / AliTRDv1.cxx
1 ///////////////////////////////////////////////////////////////////////////////
2 //                                                                           //
3 //  Transition Radiation Detector version 1 -- detailed simulation           //
4 //                                                                           //
5 //Begin_Html
6 /*
7 <img src="gif/AliTRDv1Class.gif">
8 */
9 //End_Html
10 //                                                                           //
11 //                                                                           //
12 ///////////////////////////////////////////////////////////////////////////////
13
14 #include <TMath.h>
15 #include <TRandom.h>
16 #include <TVector.h>
17 #include <TGeometry.h>
18 #include <TNode.h>
19 #include <TPGON.h> 
20
21 #include "GParticle.h"
22 #include "AliTRDv1.h"
23 #include "AliRun.h"
24 #include "AliConst.h"
25 #include "AliMC.h"
26  
27 ClassImp(AliTRDv1)
28
29 //_____________________________________________________________________________
30 AliTRDv1::AliTRDv1(const char *name, const char *title) 
31          :AliTRD(name, title) 
32 {
33   //
34   // Standard constructor for the Transition Radiation Detector version 1
35   //
36   fIdSens1 = fIdSens2 = fIdSens3 = 0;
37 }
38  
39 //_____________________________________________________________________________
40 void AliTRDv1::CreateGeometry()
41 {
42   //
43   // Create the geometry for the Transition Radiation Detector version 1
44   // --- The coarse geometry of the TRD, that can be used for background 
45   //     studies. This version leaves the space in front of the PHOS and 
46   //     HMPID empty. 
47   // -- Author :    Nick van Eijndhoven (CERN)   24/09/90 
48   //
49   //Begin_Html
50   /*
51     <img src="gif/AliTRDv1.gif">
52   */
53   //End_Html
54   //Begin_Html
55   /*
56     <img src="gif/AliTRDv1Tree.gif">
57   */
58   //End_Html
59
60   Float_t xpos, ypos, zpos, f;
61   Int_t idmat[5];
62   Float_t widma, theoc, widmi, tanzr;
63   Float_t par_ic[4], par_oc[11], phisec, par_mo[10], par_fr[4], par_su[10];
64   
65   Int_t *idtmed = gAlice->Idtmed();
66   
67   // --- Name Conventions : 
68   //        TRD       --> Mother TRD volume                       (Air) 
69   //        UTRL(S)   --> Long (short) subdetector-type           (Al) 
70   //        UTSL(S)   --> Sectors of a subdetector                (Al) 
71   //        UTFI(O/S) --> Inner part of the detector frame        (Air) 
72   //        UTCI(O/S) --> Frames of the inner and outer chambers  (C) 
73   //        UTII(O/S) --> Inner part of the chambers              (Air) 
74   //        UTMI(O/S) --> Modules in the chambers                 (Air) 
75   //        UT1I(O/S) --> Radiator layer                          (CO2) 
76   //        UT2I(O/S) --> Polyethylene layer                      (PE) 
77   //        UT3I(O/S) --> Mylar layer                             (Mylar) 
78   //        UT4I(O/S) --> Xe/C02 layer                            (Xe/C02) 
79   //        UT5I(O/S) --> Cu layer (pads/sensitive)               (Cu) 
80   //        UT6I(O/S) --> Kapton layer                            (Kapton) 
81   //        UT7I(O/S) --> NOMEX layer                             (C) 
82   //        UT8I(O/S) --> Readout layer                           (Al) 
83   
84   // --- Contains geometry information 
85   
86   // --- Number of sectors in the full detector 
87   // --- Number of modules in each sector 
88   // --- z-Coordinates of the TRD-frame 
89   // --- r-Coordinates of the TRD-frame 
90   // --- Thickness of the aluminium of the support frame 
91   // --- Thickness of the interior of the support frame 
92   // --- Thickness of the carbon chamber frame 
93   // --- Thickness and z-position of the PE-layer in the radiator 
94   // --- Thickness and z-position of the radiator 
95   // --- Thickness and z-position of the mylar-layer 
96   // --- Thickness and z-position of the Xe/C02-layer 
97   // --- Thickness and z-position of the Cu-layer (Pads) 
98   // --- Thickness and z-position of the kapton-layer 
99   // --- Thickness and z-position of the NOMEX-layer 
100   //     Simple C-layer for the time being 
101   // --- Thickness and z-position of the readout-layer 
102   // --- Parameter for the arrays 
103   // --- Number of subdetector-types 
104   //--- Number of sectors in the first subdetector-type (full theta coverage)
105   //--- Number of sectors in the second subdetector-type (with hole for PHOS)
106   //************************************************************************
107   
108   //     Definition of Volumes 
109   
110   //************************************************************************
111   
112   const Int_t nsec1 = 5; //Number of sectors in the first subdetector-type
113   const Int_t nsec2 = 5; //Number of sectors in the second subdetector-type
114   
115   AliMC* pMC = AliMC::GetMC();
116   
117   phisec = 360./nsect;  //The phi-angle of the sectors 
118   widmi  = rmin*TMath::Sin(kPI/nsect);
119   widma  = rmax*TMath::Sin(kPI/nsect);
120   // --- Definition of the Mother volume for the TRD (Al) 
121   par_mo[0] = 0.;
122   par_mo[1] = 360.;
123   par_mo[2] = nsect;
124   par_mo[3] = 2.;
125   par_mo[4] = -zmax1;
126   par_mo[5] = rmin;
127   par_mo[6] = rmax;
128   par_mo[7] = zmax1;
129   par_mo[8] = rmin;
130   par_mo[9] = rmax;
131   pMC->Gsvolu("TRD ", "PGON", idtmed[1301], par_mo, 10);
132   // --- Definition of the 1st subdetector-type (full theta-coverage) (Al) 
133   par_su[0] = 120.;
134   par_su[1] = nsec1*phisec;
135   par_su[2] = nsec1;
136   par_su[3] = 2.;
137   par_su[4] = -zmax1;
138   par_su[5] = rmin;
139   par_su[6] = rmax;
140   par_su[7] = 0.;
141   par_su[8] = rmin;
142   par_su[9] = rmax;
143   pMC->Gsvolu("UTRL", "PGON", idtmed[1300], par_su, 10);
144   pMC->Gsdvn("UTSL", "UTRL", nsec1, 2);
145   // --- Definition of the 2nd subdetector-type (hole for PHOS) 
146   par_su[0] = 220.;
147   par_su[1] = nsec2*phisec;
148   par_su[2] = nsec2;
149   par_su[3] = 2.;
150   par_su[4] = -zmax1;
151   par_su[5] = rmin;
152   par_su[6] = rmax;
153   par_su[7] = -zmax1/2;
154   par_su[8] = rmin;
155   par_su[9] = rmax;
156   pMC->Gsvolu("UTRS", "PGON", idtmed[1300], par_su, 10);
157   pMC->Gsdvn("UTSS", "UTRS", nsec2, 2);
158   // --- Definition of the inner part of the detector frame (Air) 
159   par_fr[0] = widmi;
160   par_fr[1] = widma;
161   par_fr[2] = zmax1/4 - alfram2/2;
162   par_fr[3] = (rmax-rmin)/2;
163   pMC->Gsvolu("UTFI", "TRD1", idtmed[1301], par_fr, 4);
164   pMC->Gsvolu("UTFO", "TRD1", idtmed[1301], par_fr, 4);
165   pMC->Gsvolu("UTFS", "TRD1", idtmed[1301], par_fr, 4);
166   // --- Calculate the shape-parameter for the outer chambers 
167   tanzr = (zmax1-zmax2)/(rmax-rmin);
168   theoc = -kRaddeg*TMath::ATan(tanzr / 2.);
169   // --- The carbon frame of the outer chambers 
170   par_oc[0] = (rmax-rmin)/2;
171   par_oc[1] = theoc;
172   par_oc[2] = 90.;
173   par_oc[3] = zmax2/2 - zmax1/4 -alfram2/2;
174   par_oc[4] = widmi - (inframe+alfram1)/2;
175   par_oc[5] = widmi - (inframe+alfram1)/2;
176   par_oc[6] = 0.;
177   par_oc[7] = zmax1/4 - alfram2/2;
178   par_oc[8] = widma - (inframe+alfram1)/2;
179   par_oc[9] = widma - (inframe+alfram1)/2;
180   par_oc[10] = 0.;
181   pMC->Gsvolu("UTCO", "TRAP", idtmed[1306], par_oc, 11);
182   // --- The inner part of the outer chambers (Air) 
183   par_oc[3] -= ccframe;
184   par_oc[4] -= ccframe;
185   par_oc[5] -= ccframe;
186   par_oc[7] -= ccframe;
187   par_oc[8] -= ccframe;
188   par_oc[9] -= ccframe;
189   pMC->Gsvolu("UTIO", "TRAP", idtmed[1301], par_oc, 11);
190   // --- Definition of the six modules within each outer chamber 
191   pMC->Gsdvn("UTMO", "UTIO", nmodul, 3);
192   // --- Definition of the layers of each outer chamber 
193   par_oc[1] = theoc;
194   par_oc[2] = 90.;
195   par_oc[3] = -1.;
196   par_oc[4] = -1.;
197   par_oc[5] = -1.;
198   par_oc[6] =  0.;
199   par_oc[7] = -1.;
200   par_oc[8] = -1.;
201   par_oc[9] = -1.;
202   par_oc[10] = 0.;
203   // --- Radiator layer 
204   par_oc[0] = rathick/2;
205   pMC->Gsvolu("UT1O", "TRAP", idtmed[1311], par_oc, 11);
206   // --- Polyethylene layer 
207   par_oc[0] = pethick/2;
208   pMC->Gsvolu("UT2O", "TRAP", idtmed[1302], par_oc, 11);
209   // --- Mylar layer 
210   par_oc[0] = mythick/2;
211   pMC->Gsvolu("UT3O", "TRAP", idtmed[1307], par_oc, 11);
212   // --- Xe/CO2 layer 
213   par_oc[0] = xethick/2;
214   pMC->Gsvolu("UT4O", "TRAP", idtmed[1308], par_oc, 11);
215   // --- Cu layer 
216   par_oc[0] = cuthick/2;
217   pMC->Gsvolu("UT5O", "TRAP", idtmed[1304], par_oc, 11);
218   // --- Kapton layer 
219   par_oc[0] = kathick/2;
220   pMC->Gsvolu("UT6O", "TRAP", idtmed[1310], par_oc, 11);
221   // --- NOMEX layer 
222   par_oc[0] = nothick/2;
223   pMC->Gsvolu("UT7O", "TRAP", idtmed[1309], par_oc, 11);
224   // --- Read out layer 
225   par_oc[0] = rothick/2;
226   pMC->Gsvolu("UT8O", "TRAP", idtmed[1305], par_oc, 11);
227   // --- The carbon frame of the chambers in the short sectors 
228   par_oc[0] = (rmax-rmin)/2;
229   par_oc[1] = theoc;
230   par_oc[2] = 90.;
231   par_oc[3] = zmax2/2 - zmax1/4 -alfram2/2;
232   par_oc[4] = widmi - (inframe+alfram1)/2;
233   par_oc[5] = widmi - (inframe+alfram1)/2;
234   par_oc[6] = 0.;
235   par_oc[7] = zmax1/4 - alfram2/2;
236   par_oc[8] = widma - (inframe+alfram1)/2;
237   par_oc[9] = widma - (inframe+alfram1)/2;
238   par_oc[10] = 0.;
239   pMC->Gsvolu("UTCS", "TRAP", idtmed[1306], par_oc, 11);
240   // --- The inner part of the chambers in the short sectors (Air) 
241   par_oc[3] -= ccframe;
242   par_oc[4] -= ccframe;
243   par_oc[5] -= ccframe;
244   par_oc[7] -= ccframe;
245   par_oc[8] -= ccframe;
246   par_oc[9] -= ccframe;
247   pMC->Gsvolu("UTIS", "TRAP", idtmed[1301], par_oc, 11);
248   //--- Definition of the six modules within each chamber of the short sectors
249   pMC->Gsdvn("UTMS", "UTIS", 6, 3);
250   // --- Definition of the layers of each chamber in the short sectors 
251   par_oc[1] = theoc;
252   par_oc[2] = 90.;
253   par_oc[3] = -1.;
254   par_oc[4] = -1.;
255   par_oc[5] = -1.;
256   par_oc[6] =  0.;
257   par_oc[7] = -1.;
258   par_oc[8] = -1.;
259   par_oc[9] = -1.;
260   par_oc[10] = 0.;
261   // --- Radiator layer 
262   par_oc[0] = rathick/2;
263   pMC->Gsvolu("UT1S", "TRAP", idtmed[1311], par_oc, 11);
264   // --- Polyethylene layer 
265   par_oc[0] = pethick/2;
266   pMC->Gsvolu("UT2S", "TRAP", idtmed[1302], par_oc, 11);
267   // --- Mylar layer 
268   par_oc[0] = mythick/2;
269   pMC->Gsvolu("UT3S", "TRAP", idtmed[1307], par_oc, 11);
270   // --- Xe/CO2 layer 
271   par_oc[0] = xethick/2;
272   pMC->Gsvolu("UT4S", "TRAP", idtmed[1308], par_oc, 11);
273   // --- Cu layer 
274   par_oc[0] = cuthick/2;
275   pMC->Gsvolu("UT5S", "TRAP", idtmed[1304], par_oc, 11);
276   // --- Kapton layer 
277   par_oc[0] = kathick/2;
278   pMC->Gsvolu("UT6S", "TRAP", idtmed[1310], par_oc, 11);
279   // --- NOMEX layer 
280   par_oc[0] = nothick/2;
281   pMC->Gsvolu("UT7S", "TRAP", idtmed[1309], par_oc, 11);
282   // --- Read out layer 
283   par_oc[0] = rothick/2;
284   pMC->Gsvolu("UT8S", "TRAP", idtmed[1305], par_oc, 11);
285   // --- The carbon frame of the inner chambers 
286   par_ic[0] = widmi - (inframe+alfram1)/2;
287   par_ic[1] = widma - (inframe+alfram1)/2;
288   par_ic[2] = zmax1/4 - alfram2/2;
289   par_ic[3] = (rmax-rmin)/2;
290   pMC->Gsvolu("UTCI", "TRD1", idtmed[1306], par_ic, 4);
291   // --- The inner part of the inner chambers (Air) 
292   par_ic[0] -= ccframe;
293   par_ic[1] -= ccframe;
294   par_ic[2] -= ccframe;
295   pMC->Gsvolu("UTII", "TRD1", idtmed[1301], par_ic, 4);
296   // --- Definition of the six modules within each outer chamber 
297   pMC->Gsdvn("UTMI", "UTII", nmodul, 3);
298   // --- Definition of the layers of each inner chamber 
299   par_ic[0] = -1.;
300   par_ic[1] = -1.;
301   par_ic[2] = -1.;
302   // --- Radiator layer 
303   par_ic[3] = rathick/2;
304   pMC->Gsvolu("UT1I", "TRD1", idtmed[1311], par_ic, 4);
305   // --- Polyethylene layer 
306   par_ic[3] = pethick/2;
307   pMC->Gsvolu("UT2I", "TRD1", idtmed[1302], par_ic, 4);
308   // --- Mylar layer 
309   par_ic[3] = mythick/2;
310   pMC->Gsvolu("UT3I", "TRD1", idtmed[1307], par_ic, 4);
311   // --- Xe/CO2 layer 
312   par_ic[3] = xethick/2;
313   pMC->Gsvolu("UT4I", "TRD1", idtmed[1308], par_ic, 4);
314   // --- Cu layer 
315   par_ic[3] = cuthick/2;
316   pMC->Gsvolu("UT5I", "TRD1", idtmed[1304], par_ic, 4);
317   // --- Kapton layer 
318   par_ic[3] = kathick/2;
319   pMC->Gsvolu("UT6I", "TRD1", idtmed[1310], par_ic, 4);
320   // --- NOMEX layer 
321   par_ic[3] = nothick/2;
322   pMC->Gsvolu("UT7I", "TRD1", idtmed[1309], par_ic, 4);
323   // --- Read out layer 
324   par_ic[3] = rothick/2;
325   pMC->Gsvolu("UT8I", "TRD1", idtmed[1305], par_ic, 4);
326   //************************************************************************
327   
328   //     Positioning of Volumes 
329   
330   //************************************************************************
331   // --- The rotation matrices 
332   AliMatrix(idmat[0], 90., 180.,  90., 90.,   0., 0.);
333   AliMatrix(idmat[1], 90.,   0.,  90., 90., 180., 0.);
334   AliMatrix(idmat[2], 90., 180.,  90., 90., 180., 0.);
335   AliMatrix(idmat[3], 90.,  90., 180.,  0.,  90., 0.);
336   AliMatrix(idmat[4], 90.,  90.,   0.,  0.,  90., 0.);
337   // --- Position of the layers in a TRD module 
338   f = TMath::Tan(theoc * kDegrad);
339   pMC->Gspos("UT8O", 1, "UTMO", 0., f*rozpos, rozpos, 0, "ONLY");
340   pMC->Gspos("UT7O", 1, "UTMO", 0., f*nozpos, nozpos, 0, "ONLY");
341   pMC->Gspos("UT6O", 1, "UTMO", 0., f*kazpos, kazpos, 0, "ONLY");
342   pMC->Gspos("UT5O", 1, "UTMO", 0., f*cuzpos, cuzpos, 0, "ONLY");
343   pMC->Gspos("UT4O", 1, "UTMO", 0., f*xezpos, xezpos, 0, "ONLY");
344   pMC->Gspos("UT3O", 1, "UTMO", 0., f*myzpos, myzpos, 0, "ONLY");
345   pMC->Gspos("UT1O", 1, "UTMO", 0., f*razpos, razpos, 0, "ONLY");
346   pMC->Gspos("UT2O", 1, "UT1O", 0., f*pezpos, pezpos, 0, "ONLY");
347   
348   pMC->Gspos("UT8S", 1, "UTMS", 0., f*rozpos, rozpos, 0, "ONLY");
349   pMC->Gspos("UT7S", 1, "UTMS", 0., f*nozpos, nozpos, 0, "ONLY");
350   pMC->Gspos("UT6S", 1, "UTMS", 0., f*kazpos, kazpos, 0, "ONLY");
351   pMC->Gspos("UT5S", 1, "UTMS", 0., f*cuzpos, cuzpos, 0, "ONLY");
352   pMC->Gspos("UT4S", 1, "UTMS", 0., f*xezpos, xezpos, 0, "ONLY");
353   pMC->Gspos("UT3S", 1, "UTMS", 0., f*myzpos, myzpos, 0, "ONLY");
354   pMC->Gspos("UT1S", 1, "UTMS", 0., f*razpos, razpos, 0, "ONLY");
355   pMC->Gspos("UT2S", 1, "UT1S", 0., f*pezpos, pezpos, 0, "ONLY");
356   
357   pMC->Gspos("UT8I", 1, "UTMI", 0., 0., rozpos, 0, "ONLY");
358   pMC->Gspos("UT7I", 1, "UTMI", 0., 0., nozpos, 0, "ONLY");
359   pMC->Gspos("UT6I", 1, "UTMI", 0., 0., kazpos, 0, "ONLY");
360   pMC->Gspos("UT5I", 1, "UTMI", 0., 0., cuzpos, 0, "ONLY");
361   pMC->Gspos("UT4I", 1, "UTMI", 0., 0., xezpos, 0, "ONLY");
362   pMC->Gspos("UT3I", 1, "UTMI", 0., 0., myzpos, 0, "ONLY");
363   pMC->Gspos("UT1I", 1, "UTMI", 0., 0., razpos, 0, "ONLY");
364   pMC->Gspos("UT2I", 1, "UT1I", 0., 0., pezpos, 0, "ONLY");
365   // --- Position of the inner part of the chambers 
366   pMC->Gspos("UTII", 1, "UTCI", 0., 0., 0., 0, "ONLY");
367   pMC->Gspos("UTIO", 1, "UTCO", 0., 0., 0., 0, "ONLY");
368   pMC->Gspos("UTIS", 1, "UTCS", 0., 0., 0., 0, "ONLY");
369   // --- Position of the chambers in the support frame 
370   xpos = 0.;
371   ypos = (zmax1-zmax2)/4;
372   zpos = 0.;
373   pMC->Gspos("UTCO", 1, "UTFO", xpos, ypos, zpos, 0, "ONLY");
374   xpos = 0.;
375   ypos = (zmax1-zmax2)/4;
376   zpos = 0.;
377   pMC->Gspos("UTCS", 1, "UTFS", xpos, ypos, zpos, 0, "ONLY");
378   xpos = 0.;
379   ypos = 0.;
380   zpos = 0.;
381   pMC->Gspos("UTCI", 1, "UTFI", xpos, ypos, zpos, 0, "ONLY");
382   // --- Position of the inner part of the frame in the sectors 
383   xpos = (rmax+rmin)/2;
384   ypos = 0;
385   zpos = -zmax1*3/4;
386   pMC->Gspos("UTFO", 1, "UTSL", xpos, ypos, zpos, idmat[4], "ONLY");
387   xpos = (rmax+rmin)/2;
388   ypos = 0;
389   zpos = -zmax1*3/4;
390   pMC->Gspos("UTFS", 1, "UTSS", xpos, ypos, zpos, idmat[4], "ONLY");
391   xpos = (rmax+rmin)/2;
392   ypos = 0.;
393   zpos = -zmax1/4;
394   pMC->Gspos("UTFI", 1, "UTSL", xpos, ypos, zpos, idmat[4], "ONLY");
395   // --- Position of the subdetectors in the mother volume 
396   pMC->Gspos("UTRL", 1, "TRD ", 0., 0., 0., 0,        "ONLY");
397   pMC->Gspos("UTRL", 2, "TRD ", 0., 0., 0., idmat[0], "ONLY");
398   pMC->Gspos("UTRL", 3, "TRD ", 0., 0., 0., idmat[1], "ONLY");
399   pMC->Gspos("UTRL", 4, "TRD ", 0., 0., 0., idmat[2], "ONLY");
400   pMC->Gspos("UTRS", 1, "TRD ", 0., 0., 0., 0,        "ONLY");
401   pMC->Gspos("UTRS", 2, "TRD ", 0., 0., 0., idmat[1], "ONLY");
402   // --- Position of TRD mother volume in ALICE experiment 
403   pMC->Gspos("TRD ", 1, "ALIC", 0., 0., 0., 0, "ONLY");
404 }
405  
406 //_____________________________________________________________________________
407 void AliTRDv1::DrawModule()
408 {
409   //
410   // Draw a shaded view of the Transition Radiation Detector version 1
411   //
412
413   AliMC* pMC = AliMC::GetMC();
414   
415   // Set everything unseen
416   pMC->Gsatt("*", "seen", -1);
417   // 
418   // Set ALIC mother transparent
419   pMC->Gsatt("ALIC","SEEN",0);
420   //
421   // Set the volumes visible
422   pMC->Gsatt("TRD","SEEN",0);
423   pMC->Gsatt("UTRL","SEEN",0);
424   pMC->Gsatt("UTSL","SEEN",0);
425   pMC->Gsatt("UTRS","SEEN",0);
426   pMC->Gsatt("UTSS","SEEN",0);
427   pMC->Gsatt("UTFI","SEEN",0);
428   pMC->Gsatt("UTFO","SEEN",0);
429   pMC->Gsatt("UTFS","SEEN",0);
430   pMC->Gsatt("UTCO","SEEN",0);
431   pMC->Gsatt("UTIO","SEEN",0);
432   pMC->Gsatt("UTMO","SEEN",0);
433   pMC->Gsatt("UT1O","SEEN",1);
434   pMC->Gsatt("UT4O","SEEN",1);
435   pMC->Gsatt("UTCS","SEEN",0);
436   pMC->Gsatt("UTIS","SEEN",0);
437   pMC->Gsatt("UTMS","SEEN",0);
438   pMC->Gsatt("UT1S","SEEN",1);
439   pMC->Gsatt("UT4S","SEEN",1);
440   pMC->Gsatt("UTCI","SEEN",0);
441   pMC->Gsatt("UTII","SEEN",0);
442   pMC->Gsatt("UTMI","SEEN",0);
443   pMC->Gsatt("UT1I","SEEN",1);
444   pMC->Gsatt("UT4I","SEEN",1);
445   //
446   pMC->Gdopt("hide", "on");
447   pMC->Gdopt("shad", "on");
448   pMC->Gsatt("*", "fill", 7);
449   pMC->SetClipBox(".");
450   pMC->SetClipBox("*", 0, 2000, -2000, 2000, -2000, 2000);
451   pMC->DefaultRange();
452   pMC->Gdraw("alic", 40, 30, 0, 12, 9.4, .021, .021);
453   pMC->Gdhead(1111, "Transition Radiation Detector Version 1");
454   pMC->Gdman(18, 4, "MAN");
455 }
456
457 //_____________________________________________________________________________
458 void AliTRDv1::CreateMaterials()
459 {
460   //
461   // Create materials for the Transition Radiation Detector version 1
462   //
463    printf("TRD: Fast simulation with coarse geometry\n");
464    AliTRD::CreateMaterials();
465 }
466
467 //_____________________________________________________________________________
468 void AliTRDv1::Init() 
469 {
470   //
471   // Initialise the Transition Radiation Detector after the geometry is built
472   //
473   AliTRD::Init();
474   AliMC* pMC = AliMC::GetMC();
475   fIdSens1 = pMC->VolId("UT5I");
476   fIdSens2 = pMC->VolId("UT5O");
477   fIdSens3 = pMC->VolId("UT5S");
478 }
479
480 //_____________________________________________________________________________
481 void AliTRDv1::StepManager() 
482 {
483   //
484   // Called at every step in the Transition Radiation Detector
485   //
486   Int_t         vol[3]; 
487   Int_t         icopy1, icopy5, icopy6, idSens, icSens; 
488   
489   Float_t       hits[4];
490   
491   TClonesArray &lhits = *fHits;
492
493   AliMC* pMC = AliMC::GetMC();
494   
495   // Use only charged tracks and count them only once per volume
496   if(pMC->TrackCharge() && pMC->TrackEntering()) {
497     
498     // Check on sensitive volume
499     idSens = pMC->CurrentVol(0,icSens);
500
501     // Long sectors
502     if      ((idSens == fIdSens1) || (idSens == fIdSens2)) {
503       
504       pMC->CurrentVolOff(1,0,icopy1);
505       pMC->CurrentVolOff(5,0,icopy5);
506       pMC->CurrentVolOff(6,0,icopy6);
507       
508       // The sector number
509       if ((icopy6 == 1) || (icopy6 == 3)) 
510         vol[0] = icopy5;
511       else 
512         vol[0] = 16 - icopy5;
513       
514       // The chamber number
515       if (idSens == fIdSens2) { 
516         if (icopy6 < 3)
517           vol[1] = 4;
518         else
519           vol[1] = 1;
520       }         
521       else {
522         if (icopy6 < 3)
523           vol[1] = 3;
524         else
525           vol[1] = 2;
526       }
527       
528       // The plane number
529       vol[2] = icopy1;    
530       
531       pMC->TrackPosition(hits);
532       hits[3] = 0;
533       
534       new(lhits[fNhits++]) AliTRDhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
535       
536     }
537     // Short sectors
538     else if (idSens == fIdSens3) {
539       
540       pMC->CurrentVolOff(1,0,icopy1);
541       pMC->CurrentVolOff(5,0,icopy5);
542       pMC->CurrentVolOff(6,0,icopy6);
543       
544       // The sector number
545       vol[0] = icopy5 + 5;
546       
547       // The chamber number
548       if (icopy6 == 1)
549         vol[1] = 4;
550       else
551         vol[1] = 1;
552       
553       // The plane number
554       vol[2] = icopy1;
555       
556       pMC->TrackPosition(hits);        
557       hits[3] = 0;
558       
559       new(lhits[fNhits++]) AliTRDhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
560       
561     }   
562   } 
563 }