]> git.uio.no Git - u/mrichter/AliRoot.git/commitdiff
Updates in D-meson PID class:
authorfprino <fprino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Oct 2013 21:53:18 +0000 (21:53 +0000)
committerfprino <fprino@f7af4fe6-9843-0410-8265-dc069ae4e863>
Thu, 17 Oct 2013 21:53:18 +0000 (21:53 +0000)
1) inheritance changed from AliAODPid to TObject
2) track selection based on AliPidResponse
3) possibility to cut on the number of clusters for PID in TPC
4) two new approaches for combining TPC and TOF

PWGHF/vertexingHF/AliAODPidHF.cxx
PWGHF/vertexingHF/AliAODPidHF.h

index e42d42e80042e6001d2bea42431426a7a4bf9374..1eb8b679e4632943819d2a4e17089ce8f0e928d2 100644 (file)
@@ -39,10 +39,12 @@ ClassImp(AliAODPidHF)
 
 //------------------------------
 AliAODPidHF::AliAODPidHF():
-  AliAODPid(),
+  TObject(),
   fnNSigma(5),
   fnSigma(0),
   fTOFSigma(160.),
+  fCutTOFmismatch(0.01),
+  fMinNClustersTPCPID(0),
   fnPriors(5),
   fPriors(0),
   fnPLimit(2),
@@ -73,26 +75,33 @@ AliAODPidHF::AliAODPidHF():
   fCombDetectors(kTPCTOF),
   fUseCombined(kFALSE)
 {
- //
- // Default constructor
- //
- fPLimit=new Double_t[fnPLimit];
- fnSigma=new Double_t[fnNSigma];
- fPriors=new Double_t[fnPriors];
- fnSigmaCompat=new Double_t[fnNSigmaCompat];
-
- for(Int_t i=0;i<fnNSigma;i++){
-  fnSigma[i]=0.;
- }
- for(Int_t i=0;i<fnPriors;i++){
-  fPriors[i]=0.;
- }
- for(Int_t i=0;i<fnPLimit;i++){
-  fPLimit[i]=0.;
- }
- for(Int_t i=0;i<fnNSigmaCompat;i++){
-  fnSigmaCompat[i]=3.;
- }
+  //
+  // Default constructor
+  //
+  fPLimit=new Double_t[fnPLimit];
+  fnSigma=new Double_t[fnNSigma];
+  fPriors=new Double_t[fnPriors];
+  fnSigmaCompat=new Double_t[fnNSigmaCompat];
+  
+  for(Int_t i=0;i<fnNSigma;i++){
+    fnSigma[i]=0.;
+  }
+  for(Int_t i=0;i<fnPriors;i++){
+    fPriors[i]=0.;
+  }
+  for(Int_t i=0;i<fnPLimit;i++){
+    fPLimit[i]=0.;
+  }
+  for(Int_t i=0;i<fnNSigmaCompat;i++){
+    fnSigmaCompat[i]=3.;
+  }
+  for(Int_t i=0; i<3; i++){ // pi, K, proton
+    fMaxnSigmaCombined[i]=3.;
+    fMinnSigmaTPC[i]=-3;
+    fMaxnSigmaTPC[i]=3;
+    fMinnSigmaTOF[i]=-3;
+    fMaxnSigmaTOF[i]=3;
+  }
 
 }
 //----------------------
@@ -112,10 +121,12 @@ AliAODPidHF::~AliAODPidHF()
 }
 //------------------------
 AliAODPidHF::AliAODPidHF(const AliAODPidHF& pid) :
-  AliAODPid(pid),
+  TObject(),
   fnNSigma(pid.fnNSigma),
   fnSigma(0),
   fTOFSigma(pid.fTOFSigma),
+  fCutTOFmismatch(pid.fCutTOFmismatch),
+  fMinNClustersTPCPID(pid.fMinNClustersTPCPID),
   fnPriors(pid.fnPriors),
   fPriors(0),
   fnPLimit(pid.fnPLimit),
@@ -169,6 +180,13 @@ AliAODPidHF::AliAODPidHF(const AliAODPidHF& pid) :
   for(Int_t i=0;i<AliPID::kSPECIES;i++){
     fPriorsH[i]=pid.fPriorsH[i];
   }
+  for(Int_t i=0; i<3; i++){ // pi, K, proton
+    fMaxnSigmaCombined[i]=pid.fMaxnSigmaCombined[i];
+    fMinnSigmaTPC[i]=pid.fMinnSigmaTPC[i];
+    fMaxnSigmaTPC[i]=pid.fMaxnSigmaTPC[i];
+    fMinnSigmaTOF[i]=pid.fMinnSigmaTOF[i];
+    fMaxnSigmaTOF[i]=pid.fMaxnSigmaTOF[i];
+  }
 
   //  if(pid.fTPCResponse) fTPCResponse = new AliTPCPIDResponse(*(pid.fTPCResponse));
   fTPCResponse = new AliTPCPIDResponse();
@@ -176,75 +194,75 @@ AliAODPidHF::AliAODPidHF(const AliAODPidHF& pid) :
   fPidCombined = new AliPIDCombined();
   //fPidResponse = new AliPIDResponse(*(pid.fPidResponse));
   //fPidCombined = new AliPIDCombined(*(pid.fPidCombined));  
-    
+
 }
 //----------------------
 Int_t AliAODPidHF::RawSignalPID(AliAODTrack *track, TString detector) const{
-// raw PID for single detectors, returns the particle type with smaller sigma
-   Int_t specie=-1;
-   if(detector.Contains("ITS")) return ApplyPidITSRaw(track,specie);
-   if(detector.Contains("TPC")) return ApplyPidTPCRaw(track,specie);
-   if(detector.Contains("TOF")) return ApplyPidTOFRaw(track,specie);
-
+  // raw PID for single detectors, returns the particle type with smaller sigma
+  Int_t specie=-1;
+  if(detector.Contains("ITS")) return ApplyPidITSRaw(track,specie);
+  if(detector.Contains("TPC")) return ApplyPidTPCRaw(track,specie);
+  if(detector.Contains("TOF")) return ApplyPidTOFRaw(track,specie);
+  
   return specie;
 
 }
 //---------------------------
 Bool_t AliAODPidHF::IsKaonRaw(AliAODTrack *track, TString detector) const{
-// checks if the track can be a kaon, raw PID applied for single detectors
- Int_t specie=0;
-
- if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,3);
- if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,3);
- if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,3);
+  // checks if the track can be a kaon, raw PID applied for single detectors
+  Int_t specie=0;
 
- if(specie==3) return kTRUE;
- return kFALSE;
+  if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,3);
+  if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,3);
+  if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,3);
+  
+  if(specie==3) return kTRUE;
+  return kFALSE;
 }
 //---------------------------
 Bool_t AliAODPidHF::IsPionRaw (AliAODTrack *track, TString detector) const{
-// checks if the track can be a pion, raw PID applied for single detectors
+  // checks if the track can be a pion, raw PID applied for single detectors
 
- Int_t specie=0;
-
- if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,2);
- if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,2);
- if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,2);
-
- if(specie==2) return kTRUE;
- return kFALSE;
 Int_t specie=0;
+  
 if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,2);
 if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,2);
 if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,2);
+  
 if(specie==2) return kTRUE;
 return kFALSE;
 }
 //---------------------------
 Bool_t AliAODPidHF::IsProtonRaw (AliAODTrack *track, TString detector) const{
-// checks if the track can be a proton raw PID applied for single detectors
-
- Int_t specie=0;
- if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,4);
- if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,4); 
- if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,4);
-
- if(specie==4) return kTRUE;
-
- return kFALSE;
+  // checks if the track can be a proton raw PID applied for single detectors
+  
 Int_t specie=0;
 if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,4);
 if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,4); 
 if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,4);
+  
 if(specie==4) return kTRUE;
