]>
Commit | Line | Data |
---|---|---|
40b4e5ea | 1 | |
2 | //################################################################## | |
3 | // | |
4 | // Simple class to store TPC dE/dx info for different pad regions. | |
5 | // | |
6 | // Origin: Marian Ivanov, Alexander Kalweit | |
7 | // | |
8 | //################################################################## | |
9 | ||
d3929eb3 | 10 | #include "AliTPCdEdxInfo.h" |
11 | #include "TObjArray.h" | |
12 | #include "TGraphErrors.h" | |
13 | #include "AliExternalTrackParam.h" | |
14 | ||
15 | ||
1445f03c | 16 | TObjArray * AliTPCdEdxInfo::fArraySectorCalibration=0; |
40b4e5ea | 17 | |
18 | ClassImp(AliTPCdEdxInfo) | |
19 | ||
20 | AliTPCdEdxInfo::AliTPCdEdxInfo(): | |
21 | TObject(), | |
22 | fTPCsignalRegion(), | |
ca6b3353 | 23 | fTPCsignalRegionQmax(), |
40b4e5ea | 24 | fTPCsignalNRegion(), |
25 | fTPCsignalNRowRegion() | |
26 | { | |
27 | // Default constructor | |
28 | for (Int_t i=0;i<3; i++){ | |
29 | fTPCsignalRegion[i]=0; | |
ca6b3353 | 30 | fTPCsignalRegionQmax[i]=0; |
40b4e5ea | 31 | fTPCsignalNRegion[i]=0; |
32 | fTPCsignalNRowRegion[i]=0; | |
33 | } | |
34 | fTPCsignalRegion[3]=0; | |
ca6b3353 | 35 | fTPCsignalRegionQmax[3]=0; |
36 | ||
40b4e5ea | 37 | } |
38 | ||
ca6b3353 | 39 | //_______________________________________________________________________________________________ |
40 | AliTPCdEdxInfo::AliTPCdEdxInfo(const AliTPCdEdxInfo& source): | |
41 | TObject(), | |
42 | fTPCsignalRegion(), | |
43 | fTPCsignalRegionQmax(), | |
44 | fTPCsignalNRegion(), | |
45 | fTPCsignalNRowRegion() | |
46 | { | |
47 | // | |
48 | // copy constructor | |
49 | // | |
50 | for (Int_t i=0;i<3; i++){ | |
51 | fTPCsignalRegion[i] = source.fTPCsignalRegion[i]; | |
52 | fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i]; | |
53 | fTPCsignalNRegion[i] = source.fTPCsignalNRegion[i]; | |
54 | fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i]; | |
55 | } | |
56 | fTPCsignalRegion[3] = source.fTPCsignalRegion[3]; | |
57 | fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3]; | |
58 | ||
f8546be1 | 59 | } |
40b4e5ea | 60 | |
ca6b3353 | 61 | //_______________________________________________________________________________________________ |
62 | AliTPCdEdxInfo& AliTPCdEdxInfo::operator=(const AliTPCdEdxInfo& source) | |
63 | { | |
64 | // | |
65 | // assignment operator | |
08c24516 | 66 | // |
67 | ||
68 | if (&source == this) return *this; | |
69 | TObject::operator=(source); | |
70 | ||
ca6b3353 | 71 | for (Int_t i=0;i<3; i++){ |
72 | fTPCsignalRegion[i] = source.fTPCsignalRegion[i]; | |
73 | fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i]; | |
74 | fTPCsignalNRegion[i] = source.fTPCsignalNRegion[i]; | |
75 | fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i]; | |
76 | } | |
77 | fTPCsignalRegion[3] = source.fTPCsignalRegion[3]; | |
78 | fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3]; | |
79 | ||
08c24516 | 80 | return *this; |
81 | ||
82 | } | |
83 | ||
ca6b3353 | 84 | //_______________________________________________________________________________________________ |
85 | void AliTPCdEdxInfo::GetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const { | |
40b4e5ea | 86 | // |
87 | // Get the TPC dEdx variables per region | |
88 | // | |
89 | // Double32_t fTPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
90 | // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation | |
91 | // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included | |
92 | // | |
93 | for (Int_t i=0; i<3; i++){ | |
94 | signal[i]=fTPCsignalRegion[i]; | |
95 | ncl[i]=fTPCsignalNRegion[i]; | |
96 | nrows[i]=fTPCsignalNRowRegion[i]; | |
97 | } | |
98 | signal[3]=fTPCsignalRegion[3]; | |
99 | return; | |
100 | } | |
101 | ||
ca6b3353 | 102 | //_______________________________________________________________________________________________ |
103 | void AliTPCdEdxInfo::GetTPCSignals(Double_t signal[4]) const { | |
104 | // | |
105 | // Set the TPC dEdx variables per region | |
106 | // | |
107 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
108 | // | |
109 | for (Int_t i=0;i<4; i++){ | |
110 | signal[i]=fTPCsignalRegion[i]; | |
111 | } | |
112 | } | |
40b4e5ea | 113 | |
ca6b3353 | 114 | //_______________________________________________________________________________________________ |
115 | void AliTPCdEdxInfo::SetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){ | |
40b4e5ea | 116 | // |
117 | // Set the TPC dEdx variables per region | |
118 | // | |
119 | // Double32_t fTPCsignalRegion[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
120 | // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation | |
121 | // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included | |
122 | // | |
123 | for (Int_t i=0;i<3; i++){ | |
124 | fTPCsignalRegion[i]=signal[i]; | |
125 | fTPCsignalNRegion[i]=ncl[i]; | |
126 | fTPCsignalNRowRegion[i]=nrows[i]; | |
127 | } | |
128 | fTPCsignalRegion[3]=signal[3]; | |
129 | return; | |
130 | } | |
ca6b3353 | 131 | |
132 | //_______________________________________________________________________________________________ | |
133 | void AliTPCdEdxInfo::SetTPCSignals(Double_t signal[4]){ | |
134 | // | |
135 | // Set the TPC dEdx variables per region | |
136 | // | |
137 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
138 | // | |
139 | for (Int_t i=0;i<4; i++){ | |
140 | fTPCsignalRegion[i]=signal[i]; | |
141 | } | |
142 | } | |
143 | ||
144 | //_______________________________________________________________________________________________ | |
145 | void AliTPCdEdxInfo::GetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const { | |
146 | // | |
147 | // Get the TPC dEdx variables per region | |
148 | // | |
149 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
150 | // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation | |
151 | // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included | |
152 | // | |
153 | for (Int_t i=0; i<3; i++){ | |
154 | signal[i]=fTPCsignalRegionQmax[i]; | |
155 | ncl[i]=fTPCsignalNRegion[i]; | |
156 | nrows[i]=fTPCsignalNRowRegion[i]; | |
157 | } | |
158 | signal[3]=fTPCsignalRegionQmax[3]; | |
159 | return; | |
160 | } | |
161 | ||
162 | //_______________________________________________________________________________________________ | |
163 | void AliTPCdEdxInfo::GetTPCSignalsQmax(Double_t signal[4]) const { | |
164 | // | |
165 | // Set the TPC dEdx variables per region | |
166 | // | |
167 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
168 | // | |
169 | for (Int_t i=0;i<4; i++){ | |
170 | signal[i]=fTPCsignalRegionQmax[i]; | |
171 | } | |
172 | } | |
173 | ||
174 | //_______________________________________________________________________________________________ | |
175 | void AliTPCdEdxInfo::SetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){ | |
176 | // | |
177 | // Set the TPC dEdx variables per region | |
178 | // | |
179 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
180 | // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation | |
181 | // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included | |
182 | // | |
183 | for (Int_t i=0;i<3; i++){ | |
184 | fTPCsignalRegionQmax[i]=signal[i]; | |
185 | fTPCsignalNRegion[i]=ncl[i]; | |
186 | fTPCsignalNRowRegion[i]=nrows[i]; | |
187 | } | |
188 | fTPCsignalRegionQmax[3]=signal[3]; | |
189 | return; | |
190 | } | |
191 | ||
192 | //_______________________________________________________________________________________________ | |
193 | void AliTPCdEdxInfo::SetTPCSignalsQmax(Double_t signal[4]){ | |
194 | // | |
195 | // Set the TPC dEdx variables per region | |
196 | // | |
197 | // Double32_t fTPCsignalRegionQmax[4]; // TPC dEdx signal in 4 different regions - 0 - IROC, 1- OROC medium, 2 - OROC long, 3- OROC all, (default truncation used) | |
198 | // | |
199 | for (Int_t i=0;i<4; i++){ | |
200 | fTPCsignalRegionQmax[i]=signal[i]; | |
201 | } | |
202 | } | |
f3bfdf9d | 203 | |
204 | ||
205 | Double_t AliTPCdEdxInfo::GetWeightedMean(Int_t qType, Int_t wType, Double_t w0, Double_t w1, Double_t w2){ | |
206 | // | |
207 | // Get weighted mean of the dEdx information | |
208 | // | |
209 | Double_t *info = (qType==0)? fTPCsignalRegion : fTPCsignalRegionQmax; | |
210 | Char_t *ninfo = (wType==0)? fTPCsignalNRegion: fTPCsignalNRowRegion; | |
211 | Double_t weight[3]={w0,w1,w2}; | |
212 | Double_t sum=0; | |
213 | Double_t sumw=0; | |
214 | for (Int_t i=0; i<3; i++){ | |
215 | sum+= info[i]*Double_t(ninfo[i])*weight[i]; | |
216 | sumw+= ninfo[i]*weight[i]; | |
217 | } | |
218 | Double_t result = (sumw>0) ? sum/sumw:0; | |
219 | return result; | |
220 | } | |
1445f03c | 221 | |
d3929eb3 | 222 | // |
223 | // Apply second order calibration of the dEdx | |
224 | // | |
1445f03c | 225 | |
226 | void AliTPCdEdxInfo::RegisterSectorCalibration(TGraphErrors* gainSector, Int_t regionID, Int_t calibID){ | |
227 | // | |
228 | // Register sector calibration | |
229 | // | |
230 | // create if arrray does not exist | |
231 | if (!fArraySectorCalibration) fArraySectorCalibration= new TObjArray((calibID+1)*3*10); // boook space for calibration pointer | |
232 | // resize if not enough booked | |
233 | if (fArraySectorCalibration->GetSize()<(calibID+1)*3) fArraySectorCalibration->Expand((calibID+1)*3); | |
234 | // | |
235 | fArraySectorCalibration->AddAt(gainSector, 3*calibID+regionID); | |
236 | } | |
d3929eb3 | 237 | |
238 | // Double_t AliTPCdEdxInfo::GetNormalizeddEdx(AliExternalTrackParam *param, Double_t bz, Int_t regionID, Int_t calibID, Int_t qID){ | |
239 | // // | |
240 | // // | |
241 | // // | |
242 | // static AliTPCParamSR paramSR; | |
243 | // static Double_t radius[3] ={0.5*(paramSR.GetInnerRadiusLow()+paramSR.GetInnerRadiusUp()), | |
244 | // 0.5*(paramSR.GetPadRowRadii(36,0)+paramSR.GetPadRowRadii(36,paramSR.GetNRowUp1()-1)), | |
245 | // 0.5*(paramSR.GetPadRowRadii(36,0)+paramSR.GetPadRowRadii(36,paramSR.GetNRowUp()-1))}; | |
246 | // Double_t phi= param->GetParameterAtRadius(radius[regionID],bz,7); | |
247 | ||
248 | // TGraphErrors * graphSectorCorection = fArraySectorCalibration->At(regionID+3*calibID); | |
249 | // Double_t dEdx = 0; | |
250 | // if (qID==0) dEdx = fTPCsignalRegion[regionID]; | |
251 | // if (qID==1) dEdx = fTPCsignalRegionQmax[regionID]; | |
252 | // if (graphSectorCorection) dEdx /=graphSectorCorection->EvalAt(sector); | |
253 | // return dEdx; | |
254 | // } | |
255 | ||
256 | ||
257 | ||
258 | Double_t AliTPCdEdxInfo::GetdEdxInfo(AliExternalTrackParam *param, Int_t regionID, Int_t calibID, Int_t qID, Int_t valueID){ | |
259 | // | |
260 | // | |
261 | // | |
262 | ||
263 | return param->GetParameter()[regionID]; | |
264 | } | |
265 | ||
266 |