ROOT logo
/**************************************************************************
 * Copyright(c) 1998-1999, ALICE Experiment at CERN, All rights reserved. *
 *                                                                        *
 * Author: The ALICE Off-line Project.                                    *
 * Contributors are mentioned in the code where appropriate.              *
 *                                                                        *
 * Permission to use, copy, modify and distribute this software and its   *
 * documentation strictly for non-commercial purposes is hereby granted   *
 * without fee, provided that the above copyright notice appears in all   *
 * copies and that both the copyright notice and this permission notice   *
 * appear in the supporting documentation. The authors make no claims     *
 * about the suitability of this software for any purpose. It is          *
 * provided "as is" without express or implied warranty.                  *
 **************************************************************************/

//
// TRD dEdx recon utils
// xx
// xx
// xx
// xx
//
//  Xianguo Lu 
//  lu@physi.uni-heidelberg.de
//  Xianguo.Lu@cern.ch
//  
//

#include "TF1.h"
#include "TFile.h"
#include "TH1D.h"
#include "TH2D.h"
#include "THnSparse.h"
#include "TMath.h"
#include "TMatrixD.h"
#include "TMinuit.h"
#include "TObjArray.h"
#include "TRandom3.h"
#include "TStopwatch.h"
#include "TVectorD.h"

#include "TTreeStream.h"

#include "AliCDBId.h"
#include "AliCDBMetaData.h"
#include "AliCDBStorage.h"
#include "AliESDEvent.h"
#include "AliESDfriendTrack.h"
#include "AliESDtrack.h"
#include "AliTRDcalibDB.h"
#include "AliTRDCalROC.h"
#include "AliTRDtrackV1.h"

#include "AliTRDdEdxBaseUtils.h"
#include "AliTRDdEdxReconUtils.h"

#define EPSILON 1e-8

Int_t AliTRDdEdxReconUtils::ApplyCalib(const Int_t nc0, TVectorD *arrayQ, TVectorD *arrayX, const TObjArray *cobj)
{
  //
  //apply calibration on arrayQ
  //
  if(!cobj){ printf("AliTRDdEdxReconUtils::ApplyCalib error gain array null!!\n"); exit(1);}

  TVectorD tmpq(arrayQ->GetNrows());
  TVectorD tmpx(arrayX->GetNrows());
  Int_t ncls = 0;

  const TVectorD * gain = (TVectorD*) cobj->At(0); 
  for(Int_t ii=0; ii<nc0; ii++){
    const Double_t dq = (*arrayQ)[ii];
    const Int_t xx = (Int_t)(*arrayX)[ii];
    const Double_t gg = (*gain)[xx];

    if(gg<EPSILON){
      continue;
    }

    tmpq[ncls] = dq*gg;
    tmpx[ncls] = xx;
    ncls++;
  }

  (*arrayQ)=tmpq;
  (*arrayX)=tmpx;

  return ncls;
}

Double_t AliTRDdEdxReconUtils::ToyCook(const Bool_t kinvq, Int_t &ncluster, TVectorD *arrayQ, TVectorD *arrayX, const TObjArray *cobj)
{
  //
  //template for cookdedx
  //
  if(cobj){
    if(arrayQ && arrayX){
      ncluster = ApplyCalib(ncluster, arrayQ, arrayX, cobj);
    }
    else{
      printf("AliTRDdEdxReconUtils::ToyCook arrayQ arrayX null, applycalib can not be applied!\n"); exit(1);
    }
  }

  Double_t lowFrac =-999, highFrac = -999;
  if(kinvq){
    lowFrac = AliTRDdEdxBaseUtils::Q1Frac(); highFrac = 0.99;
  }
  else{
    lowFrac = 0.01; highFrac = AliTRDdEdxBaseUtils::Q0Frac();
  }

  Double_t meanQ = AliTRDdEdxBaseUtils::TruncatedMean(ncluster, arrayQ->GetMatrixArray(), lowFrac, highFrac);
  if(kinvq){
    if(meanQ>EPSILON){
      meanQ = 1/meanQ;
    }
  }

  return meanQ;
}

