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


//-----------------------------------------------------------------
//        Base class for combining PID of different detectors    //
//        (user selected) and compute Bayesian probabilities     //
//                                                               //
//                                                               //
//   Origin: Pietro Antonioli, INFN-BO Pietro.Antonioli@cern.ch  //
//                                                               //
//-----------------------------------------------------------------

#include <TH1.h>

#include <AliVTrack.h>
#include <AliLog.h>
#include <AliPID.h>
#include <AliPIDResponse.h>

#include "AliPIDCombined.h"

#include "TMath.h"
#include "TFile.h"

#include "AliOADBContainer.h"

// initialize static members
TH2F* AliPIDCombined::fDefaultPriorsTPC[]={0x0};
TH2F* AliPIDCombined::fDefaultPriorsTPCpPb[]={0x0};
Float_t AliPIDCombined::fTOFmismProb = 0;

ClassImp(AliPIDCombined);

AliPIDCombined::AliPIDCombined():
	TNamed("CombinedPID","CombinedPID"),
	fDetectorMask(0),
	fRejectMismatchMask(0x7F),
	fEnablePriors(kTRUE),
	fSelectedSpecies(AliPID::kSPECIES),
	fUseDefaultTPCPriors(kFALSE)
{	
  //
  // default constructor
  //	
  for (Int_t i=0;i<AliPID::kSPECIESC;i++) fPriorsDistributions[i]=NULL;
  AliLog::SetClassDebugLevel("AliPIDCombined",10);
}

//-------------------------------------------------------------------------------------------------	
AliPIDCombined::AliPIDCombined(const TString& name,const TString& title):
	TNamed(name,title),
	fDetectorMask(0),
	fRejectMismatchMask(0x7F),
	fEnablePriors(kTRUE),
	fSelectedSpecies(AliPID::kSPECIES),
	fUseDefaultTPCPriors(kFALSE)
{
  //
  // default constructor with name and title
  //
  for (Int_t i=0;i<AliPID::kSPECIESC;i++) fPriorsDistributions[i]=NULL;
  AliLog::SetClassDebugLevel("AliPIDCombined",10);

}

//-------------------------------------------------------------------------------------------------	
AliPIDCombined::~AliPIDCombined() {

  for(Int_t i=0;i < AliPID::kSPECIESC;i++){
    if(fPriorsDistributions[i])
      delete fPriorsDistributions[i];
  }
}

//-------------------------------------------------------------------------------------------------	
void AliPIDCombined::SetPriorDistribution(AliPID::EParticleType type,TH1F *prior) {
  if ( (type < 0) || ( type >= ((AliPID::EParticleType)AliPID::kSPECIESC) ) ){
    AliError(Form("Invalid EParticleType setting prior (offending type: %d)",type));
    return;
  }
  if(prior) {
    Int_t i = (Int_t)type;
    if (fPriorsDistributions[i]) {
      delete fPriorsDistributions[i]; 
    }
    fPriorsDistributions[i]=new TH1F(*prior);
  }
}

