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.                  *
 **************************************************************************/

//
// class to calculate TRD dEdx
// 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"
#include "AliTRDdEdxCalibHistArray.h"
#include "AliTRDdEdxCalibUtils.h"

#define EPSILON 1e-8

AliTRDdEdxCalibHistArray * AliTRDdEdxCalibUtils::fgHistArray = 0x0;
TObjArray * AliTRDdEdxCalibUtils::fgObjArray = 0x0;

//============================================================
//                           CalibObj
//============================================================
TObjArray * AliTRDdEdxCalibUtils::GetObjArray()
{
  //
  //return fgObjArray, initialized if null
  //

  if(!fgObjArray){
    fgObjArray = new TObjArray(8);
  }

  return fgObjArray;
}

TObjArray * AliTRDdEdxCalibUtils::GetObj(const Bool_t kinvq, const Double_t mag, const Int_t charge)
{
  //
  //return calib obj
  //
  if(!fgObjArray){
    printf("AliTRDdEdxCalibUtils::GetObjArray(kinvq, mag, charge) error fgObjArray null!!\n"); exit(1);
  }

  return (TObjArray*) fgObjArray->At(AliTRDdEdxCalibHistArray::GetIterator(kinvq, mag, charge));
}

void AliTRDdEdxCalibUtils::DeleteObjArray()
{
  //
  //delete calib obj
  //
  if(fgObjArray){
    fgObjArray->SetOwner();
    delete fgObjArray;
    fgObjArray = 0x0;
  }
}

Bool_t AliTRDdEdxCalibUtils::GenerateOCDB(const Int_t run, const TString path)
{
  //
  //generate OCDB object PHQ, do like
  //AliTRDdEdxCalibUtils::GenerateOCDB(run, "local://./")
  //if fgObjArray==0x0, generate default one
  //else generate according to fgObjArray
  //

  TObjArray * arr8 = 0x0;
  if(fgObjArray){
    arr8 = fgObjArray;
  }
  else{
    arr8 = new TObjArray(8);
    arr8->SetOwner();

    for(Int_t ii=0; ii<8; ii++){
      TObjArray * arr1 = new TObjArray(1);
      arr1->SetOwner();
      TString objn(AliTRDdEdxCalibHistArray::GetNameAt(ii));
      objn.ReplaceAll("Hist","Obj");
      arr1->SetName(objn);
      
      const Int_t nbins = AliTRDdEdxBaseUtils::NTRDtimebin();
      TVectorD * vec = new TVectorD(nbins);
      for(Int_t jj=0; jj<nbins; jj++){
        (*vec)[jj] = 1;
      }
      arr1->Add(vec);
      arr8->Add(arr1);
    }
  }

  AliCDBMetaData *metaData= new AliCDBMetaData();
  metaData->SetObjectClassName("TObjArray");
  metaData->SetResponsible("Raphaelle Bailhache and Xianguo Lu");

  AliCDBId id1("TRD/Calib/PHQ", run<0? 0 : run , run<0 ? 999999999 : run);
  AliCDBStorage * gStorage = AliCDBManager::Instance()->GetStorage(path);
  gStorage->Put(arr8, id1, metaData);

  delete metaData;
  delete arr8;

  return kTRUE;
}

//============================================================
//                           CalibHist
//============================================================
void AliTRDdEdxCalibUtils::DeleteHistArray()
{
  //
  //delete calib hist
  //
  delete fgHistArray;
  fgHistArray = 0x0;
}

THnBase * AliTRDdEdxCalibUtils::GetHistAt(const Int_t iter)
{
  //
  //
  //
  if(iter<fgHistArray->GetSize())
    return (THnBase*)fgHistArray->At(iter);
  else
    return 0x0;
}

void AliTRDdEdxCalibUtils::IniHistArray(TList *list, const Bool_t kNoInv)
{
  //
  //initialize calib hist, list should not own the hist, or list->Clear/delete hist should not be called
  //

  delete fgHistArray;
  fgHistArray = new AliTRDdEdxCalibHistArray(kNoInv);
  list->Add(fgHistArray);
}

Bool_t AliTRDdEdxCalibUtils::ReadHistArray(const TString filename, const TString listname)
{
  //
  //used in AliTRDPreprocessorOffline
  //read in calib hist from file, only for PHQ
  //

  //maybe already open by others... don't close
  TFile fcalib(filename);
  TObjArray * array = (TObjArray*)fcalib.Get(listname);
  const TString histname = AliTRDdEdxCalibHistArray::GetArrayName();
 
  AliTRDdEdxCalibHistArray * tmph=0x0;
  if(array){
    tmph = (AliTRDdEdxCalibHistArray *) array->FindObject(histname);
  }
  else{
    tmph = (AliTRDdEdxCalibHistArray *) fcalib.Get(histname);
  }
  if(!tmph){
    printf("AliTRDdEdxCalibUtils::ReadCalibHist warning calib hist not found! %s %s %s\n", filename.Data(), listname.Data(), histname.Data());
    fcalib.ls();
    if(array){
      array->ls();
      delete array;
    }
    return kFALSE;
  }
  
  delete fgHistArray; 
  fgHistArray = new AliTRDdEdxCalibHistArray(*tmph);

  return kTRUE;
}

void AliTRDdEdxCalibUtils::FillHist(const Int_t ncls, const TVectorD *arrayQ, const TVectorD *arrayX, THnBase * hcalib, const Double_t scale)
{
  //
  //fill calibration hist
  //
  if(!hcalib){printf("AliTRDdEdxCalibUtils::FillCalibHist errro hcalib null!!\n"); exit(1);}

  for(Int_t ii=0; ii<ncls; ii++){
    Double_t dq = (*arrayQ)[ii]/scale;
    const Double_t qmin = hcalib->GetAxis(1)->GetXmin() +0.5 * hcalib->GetAxis(1)->GetBinWidth(1);
    const Double_t qmax = hcalib->GetAxis(1)->GetXmax() -0.5 * hcalib->GetAxis(1)->GetBinWidth(1);

    if(dq<qmin)
      dq = qmin;
    if(dq>qmax)
      dq = qmax;

    const Double_t xx = (*arrayX)[ii];
    const Double_t xmin = hcalib->GetAxis(0)->GetXmin();
    const Double_t xmax = hcalib->GetAxis(0)->GetXmax();

    if(xx>=xmax || xx<xmin){
      printf("AliTRDdEdxCalibUtils::FillCalibHist error x overflow or underflow! %s %15f %15f %15f\n", hcalib->GetName(),  xx, xmin, xmax); exit(1);
    }

    const Double_t var[]={xx, dq};
    hcalib->Fill(var);
  }
}

