2 //##################################################################
4 // Simple class to store TPC dE/dx info for different pad regions.
6 // Origin: Marian Ivanov, Alexander Kalweit
8 //##################################################################
10 #include "AliTPCdEdxInfo.h"
11 #include "TObjArray.h"
12 #include "TGraphErrors.h"
13 #include "AliExternalTrackParam.h"
16 TObjArray * AliTPCdEdxInfo::fArraySectorCalibration=0;
18 ClassImp(AliTPCdEdxInfo)
20 AliTPCdEdxInfo::AliTPCdEdxInfo():
23 fTPCsignalRegionQmax(),
25 fTPCsignalNRowRegion()
27 // Default constructor
28 for (Int_t i=0;i<3; i++){
29 fTPCsignalRegion[i]=0;
30 fTPCsignalRegionQmax[i]=0;
31 fTPCsignalNRegion[i]=0;
32 fTPCsignalNRowRegion[i]=0;
34 fTPCsignalRegion[3]=0;
35 fTPCsignalRegionQmax[3]=0;
39 //_______________________________________________________________________________________________
40 AliTPCdEdxInfo::AliTPCdEdxInfo(const AliTPCdEdxInfo& source):
43 fTPCsignalRegionQmax(),
45 fTPCsignalNRowRegion()
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];
56 fTPCsignalRegion[3] = source.fTPCsignalRegion[3];
57 fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3];
61 //_______________________________________________________________________________________________
62 AliTPCdEdxInfo& AliTPCdEdxInfo::operator=(const AliTPCdEdxInfo& source)
65 // assignment operator
68 if (&source == this) return *this;
69 TObject::operator=(source);
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];
77 fTPCsignalRegion[3] = source.fTPCsignalRegion[3];
78 fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3];
84 //_______________________________________________________________________________________________
85 void AliTPCdEdxInfo::GetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
87 // Get the TPC dEdx variables per region
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
93 for (Int_t i=0; i<3; i++){
94 signal[i]=fTPCsignalRegion[i];
95 ncl[i]=fTPCsignalNRegion[i];
96 nrows[i]=fTPCsignalNRowRegion[i];
98 signal[3]=fTPCsignalRegion[3];
102 //_______________________________________________________________________________________________
103 void AliTPCdEdxInfo::GetTPCSignals(Double_t signal[4]) const {
105 // Set the TPC dEdx variables per region
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)
109 for (Int_t i=0;i<4; i++){
110 signal[i]=fTPCsignalRegion[i];
114 //_______________________________________________________________________________________________
115 void AliTPCdEdxInfo::SetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
117 // Set the TPC dEdx variables per region
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
123 for (Int_t i=0;i<3; i++){
124 fTPCsignalRegion[i]=signal[i];
125 fTPCsignalNRegion[i]=ncl[i];
126 fTPCsignalNRowRegion[i]=nrows[i];
128 fTPCsignalRegion[3]=signal[3];
132 //_______________________________________________________________________________________________
133 void AliTPCdEdxInfo::SetTPCSignals(Double_t signal[4]){
135 // Set the TPC dEdx variables per region
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)
139 for (Int_t i=0;i<4; i++){
140 fTPCsignalRegion[i]=signal[i];
144 //_______________________________________________________________________________________________
145 void AliTPCdEdxInfo::GetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
147 // Get the TPC dEdx variables per region
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
153 for (Int_t i=0; i<3; i++){
154 signal[i]=fTPCsignalRegionQmax[i];
155 ncl[i]=fTPCsignalNRegion[i];
156 nrows[i]=fTPCsignalNRowRegion[i];
158 signal[3]=fTPCsignalRegionQmax[3];
162 //_______________________________________________________________________________________________
163 void AliTPCdEdxInfo::GetTPCSignalsQmax(Double_t signal[4]) const {
165 // Set the TPC dEdx variables per region
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)
169 for (Int_t i=0;i<4; i++){
170 signal[i]=fTPCsignalRegionQmax[i];
174 //_______________________________________________________________________________________________
175 void AliTPCdEdxInfo::SetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
177 // Set the TPC dEdx variables per region
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
183 for (Int_t i=0;i<3; i++){
184 fTPCsignalRegionQmax[i]=signal[i];
185 fTPCsignalNRegion[i]=ncl[i];
186 fTPCsignalNRowRegion[i]=nrows[i];
188 fTPCsignalRegionQmax[3]=signal[3];
192 //_______________________________________________________________________________________________
193 void AliTPCdEdxInfo::SetTPCSignalsQmax(Double_t signal[4]){
195 // Set the TPC dEdx variables per region
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)
199 for (Int_t i=0;i<4; i++){
200 fTPCsignalRegionQmax[i]=signal[i];
205 Double_t AliTPCdEdxInfo::GetWeightedMean(Int_t qType, Int_t wType, Double_t w0, Double_t w1, Double_t w2){
207 // Get weighted mean of the dEdx information
209 Double_t *info = (qType==0)? fTPCsignalRegion : fTPCsignalRegionQmax;
210 Char_t *ninfo = (wType==0)? fTPCsignalNRegion: fTPCsignalNRowRegion;
211 Double_t weight[3]={w0,w1,w2};
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];
218 Double_t result = (sumw>0) ? sum/sumw:0;
223 // Apply second order calibration of the dEdx
226 void AliTPCdEdxInfo::RegisterSectorCalibration(TGraphErrors* gainSector, Int_t regionID, Int_t calibID){
228 // Register sector calibration
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);
235 fArraySectorCalibration->AddAt(gainSector, 3*calibID+regionID);
238 // Double_t AliTPCdEdxInfo::GetNormalizeddEdx(AliExternalTrackParam *param, Double_t bz, Int_t regionID, Int_t calibID, Int_t qID){
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);
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);
258 Double_t AliTPCdEdxInfo::GetdEdxInfo(AliExternalTrackParam *param, Int_t regionID, Int_t calibID, Int_t qID, Int_t valueID){
263 return param->GetParameter()[regionID];