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


///////////////////////////////////////////////////////////////////////////////
//                                                                           //
// TPC tender: reapply pid on the fly                                        //
//                                                                           //
///////////////////////////////////////////////////////////////////////////////

#include <TList.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TChain.h>
#include <TFile.h>
#include <TString.h>
#include <TPRegexp.h>
#include <TGraphErrors.h>

#include <AliDCSSensor.h>
#include <AliGRPObject.h>
#include <AliESDpid.h>
#include <AliLog.h>
#include <AliESDEvent.h>
#include <AliExternalTrackParam.h>
#include <AliESDtrack.h>
#include <AliESDInputHandler.h>
#include <AliAnalysisManager.h>
#include <AliSplineFit.h>
#include <AliCDBId.h>
#include <AliCDBManager.h>
#include <AliCDBEntry.h>
#include <AliCDBRunRange.h>
#include <AliTender.h>
#include <AliTPCcalibDButil.h>
#include <AliPID.h>

#include "AliTPCTenderSupply.h"

ClassImp(AliTPCTenderSupply)

AliTPCTenderSupply::AliTPCTenderSupply() :
AliTenderSupply(),
fESDpid(0x0),
fGainNew(0x0),
fGainOld(0x0),
fGainAttachment(0x0),
fIsMC(kFALSE),
fGainCorrection(kTRUE),
fAttachmentCorrection(kFALSE),
fPcorrection(kFALSE),
fMultiCorrection(kFALSE),
fArrPidResponseMaster(0x0),
fMultiCorrMean(0x0),
fMultiCorrSigma(0x0),
fSpecificStorages(0x0),
fDebugLevel(0),
fMip(50),
fGRP(0x0),
fBeamType("PP"),
fLHCperiod(),
fMCperiod(),
fRecoPass(0)
{
  //
  // default ctor
  //
}

//_____________________________________________________
AliTPCTenderSupply::AliTPCTenderSupply(const char *name, const AliTender *tender) :
AliTenderSupply(name,tender),
fESDpid(0x0),
fGainNew(0x0),
fGainOld(0x0),
fGainAttachment(0x0),
fIsMC(kFALSE),
fGainCorrection(kTRUE),
fAttachmentCorrection(kFALSE),
fPcorrection(kFALSE),
fMultiCorrection(kFALSE),
fArrPidResponseMaster(0x0),
fMultiCorrMean(0x0),
fMultiCorrSigma(0x0),
fSpecificStorages(0x0),
fDebugLevel(0),
fMip(50),
fGRP(0x0),
fBeamType("PP"),
fLHCperiod(),
fMCperiod(),
fRecoPass(0)
{
  //
  // named ctor
  //
}

//_____________________________________________________
void AliTPCTenderSupply::Init()
{
  //
  // Initialise TPC tender
  //
  
  AliLog::SetClassDebugLevel("AliTPCTenderSupply",10);
  AliAnalysisManager *mgr=AliAnalysisManager::GetAnalysisManager();
  //
  // Setup PID object
  //
  fIsMC=mgr->GetMCtruthEventHandler();
  
  // Check if another detector already created the esd pid object
  // if not we create it and set it to the ESD input handler
  fESDpid=fTender->GetESDhandler()->GetESDpid();
  if (!fESDpid) {
    fESDpid=new AliESDpid(fIsMC);
    fTender->GetESDhandler()->SetESDpid(fESDpid);
  } 
  
  //setup specific storages
  if (fSpecificStorages){
    TNamed *storage;
    TIter nextStorage(fSpecificStorages);;
    while ( (storage=(TNamed*)nextStorage()) ){
      fTender->GetCDBManager()->SetSpecificStorage(storage->GetName(),storage->GetTitle());
      AliInfo(Form("Setting specific storage: %s (%s)",storage->GetName(), storage->GetTitle()));
    }
  }

  if (fIsMC){
    //force no gain and P correction in MC
    fGainCorrection=kFALSE;
    fPcorrection=kFALSE;
    fAttachmentCorrection=kFALSE;
  }
}