void AliTRDdEdxCalibUtils::FillHist(const AliTRDtrackV1 *trdv1, const Bool_t kinvq, const Double_t mag, const Int_t charge, const Double_t scale) 
{
  //
  //get cluster Q and fill calib hist, if kinvq = kTRUE, 1/Q is filled
  //
  if(!fgHistArray){
    printf("AliTRDdEdxCalibUtils::FillHist fgHistArray not initialized!!\n"); exit(1);
  }

  THnBase * hcalib = fgHistArray->GetHist(kinvq, mag, charge);

  TVectorD arrayQ(200), arrayX(200);
  const Int_t ncls = AliTRDdEdxReconUtils::GetArrayClusterQ(kinvq, &arrayQ, &arrayX, trdv1);
  FillHist(ncls, &arrayQ, &arrayX, hcalib, kinvq ? 1/scale : scale);

  static Int_t kprint = 100;
  if(kprint<0){
    printf("\nAliTRDdEdxCalibUtils::FillHist summary: \n");
    printf("\nkinvq= %d;\n", kinvq);
    for(Int_t iq=0; iq<ncls; iq++){
      printf("arrayX[%3d] = %15.0f; arrayQ[%3d] =  %15f;\n", iq, arrayX[iq], iq, arrayQ[iq]);
    }
    printf("\n");
  }
  kprint++;
}

//============================================================
//
//============================================================

Double_t AliTRDdEdxCalibUtils::GetCalibTPCscale(const Int_t tpcncls, const Double_t tpcsig)
{
  //
  //the scale used in calibration
  //

  if(tpcncls < AliTRDdEdxBaseUtils::CalibTPCnclsCut())
    return -999;

  if(tpcsig<EPSILON)
    return -999;

  return tpcsig/45;

}

void AliTRDdEdxCalibUtils::GetPHCountMeanRMS(const TH1D *hnor, TH1D *&hmean)
{
  //
  //calculate from the ph calib hist the (mean-3sigma) ph-count in the chamber, save in the TH1D output
  //
  const Int_t ndet = 540;
  TObjArray *obj=new TObjArray(ndet);
  obj->SetOwner();
  for(Int_t ii=0; ii<ndet; ii++){
    obj->Add(new TVectorD(AliTRDseedV1::kNtb));
  }

  //ibin = binlowedge of bin(ibin+1) = the number fills this bin
  for(Int_t ibin=0; ibin<hnor->GetNbinsX(); ibin++){
    const Double_t stat = hnor->GetBinContent(ibin+1);
    if(stat<EPSILON){
      continue;
    }

    const Int_t idet = AliTRDdEdxBaseUtils::ToDetector(ibin);
    const Int_t itb  = AliTRDdEdxBaseUtils::ToTimeBin(ibin);
    TVectorD *vec=(TVectorD *)obj->At(idet);
    (*vec)[itb] = stat;
  }

  hmean = new TH1D(Form("%sdetmean", hnor->GetName()), "", hnor->GetNbinsX(), hnor->GetXaxis()->GetXmin(), hnor->GetXaxis()->GetXmax());
  for(Int_t ibin=0; ibin<hnor->GetNbinsX(); ibin++){
    const Int_t idet = AliTRDdEdxBaseUtils::ToDetector(ibin);
    const TVectorD *vec=(TVectorD *)obj->At(idet);

    Int_t nonzero = 0;
    for(Int_t ii=0; ii<vec->GetNrows(); ii++){
      if((*vec)[ii]>EPSILON){
        nonzero++;
      }
    }

    Double_t mean = 0;
    const Double_t lowfrac = 0.6;
    //if there are too many 0's, reject this chamber by settig mean=rms=0
    if(nonzero> (AliTRDseedV1::kNtb*(1-lowfrac)) ){
      //only highest (1-lowfrac)*31 timebins are used to estimate the mean and rms! important! otherwise the 0' will make rms very large!
      mean = AliTRDdEdxBaseUtils::TruncatedMean(AliTRDseedV1::kNtb, vec->GetMatrixArray(), lowfrac, 1);
    }

    hmean->SetBinContent(ibin+1, mean);
  }

  delete obj;
}

  /*
    http://root.cern.ch/root/html/TH1.html
    When an histogram is created, a reference to it is automatically added to the list of in-memory objects for the current file or directory. This default behaviour can be changed by:
    
    h->SetDirectory(0);          for the current histogram h
    TH1::AddDirectory(kFALSE);   sets a global switch disabling the reference
    
    When the histogram is deleted, the reference to it is removed from the list of objects in memory. When a file is closed, all histograms in memory associated with this file are automatically deleted. 
  */