+  
 return kFALSE;
 }
 //--------------------------
 Bool_t AliAODPidHF::IsElectronRaw(AliAODTrack *track, TString detector) const{
-// checks if the track can be an electron raw PID applied for single detectors
-
- Int_t specie=-1;
- if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,0);
- if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,0);
- if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,0);
+  // checks if the track can be an electron raw PID applied for single detectors
 
- if(specie==0) return kTRUE;
-
- return kFALSE;
+  Int_t specie=-1;
+  if(detector.Contains("ITS")) specie=ApplyPidITSRaw(track,0);
+  if(detector.Contains("TPC")) specie=ApplyPidTPCRaw(track,0);
+  if(detector.Contains("TOF")) specie=ApplyPidTOFRaw(track,0);
+  
+  if(specie==0) return kTRUE;
+  
+  return kFALSE;
 }
 //--------------------------
 Int_t AliAODPidHF::ApplyPidTPCRaw(AliAODTrack *track,Int_t specie) const{
 // n-sigma cut, TPC PID
 
-  Double_t nsigma;
+  Double_t nsigma=-999.;
   Int_t pid=-1;
 
   if(specie<0){  // from RawSignalPID : should return the particle specie to wich the de/dx is closer to the bethe-block curve -> performance to be checked
@@ -271,74 +289,36 @@ Int_t AliAODPidHF::ApplyPidTPCRaw(AliAODTrack *track,Int_t specie) const{
 //----------------------------
 Int_t AliAODPidHF::ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const{
 // truncated mean, ITS PID
-
-  if(!CheckITSPIDStatus(track)) return 0;
+  
+  Double_t nsigma=-999.;
   Int_t pid=-1;
-
-  if(fOldPid){
-  Double_t mom=track->P();
-  AliAODPid *pidObj = track->GetDetPid();
-
-  Double_t dedx=pidObj->GetITSsignal();
-  UChar_t clumap=track->GetITSClusterMap();
-  Int_t nPointsForPid=0;
-  for(Int_t i=2; i<6; i++){
-   if(clumap&(1<<i)) ++nPointsForPid;
-  }
-
-  Bool_t isSA=kTRUE;
-  if(track->GetStatus() & AliESDtrack::kTPCin) isSA = kFALSE;
-
-  AliITSPIDResponse itsResponse;
+  
   if(specie<0){  // from RawSignalPID : should return the particle specie to wich the de/dx is closer to the bethe-block curve -> performance to be checked
-   Double_t nsigmaMax=fnSigma[4];
-   for(Int_t ipart=0;ipart<5;ipart++){
-    AliPID::EParticleType type=AliPID::EParticleType(ipart);
-    Double_t nsigma = TMath::Abs(itsResponse.GetNumberOfSigmas(mom,dedx,type,nPointsForPid,isSA));
-    if((nsigma<nsigmaMax) && (nsigma<fnSigma[4])) {
-     pid=ipart;
-     nsigmaMax=nsigma;
+    Double_t nsigmaMin=999.;
+    for(Int_t ipart=0;ipart<5;ipart++){
+      if(GetnSigmaITS(track,ipart,nsigma)==1){
+       nsigma=TMath::Abs(nsigma);
+       if((nsigma<nsigmaMin) && (nsigma<fnSigma[4])) {
+         pid=ipart;
+         nsigmaMin=nsigma;
+       }
+      }
     }
-   }
   }else{ // asks only for one particle specie
-   AliPID::EParticleType type=AliPID::EParticleType(specie);
-    Double_t nsigma = TMath::Abs(itsResponse.GetNumberOfSigmas(mom,dedx,type));
-   if (nsigma>fnSigma[4]) {
-    pid=-1; 
-   }else{
-    pid=specie;
-   }
-  }
- }else{ // old pid
-
-  if(specie<0){  // from RawSignalPID : should return the particle specie to wich the de/dx is closer to the bethe-block curve -> performance to be checked
-   Double_t nsigmaMax=fnSigma[4];
-   for(Int_t ipart=0;ipart<5;ipart++){
-    AliPID::EParticleType type=AliPID::EParticleType(ipart);
-    Double_t nsigma = TMath::Abs(fPidResponse->NumberOfSigmasITS(track,type));
-    if((nsigma<nsigmaMax) && (nsigma<fnSigma[4])) {
-     pid=ipart;
-     nsigmaMax=nsigma;
+    if(GetnSigmaITS(track,specie,nsigma)==1){
+      nsigma=TMath::Abs(nsigma);
+      if (nsigma>fnSigma[4]) pid=-1; 
+      else pid=specie;
     }
-   }
-  }else{ // asks only for one particle specie
-   AliPID::EParticleType type=AliPID::EParticleType(specie);
-    Double_t nsigma = TMath::Abs(fPidResponse->NumberOfSigmasITS(track,type));
-   if (nsigma>fnSigma[4]) {
-    pid=-1;
-   }else{
-    pid=specie;
-   }
   }
- } //new pid
-
- return pid; 
+  
+  return pid;
 }
 //----------------------------
 Int_t AliAODPidHF::ApplyPidTOFRaw(AliAODTrack *track,Int_t specie) const{
 // n-sigma cut, TOF PID
 
-  Double_t nsigma;
+  Double_t nsigma=-999.;
   Int_t pid=-1;
 
   if(specie<0){  
@@ -431,79 +411,53 @@ void AliAODPidHF::CombinedProbability(AliAODTrack *track,Bool_t *type) const{
 }
 //--------------------------------
 Bool_t AliAODPidHF::CheckITSPIDStatus(AliAODTrack *track) const{
-  // ITS PID quality cuts
-  if ((track->GetStatus()&AliESDtrack::kITSin)==0) return kFALSE;
-  UChar_t clumap=track->GetITSClusterMap();
-  Int_t nPointsForPid=0;
-  for(Int_t i=2; i<6; i++){
-    if(clumap&(1<<i)) ++nPointsForPid;
-  }
-  if(nPointsForPid<3) return kFALSE;
+  // Check if the track is good for ITS PID
+  AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kITS,track);
+  if (status != AliPIDResponse::kDetPidOk) return kFALSE;
   return kTRUE;
 }
 //--------------------------------
 Bool_t AliAODPidHF::CheckTPCPIDStatus(AliAODTrack *track) const{
-  // TPC PID quality cuts
-  if ((track->GetStatus()&AliESDtrack::kTPCin )==0) return kFALSE;
-  UShort_t nTPCClus=track->GetTPCClusterMap().CountBits();
-  if (nTPCClus<70) return kFALSE;
+  // Check if the track is good for TPC PID
+  AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTPC,track);
+  if (status != AliPIDResponse::kDetPidOk) return kFALSE;
+  UInt_t nclsTPCPID = track->GetTPCsignalN();
+  if(nclsTPCPID<fMinNClustersTPCPID) return kFALSE;
   return kTRUE;
 }
 //--------------------------------
 Bool_t AliAODPidHF::CheckTOFPIDStatus(AliAODTrack *track) const{
-  // TOF PID quality cuts
-  if ((track->GetStatus()&AliESDtrack::kTOFout )==0)    return kFALSE;
-  if ((track->GetStatus()&AliESDtrack::kTIME )==0)     return kFALSE;
-  if ((track->GetStatus()&AliESDtrack::kTOFpid )==0)   return kFALSE;
-  if (!(track->GetStatus()&AliESDtrack::kTOFmismatch)==0)    return kFALSE;
+  // Check if the track is good for TOF PID
+  AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTOF,track);
+  if (status != AliPIDResponse::kDetPidOk) return kFALSE; 
+  Float_t probMis = fPidResponse->GetTOFMismatchProbability(track);
+  if (probMis > fCutTOFmismatch) return kFALSE;
+  if ((track->GetStatus()&AliESDtrack::kTOFpid )==0 &&
+      track->GetStatus()&AliESDtrack::kITSrefit )   return kFALSE;
   return kTRUE;
 }
 //--------------------------------
 Bool_t AliAODPidHF::CheckTRDPIDStatus(AliAODTrack *track) const{
-  // TRD PID quality cuts
-  if ((track->GetStatus()&AliESDtrack::kTRDout )==0)   return kFALSE;
+  // Check if the track is good for TRD PID
+  AliPIDResponse::EDetPidStatus status = fPidResponse->CheckPIDStatus(AliPIDResponse::kTRD,track);
+  if (status != AliPIDResponse::kDetPidOk) return kFALSE;
   return kTRUE;
 }
 //--------------------------------
 Bool_t AliAODPidHF::CheckStatus(AliAODTrack *track,TString detectors) const{
-
-// Quality cuts on the tracks, detector by detector
-
- if(detectors.Contains("ITS")){
-  if ((track->GetStatus()&AliESDtrack::kITSin)==0) return kFALSE;
-  UChar_t clumap=track->GetITSClusterMap();
-  Int_t nPointsForPid=0;
-  for(Int_t i=2; i<6; i++){
-   if(clumap&(1<<i)) ++nPointsForPid;
+  // Quality cuts on the tracks, detector by detector
+  if(detectors.Contains("ITS")) return CheckITSPIDStatus(track);
+  else if(detectors.Contains("TPC")) return CheckTPCPIDStatus(track);
+  else if(detectors.Contains("TOF")) return CheckTOFPIDStatus(track);
+  else if(detectors.Contains("TRD")) return CheckTRDPIDStatus(track);
+  else{
+    AliError("Wrong detector name");
+    return kFALSE;
   }
-  if(nPointsForPid<3) return kFALSE;
- }
-
- if(detectors.Contains("TPC")){
-   if ((track->GetStatus()&AliESDtrack::kTPCin )==0) return kFALSE;
-   UShort_t nTPCClus=track->GetTPCClusterMap().CountBits();
-   if (nTPCClus<70) return kFALSE;
- }
-
- if(detectors.Contains("TOF")){
-   if ((track->GetStatus()&AliESDtrack::kTOFout )==0)    return kFALSE;
-   if ((track->GetStatus()&AliESDtrack::kTIME )==0)     return kFALSE;
-   if ((track->GetStatus()&AliESDtrack::kTOFpid )==0)   return kFALSE;
-   if (!(track->GetStatus()&AliESDtrack::kTOFmismatch)==0)    return kFALSE;
- }
-
-
- if(detectors.Contains("TRD")){
-  if ((track->GetStatus()&AliESDtrack::kTRDout )==0)   return kFALSE;
-  //UChar_t ntracklets = track->GetTRDntrackletsPID();
-  //if(ntracklets<4) return kFALSE;
- }
-
- return kTRUE;
 }
 //--------------------------------------------
 Bool_t AliAODPidHF::TPCRawAsym(AliAODTrack* track,Int_t specie) const{
-// TPC nsigma cut PID, different sigmas in different p bins
+  // TPC nsigma cut PID, different sigmas in different p bins
 
   AliAODPid *pidObj = track->GetDetPid();
   Double_t mom = pidObj->GetTPCmomentum();
@@ -528,8 +482,8 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){
   if(ptrack>fMaxTrackMomForCombinedPID) return 1;
 
   Bool_t okTPC=CheckTPCPIDStatus(track);
-  Bool_t okTOF=CheckTOFPIDStatus(track);
   if(ptrack>fPtThresholdTPC) okTPC=kFALSE;
+  Bool_t okTOF=CheckTOFPIDStatus(track);
 
   if(fMatch==1){
     //TOF || TPC (a la' Andrea R.)
@@ -650,12 +604,43 @@ Int_t AliAODPidHF::MatchTPCTOF(AliAODTrack *track, Int_t specie){
     }
   }
 
+  if(fMatch==4 || fMatch==5){
+
+    // fMatch == 4 ---> "circular cut" in nSigmaTPC, nSimgaTOF plane
+    //             ---> nsigmaTPC^2+nsigmaTOF^2 < cut^2
+    // fMatch == 5 ---> "rectangular cut" in nSigmaTPC, nsigmaTOF plane 
+    //             ---> ns1<nSigmaTPC<NS1  && ns2<nSigmaTOF<NS2
+    Double_t nSigmaTPC=0.;
+    if(okTPC) {
+      nSigmaTPC=fPidResponse->NumberOfSigmasTPC(track,(AliPID::EParticleType)specie);
+      if(nSigmaTPC<-990.) nSigmaTPC=0.;
+    }
+    Double_t nSigmaTOF=0.;
+    if(okTOF) {
+      nSigmaTOF=fPidResponse->NumberOfSigmasTOF(track,(AliPID::EParticleType)specie);
+    }
+    Int_t iPart=specie-2; //species is 2 for pions,3 for kaons and 4 for protons
+    if(iPart<0 || iPart>2) return -1;
+    if(fMatch==4){
+      Double_t nSigma2=nSigmaTPC*nSigmaTPC+nSigmaTOF*nSigmaTOF;
+      if(nSigma2<fMaxnSigmaCombined[iPart]*fMaxnSigmaCombined[iPart]) return 1;
+      else return -1;
+    }
+    else if(fMatch==5){
+      if((nSigmaTPC>fMinnSigmaTPC[iPart] && nSigmaTPC<fMaxnSigmaTPC[iPart]) &&
+        (nSigmaTOF>fMinnSigmaTOF[iPart] && nSigmaTOF<fMaxnSigmaTOF[iPart])) return 1;
+      else return -1;
+    }
+  }
+
+
   return -1;
 
 }
 //----------------------------------   
 Int_t AliAODPidHF::MakeRawPid(AliAODTrack *track, Int_t specie){
-// general method to compute PID
+  // general method to compute PID
   if(fMatch>0){
     return MatchTPCTOF(track,specie); 
   }else{
@@ -687,81 +672,81 @@ Int_t AliAODPidHF::MakeRawPid(AliAODTrack *track, Int_t specie){
 //--------------------------------------------
 void AliAODPidHF::GetTPCBetheBlochParams(Double_t alephParameters[5]) const {
   // TPC bethe bloch parameters
- if(fMC) {  // MC
-
-   if(fPbPb) { // PbPb MC
-
-     alephParameters[0] = 1.44405/50.;
-     alephParameters[1] = 2.35409e+01;
-     alephParameters[2] = TMath::Exp(-2.90330e+01);
-     alephParameters[3] = 2.10681e+00;
-     alephParameters[4] = 4.62254e+00;
-
-   } else {  // pp MC
-     if(fMCLowEn2011){
-       alephParameters[0]=0.0207667;
-       alephParameters[1]=29.9936;
-       alephParameters[2]=3.87866e-11;
-       alephParameters[3]=2.17291;
-       alephParameters[4]=7.1623;
-     }else if(fOnePad){
-       alephParameters[0]=0.029021;
-       alephParameters[1]=25.4181;
-       alephParameters[2]=4.66596e-08;
-       alephParameters[3]=1.90008;
-       alephParameters[4]=4.63783;
-     }else{
-       alephParameters[0] = 2.15898/50.;
-       alephParameters[1] = 1.75295e+01;
-       alephParameters[2] = 3.40030e-09;
-       alephParameters[3] = 1.96178e+00;
-       alephParameters[4] = 3.91720e+00;
-     }
-   }
-
- } else { // Real Data
-
-   if(fOnePad) { // pp 1-pad (since LHC10d)
-
-     alephParameters[0] =1.34490e+00/50.; 
-     alephParameters[1] = 2.69455e+01; 
-     alephParameters[2] = TMath::Exp(-2.97552e+01); 
-     alephParameters[3] = 2.35339e+00; 
-     alephParameters[4] = 5.98079e+00;
-     
-   } else if(fPbPb) { // PbPb 
-     
-     // alephParameters[0] = 1.25202/50.; 
-     // alephParameters[1] = 2.74992e+01; 
-     // alephParameters[2] = TMath::Exp(-3.31517e+01); 
-     // alephParameters[3] = 2.46246; 
-     // alephParameters[4] = 6.78938;
-     
-     alephParameters[0] = 5.10207e+00/50.; 
-     alephParameters[1] = 7.94982e+00; 
-     alephParameters[2] = TMath::Exp(-9.07942e+00); 
-     alephParameters[3] = 2.38808e+00; 
-     alephParameters[4] = 1.68165e+00;
-     
-   } else if(fppLowEn2011){ // pp low energy
-
-     alephParameters[0]=0.031642;
-     alephParameters[1]=22.353;
-     alephParameters[2]=4.16239e-12;
-     alephParameters[3]=2.61952;
-     alephParameters[4]=5.76086;    
-
-   } else {  // pp no 1-pad (LHC10bc)
-
-     alephParameters[0] = 0.0283086/0.97;
-     alephParameters[1] = 2.63394e+01;
-     alephParameters[2] = 5.04114e-11;
-     alephParameters[3] = 2.12543e+00;
-     alephParameters[4] = 4.88663e+00;
-     
-   }
-  
- }
 if(fMC) {  // MC
+
+    if(fPbPb) { // PbPb MC
+      
+      alephParameters[0] = 1.44405/50.;
+      alephParameters[1] = 2.35409e+01;
+      alephParameters[2] = TMath::Exp(-2.90330e+01);
+      alephParameters[3] = 2.10681e+00;
+      alephParameters[4] = 4.62254e+00;
+      
+    } else {  // pp MC
+      if(fMCLowEn2011){
+       alephParameters[0]=0.0207667;
+       alephParameters[1]=29.9936;
+       alephParameters[2]=3.87866e-11;
+       alephParameters[3]=2.17291;
+       alephParameters[4]=7.1623;
+      }else if(fOnePad){
+       alephParameters[0]=0.029021;
+       alephParameters[1]=25.4181;
+       alephParameters[2]=4.66596e-08;
+       alephParameters[3]=1.90008;
+       alephParameters[4]=4.63783;
+      }else{
+       alephParameters[0] = 2.15898/50.;
+       alephParameters[1] = 1.75295e+01;
+       alephParameters[2] = 3.40030e-09;
+       alephParameters[3] = 1.96178e+00;
+       alephParameters[4] = 3.91720e+00;
+      }
+    }
+    
 } else { // Real Data
+    
+    if(fOnePad) { // pp 1-pad (since LHC10d)
+      
+      alephParameters[0] =1.34490e+00/50.; 
+      alephParameters[1] = 2.69455e+01; 
+      alephParameters[2] = TMath::Exp(-2.97552e+01); 
+      alephParameters[3] = 2.35339e+00; 
+      alephParameters[4] = 5.98079e+00;
+      
+    } else if(fPbPb) { // PbPb 
+      
+      // alephParameters[0] = 1.25202/50.; 
+      // alephParameters[1] = 2.74992e+01; 
+      // alephParameters[2] = TMath::Exp(-3.31517e+01); 
+      // alephParameters[3] = 2.46246; 
+      // alephParameters[4] = 6.78938;
+      
+      alephParameters[0] = 5.10207e+00/50.; 
+      alephParameters[1] = 7.94982e+00; 
+      alephParameters[2] = TMath::Exp(-9.07942e+00); 
+      alephParameters[3] = 2.38808e+00; 
+      alephParameters[4] = 1.68165e+00;
+      
+    } else if(fppLowEn2011){ // pp low energy
+      
+      alephParameters[0]=0.031642;
+      alephParameters[1]=22.353;
+      alephParameters[2]=4.16239e-12;
+      alephParameters[3]=2.61952;
+      alephParameters[4]=5.76086;    
+      
+    } else {  // pp no 1-pad (LHC10bc)
+      
+      alephParameters[0] = 0.0283086/0.97;
+      alephParameters[1] = 2.63394e+01;
+      alephParameters[2] = 5.04114e-11;
+      alephParameters[3] = 2.12543e+00;
+      alephParameters[4] = 4.88663e+00;
+      
+    }
+    
 }
 
 }
 
@@ -775,62 +760,39 @@ void AliAODPidHF::SetBetheBloch() {
 
  return;
 }
-//-----------------------
-Bool_t AliAODPidHF::IsTOFPiKexcluded(AliAODTrack *track,Double_t nsigmaK){
-  // TOF proton compatibility
-
-  if(!CheckTOFPIDStatus(track)) return 0;
 
-  Double_t nsigma;
-  if(GetnSigmaTOF(track,3,nsigma)==1){
-    if(nsigma>nsigmaK) return kTRUE;
-  } 
-  return kFALSE;
-  /*  Double_t time[AliPID::kSPECIESN];
-  Double_t sigmaTOFPid[AliPID::kSPECIES];
-  AliAODPid *pidObj = track->GetDetPid();
-  pidObj->GetIntegratedTimes(time);
-  Double_t sigTOF=pidObj->GetTOFsignal();
 
- AliAODEvent *event=(AliAODEvent*)track->GetAODEvent();
- if (event) {
-   AliTOFHeader* tofH=(AliTOFHeader*)event->GetTOFHeader();
-   if (tofH && fPidResponse) { 
-     AliTOFPIDResponse TOFres = (AliTOFPIDResponse)fPidResponse->GetTOFResponse();
-     sigTOF -= TOFres.GetStartTime(track->P());
-     sigmaTOFPid[3]=TOFres.GetExpectedSigma(track->P(),time[3],AliPID::ParticleMass(3));
-   }
-   else  pidObj->GetTOFpidResolution(sigmaTOFPid);
- } else  pidObj->GetTOFpidResolution(sigmaTOFPid);
-  Double_t sigmaTOFtrack;
-  if (sigmaTOFPid[3]>0) sigmaTOFtrack=sigmaTOFPid[3];
-  else sigmaTOFtrack=fTOFSigma;  // backward compatibility for old AODs
-  
-  if((sigTOF-time[3])>nsigmaK*sigmaTOFtrack)return kTRUE;// K, Pi excluded (->LIKELY A PROTON)
-  
-  return kFALSE;
-  */
-}
 //--------------------------------------------------------------------------
-void AliAODPidHF::SetPriorDistribution(AliPID::EParticleType type,TH1F *prior){
+Int_t AliAODPidHF::GetnSigmaITS(AliAODTrack *track,Int_t species, Double_t &nsigma) const{
+  // get n sigma for ITS
 
-       //
-       // method setting the prior distributions to the AliPIDCombined object of the AliAODPidHF data member
-       // all the checks are done directly in the AliPIDCombined object
-       //
 
-       GetPidCombined()->SetPriorDistribution(type,prior);
-}
-//--------------------------------------------------------------------------
-void AliAODPidHF::DrawPrior(AliPID::EParticleType type){
+  if (!CheckITSPIDStatus(track)) return -1;
 
-       //
-       // Drawing prior distribution for type "type"
+  Double_t nsigmaITS=-999;
 
-       new TCanvas();
-       GetPidCombined()->GetPriorDistribution(type)->Draw();
-}
+  if (fOldPid) {
+    Double_t mom=track->P();
+    AliAODPid *pidObj = track->GetDetPid();
+    Double_t dedx=pidObj->GetITSsignal();
+
+    AliITSPIDResponse itsResponse;
+    AliPID::EParticleType type=AliPID::EParticleType(species);
+    nsigmaITS = itsResponse.GetNumberOfSigmas(mom,dedx,type);
+
+  } // old pid
+  else { // new pid
 
+    AliPID::EParticleType type=AliPID::EParticleType(species);
+    nsigmaITS = fPidResponse->NumberOfSigmasITS(track,type);
+
+  } //new pid
+
+  nsigma = nsigmaITS;
+
+  return 1;
+
+}
 //--------------------------------------------------------------------------
 Int_t AliAODPidHF::GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &nsigma) const{
   // get n sigma for TPC 
@@ -900,7 +862,6 @@ Bool_t AliAODPidHF::IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t ns
 
   } else if (detectors.Contains("TOF")) {
 
-    if (!(CheckTOFPIDStatus(track))) return kFALSE;
     Double_t nsigma=0.;
     if (GetnSigmaTOF(track,labelTrack,nsigma)==1){
       if(nsigma>nsigmaCut) return kTRUE;
@@ -911,6 +872,63 @@ Bool_t AliAODPidHF::IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t ns
   return kFALSE;
 
 }
+//-----------------------
+Bool_t AliAODPidHF::IsTOFPiKexcluded(AliAODTrack *track,Double_t nsigmaK){
+  // TOF proton compatibility
+
+  if(!CheckTOFPIDStatus(track)) return 0;
+
+  Double_t nsigma;
+  if(GetnSigmaTOF(track,3,nsigma)==1){
+    if(nsigma>nsigmaK) return kTRUE;
+  } 
+  return kFALSE;
+  /*  Double_t time[AliPID::kSPECIESN];
+  Double_t sigmaTOFPid[AliPID::kSPECIES];
+  AliAODPid *pidObj = track->GetDetPid();
+  pidObj->GetIntegratedTimes(time);
+  Double_t sigTOF=pidObj->GetTOFsignal();
+
+ AliAODEvent *event=(AliAODEvent*)track->GetAODEvent();
+ if (event) {
+   AliTOFHeader* tofH=(AliTOFHeader*)event->GetTOFHeader();
+   if (tofH && fPidResponse) { 
+     AliTOFPIDResponse TOFres = (AliTOFPIDResponse)fPidResponse->GetTOFResponse();
+     sigTOF -= TOFres.GetStartTime(track->P());
+     sigmaTOFPid[3]=TOFres.GetExpectedSigma(track->P(),time[3],AliPID::ParticleMass(3));
+   }
+   else  pidObj->GetTOFpidResolution(sigmaTOFPid);
+ } else  pidObj->GetTOFpidResolution(sigmaTOFPid);
+  Double_t sigmaTOFtrack;
+  if (sigmaTOFPid[3]>0) sigmaTOFtrack=sigmaTOFPid[3];
+  else sigmaTOFtrack=fTOFSigma;  // backward compatibility for old AODs
+  
+  if((sigTOF-time[3])>nsigmaK*sigmaTOFtrack)return kTRUE;// K, Pi excluded (->LIKELY A PROTON)
+  
+  return kFALSE;
+  */
+}
+
+//--------------------------------------------------------------------------
+void AliAODPidHF::SetPriorDistribution(AliPID::EParticleType type,TH1F *prior){
+
+       //
+       // method setting the prior distributions to the AliPIDCombined object of the AliAODPidHF data member
+       // all the checks are done directly in the AliPIDCombined object
+       //
+
+       GetPidCombined()->SetPriorDistribution(type,prior);
+}
+//--------------------------------------------------------------------------
+void AliAODPidHF::DrawPrior(AliPID::EParticleType type){
+
+       //
+       // Drawing prior distribution for type "type"
+
+       new TCanvas();
+       GetPidCombined()->GetPriorDistribution(type)->Draw();
+}
+
 //-----------------------------
 void AliAODPidHF::SetPriorsHistos(TString priorFileName){
   // Set histograms with priors
@@ -944,61 +962,27 @@ void AliAODPidHF::SetPriorsHistos(TString priorFileName){
 void AliAODPidHF::SetUpCombinedPID(){
   // Configuration of combined Bayesian PID
 
- fPidCombined->SetSelectedSpecies(AliPID::kSPECIES);
 fPidCombined->SetSelectedSpecies(AliPID::kSPECIES);
   for (Int_t ispecies=0;ispecies<AliPID::kSPECIES;++ispecies) {
     fPidCombined->SetPriorDistribution(static_cast<AliPID::EParticleType>(ispecies),fPriorsH[ispecies]);
   }
- switch (fCombDetectors){
 switch (fCombDetectors){
   case kTPCTOF:
-   fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
-  break;
+    fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetTOF);
+    break;
   case kTPCAndTOF:
     fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC & AliPIDResponse::kDetTOF);
     break;
   case kTPCITS:
-   fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS);
-  break;
+    fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC|AliPIDResponse::kDetITS);
+    break;
   case kTPC:
-   fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
-  break;
+    fPidCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
+    break;
   case kTOF:
-   fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
-  break;
- }
+    fPidCombined->SetDetectorMask(AliPIDResponse::kDetTOF);
+    break;
 }
 }
-//-----------------------------
-
-Int_t AliAODPidHF::GetnSigmaITS(AliAODTrack *track,Int_t species, Double_t &nsigma) const{
-  // get n sigma for ITS
-
-  Double_t nsigmaITS=-999;
-
-  if (!CheckITSPIDStatus(track)) return -1;
-
-  if (fOldPid) {
-    Double_t mom=track->P();
-    AliAODPid *pidObj = track->GetDetPid();
-    Double_t dedx=pidObj->GetITSsignal();
-
-    AliITSPIDResponse itsResponse;
-    AliPID::EParticleType type=AliPID::EParticleType(species);
-    nsigmaITS = itsResponse.GetNumberOfSigmas(mom,dedx,type);
 
-  } // old pid
-  else { // new pid
-
-    AliPID::EParticleType type=AliPID::EParticleType(species);
-    nsigmaITS = fPidResponse->NumberOfSigmasITS(track,type);
-
-  } //new pid
-
-  nsigma = nsigmaITS;
-
-  return 1;
-
-
-
-
-
-}
 
index 46b37e959aae5e81d6b98065b445668c0c52ea6a..c0952713d9f4dc7efea5efa7cb0a507950939cf6 100644 (file)
 
 #include <TString.h>
 #include <TH1F.h>
-#include "AliAODPid.h"
+#include <TObject.h>
 #include "AliAODTrack.h"
 #include "AliPIDResponse.h"
 #include "AliPIDCombined.h"
 #include "AliPID.h"
 
-class AliAODPidHF : public AliAODPid{
+class AliAODPidHF : public TObject{
 
  public:
 
- enum ECombDetectors {
-  kTPC,
-  kTOF,
-  kTPCTOF,
-  kTPCITS,
-  kTPCAndTOF
- };
-
- AliAODPidHF();
- AliAODPidHF(const AliAODPidHF& pid);
- AliAODPidHF& operator=(const AliAODPidHF& pid);
- virtual ~AliAODPidHF();
-
- //Setters
- void SetSigma(Double_t *sigma){
 enum ECombDetectors {
+    kTPC,
+    kTOF,
+    kTPCTOF,
+    kTPCITS,
+    kTPCAndTOF
 };
+
 AliAODPidHF();
 AliAODPidHF(const AliAODPidHF& pid);
 AliAODPidHF& operator=(const AliAODPidHF& pid);
 virtual ~AliAODPidHF();
+
 //Setters
 void SetSigma(Double_t *sigma){
     for(Int_t i=0; i<fnNSigma; i++) fnSigma[i]=sigma[i];
-     }
- void SetSigma(Int_t idet,Double_t sigma){fnSigma[idet]=sigma;return;}
- void SetSigmaForTPC(Double_t *sigma){for(Int_t i=0;i<3;i++) fnSigma[i]=sigma[i];return;}
- void SetSigmaForTPCCompat(Double_t sigma){fnSigmaCompat[0]=sigma;return;}
- void SetSigmaForTOFCompat(Double_t sigma){fnSigmaCompat[1]=sigma;return;}
- void SetSigmaForTOF(Double_t sigma){fnSigma[3]=sigma;return;}
- void SetSigmaForITS(Double_t sigma){fnSigma[4]=sigma;return;}
- void SetTofSigma(Double_t sigma){fTOFSigma=sigma;return;}
- void SetPriors(Double_t *priors){fPriors=priors;return;}
- void SetPLimit(Double_t *plim){for(Int_t i=0;i<fnPLimit;i++) fPLimit[i]=plim[i];return;}
- void SetPLimit(Double_t *plim,Int_t npLim){fnPLimit=npLim;for(Int_t i=0;i<fnPLimit;i++) fPLimit[i]=plim[i];return;}
- void SetAsym(Bool_t asym){fAsym=asym;return;}
- void SetTPC(Bool_t tpc){fTPC=tpc;return;}
- void SetTOF(Bool_t tof){fTOF=tof;return;}
- void SetITS(Bool_t its){fITS=its;return;}
- void SetTRD(Bool_t trd){fTRD=trd;return;}
- void SetMatch(Int_t match){fMatch=match;return;}
- void SetCompat(Bool_t comp){fCompat=comp;return;}
- void SetMC(Bool_t mc){fMC=mc;return;}
- void SetMClowenpp2011(Bool_t mc){fMCLowEn2011=mc;return;}
- void SetOnePad(Bool_t onepad){fOnePad=onepad;return;}
- void SetppLowEn2011(Bool_t opt){fppLowEn2011=opt;return;}
- void SetPbPb(Bool_t pbpb){fPbPb=pbpb;return;}
- void SetPCompatTOF(Double_t pTOF){fPCompatTOF=pTOF;return;}
- void SetTOFdecide(Bool_t tOFdecide){fTOFdecide=tOFdecide;return;}
- void SetOldPid(Bool_t oldPid){fOldPid=oldPid;return;}
- void SetPtThresholdTPC(Double_t ptThresholdTPC){fPtThresholdTPC=ptThresholdTPC;return;}
- void SetMaxTrackMomForCombinedPID(Double_t mom){fMaxTrackMomForCombinedPID=mom;}
- void SetPidResponse(AliPIDResponse *pidResp) {fPidResponse=pidResp;return;}
- void SetCombDetectors(ECombDetectors pidComb) {
-   fCombDetectors=pidComb;
   }
- void SetPionPriorHisto(TH1F* histo){
-   if(fPriorsH[AliPID::kPion]) delete fPriorsH[AliPID::kPion];
-   fPriorsH[AliPID::kPion] = new TH1F(*histo);
- }
- void SetKaonPriorHisto(TH1F* histo){
-   if(fPriorsH[AliPID::kKaon]) delete fPriorsH[AliPID::kKaon];
-   fPriorsH[AliPID::kKaon] = new TH1F(*histo);
- }
- void SetProtonPriorHisto(TH1F* histo){
-   if(fPriorsH[AliPID::kProton]) delete fPriorsH[AliPID::kProton];
-   fPriorsH[AliPID::kProton] = new TH1F(*histo);
- }
+  void SetSigma(Int_t idet,Double_t sigma){fnSigma[idet]=sigma;return;}
+  void SetSigmaForTPC(Double_t *sigma){for(Int_t i=0;i<3;i++) fnSigma[i]=sigma[i];return;}
+  void SetSigmaForTPCCompat(Double_t sigma){fnSigmaCompat[0]=sigma;return;}
+  void SetSigmaForTOFCompat(Double_t sigma){fnSigmaCompat[1]=sigma;return;}
+  void SetSigmaForTOF(Double_t sigma){fnSigma[3]=sigma;return;}
+  void SetSigmaForITS(Double_t sigma){fnSigma[4]=sigma;return;}
+  void SetTofSigma(Double_t sigma){fTOFSigma=sigma;return;}
+
+  void SetCutOnTOFmismatchProb(Double_t cut=0.01){fCutTOFmismatch=cut;}
+  void DisableCutOnTOFmismatchProb(){fCutTOFmismatch=999.;}
+
+  void SetMinNClustersTPCPID(Int_t minc) {fMinNClustersTPCPID=minc;}
+
+  void SetCombinednSigmaCutForPiKP(Float_t sigpi, Float_t sigk, Float_t sigp){
+    fMaxnSigmaCombined[0]=sigpi; 
+    fMaxnSigmaCombined[1]=sigk;
+    fMaxnSigmaCombined[2]=sigp;
+  }
+  void SetTPCnSigmaRangeForPions(Float_t smin, Float_t smax){
+    fMinnSigmaTPC[0]=smin;
+    fMaxnSigmaTPC[0]=smax;
+  }
+  void SetTOFnSigmaRangeForPions(Float_t smin, Float_t smax){
+    fMinnSigmaTOF[0]=smin;
+    fMaxnSigmaTOF[0]=smax;
+  }
+  void SetTPCnSigmaRangeForKaons(Float_t smin, Float_t smax){
+    fMinnSigmaTPC[1]=smin;
+    fMaxnSigmaTPC[1]=smax;
+  }
+  void SetTOFnSigmaRangeForKaons(Float_t smin, Float_t smax){
+    fMinnSigmaTOF[1]=smin;
+    fMaxnSigmaTOF[1]=smax;
+  }
+  void SetTPCnSigmaRangeForProtons(Float_t smin, Float_t smax){
+    fMinnSigmaTPC[2]=smin;
+    fMaxnSigmaTPC[2]=smax;
+  }
+  void SetTOFnSigmaRangeForProtons(Float_t smin, Float_t smax){
+    fMinnSigmaTOF[2]=smin;
+    fMaxnSigmaTOF[2]=smax;
+  }
+
+  void SetPriors(Double_t *priors){fPriors=priors;return;}
+  void SetPLimit(Double_t *plim){for(Int_t i=0;i<fnPLimit;i++) fPLimit[i]=plim[i];return;}
+  void SetPLimit(Double_t *plim,Int_t npLim){fnPLimit=npLim;for(Int_t i=0;i<fnPLimit;i++) fPLimit[i]=plim[i];return;}
+  void SetAsym(Bool_t asym){fAsym=asym;return;}
+  void SetTPC(Bool_t tpc){fTPC=tpc;return;}
+  void SetTOF(Bool_t tof){fTOF=tof;return;}
+  void SetITS(Bool_t its){fITS=its;return;}
+  void SetTRD(Bool_t trd){fTRD=trd;return;}
+  void SetMatch(Int_t match){fMatch=match;return;}
+  void SetCompat(Bool_t comp){fCompat=comp;return;}
+  void SetMC(Bool_t mc){fMC=mc;return;}
+  void SetMClowenpp2011(Bool_t mc){fMCLowEn2011=mc;return;}
+  void SetOnePad(Bool_t onepad){fOnePad=onepad;return;}
+  void SetppLowEn2011(Bool_t opt){fppLowEn2011=opt;return;}
+  void SetPbPb(Bool_t pbpb){fPbPb=pbpb;return;}
+  void SetPCompatTOF(Double_t pTOF){fPCompatTOF=pTOF;return;}
+  void SetTOFdecide(Bool_t tOFdecide){fTOFdecide=tOFdecide;return;}
+  void SetOldPid(Bool_t oldPid){fOldPid=oldPid;return;}
+  void SetPtThresholdTPC(Double_t ptThresholdTPC){fPtThresholdTPC=ptThresholdTPC;return;}
+  void SetMaxTrackMomForCombinedPID(Double_t mom){fMaxTrackMomForCombinedPID=mom;}
+  void SetPidResponse(AliPIDResponse *pidResp) {fPidResponse=pidResp;return;}
+  void SetCombDetectors(ECombDetectors pidComb) {
+    fCombDetectors=pidComb;
+  }
+  void SetPionPriorHisto(TH1F* histo){
+    if(fPriorsH[AliPID::kPion]) delete fPriorsH[AliPID::kPion];
+    fPriorsH[AliPID::kPion] = new TH1F(*histo);
+  }
+  void SetKaonPriorHisto(TH1F* histo){
+    if(fPriorsH[AliPID::kKaon]) delete fPriorsH[AliPID::kKaon];
+    fPriorsH[AliPID::kKaon] = new TH1F(*histo);
+  }
+  void SetProtonPriorHisto(TH1F* histo){
+    if(fPriorsH[AliPID::kProton]) delete fPriorsH[AliPID::kProton];
+    fPriorsH[AliPID::kProton] = new TH1F(*histo);
+  }
 
  
- //Getters
 //Getters
  
- Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const;
- Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const;
- Int_t GetnSigmaITS(AliAODTrack *track, Int_t species, Double_t &sigma) const;
- Double_t GetSigma(Int_t idet) const{return fnSigma[idet];}
- Double_t GetTofSigma() const{return fTOFSigma;}
- //void GetPriors(Double_t *priors) const{priors=fPriors;return;}
- //void GetPLimit(Double_t *plim) const{plim=fPLimit;}
- void GetPriors(Double_t *priors) const{for(Int_t i=0;i<fnPriors;i++){priors[i]=fPriors[i];}return;}
- void GetPLimit(Double_t *plim) const{for(Int_t i=0;i<fnPLimit;i++){plim[i]=fPLimit[i];}return;}
- Bool_t GetAsym() const{return fAsym;}
- Bool_t GetTPC() const{return fTPC;}
- Bool_t GetTOF() const{return fTOF;}
- Bool_t GetITS() const{return fITS;}
- Bool_t GetTRD() const{return fTRD;}
- Int_t GetMatch() const{return fMatch;}
- Bool_t GetCompat() const{return fCompat;}
- Bool_t GetMC() const{return fMC;}
- Bool_t GetOnePad() const{return fOnePad;}
- Bool_t GetppLowEn2011() const {return fppLowEn2011;}
- Bool_t GetMCLowEn2011() const {return fMCLowEn2011;}
- Bool_t GetPbPb() const{return fPbPb;}
- Bool_t GetTOFdecide() const{return fTOFdecide;}
- Double_t GetPCompatTOF() const{return fPCompatTOF;}
- Double_t GetnSigmaCompatTPC() const{return fnSigmaCompat[0];}
- Double_t GetnSigmaCompatTOF() const{return fnSigmaCompat[1];}
- Bool_t GetOldPid(){return fOldPid;}
- Double_t GetPtThresholdTPC(){return fPtThresholdTPC;}
- Double_t GetMaxTrackMomForCombinedPID(){return fMaxTrackMomForCombinedPID;}
- AliPIDResponse *GetPidResponse() const {return fPidResponse;}
- AliPIDCombined *GetPidCombined() const {return fPidCombined;}
- ECombDetectors GetCombDetectors() const {
-   return fCombDetectors;
 Int_t GetnSigmaTPC(AliAODTrack *track, Int_t species, Double_t &sigma) const;
 Int_t GetnSigmaTOF(AliAODTrack *track, Int_t species, Double_t &sigma) const;
 Int_t GetnSigmaITS(AliAODTrack *track, Int_t species, Double_t &sigma) const;
 Double_t GetSigma(Int_t idet) const{return fnSigma[idet];}
 Double_t GetTofSigma() const{return fTOFSigma;}
 //void GetPriors(Double_t *priors) const{priors=fPriors;return;}
 //void GetPLimit(Double_t *plim) const{plim=fPLimit;}
 void GetPriors(Double_t *priors) const{for(Int_t i=0;i<fnPriors;i++){priors[i]=fPriors[i];}return;}
 void GetPLimit(Double_t *plim) const{for(Int_t i=0;i<fnPLimit;i++){plim[i]=fPLimit[i];}return;}
 Bool_t GetAsym() const{return fAsym;}
 Bool_t GetTPC() const{return fTPC;}
 Bool_t GetTOF() const{return fTOF;}
 Bool_t GetITS() const{return fITS;}
 Bool_t GetTRD() const{return fTRD;}
 Int_t GetMatch() const{return fMatch;}
 Bool_t GetCompat() const{return fCompat;}
 Bool_t GetMC() const{return fMC;}
 Bool_t GetOnePad() const{return fOnePad;}
 Bool_t GetppLowEn2011() const {return fppLowEn2011;}
 Bool_t GetMCLowEn2011() const {return fMCLowEn2011;}
 Bool_t GetPbPb() const{return fPbPb;}
 Bool_t GetTOFdecide() const{return fTOFdecide;}
 Double_t GetPCompatTOF() const{return fPCompatTOF;}
 Double_t GetnSigmaCompatTPC() const{return fnSigmaCompat[0];}
 Double_t GetnSigmaCompatTOF() const{return fnSigmaCompat[1];}
 Bool_t GetOldPid(){return fOldPid;}
 Double_t GetPtThresholdTPC(){return fPtThresholdTPC;}
 Double_t GetMaxTrackMomForCombinedPID(){return fMaxTrackMomForCombinedPID;}
 AliPIDResponse *GetPidResponse() const {return fPidResponse;}
 AliPIDCombined *GetPidCombined() const {return fPidCombined;}
 ECombDetectors GetCombDetectors() const {
+    return fCombDetectors;
   }
- Bool_t GetUseCombined() {return fUseCombined;}
 Bool_t GetUseCombined() {return fUseCombined;}
 
- Int_t RawSignalPID (AliAODTrack *track, TString detector) const;
- Bool_t IsKaonRaw (AliAODTrack *track, TString detector) const;
- Bool_t IsPionRaw (AliAODTrack *track, TString detector) const;
- Bool_t IsProtonRaw (AliAODTrack *track, TString detector) const;
- Bool_t IsElectronRaw (AliAODTrack *track, TString detector) const;
- void CombinedProbability(AliAODTrack *track,Bool_t *type) const; //0 = pion, 1 = kaon, 2 = proton
- Bool_t CheckStatus(AliAODTrack *track,TString detectors) const;
 Int_t RawSignalPID (AliAODTrack *track, TString detector) const;
 Bool_t IsKaonRaw (AliAODTrack *track, TString detector) const;
 Bool_t IsPionRaw (AliAODTrack *track, TString detector) const;
 Bool_t IsProtonRaw (AliAODTrack *track, TString detector) const;
 Bool_t IsElectronRaw (AliAODTrack *track, TString detector) const;
 void CombinedProbability(AliAODTrack *track,Bool_t *type) const; //0 = pion, 1 = kaon, 2 = proton
 Bool_t CheckStatus(AliAODTrack *track,TString detectors) const;
 
- Bool_t CheckITSPIDStatus(AliAODTrack *track) const;
- Bool_t CheckTPCPIDStatus(AliAODTrack *track) const;
- Bool_t CheckTOFPIDStatus(AliAODTrack *track) const;
- Bool_t CheckTRDPIDStatus(AliAODTrack *track) const;
 Bool_t CheckITSPIDStatus(AliAODTrack *track) const;
 Bool_t CheckTPCPIDStatus(AliAODTrack *track) const;
 Bool_t CheckTOFPIDStatus(AliAODTrack *track) const;
 Bool_t CheckTRDPIDStatus(AliAODTrack *track) const;
 
- Bool_t TPCRawAsym(AliAODTrack* track,Int_t specie) const;
- Int_t MatchTPCTOF(AliAODTrack *track,Int_t specie);
 Bool_t TPCRawAsym(AliAODTrack* track,Int_t specie) const;
 Int_t MatchTPCTOF(AliAODTrack *track,Int_t specie);
 
- Int_t MakeRawPid(AliAODTrack *track,Int_t specie); //general method to perform PID using raw signals
 Int_t MakeRawPid(AliAODTrack *track,Int_t specie); //general method to perform PID using raw signals
 
- Bool_t IsTOFPiKexcluded(AliAODTrack *track,Double_t nsigmaK);
 Bool_t IsTOFPiKexcluded(AliAODTrack *track,Double_t nsigmaK);
 
- Bool_t IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t nsigmaCut, TString detector);
 Bool_t IsExcluded(AliAODTrack *track, Int_t labelTrack, Double_t nsigmaCut, TString detector);
 
- void GetTPCBetheBlochParams(Double_t alephParameters[5]) const;
- void SetBetheBloch();
 void GetTPCBetheBlochParams(Double_t alephParameters[5]) const;
 void SetBetheBloch();
   // method for AliPIDCombined object
- void SetSelectedSpecies(Int_t ispecies = AliPID::kSPECIES){GetPidCombined()->SetSelectedSpecies(ispecies);};
- void SetPriorDistribution(AliPID::EParticleType type,TH1F *prior);
- void DrawPrior(AliPID::EParticleType type);
- void SetPriorsHistos(TString priorFileName);
- void SetUpCombinedPID();
- void SetUseCombined(Bool_t useCombined=kTRUE) {fUseCombined=useCombined;}
 void SetSelectedSpecies(Int_t ispecies = AliPID::kSPECIES){GetPidCombined()->SetSelectedSpecies(ispecies);};
 void SetPriorDistribution(AliPID::EParticleType type,TH1F *prior);
 void DrawPrior(AliPID::EParticleType type);
 void SetPriorsHistos(TString priorFileName);
 void SetUpCombinedPID();
 void SetUseCombined(Bool_t useCombined=kTRUE) {fUseCombined=useCombined;}
 
- Int_t ApplyPidTPCRaw(AliAODTrack *track,Int_t specie) const;
- Int_t ApplyPidTOFRaw(AliAODTrack *track,Int_t specie) const;
- Int_t ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const;
 Int_t ApplyPidTPCRaw(AliAODTrack *track,Int_t specie) const;
 Int_t ApplyPidTOFRaw(AliAODTrack *track,Int_t specie) const;
 Int_t ApplyPidITSRaw(AliAODTrack *track,Int_t specie) const;
 
  protected:
 
 
  private:
- Int_t fnNSigma; // number of sigmas
- Double_t *fnSigma; // [fnNSigma], sigma for the raw signal PID: 0-2 for TPC, 3 for TOF, 4 for ITS
- Double_t fTOFSigma; // TOF precision 
- Int_t fnPriors; //number of priors
- Double_t *fPriors; // [fnPriors], set of priors
- Int_t fnPLimit; //number of Plimit
- Double_t *fPLimit; // [fnPLimit], limit of p intervals for asimmetric PID: fPLimit<p[0], fPLimit[0]<p<fPLimit[1], p>fPLimit[1]
- Bool_t fAsym; // asimmetric PID required
- Bool_t fTPC; //switch to include or exclude TPC 
- Bool_t fTOF; // switch to include or exclude TOF
- Bool_t fITS; //switch to include or exclude ITS
- Bool_t fTRD; // switch to include or exclude TRD
- Int_t fMatch; //switch to combine the info from more detectors: 1 = || , 2 = &, 3 = p region
- Bool_t fCompat; // compatibility region : useful only if fMatch=1
- Double_t fPCompatTOF; //  compatibility p limit for TOF  
- Int_t fnNSigmaCompat; // number of sigmas
- Double_t *fnSigmaCompat; //[fnNSigmaCompat]  0: n sigma for TPC compatibility band, 1: for TOF  
- Bool_t fMC; // MC(kTRUE) or real data (kFALSE, default option)
- Bool_t fOnePad; //  real data with one pad clusters 
- Bool_t fMCLowEn2011; //  MC for low energy MC
- Bool_t fppLowEn2011; //  Data for low energy pp 2011
- Bool_t fPbPb; //  real data PbPb 
- Bool_t fTOFdecide; //  real data PbPb 
- Bool_t fOldPid; //  old PID method implemented
- Double_t fPtThresholdTPC; //  pT threshold to use TPC PID
- Double_t fMaxTrackMomForCombinedPID; // momentum threshold to use PID
- AliPIDResponse *fPidResponse; //! pid response
- AliPIDCombined* fPidCombined; //! combined PID object 
-
- AliTPCPIDResponse* fTPCResponse; //! TPC response 
-
- TH1F* fPriorsH[AliPID::kSPECIES]; // priors histos
- ECombDetectors fCombDetectors; // detectors to be involved for combined PID
- Bool_t fUseCombined; // detectors to be involved for combined PID
-
- ClassDef(AliAODPidHF,19) // AliAODPid for heavy flavor PID
-
-};
+  Int_t fnNSigma; // number of sigmas
+  Double_t *fnSigma; // [fnNSigma], sigma for the raw signal PID: 0-2 for TPC, 3 for TOF, 4 for ITS
+  Double_t fTOFSigma; // TOF precision 
+  Double_t fCutTOFmismatch; // Cut of TOF mismatch probability
+  UInt_t fMinNClustersTPCPID;       // Minimum TPC PID clusters cut
+  Int_t fnPriors; //number of priors
+  Double_t *fPriors; // [fnPriors], set of priors
+  Int_t fnPLimit; //number of Plimit
+  Double_t *fPLimit; // [fnPLimit], limit of p intervals for asimmetric PID: fPLimit<p[0], fPLimit[0]<p<fPLimit[1], p>fPLimit[1]
+  Bool_t fAsym; // asimmetric PID required
+  Bool_t fTPC; //switch to include or exclude TPC 
+  Bool_t fTOF; // switch to include or exclude TOF
+  Bool_t fITS; //switch to include or exclude ITS
+  Bool_t fTRD; // switch to include or exclude TRD
+  Int_t fMatch; //switch to combine the info from more detectors: 1 = || , 2 = &, 3 = p region
+  Bool_t fCompat; // compatibility region : useful only if fMatch=1
+  Double_t fPCompatTOF; //  compatibility p limit for TOF  
+  Int_t fnNSigmaCompat; // number of sigmas
+  Double_t *fnSigmaCompat; //[fnNSigmaCompat]  0: n sigma for TPC compatibility band, 1: for TOF  
+  Double_t fMaxnSigmaCombined[3];  // nSigma cut for pi,K,p (TPC^2+TOF^2)
+  Double_t fMinnSigmaTPC[3]; //min. of nSigma range for pi,K,p in TPC (match==5)
+  Double_t fMaxnSigmaTPC[3]; //max. of nSigma range for pi,K,p in TPC (match==5)
+  Double_t fMinnSigmaTOF[3]; //min. of nSigma range for pi,K,p in TOF (match==5)
+  Double_t fMaxnSigmaTOF[3]; //max. of nSigma range for pi,K,p in TOF (match==5)
+  Bool_t fMC; // MC(kTRUE) or real data (kFALSE, default option)
+  Bool_t fOnePad; //  real data with one pad clusters 
+  Bool_t fMCLowEn2011; //  MC for low energy MC
+  Bool_t fppLowEn2011; //  Data for low energy pp 2011
+  Bool_t fPbPb; //  real data PbPb 
+  Bool_t fTOFdecide; //  real data PbPb 
+  Bool_t fOldPid; //  old PID method implemented
+  Double_t fPtThresholdTPC; //  pT threshold to use TPC PID
+  Double_t fMaxTrackMomForCombinedPID; // momentum threshold to use PID
+  AliPIDResponse *fPidResponse; //! pid response
+  AliPIDCombined* fPidCombined; //! combined PID object 
+
+  AliTPCPIDResponse* fTPCResponse; //! TPC response 
+
+  TH1F* fPriorsH[AliPID::kSPECIES]; // priors histos
+  ECombDetectors fCombDetectors; // detectors to be involved for combined PID
+  Bool_t fUseCombined; // detectors to be involved for combined PID
+
+  ClassDef(AliAODPidHF,20) // AliAODPid for heavy flavor PID
+
+    };
 
 #endif