//_____________________________________________________
void AliTPCTenderSupply::ProcessEvent()
{
  //
  // Reapply pid information
  //
  
  AliESDEvent *event=fTender->GetEvent();
  if (!event) return;
  
  //load gain correction if run has changed
  if (fTender->RunChanged()){
    SetBeamType();
    SetRecoInfo();
    if ( fBeamType == "PBPB" ) fMultiCorrection=kTRUE;

    if (fDebugLevel>0) AliInfo(Form("Run Changed (%d)",fTender->GetRun()));
    SetParametrisation();
    if (fGainCorrection) SetSplines();
  }
  
  //
  // get gain correction factor
  //
  Double_t corrFactor = GetGainCorrection();
  Double_t corrAttachSlope = 0;
  Double_t corrGainMultiplicityPbPb=1;
  if (fAttachmentCorrection && fGainAttachment) corrAttachSlope = fGainAttachment->Eval(event->GetTimeStamp());
  if (fMultiCorrection&&fMultiCorrMean) corrGainMultiplicityPbPb = fMultiCorrMean->Eval(GetTPCMultiplicityBin());
  
  //
  // - correct TPC signals
  // - recalculate PID probabilities for TPC
  // - correct TPC signal multiplicity dependence

  Int_t ntracks=event->GetNumberOfTracks();
  for(Int_t itrack = 0; itrack < ntracks; itrack++){
    AliESDtrack *track=event->GetTrack(itrack);
    const AliExternalTrackParam *inner=track->GetInnerParam();
    
    // skip tracks without TPC information
    if (!inner) continue;

    //calculate total gain correction factor given by
    // o gain calibration factor
    // o attachment correction
    // o multiplicity correction in PbPb
    Float_t meanDrift= 250. - 0.5*TMath::Abs(2*inner->GetZ() + (247-83)*inner->GetTgl());
    Double_t corrGainTotal=corrFactor*(1 + corrAttachSlope*180.)/(1 + corrAttachSlope*meanDrift)/corrGainMultiplicityPbPb;

    // apply gain correction
    track->SetTPCsignal(track->GetTPCsignal()*corrGainTotal ,track->GetTPCsignalSigma(), track->GetTPCsignalN());

    // recalculate pid probabilities
    fESDpid->MakeTPCPID(track);
  }
}

//_____________________________________________________
Double_t AliTPCTenderSupply::GetTPCMultiplicityBin()
{
  //
  // Get TPC multiplicity in bins of 150
  //

  AliESDEvent *event=fTender->GetEvent();
  const AliESDVertex* vertexTPC = event->GetPrimaryVertexTPC();
  Double_t tpcMulti=0.;
  if(vertexTPC){
    Double_t vertexContribTPC=vertexTPC->GetNContributors();
    tpcMulti=vertexContribTPC/150.;
    if (tpcMulti>20.) tpcMulti=20.;
  }
  return tpcMulti;
}

//_____________________________________________________
Double_t AliTPCTenderSupply::GetMultiplicityCorrectionMean(Double_t tpcMulti)
{
  //
  // calculate correction factor for dEdx mean
  //
  Double_t meancorrection;
  if (fIsMC)
  {
    // MC data
    meancorrection=1.00054 + (0.00189566)*tpcMulti + (2.07777e-05)*tpcMulti*tpcMulti;
  }
  else
  {
    // real data
    meancorrection=0.999509 + (-0.00271488)*tpcMulti + (-2.98873e-06)*tpcMulti*tpcMulti;
  }
  
  return meancorrection;
  
}