//-------------------------------------------------------------------------------------------------	
UInt_t AliPIDCombined::ComputeProbabilities(const AliVTrack *track, const AliPIDResponse *response, Double_t* bayesProbabilities,Double_t *priorsOwn) const {
  //
  // (1) Get raw probabilities of requested detectors and combine
  // (2) priors passed as argument
  // (3) Compute Bayes probabilities
  //


  // (1) Get raw probabilities of selected detectors and combine
  UInt_t usedMask=0;             // detectors actually used for track
  fTOFmismProb = 0; // reset TOF mismatch weights

  AliPIDResponse::EDetPidStatus status=AliPIDResponse::kDetNoSignal;
  Double_t p[AliPID::kSPECIESC];  // combined probabilities of selected detectors
  Double_t pMismTOF[AliPID::kSPECIESC];  // combined TOF mismatch probabilities using selected detectors
  for (Int_t i=0;i<fSelectedSpecies;i++){ p[i]=1.;pMismTOF[i]=1.;} // no decision
  for (Int_t ibit = 0; ibit < 7 ; ibit++) {
    AliPIDResponse::EDetCode detBit = (AliPIDResponse::EDetCode)(1<<ibit);
    if (fDetectorMask & detBit) {  	    // getting probabilities for requested detectors only
      Double_t detProb[AliPID::kSPECIESC];
      status = response->ComputePIDProbability(detBit,track,fSelectedSpecies,detProb);
      if (status == AliPIDResponse::kDetPidOk) {
	if (fRejectMismatchMask & detBit) {         // mismatch check (currently just for TOF)
	  if (detBit == AliPIDResponse::kDetTOF) {
	    fTOFmismProb = response->GetTOFMismatchProbability(); // mismatch weights computed with TOF probs (no arguments)
	    //Float_t probMis = response->GetTOFMismatchProbability(track); // mismatch compatibility TPC-TOF cut
	    SetCombinedStatus(status,&usedMask,detBit,detProb,fTOFmismProb);
	  } else {
	    SetCombinedStatus(status,&usedMask,detBit);
	  }
	} else {
	  SetCombinedStatus(status,&usedMask,detBit);
	}
	for (Int_t i=0;i<fSelectedSpecies;i++){
	  p[i] *= detProb[i];
	  if(detBit == AliPIDResponse::kDetTOF){
	    Double_t pt = track->Pt();
	    Double_t mismPropagationFactor[] = {1.,1.,1.,1. + TMath::Exp(1. - 1.12*pt),
						1. + 1./(4.71114 - 5.72372*pt + 2.94715*pt*pt),1.,1.,1.,1.,1.}; // correction for kaons and protons which has to be alligned with the one in AliPIDResponse
	    pMismTOF[i] *= fTOFmismProb*mismPropagationFactor[i];
	  }
	  else pMismTOF[i] *= detProb[i];
	}
      }
    }
  }
  // if no detectors available there is no point to go further
  if (usedMask == 0) return usedMask;

  // (2) Get priors and propagate depending on detectors used
  Double_t priors[AliPID::kSPECIESC];
  memset(priors,0,fSelectedSpecies*sizeof(Double_t));

  if(priorsOwn){
    for(Int_t ipr=0;ipr < fSelectedSpecies;ipr++)
      priors[ipr] = priorsOwn[ipr];
  }

  else if (fEnablePriors){
    Bool_t isPPB = (response->GetBeamType() == AliPIDResponse::kPPB);
    GetPriors(track,priors,response->GetCurrentCentrality(),isPPB);

    // We apply the propagation factors of the more external detector
    // 
    // TPC+HMPID    --> apply HMPID propagation factors (TRD and TOF may be present)
    // TPC+EMCAL    --> apply EMCAL propagation factors (TRD and TOF may be present)
    // TPC+TOF      --> apply TOF propagation factors (TRD may be present, HMPID and EMCAL not (if requested))
    // TPC+TRD      --> apply TRD propagation factors (TOF, HMPID and EMCAL not present (if requested) )
    // 
    if(fUseDefaultTPCPriors) {

      Double_t pt=TMath::Abs(track->Pt());
      if ( ( (usedMask & AliPIDResponse::kDetEMCAL)==AliPIDResponse::kDetEMCAL) || ( (usedMask & AliPIDResponse::kDetHMPID)==AliPIDResponse::kDetHMPID) ) {
      // we assume EMCAL and HMPID cannot be simultaneously present
      if ( (usedMask & AliPIDResponse::kDetEMCAL)==AliPIDResponse::kDetEMCAL ) {
	// EMCal case (for the moment only in combination with TPC)
	// propagation factors determined from LHC11d MC (LHC12a15f)
	// v2 clusterizer, dEta < 0.015, dPhi < 0.03, NonLinearityFunction = 6
	       
	Float_t electronEMCALfactor=0.1;
	Float_t kaonEMCALfactor = 0.1;
	Float_t protonEMCALfactor = 0.1;
	       
	if(track->Charge() > 0){
	  // positiv charge (start parametrization at 0.75 GeV/c and stop at 20 GeV/c for the moment)
	  if(pt > 0.75 && pt < 20.0){
	    electronEMCALfactor =  ( 0.214159 * ( 1 - TMath::Exp(-TMath::Power(pt,0.484512)/0.700499)*TMath::Power(pt,-0.669644)) ) /  ( 0.210436 * ( 1 - TMath::Exp(-TMath::Power(pt,-0.219228)/0.947432)*TMath::Power(pt,-0.700792)) );
	    kaonEMCALfactor =  ( 0.208686 * ( 1 - TMath::Exp(-TMath::Power(pt,-3.98149e-05)/1.28447)*TMath::Power(pt,-0.629191)) ) /  ( 0.210436 * ( 1 - TMath::Exp(-TMath::Power(pt,-0.219228)/0.947432)*TMath::Power(pt,-0.700792)) );
	    protonEMCALfactor =  ( 0.27555 * ( 1 - TMath::Exp(-TMath::Power(pt,-1.97226e-05)/1.52719)*TMath::Power(pt,-0.209068)) ) /  ( 0.210436 * ( 1 - TMath::Exp(-TMath::Power(pt,-0.219228)/0.947432)*TMath::Power(pt,-0.700792)) );
		   
	  }
	}
	       
	if(track->Charge() < 0){
	  // negative charge  (start parametrization at 0.75 GeV/c and stop at 20 GeV/c for the moment)
	  if(pt > 0.75 && pt < 20.0){ 		   
	    electronEMCALfactor =  ( 0.216895 * ( 1 - TMath::Exp(-TMath::Power(pt,0.000105924)/0.865938)*TMath::Power(pt,-1.32787)) ) /  ( 0.210385 * ( 1 - TMath::Exp(-TMath::Power(pt,4.41206e-07)/1.08984)*TMath::Power(pt,-0.544375)) );
	    kaonEMCALfactor =  ( 0.204117 * ( 1 - TMath::Exp(-TMath::Power(pt,-1.6853e-05)/1.61765)*TMath::Power(pt,-0.738355)) ) /  ( 0.210385 * ( 1 - TMath::Exp(-TMath::Power(pt,4.41206e-07)/1.08984)*TMath::Power(pt,-0.544375)) );
	    protonEMCALfactor =  ( 0.215679 * ( 1 - TMath::Exp(-TMath::Power(pt,-4.10015e-05)/1.40921)*TMath::Power(pt,-0.533752)) ) /  ( 0.210385 * ( 1 - TMath::Exp(-TMath::Power(pt,4.41206e-07)/1.08984)*TMath::Power(pt,-0.544375)) );
	  }
	}
	priors[0] *= electronEMCALfactor;
	priors[3] *= kaonEMCALfactor;
	priors[4] *= protonEMCALfactor;	      
      } // end of EMCAL case

      else if ( (usedMask & AliPIDResponse::kDetHMPID)==AliPIDResponse::kDetHMPID ) {  // HMPID case

	Float_t kaonHMPIDfactor   = 0.;
	Float_t protonHMPIDfactor = 0.;                     
        if(pt>1. && pt<6.)  kaonHMPIDfactor   = (-0.0729337 + pt*0.0999531 - pt*pt*0.0371803 + pt*pt*pt*0.00706436 - pt*pt*pt*pt*0.000643619 + pt*pt*pt*pt*pt*2.21853e-05)/(-0.00896231+ pt*0.0330702 - pt*pt*0.0109562+ pt*pt*pt*0.00232895 - pt*pt*pt*pt*0.000246143 + pt*pt*pt*pt*pt*9.59812e-06); 
        if(pt>1.4 && pt<6.) protonHMPIDfactor = (-0.0444188 + pt*0.0681506 - pt*pt*0.0231819 + pt*pt*pt*0.00400771 - pt*pt*pt*pt*0.000339315 + pt*pt*pt*pt*pt*1.12616e-05)/(-0.00896231+ pt*0.0330702 - pt*pt*0.0109562+ pt*pt*pt*0.00232895 - pt*pt*pt*pt*0.000246143 + pt*pt*pt*pt*pt*9.59812e-06);        
        if(pt>6. && pt<8.)  kaonHMPIDfactor   = (-0.0729337 + pt*0.0999531 - pt*pt*0.0371803 + pt*pt*pt*0.00706436 - pt*pt*pt*pt*0.000643619 + pt*pt*pt*pt*pt*2.21853e-05)/0.0530456;        
        if(pt>8.)           kaonHMPIDfactor   = 0.0550432/0.0530456; 
        if(pt>6. && pt<8.5) protonHMPIDfactor = (-0.0444188 + pt*0.0681506 - pt*pt*0.0231819 + pt*pt*pt*0.00400771 - pt*pt*pt*pt*0.000339315 + pt*pt*pt*pt*pt*1.12616e-05)/0.0530456;      
        if(pt>8.5)          protonHMPIDfactor = 0.0530071/0.0530456;       
                                 
        if(track->Charge() < 0){ 
         if(pt>0.4 && pt<6.) protonHMPIDfactor = (-0.0351485 + pt*0.0473821 - pt*pt*0.0147947 + pt*pt*pt*0.00254811- pt*pt*pt*pt*0.000224724 + pt*pt*pt*pt*pt*7.9303e-06)/(-0.00896231+ pt*0.0330702 - pt*pt*0.0109562+ pt*pt*pt*0.00232895 - pt*pt*pt*pt*0.000246143 + pt*pt*pt*pt*pt*9.59812e-06);
         if(pt>6. && pt<8.5) protonHMPIDfactor = (-0.0351485 + pt*0.0473821 - pt*pt*0.0147947 + pt*pt*pt*0.00254811- pt*pt*pt*pt*0.000224724 + pt*pt*pt*pt*pt*7.9303e-06)/0.0530456; 
         if(pt>8.5)          protonHMPIDfactor = 0.0457756/0.0530456; 
	} 
      
        priors[3] *= kaonHMPIDfactor;
        priors[4] *= protonHMPIDfactor;
               
      }

    } // end of outer cases: EMCAL/HMPID
      else if ( (usedMask & AliPIDResponse::kDetTOF) == AliPIDResponse::kDetTOF ){
	Float_t kaonTOFfactor = 0.1;
	if(pt > 0.29){
	  kaonTOFfactor = 1 - TMath::Exp(-TMath::Power(pt,4.19618E-07)/4.96502e-01)*TMath::Power(pt,-1.50705);
	}

	Float_t protonTOFfactor = 0.1;
	if(pt > 0.4) protonTOFfactor = 1 - TMath::Exp(-TMath::Power(pt,3.30978)/8.57396E-02)*TMath::Power(pt,-4.42661E-01);

	if(track->Charge() < 0){ // for negative tracks
	  kaonTOFfactor *= 1 - TMath::Exp(-TMath::Power(pt,4.87912E-07)/3.26431E-01)*TMath::Power(pt,-1.22893);
	  protonTOFfactor *= 1 - TMath::Exp(-TMath::Power(pt,2.00575E-07)/4.95605E-01)*TMath::Power(pt,-6.71305E-01);
	}
	// TODO: we may need an electron factor for TOF as well, especially if TRD is present!
	priors[3] *= kaonTOFfactor;
	priors[4] *= protonTOFfactor;
      }  // end of TOF case
      else if ( (usedMask & AliPIDResponse::kDetTRD)==AliPIDResponse::kDetTRD ) {
	Float_t electronTRDfactor=0.1;
	Float_t kaonTRDfactor = 0.1;
	Float_t protonTRDfactor = 0.1;
		 
	if(track->Charge() > 0){
	  // positiv charge
	  if(pt > 0.25) electronTRDfactor =  1 - TMath::Exp(-TMath::Power(pt,5.13315e-03)/2.11145e-01)*TMath::Power(pt,-2.97659e+00);
	  if(pt > 0.35) kaonTRDfactor = 1 - TMath::Exp(-TMath::Power(pt,-4.29549e-02)/4.87989e-01)*TMath::Power(pt,-1.54270e+00);
	  if(pt > 0.35) protonTRDfactor = 1 - TMath::Exp(-TMath::Power(pt,2.81238e+00)/7.57082e-02)*TMath::Power(pt,-8.12595e-01);
	}
		 
	if(track->Charge() < 0){
	  // negative charge
	  if(pt > 0.25) electronTRDfactor =  1 - TMath::Exp(-TMath::Power(pt,2.45537e-02)/1.90397e-01)*TMath::Power(pt,-3.33121e+00);
	  if(pt > 0.35) kaonTRDfactor = 1 - TMath::Exp(-TMath::Power(pt, -3.42831e-03)/5.57013e-01)*TMath::Power(pt,-1.39202e+00);
	  if(pt > 0.35) protonTRDfactor = 1 - TMath::Exp(-TMath::Power(pt,3.36631e+00)/7.18819e-02)*TMath::Power(pt,-2.00577e-01);
	}
	// what about electrons
	priors[0] *= electronTRDfactor;
	priors[3] *= kaonTRDfactor;
	priors[4] *= protonTRDfactor;	      
      } // end of TRD case
    } // end of fUseDefaultTPCPriors
  }   // end of use priors
  else { for (Int_t i=0;i<fSelectedSpecies;i++) priors[i]=1.;}

  //  Compute Bayes probabilities
  ComputeBayesProbabilities(bayesProbabilities,p,priors,pMismTOF);

  // compute TOF probability contribution from mismatch
  fTOFmismProb = 0; 
  for (Int_t i=0;i<fSelectedSpecies;i++) fTOFmismProb += pMismTOF[i];

  return usedMask;
}


