]> git.uio.no Git - u/mrichter/AliRoot.git/blame - TOF/AliTOF.cxx
New version of space frame
[u/mrichter/AliRoot.git] / TOF / AliTOF.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Time Of Flight //
4// This class contains the basic functions for the Time Of Flight //
5// detector. Functions specific to one particular geometry are //
6// contained in the derived classes //
7// //
8//Begin_Html
9/*
1439f98e 10<img src="picts/AliTOFClass.gif">
fe4da5cc 11*/
12//End_Html
13// //
14// //
15///////////////////////////////////////////////////////////////////////////////
16
17#include "AliTOF.h"
18#include <TNode.h>
19#include <TTUBE.h>
20#include <TBRIK.h>
21#include "AliRun.h"
fe4da5cc 22#include "AliConst.h"
23
24ClassImp(AliTOF)
25
26//_____________________________________________________________________________
27AliTOF::AliTOF()
28{
29 //
30 // Default constructor
31 //
32 fIshunt = 0;
33}
34
35//_____________________________________________________________________________
36AliTOF::AliTOF(const char *name, const char *title)
37 : AliDetector(name,title)
38{
39 //
40 // AliTOF standard constructor
41 //
42 fHits = new TClonesArray("AliTOFhit", 405);
43 //
44 fIshunt = 0;
45 //
46 SetMarkerColor(7);
47 SetMarkerStyle(2);
48 SetMarkerSize(0.4);
49}
50
51//_____________________________________________________________________________
52void AliTOF::AddHit(Int_t track, Int_t *vol, Float_t *hits)
53{
54 //
55 // Add a TOF hit
56 //
57 TClonesArray &lhits = *fHits;
58 new(lhits[fNhits++]) AliTOFhit(fIshunt,track,vol,hits);
59}
60
61//_____________________________________________________________________________
62void AliTOF::BuildGeometry()
63{
64 //
65 // Build TOF ROOT geometry for the ALICE event viewver
66 //
67 TNode *Node, *Top;
68 const int kColorTOF = 27;
69 //
70 // Find top TNODE
71 Top=gAlice->GetGeometry()->GetNode("alice");
72 //
73 // Define rotation matrixes
74 new TRotMatrix("rot501","rot501",90,-18.94737,90,71.05263,0,0);
75 new TRotMatrix("rot502","rot502",90,-37.89474,90,52.10526,0,0);
76 new TRotMatrix("rot503","rot503",90,-56.84211,90,33.15789,0,0);
77 new TRotMatrix("rot504","rot504",90,-75.78947,90,14.21053,0,0);
78 new TRotMatrix("rot505","rot505",90,-94.73685,90,-4.736847,0,0);
79 new TRotMatrix("rot506","rot506",90,-113.6842,90,-23.68421,0,0);
80 new TRotMatrix("rot507","rot507",90,-132.6316,90,-42.63158,0,0);
81 new TRotMatrix("rot508","rot508",90,-151.5789,90,-61.57895,0,0);
82 new TRotMatrix("rot509","rot509",90,-170.5263,90,-80.52632,0,0);
83 new TRotMatrix("rot510","rot510",90,-189.4737,90,-99.47369,0,0);
84 new TRotMatrix("rot511","rot511",90,-208.4211,90,-118.4211,0,0);
85 new TRotMatrix("rot512","rot512",90,-227.3684,90,-137.3684,0,0);
86 new TRotMatrix("rot513","rot513",90,-246.3158,90,-156.3158,0,0);
87 new TRotMatrix("rot514","rot514",90,-265.2632,90,-175.2632,0,0);
88 new TRotMatrix("rot515","rot515",90,-284.2105,90,-194.2105,0,0);
89 new TRotMatrix("rot516","rot516",90,-303.1579,90,-213.1579,0,0);
90 new TRotMatrix("rot517","rot517",90,-322.1053,90,-232.1053,0,0);
91 new TRotMatrix("rot518","rot518",90,-341.0526,90,-251.0526,0,0);
92 new TRotMatrix("rot519","rot519",90,-360,90,-270,0,0);
93 //
151e057e 94 // Position the different copies
95 // const Float_t rtof=366;
96 // changed by Federico Carminati. TOF people should really look at this
97 const Float_t rtof=381;
98 const Int_t ntof=19;
99 const Float_t angle=2*kPI/ntof;
100 Float_t ang;
101 const Float_t xtof = rtof*TMath::Sin(kPI/ntof);
102 //
fe4da5cc 103 // Define TOF basic volume
151e057e 104 new TBRIK("S_TOF1","TOF box","void",xtof,6.,175.);
fe4da5cc 105 //
fe4da5cc 106 Top->cd();
151e057e 107 ang=2.75*angle;
108 Node = new TNode("FTO11","FTO11","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot502");
fe4da5cc 109 Node->SetLineColor(kColorTOF);
110 fNodes->Add(Node);
111 //
112 Top->cd();
151e057e 113 Node = new TNode("FTO111","FTO111","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot502");
fe4da5cc 114 Node->SetLineColor(kColorTOF);
115 fNodes->Add(Node);
116 //
fe4da5cc 117 //
118 Top->cd();
151e057e 119 ang=1.75*angle;
120 Node = new TNode("FTO12","FTO12","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot503");
fe4da5cc 121 Node->SetLineColor(kColorTOF);
122 fNodes->Add(Node);
123 //
124 Top->cd();
151e057e 125 Node = new TNode("FTO112","FTO112","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot503");
fe4da5cc 126 Node->SetLineColor(kColorTOF);
127 fNodes->Add(Node);
128 //
151e057e 129 //
fe4da5cc 130 Top->cd();
151e057e 131 ang=0.75*angle;
132 Node = new TNode("FTO13","FTO13","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot504");
fe4da5cc 133 Node->SetLineColor(kColorTOF);
151e057e 134 fNodes->Add(Node);
fe4da5cc 135 //
136 Top->cd();
151e057e 137 Node = new TNode("FTO113","FTO113","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot504");
fe4da5cc 138 Node->SetLineColor(kColorTOF);
139 fNodes->Add(Node);
140 //
151e057e 141 //
fe4da5cc 142 Top->cd();
151e057e 143 ang=-0.25*angle;
144 Node = new TNode("FTO14","FTO14","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot505");
fe4da5cc 145 Node->SetLineColor(kColorTOF);
146 fNodes->Add(Node);
147 //
148 Top->cd();
151e057e 149 Node = new TNode("FTO114","FTO114","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot505");
fe4da5cc 150 Node->SetLineColor(kColorTOF);
151 fNodes->Add(Node);
152 //
151e057e 153 //
fe4da5cc 154 Top->cd();
151e057e 155 ang=-1.25*angle;
156 Node = new TNode("FTO15","FTO15","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot506");
fe4da5cc 157 Node->SetLineColor(kColorTOF);
158 fNodes->Add(Node);
159 //
160 Top->cd();
151e057e 161 Node = new TNode("FTO115","FTO115","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot506");
162 Node->SetLineColor(kColorTOF);
163 fNodes->Add(Node);
164 //
165 //
166 Top->cd();
167 ang=kPI+1.25*angle;
168 Node = new TNode("FTO16","FTO16","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot513");
fe4da5cc 169 Node->SetLineColor(kColorTOF);
170 fNodes->Add(Node);
171 //
172 Top->cd();
151e057e 173 Node = new TNode("FTO116","FTO116","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot513");
fe4da5cc 174 Node->SetLineColor(kColorTOF);
175 fNodes->Add(Node);
176 //
151e057e 177 //
fe4da5cc 178 Top->cd();
151e057e 179 ang=kPI+0.25*angle;
180 Node = new TNode("FTO17","FTO17","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot514");
fe4da5cc 181 Node->SetLineColor(kColorTOF);
182 fNodes->Add(Node);
183 //
184 Top->cd();
151e057e 185 Node = new TNode("FTO117","FTO117","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot514");
fe4da5cc 186 Node->SetLineColor(kColorTOF);
187 fNodes->Add(Node);
188 //
151e057e 189 //
fe4da5cc 190 Top->cd();
151e057e 191 ang=kPI-0.75*angle;
192 Node = new TNode("FTO18","FTO18","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot515");
fe4da5cc 193 Node->SetLineColor(kColorTOF);
194 fNodes->Add(Node);
195 //
196 Top->cd();
151e057e 197 Node = new TNode("FTO118","FTO118","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot515");
fe4da5cc 198 Node->SetLineColor(kColorTOF);
199 fNodes->Add(Node);
200 //
151e057e 201 //
fe4da5cc 202 Top->cd();
151e057e 203 ang=kPI-1.75*angle;
204 Node = new TNode("FTO19","FTO19","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot516");
fe4da5cc 205 Node->SetLineColor(kColorTOF);
206 fNodes->Add(Node);
207 //
208 Top->cd();
151e057e 209 Node = new TNode("FTO119","FTO119","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot516");
fe4da5cc 210 Node->SetLineColor(kColorTOF);
211 fNodes->Add(Node);
212 //
151e057e 213 //
fe4da5cc 214 Top->cd();
151e057e 215 ang=kPI-2.75*angle;
216 Node = new TNode("FTO110","FTO110","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),175,"rot517");
fe4da5cc 217 Node->SetLineColor(kColorTOF);
218 fNodes->Add(Node);
219 //
220 Top->cd();
151e057e 221 Node = new TNode("FTO120","FTO120","S_TOF1",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-175,"rot517");
fe4da5cc 222 Node->SetLineColor(kColorTOF);
223 fNodes->Add(Node);
224 //
225 // Define second TOF volume
151e057e 226 new TBRIK("S_TOF2","TOF box","void",xtof,6.,100.);
fe4da5cc 227 //
228 // Position the volume
229 Top->cd();
151e057e 230 ang=-2.25*angle;
231 Node = new TNode("FTO21","FTO21","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot507");
fe4da5cc 232 Node->SetLineColor(kColorTOF);
233 fNodes->Add(Node);
234 //
235 Top->cd();
151e057e 236 Node = new TNode("FTO27","FTO27","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot507");
fe4da5cc 237 Node->SetLineColor(kColorTOF);
238 fNodes->Add(Node);
239 //
151e057e 240 //
fe4da5cc 241 Top->cd();
151e057e 242 ang=-3.25*angle;
243 Node = new TNode("FTO22","FTO22","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot508");
fe4da5cc 244 Node->SetLineColor(kColorTOF);
245 fNodes->Add(Node);
246 //
247 Top->cd();
151e057e 248 Node = new TNode("FTO28","FTO28","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot508");
fe4da5cc 249 Node->SetLineColor(kColorTOF);
250 fNodes->Add(Node);
251 //
151e057e 252 //
fe4da5cc 253 Top->cd();
151e057e 254 ang=-4.25*angle;
255 Node = new TNode("FTO23","FTO23","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot509");
fe4da5cc 256 Node->SetLineColor(kColorTOF);
257 fNodes->Add(Node);
258 //
259 Top->cd();
151e057e 260 Node = new TNode("FTO29","FTO29","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot509");
fe4da5cc 261 Node->SetLineColor(kColorTOF);
262 fNodes->Add(Node);
263 //
151e057e 264 //
fe4da5cc 265 Top->cd();
151e057e 266 ang=kPI+4.25*angle;
267 Node = new TNode("FTO24","FTO24","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot510");
fe4da5cc 268 Node->SetLineColor(kColorTOF);
269 fNodes->Add(Node);
270 //
271 Top->cd();
151e057e 272 Node = new TNode("FTO210","FTO210","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot510");
fe4da5cc 273 Node->SetLineColor(kColorTOF);
274 fNodes->Add(Node);
275 //
151e057e 276 //
fe4da5cc 277 Top->cd();
151e057e 278 ang=kPI+3.25*angle;
279 Node = new TNode("FTO25","FTO25","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot511");
fe4da5cc 280 Node->SetLineColor(kColorTOF);
281 fNodes->Add(Node);
282 //
283 Top->cd();
151e057e 284 Node = new TNode("FTO211","FTO211","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot511");
fe4da5cc 285 Node->SetLineColor(kColorTOF);
286 fNodes->Add(Node);
287 //
151e057e 288 //
fe4da5cc 289 Top->cd();
151e057e 290 ang=kPI+2.25*angle;
291 Node = new TNode("FTO26","FTO26","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),250,"rot512");
fe4da5cc 292 Node->SetLineColor(kColorTOF);
293 fNodes->Add(Node);
294 //
295 Top->cd();
151e057e 296 Node = new TNode("FTO212","FTO212","S_TOF2",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-250,"rot512");
fe4da5cc 297 Node->SetLineColor(kColorTOF);
298 fNodes->Add(Node);
299 //
300 // Define third TOF volume
151e057e 301 new TBRIK("S_TOF3","TOF box","void",xtof,6.,75.);
fe4da5cc 302 //
303 // Position it
304 Top->cd();
151e057e 305 ang=3.75*angle;
306 Node = new TNode("FTO31","FTO31","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),275,"rot501");
fe4da5cc 307 Node->SetLineColor(kColorTOF);
308 fNodes->Add(Node);
309 //
310 Top->cd();
151e057e 311 Node = new TNode("FTO34","FTO34","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-275.,"rot501");
fe4da5cc 312 Node->SetLineColor(kColorTOF);
313 fNodes->Add(Node);
314 //
151e057e 315 //
fe4da5cc 316 Top->cd();
151e057e 317 ang=kPI-3.75*angle;
318 Node = new TNode("FTO32","FTO32","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),275,"rot518");
fe4da5cc 319 Node->SetLineColor(kColorTOF);
320 fNodes->Add(Node);
321 //
322 Top->cd();
151e057e 323 Node = new TNode("FTO35","FTO35","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-275,"rot518");
fe4da5cc 324 Node->SetLineColor(kColorTOF);
325 fNodes->Add(Node);
326 //
151e057e 327 //
fe4da5cc 328 Top->cd();
151e057e 329 ang=kPI/2;
330 Node = new TNode("FTO33","FTO33","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),275.,"rot519");
fe4da5cc 331 Node->SetLineColor(kColorTOF);
332 fNodes->Add(Node);
333 //
334 Top->cd();
151e057e 335 Node = new TNode("FTO36","FTO36","S_TOF3",rtof*TMath::Cos(ang),rtof*TMath::Sin(ang),-275.,"rot519");
fe4da5cc 336 Node->SetLineColor(kColorTOF);
337 fNodes->Add(Node);
338}
339
340//_____________________________________________________________________________
341void AliTOF::CreateGeometry()
342{
343 //
344 // Common geometry code for version 2 and version 3 of the TOF
345 //
346 //Begin_Html
347 /*
1439f98e 348 <img src="picts/AliTOFv23.gif">
fe4da5cc 349 */
350 //End_Html
351 //
352
fe4da5cc 353 const Double_t kPi=TMath::Pi();
354 const Double_t kDegrad=kPi/180;
355 const Double_t kRaddeg=180/kPi;
356 //
357 Float_t fil_rich;
358 Int_t lmax;
359 Float_t xtof, ytof, fil_step, phos_phi, phos_min, phos_max;
360 Int_t lmax1;
361 Float_t zcor1, zcor2, zcor3;
362 Float_t ztof0, ztof1, ztof2, xcor2, ycor2;
363 Int_t i;
364 Float_t dx, dz, zl, xm, ym, phos_r;
365 Int_t idrotm[101];
366 Float_t phos_x;
367 Float_t rp2, zm0, zm1, zm2;
368 Float_t par[10], fil_min, fil_max;
369 Float_t fil1;
370 //
ad51aeb0 371 Int_t *idtmed = fIdtmed->GetArray()-499;
fe4da5cc 372 //
373 phos_x = 214.6;
374 phos_r = 467.;
375 //phos_z = 260.;
376 //rich_z = 472.5;
377 xtof = 120.;
378 ytof = 12.;
379 ztof0 = 350.;
380 ztof1 = 200.;
381 ztof2 = 150.;
382 //
383 // frame thick along Z axis
384 dz = 0.;
385 //
386 // frame thick along X axis
387 dx = 0.;
388 //
389 // barrel length along Z axis
390 zl = 720.;
391 //
392 // PHOS openings
393 fil_rich = 30.;
394 phos_phi = TMath::ATan(phos_x / (phos_r * 2.));
395 phos_min = (kPi - phos_phi * 4.) * kRaddeg;
396 phos_max = (phos_phi * 4. + kPi) * kRaddeg;
397 //
398 // barrel radius in module contact point
151e057e 399 par[0] = 370;
400 par[1] = 390;
fe4da5cc 401 par[2] = zl / 2.;
cfce8870 402 gMC->Gsvolu("FBAR", "TUBE", idtmed[500], par, 3);
fe4da5cc 403 //
404 // --- Set module unseen ---
cfce8870 405 gMC->Gspos("FBAR", 1, "ALIC", 0., 0., 0., 0, "ONLY");
406 gMC->Gsatt("FBAR", "SEEN", 0);
fe4da5cc 407 //
408 // Number of TOF-block
409 lmax = 19;
410 //
411 // New size YTOF
412 par[0] = xtof / 2.;
413 par[1] = ytof / 2.;
414 par[2] = ztof0 / 2.;
cfce8870 415 gMC->Gsvolu("FTO1", "BOX ", idtmed[506], par, 3);
416 gMC->Gsatt("FTO1", "SEEN", -2);
fe4da5cc 417 par[2] = ztof1 / 2.;
cfce8870 418 gMC->Gsvolu("FTO2", "BOX ", idtmed[506], par, 3);
419 gMC->Gsatt("FTO2", "SEEN", -2);
fe4da5cc 420 par[2] = ztof2 / 2.;
cfce8870 421 gMC->Gsvolu("FTO3", "BOX ", idtmed[506], par, 3);
422 gMC->Gsatt("FTO3", "SEEN", -2);
fe4da5cc 423 //
424 // Subtraction of TOF module boundaries
425 xm = xtof - dx * 2.;
426 ym = ytof;
427 zm0 = ztof0 - dz * 2.;
428 zm1 = ztof1 - dz * 2.;
429 zm2 = ztof2 - dz * 2.;
430 //
431 // TOF module internal definitions
432 //
433 TOFpc(xm, ym, zm0, zm1, zm2);
434 //
435 //rp1 = 382.;
151e057e 436 rp2 = 381;
fe4da5cc 437 fil_step = 360. / lmax;
438 fil_min = phos_min - fil_step * .5;
439 fil_max = phos_max + fil_step * .5;
440 zcor1 = 175.;
441 zcor2 = ztof0 - ztof1 / 2.;
442 zcor3 = ztof0 - ztof2 / 2.;
443 for (i = 1; i <= lmax; ++i) {
444 fil1 = fil_step * i;
445 //xcor1 = rp1 * TMath::Sin(fil1 * kDegrad) + dx * TMath::Cos(fil1 * kDegrad);
446 //ycor1 = rp1 * TMath::Cos(fil1 * kDegrad) - dx * TMath::Sin(fil1 * kDegrad);
447 xcor2 = rp2 * TMath::Sin(fil1 * kDegrad);
448 ycor2 = rp2 * TMath::Cos(fil1 * kDegrad);
449 lmax1 = i + lmax;
450 AliMatrix(idrotm[i], 90., -fil1, 90., 90. - fil1, 0., 0.);
451 if (fil1 >= fil_min && fil1 <= fil_max) {
cfce8870 452 gMC->Gspos("FTO2", i, "FBAR", xcor2, ycor2, zcor2, idrotm[i], "ONLY");
453 gMC->Gspos("FTO2", lmax1, "FBAR", xcor2, ycor2, -zcor2, idrotm[i], "ONLY");
fe4da5cc 454 } else if (fil1 <= fil_rich || fil1 >= 360. - fil_rich) {
455 par[2] = ztof2 / 2.;
cfce8870 456 gMC->Gspos("FTO3", i, "FBAR", xcor2, ycor2, zcor3, idrotm[i], "ONLY");
457 gMC->Gspos("FTO3", lmax1, "FBAR", xcor2, ycor2, -zcor3, idrotm[i], "ONLY");
fe4da5cc 458 } else {
459 par[2] = ztof0 / 2.;
cfce8870 460 gMC->Gspos("FTO1", i, "FBAR", xcor2, ycor2, zcor1, idrotm[i], "ONLY");
461 gMC->Gspos("FTO1", lmax1, "FBAR", xcor2, ycor2, -zcor1, idrotm[i], "ONLY");
fe4da5cc 462 }
463 }
464}
465
466//_____________________________________________________________________________
8f72dc0c 467void AliTOF::DrawModule()
fe4da5cc 468{
469 //
470 // Draw a shaded view of the common part of the TOF geometry
471 // for versions 2 and 3
472 //
473
fe4da5cc 474 // Set everything unseen
cfce8870 475 gMC->Gsatt("*", "seen", -1);
fe4da5cc 476 //
477 // Set ALIC mother transparent
cfce8870 478 gMC->Gsatt("ALIC","SEEN",0);
fe4da5cc 479 //
480 // Set the volumes visible
cfce8870 481 gMC->Gsatt("FBAR","SEEN",0);
482 gMC->Gsatt("FTO1","SEEN",1);
483 gMC->Gsatt("FTO2","SEEN",1);
484 gMC->Gsatt("FTO3","SEEN",1);
485 //
486 gMC->Gdopt("hide", "on");
487 gMC->Gdopt("shad", "on");
488 gMC->Gsatt("*", "fill", 7);
489 gMC->SetClipBox(".");
490 gMC->SetClipBox("*", 0, 1000, -1000, 1000, -1000, 1000);
491 gMC->DefaultRange();
492 gMC->Gdraw("alic", 40, 30, 0, 12, 9.5, .02, .02);
493 gMC->Gdhead(1111, "Time Of Flight");
494 gMC->Gdman(18, 4, "MAN");
495 gMC->Gdopt("hide","off");
fe4da5cc 496}
497
498//_____________________________________________________________________________
499void AliTOF::CreateMaterials()
500{
501 //
502 // Defines TOF materials for all versions
503 // Authors : Maxim Martemianov, Boris Zagreev (ITEP) 18/09/98
504 //
505 Int_t ISXFLD = gAlice->Field()->Integ();
506 Float_t SXMGMX = gAlice->Field()->Max();
507 //
508 Float_t ac[2] = { 12.,16. };
509 Float_t zc[2] = { 6.,8. };
510 Float_t wc[2] = { 1.,2. };
511 Float_t ag10[4] = { 12.,1.,16.,28. };
512 Float_t zg10[4] = { 6.,1.,8.,14. };
513 Float_t wmatg10[4] = { .259,.288,.248,.205 };
514 Float_t adme[5] = { 12.,1.,16.,19.,79. };
515 Float_t zdme[5] = { 6.,1.,8.,9.,35. };
516 Float_t wmatdme[5] = { .4056,.0961,.2562,.1014,.1407 };
517 Float_t aal[2] = { 27.,16. };
518 Float_t zal[2] = { 13.,8. };
519 Float_t wmatal[2] = { 2.,3. };
520 //
521 Int_t nlmatdme;
522 Float_t epsil, stmin, dc, densg10, densal, deemax, stemax;
523 Float_t densdme;
524 Int_t nlmatg10, nlmatal;
525 //
526 // --- Vacuum
527 AliMaterial(0, "Vacuum$", 1e-16, 1e-16, 1e-16, 1e16, 1e16);
528 // --- Air
529 AliMaterial(1, "Air$",14.61,7.3,0.001205,30423.24,67500.);
530 // --- CO2
531 dc = .001977;
532 AliMixture(7, "CO2$", ac, zc, dc, -2, wc);
533 // --- G10
534 densg10 = 1.7;
535 nlmatg10 = -4;
536 AliMixture(5, "G10$", ag10, zg10, densg10, nlmatg10, wmatg10);
537 // --- DME
538 densdme = .00205;
539 nlmatdme = 5;
540 AliMixture(6, "DME ", adme, zdme, densdme, nlmatdme, wmatdme);
541 // ---- ALUMINA (AL203)
542 densal = 2.3;
543 nlmatal = -2;
544 AliMixture(8, "ALUMINA$", aal, zal, densal, nlmatal, wmatal);
545 // Previous data
546 // EPSIL = 0.1 ! Tracking precision,
547 // STEMAX = 0.1 ! Maximum displacement for multiple scattering
548 // DEEMAX = 0.1 ! Maximum fractional energy loss, DLS
549 // STMIN = 0.1
550 // New data from
551 epsil = .001;
552 stemax = -1.;
553 deemax = -.3;
554 stmin = -.8;
ad51aeb0 555 AliMedium(0, "Vacuum $", 0, 0, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
556 AliMedium(1, "Air $", 0, 0, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
557 AliMedium(5, "G10$", 5, 0, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
558 AliMedium(6, "DME$", 6, 0, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
559 AliMedium(7, "CO2$", 7, 0, ISXFLD, SXMGMX, 10., -.01, -.1, .01, -.01);
560 AliMedium(8, "ALUMINA$", 8, 0, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
561 AliMedium(10, "DME$", 6, 1, ISXFLD, SXMGMX, 10., stemax, deemax, epsil, stmin);
fe4da5cc 562}
563
564//_____________________________________________________________________________
565Int_t AliTOF::DistancetoPrimitive(Int_t , Int_t )
566{
567 //
568 // Returns distance from mouse pointer to detector, default version
569 //
570 return 9999;
571}
572
573//_____________________________________________________________________________
574void AliTOF::Init()
575{
576 //
577 // Initialise TOF detector after it has been built
578 //
579 Int_t i;
fe4da5cc 580 //
581 printf("\n");
582 for(i=0;i<35;i++) printf("*");
583 printf(" TOF_INIT ");
584 for(i=0;i<35;i++) printf("*");
585 printf("\n");
586 //
587 // Set id of TOF sensitive volume
cfce8870 588 fIdSens=gMC->VolId("FPG2");
fe4da5cc 589 //
590 for(i=0;i<80;i++) printf("*");
591 printf("\n");
592}
593
594
595ClassImp(AliTOFhit)
596
597//___________________________________________
598AliTOFhit::AliTOFhit(Int_t shunt, Int_t track, Int_t *vol, Float_t *hits):
599 AliHit(shunt, track)
600{
601 //
602 // Store a TOF hit
603 //
604 Int_t i;
605 for (i=0;i<3;i++) fVolume[i] = vol[i];
606 //
607 // Position
608 fX=hits[0];
609 fY=hits[1];
610 fZ=hits[2];
611 //
612 // Momentum
613 fPx=hits[3];
614 fPy=hits[4];
615 fPz=hits[5];
616 fPmom=hits[6];
617 //
618 // Time Of Flight
619 fTof=hits[7];
620}
621
622