1 #include "AliTPCdEdxInfo.h"
3 #include "TGraphErrors.h"
5 //##################################################################
7 // Simple class to store TPC dE/dx info for different pad regions.
9 // Origin: Marian Ivanov, Alexander Kalweit
11 //##################################################################
13 TObjArray * AliTPCdEdxInfo::fArraySectorCalibration=0;
15 ClassImp(AliTPCdEdxInfo)
17 AliTPCdEdxInfo::AliTPCdEdxInfo():
20 fTPCsignalRegionQmax(),
22 fTPCsignalNRowRegion()
24 // Default constructor
25 for (Int_t i=0;i<3; i++){
26 fTPCsignalRegion[i]=0;
27 fTPCsignalRegionQmax[i]=0;
28 fTPCsignalNRegion[i]=0;
29 fTPCsignalNRowRegion[i]=0;
31 fTPCsignalRegion[3]=0;
32 fTPCsignalRegionQmax[3]=0;
36 //_______________________________________________________________________________________________
37 AliTPCdEdxInfo::AliTPCdEdxInfo(const AliTPCdEdxInfo& source):
40 fTPCsignalRegionQmax(),
42 fTPCsignalNRowRegion()
47 for (Int_t i=0;i<3; i++){
48 fTPCsignalRegion[i] = source.fTPCsignalRegion[i];
49 fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i];
50 fTPCsignalNRegion[i] = source.fTPCsignalNRegion[i];
51 fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i];
53 fTPCsignalRegion[3] = source.fTPCsignalRegion[3];
54 fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3];
58 //_______________________________________________________________________________________________
59 AliTPCdEdxInfo& AliTPCdEdxInfo::operator=(const AliTPCdEdxInfo& source)
62 // assignment operator
65 if (&source == this) return *this;
66 TObject::operator=(source);
68 for (Int_t i=0;i<3; i++){
69 fTPCsignalRegion[i] = source.fTPCsignalRegion[i];
70 fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i];
71 fTPCsignalNRegion[i] = source.fTPCsignalNRegion[i];
72 fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i];
74 fTPCsignalRegion[3] = source.fTPCsignalRegion[3];
75 fTPCsignalRegionQmax[3] = source.fTPCsignalRegionQmax[3];
81 //_______________________________________________________________________________________________
82 void AliTPCdEdxInfo::GetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
84 // Get the TPC dEdx variables per region
86 // 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)
87 // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
88 // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
90 for (Int_t i=0; i<3; i++){
91 signal[i]=fTPCsignalRegion[i];
92 ncl[i]=fTPCsignalNRegion[i];
93 nrows[i]=fTPCsignalNRowRegion[i];
95 signal[3]=fTPCsignalRegion[3];
99 //_______________________________________________________________________________________________
100 void AliTPCdEdxInfo::GetTPCSignals(Double_t signal[4]) const {
102 // Set the TPC dEdx variables per region
104 // 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)
106 for (Int_t i=0;i<4; i++){
107 signal[i]=fTPCsignalRegion[i];
111 //_______________________________________________________________________________________________
112 void AliTPCdEdxInfo::SetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
114 // Set the TPC dEdx variables per region
116 // 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)
117 // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
118 // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
120 for (Int_t i=0;i<3; i++){
121 fTPCsignalRegion[i]=signal[i];
122 fTPCsignalNRegion[i]=ncl[i];
123 fTPCsignalNRowRegion[i]=nrows[i];
125 fTPCsignalRegion[3]=signal[3];
129 //_______________________________________________________________________________________________
130 void AliTPCdEdxInfo::SetTPCSignals(Double_t signal[4]){
132 // Set the TPC dEdx variables per region
134 // 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)
136 for (Int_t i=0;i<4; i++){
137 fTPCsignalRegion[i]=signal[i];
141 //_______________________________________________________________________________________________
142 void AliTPCdEdxInfo::GetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
144 // Get the TPC dEdx variables per region
146 // 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)
147 // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
148 // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
150 for (Int_t i=0; i<3; i++){
151 signal[i]=fTPCsignalRegionQmax[i];
152 ncl[i]=fTPCsignalNRegion[i];
153 nrows[i]=fTPCsignalNRowRegion[i];
155 signal[3]=fTPCsignalRegionQmax[3];
159 //_______________________________________________________________________________________________
160 void AliTPCdEdxInfo::GetTPCSignalsQmax(Double_t signal[4]) const {
162 // Set the TPC dEdx variables per region
164 // 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)
166 for (Int_t i=0;i<4; i++){
167 signal[i]=fTPCsignalRegionQmax[i];
171 //_______________________________________________________________________________________________
172 void AliTPCdEdxInfo::SetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
174 // Set the TPC dEdx variables per region
176 // 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)
177 // Char_t fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
178 // Char_t fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
180 for (Int_t i=0;i<3; i++){
181 fTPCsignalRegionQmax[i]=signal[i];
182 fTPCsignalNRegion[i]=ncl[i];
183 fTPCsignalNRowRegion[i]=nrows[i];
185 fTPCsignalRegionQmax[3]=signal[3];
189 //_______________________________________________________________________________________________
190 void AliTPCdEdxInfo::SetTPCSignalsQmax(Double_t signal[4]){
192 // Set the TPC dEdx variables per region
194 // 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)
196 for (Int_t i=0;i<4; i++){
197 fTPCsignalRegionQmax[i]=signal[i];
202 Double_t AliTPCdEdxInfo::GetWeightedMean(Int_t qType, Int_t wType, Double_t w0, Double_t w1, Double_t w2){
204 // Get weighted mean of the dEdx information
206 Double_t *info = (qType==0)? fTPCsignalRegion : fTPCsignalRegionQmax;
207 Char_t *ninfo = (wType==0)? fTPCsignalNRegion: fTPCsignalNRowRegion;
208 Double_t weight[3]={w0,w1,w2};
211 for (Int_t i=0; i<3; i++){
212 sum+= info[i]*Double_t(ninfo[i])*weight[i];
213 sumw+= ninfo[i]*weight[i];
215 Double_t result = (sumw>0) ? sum/sumw:0;
221 void AliTPCdEdxInfo::RegisterSectorCalibration(TGraphErrors* gainSector, Int_t regionID, Int_t calibID){
223 // Register sector calibration
225 // create if arrray does not exist
226 if (!fArraySectorCalibration) fArraySectorCalibration= new TObjArray((calibID+1)*3*10); // boook space for calibration pointer
227 // resize if not enough booked
228 if (fArraySectorCalibration->GetSize()<(calibID+1)*3) fArraySectorCalibration->Expand((calibID+1)*3);
230 fArraySectorCalibration->AddAt(gainSector, 3*calibID+regionID);