//-------------------------------------------------------------------------------------------------
void AliPIDCombined::GetPriors(const AliVTrack *track, Double_t* p,Float_t centrality,Bool_t isPPB) const {
	
	//
	// get priors from distributions
	//
	

	Double_t pt=TMath::Abs(track->Pt());

        if(fUseDefaultTPCPriors){ // use default priors if requested
	  Float_t usedCentr = centrality+5*(centrality>0);
	  if(usedCentr < -0.99) usedCentr = -0.99;
	  else if(usedCentr > 99) usedCentr = 99;
	  if(pt > 9.99) pt = 9.99;
	  else if(pt < 0.01)  pt = 0.01;

	  if(! isPPB)
	    for(Int_t i=0;i<AliPID::kSPECIESC;i++) p[i] = fDefaultPriorsTPC[i]->Interpolate(usedCentr,pt);
	  else
	    for(Int_t i=0;i<AliPID::kSPECIESC;i++) p[i] = fDefaultPriorsTPCpPb[i]->Interpolate(usedCentr,pt);

	  return;
	}
	
	Double_t sumPriors = 0;
	for (Int_t i=0;i<fSelectedSpecies;++i){
		if (fPriorsDistributions[i]){
			p[i]=fPriorsDistributions[i]->Interpolate(pt);
		}
		else {
			p[i]=0.;
		}
		sumPriors+=p[i];		
	}

	// normalizing priors
	if (sumPriors == 0) return;
	for (Int_t i=0;i<fSelectedSpecies;++i){
	   p[i]=p[i]/sumPriors;
	}
	return;
}
//-------------------------------------------------------------------------------------------------
void AliPIDCombined::GetPriors(const AliVTrack *track,Double_t* p,const AliPIDResponse *response,UInt_t detUsed) const{
	
	//
	// get priors from distributions
	//
        Double_t pt=TMath::Abs(track->Pt());
	
        if(fUseDefaultTPCPriors){ // use default priors if requested
	  Float_t usedCentr = response->GetCurrentCentrality()+5*(response->GetCurrentCentrality()>0);
	  if(usedCentr < -0.99) usedCentr = -0.99;
	  else if(usedCentr > 99) usedCentr = 99;
	  if(pt > 9.99) pt = 9.99;
	  else if(pt < 0.01)  pt = 0.01;
	  
	  for(Int_t i=0;i<AliPID::kSPECIESC;i++) p[i] = fDefaultPriorsTPC[i]->Interpolate(usedCentr,pt);

	  // Extra factor if TOF matching was required
	  if(detUsed & AliPIDResponse::kDetTOF){
	    Float_t kaonTOFfactor = 0.1;
	    if(pt > 0.29){
	      kaonTOFfactor = 1 - TMath::Exp(-TMath::Power(pt,4.19618E-07)/4.96502e-01)*TMath::Power(pt,-1.50705);
	    }
	    Float_t protonTOFfactor = 0.1;
	    if(pt > 0.4) protonTOFfactor = 1 - TMath::Exp(-TMath::Power(pt,3.30978)/8.57396E-02)*TMath::Power(pt,-4.42661E-01);
	    
	    if(track->Charge() < 0){ // for negative tracks
	      kaonTOFfactor *= 1 - TMath::Exp(-TMath::Power(pt,4.87912E-07)/3.26431E-01)*TMath::Power(pt,-1.22893);
	      protonTOFfactor *= 1 - TMath::Exp(-TMath::Power(pt,2.00575E-07)/4.95605E-01)*TMath::Power(pt,-6.71305E-01);
	    }
	    
	    p[3] *= kaonTOFfactor;
	    p[4] *= protonTOFfactor;
	  }

	  return;
	}


	Double_t sumPriors = 0;
	for (Int_t i=0;i<fSelectedSpecies;++i){
		if (fPriorsDistributions[i]){
			p[i]=fPriorsDistributions[i]->Interpolate(pt);
		}
		else {
			p[i]=0.;
		}
		sumPriors+=p[i];		
	}

	// normalizing priors
	if (sumPriors == 0) return;
	for (Int_t i=0;i<fSelectedSpecies;++i){
	   p[i]=p[i]/sumPriors;
	}
	return;
}
//-------------------------------------------------------------------------------------------------	
void AliPIDCombined::ComputeBayesProbabilities(Double_t* probabilities, const Double_t* probDensity, const Double_t* prior, Double_t* probDensityMism) const {


  //
  // calculate Bayesian probabilities
  //
  Double_t sum = 0.;
  for (Int_t i = 0; i < fSelectedSpecies; i++) {
    sum += probDensity[i] * prior[i];
  }
  if (sum <= 0) {

    AliError("Invalid probability densities or priors");
    for (Int_t i = 0; i < fSelectedSpecies; i++) probabilities[i] = 1./fSelectedSpecies;
    return;
  }
  for (Int_t i = 0; i < fSelectedSpecies; i++) {
    probabilities[i] = probDensity[i] * prior[i] / sum;
    if(probDensityMism) probDensityMism[i] *= prior[i] / sum;
  }


}


