1 ///////////////////////////////////////////////////////////////////////////////
4 // This class contains the functions for version 1 of the Time Of Flight //
9 <img src="picts/AliTOFv1Class.gif">
13 ///////////////////////////////////////////////////////////////////////////////
21 //_____________________________________________________________________________
25 // Default constructor
29 //_____________________________________________________________________________
30 AliTOFv1::AliTOFv1(const char *name, const char *title)
34 // Standard constructor for version 1 of Time Of Flight
38 //_____________________________________________________________________________
39 void AliTOFv1::CreateGeometry()
42 // Create geometry for version 1 of Time Of Flight
43 // Authors : Maxim Martemianov, Boris Zagreev (ITEP) 18/09/98
46 <img src="picts/AliTOFv1.gif">
53 Float_t phos_phi, zcor2, zcor3, ztof0, ztof1, ztof2;
54 Float_t zl, phos_r, zazor;
58 Float_t par[10], fil_min, fil_max, ysz, fil0;
60 Int_t *idtmed = fIdtmed->GetArray()-499;
62 // barrel size along Z axis
64 // Temporary fix TOF people should really check this!!
71 // TOF width along radius of barrel
83 // PHOS and RICH angles
90 zcor2 = ztof0 - ztof1 / 2.;
91 zcor3 = ztof0 - ztof2 / 2.;
92 phos_phi = TMath::ATan(phos_x / (phos_r * 2.));
93 fil_min = (kPI - phos_phi * 4.) * kRaddeg - 180. / lmax;
94 fil_max = (phos_phi * 4. + kPI) * kRaddeg + 180. / lmax;
96 // barrel radius in ALIC
100 gMC->Gsvolu("FBAR", "TUBE", idtmed[500], par, 3);
101 gMC->Gspos("FBAR", 1, "ALIC", 0., 0., 0., 0, "ONLY");
102 gMC->Gsatt("FBAR", "SEEN", 0);
105 par[0] = (rp1+rp2-zazor)/2.;
106 par[1] = (rp1+rp2+zazor)/2.;
108 par[3] = 90. - fil_min;
109 par[4] = 90. - fil_rich;
110 fil0 = 180. - (par[3] + par[4]);
112 // --- Sensitive volume
113 gMC->Gsvolu("FBT1", "TUBS", idtmed[509], par, 5);
114 AliMatrix(idrotm[1], 90., fil0, 90., fil0 + 90., 0., 0.);
115 gMC->Gspos("FBT1", 0, "FBAR", 0., 0., 0., 0, "ONLY");
116 gMC->Gspos("FBT1", 1, "FBAR", 0., 0., 0., idrotm[1], "ONLY");
119 par[0] = (rp1+rp2+zazor)/2.;
120 par[1] = (rp1+rp2+zazor)/2.+ysz;
121 gMC->Gsvolu("FPE1","TUBS",idtmed[507], par, 0);
122 gMC->Gsposp("FPE1",2,"FBAR", 0., 0., 0., 0, "ONLY", par, 5);
123 gMC->Gsposp("FPE1",3,"FBAR", 0., 0., 0., idrotm[1], "ONLY", par, 5);
125 par[0] = (rp1+rp2-zazor)/2.-ysz;
126 par[1] = (rp1+rp2-zazor)/2.;
127 gMC->Gsposp("FPE1",4,"FBAR", 0., 0., 0., 0, "ONLY", par, 5);
128 gMC->Gsposp("FPE1",5,"FBAR", 0., 0., 0., idrotm[1], "ONLY", par, 5);
130 par[0] = (rp1+rp2-zazor)/2.;
131 par[1] = (rp1+rp2+zazor)/2.;
133 par[3] = 90. - fil_max;
134 par[4] = 90. - fil_min;
135 gMC->Gsvolu("FBT2", "TUBS", idtmed[509], par, 5);
136 gMC->Gspos("FBT2", 0, "FBAR", 0., 0., zcor2, 0, "ONLY");
137 gMC->Gspos("FBT2", 1, "FBAR", 0., 0., -zcor2, 0, "ONLY");
139 par[0]=(rp1+rp2+zazor)/2.;
140 par[1]=(rp1+rp2+zazor)/2.+ysz;
141 gMC->Gsvolu("FPE2","TUBS",idtmed[507], par, 0);
142 gMC->Gsposp("FPE2",2,"FBAR",0.,0.,zcor2,0,"ONLY",par,5);
143 gMC->Gsposp("FPE2",3,"FBAR",0.,0.,-zcor2,0,"ONLY",par,5);
145 par[0]=(rp1+rp2-zazor)/2.-ysz;
146 par[1]=(rp1+rp2-zazor)/2.;
147 gMC->Gsposp("FPE2",4,"FBAR",0.,0.,zcor2,0,"ONLY",par,5);
148 gMC->Gsposp("FPE2",5,"FBAR",0.,0.,-zcor2,0,"ONLY",par,5);
151 par[0] = (rp1+rp2-zazor)/2.;
152 par[1] = (rp1+rp2-zazor)/2.;
154 par[3] = 90. - fil_rich;
155 par[4] = fil_rich + 90.;
156 gMC->Gsvolu("FBT3", "TUBS", idtmed[509], par, 5);
157 gMC->Gspos("FBT3", 0, "FBAR", 0., 0., zcor3, 0, "ONLY");
158 gMC->Gspos("FBT3", 1, "FBAR", 0., 0., -zcor3, 0, "ONLY");
160 par[0]=(rp1+rp2+zazor)/2.;
161 par[1]=(rp1+rp2+zazor)/2.+ysz;
162 gMC->Gsvolu("FPE3","TUBS",idtmed[507], par, 0);
163 gMC->Gsposp("FPE3",2,"FBAR",0.,0.,zcor3,0,"ONLY",par,5);
164 gMC->Gsposp("FPE3",3,"FBAR",0.,0.,-zcor3,0,"ONLY",par,5);
166 par[0]=(rp1+rp2-zazor)/2.-ysz;
167 par[1]=(rp1+rp2-zazor)/2.;
168 gMC->Gsposp("FPE3",4,"FBAR",0.,0.,zcor3,0,"ONLY",par,5);
169 gMC->Gsposp("FPE3",5,"FBAR",0.,0.,-zcor3,0,"ONLY",par,5);
173 //_____________________________________________________________________________
174 void AliTOFv1::DrawModule()
177 // Draw a shaded view of the Time Of Flight version 1
180 // Set everything unseen
181 gMC->Gsatt("*", "seen", -1);
183 // Set ALIC mother transparent
184 gMC->Gsatt("ALIC","SEEN",0);
186 // Set the volumes visible
187 gMC->Gsatt("FBAR","SEEN",0);
188 gMC->Gsatt("FPE1","SEEN",1);
189 gMC->Gsatt("FPE2","SEEN",1);
190 gMC->Gsatt("FPE3","SEEN",1);
192 gMC->Gdopt("hide", "on");
193 gMC->Gdopt("shad", "on");
194 gMC->Gsatt("*", "fill", 7);
195 gMC->SetClipBox(".");
196 gMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
198 gMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .02, .02);
199 gMC->Gdhead(1111, "Time Of Flight");
200 gMC->Gdman(18, 4, "MAN");
201 gMC->Gdopt("hide","off");
204 //___________________________________________
205 void AliTOFv1::CreateMaterials()
208 // Define materials for Time Of Flight
210 AliTOF::CreateMaterials();
213 //______________________________________________________________________________
214 void AliTOFv1::Init()
217 // Initialise Time Of Flight after it has been built
220 fIdFBT2=gMC->VolId("FBT2");
221 fIdFBT3=gMC->VolId("FBT3");
224 //______________________________________________________________________________
225 void AliTOFv1::StepManager()
227 TLorentzVector mom, pos;
231 Int_t *idtmed = fIdtmed->GetArray()-499;
232 if(gMC->GetMedium()==idtmed[510-1] &&
233 gMC->IsTrackEntering() && gMC->TrackCharge()
234 && (id=gMC->CurrentVolID(copy))==fIdSens) {
235 TClonesArray &lhits = *fHits;
237 // Record only charged tracks at entrance
239 vol[1]=gMC->CurrentVolOffID(1,copy);
240 if(id==fIdFBT2) copy+=2; else
241 if(id==fIdFBT2) copy+=4;
243 gMC->TrackPosition(pos);
244 gMC->TrackMomentum(mom);
246 Double_t ptot=mom.Rho();
247 Double_t norm=1/ptot;
250 hits[i+3]=mom[i]*norm;
254 new(lhits[fNhits++]) AliTOFhit(fIshunt,gAlice->CurrentTrack(),vol,hits);