fPIDNSigma(3.),\r
fMinAcceptedPIDProbability(0.8),\r
fElectronRejection(kFALSE),\r
+ fElectronOnlyRejection(kFALSE),\r
fElectronRejectionNSigma(-1.),\r
+ fElectronRejectionMinPt(0.),\r
+ fElectronRejectionMaxPt(1000.),\r
fESDtrackCuts(0),\r
fCentralityEstimator("V0M"),\r
fUseCentrality(kFALSE),\r
fDifferentialV2(0),\r
fUseFlowAfterBurner(kFALSE),\r
fExcludeResonancesInMC(kFALSE),\r
+ fExcludeElectronsInMC(kFALSE),\r
fUseMCPdgCode(kFALSE),\r
fPDGCodeToBeAnalyzed(-1),\r
fEventClass("EventPlane") \r
fHistTrackStats->Fill(iTrackBit,aodTrack->TestFilterBit(1<<iTrackBit));\r
}\r
if(!aodTrack->TestFilterBit(nAODtrackCutBit)) continue;\r
-\r
+ \r
+ vCharge = aodTrack->Charge();\r
+ vEta = aodTrack->Eta();\r
+ vY = aodTrack->Y();\r
+ vPhi = aodTrack->Phi();// * TMath::RadToDeg();\r
+ vPt = aodTrack->Pt();\r
+ \r
//===========================PID (so far only for electron rejection)===============================// \r
if(fElectronRejection) {\r
- \r
+\r
// get the electron nsigma\r
Double_t nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kElectron));\r
\r
fHistNSigmaTPCvsPtbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
//end of QA-before pid\r
\r
- //Make the decision based on the n-sigma\r
- if(nSigma < fElectronRejectionNSigma) continue;\r
- \r
+ // check only for given momentum range\r
+ if( vPt > fElectronRejectionMinPt && vPt < fElectronRejectionMaxPt ){\r
+ \r
+ //look only at electron nsigma\r
+ if(!fElectronOnlyRejection){\r
+ \r
+ //Make the decision based on the n-sigma of electrons\r
+ if(nSigma < fElectronRejectionNSigma) continue;\r
+ }\r
+ else{\r
+ \r
+ Double_t nSigmaPions = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kPion));\r
+ Double_t nSigmaKaons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kKaon));\r
+ Double_t nSigmaProtons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kProton));\r
+ \r
+ //Make the decision based on the n-sigma of electrons exclusively ( = track not in nsigma region for other species)\r
+ if(nSigma < fElectronRejectionNSigma\r
+ && nSigmaPions > fElectronRejectionNSigma\r
+ && nSigmaKaons > fElectronRejectionNSigma\r
+ && nSigmaProtons > fElectronRejectionNSigma ) continue;\r
+ }\r
+ }\r
+ \r
//Fill QA after the PID\r
fHistdEdxVsPTPCafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
fHistNSigmaTPCvsPtafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+ \r
}\r
//===========================end of PID (so far only for electron rejection)===============================//\r
- \r
- vCharge = aodTrack->Charge();\r
- vEta = aodTrack->Eta();\r
- vY = aodTrack->Y();\r
- vPhi = aodTrack->Phi();// * TMath::RadToDeg();\r
- vPt = aodTrack->Pt();\r
- \r
+\r
Float_t dcaXY = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on)\r
Float_t dcaZ = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on)\r
\r
//Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
if(kExcludeParticle) continue;\r
}\r
+\r
+ //Exclude electrons with PDG\r
+ if(fExcludeElectronsInMC) {\r
+ \r
+ if(TMath::Abs(aodTrack->GetPdgCode()) == 11) continue;\r
+ \r
+ }\r
\r
// fill QA histograms\r
fHistPt->Fill(vPt,gCentrality);\r
vY = aodTrack->Y();\r
vPhi = aodTrack->Phi();// * TMath::RadToDeg();\r
vPt = aodTrack->Pt();\r
+\r
+ //===========================PID (so far only for electron rejection)===============================// \r
+ if(fElectronRejection) {\r
+\r
+ // get the electron nsigma\r
+ Double_t nSigma = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kElectron));\r
+\r
+ //Fill QA before the PID\r
+ fHistdEdxVsPTPCbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+ fHistNSigmaTPCvsPtbeforePID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+ //end of QA-before pid\r
+ \r
+ // check only for given momentum range\r
+ if( vPt > fElectronRejectionMinPt && vPt < fElectronRejectionMaxPt ){\r
+ \r
+ //look only at electron nsigma\r
+ if(!fElectronOnlyRejection){\r
+ \r
+ //Make the decision based on the n-sigma of electrons\r
+ if(nSigma < fElectronRejectionNSigma) continue;\r
+ }\r
+ else{\r
+ \r
+ Double_t nSigmaPions = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kPion));\r
+ Double_t nSigmaKaons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kKaon));\r
+ Double_t nSigmaProtons = TMath::Abs(fPIDResponse->NumberOfSigmasTPC(aodTrack,(AliPID::EParticleType)AliPID::kProton));\r
+ \r
+ //Make the decision based on the n-sigma of electrons exclusively ( = track not in nsigma region for other species)\r
+ if(nSigma < fElectronRejectionNSigma\r
+ && nSigmaPions > fElectronRejectionNSigma\r
+ && nSigmaKaons > fElectronRejectionNSigma\r
+ && nSigmaProtons > fElectronRejectionNSigma ) continue;\r
+ }\r
+ }\r
+ \r
+ //Fill QA after the PID\r
+ fHistdEdxVsPTPCafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),aodTrack->GetTPCsignal());\r
+ fHistNSigmaTPCvsPtafterPID -> Fill(aodTrack->P()*aodTrack->Charge(),nSigma); \r
+ \r
+ }\r
+ //===========================end of PID (so far only for electron rejection)===============================//\r
\r
Float_t dcaXY = aodTrack->DCA(); // this is the DCA from global track (not exactly what is cut on)\r
Float_t dcaZ = aodTrack->ZAtDCA(); // this is the DCA from global track (not exactly what is cut on)\r
//Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
if(kExcludeParticle) continue;\r
}\r
+\r
+ //Exclude electrons with PDG\r
+ if(fExcludeElectronsInMC) {\r
+ \r
+ Int_t label = TMath::Abs(aodTrack->GetLabel());\r
+ AliAODMCParticle *AODmcTrack = (AliAODMCParticle*) fArrayMC->At(label);\r
+ \r
+ if (AODmcTrack){ \r
+ if(TMath::Abs(AODmcTrack->GetPdgCode()) == 11) continue;\r
+ }\r
+ }\r
\r
// fill QA histograms\r
fHistClus->Fill(aodTrack->GetITSNcls(),aodTrack->GetTPCNcls());\r
//Exclude from the analysis decay products of rho0, rho+, eta, eta' and phi\r
if(kExcludeParticle) continue;\r
}\r
- \r
+\r
+ //Exclude electrons with PDG\r
+ if(fExcludeElectronsInMC) {\r
+ \r
+ TParticle *particle = track->Particle();\r
+ \r
+ if (particle){ \r
+ if(TMath::Abs(particle->GetPdgCode()) == 11) continue;\r
+ }\r
+ }\r
+ \r
vPhi = track->Phi();\r
//Printf("phi (before): %lf",vPhi);\r
\r
fUseFlowAfterBurner = kTRUE;\r
}\r
void ExcludeResonancesInMC() {fExcludeResonancesInMC = kTRUE;}\r
+ void ExcludeElectronsInMC() {fExcludeElectronsInMC = kTRUE;}\r
\r
void SetPDGCode(Int_t gPdgCode) {\r
fUseMCPdgCode = kTRUE;\r
fElectronRejectionNSigma = gMaxNSigma;\r
}\r
\r
+ void SetElectronOnlyRejection(Double_t gMaxNSigma){\r
+ fElectronRejection = kTRUE;\r
+ fElectronOnlyRejection = kTRUE;\r
+ fElectronRejectionNSigma = gMaxNSigma;\r
+ }\r
+\r
+ void SetElectronRejectionPt(Double_t minPt,Double_t maxPt){\r
+ fElectronRejectionMinPt = minPt;\r
+ fElectronRejectionMaxPt = maxPt;\r
+ }\r
+\r
\r
private:\r
Double_t IsEventAccepted(AliVEvent* event);\r
Double_t fMinAcceptedPIDProbability;//probability cut for PID\r
\r
Bool_t fElectronRejection;//flag to use electron rejection\r
+ Bool_t fElectronOnlyRejection;//flag to use electron rejection with exclusive electron PID (no other particle in nsigma range)\r
Double_t fElectronRejectionNSigma;//nsigma cut for electron rejection\r
+ Double_t fElectronRejectionMinPt;//minimum pt for electron rejection (default = 0.)\r
+ Double_t fElectronRejectionMaxPt;//maximum pt for electron rejection (default = 1000.)\r
\r
//============PID============//\r
\r
TF1 *fDifferentialV2;//pt-differential v2 (from real data)\r
Bool_t fUseFlowAfterBurner;//Usage of a flow after burner\r
\r
- Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products from the MC analysis\r
+ Bool_t fExcludeResonancesInMC;//flag to exclude the resonances' decay products (and conversion) from the MC analysis\r
+ Bool_t fExcludeElectronsInMC;//flag to exclude the electrons from the MC analysis\r
Bool_t fUseMCPdgCode; //Boolean to analyze a set of particles in MC\r
Int_t fPDGCodeToBeAnalyzed; //Analyze a set of particles in MC\r
TString fEventClass; //Can be "EventPlane", "Centrality", "Multiplicity"\r
TString analysisTypeUser="AOD",\r
Bool_t bVertexBinning=kTRUE,\r
Double_t sigmaElectronRejection=3,\r
+ Bool_t electronExclusiveRejection=kFALSE,\r
TString correctionFileName = "",\r
Int_t nCentralityArrayBinsForCorrection,\r
Double_t *gCentralityArrayForCorrections) {\r
taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);\r
\r
// electron rejection (so far only for AOD), <0 --> no rejection\r
- if(sigmaElectronRejection > 0) taskBF->SetElectronRejection(sigmaElectronRejection);\r
- \r
+ if(sigmaElectronRejection > 0){\r
+ if(electronExclusiveRejection) taskBF->SetElectronOnlyRejection(sigmaElectronRejection); // no other particle in nsigma \r
+ else taskBF->SetElectronRejection(sigmaElectronRejection); // check only if electrons in nsigma\r
+ }\r
}\r
else if(analysisType == "MC") {\r
taskBF->SetKinematicsCutsAOD(ptMin,ptMax,etaMin,etaMax); \r
\r
// set extra TPC chi2 / nr of clusters cut\r
taskBF->SetExtraTPCCutsAOD(maxTPCchi2, minNClustersTPC);\r
+\r
+ // electron rejection (so far only for AOD), <0 --> no rejection\r
+ if(sigmaElectronRejection > 0){\r
+ if(electronExclusiveRejection) taskBF->SetElectronOnlyRejection(sigmaElectronRejection); // no other particle in nsigma \r
+ else taskBF->SetElectronRejection(sigmaElectronRejection); // check only if electrons in nsigma\r
+ }\r
}//++++++++++++++++\r
\r
// offline trigger selection (AliVEvent.h)\r