//_____________________________________________________
Double_t AliTPCTenderSupply::GetMultiplicityCorrectionSigma(Double_t tpcMulti)
{
  //
  // calculate correction factor for dEdx sigma
  //
  Double_t sigmacorrection;
  if (fIsMC)
  {
    // MC data
    sigmacorrection=0.95972 + 0.0103721*tpcMulti;
  }
  else
  {
  // real data
    sigmacorrection=1.01817 + 0.0143673*tpcMulti;
  }
  return sigmacorrection;
  
}

//_____________________________________________________
void AliTPCTenderSupply::SetSplines()
{
  //
  // Get Gain splines from OCDB
  //
  
  AliInfo("Update Gain splines");
  
  //
  // Get GPR info for pressure correction
  //
  fPcorrection=kFALSE;
  
  AliCDBEntry *entryGRP=fTender->GetCDBManager()->Get("GRP/GRP/Data",fTender->GetRun());
  if (!entryGRP) {
    AliError("No new GRP entry found");
  } else {
    fGRP = (AliGRPObject*)entryGRP->GetObject();
  }
  if (fDebugLevel>1) AliInfo(Form("GRP entry used: %s",entryGRP->GetId().ToString().Data()));
  
  fGainNew=0x0;
  fGainOld=0x0;
  //
  //find previous entry from the UserInfo
  //
//   TTree *tree=((TChain*)fTender->GetInputData(0))->GetTree();
  AliAnalysisManager*mgr = AliAnalysisManager::GetAnalysisManager();
  AliAnalysisTaskSE *task = (AliAnalysisTaskSE*)mgr->GetTasks()->First();
  if (!task) return;
  TTree *tree=((TChain*)task->GetInputData(0))->GetTree();
  if (!tree) {
    AliError("Tree not found in ESDhandler");
    return;
  }
  
  TList *userInfo=(TList*)tree->GetUserInfo();
  if (!userInfo) {
    AliError("No UserInfo found in tree");
    return;
  }
  
  TList *cdbList=(TList*)userInfo->FindObject("cdbList");
  if (!cdbList) {
    AliError("No cdbList found in UserInfo");
    if (AliLog::GetGlobalLogLevel()>=AliLog::kError) userInfo->Print();
    return;
  }
  
  TIter nextCDB(cdbList);
  TObjString *os=0x0;
  while ( (os=(TObjString*)nextCDB()) ){
    if (!(os->GetString().Contains("TPC/Calib/TimeGain"))) continue;
    AliCDBId *id=AliCDBId::MakeFromString(os->GetString());
    
    AliCDBEntry *entry=fTender->GetCDBManager()->Get(*id);
    if (!entry) {
      AliError("No previous gain calibration entry found");
      return;
    }
    
    if (fDebugLevel>1) AliInfo(Form("Used old Gain entry: %s",entry->GetId().ToString().Data()));
    
    TObjArray *arr=(TObjArray *)entry->GetObject();
    if (!arr) {
      AliError("Gain Splines array not found in calibration entry");
      return;
    }
    
    AliSplineFit *fit=(AliSplineFit*)arr->At(0);
    if (!fit) {
      AliError("Spline fit not found in array");
      return;
    }
    
    fGainOld = fit;
    delete id;
    break;
  }
  
  //
  //new gain correction
  //

  // This is in principle sill needed for the 2009 data and the 2010 b+c pass1 data
  //   however not supported any longer.
  // For the LHC10c pass2 there is an exception and we still load the splines, but a defined version
  // In case the attachment correction should be check again, this part of the code needs to be changed
  //   in order to load the gain entry again
  Bool_t special10cPass2=fLHCperiod=="LHC10C" && fRecoPass==2;
              
  AliCDBEntry *entryNew=0x0;
  if (special10cPass2) {
    entryNew=fTender->GetCDBManager()->Get("TPC/Calib/TimeGain",fTender->GetRun(),8);
  }
  if (!entryNew) {
    AliError("No new gain calibration entry found");
    return;
  }
  if (fDebugLevel>1) AliInfo(Form("Used new Gain entry: %s",entryNew->GetId().ToString().Data()));
  
  if (entryNew->GetId().GetLastRun()==AliCDBRunRange::Infinity()){
    if (fDebugLevel>0) AliInfo("Use P correction");
    fPcorrection=kTRUE;
  }
  
  TObjArray *arrSplines=(TObjArray *)entryNew->GetObject();
  if (!arrSplines) {
    AliError("Gain Splines array not found in new calibration entry");
    return;
  }
  
  fGainNew        = (AliSplineFit*)arrSplines->At(0);
  fGainAttachment = (TGraphErrors*)arrSplines->FindObject("TGRAPHERRORS_MEAN_ATTACHMENT_BEAM_ALL");
  
  if (!fGainNew) AliError("No recent spline fit object found");
}