Double_t AliTRDdEdxReconUtils::CombineddEdx(const Bool_t kinvq, Int_t &concls, TVectorD *coarrayQ, TVectorD *coarrayX, const Int_t tpcncls, const TVectorD *tpcarrayQ, const TVectorD *tpcarrayX, const Int_t trdncls, const TVectorD *trdarrayQ, const TVectorD *trdarrayX)
{
  //
  //combine tpc and trd dedx
  //

  for(Int_t iq=0; iq<tpcncls; iq++){
    (*coarrayQ)[iq]=(*tpcarrayQ)[iq];
    if(tpcarrayX && trdarrayX && coarrayX){
      (*coarrayX)[iq]=(*tpcarrayX)[iq];
    }
  }
  for(Int_t iq=0; iq<trdncls; iq++){
    (*coarrayQ)[tpcncls+iq]=(*trdarrayQ)[iq];
    if(tpcarrayX && trdarrayX && coarrayX){
      (*coarrayX)[tpcncls+iq]=159+(*trdarrayX)[iq];
    }
  }

  concls=trdncls+tpcncls;

  const Double_t coQ = ToyCook(kinvq, concls, coarrayQ, coarrayX);

  return coQ;
}

Double_t AliTRDdEdxReconUtils::GetPadGain(const Int_t det, const Int_t icol, const Int_t irow)
{
  //
  //get pad calibration
  //
  AliTRDcalibDB* calibration = AliTRDcalibDB::Instance();
  if (!calibration) {
    printf("AliTRDdEdxReconUtils::GetPadCalib No AliTRDcalibDB instance available\n"); exit(1);
  }
  AliTRDCalROC * calGainFactorROC = calibration->GetGainFactorROC(det);
  if(!calGainFactorROC){
    printf("AliTRDdEdxReconUtils::GetPadCalib no calGainFactorROC!\n"); exit(1);
  }

  Double_t padgain = -999;
  if( icol >= 0 && 
      icol < calGainFactorROC->GetNcols() && 
      irow >=0 && 
      irow < calGainFactorROC->GetNrows()){
    padgain = calGainFactorROC->GetValue(icol, irow);
    if(padgain<EPSILON){
      printf("AliTRDdEdxReconUtils::GetPadGain padgain 0! %f %f -- %d %d %d -- %d %d\n", padgain, EPSILON, det, icol, irow, calGainFactorROC->GetNcols(), calGainFactorROC->GetNrows()); exit(1);
    }
  }
  else{
    //printf("\nAliTRDdEdxReconUtils::GetPadGain warning!! indices out of range %d %d %d -- %d %d\n\n", det, icol, irow, calGainFactorROC->GetNcols(), calGainFactorROC->GetNrows() );  
  }

  return padgain;
}

Double_t AliTRDdEdxReconUtils::GetRNDClusterQ(AliTRDcluster *cl, const Double_t baseline)
{
  //
  //get cluter q from GetRawQ, apply baseline and Kr pad-calibration
  //

  const Int_t det     = cl->GetDetector();
  const Int_t pad3col = cl->GetPadCol();
  const Int_t padrow  = cl->GetPadRow();

  Double_t rndqsum = 0;
  for(Int_t ii=0; ii<7; ii++){
    if(cl->GetSignals()[ii] < EPSILON){//bad pad marked by electronics
      continue;
    }

    const Int_t icol = pad3col+(ii-3);
    const Double_t padgain = GetPadGain(det, icol, padrow);
    if(padgain<0){//indices out of range, pad3col near boundary case
      continue;
    }

    const Double_t rndsignal = (cl->GetSignals()[ii] - baseline )/(AliTRDdEdxBaseUtils::IsPadGainOn()? padgain : 1);

    //sum it anyway even if signal below baseline, as long as the total is positive
    rndqsum += rndsignal;
  }

  return rndqsum;
}

