]> git.uio.no Git - u/mrichter/AliRoot.git/blob - CRT/AliCRTv1.cxx
Another Standalone ITS tracker (E. Crescio)
[u/mrichter/AliRoot.git] / CRT / AliCRTv1.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 // ALICE Cosmic Ray Trigger                                                  //
21 //                                                                           //
22 //  This class contains the functions for version 0 of the ALICE Cosmic Ray  //
23 //  Trigger. This vesion is suposed to work as standalone module             //
24 //                                                                           //
25 //
26 //   Authors:
27 //
28 //   Arturo Fernandez <afernand@fcfm.buap.mx>
29 //   Enrique Gamez    <egamez@fcfm.buap.mx>
30 //
31 //   Universidad Autonoma de Puebla
32 //
33 //
34 //Begin_Html
35 /*
36 <img src="picts/AliCRTv1Class.gif">
37 </pre>
38 <br clear=left>
39 <p>The responsible person for this module is
40 <a href="mailto:egamez@fcfm.buap.mx">Enrique Gamez</a>.
41 </font>
42 <pre>
43 */
44 //End_Html
45 //                                                                           //
46 ///////////////////////////////////////////////////////////////////////////////
47
48 #include "AliCRTv1.h"
49
50 #include <TClonesArray.h>
51 #include <TLorentzVector.h>
52 #include <TPDGCode.h>
53 #include <TVirtualMC.h>
54
55 #include "AliRun.h"
56 #include "AliConst.h"
57
58 #include "AliCRThit.h"
59 #include "AliCRTConstants.h"
60 #include "AliMC.h"
61
62 ClassImp(AliCRTv1)
63  
64 //_____________________________________________________________________________
65 AliCRTv1::AliCRTv1()
66   : AliCRT()
67 {
68   //
69   // Default constructor
70   //
71   fIshunt = 0;
72   fHits = 0;
73 }
74  
75 //_____________________________________________________________________________
76 AliCRTv1::AliCRTv1(const char *name, const char *title)
77   : AliCRT(name, title)
78 {
79   //
80   // Standard constructor
81   //
82   //Begin_Html
83   /*
84     <img src="picts/AliCRTv1.gif">
85   */
86   //End_Html
87   fIshunt =  1; // All hits are associated with primary particles  
88
89   fHits =  new TClonesArray("AliCRThit",400);
90   gAlice->GetMCApp()->AddHitList(fHits);
91
92   SetMarkerColor(7);
93   SetMarkerStyle(2);
94   SetMarkerSize(0.4);
95 }
96
97 //_____________________________________________________________________________
98 AliCRTv1::AliCRTv1(const AliCRTv1& crt)
99   : AliCRT(crt)
100 {
101   //
102   // Copy ctor.
103   //
104   crt.Copy(*this);
105 }
106
107 //_____________________________________________________________________________
108 AliCRTv1::~AliCRTv1()
109 {
110   //
111   // Default destructor
112   //
113 }
114
115 //_____________________________________________________________________________
116 AliCRTv1& AliCRTv1::operator=(const AliCRTv1& crt)
117 {
118   //
119   // Asingment operator
120   //
121   crt.Copy(*this);
122   return *this;
123 }
124
125 //_____________________________________________________________________________
126 void AliCRTv1::CreateMaterials()
127 {
128   //
129   // Create Materials.
130   // Use the parent class definition of the materials
131   //
132   AliCRT::CreateMaterials();
133 }
134
135 //_____________________________________________________________________________
136 void AliCRTv1::CreateGeometry()
137 {
138   //
139   // Create geometry for the CRT array
140   //
141
142   Int_t  idrotm[2499];    // The rotation matrix.
143   Int_t* idtmed = fIdtmed->GetArray() - 1099 ;
144
145   // Shafts.
146   this->CreateShafts();
147
148   // Molasse.
149   this->CreateMolasse();
150
151   AliCRTConstants* crtConstants = AliCRTConstants::Instance();
152
153   // Create a big volume with air barrel above the magnet
154   Float_t barrel[10];
155   Float_t magnetSides = 3.;
156   Float_t planesPerpendicularToZ = 2.;
157   barrel[0] = 22.5;
158   barrel[1] = 45*magnetSides;
159   barrel[2] = magnetSides;
160   barrel[3] = planesPerpendicularToZ;
161   barrel[4] = -700.;
162   barrel[5] = crtConstants->MagMinRadius();
163   barrel[6] = crtConstants->MagMinRadius() + 2.; // 2 cm width
164   barrel[7] = -barrel[4];
165   barrel[8] = barrel[5];
166   barrel[9] = barrel[6];
167   gMC->Gsvolu("CRT4", "PGON", idtmed[1112], barrel, 10);
168   gMC->Gspos("CRT4", 1 , "CRT", 0., -30., 0., 0, "ONLY");
169
170   //
171   Float_t box[3];
172   box[0] = crtConstants->SinglePaletteLenght()/4;
173   box[1] = crtConstants->SinglePaletteHeight()/2;
174   box[2] = crtConstants->SinglePaletteWidth()/2;
175   gMC->Gsvolu("CRT6", "BOX", idtmed[1113], box, 3);
176
177   // In the right side side of the magnet
178   AliMatrix(idrotm[231], 90., 45., 90., 315., 180., 202.5);
179
180   // In the left side side of the magnet
181   //AliMatrix(idrotm[232], 90., 315., 90., 315., 0.0000040, 263.0707092);
182   AliMatrix(idrotm[232], 90, 315, 90, 315, 0, 263);
183
184   // Now put them into the volume created above
185   // First above the magnet.
186   Float_t away = (2.*barrel[5]*TMath::Sin(kDegrad*22.5))/4.;
187   Int_t nModules = 10;
188   for (Int_t i = 0; i < nModules; i++) {
189     Float_t zCoordinate = i*100 - 450;
190     // In the lef side
191     gMC->Gspos("CRT6", i, "CRT4", -away, barrel[5]+1., zCoordinate, 0, "ONLY");
192     // In the rigth side
193     gMC->Gspos("CRT6",i+10,"CRT4", away, barrel[5]+1., zCoordinate, 0, "ONLY");
194
195     // The most away part (left side)
196     gMC->Gspos("CRT6", i+20, "CRT4", 3*away, barrel[5]+21 - away, zCoordinate, idrotm[232], "ONLY");
197     // The inner part (left side)
198     gMC->Gspos("CRT6", i+30, "CRT4", 4*away, barrel[5]+21 - 2*away, zCoordinate, idrotm[232], "ONLY");
199
200     // The most away part (rigth side)
201     gMC->Gspos("CRT6", i+40, "CRT4", -3*away, barrel[5]+21. - away, zCoordinate, idrotm[231], "ONLY");
202     // The inner part (rigth side)
203     gMC->Gspos("CRT6", i+50, "CRT4", -4*away, barrel[5]+21 - 2*away, zCoordinate, idrotm[231], "ONLY");
204   }
205
206   // Now the magnet doors
207   magnetSides = 8.;
208   barrel[1] = 45*magnetSides;
209   barrel[2] = magnetSides;
210   barrel[4] = 700.;
211   barrel[5] = 0;
212   barrel[6] = 790;
213   barrel[7] = barrel[4] + 2.;
214   barrel[8] = barrel[5];
215   barrel[9] = barrel[6];
216   gMC->Gsvolu("CRT5", "PGON", idtmed[1111], barrel, 10);
217   gMC->Gspos("CRT5", 1, "CRT", 0., -30., 0., 0, "ONLY");
218
219   AliMatrix(idrotm[300], 90., 0., 90., 90., 180., 0.);
220   gMC->Gspos("CRT5", 2, "CRT", 0., -30., 0., idrotm[300], "ONLY");
221
222 }
223
224 //_____________________________________________________________________________
225 void AliCRTv1::CreateMolasse()
226 {
227   //
228   //
229   //
230   Int_t  idrotm[2499];    // The rotation matrix.
231   Int_t* idtmed = fIdtmed->GetArray() - 1099 ;
232
233   // Exactly above the hall
234   Float_t tspar[5];
235   tspar[0] = 1170;
236   tspar[1] = 1170 + 375;
237   tspar[2] = (1900 + 1150)/2 + 100;
238   tspar[3] = 0;
239   tspar[4] = 180;
240   gMC->Gsvolu("CMO1", "TUBS", idtmed[1123], tspar, 5);
241   gMC->Gspos("CMO1", 1, "CRT", 0, 500., 1900 - tspar[2] + 400, 0, "MANY");
242
243   Float_t tbox[3];
244   tbox[0] = 1250;
245   tbox[1] = (4420 - 1670)/2;
246   tbox[2] = (1900 + 1150)/2 + 200;
247   gMC->Gsvolu("CM12", "BOX", idtmed[1123], tbox, 3);
248   gMC->Gspos("CM12",1,"CRT",0, 4420 - tbox[1], 1900 - tbox[2] + 400, 0,"MANY");
249
250   AliMatrix(idrotm[2003], 0., 0., 90., 0., 90., 90.);
251   // Along the PM25
252   Float_t tube[3];
253   tube[0] = 455 + 100;
254   tube[1] = 555 + 375;
255   tube[2] = (5150 - 1166)/2;
256   gMC->Gsvolu("CMO2", "TUBE", idtmed[1123], tube, 3);
257   gMC->Gspos("CMO2", 1, "CRT", -2100, 4420 - tube[2], 0, idrotm[2003], "MANY");
258
259   // Along the PGC2
260   tube[0] = 650;
261   tube[1] = 2987.7;
262   tube[2] = (5150 - 690)/2;
263   gMC->Gsvolu("CMO3", "TUBE", idtmed[1123], tube, 3);
264   gMC->Gspos("CMO3",1,"CRT", 375, 4420 - tube[2], 1900 + 2987.7,idrotm[2003],"MANY");
265
266   // Behind the PGC2 up to the end of the M. volume.
267   tbox[0] = 12073;
268   tbox[1] = 2575 + 95;
269   tbox[2] = (12073 - 1900 - 2987.7 - 650)/2.;
270   gMC->Gsvolu("CMO7", "BOX", idtmed[1123], tbox, 3);
271   gMC->Gspos("CMO7", 1, "CRT", 0, 4420 - tbox[1], 1900 + 2987.7 + 650 + tbox[2], 0, "MANY");
272
273   // Along the PX24 , upper part.
274   tube[0] = 1250;
275   tube[1] = 2300;
276   tube[2] = 2575 - 1300 + 95;
277   gMC->Gsvolu("CMO4", "TUBE", idtmed[1123], tube, 3);
278   gMC->Gspos("CMO4", 1, "CRT", 0, 404 + 1300 + tube[2], -2300, idrotm[2003], "MANY");
279
280   // Along the PX24 , lower part
281   tspar[0] = 1250;
282   tspar[1] = 2300;
283   tspar[2] = 1300;
284   tspar[3] = kRaddeg*TMath::ASin(1070./1150.);
285   tspar[4] = 360 - tspar[3];
286   gMC->Gsvolu("CMO5", "TUBS", idtmed[1123], tspar, 5);
287   gMC->Gspos("CMO5", 1, "CRT", 0., 404, -2300, idrotm[2003], "MANY");
288   // behind the PX24
289   tbox[0] = 12073;
290   tbox[1] = 2575 + 95;
291   tbox[2] = 8523/2;
292   gMC->Gsvolu("CMO6", "BOX", idtmed[1123], tbox, 3);
293   gMC->Gspos("CMO6", 1, "CRT", 0., 4420 - tbox[1], -3550 - tbox[2], 0, "MANY");
294
295   // On the right side of th hall
296   tbox[0] = (12073 - 1250)/2;
297   tbox[1] = 2575 + 95;
298   tbox[2] = (8437.7+650)/2;
299   gMC->Gsvolu("CMO8", "BOX", idtmed[1123], tbox, 3);
300   gMC->Gspos("CMO8", 1, "CRT", 1250 + tbox[0], 4420 - tbox[1], -3550 + tbox[2], 0, "MANY");
301
302   // on the left side of the hall, behind 
303   tbox[0] = (12073 - 2755)/2;
304   tbox[1] = 2575 + 95;
305   tbox[2] = (8437.7 + 650)/2.;
306   gMC->Gsvolu("CMO9", "BOX", idtmed[1123], tbox, 3);
307   gMC->Gspos("CMO9", 1, "CRT", -2755 - tbox[0], 4420 - tbox[1], -3550 + tbox[2], 0, "MANY");
308
309   // Molasse betwen the PX24 & PM25 on the left side.
310   tbox[0] = (2755 - 1250)/2;
311   tbox[1] = 2575 + 95;
312   tbox[2] = (3550 - 555)/2;
313   gMC->Gsvolu("CM10", "BOX", idtmed[1123], tbox, 3);
314   gMC->Gspos("CM10", 1, "CRT", -1250 - tbox[0], 4420 - tbox[1], -tbox[2] - 555, 0, "MANY");
315
316   // Molasse betwen the PGC2 & PM25 on the left side.
317   tbox[0] = (2755 - 1250)/2;
318   tbox[1] = 2575 + 95;
319   tbox[2] = (1900 + 2987.7 - 555 + 650)/2;
320   gMC->Gsvolu("CM11", "BOX", idtmed[1123], tbox, 3);
321   gMC->Gspos("CM11", 1, "CRT", -1250 - tbox[0], 4420 - tbox[1], 555 + tbox[2], 0, "MANY");
322
323 }
324
325 //_____________________________________________________________________________
326 void AliCRTv1::CreateShafts()
327 {
328   //
329   //
330   //
331   Int_t  idrotm[2499];    // The rotation matrix.
332   Int_t* idtmed = fIdtmed->GetArray() - 1099 ;
333
334   // Create a mother volume.
335   Float_t pbox[3];
336   //pbox[0] = AliCRTConstants::Instance()->Depth()*TMath::Tan(67.5*kDegrad);
337   pbox[0] = 12073.;
338   pbox[1] = AliCRTConstants::Instance()->Depth();
339   pbox[2] = pbox[0];
340   gMC->Gsvolu("CRT", "BOX", idtmed[1114], pbox, 3);
341   gMC->Gspos("CRT", 1, "ALIC", 0, 0, 0, 0, "ONLY");
342
343   // HAll ceiling
344   Float_t ptubs[5];
345   ptubs[0] = 1070;
346   ptubs[1] = 1170;
347   ptubs[2] = 1900;
348   ptubs[3] = 0;
349   ptubs[4] = 180;
350   gMC->Gsvolu("CHC1", "TUBS", idtmed[1116], ptubs, 5);
351   gMC->Gspos("CHC1", 1, "CRT", 0, 500, 0, 0, "ONLY");
352
353   //
354   // Acces shafts
355   //
356   AliMatrix(idrotm[2001], 0., 0., 90., 0., 90., 90.);
357
358   // PX24
359   ptubs[0] = 1150;
360   ptubs[1] = 1250;
361   ptubs[2] = 1300;
362   ptubs[3] = kRaddeg*TMath::ASin(1070/ptubs[0]);
363   ptubs[4] = 360 - ptubs[3];
364   gMC->Gsvolu("CSF1", "TUBS", idtmed[1116], ptubs, 5);
365   gMC->Gspos("CSF1", 1, "CRT", 0., 404, -2300, idrotm[2001], "MANY");
366
367   Float_t ptube[3];
368   ptube[0] = ptubs[0];
369   ptube[1] = ptubs[1];
370   ptube[2] = 2575 - ptubs[2] + 95;
371   gMC->Gsvolu("CSF2", "TUBE", idtmed[1116], ptube, 3);
372   gMC->Gspos("CSF2", 1, "CRT", 0, 404 + ptubs[2] + ptube[2], -2300, idrotm[2001], "MANY");
373
374   // Concrete walls along the shaft
375   pbox[0] = 585/2;
376   pbox[1] = 2575 + 95;
377   pbox[2] = 20;
378   gMC->Gsvolu("CSW1", "BOX", idtmed[1116], pbox, 3);
379   gMC->Gspos("CSW1", 1, "CRT", -290 - pbox[0], 404 - 1300 + pbox[1], -3450 + 210*2, 0, "MANY");
380
381   //
382   pbox[0] = 750/2;
383   pbox[1] = 2575 + 95;
384   pbox[2] = 20;
385   gMC->Gsvolu("CSW3", "BOX", idtmed[1116], pbox, 3);
386   gMC->Gspos("CSW3", 1, "CRT", 420 - 290 +pbox[0], 404 - 1300 + pbox[1], -3450 + 210*2, 0, "MANY");
387
388   //
389   pbox[0] = 60;
390   pbox[1] = 2575 + 95;
391   pbox[2] = 210;
392   gMC->Gsvolu("CSW2", "BOX", idtmed[1116], pbox, 3);
393   gMC->Gspos("CSW2", 1, "CRT", -290 - pbox[0], 404 - 1300 + pbox[1], -3450 + pbox[2], 0, "MANY");
394   gMC->Gspos("CSW2", 2, "CRT", 420 - 290 + pbox[0], 404 - 1300 + pbox[1], -3450 + pbox[2], 0, "MANY");
395
396   // 
397   pbox[0] = 1000;
398   pbox[1] = 80;
399   pbox[2] = 200;
400   gMC->Gsvolu("CSP1", "BOX", idtmed[1116], pbox, 3);
401   gMC->Gspos("CSP1", 1, "CRT", 0, 2600 - 700, -1150 - pbox[2], 0, "MANY");
402
403   //
404   pbox[0] = 340.8;
405   pbox[1] = 300/2.;
406   pbox[2] = 460/2.;
407   gMC->Gsvolu("CSP2", "BOX", idtmed[1116], pbox, 3);
408   gMC->Gspos("CSP2", 1, "CRT", 0, 2950.-700., -3450+pbox[2], 0, "MANY");
409
410   //
411   pbox[0] = 600;
412   pbox[1] = 150;
413   pbox[2] = 75;
414   gMC->Gsvolu("CSP3", "BOX", idtmed[1116], pbox, 3);
415   gMC->Gspos("CSP3", 1, "CRT", 0, 2950.-700., -1150.-210.-pbox[2], 0, "MANY");
416
417   //
418   pbox[0] = 600;
419   pbox[1] = 250;
420   pbox[2] = 38;
421   gMC->Gsvolu("CSP4", "BOX", idtmed[1116], pbox, 3);
422   gMC->Gspos("CSP4", 1, "CRT", 0, 2950 - 700 + 155+pbox[1], -1150 - 210 - pbox[2], 0, "MANY");
423
424   // Shielding plug
425   pbox[0] = 850;
426   pbox[1] = 90;
427   pbox[2] = 720;
428   gMC->Gsvolu("CSP5", "BOX", idtmed[1116], pbox, 3);
429   gMC->Gspos("CSP5", 1, "CRT", 0, 2950 - 700, -3450 + 460 + pbox[2], 0,"MANY");
430
431   //
432   pbox[0] = 80;
433   pbox[1] = 150;
434   pbox[2] = 720;
435   gMC->Gsvolu("CSP6", "BOX", idtmed[1116], pbox, 3);
436   gMC->Gspos("CSP6", 1, "CRT", 1150 - 600 , 2950 - 700, -3450 + 460 + pbox[2], 0, "MANY");
437   gMC->Gspos("CSP6", 2, "CRT", -1150 + 600, 2950 - 700, -3450 + 460 + pbox[2], 0, "MANY");
438
439   //
440   pbox[0] = 130;
441   pbox[1] = 60;
442   pbox[2] = 750;
443   gMC->Gsvolu("CSP7", "BOX", idtmed[1116], pbox, 3);
444   gMC->Gspos("CSP7", 1, "CRT", 850 + pbox[0], 2950 - 700 + 100, -3450 + 460 + pbox[2], 0, "MANY");
445   gMC->Gspos("CSP7", 2, "CRT", -850 - pbox[0], 2950 - 700+ 100, -3450 + 460 + pbox[2], 0, "MANY");
446
447   // PM25 Acces Shaft
448   ptube[0] = 910/2;
449   ptube[1] = ptube[0] + 100;
450   ptube[2] = (5150 - 1166)/2;
451   gMC->Gsvolu("CSF3", "TUBE", idtmed[1116], ptube, 3);
452   gMC->Gspos("CSF3", 1, "CRT", -2100, AliCRTConstants::Instance()->Depth()-ptube[2], 0, idrotm[2001], "MANY");
453
454   // PGC2 Access Shaft
455   ptube[0] = 1100/2;
456   ptube[1] = ptube[0] + 100;
457   ptube[2] = (5150 - 690)/2;
458   gMC->Gsvolu("CSF4", "TUBE", idtmed[1116], ptube, 3);
459   gMC->Gspos("CSF4", 1, "CRT", 375, AliCRTConstants::Instance()->Depth()-ptube[2], 1900 + 2987.7, idrotm[2001], "MANY");
460
461 }
462
463 //_____________________________________________________________________________
464 void AliCRTv1::DrawDetector() const
465 {
466   //
467   // Draw a shaded view of the L3 magnet
468   //
469   //cout << "AliCRTv1::DrawModule() : Drawing the module" << endl;
470   
471   
472   Int_t able = 1;
473   Int_t enable = 0;
474   gMC->Gsatt("*", "seen", -1);
475   gMC->Gsatt("alic", "seen", 0);
476   
477   gMC->Gsatt("ALIC","seen",enable);
478   gMC->Gsatt("CRT", "seen",enable);
479   gMC->Gsatt("L3MO","seen",  able); // L3 Magnet
480   //gMC->Gsatt("CRT1","seen",  able); // Scintillators
481   gMC->Gsatt("CRT4","seen",  able); // Scintillators barrel
482   
483   // Draw the molasse volumes
484   gMC->Gsatt("CMO1","seen",enable); // Exactly above the HALL
485   gMC->Gsatt("CMO2","seen",enable); // Molasse, along the PM25
486   gMC->Gsatt("CMO3","seen",enable); // molasse along the PGC2
487   gMC->Gsatt("CMO4","seen",enable); // Molasse, behind the PX24 upper part
488   gMC->Gsatt("CMO5","seen",enable); // molasse behind px24, lower part
489   gMC->Gsatt("CMO6","seen",enable); // behind the PX24
490   gMC->Gsatt("CMO7","seen",enable); // behind the PGC2
491   gMC->Gsatt("CMO8","seen",enable); // on the right side.
492   gMC->Gsatt("CMO9","seen",enable); // on the left side.
493   gMC->Gsatt("CM10","seen",enable); // betwen PX24 & PM25.
494   gMC->Gsatt("CM11","seen",enable); // betwen PGC2 & PM25.
495   gMC->Gsatt("CM12","seen",enable); // box above the hall.
496   
497   gMC->Gdopt("hide", "on");
498   gMC->Gdopt("edge","off");
499   gMC->Gdopt("shad", "on");
500   gMC->Gsatt("*", "fill", 7);
501   gMC->SetClipBox("ALIC", 0, 3000, -3000, 3000, -6000, 6000);
502   gMC->DefaultRange();
503   gMC->Gdraw("alic", 40, 30, 0, 10, 9.5, .009, .009);
504   gMC->Gdhead(1111, "View of CRT(ACORDE)");
505   gMC->Gdman(18, 4, "MAN");
506   
507   
508 }
509
510 //_____________________________________________________________________________
511 void AliCRTv1::Init()
512 {
513   //
514   // Initialise L3 magnet after it has been built
515   Int_t i;
516   //
517   if(fDebug) {
518     printf("\n%s: ",ClassName());
519     for(i=0;i<35;i++) printf("*");
520     printf(" CRTv1_INIT ");
521     for(i=0;i<35;i++) printf("*");
522     printf("\n%s: ",ClassName());
523     //
524     // Here the CRTv1 initialisation code (if any!)
525     for(i=0;i<80;i++) printf("*");
526     printf("\n");
527   }
528
529 }
530
531 //____________________________________________________________________________
532 void AliCRTv1::StepManager()
533 {
534   //
535   // Called for every step in the Cosmic Ray Trigger
536   //
537   static Int_t   vol[1];
538   Int_t          ipart;
539   TLorentzVector pos;
540   TLorentzVector mom;
541
542   static Float_t hits[14];
543   static Float_t eloss;
544
545   if ( gMC->TrackPid() != kMuonMinus ) return;
546
547   // Only charged tracks
548   if ( !(gMC->TrackCharge()) ) return;
549
550   if (gMC->IsNewTrack()) {
551     // Reset the deposited energy
552     eloss = 0;
553   }
554
555   // Add th energy loss in each step.
556   eloss += gMC->Edep();
557
558   if ( ( (strcmp(gMC->CurrentVolName(),"CRT4") == 0) || // Magnet
559          (strcmp(gMC->CurrentVolName(),"CRT5") == 0) || // CRT
560          (strcmp(gMC->CurrentVolName(),"CRT6") == 0) || // Magnet Doors
561          (strcmp(gMC->CurrentVolName(),"CSF2") == 0) || // PX24
562          (strcmp(gMC->CurrentVolName(),"CSF3") == 0) || // PM25
563          (strcmp(gMC->CurrentVolName(),"CSF4") == 0) )  // PGC2
564        && gMC->IsTrackEntering() ) {
565
566     // Get current particle id(ipart),track position (pos) and momentum (mom)
567     gMC->TrackPosition(pos);
568     gMC->TrackMomentum(mom);
569     ipart = gMC->TrackPid();
570
571     ipart = gMC->TrackPid();
572     hits[0]  = (Float_t)ipart; //                 (fId)
573     
574     hits[1] = pos[0]; // X coordinate (fX)
575     hits[2] = pos[1]; // Y coordinate (fY)
576     hits[3] = pos[2]; // Z coordinate (fZ)
577     hits[4] = mom[0]; // Px           (fpxug)
578     hits[5] = mom[1]; // Py           (fpyug)
579     hits[6] = mom[2]; // Pz           (fpzug)
580     hits[7] = eloss;              // Energy loss
581
582     // Tag the volumes
583     if      ( (strcmp(gMC->CurrentVolName(),"CRT4")==0) ) vol[0] = 1; // Magnet
584     else if ( (strcmp(gMC->CurrentVolName(),"CRT5")==0) ) vol[0] = 2; // CRT
585     else if ( (strcmp(gMC->CurrentVolName(),"CRT6")==0) ) vol[0] = 3; // Doors
586     else if ( (strcmp(gMC->CurrentVolName(),"CSF2")==0) ) vol[0] = 4; // PX24
587     else if ( (strcmp(gMC->CurrentVolName(),"CSF3")==0) ) vol[0] = 5; // PM25
588     else if ( (strcmp(gMC->CurrentVolName(),"CSF4")==0) ) vol[0] = 6; // PGC2
589     else                                                  vol[0] = -1;// ?
590     //vol[0]  = gMC->GetMedium();  //layer(flay)
591
592     AddHit(gAlice->GetMCApp()->GetCurrentTrackNumber(),vol, hits);
593
594     // Reset the deposited energy only when you reach the Magnet
595     if ( (strcmp(gMC->CurrentVolName(),"CRT4")==0) ) eloss = 0;
596
597   } else {
598     return;
599   }
600
601 }
602
603 //_____________________________________________________________________________
604 void AliCRTv1::AddHit(Int_t track, Int_t *vol, Float_t *hits)
605 {
606   //
607   // Add a CRT hit
608   //
609   TClonesArray &lhits = *fHits;
610   new(lhits[fNhits++]) AliCRThit(fIshunt,track,vol,hits);
611 }
612
613 //_____________________________________________________________________________
614 void AliCRTv1::ResetHits()
615 {
616   // Reset number of clusters and the cluster array for this detector
617   AliDetector::ResetHits();
618 }
619
620 //_____________________________________________________________________________
621 void AliCRTv1::ResetDigits()
622 {
623   //
624   // Reset number of digits and the digits array for this detector
625   AliDetector::ResetDigits();
626
627
628 //____________________________________________________________________________
629 void AliCRTv1::FinishEvent()
630 {
631   //
632   //
633 }