]>
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 | **************************************************************************/ | |
b2a60966 | 15 | /* $Id$ */ |
16 | ||
d15a28e7 | 17 | //_________________________________________________________________________ |
b2a60966 | 18 | // Base Class for PHOS description: |
19 | // PHOS consists of a PbWO4 calorimeter (EMCA) and a gazeous charged | |
20 | // particles detector (CPV or PPSD). | |
21 | // The only provided method here is CreateMaterials, | |
22 | // which defines the materials common to all PHOS versions. | |
23 | // | |
24 | //*-- Author: Laurent Aphecetche & Yves Schutz (SUBATECH) | |
d15a28e7 | 25 | ////////////////////////////////////////////////////////////////////////////// |
e84be1eb | 26 | |
fdeead01 | 27 | |
fe4da5cc | 28 | // --- ROOT system --- |
2ab0c725 | 29 | class TFile; |
88cb7938 | 30 | #include <TFolder.h> |
88cb7938 | 31 | #include <TTree.h> |
32 | #include <TVirtualMC.h> | |
fe4da5cc | 33 | |
34 | // --- Standard library --- | |
d15a28e7 | 35 | |
548f0134 | 36 | // --- AliRoot header files --- |
94de3818 | 37 | #include "AliMagF.h" |
06e774ed | 38 | #include "AliESDtrack.h" |
8367ce9a | 39 | #include "AliESD.h" |
88cb7938 | 40 | #include "AliPHOS.h" |
8367ce9a | 41 | #include "AliPHOSGetter.h" |
85a5290f | 42 | #include "AliPHOSQAChecker.h" |
43 | #include "AliRun.h" | |
44 | #include "AliPHOSDigitizer.h" | |
45 | #include "AliPHOSSDigitizer.h" | |
f444a19f | 46 | #include "AliPHOSReconstructor.h" |
fe4da5cc | 47 | ClassImp(AliPHOS) |
0ce0b56f | 48 | //____________________________________________________________________________ |
6b87d0dd | 49 | AliPHOS:: AliPHOS() : AliDetector() |
50 | { | |
a532e9d8 | 51 | // Default ctor |
6b87d0dd | 52 | fName="PHOS"; |
2685bf00 | 53 | fQATask = 0; |
54 | fTreeQA = 0; | |
c43bf9a2 | 55 | fDebug = kFALSE ; |
6b87d0dd | 56 | } |
fa7cce36 | 57 | |
6b87d0dd | 58 | //____________________________________________________________________________ |
fa7cce36 | 59 | AliPHOS::AliPHOS(const char* name, const char* title): AliDetector(name, title) |
6b87d0dd | 60 | { |
a532e9d8 | 61 | // ctor : title is used to identify the layout |
62 | ||
2685bf00 | 63 | fQATask = 0; |
64 | fTreeQA = 0; | |
c43bf9a2 | 65 | fDebug = kFALSE ; |
6b87d0dd | 66 | } |
fa7cce36 | 67 | |
0ce0b56f | 68 | //____________________________________________________________________________ |
7b326aac | 69 | AliPHOS::~AliPHOS() |
70 | { | |
a532e9d8 | 71 | |
0ce0b56f | 72 | } |
73 | ||
780fda6d | 74 | //____________________________________________________________________________ |
75 | void AliPHOS::Copy(AliPHOS & phos) | |
76 | { | |
77 | TObject::Copy(phos) ; | |
78 | // fQATask = AliPHOSQAChecker::Copy(*(phos.fQATask)) ; | |
79 | phos.fTreeQA = fTreeQA->CloneTree() ; | |
80 | } | |
81 | ||
8367ce9a | 82 | //____________________________________________________________________________ |
83 | AliDigitizer* AliPHOS::CreateDigitizer(AliRunDigitizer* manager) const | |
84 | { | |
85 | return new AliPHOSDigitizer(manager); | |
86 | } | |
87 | ||
d15a28e7 | 88 | //____________________________________________________________________________ |
fe4da5cc | 89 | void AliPHOS::CreateMaterials() |
90 | { | |
b2a60966 | 91 | // Definitions of materials to build PHOS and associated tracking media. |
92 | // media number in idtmed are 699 to 798. | |
fe4da5cc | 93 | |
d15a28e7 | 94 | // --- The PbWO4 crystals --- |
92862013 | 95 | Float_t aX[3] = {207.19, 183.85, 16.0} ; |
96 | Float_t zX[3] = {82.0, 74.0, 8.0} ; | |
97 | Float_t wX[3] = {1.0, 1.0, 4.0} ; | |
98 | Float_t dX = 8.28 ; | |
fe4da5cc | 99 | |
92862013 | 100 | AliMixture(0, "PbWO4$", aX, zX, dX, -3, wX) ; |
fe4da5cc | 101 | |
fe4da5cc | 102 | |
d15a28e7 | 103 | // --- The polysterene scintillator (CH) --- |
92862013 | 104 | Float_t aP[2] = {12.011, 1.00794} ; |
105 | Float_t zP[2] = {6.0, 1.0} ; | |
106 | Float_t wP[2] = {1.0, 1.0} ; | |
107 | Float_t dP = 1.032 ; | |
fe4da5cc | 108 | |
92862013 | 109 | AliMixture(1, "Polystyrene$", aP, zP, dP, -2, wP) ; |
fe4da5cc | 110 | |
d15a28e7 | 111 | // --- Aluminium --- |
112 | AliMaterial(2, "Al$", 26.98, 13., 2.7, 8.9, 999., 0, 0) ; | |
113 | // --- Absorption length is ignored ^ | |
fe4da5cc | 114 | |
d15a28e7 | 115 | // --- Tyvek (CnH2n) --- |
92862013 | 116 | Float_t aT[2] = {12.011, 1.00794} ; |
117 | Float_t zT[2] = {6.0, 1.0} ; | |
118 | Float_t wT[2] = {1.0, 2.0} ; | |
119 | Float_t dT = 0.331 ; | |
fe4da5cc | 120 | |
92862013 | 121 | AliMixture(3, "Tyvek$", aT, zT, dT, -2, wT) ; |
fe4da5cc | 122 | |
d15a28e7 | 123 | // --- Polystyrene foam --- |
92862013 | 124 | Float_t aF[2] = {12.011, 1.00794} ; |
125 | Float_t zF[2] = {6.0, 1.0} ; | |
126 | Float_t wF[2] = {1.0, 1.0} ; | |
127 | Float_t dF = 0.12 ; | |
fe4da5cc | 128 | |
92862013 | 129 | AliMixture(4, "Foam$", aF, zF, dF, -2, wF) ; |
fe4da5cc | 130 | |
d15a28e7 | 131 | // --- Titanium --- |
92862013 | 132 | Float_t aTIT[3] = {47.88, 26.98, 54.94} ; |
133 | Float_t zTIT[3] = {22.0, 13.0, 25.0} ; | |
134 | Float_t wTIT[3] = {69.0, 6.0, 1.0} ; | |
135 | Float_t dTIT = 4.5 ; | |
fe4da5cc | 136 | |
92862013 | 137 | AliMixture(5, "Titanium$", aTIT, zTIT, dTIT, -3, wTIT); |
fe4da5cc | 138 | |
d15a28e7 | 139 | // --- Silicon --- |
140 | AliMaterial(6, "Si$", 28.0855, 14., 2.33, 9.36, 42.3, 0, 0) ; | |
fe4da5cc | 141 | |
fe4da5cc | 142 | |
fe4da5cc | 143 | |
d15a28e7 | 144 | // --- Foam thermo insulation --- |
92862013 | 145 | Float_t aTI[2] = {12.011, 1.00794} ; |
146 | Float_t zTI[2] = {6.0, 1.0} ; | |
147 | Float_t wTI[2] = {1.0, 1.0} ; | |
85218d13 | 148 | Float_t dTI = 0.04 ; |
fe4da5cc | 149 | |
92862013 | 150 | AliMixture(7, "Thermo Insul.$", aTI, zTI, dTI, -2, wTI) ; |
fe4da5cc | 151 | |
d15a28e7 | 152 | // --- Textolitn --- |
92862013 | 153 | Float_t aTX[4] = {16.0, 28.09, 12.011, 1.00794} ; |
154 | Float_t zTX[4] = {8.0, 14.0, 6.0, 1.0} ; | |
155 | Float_t wTX[4] = {292.0, 68.0, 462.0, 736.0} ; | |
156 | Float_t dTX = 1.75 ; | |
fe4da5cc | 157 | |
92862013 | 158 | AliMixture(8, "Textolit$", aTX, zTX, dTX, -4, wTX) ; |
fe4da5cc | 159 | |
d15a28e7 | 160 | //--- FR4 --- |
92862013 | 161 | Float_t aFR[3] = {28.0855, 15.9994, 17.749} ; |
162 | Float_t zFR[3] = {14., 8., 8.875} ; | |
163 | Float_t wFR[3] = {.28, .32, .4} ; | |
164 | Float_t dFR = 1.8 ; | |
fe4da5cc | 165 | |
92862013 | 166 | AliMixture(9, "FR4$", aFR, zFR, dFR, -3, wFR) ; |
fe4da5cc | 167 | |
d15a28e7 | 168 | // --- The Composite Material for micromegas (so far polyetylene) --- |
92862013 | 169 | Float_t aCM[2] = {12.01, 1.} ; |
170 | Float_t zCM[2] = {6., 1.} ; | |
171 | Float_t wCM[2] = {1., 2.} ; | |
172 | Float_t dCM = 0.935 ; | |
fe4da5cc | 173 | |
92862013 | 174 | AliMixture(10, "Compo Mat$", aCM, zCM, dCM, -2, wCM) ; |
fe4da5cc | 175 | |
d15a28e7 | 176 | // --- Copper --- |
177 | AliMaterial(11, "Cu$", 63.546, 29, 8.96, 1.43, 14.8, 0, 0) ; | |
178 | ||
179 | // --- G10 : Printed Circuit material --- | |
92862013 | 180 | Float_t aG10[4] = { 12., 1., 16., 28.} ; |
181 | Float_t zG10[4] = { 6., 1., 8., 14.} ; | |
182 | Float_t wG10[4] = { .259, .288, .248, .205} ; | |
183 | Float_t dG10 = 1.7 ; | |
d15a28e7 | 184 | |
92862013 | 185 | AliMixture(12, "G10$", aG10, zG10, dG10, -4, wG10); |
fe4da5cc | 186 | |
d15a28e7 | 187 | // --- Lead --- |
188 | AliMaterial(13, "Pb$", 207.2, 82, 11.35, 0.56, 0., 0, 0) ; | |
fe4da5cc | 189 | |
d15a28e7 | 190 | // --- The gas mixture --- |
191 | // Co2 | |
92862013 | 192 | Float_t aCO[2] = {12.0, 16.0} ; |
193 | Float_t zCO[2] = {6.0, 8.0} ; | |
194 | Float_t wCO[2] = {1.0, 2.0} ; | |
195 | Float_t dCO = 0.001977 ; | |
fe4da5cc | 196 | |
92862013 | 197 | AliMixture(14, "CO2$", aCO, zCO, dCO, -2, wCO); |
fe4da5cc | 198 | |
d15a28e7 | 199 | // Ar |
92862013 | 200 | Float_t dAr = 0.001782 ; |
201 | AliMaterial(15, "Ar$", 39.948, 18.0, dAr, 14.0, 0., 0, 0) ; | |
d15a28e7 | 202 | |
203 | // ArCo2 | |
00d6d986 | 204 | Char_t namate[21]=""; |
92862013 | 205 | Float_t aGM[2] ; |
206 | Float_t zGM[2] ; | |
207 | Float_t wGM[2] ; | |
208 | Float_t dGM ; | |
fe4da5cc | 209 | |
92862013 | 210 | Float_t absL, radL, density ; |
d15a28e7 | 211 | Float_t buf[1] ; |
212 | Int_t nbuf ; | |
bc9ab547 | 213 | |
92862013 | 214 | gMC->Gfmate((*fIdmate)[15], namate, aGM[0], zGM[0], density, radL, absL, buf, nbuf) ; // Get properties of Ar |
215 | gMC->Gfmate((*fIdmate)[14], namate, aGM[1], zGM[1], density, radL, absL, buf, nbuf) ; // Get properties of CO2 | |
bc9ab547 | 216 | |
fe4da5cc | 217 | |
d15a28e7 | 218 | // Create gas mixture |
fe4da5cc | 219 | |
92862013 | 220 | Float_t arContent = 0.80 ; // Ar-content of the Ar/CO2-mixture (80% / 20%) |
d15a28e7 | 221 | |
92862013 | 222 | wGM[0] = arContent; |
223 | wGM[1] = 1. - arContent ; | |
224 | dGM = wGM[0] * dAr + wGM[1] * dCO; | |
fe4da5cc | 225 | |
92862013 | 226 | AliMixture(16, "ArCO2$", aGM, zGM, dGM, 2, wGM) ; |
fe4da5cc | 227 | |
a530ba0a | 228 | // --- Stainless steel (let it be pure iron) --- |
229 | AliMaterial(17, "Steel$", 55.845, 26, 7.87, 1.76, 0., 0, 0) ; | |
85218d13 | 230 | |
231 | ||
232 | // --- Fiberglass --- | |
233 | Float_t aFG[4] = {16.0, 28.09, 12.011, 1.00794} ; | |
234 | Float_t zFG[4] = {8.0, 14.0, 6.0, 1.0} ; | |
235 | Float_t wFG[4] = {292.0, 68.0, 462.0, 736.0} ; | |
236 | Float_t dFG = 1.9 ; | |
237 | ||
238 | AliMixture(18, "Fibergla$", aFG, zFG, dFG, -4, wFG) ; | |
239 | ||
240 | // --- Cables in Air box --- | |
241 | // SERVICES | |
242 | ||
243 | Float_t aCA[4] = { 1.,12.,55.8,63.5 }; | |
244 | Float_t zCA[4] = { 1.,6.,26.,29. }; | |
245 | Float_t wCA[4] = { .014,.086,.42,.48 }; | |
246 | Float_t dCA = 0.8 ; //this density is raw estimation, if you know better - correct | |
247 | ||
248 | AliMixture(19, "Cables $", aCA, zCA, dCA, -4, wCA) ; | |
249 | ||
250 | ||
251 | ||
d15a28e7 | 252 | |
253 | // --- Air --- | |
254 | AliMaterial(99, "Air$", 14.61, 7.3, 0.001205, 30420., 67500., 0, 0) ; | |
fe4da5cc | 255 | |
d15a28e7 | 256 | |
257 | // DEFINITION OF THE TRACKING MEDIA | |
fe4da5cc | 258 | |
d15a28e7 | 259 | // for PHOS: idtmed[699->798] equivalent to fIdtmed[0->100] |
260 | Int_t * idtmed = fIdtmed->GetArray() - 699 ; | |
92862013 | 261 | Int_t isxfld = gAlice->Field()->Integ() ; |
262 | Float_t sxmgmx = gAlice->Field()->Max() ; | |
fe4da5cc | 263 | |
d15a28e7 | 264 | // The scintillator of the calorimeter made of PBW04 -> idtmed[699] |
265 | AliMedium(0, "PHOS Xtal $", 0, 1, | |
92862013 | 266 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 267 | |
d15a28e7 | 268 | // The scintillator of the CPV made of Polystyrene scintillator -> idtmed[700] |
269 | AliMedium(1, "CPV scint. $", 1, 1, | |
92862013 | 270 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 271 | |
d15a28e7 | 272 | // Various Aluminium parts made of Al -> idtmed[701] |
273 | AliMedium(2, "Al parts $", 2, 0, | |
92862013 | 274 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ; |
fe4da5cc | 275 | |
d15a28e7 | 276 | // The Tywek which wraps the calorimeter crystals -> idtmed[702] |
277 | AliMedium(3, "Tyvek wrapper$", 3, 0, | |
92862013 | 278 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.001, 0.001, 0, 0) ; |
fe4da5cc | 279 | |
d15a28e7 | 280 | // The Polystyrene foam around the calorimeter module -> idtmed[703] |
281 | AliMedium(4, "Polyst. foam $", 4, 0, | |
92862013 | 282 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 283 | |
d15a28e7 | 284 | // The Titanium around the calorimeter crystal -> idtmed[704] |
285 | AliMedium(5, "Titan. cover $", 5, 0, | |
92862013 | 286 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.0001, 0.0001, 0, 0) ; |
fe4da5cc | 287 | |
d15a28e7 | 288 | // The Silicon of the pin diode to read out the calorimeter crystal -> idtmed[705] |
289 | AliMedium(6, "Si PIN $", 6, 0, | |
7b326aac | 290 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.01, 0.01, 0, 0) ; |
fe4da5cc | 291 | |
d15a28e7 | 292 | // The thermo insulating material of the box which contains the calorimeter module -> idtmed[706] |
293 | AliMedium(7, "Thermo Insul.$", 7, 0, | |
92862013 | 294 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 295 | |
d15a28e7 | 296 | // The Textolit which makes up the box which contains the calorimeter module -> idtmed[707] |
297 | AliMedium(8, "Textolit $", 8, 0, | |
92862013 | 298 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 299 | |
d15a28e7 | 300 | // FR4: The Plastic which makes up the frame of micromegas -> idtmed[708] |
301 | AliMedium(9, "FR4 $", 9, 0, | |
92862013 | 302 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.0001, 0, 0) ; |
fe4da5cc | 303 | |
fe4da5cc | 304 | |
d15a28e7 | 305 | // The Composite Material for micromegas -> idtmed[709] |
306 | AliMedium(10, "CompoMat $", 10, 0, | |
92862013 | 307 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 308 | |
d15a28e7 | 309 | // Copper -> idtmed[710] |
310 | AliMedium(11, "Copper $", 11, 0, | |
92862013 | 311 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.0001, 0, 0) ; |
fe4da5cc | 312 | |
d15a28e7 | 313 | // G10: Printed Circuit material -> idtmed[711] |
314 | ||
315 | AliMedium(12, "G10 $", 12, 0, | |
92862013 | 316 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.01, 0, 0) ; |
fe4da5cc | 317 | |
d15a28e7 | 318 | // The Lead -> idtmed[712] |
319 | ||
320 | AliMedium(13, "Lead $", 13, 0, | |
92862013 | 321 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; |
fe4da5cc | 322 | |
d15a28e7 | 323 | // The gas mixture: ArCo2 -> idtmed[715] |
324 | ||
325 | AliMedium(16, "ArCo2 $", 16, 1, | |
92862013 | 326 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.01, 0, 0) ; |
d15a28e7 | 327 | |
a530ba0a | 328 | // Stainless steel -> idtmed[716] |
329 | AliMedium(17, "Steel $", 17, 0, | |
330 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.0001, 0, 0) ; | |
331 | ||
85218d13 | 332 | // Fibergalss -> idtmed[717] |
333 | AliMedium(18, "Fiberglass$", 18, 0, | |
334 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; | |
335 | ||
336 | // Cables in air -> idtmed[718] | |
337 | AliMedium(19, "Cables $", 19, 0, | |
338 | isxfld, sxmgmx, 10.0, 0.1, 0.1, 0.1, 0.1, 0, 0) ; | |
339 | ||
d15a28e7 | 340 | // Air -> idtmed[798] |
341 | AliMedium(99, "Air $", 99, 0, | |
92862013 | 342 | isxfld, sxmgmx, 10.0, 1.0, 0.1, 0.1, 10.0, 0, 0) ; |
fe4da5cc | 343 | |
d15a28e7 | 344 | // --- Set decent energy thresholds for gamma and electron tracking |
fe4da5cc | 345 | |
d15a28e7 | 346 | // Tracking threshold for photons and electrons in the scintillator crystal |
347 | gMC->Gstpar(idtmed[699], "CUTGAM",0.5E-4) ; | |
348 | gMC->Gstpar(idtmed[699], "CUTELE",1.0E-4) ; | |
9f616d61 | 349 | |
d15a28e7 | 350 | // --- Generate explicitly delta rays in the titan cover --- |
351 | gMC->Gstpar(idtmed[704], "LOSS",3.) ; | |
352 | gMC->Gstpar(idtmed[704], "DRAY",1.) ; | |
d15a28e7 | 353 | // --- and in aluminium parts --- |
354 | gMC->Gstpar(idtmed[701], "LOSS",3.) ; | |
355 | gMC->Gstpar(idtmed[701], "DRAY",1.) ; | |
92862013 | 356 | // --- and in PIN diode |
357 | gMC->Gstpar(idtmed[705], "LOSS",3) ; | |
358 | gMC->Gstpar(idtmed[705], "DRAY",1) ; | |
359 | // --- and in the passive convertor | |
360 | gMC->Gstpar(idtmed[712], "LOSS",3) ; | |
361 | gMC->Gstpar(idtmed[712], "DRAY",1) ; | |
362 | // Tracking threshold for photons and electrons in the gas ArC02 | |
b7101219 | 363 | gMC->Gstpar(idtmed[715], "CUTGAM",1.E-5) ; |
364 | gMC->Gstpar(idtmed[715], "CUTELE",1.E-5) ; | |
365 | gMC->Gstpar(idtmed[715], "CUTNEU",1.E-5) ; | |
366 | gMC->Gstpar(idtmed[715], "CUTHAD",1.E-5) ; | |
367 | gMC->Gstpar(idtmed[715], "CUTMUO",1.E-5) ; | |
368 | gMC->Gstpar(idtmed[715], "BCUTE",1.E-5) ; | |
369 | gMC->Gstpar(idtmed[715], "BCUTM",1.E-5) ; | |
370 | gMC->Gstpar(idtmed[715], "DCUTE",1.E-5) ; | |
371 | gMC->Gstpar(idtmed[715], "DCUTM",1.E-5) ; | |
372 | gMC->Gstpar(idtmed[715], "PPCUTM",1.E-5) ; | |
9f616d61 | 373 | gMC->Gstpar(idtmed[715], "LOSS",2.) ; |
374 | gMC->Gstpar(idtmed[715], "DRAY",0.) ; | |
375 | gMC->Gstpar(idtmed[715], "STRA",2.) ; | |
376 | ||
0c409cb2 | 377 | } |
a532e9d8 | 378 | |
fa7cce36 | 379 | //____________________________________________________________________________ |
8367ce9a | 380 | void AliPHOS::FillESD(AliESD* esd) const |
381 | { | |
06e774ed | 382 | // Called by AliReconstruct after Reconstruct() and global tracking and vertxing |
383 | ||
384 | //Creates the tracksegments and Recparticles | |
f444a19f | 385 | AliPHOSReconstructor * rec = new AliPHOSReconstructor((fLoader->GetRunLoader()->GetFileName()).Data()) ; |
06e774ed | 386 | TList * taskslist = rec->GetListOfTasks() ; |
387 | Int_t index ; | |
388 | TTask * task ; | |
389 | TString name ; | |
34d59a98 | 390 | // set clusterizer task inactive |
06e774ed | 391 | for (index = 0; index < taskslist->GetSize(); index++) { |
392 | task = dynamic_cast<TTask *>(taskslist->At(index)) ; | |
393 | name = task->GetName() ; | |
e191bb57 | 394 | if ( name.Contains(AliConfig::Instance()->GetReconstructionerTaskName())) |
06e774ed | 395 | task->SetActive(kFALSE) ; |
e191bb57 | 396 | if ( name.Contains(AliConfig::Instance()->GetTrackerTaskName())) |
06e774ed | 397 | (dynamic_cast<AliPHOSTrackSegmentMaker *> (task))->SetESD(esd) ; |
398 | } | |
395f4eea | 399 | |
400 | AliPHOSGetter *gime = AliPHOSGetter::Instance( (fLoader->GetRunLoader()->GetFileName()).Data() ) ; | |
401 | Int_t eventNumber = gime->EventNumber(); | |
c43bf9a2 | 402 | rec->SetEventRange(eventNumber, eventNumber) ; // do current event; the loop over events is done by AliReconstruction::Run() |
403 | if ( Debug() ) | |
404 | rec->ExecuteTask("deb all") ; | |
405 | else | |
406 | rec->ExecuteTask("") ; | |
06e774ed | 407 | |
408 | // Creates AliESDtrack from AliPHOSRecParticles | |
395f4eea | 409 | gime->Event(eventNumber, "P") ; |
8367ce9a | 410 | TClonesArray *recParticles = gime->RecParticles(); |
411 | Int_t nOfRecParticles = recParticles->GetEntries(); | |
06e774ed | 412 | for (Int_t recpart = 0 ; recpart < nOfRecParticles ; recpart++) { |
413 | AliPHOSRecParticle * rp = dynamic_cast<AliPHOSRecParticle*>(recParticles->At(recpart)); | |
c43bf9a2 | 414 | if (Debug()) |
415 | rp->Print(); | |
06e774ed | 416 | AliESDtrack * et = new AliESDtrack() ; |
417 | // fills the ESDtrack | |
418 | Double_t xyz[3]; | |
419 | for (Int_t ixyz=0; ixyz<3; ixyz++) xyz[ixyz] = rp->GetPos()[ixyz]; | |
420 | et->SetPHOSposition(xyz) ; | |
421 | et->SetPHOSsignal (rp->Energy()) ; | |
c43bf9a2 | 422 | et->SetPHOSpid (rp->GetPID()) ; |
06e774ed | 423 | // add the track to the esd object |
424 | esd->AddTrack(et); | |
425 | delete et; | |
8367ce9a | 426 | } |
8367ce9a | 427 | } |
7a9d98f9 | 428 | |
8367ce9a | 429 | //____________________________________________________________________________ |
430 | void AliPHOS::Hits2SDigits() | |
431 | { | |
432 | // create summable digits | |
433 | ||
434 | AliPHOSSDigitizer* phosDigitizer = | |
da480a28 | 435 | new AliPHOSSDigitizer(fLoader->GetRunLoader()->GetFileName().Data()) ; |
436 | phosDigitizer->SetEventRange(0, -1) ; // do all the events | |
437 | phosDigitizer->ExecuteTask("all") ; | |
8367ce9a | 438 | } |
439 | ||
440 | //____________________________________________________________________________ | |
441 | AliLoader* AliPHOS::MakeLoader(const char* topfoldername) | |
442 | { | |
443 | //different behaviour than standard (singleton getter) | |
444 | // --> to be discussed and made eventually coherent | |
445 | fLoader = new AliPHOSLoader(GetName(),topfoldername); | |
446 | return fLoader; | |
fa7cce36 | 447 | } |
448 | ||
0c409cb2 | 449 | //____________________________________________________________________________ |
2ea4f4fc | 450 | void AliPHOS::SetTreeAddress() |
451 | { | |
e957fea8 | 452 | // Links Hits in the Tree to Hits array |
ad8cfaf4 | 453 | TBranch *branch; |
454 | char branchname[20]; | |
455 | sprintf(branchname,"%s",GetName()); | |
3247125a | 456 | |
ad8cfaf4 | 457 | // Branch address for hit tree |
88cb7938 | 458 | TTree *treeH = TreeH(); |
459 | if (treeH) { | |
ad8cfaf4 | 460 | branch = treeH->GetBranch(branchname); |
88cb7938 | 461 | if (branch) |
462 | { | |
463 | if (fHits == 0x0) fHits= new TClonesArray("AliPHOSHit",1000); | |
464 | //Info("SetTreeAddress","<%s> Setting Hits Address",GetName()); | |
465 | branch->SetAddress(&fHits); | |
466 | } | |
ad8cfaf4 | 467 | } |
0c409cb2 | 468 | } |
469 | ||
8367ce9a | 470 | //____________________________________________________________________________ |
471 | void AliPHOS::Reconstruct() const | |
472 | { | |
06e774ed | 473 | // method called by AliReconstruction; it should not be called otherwise but the AliPHOSReconstructionner |
474 | // should be called for stand alone reconstruction. | |
475 | // Only the clusterization is performed,; the rest of the reconstruction is done in FillESD because the track | |
476 | // segment maker needs access to the AliESD object to retrieve the tracks reconstructed by | |
477 | // the global tracking. | |
478 | ||
f444a19f | 479 | AliPHOSReconstructor * rec = new AliPHOSReconstructor((fLoader->GetRunLoader()->GetFileName()).Data()) ; |
06e774ed | 480 | TList * taskslist = rec->GetListOfTasks() ; |
481 | Int_t index ; | |
482 | TTask * task ; | |
483 | TString name ; | |
484 | // set all tasks inactive except clusterizer | |
485 | for (index = 0; index < taskslist->GetSize(); index++) { | |
486 | task = dynamic_cast<TTask *>(taskslist->At(index)) ; | |
487 | name = task->GetName() ; | |
e191bb57 | 488 | if ( !name.Contains(AliConfig::Instance()->GetReconstructionerTaskName())) |
06e774ed | 489 | task->SetActive(kFALSE) ; |
490 | } | |
491 | rec->SetEventRange(0, -1) ; // do all the events | |
c43bf9a2 | 492 | if ( Debug() ) |
493 | rec->ExecuteTask("deb all") ; | |
494 | else | |
495 | rec->ExecuteTask("") ; | |
496 | ||
8367ce9a | 497 | } |
498 | ||
7b7c1533 | 499 | //____________________________________________________________________________ |
500 | void AliPHOS::WriteQA() | |
501 | { | |
502 | ||
503 | // Make TreeQA in the output file. | |
88cb7938 | 504 | |
7b7c1533 | 505 | if(fTreeQA == 0) |
506 | fTreeQA = new TTree("TreeQA", "QA Alarms") ; | |
507 | // Create Alarms branches | |
508 | Int_t bufferSize = 32000 ; | |
509 | Int_t splitlevel = 0 ; | |
88cb7938 | 510 | |
511 | TFolder* topfold = GetLoader()->GetTopFolder(); //get top aliroot folder; skowron | |
512 | TString phosqafn(AliConfig::Instance()->GetQAFolderName()+"/"); //get name of QAaut folder relative to top event; skowron | |
513 | phosqafn+=GetName(); //hard wired string!!! add the detector name to the pathname; skowron | |
514 | TFolder * alarmsF = (TFolder*)topfold->FindObjectAny(phosqafn); //get the folder | |
515 | ||
516 | if (alarmsF == 0x0) | |
517 | { | |
518 | Error("WriteQA","Can not find folder with qa alarms"); | |
519 | return; | |
520 | } | |
521 | TString branchName(alarmsF->GetName()); | |
7b7c1533 | 522 | TBranch * alarmsBranch = fTreeQA->Branch(branchName,"TFolder", &alarmsF, bufferSize, splitlevel); |
523 | TString branchTitle = branchName + " QA alarms" ; | |
524 | alarmsBranch->SetTitle(branchTitle); | |
525 | alarmsBranch->Fill() ; | |
526 | ||
7a9d98f9 | 527 | //fTreeQA->Fill() ; |
7b7c1533 | 528 | } |