ROOT logo

//##################################################################
//
// Simple class to store TPC dE/dx info for different pad regions.
//
// Origin: Marian Ivanov, Alexander Kalweit 
//
//##################################################################

#include "AliTPCdEdxInfo.h"
#include "TObjArray.h"
#include "TGraphErrors.h"
#include "AliExternalTrackParam.h"


TObjArray * AliTPCdEdxInfo::fArraySectorCalibration=0;

ClassImp(AliTPCdEdxInfo)

AliTPCdEdxInfo::AliTPCdEdxInfo():
  TObject(),
  fTPCsignalRegion(),
  fTPCsignalRegionQmax(),
  fTPCsignalNRegion(),
  fTPCsignalNRowRegion()
{
  // Default constructor
  for (Int_t i=0;i<3; i++){
    fTPCsignalRegion[i]=0;
    fTPCsignalRegionQmax[i]=0;
    fTPCsignalNRegion[i]=0;
    fTPCsignalNRowRegion[i]=0;
  }
  fTPCsignalRegion[3]=0;
  fTPCsignalRegionQmax[3]=0;
  
}

//_______________________________________________________________________________________________
AliTPCdEdxInfo::AliTPCdEdxInfo(const AliTPCdEdxInfo& source):
    TObject(),
    fTPCsignalRegion(),
    fTPCsignalRegionQmax(),
    fTPCsignalNRegion(),
    fTPCsignalNRowRegion()
{
    //
    // copy constructor
    //
    for (Int_t i=0;i<3; i++){
      fTPCsignalRegion[i]     = source.fTPCsignalRegion[i];
      fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i];
      fTPCsignalNRegion[i]    = source.fTPCsignalNRegion[i];
      fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i];
    }
    fTPCsignalRegion[3]       = source.fTPCsignalRegion[3];
    fTPCsignalRegionQmax[3]   = source.fTPCsignalRegionQmax[3];
    
}

