]>
Commit | Line | Data |
---|---|---|
4c039060 | 1 | /************************************************************************** |
2 | * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. * | |
3 | * * | |
4 | * Author: The ALICE Off-line Project. * | |
5 | * Contributors are mentioned in the code where appropriate. * | |
6 | * * | |
7 | * Permission to use, copy, modify and distribute this software and its * | |
8 | * documentation strictly for non-commercial purposes is hereby granted * | |
9 | * without fee, provided that the above copyright notice appears in all * | |
10 | * copies and that both the copyright notice and this permission notice * | |
11 | * appear in the supporting documentation. The authors make no claims * | |
12 | * about the suitability of this software for any purpose. It is * | |
13 | * provided "as is" without express or implied warranty. * | |
14 | **************************************************************************/ | |
15 | ||
16 | /* | |
17 | $Log$ | |
851d3db9 | 18 | Revision 1.16.2.2 2000/02/28 17:53:24 cblume |
19 | Introduce TRD geometry classes | |
20 | ||
21 | Revision 1.16.2.1 2000/02/28 17:04:19 cblume | |
22 | Include functions and data members for AliTRDrecPoint | |
23 | ||
24 | Revision 1.16 2000/01/19 17:17:35 fca | |
25 | Introducing a list of lists of hits -- more hits allowed for detector now | |
26 | ||
1cedd08a | 27 | Revision 1.15 1999/11/02 17:04:25 fca |
28 | Small syntax change for HP compiler | |
29 | ||
94c641ff | 30 | Revision 1.14 1999/11/02 16:57:02 fca |
31 | Avoid non ansi warnings on HP compilers | |
32 | ||
8459a454 | 33 | Revision 1.13 1999/11/02 16:35:56 fca |
34 | New version of TRD introduced | |
35 | ||
5c7f4665 | 36 | Revision 1.12 1999/11/01 20:41:51 fca |
37 | Added protections against using the wrong version of FRAME | |
38 | ||
ab76897d | 39 | Revision 1.11 1999/09/29 09:24:34 fca |
40 | Introduction of the Copyright and cvs Log | |
41 | ||
4c039060 | 42 | */ |
43 | ||
fe4da5cc | 44 | /////////////////////////////////////////////////////////////////////////////// |
45 | // // | |
46 | // Transition Radiation Detector // | |
47 | // This class contains the basic functions for the Transition Radiation // | |
5c7f4665 | 48 | // Detector, as well as the geometry. // |
49 | // Functions specific to one particular geometry are contained in the // | |
50 | // derived classes. // | |
fe4da5cc | 51 | // // |
52 | //Begin_Html | |
53 | /* | |
1439f98e | 54 | <img src="picts/AliTRDClass.gif"> |
fe4da5cc | 55 | */ |
56 | //End_Html | |
57 | // // | |
58 | // // | |
59 | /////////////////////////////////////////////////////////////////////////////// | |
60 | ||
5c7f4665 | 61 | #include <stdlib.h> |
62 | ||
fe4da5cc | 63 | #include <TMath.h> |
fe4da5cc | 64 | #include <TNode.h> |
fe4da5cc | 65 | #include <TPGON.h> |
66 | ||
fe4da5cc | 67 | #include "AliTRD.h" |
68 | #include "AliRun.h" | |
d3f347ff | 69 | #include "AliConst.h" |
851d3db9 | 70 | #include "AliTRDdigitizer.h" |
71 | #include "AliTRDclusterizer.h" | |
72 | #include "AliTRDgeometryHole.h" | |
73 | #include "AliTRDgeometryFull.h" | |
74 | #include "AliTRDrecPoint.h" | |
fe4da5cc | 75 | |
76 | ClassImp(AliTRD) | |
77 | ||
78 | //_____________________________________________________________________________ | |
79 | AliTRD::AliTRD() | |
80 | { | |
81 | // | |
82 | // Default constructor | |
83 | // | |
82bbf98a | 84 | |
d3f347ff | 85 | fIshunt = 0; |
86 | fGasMix = 0; | |
99d5402e | 87 | fHits = 0; |
88 | fDigits = 0; | |
5c7f4665 | 89 | |
851d3db9 | 90 | fRecPoints = 0; |
91 | fNRecPoints = 0; | |
5c7f4665 | 92 | |
851d3db9 | 93 | fGeometry = 0; |
82bbf98a | 94 | |
fe4da5cc | 95 | } |
96 | ||
97 | //_____________________________________________________________________________ | |
98 | AliTRD::AliTRD(const char *name, const char *title) | |
99 | : AliDetector(name,title) | |
100 | { | |
101 | // | |
102 | // Standard constructor for the TRD | |
103 | // | |
104 | ||
5c7f4665 | 105 | // Check that FRAME is there otherwise we have no place where to |
106 | // put TRD | |
107 | AliModule* FRAME=gAlice->GetModule("FRAME"); | |
108 | if (!FRAME) { | |
109 | Error("Ctor","TRD needs FRAME to be present\n"); | |
110 | exit(1); | |
111 | } | |
112 | ||
113 | // Define the TRD geometry according to the FRAME geometry | |
851d3db9 | 114 | if (FRAME->IsVersion() == 0) { |
115 | // Geometry with hole | |
116 | fGeometry = new AliTRDgeometryHole(); | |
117 | } | |
118 | else if (FRAME->IsVersion() == 1) { | |
119 | // Geometry without hole | |
120 | fGeometry = new AliTRDgeometryFull(); | |
121 | } | |
122 | else { | |
123 | Error("Ctor","Could not find valid FRAME version\n"); | |
124 | exit(1); | |
125 | } | |
5c7f4665 | 126 | |
fe4da5cc | 127 | // Allocate the hit array |
851d3db9 | 128 | fHits = new TClonesArray("AliTRDhit" , 405); |
1cedd08a | 129 | gAlice->AddHitList(fHits); |
99d5402e | 130 | |
131 | // Allocate the digits array | |
851d3db9 | 132 | fDigits = 0; |
5c7f4665 | 133 | |
851d3db9 | 134 | // Allocate the rec point array |
135 | fRecPoints = new TClonesArray("AliTRDrecPoint", 400); | |
136 | fNRecPoints = 0; | |
99d5402e | 137 | |
82bbf98a | 138 | fIshunt = 0; |
139 | fGasMix = 0; | |
140 | ||
fe4da5cc | 141 | SetMarkerColor(kWhite); |
82bbf98a | 142 | |
fe4da5cc | 143 | } |
99d5402e | 144 | |
145 | //_____________________________________________________________________________ | |
146 | AliTRD::~AliTRD() | |
147 | { | |
148 | // | |
149 | // TRD destructor | |
150 | // | |
151 | ||
152 | fIshunt = 0; | |
153 | ||
851d3db9 | 154 | delete fGeometry; |
99d5402e | 155 | delete fHits; |
851d3db9 | 156 | delete fRecPoints; |
5c7f4665 | 157 | |
158 | } | |
159 | ||
160 | //_____________________________________________________________________________ | |
851d3db9 | 161 | void AliTRD::AddRecPoint(Float_t *pos, Int_t *digits, Int_t det, Float_t amp) |
5c7f4665 | 162 | { |
163 | // | |
851d3db9 | 164 | // Add a reconstructed point for the TRD |
165 | // | |
5c7f4665 | 166 | |
851d3db9 | 167 | TClonesArray &lRecPoints = *fRecPoints; |
168 | AliTRDrecPoint *RecPoint = new(lRecPoints[fNRecPoints++]) AliTRDrecPoint(); | |
169 | TVector3 posVec(pos[0],pos[1],pos[2]); | |
170 | RecPoint->SetLocalPosition(posVec); | |
171 | RecPoint->SetDetector(det); | |
172 | RecPoint->SetAmplitude(amp); | |
173 | for (Int_t iDigit = 0; iDigit < 3; iDigit++) { | |
174 | RecPoint->AddDigit(digits[iDigit]); | |
175 | } | |
99d5402e | 176 | |
177 | } | |
178 | ||
179 | //_____________________________________________________________________________ | |
851d3db9 | 180 | void AliTRD::AddDigit(Int_t *digits) |
99d5402e | 181 | { |
182 | // | |
183 | // Add a digit for the TRD | |
184 | // | |
185 | ||
186 | TClonesArray &ldigits = *fDigits; | |
851d3db9 | 187 | new(ldigits[fNdigits++]) AliTRDdigit(digits); |
99d5402e | 188 | |
189 | } | |
190 | ||
fe4da5cc | 191 | //_____________________________________________________________________________ |
851d3db9 | 192 | void AliTRD::AddHit(Int_t track, Int_t det, Float_t *hits) |
fe4da5cc | 193 | { |
194 | // | |
195 | // Add a hit for the TRD | |
196 | // | |
82bbf98a | 197 | |
fe4da5cc | 198 | TClonesArray &lhits = *fHits; |
851d3db9 | 199 | new(lhits[fNhits++]) AliTRDhit(fIshunt,track,det,hits); |
82bbf98a | 200 | |
fe4da5cc | 201 | } |
202 | ||
203 | //_____________________________________________________________________________ | |
204 | void AliTRD::BuildGeometry() | |
205 | { | |
206 | // | |
207 | // Create the ROOT TNode geometry for the TRD | |
208 | // | |
82bbf98a | 209 | |
fe4da5cc | 210 | TNode *Node, *Top; |
211 | TPGON *pgon; | |
212 | const Int_t kColorTRD = 46; | |
d3f347ff | 213 | |
fe4da5cc | 214 | // Find the top node alice |
82bbf98a | 215 | Top = gAlice->GetGeometry()->GetNode("alice"); |
d3f347ff | 216 | |
82bbf98a | 217 | pgon = new TPGON("S_TRD","TRD","void",0,360,kNsect,4); |
218 | Float_t ff = TMath::Cos(kDegrad * 180 / kNsect); | |
219 | Float_t rrmin = kRmin / ff; | |
220 | Float_t rrmax = kRmax / ff; | |
221 | pgon->DefineSection(0,-kZmax1,rrmax,rrmax); | |
222 | pgon->DefineSection(1,-kZmax2,rrmin,rrmax); | |
223 | pgon->DefineSection(2, kZmax2,rrmin,rrmax); | |
224 | pgon->DefineSection(3, kZmax1,rrmax,rrmax); | |
fe4da5cc | 225 | Top->cd(); |
226 | Node = new TNode("TRD","TRD","S_TRD",0,0,0,""); | |
227 | Node->SetLineColor(kColorTRD); | |
228 | fNodes->Add(Node); | |
d3f347ff | 229 | |
fe4da5cc | 230 | } |
231 | ||
232 | //_____________________________________________________________________________ | |
82bbf98a | 233 | void AliTRD::CreateGeometry() |
fe4da5cc | 234 | { |
82bbf98a | 235 | // |
236 | // Creates the volumes for the TRD chambers | |
237 | // | |
82bbf98a | 238 | |
239 | // Check that FRAME is there otherwise we have no place where to put the TRD | |
240 | AliModule* FRAME = gAlice->GetModule("FRAME"); | |
851d3db9 | 241 | if (!FRAME) { |
242 | printf(" The TRD needs the FRAME to be defined first\n"); | |
243 | return; | |
82bbf98a | 244 | } |
d3f347ff | 245 | |
851d3db9 | 246 | fGeometry->CreateGeometry(fIdtmed->GetArray() - 1299); |
5c7f4665 | 247 | |
82bbf98a | 248 | } |
249 | ||
250 | //_____________________________________________________________________________ | |
251 | void AliTRD::CreateMaterials() | |
252 | { | |
fe4da5cc | 253 | // |
254 | // Create the materials for the TRD | |
255 | // Origin Y.Foka | |
256 | // | |
257 | ||
fe4da5cc | 258 | Int_t ISXFLD = gAlice->Field()->Integ(); |
259 | Float_t SXMGMX = gAlice->Field()->Max(); | |
260 | ||
d3f347ff | 261 | // For polyethilene (CH2) |
262 | Float_t ape[2] = { 12., 1. }; | |
263 | Float_t zpe[2] = { 6., 1. }; | |
264 | Float_t wpe[2] = { 1., 2. }; | |
265 | Float_t dpe = 0.95; | |
266 | ||
267 | // For mylar (C5H4O2) | |
268 | Float_t amy[3] = { 12., 1., 16. }; | |
269 | Float_t zmy[3] = { 6., 1., 8. }; | |
270 | Float_t wmy[3] = { 5., 4., 2. }; | |
fe4da5cc | 271 | Float_t dmy = 1.39; |
d3f347ff | 272 | |
273 | // For CO2 | |
274 | Float_t aco[2] = { 12., 16. }; | |
275 | Float_t zco[2] = { 6., 8. }; | |
276 | Float_t wco[2] = { 1., 2. }; | |
277 | Float_t dco = 0.001977; | |
278 | ||
279 | // For water | |
280 | Float_t awa[2] = { 1., 16. }; | |
281 | Float_t zwa[2] = { 1., 8. }; | |
282 | Float_t wwa[2] = { 2., 1. }; | |
283 | Float_t dwa = 1.0; | |
284 | ||
285 | // For isobutane (C4H10) | |
286 | Float_t ais[2] = { 12., 1. }; | |
287 | Float_t zis[2] = { 6., 1. }; | |
288 | Float_t wis[2] = { 4., 10. }; | |
289 | Float_t dis = 0.00267; | |
290 | ||
291 | // For Xe/CO2-gas-mixture | |
292 | // Xe-content of the Xe/CO2-mixture (90% / 10%) | |
293 | Float_t fxc = .90; | |
294 | // Xe-content of the Xe/Isobutane-mixture (97% / 3%) | |
295 | Float_t fxi = .97; | |
fe4da5cc | 296 | Float_t dxe = .005858; |
297 | ||
d3f347ff | 298 | // General tracking parameter |
fe4da5cc | 299 | Float_t tmaxfd = -10.; |
300 | Float_t stemax = -1e10; | |
d3f347ff | 301 | Float_t deemax = -0.1; |
302 | Float_t epsil = 1e-4; | |
303 | Float_t stmin = -0.001; | |
fe4da5cc | 304 | |
305 | Float_t absl, radl, d, buf[1]; | |
306 | Float_t agm[2], dgm, zgm[2], wgm[2]; | |
d3f347ff | 307 | Int_t nbuf; |
fe4da5cc | 308 | |
d3f347ff | 309 | ////////////////////////////////////////////////////////////////////////// |
fe4da5cc | 310 | // Define Materials |
d3f347ff | 311 | ////////////////////////////////////////////////////////////////////////// |
312 | ||
313 | AliMaterial( 1, "Al $", 26.98, 13.0, 2.7 , 8.9 , 37.2); | |
314 | AliMaterial( 2, "Air$", 14.61, 7.3, 0.001205, 30420.0 , 67500.0); | |
315 | AliMaterial( 4, "Xe $", 131.29, 54.0, dxe , 1447.59, 0.0); | |
316 | AliMaterial( 5, "Cu $", 63.54, 29.0, 8.96 , 1.43, 14.8); | |
317 | AliMaterial( 6, "C $", 12.01, 6.0, 2.265 , 18.8 , 74.4); | |
318 | AliMaterial(12, "G10$", 20.00, 10.0, 1.7 , 19.4 , 999.0); | |
319 | ||
320 | // Mixtures | |
321 | AliMixture(3, "Polyethilene$", ape, zpe, dpe, -2, wpe); | |
322 | AliMixture(7, "Mylar$", amy, zmy, dmy, -3, wmy); | |
323 | AliMixture(8, "CO2$", aco, zco, dco, -2, wco); | |
324 | AliMixture(9, "Isobutane$", ais, zis, dis, -2, wis); | |
82bbf98a | 325 | AliMixture(13,"Water$", awa, zwa, dwa, -2, wwa); |
d3f347ff | 326 | |
327 | // Gas mixtures | |
82bbf98a | 328 | Char_t namate[21]; |
d3f347ff | 329 | // Xe/CO2-mixture |
330 | // Get properties of Xe | |
cfce8870 | 331 | gMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf); |
d3f347ff | 332 | // Get properties of CO2 |
cfce8870 | 333 | gMC->Gfmate((*fIdmate)[8], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf); |
d3f347ff | 334 | // Create gas mixture |
335 | wgm[0] = fxc; | |
336 | wgm[1] = 1. - fxc; | |
fe4da5cc | 337 | dgm = wgm[0] * dxe + wgm[1] * dco; |
d3f347ff | 338 | AliMixture(10, "Gas mixture 1$", agm, zgm, dgm, 2, wgm); |
339 | // Xe/Isobutane-mixture | |
340 | // Get properties of Xe | |
cfce8870 | 341 | gMC->Gfmate((*fIdmate)[4], namate, agm[0], zgm[0], d, radl, absl, buf, nbuf); |
d3f347ff | 342 | // Get properties of Isobutane |
cfce8870 | 343 | gMC->Gfmate((*fIdmate)[9], namate, agm[1], zgm[1], d, radl, absl, buf, nbuf); |
d3f347ff | 344 | // Create gas mixture |
345 | wgm[0] = fxi; | |
346 | wgm[1] = 1. - fxi; | |
347 | dgm = wgm[0] * dxe + wgm[1] * dis; | |
348 | AliMixture(11, "Gas mixture 2$", agm, zgm, dgm, 2, wgm); | |
349 | ||
350 | ////////////////////////////////////////////////////////////////////////// | |
fe4da5cc | 351 | // Tracking Media Parameters |
d3f347ff | 352 | ////////////////////////////////////////////////////////////////////////// |
353 | ||
354 | // Al Frame | |
ad51aeb0 | 355 | AliMedium(1, "Al Frame$", 1, 0, ISXFLD, SXMGMX |
d3f347ff | 356 | , tmaxfd, stemax, deemax, epsil, stmin); |
357 | // Air | |
ad51aeb0 | 358 | AliMedium(2, "Air$", 2, 0, ISXFLD, SXMGMX |
d3f347ff | 359 | , tmaxfd, stemax, deemax, epsil, stmin); |
360 | // Polyethilene | |
ad51aeb0 | 361 | AliMedium(3, "Radiator$", 3, 0, ISXFLD, SXMGMX |
d3f347ff | 362 | , tmaxfd, stemax, deemax, epsil, stmin); |
363 | // Xe | |
ad51aeb0 | 364 | AliMedium(4, "Xe$", 4, 1, ISXFLD, SXMGMX |
d3f347ff | 365 | , tmaxfd, stemax, deemax, epsil, stmin); |
366 | // Cu pads | |
ad51aeb0 | 367 | AliMedium(5, "Padplane$", 5, 1, ISXFLD, SXMGMX |
d3f347ff | 368 | , tmaxfd, stemax, deemax, epsil, stmin); |
369 | // Fee + cables | |
ad51aeb0 | 370 | AliMedium(6, "Readout$", 1, 0, ISXFLD, SXMGMX |
d3f347ff | 371 | , tmaxfd, stemax, deemax, epsil, stmin); |
372 | // C frame | |
ad51aeb0 | 373 | AliMedium(7, "C Frame$", 6, 0, ISXFLD, SXMGMX |
d3f347ff | 374 | , tmaxfd, stemax, deemax, epsil, stmin); |
375 | // Mylar foils | |
ad51aeb0 | 376 | AliMedium(8, "Mylar$", 7, 0, ISXFLD, SXMGMX |
d3f347ff | 377 | , tmaxfd, stemax, deemax, epsil, stmin); |
378 | if (fGasMix == 1) { | |
379 | // Gas-mixture (Xe/CO2) | |
ad51aeb0 | 380 | AliMedium(9, "Gas-mix$", 10, 1, ISXFLD, SXMGMX |
d3f347ff | 381 | , tmaxfd, stemax, deemax, epsil, stmin); |
382 | } | |
383 | else { | |
384 | // Gas-mixture (Xe/Isobutane) | |
ad51aeb0 | 385 | AliMedium(9, "Gas-mix$", 11, 1, ISXFLD, SXMGMX |
d3f347ff | 386 | , tmaxfd, stemax, deemax, epsil, stmin); |
387 | } | |
388 | // Nomex-honeycomb (use carbon for the time being) | |
ad51aeb0 | 389 | AliMedium(10, "Nomex$", 6, 0, ISXFLD, SXMGMX |
d3f347ff | 390 | , tmaxfd, stemax, deemax, epsil, stmin); |
391 | // Kapton foils (use Mylar for the time being) | |
ad51aeb0 | 392 | AliMedium(11, "Kapton$", 7, 0, ISXFLD, SXMGMX |
d3f347ff | 393 | , tmaxfd, stemax, deemax, epsil, stmin); |
394 | // Gas-filling of the radiator | |
ad51aeb0 | 395 | AliMedium(12, "CO2$", 8, 0, ISXFLD, SXMGMX |
d3f347ff | 396 | , tmaxfd, stemax, deemax, epsil, stmin); |
397 | // G10-plates | |
ad51aeb0 | 398 | AliMedium(13, "G10-plates$",12, 0, ISXFLD, SXMGMX |
d3f347ff | 399 | , tmaxfd, stemax, deemax, epsil, stmin); |
400 | // Cooling water | |
ad51aeb0 | 401 | AliMedium(14, "Water$", 13, 0, ISXFLD, SXMGMX |
d3f347ff | 402 | , tmaxfd, stemax, deemax, epsil, stmin); |
403 | ||
fe4da5cc | 404 | } |
405 | ||
82bbf98a | 406 | //_____________________________________________________________________________ |
407 | void AliTRD::DrawModule() | |
408 | { | |
409 | // | |
410 | // Draw a shaded view of the Transition Radiation Detector version 0 | |
411 | // | |
412 | ||
413 | // Set everything unseen | |
414 | gMC->Gsatt("*" ,"SEEN",-1); | |
415 | ||
416 | // Set ALIC mother transparent | |
417 | gMC->Gsatt("ALIC","SEEN", 0); | |
418 | ||
419 | // Set the volumes visible | |
851d3db9 | 420 | if (fGeometry->IsVersion() == 0) { |
5c7f4665 | 421 | gMC->Gsatt("B071","SEEN", 0); |
422 | gMC->Gsatt("B074","SEEN", 0); | |
423 | gMC->Gsatt("B075","SEEN", 0); | |
424 | gMC->Gsatt("B077","SEEN", 0); | |
425 | gMC->Gsatt("BTR1","SEEN", 0); | |
426 | gMC->Gsatt("BTR2","SEEN", 0); | |
427 | gMC->Gsatt("BTR3","SEEN", 0); | |
428 | gMC->Gsatt("TRD1","SEEN", 0); | |
429 | gMC->Gsatt("TRD2","SEEN", 0); | |
430 | gMC->Gsatt("TRD3","SEEN", 0); | |
431 | } | |
432 | else { | |
433 | gMC->Gsatt("B071","SEEN", 0); | |
434 | gMC->Gsatt("B074","SEEN", 0); | |
435 | gMC->Gsatt("B075","SEEN", 0); | |
436 | gMC->Gsatt("B077","SEEN", 0); | |
437 | gMC->Gsatt("BTR1","SEEN", 0); | |
438 | gMC->Gsatt("BTR2","SEEN", 0); | |
439 | gMC->Gsatt("BTR3","SEEN", 0); | |
440 | gMC->Gsatt("TRD1","SEEN", 0); | |
441 | } | |
82bbf98a | 442 | gMC->Gsatt("UCII","SEEN", 0); |
443 | gMC->Gsatt("UCIM","SEEN", 0); | |
444 | gMC->Gsatt("UCIO","SEEN", 0); | |
445 | gMC->Gsatt("UL02","SEEN", 1); | |
446 | gMC->Gsatt("UL05","SEEN", 1); | |
447 | gMC->Gsatt("UL06","SEEN", 1); | |
448 | ||
449 | gMC->Gdopt("hide", "on"); | |
450 | gMC->Gdopt("shad", "on"); | |
451 | gMC->Gsatt("*", "fill", 7); | |
452 | gMC->SetClipBox("."); | |
453 | gMC->SetClipBox("*", 0, 2000, -2000, 2000, -2000, 2000); | |
454 | gMC->DefaultRange(); | |
455 | gMC->Gdraw("alic", 40, 30, 0, 12, 9.4, .021, .021); | |
456 | gMC->Gdhead(1111, "Transition Radiation Detector"); | |
457 | gMC->Gdman(18, 4, "MAN"); | |
458 | ||
459 | } | |
460 | ||
fe4da5cc | 461 | //_____________________________________________________________________________ |
462 | Int_t AliTRD::DistancetoPrimitive(Int_t , Int_t ) | |
463 | { | |
464 | // | |
465 | // Distance between the mouse and the TRD detector on the screen | |
466 | // Dummy routine | |
82bbf98a | 467 | |
468 | return 9999; | |
469 | ||
fe4da5cc | 470 | } |
471 | ||
472 | //_____________________________________________________________________________ | |
473 | void AliTRD::Init() | |
474 | { | |
475 | // | |
851d3db9 | 476 | // Initialize the TRD detector after the geometry has been created |
fe4da5cc | 477 | // |
82bbf98a | 478 | |
5c7f4665 | 479 | Int_t i; |
851d3db9 | 480 | |
5c7f4665 | 481 | printf("\n"); |
851d3db9 | 482 | for (i = 0; i < 35; i++) printf("*"); |
5c7f4665 | 483 | printf(" TRD_INIT "); |
851d3db9 | 484 | for (i = 0; i < 35; i++) printf("*"); |
485 | printf("\n"); | |
5c7f4665 | 486 | printf("\n"); |
5c7f4665 | 487 | |
851d3db9 | 488 | if (fGeometry->IsVersion() == 0) { |
489 | printf(" Geometry with holes initialized.\n\n"); | |
490 | } | |
491 | else if (fGeometry->IsVersion() == 1) { | |
492 | printf(" Geometry without holes initialized.\n\n"); | |
5c7f4665 | 493 | } |
494 | ||
851d3db9 | 495 | if (fGasMix == 1) |
496 | printf(" Gas Mixture: 90%% Xe + 10%% CO2\n\n"); | |
497 | else | |
498 | printf(" Gas Mixture: 97%% Xe + 3%% Isobutane\n\n"); | |
5c7f4665 | 499 | |
500 | } | |
501 | ||
502 | //_____________________________________________________________________________ | |
503 | void AliTRD::MakeBranch(Option_t* option) | |
504 | { | |
505 | // | |
506 | // Create Tree branches for the TRD digits and cluster. | |
507 | // | |
508 | ||
509 | Int_t buffersize = 4000; | |
510 | Char_t branchname[15]; | |
511 | ||
512 | AliDetector::MakeBranch(option); | |
513 | ||
851d3db9 | 514 | //Char_t *D = strstr(option,"D"); |
515 | //sprintf(branchname,"%s",GetName()); | |
516 | //if (fDigits && gAlice->TreeD() && D) { | |
517 | // gAlice->TreeD()->Branch(branchname,&fDigits, buffersize); | |
518 | // printf("* AliTRD::MakeBranch * Making Branch %s for digits in TreeD\n",branchname); | |
519 | //} | |
520 | ||
521 | Char_t *R = strstr(option,"R"); | |
522 | sprintf(branchname,"%srecPoints",GetName()); | |
523 | if (fRecPoints && gAlice->TreeR() && R) { | |
524 | gAlice->TreeR()->Branch(branchname,&fRecPoints,buffersize); | |
525 | printf("* AliTRD::MakeBranch * Making Branch %s for points in TreeR\n",branchname); | |
5c7f4665 | 526 | } |
527 | ||
851d3db9 | 528 | } |
529 | ||
530 | //_____________________________________________________________________________ | |
531 | void AliTRD::ResetRecPoints() | |
532 | { | |
533 | // | |
534 | // Reset number of reconstructed points and the point array | |
535 | // | |
536 | ||
537 | fNRecPoints = 0; | |
538 | if (fRecPoints) fRecPoints->Clear(); | |
5c7f4665 | 539 | |
540 | } | |
541 | ||
542 | //_____________________________________________________________________________ | |
543 | void AliTRD::SetTreeAddress() | |
544 | { | |
545 | // | |
546 | // Set the branch addresses for the trees. | |
547 | // | |
548 | ||
549 | Char_t branchname[15]; | |
550 | ||
551 | AliDetector::SetTreeAddress(); | |
552 | ||
553 | TBranch *branch; | |
851d3db9 | 554 | TTree *treeR = gAlice->TreeR(); |
555 | ||
556 | if (treeR) { | |
557 | sprintf(branchname,"%srecPoints",GetName()); | |
558 | if (fRecPoints) { | |
559 | branch = treeR->GetBranch(branchname); | |
560 | if (branch) { | |
561 | branch->SetAddress(&fRecPoints); | |
562 | } | |
5c7f4665 | 563 | } |
564 | } | |
565 | ||
fe4da5cc | 566 | } |
567 | ||
d3f347ff | 568 | //_____________________________________________________________________________ |
b060c36f | 569 | void AliTRD::SetGasMix(Int_t imix) |
d3f347ff | 570 | { |
82bbf98a | 571 | // |
572 | // Defines the gas mixture (imix=0: Xe/Isobutane imix=1: Xe/CO2) | |
573 | // | |
574 | ||
d3f347ff | 575 | if ((imix < 0) || (imix > 1)) { |
576 | printf("Wrong input value: %d\n",imix); | |
577 | printf("Use standard setting\n"); | |
578 | fGasMix = 0; | |
579 | return; | |
580 | } | |
581 | ||
582 | fGasMix = imix; | |
583 | ||
584 | } | |
585 | ||
5c7f4665 | 586 | //______________________________________________________________________________ |
587 | void AliTRD::Streamer(TBuffer &R__b) | |
588 | { | |
851d3db9 | 589 | // |
590 | // Stream an object of class AliTRD. | |
591 | // | |
592 | ||
593 | if (R__b.IsReading()) { | |
594 | Version_t R__v = R__b.ReadVersion(); if (R__v) { } | |
595 | AliDetector::Streamer(R__b); | |
596 | R__b >> fGasMix; | |
597 | R__b >> fGeometry; | |
598 | // Stream the pointers but not the TClonesArray | |
599 | R__b >> fRecPoints; // diff | |
600 | } | |
601 | else { | |
602 | R__b.WriteVersion(AliTRD::IsA()); | |
603 | AliDetector::Streamer(R__b); | |
604 | R__b << fGasMix; | |
605 | R__b << fGeometry; | |
606 | // Stream the pointers but not the TClonesArrays | |
607 | R__b << fRecPoints; // diff | |
608 | } | |
5c7f4665 | 609 | |
610 | } | |
611 | ||
fe4da5cc | 612 | ClassImp(AliTRDhit) |
613 | ||
614 | //_____________________________________________________________________________ | |
851d3db9 | 615 | AliTRDhit::AliTRDhit(Int_t shunt, Int_t track, Int_t det, Float_t *hits) |
5c7f4665 | 616 | :AliHit(shunt, track) |
fe4da5cc | 617 | { |
618 | // | |
619 | // Create a TRD hit | |
620 | // | |
621 | ||
fe4da5cc | 622 | // Store volume hierarchy |
851d3db9 | 623 | fDetector = det; |
82bbf98a | 624 | |
851d3db9 | 625 | // Store position and charge |
626 | fX = hits[0]; | |
627 | fY = hits[1]; | |
628 | fZ = hits[2]; | |
629 | fQ = hits[3]; | |
5c7f4665 | 630 | |
631 | } | |
632 |