Double_t AliTRDdEdxReconUtils::GetClusterQ(const Bool_t kinvq, const AliTRDseedV1 * seed, const Int_t itb)
{
  //
  //get cluster charge
  //
  Double_t dq = 0;
  AliTRDcluster *cl = 0x0;
      
  const Double_t baseline = 10;

  //GetRNDClusterQ(cl)>0 ensures that the total sum of q is above baseline*NsignalPhysical. 
  cl = seed->GetClusters(itb);                    if(cl && GetRNDClusterQ(cl, baseline)>0 ) dq+= GetRNDClusterQ(cl, baseline);
  cl = seed->GetClusters(itb+AliTRDseedV1::kNtb); if(cl && GetRNDClusterQ(cl, baseline)>0 ) dq+= GetRNDClusterQ(cl, baseline);

  dq /= AliTRDdEdxBaseUtils::Getdldx(seed);
  
  dq /= AliTRDdEdxBaseUtils::QScale();
      
  if(kinvq){
    if(dq>EPSILON){
      dq = 1/dq;
    }
  }

  return dq;
}

Int_t AliTRDdEdxReconUtils::GetArrayClusterQ(const Bool_t kinvq, TVectorD *arrayQ, TVectorD *arrayX, const AliTRDtrackV1 *trdtrack, Int_t timeBin0, Int_t timeBin1, Int_t tstep)
{
  //
  //return nclustter
  //(if kinvq, return 1/q array), size of array must be larger than 31*6
  //
  if(!arrayQ || arrayQ->GetNrows()< (AliTRDseedV1::kNtb*AliTRDtrackV1::kNplane)){
    printf("AliTRDdEdxReconUtils::GetArrayClusterQ error arrayQ null or size too small! %d\n", arrayQ? arrayQ->GetNrows() : -999); exit(1);
  }
  if(!arrayX || arrayX->GetNrows()< (AliTRDseedV1::kNtb*AliTRDtrackV1::kNplane)){
    printf("AliTRDdEdxReconUtils::GetArrayClusterQ error arrayX null or size too small! %d\n", arrayX? arrayX->GetNrows() : -999); exit(1);
  }

  const Int_t mintb = 0;
  const Int_t maxtb = AliTRDseedV1::kNtb-1;
  if(timeBin0<mintb) timeBin0=mintb;
  if(timeBin1>maxtb) timeBin1=maxtb;
  if(tstep<=0) tstep=1;

  //============
  Int_t tbN=0;
  Double_t tbQ[200];
  Int_t tbBin[200];
    
  for(Int_t ichamber=0; ichamber < AliTRDtrackV1::kNplane; ichamber++){
    const AliTRDseedV1 * seed = trdtrack->GetTracklet(ichamber);
    if(!seed)
      continue;
    
    const Int_t det = seed->GetDetector();

    for(Int_t itb=timeBin0; itb<=timeBin1; itb+=tstep){
      const Double_t dq = GetClusterQ(kinvq, seed, itb);
      if(dq<EPSILON)
        continue;

      const Int_t gtb = det * AliTRDseedV1::kNtb + itb;

      tbQ[tbN]=dq;
      tbBin[tbN]=gtb;
      tbN++;
    }
  }

  Int_t ncls = 0;
  for(Int_t iq=0; iq<tbN; iq++){
    if(tbQ[iq]<EPSILON)
      continue;

    (*arrayQ)[ncls] = tbQ[iq];
    (*arrayX)[ncls] = tbBin[iq];

    ncls++;
  }

  static Int_t kprint = 100;
  if(kprint<0){
    printf("\nAliTRDdEdxReconUtils::GetArrayClusterQ raw cluster-Q\n");
    for(Int_t iq=0; iq<ncls; iq++){
      const Int_t ichamber =  AliTRDdEdxBaseUtils::ToLayer((*arrayX)[iq]);
      const AliTRDseedV1 * seed = trdtrack->GetTracklet(ichamber);
      if(!seed){
        printf("error seed null!!\n"); exit(1);
      }
      const Double_t rawq =  (*arrayQ)[iq] * 45. * AliTRDdEdxBaseUtils::Getdldx(seed);
      printf("esdid=%d; chamber=%d; timebin=%d; rawq= %.3f; myq[%d]= %e;\n", trdtrack->GetESDid(), ichamber, AliTRDdEdxBaseUtils::ToTimeBin((*arrayX)[iq]), rawq, iq, (*arrayQ)[iq]);
    }
    printf("\n");
  }
  kprint++;

  return ncls;
}

