]> git.uio.no Git - u/mrichter/AliRoot.git/blame - ITS/AliITSv1.cxx
Introducing Copyright include file
[u/mrichter/AliRoot.git] / ITS / AliITSv1.cxx
CommitLineData
fe4da5cc 1///////////////////////////////////////////////////////////////////////////////
2// //
3// Inner Traking System version 1 //
58005f18 4// This class contains the base procedures for the Inner Tracking System //
fe4da5cc 5// //
58005f18 6// Authors: R. Barbera, A. Morsch.
7// version 1.
8// Created 1998.
9//
10// NOTE: THIS IS THE COARSE pre.TDR geometry of the ITS. THIS WILL NOT WORK
11// with the geometry or module classes or any analysis classes. You are
12// strongly encouraged to uses AliITSv5.
fe4da5cc 13// //
14///////////////////////////////////////////////////////////////////////////////
15
16#include <TMath.h>
17#include <TRandom.h>
18#include <TVector.h>
58005f18 19#include "AliITShit.h"
fe4da5cc 20#include "AliITSv1.h"
21#include "AliRun.h"
22
23#include "AliMC.h"
24#include "AliConst.h"
25
26ClassImp(AliITSv1)
27
28//_____________________________________________________________________________
29AliITSv1::AliITSv1() : AliITS()
30{
31 //
32 // Default constructor for the ITS
33 //
34}
35
36//_____________________________________________________________________________
37AliITSv1::AliITSv1(const char *name, const char *title)
38 : AliITS(name, title)
39{
40 //
41 // Standard constructor for the ITS
42 //
43}
44
45//_____________________________________________________________________________
46void AliITSv1::CreateGeometry()
47{
48 //
49 // Create geometry for version 1 of the ITS
50 //
51 //
52 // Create Geometry for ITS version 0
53 //
58005f18 54 //
fe4da5cc 55
56
fe4da5cc 57
58 Float_t drcer[6] = { 0.,0.,.08,.08,0.,0. }; //CERAMICS THICKNESS
59 Float_t drepx[6] = { 0.,0.,0.,0.,.5357,.5357 }; //EPOXY THICKNESS
60 Float_t drpla[6] = { 0.,0.,0.,0.,.1786,.1786 }; //PLASTIC THICKNESS
61 Float_t dzb[6] = { 0.,0.,15.,15.,4.,4. }; //LENGTH OF BOXES
62 Float_t dphi[6] = { 72.,72.,72.,72.,50.6,45. }; //COVERED PHI-RANGE FOR LAYERS 1-6
63 Float_t rl[6] = { 3.9,7.6,14.,24.,40.,45. }; //SILICON LAYERS INNER RADIUS
64 Float_t drl[6] = { .755,.755,.809,.809,.7,.7 }; //THICKNESS OF LAYERS (in % radiation length)
65 Float_t dzl[6] = { 12.67,16.91,20.85,29.15,45.11,50.975 };//HALF LENGTH OF LAYERS
66 Float_t drpcb[6] = { 0.,0.,.06,.06,0.,0. }; //PCB THICKNESS
67 Float_t drcu[6] = { 0.,0.,.0504,.0504,.0357,.0357 }; //COPPER THICKNESS
68 Float_t drsi[6] = { 0.,0.,.006,.006,.3571,.3571 }; //SILICON THICKNESS
69
70 Float_t drca = 0, dzfc;
71 Int_t i, nsec;
72 Float_t rend, drca_tpc, dzco, zend, dits[3], rlim, drsu, zmax;
73 Float_t zpos, dzco1, dzco2;
74 Float_t drcac[6], acone, dphii;
75 Float_t pcits[15], xltpc;
76 Float_t rzcone, rstep, r0, z0, acable, fp, dz, zi, ri;
77 Int_t idrotm[399];
78 Float_t dgh[15];
79
ad51aeb0 80 Int_t *idtmed = fIdtmed->GetArray()-199;
fe4da5cc 81
82 // CONVERT INTO CM (RL(SI)=9.36 CM)
83 for (i = 0; i < 6; ++i) {
84 drl[i] = drl[i] / 100. * 9.36;
85 }
86
87 // SUPPORT ENDPLANE THICKNESS
88 drsu = 2.*0.06+1./20; // 1./20. is 1 cm of honeycomb (1/20 carbon density);
89
90 // CONE BELOW TPC
91
92 drca_tpc = 1.2/4.;
93
94 // CABLE THICKNESS (CONICAL CABLES CONNECTING THE LAYERS)
95
96
97 // ITS CONE ANGLE
98
99 acone = 45.;
100 acone *= kDegrad;
101
102 // CONE RADIUS AT 1ST LAYER
103
104 rzcone = 30.;
105
106 // FIELD CAGE HALF LENGTH
107
108 dzfc = 64.5;
109 rlim = 48.;
110 zmax = 80.;
111 xltpc = 275.;
112
113
114 // PARAMETERS FOR SMALL (1/2) ITS
115
116 for (i = 0; i < 6; ++i) {
117 dzl[i] /= 2.;
118 dzb[i] /= 2.;
119 }
120 drca /= 2.;
121 acone /= 2.;
122 drca_tpc /= 2.;
123 rzcone /= 2.;
124 dzfc /= 2.;
125 zmax /= 2.;
126 xltpc /= 2.;
127 acable = 15.;
128
129
130
131 // EQUAL DISTRIBUTION INTO THE 6 LAYERS
132 rstep = drca_tpc / 6.;
133 for (i = 0; i < 6; ++i) {
134 drcac[i] = (i+1) * rstep;
135 }
136
137 // NUMBER OF PHI SECTORS
138
139 nsec = 5;
140
141 // PACK IN PHI AS MUCH AS POSSIBLE
142 // NOW PACK USING THICKNESS
143
144 for (i = 0; i < 6; ++i) {
145
146// PACKING FACTOR
147 fp = rl[5] / rl[i];
148
149 // PHI-PACKING NOT SUFFICIENT ?
150
151 if (dphi[i]/45 < fp) {
152 drcac[i] = drcac[i] * fp * 45/dphi[i];
153 }
154 }
155
156
157 // --- Define ghost volume containing the six layers and fill it with air
158
159 dgh[0] = 3.5;
160 dgh[1] = 50.;
161 dgh[2] = zmax;
cfce8870 162 gMC->Gsvolu("ITSV", "TUBE", idtmed[275], dgh, 3);
fe4da5cc 163
164 // --- Place the ghost volume in its mother volume (ALIC) and make it
165 // invisible
166
cfce8870 167 gMC->Gspos("ITSV", 1, "ALIC", 0., 0., 0., 0, "ONLY");
168 gMC->Gsatt("ITSV", "SEEN", 0);
fe4da5cc 169
170 // ITS LAYERS (SILICON)
171
172 dits[0] = rl[0];
173 dits[1] = rl[0] + drl[0];
174 dits[2] = dzl[0];
cfce8870 175 gMC->Gsvolu("ITS1", "TUBE", idtmed[199], dits, 3);
176 gMC->Gspos("ITS1", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 177
178 dits[0] = rl[1];
179 dits[1] = rl[1] + drl[1];
180 dits[2] = dzl[1];
cfce8870 181 gMC->Gsvolu("ITS2", "TUBE", idtmed[199], dits, 3);
182 gMC->Gspos("ITS2", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 183
184 dits[0] = rl[2];
185 dits[1] = rl[2] + drl[2];
186 dits[2] = dzl[2];
cfce8870 187 gMC->Gsvolu("ITS3", "TUBE", idtmed[224], dits, 3);
188 gMC->Gspos("ITS3", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 189
190 dits[0] = rl[3];
191 dits[1] = rl[3] + drl[3];
192 dits[2] = dzl[3];
cfce8870 193 gMC->Gsvolu("ITS4", "TUBE", idtmed[224], dits, 3);
194 gMC->Gspos("ITS4", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 195
196 dits[0] = rl[4];
197 dits[1] = rl[4] + drl[4];
198 dits[2] = dzl[4];
cfce8870 199 gMC->Gsvolu("ITS5", "TUBE", idtmed[249], dits, 3);
200 gMC->Gspos("ITS5", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 201
202 dits[0] = rl[5];
203 dits[1] = rl[5] + drl[5];
204 dits[2] = dzl[5];
cfce8870 205 gMC->Gsvolu("ITS6", "TUBE", idtmed[249], dits, 3);
206 gMC->Gspos("ITS6", 1, "ITSV", 0., 0., 0., 0, "ONLY");
fe4da5cc 207
208 // ELECTRONICS BOXES
209
210 // PCB (layer #3 and #4)
211
cfce8870 212 gMC->Gsvolu("IPCB", "TUBE", idtmed[233], dits, 0);
fe4da5cc 213 for (i = 2; i < 4; ++i) {
214 dits[0] = rl[i];
215 dits[1] = dits[0] + drpcb[i];
216 dits[2] = dzb[i] / 2.;
217 zpos = dzl[i] + dits[2];
cfce8870 218 gMC->Gsposp("IPCB", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
219 gMC->Gsposp("IPCB", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 220 }
221
222 // COPPER (layer #3 and #4)
223
cfce8870 224 gMC->Gsvolu("ICO2", "TUBE", idtmed[234], dits, 0);
fe4da5cc 225 for (i = 2; i < 4; ++i) {
226 dits[0] = rl[i] + drpcb[i];
227 dits[1] = dits[0] + drcu[i];
228 dits[2] = dzb[i] / 2.;
229 zpos = dzl[i] + dits[2];
cfce8870 230 gMC->Gsposp("ICO2", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
231 gMC->Gsposp("ICO2", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 232 }
233
234 // CERAMICS (layer #3 and #4)
235
cfce8870 236 gMC->Gsvolu("ICER", "TUBE", idtmed[235], dits, 0);
fe4da5cc 237 for (i = 2; i < 4; ++i) {
238 dits[0] = rl[i] + drpcb[i] + drcu[i];
239 dits[1] = dits[0] + drcer[i];
240 dits[2] = dzb[i] / 2.;
241 zpos = dzl[i] + dits[2];
cfce8870 242 gMC->Gsposp("ICER", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
243 gMC->Gsposp("ICER", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 244 }
245
246 // SILICON (layer #3 and #4)
247
cfce8870 248 gMC->Gsvolu("ISI2", "TUBE", idtmed[226], dits, 0);
fe4da5cc 249 for (i = 2; i < 4; ++i) {
250 dits[0] = rl[i] + drpcb[i] + drcu[i] + drcer[i];
251 dits[1] = dits[0] + drsi[i];
252 dits[2] = dzb[i] / 2.;
253 zpos = dzl[i] + dits[2];
cfce8870 254 gMC->Gsposp("ISI2", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
255 gMC->Gsposp("ISI2", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 256 }
257
258 // PLASTIC (G10FR4) (layer #5 and #6)
259
cfce8870 260 gMC->Gsvolu("IPLA", "TUBE", idtmed[262], dits, 0);
fe4da5cc 261 for (i = 4; i < 6; ++i) {
262 dits[0] = rl[i];
263 dits[1] = dits[0] + drpla[i];
264 dits[2] = dzb[i] / 2.;
265 zpos = dzl[i] + dits[2];
cfce8870 266 gMC->Gsposp("IPLA", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
267 gMC->Gsposp("IPLA", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 268 }
269
270 // COPPER (layer #5 and #6)
271
cfce8870 272 gMC->Gsvolu("ICO3", "TUBE", idtmed[259], dits, 0);
fe4da5cc 273 for (i = 4; i < 6; ++i) {
274 dits[0] = rl[i] + drpla[i];
275 dits[1] = dits[0] + drcu[i];
276 dits[2] = dzb[i] / 2.;
277 zpos = dzl[i] + dits[2];
cfce8870 278 gMC->Gsposp("ICO3", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
279 gMC->Gsposp("ICO3", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 280 }
281
282 // EPOXY (layer #5 and #6)
283
cfce8870 284 gMC->Gsvolu("IEPX", "TUBE", idtmed[262], dits, 0);
fe4da5cc 285 for (i = 4; i < 6; ++i) {
286 dits[0] = rl[i] + drpla[i] + drcu[i];
287 dits[1] = dits[0] + drepx[i];
288 dits[2] = dzb[i] / 2.;
289 zpos = dzl[i] + dits[2];
cfce8870 290 gMC->Gsposp("IEPX", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
291 gMC->Gsposp("IEPX", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 292 }
293
294 // SILICON (layer #5 and #6)
295
cfce8870 296 gMC->Gsvolu("ISI3", "TUBE", idtmed[251], dits, 0);
fe4da5cc 297 for (i = 4; i < 6; ++i) {
298 dits[0] = rl[i] + drpla[i] + drcu[i] + drepx[i];
299 dits[1] = dits[0] + drsi[i];
300 dits[2] = dzb[i] / 2.;
301 zpos = dzl[i] + dits[2];
cfce8870 302 gMC->Gsposp("ISI3", i-1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
303 gMC->Gsposp("ISI3", i+1, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 304 }
305
306 // SUPPORT
307
cfce8870 308 gMC->Gsvolu("ISUP", "TUBE", idtmed[274], dits, 0);
fe4da5cc 309 for (i = 0; i < 6; ++i) {
310 dits[0] = rl[i];
311 if (i < 5) dits[1] = rl[i];
312 else dits[1] = rlim;
313 dits[2] = drsu / 2.;
314 zpos = dzl[i] + dzb[i] + dits[2];
cfce8870 315 gMC->Gsposp("ISUP", i+1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
316 gMC->Gsposp("ISUP", i+7, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 317 }
318
319 // CABLES (HORIZONTAL)
320
cfce8870 321 gMC->Gsvolu("ICHO", "TUBE", idtmed[278], dits, 0);
fe4da5cc 322 for (i = 0; i < 6; ++i) {
323 dits[0] = rl[i];
324 dits[1] = dits[0] + drca;
325 dits[2] = (rzcone + TMath::Tan(acone) * (rl[i] - rl[0]) - (dzl[i]+ dzb[i] + drsu)) / 2.;
326 zpos = dzl[i - 1] + dzb[i] + drsu + dits[2];
cfce8870 327 gMC->Gsposp("ICHO", i+1, "ITSV", 0., 0., zpos, 0, "ONLY", dits, 3);
328 gMC->Gsposp("ICHO", i+7, "ITSV", 0., 0.,-zpos, 0, "ONLY", dits, 3);
fe4da5cc 329 }
330 // DEFINE A CONICAL GHOST VOLUME FOR THE PHI SEGMENTATION
331 pcits[0] = 0.;
332 pcits[1] = 360.;
333 pcits[2] = 2.;
334 pcits[3] = rzcone;
335 pcits[4] = 3.5;
336 pcits[5] = rl[0];
337 pcits[6] = pcits[3] + TMath::Tan(acone) * (rlim - rl[0]);
338 pcits[7] = rlim - rl[0] + 3.5;
339 pcits[8] = rlim;
cfce8870 340 gMC->Gsvolu("ICMO", "PCON", idtmed[275], pcits, 9);
fe4da5cc 341 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
cfce8870 342 gMC->Gspos("ICMO", 1, "ITSV", 0., 0., 0., 0, "ONLY");
343 gMC->Gspos("ICMO", 2, "ITSV", 0., 0., 0., idrotm[200], "ONLY");
fe4da5cc 344
345 // DIVIDE INTO NSEC PHI-SECTIONS
346
cfce8870 347 gMC->Gsdvn("ICMD", "ICMO", nsec, 2);
348 gMC->Gsatt("ICMO", "SEEN", 0);
349 gMC->Gsatt("ICMD", "SEEN", 0);
fe4da5cc 350
351 // CONICAL CABLES
352
353 pcits[2] = 2.;
cfce8870 354 gMC->Gsvolu("ICCO", "PCON", idtmed[278], pcits, 0);
fe4da5cc 355 for (i = 1; i < 6; ++i) {
356 pcits[0] = -dphi[i] / 2.;
357 pcits[1] = dphi[i];
358 if (i < 5) {
359 dzco = TMath::Tan(acone) * (rl[i+1] - rl[i]);
360 } else {
361 dzco1 = zmax - (rzcone + TMath::Tan(acone) * (rl[5] - rl[0])) -2.;
362 dzco2 = (rlim - rl[5]) * TMath::Tan(acone);
363 if (rl[5] + dzco1 / TMath::Tan(acone) < rlim) {
364 dzco = dzco1;
365 } else {
366 dzco = dzco2;
367 }
368 }
369 pcits[3] = rzcone + TMath::Tan(acone) * (rl[i] - rl[0]);
370 pcits[4] = rl[i] - drcac[i] / TMath::Sin(acone);
371 pcits[5] = rl[i];
372 pcits[6] = pcits[3] + dzco;
373 pcits[7] = rl[i] + dzco / TMath::Tan(acone) - drcac[i] / TMath::Sin(acone);
374 pcits[8] = rl[i] + dzco / TMath::Tan(acone);
375
cfce8870 376 gMC->Gsposp("ICCO", i, "ICMD", 0., 0., 0., 0, "ONLY", pcits, 9);
fe4da5cc 377
378 }
379 zend = pcits[6];
380 rend = pcits[8];
381
382 // CONICAL CABLES BELOW TPC
383
384 // DEFINE A CONICAL GHOST VOLUME FOR THE PHI SEGMENTATION
385 pcits[0] = 0.;
386 pcits[1] = 360.;
387 pcits[2] = 2.;
388 pcits[3] = zend;
389 pcits[5] = rend;
390 pcits[4] = pcits[5] - drca_tpc;
391 pcits[6] = xltpc;
392 pcits[8] = pcits[4] + (pcits[6] - pcits[3]) * TMath::Tan(acable * kDegrad);
393 pcits[7] = pcits[8] - drca_tpc;
394 AliMatrix(idrotm[200], 90., 0., 90., 90., 180., 0.);
cfce8870 395 gMC->Gsvolu("ICCM", "PCON", idtmed[275], pcits, 9);
396 gMC->Gspos("ICCM", 1, "ALIC", 0., 0., 0., 0, "ONLY");
397 gMC->Gspos("ICCM", 2, "ALIC", 0., 0., 0., idrotm[200], "ONLY");
398 gMC->Gsdvn("ITMD", "ICCM", nsec, 2);
399 gMC->Gsatt("ITMD", "SEEN", 0);
400 gMC->Gsatt("ICCM", "SEEN", 0);
fe4da5cc 401
402 // NOW PLACE SEGMENTS WITH DECREASING PHI SEGMENTS INTO THE
403 // GHOST-VOLUME
404
405 pcits[2] = 2.;
cfce8870 406 gMC->Gsvolu("ITTT", "PCON", idtmed[278], pcits, 0);
fe4da5cc 407 r0 = rend;
408 z0 = zend;
409 dz = (xltpc - zend) / 9.;
410 for (i = 0; i < 9; ++i) {
411 zi = z0 + i*dz + dz / 2.;
412 ri = r0 + (zi - z0) * TMath::Tan(acable * kDegrad);
413 dphii = dphi[5] * r0 / ri;
414 pcits[0] = -dphii / 2.;
415 pcits[1] = dphii;
416 pcits[3] = zi - dz / 2.;
417 pcits[5] = r0 + (pcits[3] - z0) * TMath::Tan(acable * kDegrad);
418 pcits[4] = pcits[5] - drca_tpc;
419 pcits[6] = zi + dz / 2.;
420 pcits[8] = r0 + (pcits[6] - z0) * TMath::Tan(acable * kDegrad);
421 pcits[7] = pcits[8] - drca_tpc;
422
cfce8870 423 gMC->Gsposp("ITTT", i+1, "ITMD", 0., 0., 0., 0, "ONLY", pcits, 9);
fe4da5cc 424 }
425
426 // --- Outputs the geometry tree in the EUCLID/CAD format
427
428 if (fEuclidOut) {
cfce8870 429 gMC->WriteEuclid("ITSgeometry", "ITSV", 1, 5);
fe4da5cc 430 }
431}
432
433//_____________________________________________________________________________
434void AliITSv1::CreateMaterials()
435{
436 //
437 // Create the materials for ITS
438 //
439 AliITS::CreateMaterials();
440}
441
442//_____________________________________________________________________________
443void AliITSv1::Init()
444{
445 //
446 // Initialise the ITS after it has been built
447 //
448 AliITS::Init();
58005f18 449 fMajorVersion = 1;
450 fMinorVersion = 0;
fe4da5cc 451}
452
453//_____________________________________________________________________________
2cb30c3a 454void AliITSv1::DrawModule()
fe4da5cc 455{
456 //
457 // Draw a shaded view of the FMD version 1
458 //
459
fe4da5cc 460
461 // Set everything unseen
cfce8870 462 gMC->Gsatt("*", "seen", -1);
fe4da5cc 463 //
464 // Set ALIC mother visible
cfce8870 465 gMC->Gsatt("ALIC","SEEN",0);
fe4da5cc 466 //
467 // Set the volumes visible
cfce8870 468 gMC->Gsatt("ITSV","SEEN",0);
469 gMC->Gsatt("ITS1","SEEN",1);
470 gMC->Gsatt("ITS2","SEEN",1);
471 gMC->Gsatt("ITS3","SEEN",1);
472 gMC->Gsatt("ITS4","SEEN",1);
473 gMC->Gsatt("ITS5","SEEN",1);
474 gMC->Gsatt("ITS6","SEEN",1);
fe4da5cc 475
cfce8870 476 gMC->Gsatt("IPCB","SEEN",1);
477 gMC->Gsatt("ICO2","SEEN",1);
478 gMC->Gsatt("ICER","SEEN",0);
479 gMC->Gsatt("ISI2","SEEN",0);
480 gMC->Gsatt("IPLA","SEEN",0);
481 gMC->Gsatt("ICO3","SEEN",0);
482 gMC->Gsatt("IEPX","SEEN",0);
483 gMC->Gsatt("ISI3","SEEN",1);
484 gMC->Gsatt("ISUP","SEEN",0);
485 gMC->Gsatt("ICHO","SEEN",0);
486 gMC->Gsatt("ICMO","SEEN",0);
487 gMC->Gsatt("ICMD","SEEN",0);
488 gMC->Gsatt("ICCO","SEEN",1);
489 gMC->Gsatt("ICCM","SEEN",0);
490 gMC->Gsatt("ITMD","SEEN",0);
491 gMC->Gsatt("ITTT","SEEN",1);
fe4da5cc 492
493 //
cfce8870 494 gMC->Gdopt("hide", "on");
495 gMC->Gdopt("shad", "on");
496 gMC->Gsatt("*", "fill", 7);
497 gMC->SetClipBox(".");
498 gMC->SetClipBox("*", 0, 300, -300, 300, -300, 300);
499 gMC->DefaultRange();
500 gMC->Gdraw("alic", 40, 30, 0, 11, 10, .07, .07);
501 gMC->Gdhead(1111, "Inner Tracking System Version 1");
502 gMC->Gdman(17, 6, "MAN");
fe4da5cc 503}
504
505//_____________________________________________________________________________
506void AliITSv1::StepManager()
507{
508 //
509 // Called at every step in the ITS
510 //
511 Int_t copy, id;
58005f18 512 Float_t hits[8];
513 Int_t vol[4];
0a6d8768 514 TLorentzVector position, momentum;
fe4da5cc 515 TClonesArray &lhits = *fHits;
fe4da5cc 516 //
58005f18 517 // Track status
518 vol[3] = 0;
519 if(gMC->IsTrackInside()) vol[3] += 1;
520 if(gMC->IsTrackEntering()) vol[3] += 2;
521 if(gMC->IsTrackExiting()) vol[3] += 4;
522 if(gMC->IsTrackOut()) vol[3] += 8;
523 if(gMC->IsTrackDisappeared()) vol[3] += 16;
524 if(gMC->IsTrackStop()) vol[3] += 32;
525 if(gMC->IsTrackAlive()) vol[3] += 64;
526 //
527 // Fill hit structure.
cfce8870 528 if(gMC->TrackCharge() && gMC->Edep()) {
fe4da5cc 529 //
530 // Only entering charged tracks
58005f18 531 if((id=gMC->CurrentVolID(copy))==fIdSens[0]) {
fe4da5cc 532 vol[0]=1;
0a6d8768 533 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 534 vol[1]=copy;
0a6d8768 535 id=gMC->CurrentVolOffID(2,copy);
fe4da5cc 536 vol[2]=copy;
58005f18 537 } else if(id==fIdSens[1]) {
fe4da5cc 538 vol[0]=2;
0a6d8768 539 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 540 vol[1]=copy;
0a6d8768 541 id=gMC->CurrentVolOffID(2,copy);
fe4da5cc 542 vol[2]=copy;
58005f18 543 } else if(id==fIdSens[2]) {
fe4da5cc 544 vol[0]=3;
545 vol[1]=copy;
0a6d8768 546 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 547 vol[2]=copy;
58005f18 548 } else if(id==fIdSens[3]) {
fe4da5cc 549 vol[0]=4;
550 vol[1]=copy;
0a6d8768 551 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 552 vol[2]=copy;
58005f18 553 } else if(id==fIdSens[4]) {
fe4da5cc 554 vol[0]=5;
555 vol[1]=copy;
0a6d8768 556 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 557 vol[2]=copy;
58005f18 558 } else if(id==fIdSens[5]) {
fe4da5cc 559 vol[0]=6;
560 vol[1]=copy;
0a6d8768 561 id=gMC->CurrentVolOffID(1,copy);
fe4da5cc 562 vol[2]=copy;
563 } else return;
cfce8870 564 gMC->TrackPosition(position);
565 gMC->TrackMomentum(momentum);
fe4da5cc 566 hits[0]=position[0];
567 hits[1]=position[1];
568 hits[2]=position[2];
0a6d8768 569 hits[3]=momentum[0];
570 hits[4]=momentum[1];
58005f18 571 hits[5]=momentum[2];
cfce8870 572 hits[6]=gMC->Edep();
58005f18 573 hits[7]=gMC->TrackTime();
fe4da5cc 574 new(lhits[fNhits++]) AliITShit(fIshunt,gAlice->CurrentTrack(),vol,hits);
575 }
576}