//----------------------------------------------------------------------------------------
void AliPIDCombined::SetCombinedStatus(AliPIDResponse::EDetPidStatus status, UInt_t *maskDetIn, AliPIDResponse::EDetCode bit) const {
  switch (status) {
  case AliPIDResponse::kDetNoParams:
  case AliPIDResponse::kDetNoSignal:
  case AliPIDResponse::kDetMismatch: // for backward compatibilty, we need then to remove kDetMismatch from AliPIDResponse
    break;
  case AliPIDResponse::kDetPidOk:
    *maskDetIn = *maskDetIn | bit;
    break;
  }

}

//----------------------------------------------------------------------------------------
void AliPIDCombined::SetCombinedStatus(AliPIDResponse::EDetPidStatus status, UInt_t *maskDetIn, AliPIDResponse::EDetCode bit, Double_t* /*p*/, const Float_t /*probMis*/) const {
  switch (status) {
  case AliPIDResponse::kDetNoParams:
  case AliPIDResponse::kDetNoSignal:
  case AliPIDResponse::kDetMismatch: // for backward compatibility, we need then to remove kDeteMismatch from AliPIDResponse
    break;
  case AliPIDResponse::kDetPidOk:
    //      if (probMis > 0.5) for (Int_t j=0;j<fSelectedSpecies;j++) p[j]=1./fSelectedSpecies; // no longer used because mismatch is in the framework now
    //else 
    *maskDetIn = *maskDetIn | bit;
    break;
  }

}