//_____________________________________________________
Double_t AliTPCTenderSupply::GetGainCorrection()
{
  //
  // Calculate gain correction factor
  //
  AliESDEvent *event=fTender->GetEvent();
  UInt_t time=event->GetTimeStamp();
  
  Double_t gain=1;
  
  
  if (fGainOld){
    //TODO TODO TODO
    //first correction for the eval const problem
    // needs to be removed when the fix is in AliROOT and
    // the production was done with EvalGraphConst
    // This should be the case from V4-20-Rev11 on
    //TODO TODO TODO
    if ( fLHCperiod.Contains("LHC09") ||
         ((fLHCperiod=="LHC10B" || fLHCperiod=="LHC10C" || fLHCperiod=="LHC10D") && fRecoPass==2) ||
         (fLHCperiod=="LHC10E" && fRecoPass==1) ||
         (fLHCperiod=="LHC10H" && fRecoPass==1)
         ) {
      Double_t valDefault = fGainOld->Eval(time);
      Double_t valConst   = AliTPCcalibDButil::EvalGraphConst(fGainOld, time);
      gain = valDefault/valConst;
    }
    
    if (fGainNew){
      gain *= AliTPCcalibDButil::EvalGraphConst(fGainOld,time)/AliTPCcalibDButil::EvalGraphConst(fGainNew,time);
    }
  }
  
  //If there is only the default calibration, at least apply correction for pressure
  if (fPcorrection){
    if (fGRP) {
      Double_t pressure=fGRP->GetCavernAtmosPressure()->GetValue(time);
//       gain=fGainOld->Eval(time)/(7.03814-0.00459798*pressure)/49.53*fMip;
//       gain=fGainOld->Eval(time)/(7.03814-0.00459798*pressure)/51.51*fMip;
      gain=AliTPCcalibDButil::EvalGraphConst(fGainOld,time)/(7.03814-0.00459798*pressure)/51.51*fMip;
    }
  }
  
  return gain;
}

//_____________________________________________________
void AliTPCTenderSupply::SetBeamType()
{
  //
  // Set the beam type
  //

  fBeamType=fTender->GetEvent()->GetBeamType();
  if (fBeamType.IsNull()||fBeamType.Contains("No Beam")) fBeamType="p-p";
  fBeamType.ToUpper();
  fBeamType.ReplaceAll("-","");
}