TObjArray* AliTRDdEdxCalibUtils::HistToObj(const THnBase *hh, Int_t run, TList *lout, TTreeSRedirector *calibStream)
{
  //
  //produce calibration objects
  //

  const TString hname = hh->GetName();
  const Bool_t kinvq = TString(hname(hname.First('Q')+1,1)).Atoi()&4;

  //----------------------------------------
  //               Define nbin, tag, cobj0
  //----------------------------------------
  const Int_t nbin = AliTRDdEdxBaseUtils::NTRDtimebin();

    
  TString tag(hname);
  tag.ReplaceAll("Hist","Obj");
  
  TObjArray * cobj0 = new TObjArray(1);
  cobj0->SetOwner();
  cobj0->SetName(tag);
  cobj0->Add(new TVectorD(nbin));
  
  //----------------------------------------
  //               Define lowFrac, highFrac
  //----------------------------------------
  Double_t lowFrac = -999, highFrac = -999;
  if(!kinvq) {
    lowFrac = 0.01; highFrac = AliTRDdEdxBaseUtils::Q0Frac();
  }
  else{
    lowFrac = AliTRDdEdxBaseUtils::Q1Frac(); highFrac = 0.99;
  }
  
  //----------------------------------------
  //               Get analysis result
  //----------------------------------------
  TH1::AddDirectory(kFALSE);//important!
  TH1D *hnor=0x0, *hmpv=0x0, *hres=0x0, *hwid=0x0, *htrdphmean = 0x0;//if(!lout), these have to be deleted
  TH2D *hpj = hh->Projection(1,0);
  AliTRDdEdxBaseUtils::FitSlicesY(hpj, hnor, hmpv, hwid, hres, 0, lowFrac, highFrac);
  GetPHCountMeanRMS(hnor, htrdphmean);
  if(lout){
    lout->Add(htrdphmean);
  }
  delete hpj;
  
  if(lout){
    lout->Add(hnor);
    lout->Add(hmpv);
    lout->Add(hwid);
    lout->Add(hres);
  }
  
  //----------------------------------------
  //               Define Counter
  //----------------------------------------
  TVectorD *countDet=0x0;
  TObjArray *countSSL=0x0;

  if(!kinvq){
    countDet=new TVectorD(540);
    countSSL=new TObjArray(90);//SectorStackLayer
    countSSL->SetOwner();
    for(Int_t ii=0; ii<90; ii++){
      countSSL->Add(new TVectorD(6));
    }
  }

  //----------------------------------------
  //               Fill cobj0
  //----------------------------------------

  //ibin = binlowedge of bin(ibin+1) = the number fills this bin
  for(Int_t ibin=0; ibin<nbin; ibin++){
    Double_t gnor = hnor->GetBinContent(ibin+1);
    Double_t gmpv = hmpv->GetBinContent(ibin+1);
    Double_t gwid = hwid->GetBinContent(ibin+1);
    Double_t gres = hres->GetBinContent(ibin+1);

    //--- set additional cut by kpass
    Bool_t kpass = kTRUE;
    Double_t gtrdphmean = -999;
    if(htrdphmean){
      gtrdphmean = htrdphmean->GetBinContent(ibin+1);
      //chamber no statistics (e.g. too many 0's), not usual, not seen in run 143237
      if(gtrdphmean<EPSILON){
        kpass = kFALSE;
      }
      if(gnor<AliTRDdEdxBaseUtils::TimeBinCountCut()*gtrdphmean){
        kpass = kFALSE;
      }
    }
    
    //--- set calibration constant p0
    Double_t p0= 0;
    
    //reason for gmpv=0:
    //1)gnor<=3; truncation in hist: (0, 0.6*ntot=1.8 with ntot=3]={1}, in hist entries can pile up so that ntot=2, or 3, and (ntot>nstart && ntot<=nstop) is skipped;
    //2)TruncatedMean(hist) out of range (only for Q0, not Q1).
    
    if(gmpv>EPSILON && kpass){ 
      if(tag.Contains("T0")){
        p0 = gmpv;
      }
      else{
        p0 = 1/gmpv;
      }
      //printf("outcalibobj%s %d %15.6e\n", tag.Data(), ibin, p0);
    }

    (*( (TVectorD*)cobj0->At(0) ))[ibin] = p0;

    //--- save optional record
    if(p0>EPSILON && countDet && countSSL){
      const Int_t idet = AliTRDdEdxBaseUtils::ToDetector(ibin);
      (*countDet)[idet]=1;
      
      const Int_t isector = AliTRDdEdxBaseUtils::ToSector(ibin);
      const Int_t istack = AliTRDdEdxBaseUtils::ToStack(ibin);
      const Int_t ilayer = AliTRDdEdxBaseUtils::ToLayer(ibin);
      TVectorD * vecsectorstack = (TVectorD*)countSSL->At(istack*18+isector);
      (*vecsectorstack)[ilayer]=1;
    }
    
    if(calibStream){
      (*calibStream)<<tag<<
        "run="<<run<<
        "p0="<<p0<<
        
        "nor="<<gnor<<
        "mpv="<<gmpv<<
        "wid="<<gwid<<
        "res="<<gres<<
        "gtrdphmean="<<gtrdphmean<<
        
        "ibin="<<ibin<<
        "\n";
    }
  }
  
  //----------------------------------------
  //               Status Report
  //----------------------------------------
  if(countDet && countSSL){
    TVectorD count2Dstack(90);
    for(Int_t ii=0; ii<90; ii++){
      TVectorD * vecsectorstack = (TVectorD*)countSSL->At(ii);
      const Int_t nlayer = (Int_t)vecsectorstack->Sum();
      if(nlayer==6){
        count2Dstack[ii]=1;
      }
    }

    printf("\nAliTRDdEdxCalibUtils::GetCalibObj Summary run: %d name: %s entries: %.0f ndetector: %03.0f n2dstack %02.0f\n\n", run, hname.Data(), hh->GetEntries(), countDet->Sum(), count2Dstack.Sum());
  }

  //----------------------------------------
  //               Clean Up
  //----------------------------------------
  
  TH1D **hhs[]={&hnor, &hmpv, &hwid, &hres, &htrdphmean};
  const Int_t nhh=sizeof(hhs)/sizeof(TH1D**);
  for(Int_t ihh=0; ihh<nhh; ihh++){
    if(!lout){
      delete (*hhs[ihh]);
    }
  }
  
  delete countDet;
  delete countSSL;

  //----------------------------------------

  return cobj0;
}

 AliTRDdEdxCalibUtils.cxx:1
 AliTRDdEdxCalibUtils.cxx:2
 AliTRDdEdxCalibUtils.cxx:3
 AliTRDdEdxCalibUtils.cxx:4
 AliTRDdEdxCalibUtils.cxx:5
 AliTRDdEdxCalibUtils.cxx:6
 AliTRDdEdxCalibUtils.cxx:7
 AliTRDdEdxCalibUtils.cxx:8
 AliTRDdEdxCalibUtils.cxx:9
 AliTRDdEdxCalibUtils.cxx:10
 AliTRDdEdxCalibUtils.cxx:11
 AliTRDdEdxCalibUtils.cxx:12
 AliTRDdEdxCalibUtils.cxx:13
 AliTRDdEdxCalibUtils.cxx:14
 AliTRDdEdxCalibUtils.cxx:15
 AliTRDdEdxCalibUtils.cxx:16
 AliTRDdEdxCalibUtils.cxx:17
 AliTRDdEdxCalibUtils.cxx:18
 AliTRDdEdxCalibUtils.cxx:19
 AliTRDdEdxCalibUtils.cxx:20
 AliTRDdEdxCalibUtils.cxx:21
 AliTRDdEdxCalibUtils.cxx:22
 AliTRDdEdxCalibUtils.cxx:23
 AliTRDdEdxCalibUtils.cxx:24
 AliTRDdEdxCalibUtils.cxx:25
 AliTRDdEdxCalibUtils.cxx:26
 AliTRDdEdxCalibUtils.cxx:27
 AliTRDdEdxCalibUtils.cxx:28
 AliTRDdEdxCalibUtils.cxx:29
 AliTRDdEdxCalibUtils.cxx:30
 AliTRDdEdxCalibUtils.cxx:31
 AliTRDdEdxCalibUtils.cxx:32
 AliTRDdEdxCalibUtils.cxx:33
 AliTRDdEdxCalibUtils.cxx:34
 AliTRDdEdxCalibUtils.cxx:35
 AliTRDdEdxCalibUtils.cxx:36
 AliTRDdEdxCalibUtils.cxx:37
 AliTRDdEdxCalibUtils.cxx:38
 AliTRDdEdxCalibUtils.cxx:39
 AliTRDdEdxCalibUtils.cxx:40
 AliTRDdEdxCalibUtils.cxx:41
 AliTRDdEdxCalibUtils.cxx:42
 AliTRDdEdxCalibUtils.cxx:43
 AliTRDdEdxCalibUtils.cxx:44
 AliTRDdEdxCalibUtils.cxx:45
 AliTRDdEdxCalibUtils.cxx:46
 AliTRDdEdxCalibUtils.cxx:47
 AliTRDdEdxCalibUtils.cxx:48
 AliTRDdEdxCalibUtils.cxx:49
 AliTRDdEdxCalibUtils.cxx:50
 AliTRDdEdxCalibUtils.cxx:51
 AliTRDdEdxCalibUtils.cxx:52
 AliTRDdEdxCalibUtils.cxx:53
 AliTRDdEdxCalibUtils.cxx:54
 AliTRDdEdxCalibUtils.cxx:55
 AliTRDdEdxCalibUtils.cxx:56
 AliTRDdEdxCalibUtils.cxx:57
 AliTRDdEdxCalibUtils.cxx:58
 AliTRDdEdxCalibUtils.cxx:59
 AliTRDdEdxCalibUtils.cxx:60
 AliTRDdEdxCalibUtils.cxx:61
 AliTRDdEdxCalibUtils.cxx:62
 AliTRDdEdxCalibUtils.cxx:63
 AliTRDdEdxCalibUtils.cxx:64
 AliTRDdEdxCalibUtils.cxx:65
 AliTRDdEdxCalibUtils.cxx:66
 AliTRDdEdxCalibUtils.cxx:67
 AliTRDdEdxCalibUtils.cxx:68
 AliTRDdEdxCalibUtils.cxx:69
 AliTRDdEdxCalibUtils.cxx:70
 AliTRDdEdxCalibUtils.cxx:71
 AliTRDdEdxCalibUtils.cxx:72
 AliTRDdEdxCalibUtils.cxx:73
 AliTRDdEdxCalibUtils.cxx:74
 AliTRDdEdxCalibUtils.cxx:75
 AliTRDdEdxCalibUtils.cxx:76
 AliTRDdEdxCalibUtils.cxx:77
 AliTRDdEdxCalibUtils.cxx:78
 AliTRDdEdxCalibUtils.cxx:79
 AliTRDdEdxCalibUtils.cxx:80
 AliTRDdEdxCalibUtils.cxx:81
 AliTRDdEdxCalibUtils.cxx:82
 AliTRDdEdxCalibUtils.cxx:83
 AliTRDdEdxCalibUtils.cxx:84
 AliTRDdEdxCalibUtils.cxx:85
 AliTRDdEdxCalibUtils.cxx:86
 AliTRDdEdxCalibUtils.cxx:87
 AliTRDdEdxCalibUtils.cxx:88
 AliTRDdEdxCalibUtils.cxx:89
 AliTRDdEdxCalibUtils.cxx:90
 AliTRDdEdxCalibUtils.cxx:91
 AliTRDdEdxCalibUtils.cxx:92
 AliTRDdEdxCalibUtils.cxx:93
 AliTRDdEdxCalibUtils.cxx:94
 AliTRDdEdxCalibUtils.cxx:95
 AliTRDdEdxCalibUtils.cxx:96
 AliTRDdEdxCalibUtils.cxx:97
 AliTRDdEdxCalibUtils.cxx:98
 AliTRDdEdxCalibUtils.cxx:99
 AliTRDdEdxCalibUtils.cxx:100
 AliTRDdEdxCalibUtils.cxx:101
 AliTRDdEdxCalibUtils.cxx:102
 AliTRDdEdxCalibUtils.cxx:103
 AliTRDdEdxCalibUtils.cxx:104
 AliTRDdEdxCalibUtils.cxx:105
 AliTRDdEdxCalibUtils.cxx:106
 AliTRDdEdxCalibUtils.cxx:107
 AliTRDdEdxCalibUtils.cxx:108
 AliTRDdEdxCalibUtils.cxx:109
 AliTRDdEdxCalibUtils.cxx:110
 AliTRDdEdxCalibUtils.cxx:111
 AliTRDdEdxCalibUtils.cxx:112
 AliTRDdEdxCalibUtils.cxx:113
 AliTRDdEdxCalibUtils.cxx:114
 AliTRDdEdxCalibUtils.cxx:115
 AliTRDdEdxCalibUtils.cxx:116
 AliTRDdEdxCalibUtils.cxx:117
 AliTRDdEdxCalibUtils.cxx:118
 AliTRDdEdxCalibUtils.cxx:119
 AliTRDdEdxCalibUtils.cxx:120
 AliTRDdEdxCalibUtils.cxx:121
 AliTRDdEdxCalibUtils.cxx:122
 AliTRDdEdxCalibUtils.cxx:123
 AliTRDdEdxCalibUtils.cxx:124
 AliTRDdEdxCalibUtils.cxx:125
 AliTRDdEdxCalibUtils.cxx:126
 AliTRDdEdxCalibUtils.cxx:127
 AliTRDdEdxCalibUtils.cxx:128
 AliTRDdEdxCalibUtils.cxx:129
 AliTRDdEdxCalibUtils.cxx:130
 AliTRDdEdxCalibUtils.cxx:131
 AliTRDdEdxCalibUtils.cxx:132
 AliTRDdEdxCalibUtils.cxx:133
 AliTRDdEdxCalibUtils.cxx:134
 AliTRDdEdxCalibUtils.cxx:135
 AliTRDdEdxCalibUtils.cxx:136
 AliTRDdEdxCalibUtils.cxx:137
 AliTRDdEdxCalibUtils.cxx:138
 AliTRDdEdxCalibUtils.cxx:139
 AliTRDdEdxCalibUtils.cxx:140
 AliTRDdEdxCalibUtils.cxx:141
 AliTRDdEdxCalibUtils.cxx:142
 AliTRDdEdxCalibUtils.cxx:143
 AliTRDdEdxCalibUtils.cxx:144
 AliTRDdEdxCalibUtils.cxx:145
 AliTRDdEdxCalibUtils.cxx:146
 AliTRDdEdxCalibUtils.cxx:147
 AliTRDdEdxCalibUtils.cxx:148
 AliTRDdEdxCalibUtils.cxx:149
 AliTRDdEdxCalibUtils.cxx:150
 AliTRDdEdxCalibUtils.cxx:151
 AliTRDdEdxCalibUtils.cxx:152
 AliTRDdEdxCalibUtils.cxx:153
 AliTRDdEdxCalibUtils.cxx:154
 AliTRDdEdxCalibUtils.cxx:155
 AliTRDdEdxCalibUtils.cxx:156
 AliTRDdEdxCalibUtils.cxx:157
 AliTRDdEdxCalibUtils.cxx:158
 AliTRDdEdxCalibUtils.cxx:159
 AliTRDdEdxCalibUtils.cxx:160
 AliTRDdEdxCalibUtils.cxx:161
 AliTRDdEdxCalibUtils.cxx:162
 AliTRDdEdxCalibUtils.cxx:163
 AliTRDdEdxCalibUtils.cxx:164
 AliTRDdEdxCalibUtils.cxx:165
 AliTRDdEdxCalibUtils.cxx:166
 AliTRDdEdxCalibUtils.cxx:167
 AliTRDdEdxCalibUtils.cxx:168
 AliTRDdEdxCalibUtils.cxx:169
 AliTRDdEdxCalibUtils.cxx:170
 AliTRDdEdxCalibUtils.cxx:171
 AliTRDdEdxCalibUtils.cxx:172
 AliTRDdEdxCalibUtils.cxx:173
 AliTRDdEdxCalibUtils.cxx:174
 AliTRDdEdxCalibUtils.cxx:175
 AliTRDdEdxCalibUtils.cxx:176
 AliTRDdEdxCalibUtils.cxx:177
 AliTRDdEdxCalibUtils.cxx:178
 AliTRDdEdxCalibUtils.cxx:179
 AliTRDdEdxCalibUtils.cxx:180
 AliTRDdEdxCalibUtils.cxx:181
 AliTRDdEdxCalibUtils.cxx:182
 AliTRDdEdxCalibUtils.cxx:183
 AliTRDdEdxCalibUtils.cxx:184
 AliTRDdEdxCalibUtils.cxx:185
 AliTRDdEdxCalibUtils.cxx:186
 AliTRDdEdxCalibUtils.cxx:187
 AliTRDdEdxCalibUtils.cxx:188
 AliTRDdEdxCalibUtils.cxx:189
 AliTRDdEdxCalibUtils.cxx:190
 AliTRDdEdxCalibUtils.cxx:191
 AliTRDdEdxCalibUtils.cxx:192
 AliTRDdEdxCalibUtils.cxx:193
 AliTRDdEdxCalibUtils.cxx:194
 AliTRDdEdxCalibUtils.cxx:195
 AliTRDdEdxCalibUtils.cxx:196
 AliTRDdEdxCalibUtils.cxx:197
 AliTRDdEdxCalibUtils.cxx:198
 AliTRDdEdxCalibUtils.cxx:199
 AliTRDdEdxCalibUtils.cxx:200
 AliTRDdEdxCalibUtils.cxx:201
 AliTRDdEdxCalibUtils.cxx:202
 AliTRDdEdxCalibUtils.cxx:203
 AliTRDdEdxCalibUtils.cxx:204
 AliTRDdEdxCalibUtils.cxx:205
 AliTRDdEdxCalibUtils.cxx:206
 AliTRDdEdxCalibUtils.cxx:207
 AliTRDdEdxCalibUtils.cxx:208
 AliTRDdEdxCalibUtils.cxx:209
 AliTRDdEdxCalibUtils.cxx:210
 AliTRDdEdxCalibUtils.cxx:211
 AliTRDdEdxCalibUtils.cxx:212
 AliTRDdEdxCalibUtils.cxx:213
 AliTRDdEdxCalibUtils.cxx:214
 AliTRDdEdxCalibUtils.cxx:215
 AliTRDdEdxCalibUtils.cxx:216
 AliTRDdEdxCalibUtils.cxx:217
 AliTRDdEdxCalibUtils.cxx:218
 AliTRDdEdxCalibUtils.cxx:219
 AliTRDdEdxCalibUtils.cxx:220
 AliTRDdEdxCalibUtils.cxx:221
 AliTRDdEdxCalibUtils.cxx:222
 AliTRDdEdxCalibUtils.cxx:223
 AliTRDdEdxCalibUtils.cxx:224
 AliTRDdEdxCalibUtils.cxx:225
 AliTRDdEdxCalibUtils.cxx:226
 AliTRDdEdxCalibUtils.cxx:227
 AliTRDdEdxCalibUtils.cxx:228
 AliTRDdEdxCalibUtils.cxx:229
 AliTRDdEdxCalibUtils.cxx:230
 AliTRDdEdxCalibUtils.cxx:231
 AliTRDdEdxCalibUtils.cxx:232
 AliTRDdEdxCalibUtils.cxx:233
 AliTRDdEdxCalibUtils.cxx:234
 AliTRDdEdxCalibUtils.cxx:235
 AliTRDdEdxCalibUtils.cxx:236
 AliTRDdEdxCalibUtils.cxx:237
 AliTRDdEdxCalibUtils.cxx:238
 AliTRDdEdxCalibUtils.cxx:239
 AliTRDdEdxCalibUtils.cxx:240
 AliTRDdEdxCalibUtils.cxx:241
 AliTRDdEdxCalibUtils.cxx:242
 AliTRDdEdxCalibUtils.cxx:243
 AliTRDdEdxCalibUtils.cxx:244
 AliTRDdEdxCalibUtils.cxx:245
 AliTRDdEdxCalibUtils.cxx:246
 AliTRDdEdxCalibUtils.cxx:247
 AliTRDdEdxCalibUtils.cxx:248
 AliTRDdEdxCalibUtils.cxx:249
 AliTRDdEdxCalibUtils.cxx:250
 AliTRDdEdxCalibUtils.cxx:251
 AliTRDdEdxCalibUtils.cxx:252
 AliTRDdEdxCalibUtils.cxx:253
 AliTRDdEdxCalibUtils.cxx:254
 AliTRDdEdxCalibUtils.cxx:255
 AliTRDdEdxCalibUtils.cxx:256
 AliTRDdEdxCalibUtils.cxx:257
 AliTRDdEdxCalibUtils.cxx:258
 AliTRDdEdxCalibUtils.cxx:259
 AliTRDdEdxCalibUtils.cxx:260
 AliTRDdEdxCalibUtils.cxx:261
 AliTRDdEdxCalibUtils.cxx:262
 AliTRDdEdxCalibUtils.cxx:263
 AliTRDdEdxCalibUtils.cxx:264
 AliTRDdEdxCalibUtils.cxx:265
 AliTRDdEdxCalibUtils.cxx:266
 AliTRDdEdxCalibUtils.cxx:267
 AliTRDdEdxCalibUtils.cxx:268
 AliTRDdEdxCalibUtils.cxx:269
 AliTRDdEdxCalibUtils.cxx:270
 AliTRDdEdxCalibUtils.cxx:271
 AliTRDdEdxCalibUtils.cxx:272
 AliTRDdEdxCalibUtils.cxx:273
 AliTRDdEdxCalibUtils.cxx:274
 AliTRDdEdxCalibUtils.cxx:275
 AliTRDdEdxCalibUtils.cxx:276
 AliTRDdEdxCalibUtils.cxx:277
 AliTRDdEdxCalibUtils.cxx:278
 AliTRDdEdxCalibUtils.cxx:279
 AliTRDdEdxCalibUtils.cxx:280
 AliTRDdEdxCalibUtils.cxx:281
 AliTRDdEdxCalibUtils.cxx:282
 AliTRDdEdxCalibUtils.cxx:283
 AliTRDdEdxCalibUtils.cxx:284
 AliTRDdEdxCalibUtils.cxx:285
 AliTRDdEdxCalibUtils.cxx:286
 AliTRDdEdxCalibUtils.cxx:287
 AliTRDdEdxCalibUtils.cxx:288
 AliTRDdEdxCalibUtils.cxx:289
 AliTRDdEdxCalibUtils.cxx:290
 AliTRDdEdxCalibUtils.cxx:291
 AliTRDdEdxCalibUtils.cxx:292
 AliTRDdEdxCalibUtils.cxx:293
 AliTRDdEdxCalibUtils.cxx:294
 AliTRDdEdxCalibUtils.cxx:295
 AliTRDdEdxCalibUtils.cxx:296
 AliTRDdEdxCalibUtils.cxx:297
 AliTRDdEdxCalibUtils.cxx:298
 AliTRDdEdxCalibUtils.cxx:299
 AliTRDdEdxCalibUtils.cxx:300
 AliTRDdEdxCalibUtils.cxx:301
 AliTRDdEdxCalibUtils.cxx:302
 AliTRDdEdxCalibUtils.cxx:303
 AliTRDdEdxCalibUtils.cxx:304
 AliTRDdEdxCalibUtils.cxx:305
 AliTRDdEdxCalibUtils.cxx:306
 AliTRDdEdxCalibUtils.cxx:307
 AliTRDdEdxCalibUtils.cxx:308
 AliTRDdEdxCalibUtils.cxx:309
 AliTRDdEdxCalibUtils.cxx:310
 AliTRDdEdxCalibUtils.cxx:311
 AliTRDdEdxCalibUtils.cxx:312
 AliTRDdEdxCalibUtils.cxx:313
 AliTRDdEdxCalibUtils.cxx:314
 AliTRDdEdxCalibUtils.cxx:315
 AliTRDdEdxCalibUtils.cxx:316
 AliTRDdEdxCalibUtils.cxx:317
 AliTRDdEdxCalibUtils.cxx:318
 AliTRDdEdxCalibUtils.cxx:319
 AliTRDdEdxCalibUtils.cxx:320
 AliTRDdEdxCalibUtils.cxx:321
 AliTRDdEdxCalibUtils.cxx:322
 AliTRDdEdxCalibUtils.cxx:323
 AliTRDdEdxCalibUtils.cxx:324
 AliTRDdEdxCalibUtils.cxx:325
 AliTRDdEdxCalibUtils.cxx:326
 AliTRDdEdxCalibUtils.cxx:327
 AliTRDdEdxCalibUtils.cxx:328
 AliTRDdEdxCalibUtils.cxx:329
 AliTRDdEdxCalibUtils.cxx:330
 AliTRDdEdxCalibUtils.cxx:331
 AliTRDdEdxCalibUtils.cxx:332
 AliTRDdEdxCalibUtils.cxx:333
 AliTRDdEdxCalibUtils.cxx:334
 AliTRDdEdxCalibUtils.cxx:335
 AliTRDdEdxCalibUtils.cxx:336
 AliTRDdEdxCalibUtils.cxx:337
 AliTRDdEdxCalibUtils.cxx:338
 AliTRDdEdxCalibUtils.cxx:339
 AliTRDdEdxCalibUtils.cxx:340
 AliTRDdEdxCalibUtils.cxx:341
 AliTRDdEdxCalibUtils.cxx:342
 AliTRDdEdxCalibUtils.cxx:343
 AliTRDdEdxCalibUtils.cxx:344
 AliTRDdEdxCalibUtils.cxx:345
 AliTRDdEdxCalibUtils.cxx:346
 AliTRDdEdxCalibUtils.cxx:347
 AliTRDdEdxCalibUtils.cxx:348
 AliTRDdEdxCalibUtils.cxx:349
 AliTRDdEdxCalibUtils.cxx:350
 AliTRDdEdxCalibUtils.cxx:351
 AliTRDdEdxCalibUtils.cxx:352
 AliTRDdEdxCalibUtils.cxx:353
 AliTRDdEdxCalibUtils.cxx:354
 AliTRDdEdxCalibUtils.cxx:355
 AliTRDdEdxCalibUtils.cxx:356
 AliTRDdEdxCalibUtils.cxx:357
 AliTRDdEdxCalibUtils.cxx:358
 AliTRDdEdxCalibUtils.cxx:359
 AliTRDdEdxCalibUtils.cxx:360
 AliTRDdEdxCalibUtils.cxx:361
 AliTRDdEdxCalibUtils.cxx:362
 AliTRDdEdxCalibUtils.cxx:363
 AliTRDdEdxCalibUtils.cxx:364
 AliTRDdEdxCalibUtils.cxx:365
 AliTRDdEdxCalibUtils.cxx:366
 AliTRDdEdxCalibUtils.cxx:367
 AliTRDdEdxCalibUtils.cxx:368
 AliTRDdEdxCalibUtils.cxx:369
 AliTRDdEdxCalibUtils.cxx:370
 AliTRDdEdxCalibUtils.cxx:371
 AliTRDdEdxCalibUtils.cxx:372
 AliTRDdEdxCalibUtils.cxx:373
 AliTRDdEdxCalibUtils.cxx:374
 AliTRDdEdxCalibUtils.cxx:375
 AliTRDdEdxCalibUtils.cxx:376
 AliTRDdEdxCalibUtils.cxx:377
 AliTRDdEdxCalibUtils.cxx:378
 AliTRDdEdxCalibUtils.cxx:379
 AliTRDdEdxCalibUtils.cxx:380
 AliTRDdEdxCalibUtils.cxx:381
 AliTRDdEdxCalibUtils.cxx:382
 AliTRDdEdxCalibUtils.cxx:383
 AliTRDdEdxCalibUtils.cxx:384
 AliTRDdEdxCalibUtils.cxx:385
 AliTRDdEdxCalibUtils.cxx:386
 AliTRDdEdxCalibUtils.cxx:387
 AliTRDdEdxCalibUtils.cxx:388
 AliTRDdEdxCalibUtils.cxx:389
 AliTRDdEdxCalibUtils.cxx:390
 AliTRDdEdxCalibUtils.cxx:391
 AliTRDdEdxCalibUtils.cxx:392
 AliTRDdEdxCalibUtils.cxx:393
 AliTRDdEdxCalibUtils.cxx:394
 AliTRDdEdxCalibUtils.cxx:395
 AliTRDdEdxCalibUtils.cxx:396
 AliTRDdEdxCalibUtils.cxx:397
 AliTRDdEdxCalibUtils.cxx:398
 AliTRDdEdxCalibUtils.cxx:399
 AliTRDdEdxCalibUtils.cxx:400
 AliTRDdEdxCalibUtils.cxx:401
 AliTRDdEdxCalibUtils.cxx:402
 AliTRDdEdxCalibUtils.cxx:403
 AliTRDdEdxCalibUtils.cxx:404
 AliTRDdEdxCalibUtils.cxx:405
 AliTRDdEdxCalibUtils.cxx:406
 AliTRDdEdxCalibUtils.cxx:407
 AliTRDdEdxCalibUtils.cxx:408
 AliTRDdEdxCalibUtils.cxx:409
 AliTRDdEdxCalibUtils.cxx:410
 AliTRDdEdxCalibUtils.cxx:411
 AliTRDdEdxCalibUtils.cxx:412
 AliTRDdEdxCalibUtils.cxx:413
 AliTRDdEdxCalibUtils.cxx:414
 AliTRDdEdxCalibUtils.cxx:415
 AliTRDdEdxCalibUtils.cxx:416
 AliTRDdEdxCalibUtils.cxx:417
 AliTRDdEdxCalibUtils.cxx:418
 AliTRDdEdxCalibUtils.cxx:419
 AliTRDdEdxCalibUtils.cxx:420
 AliTRDdEdxCalibUtils.cxx:421
 AliTRDdEdxCalibUtils.cxx:422
 AliTRDdEdxCalibUtils.cxx:423
 AliTRDdEdxCalibUtils.cxx:424
 AliTRDdEdxCalibUtils.cxx:425
 AliTRDdEdxCalibUtils.cxx:426
 AliTRDdEdxCalibUtils.cxx:427
 AliTRDdEdxCalibUtils.cxx:428
 AliTRDdEdxCalibUtils.cxx:429
 AliTRDdEdxCalibUtils.cxx:430
 AliTRDdEdxCalibUtils.cxx:431
 AliTRDdEdxCalibUtils.cxx:432
 AliTRDdEdxCalibUtils.cxx:433
 AliTRDdEdxCalibUtils.cxx:434
 AliTRDdEdxCalibUtils.cxx:435
 AliTRDdEdxCalibUtils.cxx:436
 AliTRDdEdxCalibUtils.cxx:437
 AliTRDdEdxCalibUtils.cxx:438
 AliTRDdEdxCalibUtils.cxx:439
 AliTRDdEdxCalibUtils.cxx:440
 AliTRDdEdxCalibUtils.cxx:441
 AliTRDdEdxCalibUtils.cxx:442
 AliTRDdEdxCalibUtils.cxx:443
 AliTRDdEdxCalibUtils.cxx:444
 AliTRDdEdxCalibUtils.cxx:445
 AliTRDdEdxCalibUtils.cxx:446
 AliTRDdEdxCalibUtils.cxx:447
 AliTRDdEdxCalibUtils.cxx:448
 AliTRDdEdxCalibUtils.cxx:449
 AliTRDdEdxCalibUtils.cxx:450
 AliTRDdEdxCalibUtils.cxx:451
 AliTRDdEdxCalibUtils.cxx:452
 AliTRDdEdxCalibUtils.cxx:453
 AliTRDdEdxCalibUtils.cxx:454
 AliTRDdEdxCalibUtils.cxx:455
 AliTRDdEdxCalibUtils.cxx:456
 AliTRDdEdxCalibUtils.cxx:457
 AliTRDdEdxCalibUtils.cxx:458
 AliTRDdEdxCalibUtils.cxx:459
 AliTRDdEdxCalibUtils.cxx:460
 AliTRDdEdxCalibUtils.cxx:461
 AliTRDdEdxCalibUtils.cxx:462
 AliTRDdEdxCalibUtils.cxx:463
 AliTRDdEdxCalibUtils.cxx:464
 AliTRDdEdxCalibUtils.cxx:465
 AliTRDdEdxCalibUtils.cxx:466
 AliTRDdEdxCalibUtils.cxx:467
 AliTRDdEdxCalibUtils.cxx:468
 AliTRDdEdxCalibUtils.cxx:469
 AliTRDdEdxCalibUtils.cxx:470
 AliTRDdEdxCalibUtils.cxx:471
 AliTRDdEdxCalibUtils.cxx:472
 AliTRDdEdxCalibUtils.cxx:473
 AliTRDdEdxCalibUtils.cxx:474
 AliTRDdEdxCalibUtils.cxx:475
 AliTRDdEdxCalibUtils.cxx:476
 AliTRDdEdxCalibUtils.cxx:477
 AliTRDdEdxCalibUtils.cxx:478
 AliTRDdEdxCalibUtils.cxx:479
 AliTRDdEdxCalibUtils.cxx:480
 AliTRDdEdxCalibUtils.cxx:481
 AliTRDdEdxCalibUtils.cxx:482
 AliTRDdEdxCalibUtils.cxx:483
 AliTRDdEdxCalibUtils.cxx:484
 AliTRDdEdxCalibUtils.cxx:485
 AliTRDdEdxCalibUtils.cxx:486
 AliTRDdEdxCalibUtils.cxx:487
 AliTRDdEdxCalibUtils.cxx:488
 AliTRDdEdxCalibUtils.cxx:489
 AliTRDdEdxCalibUtils.cxx:490
 AliTRDdEdxCalibUtils.cxx:491
 AliTRDdEdxCalibUtils.cxx:492
 AliTRDdEdxCalibUtils.cxx:493
 AliTRDdEdxCalibUtils.cxx:494
 AliTRDdEdxCalibUtils.cxx:495
 AliTRDdEdxCalibUtils.cxx:496
 AliTRDdEdxCalibUtils.cxx:497
 AliTRDdEdxCalibUtils.cxx:498
 AliTRDdEdxCalibUtils.cxx:499
 AliTRDdEdxCalibUtils.cxx:500
 AliTRDdEdxCalibUtils.cxx:501
 AliTRDdEdxCalibUtils.cxx:502
 AliTRDdEdxCalibUtils.cxx:503
 AliTRDdEdxCalibUtils.cxx:504
 AliTRDdEdxCalibUtils.cxx:505
 AliTRDdEdxCalibUtils.cxx:506
 AliTRDdEdxCalibUtils.cxx:507
 AliTRDdEdxCalibUtils.cxx:508
 AliTRDdEdxCalibUtils.cxx:509
 AliTRDdEdxCalibUtils.cxx:510
 AliTRDdEdxCalibUtils.cxx:511
 AliTRDdEdxCalibUtils.cxx:512
 AliTRDdEdxCalibUtils.cxx:513
 AliTRDdEdxCalibUtils.cxx:514
 AliTRDdEdxCalibUtils.cxx:515
 AliTRDdEdxCalibUtils.cxx:516
 AliTRDdEdxCalibUtils.cxx:517
 AliTRDdEdxCalibUtils.cxx:518
 AliTRDdEdxCalibUtils.cxx:519
 AliTRDdEdxCalibUtils.cxx:520
 AliTRDdEdxCalibUtils.cxx:521
 AliTRDdEdxCalibUtils.cxx:522
 AliTRDdEdxCalibUtils.cxx:523
 AliTRDdEdxCalibUtils.cxx:524
 AliTRDdEdxCalibUtils.cxx:525
 AliTRDdEdxCalibUtils.cxx:526
 AliTRDdEdxCalibUtils.cxx:527
 AliTRDdEdxCalibUtils.cxx:528
 AliTRDdEdxCalibUtils.cxx:529
 AliTRDdEdxCalibUtils.cxx:530
 AliTRDdEdxCalibUtils.cxx:531
 AliTRDdEdxCalibUtils.cxx:532
 AliTRDdEdxCalibUtils.cxx:533
 AliTRDdEdxCalibUtils.cxx:534
 AliTRDdEdxCalibUtils.cxx:535
 AliTRDdEdxCalibUtils.cxx:536