Merge remote-tracking branch 'remotes/origin/master' into TPCdev
[u/mrichter/AliRoot.git] / STEER / STEERBase / AliTPCdEdxInfo.cxx
CommitLineData
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 16TObjArray * AliTPCdEdxInfo::fArraySectorCalibration=0;
40b4e5ea 17
18ClassImp(AliTPCdEdxInfo)
19
20AliTPCdEdxInfo::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//_______________________________________________________________________________________________
40AliTPCdEdxInfo::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//_______________________________________________________________________________________________
62AliTPCdEdxInfo& 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//_______________________________________________________________________________________________
85void 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//_______________________________________________________________________________________________
103void 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//_______________________________________________________________________________________________
115void 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//_______________________________________________________________________________________________
133void 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//_______________________________________________________________________________________________
145void 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//_______________________________________________________________________________________________
163void 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//_______________________________________________________________________________________________
175void 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//_______________________________________________________________________________________________
193void 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
205Double_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
226void 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
258Double_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