//_____________________________________________________
void AliTPCTenderSupply::SetRecoInfo()
{
  //
  // Set reconstruction information
  //

  //reset information
  fRecoPass=0;
  fLHCperiod="";
  fMCperiod="";
  
  //Get the current file to check the reconstruction pass (UGLY, but not stored in ESD... )
  AliESDInputHandler *esdIH = dynamic_cast<AliESDInputHandler*> (fTender->GetESDhandler());
  if (!esdIH) return;
  TTree *tree= (TTree*)esdIH->GetTree();
  TFile *file= (TFile*)tree->GetCurrentFile();
  if (!file) {
    AliError("Current file not found, cannot set reconstruction information");
    return;
  }
  
  TString fileName(file->GetName());
  
  Int_t run=fTender->GetRun();
  
  
  TPRegexp reg(".*(LHC11[a-z]+[0-9]+[a-z]*)/.*");
  //find the period by run number (UGLY, but not stored in ESD... )
  if (run>=114737&&run<=117223)      { fLHCperiod="LHC10B"; fMCperiod="LHC10D1";  }
  else if (run>=118503&&run<=121040) { fLHCperiod="LHC10C"; fMCperiod="LHC10D1";  }
  else if (run>=122195&&run<=126437) { fLHCperiod="LHC10D"; fMCperiod="LHC10F6A"; }
  else if (run>=127719&&run<=130850) { fLHCperiod="LHC10E"; fMCperiod="LHC10F6A"; }
  else if (run>=133004&&run<=135029) { fLHCperiod="LHC10F"; fMCperiod="LHC10F6A"; }
  else if (run>=135654&&run<=136377) { fLHCperiod="LHC10G"; fMCperiod="LHC10F6A"; }
  else if (run>=136851&&run<=139517) { 
    fLHCperiod="LHC10H"; 
    fMCperiod="LHC10H8";  
    if (reg.MatchB(fileName)) fMCperiod="LHC11A10";
  }
  else if ( (run>=144871 && run <=146459 ) || ( run >=146686 && run<= 146860) ) {
   // low energy: 146686 - 146860
    fLHCperiod="LHC11A"; fMCperiod="LHC10F6A";
  }
  else if ( run>=148541  ){
    fLHCperiod="LHC11B"; fMCperiod="LHC10F6A";
  }
  
  //exception new pp MC productions from 2011
  if (fBeamType=="PP" && reg.MatchB(fileName)) fMCperiod="LHC11B2";
  
  //find pass from file name (UGLY, but not stored in ESD... )
  if (fileName.Contains("/pass1")) {
    fRecoPass=1;
  } else if (fileName.Contains("/pass2")) {
    fRecoPass=2;
  } else if (fileName.Contains("/pass3")) {
    fRecoPass=3;
  }
  
}

//_____________________________________________________
void AliTPCTenderSupply::SetParametrisation()
{
  //
  // Change PbPb multiplicity gain correction factor
  //
  
  if (fLHCperiod.IsNull()) {
    AliError("No period set, not changing parametrisation");
    return;
  }
  
  //Get CDB Entry with pid response parametrisations
  AliCDBEntry *pidCDB=fTender->GetCDBManager()->Get("TPC/Calib/PidResponse",fTender->GetRun());
  if (!fArrPidResponseMaster && pidCDB){
    fArrPidResponseMaster=dynamic_cast<TObjArray*>(pidCDB->GetObject());
    AliInfo(Form("Using pid response objects: %s",pidCDB->GetId().ToString().Data()));
  }

  if (!fArrPidResponseMaster){
    AliError("No valid PidResponse master found in OCDB");
    return;
  }
  //data type
  TString datatype="DATA";
  TString period=fLHCperiod;
  //in case of mc fRecoPass is per default 1
  if (fIsMC) {
    datatype="MC";
    fRecoPass=1;
    period=fMCperiod;
  }

  // Set PbPb correction
  fMultiCorrMean=(TF1*)fArrPidResponseMaster->FindObject(Form("TF1_%s_ALL_%s_PASS%d_%s_MEAN",datatype.Data(),period.Data(),fRecoPass,fBeamType.Data()));

  if (fMultiCorrMean) AliInfo(Form("Setting multiplicity correction function: %s",fMultiCorrMean->GetName()));
  
}

//____________________________________________________________
void AliTPCTenderSupply::AddSpecificStorage(const char* cdbPath, const char* storage)
{
  //
  // Add a specific storage to be set up in Init
  //
  if (!fSpecificStorages) fSpecificStorages=new TObjArray;
  fSpecificStorages->Add(new TNamed(cdbPath, storage));
}

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