//_______________________________________________________________________________________________
AliTPCdEdxInfo& AliTPCdEdxInfo::operator=(const AliTPCdEdxInfo& source)
{
    //
    // assignment operator
    //

  if (&source == this) return *this;
  TObject::operator=(source);

  for (Int_t i=0;i<3; i++){
    fTPCsignalRegion[i]     = source.fTPCsignalRegion[i];
    fTPCsignalRegionQmax[i] = source.fTPCsignalRegionQmax[i];
    fTPCsignalNRegion[i]    = source.fTPCsignalNRegion[i];
    fTPCsignalNRowRegion[i] = source.fTPCsignalNRowRegion[i];
  }
  fTPCsignalRegion[3]       = source.fTPCsignalRegion[3];
  fTPCsignalRegionQmax[3]   = source.fTPCsignalRegionQmax[3];
  
  return *this;

}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::GetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
  //
  // Get the TPC dEdx variables per region
  //
  // 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)  
  // Char_t      fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
  // Char_t      fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
  //
  for (Int_t i=0; i<3; i++){
    signal[i]=fTPCsignalRegion[i];
    ncl[i]=fTPCsignalNRegion[i];
    nrows[i]=fTPCsignalNRowRegion[i];
  }
  signal[3]=fTPCsignalRegion[3];
  return; 
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::GetTPCSignals(Double_t signal[4]) const {
  //
  // Set the TPC dEdx variables per region
  //
  // 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)
  //
  for (Int_t i=0;i<4; i++){
    signal[i]=fTPCsignalRegion[i];
  }
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::SetTPCSignalRegionInfo(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
  //
  // Set the TPC dEdx variables per region
  //
  // 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)  
  // Char_t      fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
  // Char_t      fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
  //
  for (Int_t i=0;i<3; i++){
    fTPCsignalRegion[i]=signal[i];
    fTPCsignalNRegion[i]=ncl[i];
    fTPCsignalNRowRegion[i]=nrows[i];
  }
  fTPCsignalRegion[3]=signal[3];
  return;
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::SetTPCSignals(Double_t signal[4]){
  //
  // Set the TPC dEdx variables per region
  //
  // 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)
  //
  for (Int_t i=0;i<4; i++){
    fTPCsignalRegion[i]=signal[i];
  }
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::GetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]) const {
  //
  // Get the TPC dEdx variables per region
  //
  // 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)
  // Char_t      fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
  // Char_t      fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
  //
  for (Int_t i=0; i<3; i++){
    signal[i]=fTPCsignalRegionQmax[i];
    ncl[i]=fTPCsignalNRegion[i];
    nrows[i]=fTPCsignalNRowRegion[i];
  }
  signal[3]=fTPCsignalRegionQmax[3];
  return;
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::GetTPCSignalsQmax(Double_t signal[4]) const {
  //
  // Set the TPC dEdx variables per region
  //
  // 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)
  //
  for (Int_t i=0;i<4; i++){
    signal[i]=fTPCsignalRegionQmax[i];
  }
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::SetTPCSignalRegionInfoQmax(Double_t signal[4], Char_t ncl[3], Char_t nrows[3]){
  //
  // Set the TPC dEdx variables per region
  //
  // 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)
  // Char_t      fTPCsignalNRegion[3]; // number of clusters above threshold used in the dEdx calculation
  // Char_t      fTPCsignalNRowRegion[3]; // number of crosed rows used in the dEdx calculation - signal below threshold included
  //
  for (Int_t i=0;i<3; i++){
    fTPCsignalRegionQmax[i]=signal[i];
    fTPCsignalNRegion[i]=ncl[i];
    fTPCsignalNRowRegion[i]=nrows[i];
  }
  fTPCsignalRegionQmax[3]=signal[3];
  return;
}

//_______________________________________________________________________________________________
void  AliTPCdEdxInfo::SetTPCSignalsQmax(Double_t signal[4]){
  //
  // Set the TPC dEdx variables per region
  //
  // 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)
  //
  for (Int_t i=0;i<4; i++){
    fTPCsignalRegionQmax[i]=signal[i];
  }
}


Double_t AliTPCdEdxInfo::GetWeightedMean(Int_t qType, Int_t wType, Double_t w0, Double_t w1, Double_t w2){
  //
  // Get weighted mean of the dEdx information
  //
  Double_t *info = (qType==0)? fTPCsignalRegion :  fTPCsignalRegionQmax;
  Char_t *ninfo = (wType==0)? fTPCsignalNRegion:  fTPCsignalNRowRegion;
  Double_t weight[3]={w0,w1,w2};
  Double_t sum=0;
  Double_t sumw=0;
  for (Int_t i=0; i<3; i++){
    sum+= info[i]*Double_t(ninfo[i])*weight[i];
    sumw+= ninfo[i]*weight[i];
  }
  Double_t result = (sumw>0) ? sum/sumw:0;
  return result;
}

//
// Apply second order calibration  of the dEdx
//

void  AliTPCdEdxInfo::RegisterSectorCalibration(TGraphErrors* gainSector, Int_t regionID, Int_t calibID){
  //
  // Register sector calibration
  //
  // create if arrray does not exist
  if (!fArraySectorCalibration) fArraySectorCalibration= new TObjArray((calibID+1)*3*10); // boook space for calibration pointer
  // resize if not enough booked
  if (fArraySectorCalibration->GetSize()<(calibID+1)*3) fArraySectorCalibration->Expand((calibID+1)*3);
  //
  fArraySectorCalibration->AddAt(gainSector, 3*calibID+regionID);
}

// Double_t AliTPCdEdxInfo::GetNormalizeddEdx(AliExternalTrackParam *param, Double_t bz,  Int_t regionID, Int_t calibID, Int_t qID){
//   //
//   //
//   // 
//   static AliTPCParamSR paramSR;
//   static Double_t radius[3] ={0.5*(paramSR.GetInnerRadiusLow()+paramSR.GetInnerRadiusUp()),
// 			      0.5*(paramSR.GetPadRowRadii(36,0)+paramSR.GetPadRowRadii(36,paramSR.GetNRowUp1()-1)),
// 			      0.5*(paramSR.GetPadRowRadii(36,0)+paramSR.GetPadRowRadii(36,paramSR.GetNRowUp()-1))};
//   Double_t phi= param->GetParameterAtRadius(radius[regionID],bz,7);

//   TGraphErrors * graphSectorCorection = fArraySectorCalibration->At(regionID+3*calibID);
//   Double_t dEdx = 0;
//   if (qID==0) dEdx = fTPCsignalRegion[regionID];
//   if (qID==1) dEdx = fTPCsignalRegionQmax[regionID];
//   if (graphSectorCorection) dEdx /=graphSectorCorection->EvalAt(sector);
//   return dEdx;
// }



Double_t   AliTPCdEdxInfo::GetdEdxInfo(AliExternalTrackParam *param, Int_t regionID, Int_t calibID, Int_t qID, Int_t valueID){
  //
  //
  //

  return param->GetParameter()[regionID];
}


 AliTPCdEdxInfo.cxx:1
 AliTPCdEdxInfo.cxx:2
 AliTPCdEdxInfo.cxx:3
 AliTPCdEdxInfo.cxx:4
 AliTPCdEdxInfo.cxx:5
 AliTPCdEdxInfo.cxx:6
 AliTPCdEdxInfo.cxx:7
 AliTPCdEdxInfo.cxx:8
 AliTPCdEdxInfo.cxx:9
 AliTPCdEdxInfo.cxx:10
 AliTPCdEdxInfo.cxx:11
 AliTPCdEdxInfo.cxx:12
 AliTPCdEdxInfo.cxx:13
 AliTPCdEdxInfo.cxx:14
 AliTPCdEdxInfo.cxx:15
 AliTPCdEdxInfo.cxx:16
 AliTPCdEdxInfo.cxx:17
 AliTPCdEdxInfo.cxx:18
 AliTPCdEdxInfo.cxx:19
 AliTPCdEdxInfo.cxx:20
 AliTPCdEdxInfo.cxx:21
 AliTPCdEdxInfo.cxx:22
 AliTPCdEdxInfo.cxx:23
 AliTPCdEdxInfo.cxx:24
 AliTPCdEdxInfo.cxx:25
 AliTPCdEdxInfo.cxx:26
 AliTPCdEdxInfo.cxx:27
 AliTPCdEdxInfo.cxx:28
 AliTPCdEdxInfo.cxx:29
 AliTPCdEdxInfo.cxx:30
 AliTPCdEdxInfo.cxx:31
 AliTPCdEdxInfo.cxx:32
 AliTPCdEdxInfo.cxx:33
 AliTPCdEdxInfo.cxx:34
 AliTPCdEdxInfo.cxx:35
 AliTPCdEdxInfo.cxx:36
 AliTPCdEdxInfo.cxx:37
 AliTPCdEdxInfo.cxx:38
 AliTPCdEdxInfo.cxx:39
 AliTPCdEdxInfo.cxx:40
 AliTPCdEdxInfo.cxx:41
 AliTPCdEdxInfo.cxx:42
 AliTPCdEdxInfo.cxx:43
 AliTPCdEdxInfo.cxx:44
 AliTPCdEdxInfo.cxx:45
 AliTPCdEdxInfo.cxx:46
 AliTPCdEdxInfo.cxx:47
 AliTPCdEdxInfo.cxx:48
 AliTPCdEdxInfo.cxx:49
 AliTPCdEdxInfo.cxx:50
 AliTPCdEdxInfo.cxx:51
 AliTPCdEdxInfo.cxx:52
 AliTPCdEdxInfo.cxx:53
 AliTPCdEdxInfo.cxx:54
 AliTPCdEdxInfo.cxx:55
 AliTPCdEdxInfo.cxx:56
 AliTPCdEdxInfo.cxx:57
 AliTPCdEdxInfo.cxx:58
 AliTPCdEdxInfo.cxx:59
 AliTPCdEdxInfo.cxx:60
 AliTPCdEdxInfo.cxx:61
 AliTPCdEdxInfo.cxx:62
 AliTPCdEdxInfo.cxx:63
 AliTPCdEdxInfo.cxx:64
 AliTPCdEdxInfo.cxx:65
 AliTPCdEdxInfo.cxx:66
 AliTPCdEdxInfo.cxx:67
 AliTPCdEdxInfo.cxx:68
 AliTPCdEdxInfo.cxx:69
 AliTPCdEdxInfo.cxx:70
 AliTPCdEdxInfo.cxx:71
 AliTPCdEdxInfo.cxx:72
 AliTPCdEdxInfo.cxx:73
 AliTPCdEdxInfo.cxx:74
 AliTPCdEdxInfo.cxx:75
 AliTPCdEdxInfo.cxx:76
 AliTPCdEdxInfo.cxx:77
 AliTPCdEdxInfo.cxx:78
 AliTPCdEdxInfo.cxx:79
 AliTPCdEdxInfo.cxx:80
 AliTPCdEdxInfo.cxx:81
 AliTPCdEdxInfo.cxx:82
 AliTPCdEdxInfo.cxx:83
 AliTPCdEdxInfo.cxx:84
 AliTPCdEdxInfo.cxx:85
 AliTPCdEdxInfo.cxx:86
 AliTPCdEdxInfo.cxx:87
 AliTPCdEdxInfo.cxx:88
 AliTPCdEdxInfo.cxx:89
 AliTPCdEdxInfo.cxx:90
 AliTPCdEdxInfo.cxx:91
 AliTPCdEdxInfo.cxx:92
 AliTPCdEdxInfo.cxx:93
 AliTPCdEdxInfo.cxx:94
 AliTPCdEdxInfo.cxx:95
 AliTPCdEdxInfo.cxx:96
 AliTPCdEdxInfo.cxx:97
 AliTPCdEdxInfo.cxx:98
 AliTPCdEdxInfo.cxx:99
 AliTPCdEdxInfo.cxx:100
 AliTPCdEdxInfo.cxx:101
 AliTPCdEdxInfo.cxx:102
 AliTPCdEdxInfo.cxx:103
 AliTPCdEdxInfo.cxx:104
 AliTPCdEdxInfo.cxx:105
 AliTPCdEdxInfo.cxx:106
 AliTPCdEdxInfo.cxx:107
 AliTPCdEdxInfo.cxx:108
 AliTPCdEdxInfo.cxx:109
 AliTPCdEdxInfo.cxx:110
 AliTPCdEdxInfo.cxx:111
 AliTPCdEdxInfo.cxx:112
 AliTPCdEdxInfo.cxx:113
 AliTPCdEdxInfo.cxx:114
 AliTPCdEdxInfo.cxx:115
 AliTPCdEdxInfo.cxx:116
 AliTPCdEdxInfo.cxx:117
 AliTPCdEdxInfo.cxx:118
 AliTPCdEdxInfo.cxx:119
 AliTPCdEdxInfo.cxx:120
 AliTPCdEdxInfo.cxx:121
 AliTPCdEdxInfo.cxx:122
 AliTPCdEdxInfo.cxx:123
 AliTPCdEdxInfo.cxx:124
 AliTPCdEdxInfo.cxx:125
 AliTPCdEdxInfo.cxx:126
 AliTPCdEdxInfo.cxx:127
 AliTPCdEdxInfo.cxx:128
 AliTPCdEdxInfo.cxx:129
 AliTPCdEdxInfo.cxx:130
 AliTPCdEdxInfo.cxx:131
 AliTPCdEdxInfo.cxx:132
 AliTPCdEdxInfo.cxx:133
 AliTPCdEdxInfo.cxx:134
 AliTPCdEdxInfo.cxx:135
 AliTPCdEdxInfo.cxx:136
 AliTPCdEdxInfo.cxx:137
 AliTPCdEdxInfo.cxx:138
 AliTPCdEdxInfo.cxx:139
 AliTPCdEdxInfo.cxx:140
 AliTPCdEdxInfo.cxx:141
 AliTPCdEdxInfo.cxx:142
 AliTPCdEdxInfo.cxx:143
 AliTPCdEdxInfo.cxx:144
 AliTPCdEdxInfo.cxx:145
 AliTPCdEdxInfo.cxx:146
 AliTPCdEdxInfo.cxx:147
 AliTPCdEdxInfo.cxx:148
 AliTPCdEdxInfo.cxx:149
 AliTPCdEdxInfo.cxx:150
 AliTPCdEdxInfo.cxx:151
 AliTPCdEdxInfo.cxx:152
 AliTPCdEdxInfo.cxx:153
 AliTPCdEdxInfo.cxx:154
 AliTPCdEdxInfo.cxx:155
 AliTPCdEdxInfo.cxx:156
 AliTPCdEdxInfo.cxx:157
 AliTPCdEdxInfo.cxx:158
 AliTPCdEdxInfo.cxx:159
 AliTPCdEdxInfo.cxx:160
 AliTPCdEdxInfo.cxx:161
 AliTPCdEdxInfo.cxx:162
 AliTPCdEdxInfo.cxx:163
 AliTPCdEdxInfo.cxx:164
 AliTPCdEdxInfo.cxx:165
 AliTPCdEdxInfo.cxx:166
 AliTPCdEdxInfo.cxx:167
 AliTPCdEdxInfo.cxx:168
 AliTPCdEdxInfo.cxx:169
 AliTPCdEdxInfo.cxx:170
 AliTPCdEdxInfo.cxx:171
 AliTPCdEdxInfo.cxx:172
 AliTPCdEdxInfo.cxx:173
 AliTPCdEdxInfo.cxx:174
 AliTPCdEdxInfo.cxx:175
 AliTPCdEdxInfo.cxx:176
 AliTPCdEdxInfo.cxx:177
 AliTPCdEdxInfo.cxx:178
 AliTPCdEdxInfo.cxx:179
 AliTPCdEdxInfo.cxx:180
 AliTPCdEdxInfo.cxx:181
 AliTPCdEdxInfo.cxx:182
 AliTPCdEdxInfo.cxx:183
 AliTPCdEdxInfo.cxx:184
 AliTPCdEdxInfo.cxx:185
 AliTPCdEdxInfo.cxx:186
 AliTPCdEdxInfo.cxx:187
 AliTPCdEdxInfo.cxx:188
 AliTPCdEdxInfo.cxx:189
 AliTPCdEdxInfo.cxx:190
 AliTPCdEdxInfo.cxx:191
 AliTPCdEdxInfo.cxx:192
 AliTPCdEdxInfo.cxx:193
 AliTPCdEdxInfo.cxx:194
 AliTPCdEdxInfo.cxx:195
 AliTPCdEdxInfo.cxx:196
 AliTPCdEdxInfo.cxx:197
 AliTPCdEdxInfo.cxx:198
 AliTPCdEdxInfo.cxx:199
 AliTPCdEdxInfo.cxx:200
 AliTPCdEdxInfo.cxx:201
 AliTPCdEdxInfo.cxx:202
 AliTPCdEdxInfo.cxx:203
 AliTPCdEdxInfo.cxx:204
 AliTPCdEdxInfo.cxx:205
 AliTPCdEdxInfo.cxx:206
 AliTPCdEdxInfo.cxx:207
 AliTPCdEdxInfo.cxx:208
 AliTPCdEdxInfo.cxx:209
 AliTPCdEdxInfo.cxx:210
 AliTPCdEdxInfo.cxx:211
 AliTPCdEdxInfo.cxx:212
 AliTPCdEdxInfo.cxx:213
 AliTPCdEdxInfo.cxx:214
 AliTPCdEdxInfo.cxx:215
 AliTPCdEdxInfo.cxx:216
 AliTPCdEdxInfo.cxx:217
 AliTPCdEdxInfo.cxx:218
 AliTPCdEdxInfo.cxx:219
 AliTPCdEdxInfo.cxx:220
 AliTPCdEdxInfo.cxx:221
 AliTPCdEdxInfo.cxx:222
 AliTPCdEdxInfo.cxx:223
 AliTPCdEdxInfo.cxx:224
 AliTPCdEdxInfo.cxx:225
 AliTPCdEdxInfo.cxx:226
 AliTPCdEdxInfo.cxx:227
 AliTPCdEdxInfo.cxx:228
 AliTPCdEdxInfo.cxx:229
 AliTPCdEdxInfo.cxx:230
 AliTPCdEdxInfo.cxx:231
 AliTPCdEdxInfo.cxx:232
 AliTPCdEdxInfo.cxx:233
 AliTPCdEdxInfo.cxx:234
 AliTPCdEdxInfo.cxx:235
 AliTPCdEdxInfo.cxx:236
 AliTPCdEdxInfo.cxx:237
 AliTPCdEdxInfo.cxx:238
 AliTPCdEdxInfo.cxx:239
 AliTPCdEdxInfo.cxx:240
 AliTPCdEdxInfo.cxx:241
 AliTPCdEdxInfo.cxx:242
 AliTPCdEdxInfo.cxx:243
 AliTPCdEdxInfo.cxx:244
 AliTPCdEdxInfo.cxx:245
 AliTPCdEdxInfo.cxx:246
 AliTPCdEdxInfo.cxx:247
 AliTPCdEdxInfo.cxx:248
 AliTPCdEdxInfo.cxx:249
 AliTPCdEdxInfo.cxx:250
 AliTPCdEdxInfo.cxx:251
 AliTPCdEdxInfo.cxx:252
 AliTPCdEdxInfo.cxx:253
 AliTPCdEdxInfo.cxx:254
 AliTPCdEdxInfo.cxx:255
 AliTPCdEdxInfo.cxx:256
 AliTPCdEdxInfo.cxx:257
 AliTPCdEdxInfo.cxx:258
 AliTPCdEdxInfo.cxx:259
 AliTPCdEdxInfo.cxx:260
 AliTPCdEdxInfo.cxx:261
 AliTPCdEdxInfo.cxx:262
 AliTPCdEdxInfo.cxx:263
 AliTPCdEdxInfo.cxx:264
 AliTPCdEdxInfo.cxx:265
 AliTPCdEdxInfo.cxx:266