]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOFv1.cxx
New version of space frame
[u/mrichter/AliRoot.git] / TOF / AliTOFv1.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Time Of Flight //
4// This class contains the functions for version 1 of the Time Of Flight //
5// detector. //
6// //
7//Begin_Html
8/*
1439f98e 9<img src="picts/AliTOFv1Class.gif">
fe4da5cc 10*/
11//End_Html
12// //
13///////////////////////////////////////////////////////////////////////////////
14
15#include "AliTOFv1.h"
16#include "AliRun.h"
fe4da5cc 17#include "AliConst.h"
18
19ClassImp(AliTOFv1)
20
21//_____________________________________________________________________________
151e057e 22AliTOFv1::AliTOFv1()
fe4da5cc 23{
24 //
25 // Default constructor
26 //
27}
28
29//_____________________________________________________________________________
30AliTOFv1::AliTOFv1(const char *name, const char *title)
31 : AliTOF(name,title)
32{
33 //
34 // Standard constructor for version 1 of Time Of Flight
35 //
36}
37
38//_____________________________________________________________________________
39void AliTOFv1::CreateGeometry()
40{
41 //
42 // Create geometry for version 1 of Time Of Flight
43 // Authors : Maxim Martemianov, Boris Zagreev (ITEP) 18/09/98
44 //Begin_Html
45 /*
1439f98e 46 <img src="picts/AliTOFv1.gif">
fe4da5cc 47 */
48 //End_Html
49 //
50
fe4da5cc 51 Float_t fil_rich;
52 Int_t lmax;
53 Float_t phos_phi, zcor2, zcor3, ztof0, ztof1, ztof2;
54 Float_t zl, phos_r, zazor;
55 Int_t idrotm[101];
56 Float_t phos_x;
57 Float_t rp1, rp2;
58 Float_t par[10], fil_min, fil_max, ysz, fil0;
59 //
ad51aeb0 60 Int_t *idtmed = fIdtmed->GetArray()-499;
fe4da5cc 61 //
62 // barrel size along Z axis
151e057e 63 //
64 // Temporary fix TOF people should really check this!!
65 // rp1 = 360.;
66 // rp2 = 372.;
67 rp1 = 370;
68 rp2 = rp1 + 12;
fe4da5cc 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 = .3;
79 //
80 // DME barrel width
81 zazor = 0.03;
82 //
83 // PHOS and RICH angles
84 phos_x = 214.6;
85 phos_r = 467.;
86 //phos_z = 260.;
87 //rich_z = 472.5;
88 fil_rich = 30.;
89 lmax = 19;
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;
95 //
96 // barrel radius in ALIC
97 par[0] = rp1;
98 par[1] = rp2;
99 par[2] = zl / 2.;
cfce8870 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);
fe4da5cc 103 //
104 // --- First Block
105 par[0] = (rp1+rp2-zazor)/2.;
106 par[1] = (rp1+rp2+zazor)/2.;
107 par[2] = ztof0;
108 par[3] = 90. - fil_min;
109 par[4] = 90. - fil_rich;
110 fil0 = 180. - (par[3] + par[4]);
111 //
112 // --- Sensitive volume
cfce8870 113 gMC->Gsvolu("FBT1", "TUBS", idtmed[509], par, 5);
fe4da5cc 114 AliMatrix(idrotm[1], 90., fil0, 90., fil0 + 90., 0., 0.);
cfce8870 115 gMC->Gspos("FBT1", 0, "FBAR", 0., 0., 0., 0, "ONLY");
116 gMC->Gspos("FBT1", 1, "FBAR", 0., 0., 0., idrotm[1], "ONLY");
fe4da5cc 117 //
118 // ALUMINA
119 par[0] = (rp1+rp2+zazor)/2.;
120 par[1] = (rp1+rp2+zazor)/2.+ysz;
cfce8870 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);
fe4da5cc 124 //
125 par[0] = (rp1+rp2-zazor)/2.-ysz;
126 par[1] = (rp1+rp2-zazor)/2.;
cfce8870 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);
fe4da5cc 129 // --- Second block
130 par[0] = (rp1+rp2-zazor)/2.;
131 par[1] = (rp1+rp2+zazor)/2.;
132 par[2] = ztof1 / 2.;
133 par[3] = 90. - fil_max;
134 par[4] = 90. - fil_min;
cfce8870 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");
fe4da5cc 138 //
139 par[0]=(rp1+rp2+zazor)/2.;
140 par[1]=(rp1+rp2+zazor)/2.+ysz;
cfce8870 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);
fe4da5cc 144 //
145 par[0]=(rp1+rp2-zazor)/2.-ysz;
146 par[1]=(rp1+rp2-zazor)/2.;
cfce8870 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);
fe4da5cc 149 //
150 // --- Third block
151 par[0] = (rp1+rp2-zazor)/2.;
152 par[1] = (rp1+rp2-zazor)/2.;
153 par[2] = ztof2 / 2.;
154 par[3] = 90. - fil_rich;
155 par[4] = fil_rich + 90.;
cfce8870 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");
fe4da5cc 159 //
160 par[0]=(rp1+rp2+zazor)/2.;
161 par[1]=(rp1+rp2+zazor)/2.+ysz;
cfce8870 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);
fe4da5cc 165 //
166 par[0]=(rp1+rp2-zazor)/2.-ysz;
167 par[1]=(rp1+rp2-zazor)/2.;
cfce8870 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);
fe4da5cc 170 //
171}
172
173//_____________________________________________________________________________
8f72dc0c 174void AliTOFv1::DrawModule()
fe4da5cc 175{
176 //
177 // Draw a shaded view of the Time Of Flight version 1
178 //
179
fe4da5cc 180 // Set everything unseen
cfce8870 181 gMC->Gsatt("*", "seen", -1);
fe4da5cc 182 //
183 // Set ALIC mother transparent
cfce8870 184 gMC->Gsatt("ALIC","SEEN",0);
fe4da5cc 185 //
186 // Set the volumes visible
cfce8870 187 gMC->Gsatt("FBAR","SEEN",0);
188 gMC->Gsatt("FPE1","SEEN",1);
189 gMC->Gsatt("FPE2","SEEN",1);
190 gMC->Gsatt("FPE3","SEEN",1);
191 //
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);
197 gMC->DefaultRange();
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");
fe4da5cc 202}
203
204//___________________________________________
205void AliTOFv1::CreateMaterials()
206{
207 //
208 // Define materials for Time Of Flight
209 //
210 AliTOF::CreateMaterials();
211}
212
213//______________________________________________________________________________
214void AliTOFv1::Init()
215{
216 //
217 // Initialise Time Of Flight after it has been built
218
fe4da5cc 219 AliTOF::Init();
cfce8870 220 fIdFBT2=gMC->VolId("FBT2");
221 fIdFBT3=gMC->VolId("FBT3");
fe4da5cc 222}
223
224//______________________________________________________________________________
225void AliTOFv1::StepManager()
226{
0a6d8768 227 TLorentzVector mom, pos;
fe4da5cc 228 Float_t hits[8];
229 Int_t vol[3];
0a6d8768 230 Int_t copy, id, i;
ad51aeb0 231 Int_t *idtmed = fIdtmed->GetArray()-499;
cfce8870 232 if(gMC->GetMedium()==idtmed[510-1] &&
0a6d8768 233 gMC->IsTrackEntering() && gMC->TrackCharge()
234 && (id=gMC->CurrentVolID(copy))==fIdSens) {
fe4da5cc 235 TClonesArray &lhits = *fHits;
236//
237// Record only charged tracks at entrance
238 vol[2]=copy;
0a6d8768 239 vol[1]=gMC->CurrentVolOffID(1,copy);
fe4da5cc 240 if(id==fIdFBT2) copy+=2; else
241 if(id==fIdFBT2) copy+=4;
242 vol[0]=1;
0a6d8768 243 gMC->TrackPosition(pos);
244 gMC->TrackMomentum(mom);
245 //
246 Double_t ptot=mom.Rho();
247 Double_t norm=1/ptot;
248 for(i=0;i<3;++i) {
249 hits[i]=pos[i];
250 hits[i+3]=mom[i]*norm;
251 }
252 hits[6]=ptot;
253 hits[7]=pos[3];
fe4da5cc 254 new(lhits[fNhits++]) AliTOFhit(fIshunt,gAlice->CurrentTrack(),vol,hits);
255 }
256}
257