Some rationalisation of the documentation. In particular pictures are all now in...
[u/mrichter/AliRoot.git] / TOF / AliTOFv0.cxx
1 ///////////////////////////////////////////////////////////////////////////////
2 //                                                                           //
3 //  Time Of Flight                                                           //
4 //  This class contains the functions for version 0 of the Time Of Flight    //
5 //  detector.                                                                //
6 //                                                                           //
7 //Begin_Html
8 /*
9 <img src="picts/AliTOFv0Class.gif">
10 */
11 //End_Html
12 //                                                                           //
13 ///////////////////////////////////////////////////////////////////////////////
14
15 #include "AliTOFv0.h"
16 #include "AliRun.h"
17 #include "AliConst.h"
18   
19 ClassImp(AliTOFv0)
20  
21 //_____________________________________________________________________________
22 AliTOFv0::AliTOFv0()
23 {
24   //
25   // Default constructor
26   //
27 }
28  
29 //_____________________________________________________________________________
30 AliTOFv0::AliTOFv0(const char *name, const char *title)
31        : AliTOF(name,title)
32 {
33   //
34   // Standard constructor for version 0 of the Time Of Flight
35   //
36 }
37  
38 //_____________________________________________________________________________
39 void AliTOFv0::CreateGeometry()
40 {
41   //
42   // Definition of Geometry
43   // Authors :   Maxim Martemianov, Boris Zagreev (ITEP)   18/09/98 
44   //Begin_Html
45   /*
46     <img src="picts/AliTOFv0.gif">
47   */
48   //End_Html
49   //
50
51   AliMC* pMC = AliMC::GetMC();
52   
53   Float_t fil_rich;
54   Int_t lmax;
55   Float_t phos_phi, zcor2, zcor3, ztof0, ztof1, ztof2;
56   Float_t zl, phos_r;
57   Int_t idrotm[101];
58   Float_t phos_x;
59   Float_t rp1, rp2;
60   Float_t par[10], fil_min, fil_max, ysz, fil0;
61   //
62   Int_t *idtmed = gAlice->Idtmed();
63   //
64   // barrel size along Z axis 
65   //  rp1 = 360.;
66   // rp2 = 372.;
67   rp1 = 370;
68   rp2 = rp1 + 12;
69   zl  = 720.;
70   //
71   // TOF width along radius of barrel 
72   //xtof  = rp2 - rp1;
73   ztof0 = 350.;
74   ztof1 = 200.;
75   ztof2 = 150.;
76   //
77   // Plate width 
78   ysz = .6;
79   // PHOS and RICH angles 
80   phos_x = 214.6;
81   phos_r = 467.;
82   //phos_z = 260.;
83   //rich_z = 472.5;
84   fil_rich = 30.;
85   lmax = 19;
86   zcor2 = ztof0 - ztof1 / 2.;
87   zcor3 = ztof0 - ztof2 / 2.;
88   phos_phi = TMath::ATan(phos_x / (phos_r * 2.));
89   fil_min = (kPI - phos_phi * 4.) * kRaddeg - 180. / lmax;
90   fil_max = (phos_phi * 4. + kPI) * kRaddeg + 180. / lmax;
91   // barrel radius in ALIC 
92   par[0] = rp1;
93   par[1] = rp2;
94   par[2] = zl / 2.;
95   pMC->Gsvolu("FBAR", "TUBE", idtmed[500], par, 3);
96   pMC->Gspos("FBAR", 1, "ALIC", 0., 0., 0., 0, "ONLY");
97   pMC->Gsatt("FBAR", "SEEN", 0);
98   // First Block
99   par[0] = (rp1+rp2-ysz)/2.;
100   par[1] = (rp1+rp2+ysz)/2.;
101   par[2] = ztof0;
102   par[3] = 90. - fil_min;
103   par[4] = 90. - fil_rich;
104   fil0 = 180. - (par[3] + par[4]);
105   pMC->Gsvolu("FBT1", "TUBS", idtmed[507], par, 5);
106   AliMatrix(idrotm[1], 90., fil0, 90., fil0 + 90., 0., 0.);
107   pMC->Gspos("FBT1", 0, "FBAR", 0., 0., 0., 0, "ONLY");
108   pMC->Gspos("FBT1", 1, "FBAR", 0., 0., 0., idrotm[1], "ONLY");
109   // --- Second block 
110   par[2] = ztof1 / 2.;
111   par[3] = 90. - fil_max;
112   par[4] = 90. - fil_min;
113   pMC->Gsvolu("FBT2", "TUBS", idtmed[507], par, 5);
114   pMC->Gspos("FBT2", 0, "FBAR", 0., 0., zcor2, 0, "ONLY");
115   pMC->Gspos("FBT2", 1, "FBAR", 0., 0.,-zcor2, 0, "ONLY");
116   // --- Third block 
117   par[2] = ztof2 / 2.;
118   par[3] = 90. - fil_rich;
119   par[4] = fil_rich + 90.;
120   pMC->Gsvolu("FBT3", "TUBS", idtmed[507], par, 5);
121   pMC->Gspos("FBT3", 0, "FBAR", 0., 0., zcor3, 0, "ONLY");
122   pMC->Gspos("FBT3", 1, "FBAR", 0., 0., -zcor3, 0, "ONLY");
123 }
124  
125 //_____________________________________________________________________________
126 void AliTOFv0::DrawModule()
127 {
128   //
129   // Draw a shaded view of the common part of the TOF geometry
130   // for versions 2 and 3
131   //
132
133   AliMC* pMC = AliMC::GetMC();
134   
135   // Set everything unseen
136   pMC->Gsatt("*", "seen", -1);
137   // 
138   // Set ALIC mother transparent
139   pMC->Gsatt("ALIC","SEEN",0);
140   //
141   // Set the volumes visible
142   pMC->Gsatt("FBAR","SEEN",0);
143   pMC->Gsatt("FBT1","SEEN",1);
144   pMC->Gsatt("FBT2","SEEN",1);
145   pMC->Gsatt("FBT3","SEEN",1);
146   //
147   pMC->Gdopt("hide", "on");
148   pMC->Gdopt("shad", "on");
149   pMC->Gsatt("*", "fill", 7);
150   //
151   pMC->SetClipBox(".");
152   pMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
153   pMC->DefaultRange();
154   pMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .02, .02);
155   pMC->Gdhead(1111, "Time Of Flight");
156   pMC->Gdman(18, 4, "MAN");
157   pMC->Gdopt("hide","off");
158 }
159
160 //_____________________________________________________________________________
161 void AliTOFv0::CreateMaterials()
162 {
163   //
164   // Define materials for the Time Of Flight
165   //
166   AliTOF::CreateMaterials();
167 }
168  
169 //_____________________________________________________________________________
170 void AliTOFv0::Init()
171 {
172   //
173   // Initialise detector after that it has been built
174   //
175
176   AliMC* pMC = AliMC::GetMC();
177   
178   AliTOF::Init();
179   fIdFBT2=pMC->VolId("FBT2");
180   fIdFBT3=pMC->VolId("FBT3");
181 }
182  
183 //_____________________________________________________________________________
184 void AliTOFv0::StepManager()
185 {
186   //
187   // Procedure called at each step in the Time Of Flight
188   Float_t hits[8];
189   Int_t vol[3];
190   Int_t copy, id;
191   //
192   // Get the pointer to the MonteCarlo
193   AliMC *pMC= AliMC::GetMC();
194   Int_t *idtmed = gAlice->Idtmed();
195   if(pMC->GetMedium()==idtmed[510-1] && 
196      pMC->TrackEntering() && pMC->TrackCharge()
197      && (id=pMC->CurrentVol(0,copy))==fIdSens) {
198     TClonesArray &lhits = *fHits;
199     //
200     // Record only charged tracks at entrance
201     vol[2]=copy;
202     vol[1]=pMC->CurrentVolOff(1,0,copy);
203     if(id==fIdFBT2) copy+=2; else 
204       if(id==fIdFBT2) copy+=4;
205     vol[0]=1;
206     pMC->TrackPosition(hits);
207     pMC->TrackMomentum(&hits[3]);
208     hits[7]=pMC->TrackTime();
209     new(lhits[fNhits++]) AliTOFhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
210   }
211 }
212
213