Int_t AliTRDdEdxReconUtils::UpdateArrayX(const Int_t ncls, TVectorD* arrayX)
{
  //
  //arrayX det*Ntb+itb -> itb
  //

  TVectorD countChamber(6);
  for(Int_t ii = 0; ii<ncls; ii++){
    const Int_t xx = (Int_t)(*arrayX)[ii];
    const Int_t idet = AliTRDdEdxBaseUtils::ToDetector(xx);
    
    const Double_t ich = AliTRDgeometry::GetLayer(idet);
    const Double_t itb = AliTRDdEdxBaseUtils::ToTimeBin(xx);
    (*arrayX)[ii] = ich*AliTRDseedV1::kNtb+itb;

    countChamber[ich] = 1;
  }

  const Double_t nch = countChamber.Sum();
  return (Int_t) nch;
}


 AliTRDdEdxReconUtils.cxx:1
 AliTRDdEdxReconUtils.cxx:2
 AliTRDdEdxReconUtils.cxx:3
 AliTRDdEdxReconUtils.cxx:4
 AliTRDdEdxReconUtils.cxx:5
 AliTRDdEdxReconUtils.cxx:6
 AliTRDdEdxReconUtils.cxx:7
 AliTRDdEdxReconUtils.cxx:8
 AliTRDdEdxReconUtils.cxx:9
 AliTRDdEdxReconUtils.cxx:10
 AliTRDdEdxReconUtils.cxx:11
 AliTRDdEdxReconUtils.cxx:12
 AliTRDdEdxReconUtils.cxx:13
 AliTRDdEdxReconUtils.cxx:14
 AliTRDdEdxReconUtils.cxx:15
 AliTRDdEdxReconUtils.cxx:16
 AliTRDdEdxReconUtils.cxx:17
 AliTRDdEdxReconUtils.cxx:18
 AliTRDdEdxReconUtils.cxx:19
 AliTRDdEdxReconUtils.cxx:20
 AliTRDdEdxReconUtils.cxx:21
 AliTRDdEdxReconUtils.cxx:22
 AliTRDdEdxReconUtils.cxx:23
 AliTRDdEdxReconUtils.cxx:24
 AliTRDdEdxReconUtils.cxx:25
 AliTRDdEdxReconUtils.cxx:26
 AliTRDdEdxReconUtils.cxx:27
 AliTRDdEdxReconUtils.cxx:28
 AliTRDdEdxReconUtils.cxx:29
 AliTRDdEdxReconUtils.cxx:30
 AliTRDdEdxReconUtils.cxx:31
 AliTRDdEdxReconUtils.cxx:32
 AliTRDdEdxReconUtils.cxx:33
 AliTRDdEdxReconUtils.cxx:34
 AliTRDdEdxReconUtils.cxx:35
 AliTRDdEdxReconUtils.cxx:36
 AliTRDdEdxReconUtils.cxx:37
 AliTRDdEdxReconUtils.cxx:38
 AliTRDdEdxReconUtils.cxx:39
 AliTRDdEdxReconUtils.cxx:40
 AliTRDdEdxReconUtils.cxx:41
 AliTRDdEdxReconUtils.cxx:42
 AliTRDdEdxReconUtils.cxx:43
 AliTRDdEdxReconUtils.cxx:44
 AliTRDdEdxReconUtils.cxx:45
 AliTRDdEdxReconUtils.cxx:46
 AliTRDdEdxReconUtils.cxx:47
 AliTRDdEdxReconUtils.cxx:48
 AliTRDdEdxReconUtils.cxx:49
 AliTRDdEdxReconUtils.cxx:50
 AliTRDdEdxReconUtils.cxx:51
 AliTRDdEdxReconUtils.cxx:52
 AliTRDdEdxReconUtils.cxx:53
 AliTRDdEdxReconUtils.cxx:54
 AliTRDdEdxReconUtils.cxx:55
 AliTRDdEdxReconUtils.cxx:56
 AliTRDdEdxReconUtils.cxx:57
 AliTRDdEdxReconUtils.cxx:58
 AliTRDdEdxReconUtils.cxx:59
 AliTRDdEdxReconUtils.cxx:60
 AliTRDdEdxReconUtils.cxx:61
 AliTRDdEdxReconUtils.cxx:62
 AliTRDdEdxReconUtils.cxx:63
 AliTRDdEdxReconUtils.cxx:64
 AliTRDdEdxReconUtils.cxx:65
 AliTRDdEdxReconUtils.cxx:66
 AliTRDdEdxReconUtils.cxx:67
 AliTRDdEdxReconUtils.cxx:68
 AliTRDdEdxReconUtils.cxx:69
 AliTRDdEdxReconUtils.cxx:70
 AliTRDdEdxReconUtils.cxx:71
 AliTRDdEdxReconUtils.cxx:72
 AliTRDdEdxReconUtils.cxx:73
 AliTRDdEdxReconUtils.cxx:74
 AliTRDdEdxReconUtils.cxx:75
 AliTRDdEdxReconUtils.cxx:76
 AliTRDdEdxReconUtils.cxx:77
 AliTRDdEdxReconUtils.cxx:78
 AliTRDdEdxReconUtils.cxx:79
 AliTRDdEdxReconUtils.cxx:80
 AliTRDdEdxReconUtils.cxx:81
 AliTRDdEdxReconUtils.cxx:82
 AliTRDdEdxReconUtils.cxx:83
 AliTRDdEdxReconUtils.cxx:84
 AliTRDdEdxReconUtils.cxx:85
 AliTRDdEdxReconUtils.cxx:86
 AliTRDdEdxReconUtils.cxx:87
 AliTRDdEdxReconUtils.cxx:88
 AliTRDdEdxReconUtils.cxx:89
 AliTRDdEdxReconUtils.cxx:90
 AliTRDdEdxReconUtils.cxx:91
 AliTRDdEdxReconUtils.cxx:92
 AliTRDdEdxReconUtils.cxx:93
 AliTRDdEdxReconUtils.cxx:94
 AliTRDdEdxReconUtils.cxx:95
 AliTRDdEdxReconUtils.cxx:96
 AliTRDdEdxReconUtils.cxx:97
 AliTRDdEdxReconUtils.cxx:98
 AliTRDdEdxReconUtils.cxx:99
 AliTRDdEdxReconUtils.cxx:100
 AliTRDdEdxReconUtils.cxx:101
 AliTRDdEdxReconUtils.cxx:102
 AliTRDdEdxReconUtils.cxx:103
 AliTRDdEdxReconUtils.cxx:104
 AliTRDdEdxReconUtils.cxx:105
 AliTRDdEdxReconUtils.cxx:106
 AliTRDdEdxReconUtils.cxx:107
 AliTRDdEdxReconUtils.cxx:108
 AliTRDdEdxReconUtils.cxx:109
 AliTRDdEdxReconUtils.cxx:110
 AliTRDdEdxReconUtils.cxx:111
 AliTRDdEdxReconUtils.cxx:112
 AliTRDdEdxReconUtils.cxx:113
 AliTRDdEdxReconUtils.cxx:114
 AliTRDdEdxReconUtils.cxx:115
 AliTRDdEdxReconUtils.cxx:116
 AliTRDdEdxReconUtils.cxx:117
 AliTRDdEdxReconUtils.cxx:118
 AliTRDdEdxReconUtils.cxx:119
 AliTRDdEdxReconUtils.cxx:120
 AliTRDdEdxReconUtils.cxx:121
 AliTRDdEdxReconUtils.cxx:122
 AliTRDdEdxReconUtils.cxx:123
 AliTRDdEdxReconUtils.cxx:124
 AliTRDdEdxReconUtils.cxx:125
 AliTRDdEdxReconUtils.cxx:126
 AliTRDdEdxReconUtils.cxx:127
 AliTRDdEdxReconUtils.cxx:128
 AliTRDdEdxReconUtils.cxx:129
 AliTRDdEdxReconUtils.cxx:130
 AliTRDdEdxReconUtils.cxx:131
 AliTRDdEdxReconUtils.cxx:132
 AliTRDdEdxReconUtils.cxx:133
 AliTRDdEdxReconUtils.cxx:134
 AliTRDdEdxReconUtils.cxx:135
 AliTRDdEdxReconUtils.cxx:136
 AliTRDdEdxReconUtils.cxx:137
 AliTRDdEdxReconUtils.cxx:138
 AliTRDdEdxReconUtils.cxx:139
 AliTRDdEdxReconUtils.cxx:140
 AliTRDdEdxReconUtils.cxx:141
 AliTRDdEdxReconUtils.cxx:142
 AliTRDdEdxReconUtils.cxx:143
 AliTRDdEdxReconUtils.cxx:144
 AliTRDdEdxReconUtils.cxx:145
 AliTRDdEdxReconUtils.cxx:146
 AliTRDdEdxReconUtils.cxx:147
 AliTRDdEdxReconUtils.cxx:148
 AliTRDdEdxReconUtils.cxx:149
 AliTRDdEdxReconUtils.cxx:150
 AliTRDdEdxReconUtils.cxx:151
 AliTRDdEdxReconUtils.cxx:152
 AliTRDdEdxReconUtils.cxx:153
 AliTRDdEdxReconUtils.cxx:154
 AliTRDdEdxReconUtils.cxx:155
 AliTRDdEdxReconUtils.cxx:156
 AliTRDdEdxReconUtils.cxx:157
 AliTRDdEdxReconUtils.cxx:158
 AliTRDdEdxReconUtils.cxx:159
 AliTRDdEdxReconUtils.cxx:160
 AliTRDdEdxReconUtils.cxx:161
 AliTRDdEdxReconUtils.cxx:162
 AliTRDdEdxReconUtils.cxx:163
 AliTRDdEdxReconUtils.cxx:164
 AliTRDdEdxReconUtils.cxx:165
 AliTRDdEdxReconUtils.cxx:166
 AliTRDdEdxReconUtils.cxx:167
 AliTRDdEdxReconUtils.cxx:168
 AliTRDdEdxReconUtils.cxx:169
 AliTRDdEdxReconUtils.cxx:170
 AliTRDdEdxReconUtils.cxx:171
 AliTRDdEdxReconUtils.cxx:172
 AliTRDdEdxReconUtils.cxx:173
 AliTRDdEdxReconUtils.cxx:174
 AliTRDdEdxReconUtils.cxx:175
 AliTRDdEdxReconUtils.cxx:176
 AliTRDdEdxReconUtils.cxx:177
 AliTRDdEdxReconUtils.cxx:178
 AliTRDdEdxReconUtils.cxx:179
 AliTRDdEdxReconUtils.cxx:180
 AliTRDdEdxReconUtils.cxx:181
 AliTRDdEdxReconUtils.cxx:182
 AliTRDdEdxReconUtils.cxx:183
 AliTRDdEdxReconUtils.cxx:184
 AliTRDdEdxReconUtils.cxx:185
 AliTRDdEdxReconUtils.cxx:186
 AliTRDdEdxReconUtils.cxx:187
 AliTRDdEdxReconUtils.cxx:188
 AliTRDdEdxReconUtils.cxx:189
 AliTRDdEdxReconUtils.cxx:190
 AliTRDdEdxReconUtils.cxx:191
 AliTRDdEdxReconUtils.cxx:192
 AliTRDdEdxReconUtils.cxx:193
 AliTRDdEdxReconUtils.cxx:194
 AliTRDdEdxReconUtils.cxx:195
 AliTRDdEdxReconUtils.cxx:196
 AliTRDdEdxReconUtils.cxx:197
 AliTRDdEdxReconUtils.cxx:198
 AliTRDdEdxReconUtils.cxx:199
 AliTRDdEdxReconUtils.cxx:200
 AliTRDdEdxReconUtils.cxx:201
 AliTRDdEdxReconUtils.cxx:202
 AliTRDdEdxReconUtils.cxx:203
 AliTRDdEdxReconUtils.cxx:204
 AliTRDdEdxReconUtils.cxx:205
 AliTRDdEdxReconUtils.cxx:206
 AliTRDdEdxReconUtils.cxx:207
 AliTRDdEdxReconUtils.cxx:208
 AliTRDdEdxReconUtils.cxx:209
 AliTRDdEdxReconUtils.cxx:210
 AliTRDdEdxReconUtils.cxx:211
 AliTRDdEdxReconUtils.cxx:212
 AliTRDdEdxReconUtils.cxx:213
 AliTRDdEdxReconUtils.cxx:214
 AliTRDdEdxReconUtils.cxx:215
 AliTRDdEdxReconUtils.cxx:216
 AliTRDdEdxReconUtils.cxx:217
 AliTRDdEdxReconUtils.cxx:218
 AliTRDdEdxReconUtils.cxx:219
 AliTRDdEdxReconUtils.cxx:220
 AliTRDdEdxReconUtils.cxx:221
 AliTRDdEdxReconUtils.cxx:222
 AliTRDdEdxReconUtils.cxx:223
 AliTRDdEdxReconUtils.cxx:224
 AliTRDdEdxReconUtils.cxx:225
 AliTRDdEdxReconUtils.cxx:226
 AliTRDdEdxReconUtils.cxx:227
 AliTRDdEdxReconUtils.cxx:228
 AliTRDdEdxReconUtils.cxx:229
 AliTRDdEdxReconUtils.cxx:230
 AliTRDdEdxReconUtils.cxx:231
 AliTRDdEdxReconUtils.cxx:232
 AliTRDdEdxReconUtils.cxx:233
 AliTRDdEdxReconUtils.cxx:234
 AliTRDdEdxReconUtils.cxx:235
 AliTRDdEdxReconUtils.cxx:236
 AliTRDdEdxReconUtils.cxx:237
 AliTRDdEdxReconUtils.cxx:238
 AliTRDdEdxReconUtils.cxx:239
 AliTRDdEdxReconUtils.cxx:240
 AliTRDdEdxReconUtils.cxx:241
 AliTRDdEdxReconUtils.cxx:242
 AliTRDdEdxReconUtils.cxx:243
 AliTRDdEdxReconUtils.cxx:244
 AliTRDdEdxReconUtils.cxx:245
 AliTRDdEdxReconUtils.cxx:246
 AliTRDdEdxReconUtils.cxx:247
 AliTRDdEdxReconUtils.cxx:248
 AliTRDdEdxReconUtils.cxx:249
 AliTRDdEdxReconUtils.cxx:250
 AliTRDdEdxReconUtils.cxx:251
 AliTRDdEdxReconUtils.cxx:252
 AliTRDdEdxReconUtils.cxx:253
 AliTRDdEdxReconUtils.cxx:254
 AliTRDdEdxReconUtils.cxx:255
 AliTRDdEdxReconUtils.cxx:256
 AliTRDdEdxReconUtils.cxx:257
 AliTRDdEdxReconUtils.cxx:258
 AliTRDdEdxReconUtils.cxx:259
 AliTRDdEdxReconUtils.cxx:260
 AliTRDdEdxReconUtils.cxx:261
 AliTRDdEdxReconUtils.cxx:262
 AliTRDdEdxReconUtils.cxx:263
 AliTRDdEdxReconUtils.cxx:264
 AliTRDdEdxReconUtils.cxx:265
 AliTRDdEdxReconUtils.cxx:266
 AliTRDdEdxReconUtils.cxx:267
 AliTRDdEdxReconUtils.cxx:268
 AliTRDdEdxReconUtils.cxx:269
 AliTRDdEdxReconUtils.cxx:270
 AliTRDdEdxReconUtils.cxx:271
 AliTRDdEdxReconUtils.cxx:272
 AliTRDdEdxReconUtils.cxx:273
 AliTRDdEdxReconUtils.cxx:274
 AliTRDdEdxReconUtils.cxx:275
 AliTRDdEdxReconUtils.cxx:276
 AliTRDdEdxReconUtils.cxx:277
 AliTRDdEdxReconUtils.cxx:278
 AliTRDdEdxReconUtils.cxx:279
 AliTRDdEdxReconUtils.cxx:280
 AliTRDdEdxReconUtils.cxx:281
 AliTRDdEdxReconUtils.cxx:282
 AliTRDdEdxReconUtils.cxx:283
 AliTRDdEdxReconUtils.cxx:284
 AliTRDdEdxReconUtils.cxx:285
 AliTRDdEdxReconUtils.cxx:286
 AliTRDdEdxReconUtils.cxx:287
 AliTRDdEdxReconUtils.cxx:288
 AliTRDdEdxReconUtils.cxx:289
 AliTRDdEdxReconUtils.cxx:290
 AliTRDdEdxReconUtils.cxx:291
 AliTRDdEdxReconUtils.cxx:292
 AliTRDdEdxReconUtils.cxx:293
 AliTRDdEdxReconUtils.cxx:294
 AliTRDdEdxReconUtils.cxx:295
 AliTRDdEdxReconUtils.cxx:296
 AliTRDdEdxReconUtils.cxx:297
 AliTRDdEdxReconUtils.cxx:298
 AliTRDdEdxReconUtils.cxx:299
 AliTRDdEdxReconUtils.cxx:300
 AliTRDdEdxReconUtils.cxx:301
 AliTRDdEdxReconUtils.cxx:302
 AliTRDdEdxReconUtils.cxx:303
 AliTRDdEdxReconUtils.cxx:304
 AliTRDdEdxReconUtils.cxx:305
 AliTRDdEdxReconUtils.cxx:306
 AliTRDdEdxReconUtils.cxx:307
 AliTRDdEdxReconUtils.cxx:308
 AliTRDdEdxReconUtils.cxx:309
 AliTRDdEdxReconUtils.cxx:310
 AliTRDdEdxReconUtils.cxx:311
 AliTRDdEdxReconUtils.cxx:312
 AliTRDdEdxReconUtils.cxx:313
 AliTRDdEdxReconUtils.cxx:314
 AliTRDdEdxReconUtils.cxx:315
 AliTRDdEdxReconUtils.cxx:316
 AliTRDdEdxReconUtils.cxx:317
 AliTRDdEdxReconUtils.cxx:318
 AliTRDdEdxReconUtils.cxx:319
 AliTRDdEdxReconUtils.cxx:320
 AliTRDdEdxReconUtils.cxx:321
 AliTRDdEdxReconUtils.cxx:322
 AliTRDdEdxReconUtils.cxx:323
 AliTRDdEdxReconUtils.cxx:324
 AliTRDdEdxReconUtils.cxx:325
 AliTRDdEdxReconUtils.cxx:326
 AliTRDdEdxReconUtils.cxx:327
 AliTRDdEdxReconUtils.cxx:328
 AliTRDdEdxReconUtils.cxx:329
 AliTRDdEdxReconUtils.cxx:330
 AliTRDdEdxReconUtils.cxx:331
 AliTRDdEdxReconUtils.cxx:332
 AliTRDdEdxReconUtils.cxx:333
 AliTRDdEdxReconUtils.cxx:334