#include <TAxis.h>
#include <TClass.h>
#include <TF1.h>
-#include <THnSparse.h>
#include <TIterator.h>
#include <TList.h>
#include <TObjArray.h>
#include <TObjString.h>
#include <TString.h>
+#include "AliAODpidUtil.h"
#include "AliESDpid.h"
-#include "AliESDtrack.h"
#include "AliLog.h"
#include "AliPID.h"
+#include "AliVParticle.h"
+#include "AliHFEcontainer.h"
#include "AliHFEpid.h"
#include "AliHFEpidBase.h"
+#include "AliHFEpidQAmanager.h"
#include "AliHFEpidITS.h"
#include "AliHFEpidTPC.h"
#include "AliHFEpidTRD.h"
#include "AliHFEpidTOF.h"
#include "AliHFEpidMC.h"
+#include "AliHFEvarManager.h"
ClassImp(AliHFEpid)
+const Char_t* AliHFEpid::fgkDetectorName[AliHFEpid::kNdetectorPID + 1] = {
+ "MCPID",
+ "ESDPID",
+ "ITSPID",
+ "TPCPID",
+ "TRDPID",
+ "TOFPID",
+ "UndefinedPID"
+};
+
//____________________________________________________________
AliHFEpid::AliHFEpid():
TNamed(),
fEnabledDetectors(0),
- fPIDstrategy(kUndefined),
- fQAlist(0x0),
- fDebugLevel(0),
+ fNPIDdetectors(0),
+ fVarManager(NULL),
fCommonObjects(NULL)
{
//
// Default constructor
//
memset(fDetectorPID, 0, sizeof(AliHFEpidBase *) * kNdetectorPID);
+ memset(fDetectorOrder, kUndefined, sizeof(UInt_t) * kNdetectorPID);
+ memset(fDetectorOrder, 0, sizeof(UInt_t) * kNdetectorPID);
}
//____________________________________________________________
AliHFEpid::AliHFEpid(const Char_t *name):
TNamed(name, ""),
fEnabledDetectors(0),
- fPIDstrategy(kUndefined),
- fQAlist(NULL),
- fDebugLevel(0),
+ fNPIDdetectors(0),
+ fVarManager(NULL),
fCommonObjects(NULL)
{
//
// Create PID objects for all detectors
//
memset(fDetectorPID, 0, sizeof(AliHFEpidBase *) * kNdetectorPID);
+ memset(fDetectorOrder, kUndefined, sizeof(UInt_t) * kNdetectorPID);
+ memset(fSortedOrder, 0, sizeof(UInt_t) * kNdetectorPID);
+
fDetectorPID[kMCpid] = new AliHFEpidMC("MCPID");
- fDetectorPID[kTPCpid] = new AliHFEpidTPC("TRDPID");
+ fDetectorPID[kTPCpid] = new AliHFEpidTPC("TPCPID");
fDetectorPID[kTRDpid] = new AliHFEpidTRD("TRDPID");
fDetectorPID[kTOFpid] = new AliHFEpidTOF("TOFPID");
AliHFEpid::AliHFEpid(const AliHFEpid &c):
TNamed(c),
fEnabledDetectors(c.fEnabledDetectors),
- fPIDstrategy(kUndefined),
- fQAlist(NULL),
- fDebugLevel(c.fDebugLevel),
+ fNPIDdetectors(c.fNPIDdetectors),
+ fVarManager(c.fVarManager),
fCommonObjects(NULL)
{
//
//
for(Int_t idet = 0; idet < kNdetectorPID; idet++)
if(fDetectorPID[idet]) delete fDetectorPID[idet];
- if(fQAlist) delete fQAlist; fQAlist = NULL; // Each detector has to care about its Histograms
ClearCommonObjects();
}
target.ClearCommonObjects();
target.fEnabledDetectors = fEnabledDetectors;
- target.fPIDstrategy = fPIDstrategy;
- if(target.fQAlist){
- delete target.fQAlist; target.fQAlist = NULL;
- }
- if(fQAlist) target.fQAlist = new TList;
- target.fQAlist = 0x0;
- target.fDebugLevel = fDebugLevel;
+ target.fNPIDdetectors = fNPIDdetectors;
+ target.fVarManager = fVarManager;
// Copy detector PIDs
for(Int_t idet = 0; idet < kNdetectorPID; idet++){
if(fDetectorPID[idet])
target.fDetectorPID[idet] = dynamic_cast<AliHFEpidBase *>(fDetectorPID[idet]->Clone());
}
+ memcpy(target.fDetectorOrder, fDetectorOrder, sizeof(UInt_t) * kNdetectorPID);
+ memcpy(target.fSortedOrder, fSortedOrder, sizeof(UInt_t) * kNdetectorPID);
}
//____________________________________________________________
}
//____________________________________________________________
-Bool_t AliHFEpid::InitializePID(TString arg){
+void AliHFEpid::AddDetector(TString detector, UInt_t position){
//
- // Initializes PID Object:
- // + Defines which detectors to use
- // + Initializes Detector PID objects
- // + Handles QA
+ // Add Detector in position
//
-
- Bool_t initFail = kFALSE;
- if(arg.BeginsWith("Strategy")){
- // Initialize detector PIDs according to PID Strategies
- arg.ReplaceAll("Strategy", "");
- fPIDstrategy = arg.Atoi();
- AliDebug(1, Form("%s - PID Strategy %d enabled", GetName(), fPIDstrategy));
- switch(fPIDstrategy){
- case 0: SwitchOnDetector(kMCpid); break; // Pure MC PID - only valid in MC mode
- case 1: InitStrategy1(); break;
- case 2: InitStrategy2(); break;
- case 3: InitStrategy3(); break;
- case 4: InitStrategy4(); break;
- case 5: InitStrategy5(); break;
- case 6: InitStrategy6(); break;
- case 7: InitStrategy7(); break;
- case 8: InitStrategy8(); break;
- default: initFail = kFALSE;
- }
- } else {
- // No Strategy defined, Initialize according to detectors specified
- AliDebug(1, Form("%s - Doing InitializePID for Detectors %s end", GetName(), arg.Data()));
-
- TObjArray *detsEnabled = arg.Tokenize(":");
- TIterator *detIterator = detsEnabled->MakeIterator();
- TObjString *det = NULL;
- Int_t detector = -1;
- TString detectors[kNdetectorPID] = {"MC", "ESD", "ITS", "TPC", "TRD", "TOF"};
- Int_t nDetectors = 0;
- while((det = dynamic_cast<TObjString *>(detIterator->Next()))){
- TString &detstring = det->String();
- detector = -1;
- for(Int_t idet = 0; idet < kNdetectorPID; idet++){
- if(!detstring.CompareTo(detectors[idet])){
- detector = idet;
- break;
- }
- }
- if(detector > -1){
- SwitchOnDetector(detector);
- nDetectors++;
- } else AliError(Form("Detector %s not implemented (yet)", detstring.Data()));
- }
- if(!nDetectors) initFail = kTRUE;
- }
- if(initFail){
- AliError("Initializaion of the PID Failed");
- return kFALSE;
- }
+ UInt_t detectorID = kUndefined;
+ detector.ToUpper();
+ if(!detector.CompareTo("MC")) detectorID = kMCpid;
+ else if(!detector.CompareTo("TPC")) detectorID = kTPCpid;
+ else if(!detector.CompareTo("TRD")) detectorID = kTRDpid;
+ else if(!detector.CompareTo("TOF")) detectorID = kTOFpid;
+ else AliError("Detector not available");
+ if(detectorID == kUndefined) return;
+ if(IsDetectorOn(detectorID)) return;
+ SwitchOnDetector(detectorID);
+ fDetectorOrder[detectorID] = position;
+ fNPIDdetectors++;
+}
+
+//____________________________________________________________
+Bool_t AliHFEpid::InitializePID(){
+ //
+ // Initializes the PID object
+ //
+
+ TMath::Sort(static_cast<UInt_t>(kNdetectorPID), fDetectorOrder, fSortedOrder, kFALSE);
// Initialize PID Objects
Bool_t status = kTRUE;
for(Int_t idet = 0; idet < kNdetectorPID; idet++){
if(!IsDetectorOn(idet)) continue;
if(fDetectorPID[idet]){
status &= fDetectorPID[idet]->InitializePID();
- if(IsQAOn() && status) fDetectorPID[idet]->SetQAOn(fQAlist);
if(HasMCData() && status) fDetectorPID[idet]->SetHasMCData();
}
}
PrintStatus();
return status;
- AliDebug(1, Form("%s - Done", GetName()));
}
//____________________________________________________________
-Bool_t AliHFEpid::IsSelected(AliHFEpidObject *track){
+Bool_t AliHFEpid::IsSelected(AliHFEpidObject *track, AliHFEcontainer *cont, const Char_t *contname, AliHFEpidQAmanager *pidqa){
//
- // Steers PID decision for single detectors respectively combined
- // PID decision
+ // Select Tracks
//
- if(!track->fRecTrack){
- // MC Event
- return (TMath::Abs(fDetectorPID[kMCpid]->IsSelected(track)) == 11);
- }
- if(fPIDstrategy < 9){
- AliDebug(1, Form("%s - PID Strategy %d", GetName(), fPIDstrategy));
- Int_t pid = 0;
- switch(fPIDstrategy){
- case 0: pid = IdentifyStrategy0(track); break;
- case 1: pid = IdentifyStrategy1(track); break;
- case 2: pid = IdentifyStrategy2(track); break;
- case 3: pid = IdentifyStrategy3(track); break;
- case 4: pid = IdentifyStrategy4(track); break;
- case 5: pid = IdentifyStrategy5(track); break;
- case 6: pid = IdentifyStrategy6(track); break;
- case 7: pid = IdentifyStrategy7(track); break;
- case 8: pid = IdentifyStrategy8(track); break;
- default: break;
+ Bool_t isSelected = kTRUE;
+ AliDebug(1, Form("Particle used for PID, QA available: %s", pidqa ? "Yes" : "No"));
+ for(UInt_t idet = 0; idet < fNPIDdetectors; idet++){
+ AliDebug(2, Form("Using Detector %s\n", SortedDetectorName(idet)));
+ if(TMath::Abs(fDetectorPID[fSortedOrder[idet]]->IsSelected(track, pidqa)) != 11){
+ isSelected = kFALSE;
+ break;
}
- return pid;
- }
- if(TESTBIT(fEnabledDetectors, kTPCpid)){
- if(IsQAOn() && fDebugLevel > 1){
- AliInfo("Filling QA plots");
- MakePlotsItsTpc(track); // First fill the QA histograms
+ AliDebug(2, "Particlae selected by detector");
+ if(fVarManager && cont){
+ Char_t reccontname[256];
+ sprintf(reccontname, "%sReco", contname);
+ AliDebug(2, Form("Filling container %s", reccontname));
+ if(fVarManager->IsSignalTrack())
+ fVarManager->FillContainerStepname(cont, reccontname, SortedDetectorName(idet));
+ if(HasMCData()){
+ Char_t mccontname[256];
+ sprintf(mccontname, "%sMC", contname);
+ AliDebug(2, Form("MC Information available, Filling container %s", mccontname));
+ if(fVarManager->IsSignalTrack())
+ fVarManager->FillContainerStepname(cont, mccontname, SortedDetectorName(idet), kTRUE);
+ }
+ // The PID will NOT fill the double counting information
}
- if(TESTBIT(fEnabledDetectors, kTOFpid)){
- // case TPC-TOF
- return MakePidTpcTof(track);
- } else if(TESTBIT(fEnabledDetectors, kTRDpid)){
- // case TPC-TRD with low level detector Signals
- return MakePidTpcTrd(track);
- } else
- return (TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) ==11);
- } else if(TESTBIT(fEnabledDetectors, kTRDpid)){
- return (TMath::Abs(fDetectorPID[kTRDpid]->IsSelected(track)) ==11);
- } else if(TESTBIT(fEnabledDetectors, kTOFpid)){
- return (TMath::Abs(fDetectorPID[kTOFpid]->IsSelected(track)) ==11);
- }
-
- return kFALSE;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::MakePidTpcTof(AliHFEpidObject *track){
- //
- // Combines TPC and TOF PID decision
- //
- if(track->fAnalysisType != AliHFEpidObject::kESDanalysis) return kFALSE;
-
- AliHFEpidTOF *tofPID = dynamic_cast<AliHFEpidTOF*>(fDetectorPID[kTOFpid]);
- if(!tofPID){
- AliWarning("TOF pid object is NULL");
- return kFALSE;
- }
-
- AliHFEpidTPC *tpcPID = dynamic_cast<AliHFEpidTPC*>(fDetectorPID[kTPCpid]);
- if(!tpcPID){
- AliWarning("TPC pid object is NULL");
- return kFALSE;
- }
-
- // Use TOF PID to select particles with a sigma to the electron line > defined in initialize PID
- if(TMath::Abs(tofPID->IsSelected(track)) != 11) return kFALSE;
- // request TOF PID information, reject if no TOF information is available or if TOF identified as Proton or Kaon
- // apply cut only up to certain upper momentum cut
- /*Int_t pidTOF = tofPID->IsSelected(track);
- Bool_t isRejected = kFALSE;
- switch(TMath::Abs(pidTOF)){
- case 321: if(track->fRecTrack->P() < 1.5) isRejected = kTRUE; break;
- case 2212: if(track->fRecTrack->P() < 3) isRejected = kTRUE; break;
- case 0: if(track->fRecTrack->P() < 3) isRejected = kTRUE; break; // No TOF information available
- default: break;
- };
- if(isRejected) return kFALSE;*/
-
- // Particle passed TOF, let TPC decide, no line crossings defined anymore
-
- // request the tpc PID information
- return (TMath::Abs(tpcPID->IsSelected(track)) == 11);
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::MakePidTpcTrd(AliHFEpidObject *track){
- //
- // Combination of TPC and TRD PID
- // Fills Histograms TPC Signal vs. TRD signal for different
- // momentum slices
- //
- if(track->fAnalysisType != AliHFEpidObject::kESDanalysis) return kFALSE; //AOD based detector PID combination not yet implemented
- AliDebug(1, "Analysis Type OK, do PID");
- AliESDtrack *esdTrack = dynamic_cast<AliESDtrack *>(track->fRecTrack);
- AliHFEpidTRD *trdPid = dynamic_cast<AliHFEpidTRD *>(fDetectorPID[kTRDpid]);
- Int_t pdg = TMath::Abs(fDetectorPID[kMCpid]->IsSelected(track));
- Int_t pid = -1;
- switch(pdg){
- case 11: pid = AliPID::kElectron; break;
- case 13: pid = AliPID::kMuon; break;
- case 211: pid = AliPID::kPion; break;
- case 321: pid = AliPID::kKaon; break;
- case 2212: pid = AliPID::kProton; break;
- default: pid = -1;
- };
- Double_t content[10];
- content[0] = pid;
- content[1] = esdTrack->P();
- content[2] = esdTrack->GetTPCsignal();
- content[3] = trdPid->GetTRDSignalV1(esdTrack, pid);
- if(IsQAOn() && fDebugLevel > 1){
- content[4] = trdPid->GetTRDSignalV2(esdTrack, pid);
- AliDebug(1, Form("Momentum: %f, TRD Signal: Method 1[%f], Method 2[%f]", content[1], content[3], content[4]));
- (dynamic_cast<THnSparseF *>(fQAlist->At(kTRDSignal)))->Fill(content);
- }
- if(content[1] > 2){ // perform combined
- AliDebug(1, "Momentum bigger 2 GeV/c, doing combined PID");
- if(content[2] > 65 && content[3] > 500) return kTRUE;
- else return kFALSE;
- }
- else {
- AliDebug(1, "Momentum smaller 2GeV/c, doing TPC alone PID");
- return fDetectorPID[kTPCpid]->IsSelected(track) == 11;
- }
-}
-
-//____________________________________________________________
-void AliHFEpid::MakePlotsItsTpc(AliHFEpidObject *track){
- //
- // Make a plot ITS signal - TPC signal for several momentum bins
- //
- if(track->fAnalysisType != AliHFEpidObject::kESDanalysis) return; //AOD based detector PID combination not yet implemented
- AliESDtrack * esdTrack = dynamic_cast<AliESDtrack *>(track->fRecTrack);
- // Fill My Histograms for MC PID
- Int_t pdg = TMath::Abs(fDetectorPID[kMCpid]->IsSelected(track));
- Int_t pid = -1;
- switch(pdg){
- case 11: pid = AliPID::kElectron; break;
- case 13: pid = AliPID::kMuon; break;
- case 211: pid = AliPID::kPion; break;
- case 321: pid = AliPID::kKaon; break;
- case 2212: pid = AliPID::kProton; break;
- default: pid = -1;
- };
- if(IsQAOn() && fDebugLevel > 0){
- Double_t content[10];
- content[0] = pid;
- content[1] = esdTrack->GetTPCInnerParam() ? esdTrack->GetTPCInnerParam()->P() : esdTrack->P();
- content[2] = (dynamic_cast<AliHFEpidITS *>(fDetectorPID[kITSpid]))->GetITSSignalV1(track->fRecTrack, pid);
- content[3] = esdTrack->GetTPCsignal();
- AliDebug(1, Form("Momentum %f, TPC Signal %f, ITS Signal %f", content[1], content[2], content[3]));
- (dynamic_cast<THnSparseF *>(fQAlist->At(kITSSignal)))->Fill(content);
}
+ return isSelected;
}
//____________________________________________________________
}
//____________________________________________________________
-void AliHFEpid::SetQAOn(){
- //
- // Switch on QA
- //
- SetBit(kIsQAOn, kTRUE);
- AliInfo("QA switched on");
- if(fQAlist) return;
- fQAlist = new TList;
- fQAlist->SetName("PIDqa");
- THnSparseF *histo = NULL;
-
- // Prepare axis for QA histograms
- const Int_t kMomentumBins = 41;
- const Double_t kPtMin = 0.1;
- const Double_t kPtMax = 10.;
- Double_t momentumBins[kMomentumBins];
- for(Int_t ibin = 0; ibin < kMomentumBins; ibin++)
- momentumBins[ibin] = static_cast<Double_t>(TMath::Power(10,TMath::Log10(kPtMin) + (TMath::Log10(kPtMax)-TMath::Log10(kPtMin))/(kMomentumBins-1)*static_cast<Double_t>(ibin)));
-
- // Add Histogram for combined TPC-TRD PID
- if(fDebugLevel > 1){
- AliDebug(1, "Adding histogram for ITS-TPC investigation");
- const Int_t kDimensionsTRDsig = 5;
- Int_t kNbinsTRDsig[kDimensionsTRDsig] = {AliPID::kSPECIES + 1, kMomentumBins - 1, 200, 3000, 3000};
- Double_t binMinTRDsig[kDimensionsTRDsig] = {-1., 0.1, 0, 0, 0};
- Double_t binMaxTRDsig[kDimensionsTRDsig] = {AliPID::kSPECIES, 10., 200., 3000., 3000.};
- fQAlist->AddAt((histo = new THnSparseF("fCombTPCTRDpid", "Combined TPC-TRD PID", kDimensionsTRDsig, kNbinsTRDsig, binMinTRDsig, binMaxTRDsig)), kTRDSignal);
- histo->GetAxis(1)->Set(kMomentumBins - 1, momentumBins);
- histo->GetAxis(0)->SetTitle("Particle Species");
- histo->GetAxis(1)->SetTitle("p / GeV/c");
- histo->GetAxis(2)->SetTitle("TPC Signal / a.u.");
- histo->GetAxis(3)->SetTitle("TRD Signal / a.u.");
- histo->GetAxis(4)->SetTitle("TRD Signal / a.u.");
- }
-
- // Add Histogram for combined TPC-ITS PID
- if(fDebugLevel > 0){
- AliDebug(1, "Adding histogram for TPC-TRD investigation");
- const Int_t kDimensionsITSsig = 4;
- Int_t kNbinsITSsig[kDimensionsITSsig] = {AliPID::kSPECIES + 1, kMomentumBins - 1, 300, 3000};
- Double_t binMinITSsig[kDimensionsITSsig] = {-1., 0.1, 0., 0.};
- Double_t binMaxITSsig[kDimensionsITSsig] = {AliPID::kSPECIES, 10., 300., 300.};
- fQAlist->AddAt((histo = new THnSparseF("fCombTPCITSpid", "Combined TPC-ITS PID", kDimensionsITSsig, kNbinsITSsig, binMinITSsig, binMaxITSsig)), kITSSignal);
- histo->GetAxis(1)->Set(kMomentumBins - 1, momentumBins);
- histo->GetAxis(0)->SetTitle("Particle Species");
- histo->GetAxis(1)->SetTitle("p / GeV/c");
- histo->GetAxis(2)->SetTitle("ITS Signal / a.u.");
- histo->GetAxis(3)->SetTitle("TPC Signal / a.u.");
- }
-}
-
-//____________________________________________________________
-void AliHFEpid::InitStrategy1(){
+void AliHFEpid::SetAODpid(AliAODpidUtil *pid){
//
- // TPC alone, 3-sigma cut
+ // Set ESD PID to the Detector PID objects
//
- AliHFEpidTPC *pid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
- pid->SetTPCnSigma(1);
- SwitchOnDetector(kTPCpid);
+ for(Int_t idet = 0; idet < kNdetectorPID; idet++){
+ if(fDetectorPID[idet]) fDetectorPID[idet]->SetAODpid(pid);
+ }
}
//____________________________________________________________
-void AliHFEpid::InitStrategy2(){
+void AliHFEpid::ConfigureTPCasymmetric(Double_t pmin, Double_t pmax, Double_t sigmamin, Double_t sigmamax){
//
// TPC alone, symmetric 3 sigma cut and asymmetric sigma cut in the momentum region between 2GeV/c and 10 GeV/c and sigma between -1 and 100
//
AliHFEpidTPC *pid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
pid->SetTPCnSigma(3);
- pid->SetAsymmetricTPCsigmaCut(2., 10., 0., 4.);
- SwitchOnDetector(kTPCpid);
+ pid->SetAsymmetricTPCsigmaCut(pmin, pmax, sigmamin, sigmamax);
}
//____________________________________________________________
-void AliHFEpid::InitStrategy3(){
+void AliHFEpid::ConfigureTPCrejectionSimple(){
//
// TPC alone, symmetric 3 sigma cut and 2 - -100 sigma pion rejection
//
AliHFEpidTPC *pid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
pid->SetTPCnSigma(3);
pid->SetRejectParticle(AliPID::kPion, 0., -100., 10., 1.);
- SwitchOnDetector(kTPCpid);
}
//____________________________________________________________
-void AliHFEpid::InitStrategy4(){
- //
- // TPC and TRD combined, TPC 3 sigma cut and TRD NN 90% el efficiency level above 2 GeV/c
- //
- InitStrategy1();
- AliHFEpidTRD *trdpid = dynamic_cast<AliHFEpidTRD *>(fDetectorPID[kTRDpid]);
- trdpid->SetPIDMethod(AliHFEpidTRD::kLQ);
- trdpid->SetElectronEfficiency(0.71);
- SwitchOnDetector(kTRDpid);
-}
-
-//____________________________________________________________
-void AliHFEpid::InitStrategy5(){
- //
- // TPC and TRD combined, TPC 3 sigma cut and TRD NN 90% el efficiency level above 2 GeV/c
- //
- InitStrategy1();
- SwitchOnDetector(kTRDpid);
-}
-
-//____________________________________________________________
-void AliHFEpid::InitStrategy6(){
+void AliHFEpid::ConfigureTPCrejection(){
//
// Combined TPC-TOF PID, combination is discribed in the funtion MakePidTpcTof
//
+ if(HasMCData()) printf("Configuring TPC for MC\n");
AliHFEpidTPC *tpcpid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
AliHFEpidTOF *tofpid = dynamic_cast<AliHFEpidTOF *>(fDetectorPID[kTOFpid]);
tpcpid->SetTPCnSigma(2);
tofpid->SetTOFnSigma(3);
+
//TF1 *upperCut = new TF1("upperCut", "[0] * TMath::Exp([1]*x)", 0, 20);
TF1 *upperCut = new TF1("upperCut", "[0]", 0, 20); // Use constant upper cut
TF1 *lowerCut = new TF1("lowerCut", "[0] * TMath::Exp([1]*x) + [2]", 0, 20);
- upperCut->SetParameter(0, 5.);
+ upperCut->SetParameter(0, 3.);
//upperCut->SetParameter(0, 2.7);
//upperCut->SetParameter(1, -0.4357);
- lowerCut->SetParameter(0, -2.65);
- lowerCut->SetParameter(1, -0.8757);
-// lowerCut->SetParameter(2, -1);
- if(HasMCData()) lowerCut->SetParameter(2, -0.997);
- else lowerCut->SetParameter(2, -0.9);
+
+ if(HasMCData()) lowerCut->SetParameter(0, -2.5);
+ else lowerCut->SetParameter(0, -3.7);
+
+ lowerCut->SetParameter(1, -0.8);
+
+ if(HasMCData()) lowerCut->SetParameter(2, -2.2);
+ else lowerCut->SetParameter(2, -0.35);
+
tpcpid->SetUpperSigmaCut(upperCut);
tpcpid->SetLowerSigmaCut(lowerCut);
AddCommonObject(upperCut);
AddCommonObject(lowerCut);
- SwitchOnDetector(kTPCpid);
- SwitchOnDetector(kTOFpid);
}
//____________________________________________________________
-void AliHFEpid::InitStrategy7(){
+void AliHFEpid::ConfigureTPCstrategyParis(){
//
// TPC alone, symmetric 3 sigma cut and 2 - -100 sigma pion rejection
//
pid->SetTPCnSigma(2);
pid->SetRejectParticle(AliPID::kProton, 0., -3., 10., 3.);
pid->SetRejectParticle(AliPID::kKaon, 0., -3., 10., 3.);
- SwitchOnDetector(kTPCpid);
-}
-
-//____________________________________________________________
-void AliHFEpid::InitStrategy8(){
- //
- // TOF, TRD and TPC together
- //
- AliHFEpidTPC *tpcpid = dynamic_cast<AliHFEpidTPC *>(fDetectorPID[kTPCpid]);
- AliHFEpidTOF *tofpid = dynamic_cast<AliHFEpidTOF *>(fDetectorPID[kTOFpid]);
- AliHFEpidTRD *trdpid = dynamic_cast<AliHFEpidTRD *>(fDetectorPID[kTRDpid]);
-
- tpcpid->SetTPCnSigma(3);
- tofpid->SetTOFnSigma(3);
- trdpid->SetPIDMethod(AliHFEpidTRD::kLQ);
- trdpid->SetElectronEfficiency(0.71);
- SwitchOnDetector(kTPCpid);
- SwitchOnDetector(kTOFpid);
- SwitchOnDetector(kTRDpid);
-}
-
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy0(AliHFEpidObject *track){
- return TMath::Abs(fDetectorPID[kMCpid]->IsSelected(track)) == 11;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy1(AliHFEpidObject *track){
- return TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy2(AliHFEpidObject *track){
- return TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy3(AliHFEpidObject *track){
- return TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy4(AliHFEpidObject *track){
- Int_t trdpid = TMath::Abs(fDetectorPID[kTRDpid]->IsSelected(track));
- return (trdpid == 0 || trdpid == 11) && (TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11);
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy5(AliHFEpidObject *track){
- return MakePidTpcTrd(track);
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy6(AliHFEpidObject *track){
- return MakePidTpcTof(track);
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy7(AliHFEpidObject *track){
- //
- // Do PID in strategy 7: Proton and Kaon rejection and
- // lower cut on TPC Signal
- //
- if(!(TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11))
- return kFALSE;
- return kTRUE;
-}
-
-//____________________________________________________________
-Bool_t AliHFEpid::IdentifyStrategy8(AliHFEpidObject *track){
- //
- // Identify TPC, TRD, TOF
- //
- if(TMath::Abs(fDetectorPID[kTOFpid]->IsSelected(track)) != 11) return kFALSE;
- Int_t trdpid = TMath::Abs(fDetectorPID[kTRDpid]->IsSelected(track));
- return (trdpid == 0 || trdpid == 11) && (TMath::Abs(fDetectorPID[kTPCpid]->IsSelected(track)) == 11);
}
//____________________________________________________________
//
printf("\n%s: Printing configuration\n", GetName());
printf("===============================================\n");
- printf("PID Strategy: %d\n", fPIDstrategy);
printf("PID Detectors: \n");
Int_t npid = 0;
TString detectors[kNdetectorPID] = {"MC", "ESD", "ITS", "TPC", "TRD", "TOF"};