//----------------------------------------------------------------------------------------
void AliPIDCombined::SetDefaultTPCPriors(){
  fEnablePriors=kTRUE;
  fUseDefaultTPCPriors = kTRUE;

  //check if priors are already initialized
  if (fDefaultPriorsTPC[0]) return;
  
  TString oadbfilename("$ALICE_ROOT/OADB/COMMON/PID/data/");
  oadbfilename += "/PIDdefaultPriors.root";
  TFile * foadb = TFile::Open(oadbfilename.Data());
  if(!foadb || !foadb->IsOpen()) {
    delete foadb;
    AliFatal(Form("Cannot open OADB file %s", oadbfilename.Data()));
    return;
  }
  
  AliOADBContainer * priorsContainer = (AliOADBContainer*) foadb->Get("priorsTPC");
  if (!priorsContainer) AliFatal("Cannot fetch OADB container for Priors");
  
  const char *namespecies[AliPID::kSPECIESC] = {"El","Mu","Pi","Ka","Pr","De","Tr","He3","He3"};
  char name[100];

  for(Int_t i=0;i < AliPID::kSPECIESC;i++){
    snprintf(name,99,"hDefault%sPriors",namespecies[i]);
    fDefaultPriorsTPC[i] = (TH2F*) priorsContainer->GetDefaultObject(name);
    if (!fDefaultPriorsTPC[i]) AliFatal(Form("Cannot find priors for %s", namespecies[i]));
    snprintf(name,99,"hDefault%sPriorsPPb",namespecies[i]);
    fDefaultPriorsTPCpPb[i] = (TH2F*) priorsContainer->GetDefaultObject(name);
    if (!fDefaultPriorsTPCpPb[i]) {
        fDefaultPriorsTPCpPb[i] = fDefaultPriorsTPC[i]; // use PbPb ones
    }
  }

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