7587f5a5 |
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 | |
b2a60966 |
16 | /* $Id$ */ |
17 | |
7587f5a5 |
18 | //_________________________________________________________________________ |
b2a60966 |
19 | // Implementation version v0 of PHOS Manager class |
20 | // Layout EMC + PPSD has name GPS2 |
21 | // The main goal of this version of AliPHOS is to calculte the |
22 | // induced charged in the PIN diode, taking into account light |
23 | // tracking in the PbWO4 crystal, induced signal in the |
24 | // PIN due to MIPS particle and electronic noise. |
25 | // This is done in the StepManager |
26 | // |
27 | //*-- Author: Odd Harald Oddland & Gines Martinez (SUBATECH) |
28 | |
7587f5a5 |
29 | |
30 | // --- ROOT system --- |
31 | #include "TRandom.h" |
32 | |
33 | // --- Standard library --- |
34 | |
de9ec31b |
35 | #include <stdio.h> |
36 | #include <string.h> |
37 | #include <stdlib.h> |
38 | #include <strstream.h> |
7587f5a5 |
39 | |
40 | // --- AliRoot header files --- |
41 | |
42 | #include "AliPHOSv1.h" |
43 | #include "AliPHOSHit.h" |
44 | #include "AliPHOSDigit.h" |
45 | #include "AliRun.h" |
46 | #include "AliConst.h" |
47 | |
48 | ClassImp(AliPHOSv1) |
49 | |
7587f5a5 |
50 | //____________________________________________________________________________ |
51 | AliPHOSv1::AliPHOSv1(const char *name, const char *title): |
52 | AliPHOSv0(name,title) |
53 | { |
b2a60966 |
54 | // ctor |
55 | |
56 | // Number of electrons created in the PIN due to light collected in the PbWo4 crystal is calculated using |
57 | // following formula |
58 | // NumberOfElectrons = EnergyLost * LightYield * PINEfficiency * |
59 | // exp (-LightYieldAttenuation * DistanceToPINdiodeFromTheHit) * |
60 | // RecalibrationFactor ; |
61 | // LightYield is obtained as a Poissonian distribution with a mean at 700000 photons per GeV fromValery Antonenko |
62 | // PINEfficiency is 0.1875 from Odd Harald Odland work |
63 | // k_0 is 0.0045 from Valery Antonenko |
64 | |
7587f5a5 |
65 | fLightYieldMean = 700000. ; |
66 | fIntrinsicPINEfficiency = 0.1875 ; |
67 | fLightYieldAttenuation = 0.0045 ; |
68 | fRecalibrationFactor = 6.2 / fLightYieldMean ; |
4dea8d96 |
69 | fElectronsPerGeV = 2.77e+8 ; |
7587f5a5 |
70 | } |
b2a60966 |
71 | |
7587f5a5 |
72 | //____________________________________________________________________________ |
73 | AliPHOSv1::AliPHOSv1(AliPHOSReconstructioner * Reconstructioner, const char *name, const char *title): |
74 | AliPHOSv0(Reconstructioner,name,title) |
b2a60966 |
75 | { |
76 | // ctor |
77 | |
78 | // Number of electrons created in the PIN due to light collected in the PbWo4 crystal is calculated using |
79 | // following formula |
80 | // NumberOfElectrons = EnergyLost * LightYield * PINEfficiency * |
81 | // exp (-LightYieldAttenuation * DistanceToPINdiodeFromTheHit) * |
82 | // RecalibrationFactor ; |
83 | // LightYield is obtained as a Poissonian distribution with a mean at 700000 photons per GeV fromValery Antonenko |
84 | // PINEfficiency is 0.1875 from Odd Harald Odland work |
85 | // k_0 is 0.0045 from Valery Antonenko |
86 | |
7587f5a5 |
87 | fLightYieldMean = 700000.; |
88 | fIntrinsicPINEfficiency = 0.1875 ; |
89 | fLightYieldAttenuation = 0.0045 ; |
90 | fRecalibrationFactor = 6.2 / fLightYieldMean ; |
b2a60966 |
91 | fElectronsPerGeV = 2.77e+8 ; |
7587f5a5 |
92 | } |
93 | |
7587f5a5 |
94 | //____________________________________________________________________________ |
95 | void AliPHOSv1::StepManager(void) |
96 | { |
b2a60966 |
97 | // Accumulates hits as long as the track stays in a single crystal or PPSD gas Cell |
98 | // Adds the energy deposited in the PIN diode |
99 | |
7587f5a5 |
100 | Int_t relid[4] ; // (box, layer, row, column) indices |
101 | Float_t xyze[4] ; // position wrt MRS and energy deposited |
102 | TLorentzVector pos ; |
103 | Int_t copy; |
b2a60966 |
104 | Float_t lightyield ; // Light Yield per GeV |
105 | Float_t nElectrons ; // Number of electrons in the PIN diode |
7587f5a5 |
106 | TString name = fGeom->GetName() ; |
107 | Float_t global[3] ; |
108 | Float_t local[3] ; |
109 | Float_t lostenergy ; |
110 | |
457ebb6e |
111 | Int_t primary = gAlice->GetPrimary( gAlice->CurrentTrack() ); |
112 | |
7587f5a5 |
113 | if ( name == "GPS2" ) { // the CPV is a PPSD |
b2a60966 |
114 | if( gMC->CurrentVolID(copy) == gMC->VolId("GCEL") ) // We are inside a gas cell |
7587f5a5 |
115 | { |
116 | gMC->TrackPosition(pos) ; |
117 | xyze[0] = pos[0] ; |
118 | xyze[1] = pos[1] ; |
119 | xyze[2] = pos[2] ; |
120 | xyze[3] = gMC->Edep() ; |
121 | |
122 | |
123 | if ( xyze[3] != 0 ) { // there is deposited energy |
124 | gMC->CurrentVolOffID(5, relid[0]) ; // get the PHOS Module number |
125 | gMC->CurrentVolOffID(3, relid[1]) ; // get the Micromegas Module number |
126 | // 1-> Geom->GetNumberOfModulesPhi() * fGeom->GetNumberOfModulesZ() upper |
127 | // > fGeom->GetNumberOfModulesPhi() * fGeom->GetNumberOfModulesZ() lower |
128 | gMC->CurrentVolOffID(1, relid[2]) ; // get the row number of the cell |
129 | gMC->CurrentVolID(relid[3]) ; // get the column number |
130 | |
131 | // get the absolute Id number |
132 | |
133 | Int_t absid ; |
134 | fGeom->RelToAbsNumbering(relid,absid) ; |
135 | |
136 | |
457ebb6e |
137 | AddHit(primary, absid, xyze ); |
7587f5a5 |
138 | |
139 | } // there is deposited energy |
140 | } // We are inside the gas of the CPV |
141 | } // GPS2 configuration |
142 | |
b2a60966 |
143 | if(gMC->CurrentVolID(copy) == gMC->VolId("PXTL") )// We are inside a PBWO crystal |
7587f5a5 |
144 | { |
145 | gMC->TrackPosition(pos) ; |
146 | xyze[0] = pos[0] ; |
147 | xyze[1] = pos[1] ; |
148 | xyze[2] = pos[2] ; |
149 | lostenergy = gMC->Edep() ; |
a333c916 |
150 | xyze[3] = gMC->Edep() ; |
7587f5a5 |
151 | |
152 | global[0] = pos[0] ; |
153 | global[1] = pos[1] ; |
154 | global[2] = pos[2] ; |
155 | |
156 | if ( xyze[3] != 0 ) { |
157 | gMC->CurrentVolOffID(10, relid[0]) ; // get the PHOS module number ; |
158 | relid[1] = 0 ; // means PW04 |
159 | gMC->CurrentVolOffID(4, relid[2]) ; // get the row number inside the module |
160 | gMC->CurrentVolOffID(3, relid[3]) ; // get the cell number inside the module |
161 | |
162 | // get the absolute Id number |
163 | |
164 | Int_t absid ; |
165 | fGeom->RelToAbsNumbering(relid,absid) ; |
166 | gMC->Gmtod(global, local, 1) ; |
167 | |
168 | // calculating number of electrons in the PIN diode asociated to this hit |
169 | lightyield = gRandom->Poisson(fLightYieldMean) ; |
170 | nElectrons = lostenergy * lightyield * fIntrinsicPINEfficiency * |
171 | exp(-fLightYieldAttenuation * (local[1]+fGeom->GetCrystalSize(1)/2.0 ) ) ; |
172 | |
173 | xyze[3] = nElectrons * fRecalibrationFactor ; |
174 | // add current hit to the hit list |
457ebb6e |
175 | AddHit(primary, absid, xyze); |
7587f5a5 |
176 | |
177 | } // there is deposited energy |
178 | } // we are inside a PHOS Xtal |
a333c916 |
179 | |
180 | if(gMC->CurrentVolID(copy) == gMC->VolId("PPIN") ) // We are inside de PIN diode |
181 | { |
182 | gMC->TrackPosition(pos) ; |
183 | xyze[0] = pos[0] ; |
184 | xyze[1] = pos[1] ; |
185 | xyze[2] = pos[2] ; |
186 | lostenergy = gMC->Edep() ; |
187 | xyze[3] = gMC->Edep() ; |
188 | |
189 | if ( xyze[3] != 0 ) { |
190 | gMC->CurrentVolOffID(11, relid[0]) ; // get the PHOS module number ; |
b2a60966 |
191 | relid[1] = 0 ; // means PW04 and PIN |
a333c916 |
192 | gMC->CurrentVolOffID(5, relid[2]) ; // get the row number inside the module |
193 | gMC->CurrentVolOffID(4, relid[3]) ; // get the cell number inside the module |
194 | |
195 | // get the absolute Id number |
196 | |
197 | Int_t absid ; |
198 | fGeom->RelToAbsNumbering(relid,absid) ; |
199 | |
200 | // calculating number of electrons in the PIN diode asociated to this hit |
201 | nElectrons = lostenergy * fElectronsPerGeV ; |
202 | xyze[3] = nElectrons * fRecalibrationFactor ; |
203 | |
204 | // add current hit to the hit list |
457ebb6e |
205 | AddHit(primary, absid, xyze); |
a333c916 |
206 | //printf("PIN volume is %d, %d, %d, %d \n",relid[0],relid[1],relid[2],relid[3]); |
207 | //printf("Lost energy in the PIN is %f \n",lostenergy) ; |
208 | } // there is deposited energy |
209 | } // we are inside a PHOS XtalPHOS PIN diode |
7587f5a5 |
210 | } |
211 | |