// fill inclusive tracks XXX, they have the same track cuts!
AliAODTrack * inclusiveaod = dynamic_cast<AliAODTrack*>(fTracksRecCutsEfficiency->At(it));
if(inclusiveaod){
- Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod) :
- inclusiveaod->GetTPCsignal();
+ Double_t dEdxTPC = pidResponse->IsTunedOnData() ? pidResponse->GetTPCsignalTunedOnData(inclusiveaod)
+ : inclusiveaod->GetTPCsignal();
if (dEdxTPC <= 0)
continue;
+ Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
+
Int_t label = TMath::Abs(inclusiveaod->GetLabel());
// find MC track in our list, if available
Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, gentrack->Pt(), gentrack->Eta(), gentrack->Charge() / 3.,
centPercent,
-1, -1, -1 };// no jet pT etc since inclusive spectrum
- for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
- fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+ for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo())
+ fInclusivePIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+ }
Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(),
inclusiveaod->Charge(), centPercent,
-1, -1, -1 };// no jet pT etc since inclusive spectrum
- for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
- fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+ for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo())
+ fInclusivePIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+ }
}
}
}
if (dEdxTPC <= 0)
continue;
+ Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(inclusiveaod, InputEvent());
+
Int_t label = TMath::Abs(inclusiveaod->GetLabel());
// find MC track in our list, if available
if (gentrack)
pdg = gentrack->GetPdgCode();
- for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
- fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum
+ for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo())
+ fInclusivePIDtask[i]->ProcessTrack(inclusiveaod, pdg, centPercent, -1); // no jet pT since inclusive spectrum
+ }
if (gentrack) {
Int_t mcID = AliAnalysisTaskPID::PDGtoMCID(pdg);
Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, inclusiveaod->Pt(), inclusiveaod->Eta(),
inclusiveaod->Charge(), centPercent,
-1, -1, -1 };
- for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
- fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+ for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo())
+ fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+ }
Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
- for (Int_t i = 0; i < fNumInclusivePIDtasks; i++)
- fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
- weight);
+ for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo())
+ fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
+ weight);
+ }
if (gentrack->IsPhysicalPrimary()) {
// AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { -1, gentrack->Pt(), inclusiveaod->Pt() };
for (Int_t i = 0; i < fNumInclusivePIDtasks; i++) {
- fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
- fInclusivePIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
-
- fInclusivePIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+ if (survivedTPCCutMIGeo || !fInclusivePIDtask[i]->GetUseTPCCutMIGeo()) {
+ fInclusivePIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+ fInclusivePIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
+
+ fInclusivePIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+ }
}
}
}
if (dEdxTPC <= 0)
continue;
+ Bool_t survivedTPCCutMIGeo = AliAnalysisTaskPID::TPCCutMIGeo(aodtrack, InputEvent());
+
Int_t label = TMath::Abs(aodtrack->GetLabel());
// Find MC track in our list, if available
Double_t valueRecAllCuts[AliAnalysisTaskPID::kEffNumAxes] = { mcID, pT, aodtrack->Eta(), aodtrack->Charge(),
centPercent, jetPt, z, xi };
- for (Int_t i = 0; i < fNumJetPIDtasks; i++)
- fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+ for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo())
+ fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts, AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObs);
+ }
Double_t weight = IsSecondaryWithStrangeMotherMC(gentrack) ? GetMCStrangenessFactorCMS(gentrack) : 1.0;
- for (Int_t i = 0; i < fNumJetPIDtasks; i++)
- fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
- weight);
+ for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo())
+ fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsStrangenessScaled,
+ weight);
+ }
if (gentrack->IsPhysicalPrimary()) {
// AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
Double_t valuePtResolution[AliAnalysisTaskPID::kPtResNumAxes] = { jetPt, genPt, pT };
for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
- fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
- fJetPIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
- AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
-
- fJetPIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo()) {
+ fJetPIDtask[i]->FillEfficiencyContainer(valueRecAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsMeasuredObsPrimaries);
+ fJetPIDtask[i]->FillEfficiencyContainer(valueGenAllCuts,
+ AliAnalysisTaskPID::kStepRecWithRecCutsPrimaries);
+
+ fJetPIDtask[i]->FillPtResolution(mcID, valuePtResolution);
+ }
}
}
}
- for (Int_t i = 0; i < fNumJetPIDtasks; i++)
- fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
+ for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo())
+ fJetPIDtask[i]->ProcessTrack(aodtrack, pdg, centPercent, jetPt);
+ }
- if (fIDFFMode) {
+ if (fIDFFMode && (survivedTPCCutMIGeo || !fJetPIDtask[0]->GetUseTPCCutMIGeo())) {
// NOTE: Just take particle fraction from first task (should anyway be the same for all tasks)
Int_t pidWeightedSpecies = fJetPIDtask[0]->GetRandomParticleTypeAccordingToParticleFractions(pT, jetPt,
centPercent, kTRUE);
// AliAODMCParticle->Charge() calls TParticlePDG->Charge(), which returns the charge in units of e0 / 3
Double_t value[AliAnalysisTaskPID::kEffNumAxes] = { mcID, genPt, gentrack->Eta(), gentrack->Charge() / 3.,
centPercent, jetPt, genZ, genXi };
- for (Int_t i = 0; i < fNumJetPIDtasks; i++)
- fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+ for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo())
+ fJetPIDtask[i]->FillEfficiencyContainer(value, AliAnalysisTaskPID::kStepRecWithGenCuts);
+ }
Double_t valueMeas[AliAnalysisTaskPID::kEffNumAxes] = { mcID, measPt, aodtrack->Eta(), aodtrack->Charge(),
centPercent, jetPt, measZ, measXi };
- for (Int_t i = 0; i < fNumJetPIDtasks; i++)
- fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+ for (Int_t i = 0; i < fNumJetPIDtasks; i++) {
+ if (survivedTPCCutMIGeo || !fJetPIDtask[i]->GetUseTPCCutMIGeo())
+ fJetPIDtask[i]->FillEfficiencyContainer(valueMeas, AliAnalysisTaskPID::kStepRecWithGenCutsMeasuredObs);
+ }
}
}
}
#include "AliMCEvent.h"
#include "AliESDInputHandler.h"
#include "AliInputEventHandler.h"
-
+#include "AliVTrack.h"
+#include "AliExternalTrackParam.h"
#include "AliVVertex.h"
#include "AliAnalysisFilter.h"
#include "AliPID.h"
ClassImp(AliAnalysisTaskPIDV0base)
+Double_t AliAnalysisTaskPIDV0base::fgCutGeo = 1.;
+Double_t AliAnalysisTaskPIDV0base::fgCutNcr = 0.85;
+Double_t AliAnalysisTaskPIDV0base::fgCutNcl = 0.7;
+
//________________________________________________________________________
AliAnalysisTaskPIDV0base::AliAnalysisTaskPIDV0base()
: AliAnalysisTaskSE()
, fV0KineCuts(0x0)
, fIsPbpOrpPb(kFALSE)
, fUsePhiCut(kFALSE)
+ , fUseTPCCutMIGeo(kFALSE)
, fZvtxCutEvent(10.0)
, fEtaCut(0.9)
, fPhiCutLow(0x0)
, fV0KineCuts(0x0)
, fIsPbpOrpPb(kFALSE)
, fUsePhiCut(kFALSE)
+ , fUseTPCCutMIGeo(kFALSE)
, fZvtxCutEvent(10.0)
, fEtaCut(0.9)
, fPhiCutLow(0x0)
return fV0motherIndex[trackIndex];
}
+
+
+//________________________________________________________________________
+Bool_t AliAnalysisTaskPIDV0base::TPCCutMIGeo(const AliVTrack* track, const AliVEvent* evt, TTreeStream* streamer)
+{
+ //
+ // TPC Cut MIGeo
+ //
+
+ if (!track || !evt)
+ return kFALSE;
+
+ const Short_t sign = track->Charge();
+ Double_t xyz[50];
+ Double_t pxpypz[50];
+ Double_t cv[100];
+
+ track->GetXYZ(xyz);
+ track->GetPxPyPz(pxpypz);
+
+ AliExternalTrackParam* par = new AliExternalTrackParam(xyz, pxpypz, cv, sign);
+ const AliESDtrack dummy;
+
+ const Double_t magField = evt->GetMagneticField();
+ Double_t varGeom = dummy.GetLengthInActiveZone(par, 3, 236, magField, 0, 0);
+ Double_t varNcr = track->GetTPCClusterInfo(3, 1);
+ Double_t varNcls = track->GetTPCsignalN();
+
+ const Double_t varEval = 130. - 5. * TMath::Abs(1. / track->Pt());
+ Bool_t cutGeom = varGeom > fgCutGeo * varEval;
+ Bool_t cutNcr = varNcr > fgCutNcr * varEval;
+ Bool_t cutNcls = varNcls > fgCutNcl * varEval;
+
+ Bool_t kout = cutGeom && cutNcr && cutNcls;
+
+ if (streamer) {
+ Double_t dedx = track->GetTPCsignal();
+
+ (*streamer)<<"tree"<<
+ "param.="<< par<<
+ "varGeom="<<varGeom<<
+ "varNcr="<<varNcr<<
+ "varNcls="<<varNcls<<
+
+ "cutGeom="<<cutGeom<<
+ "cutNcr="<<cutNcr<<
+ "cutNcls="<<cutNcls<<
+
+ "kout="<<kout<<
+ "dedx="<<dedx<<
+
+ "\n";
+ }
+
+ delete par;
+
+ return kout;
+}
class AliAnalysisFilter;\r
class AliVTrack;\r
\r
+#include <TTreeStream.h>\r
+#include "AliInputEventHandler.h"\r
#include "AliTOFPIDResponse.h"\r
#include "AliAnalysisTaskSE.h"\r
\r
virtual Bool_t GetUsePhiCut() const { return fUsePhiCut; };\r
virtual void SetUsePhiCut(Bool_t newValue) { fUsePhiCut = newValue; };\r
\r
+ virtual Bool_t GetUseTPCCutMIGeo() const { return fUseTPCCutMIGeo; };\r
+ virtual void SetUseTPCCutMIGeo(Bool_t newValue) { fUseTPCCutMIGeo = newValue; };\r
+ \r
virtual Double_t GetEtaCut() const { return fEtaCut; }; \r
virtual void SetEtaCut(Double_t etaCut){ fEtaCut = etaCut; };\r
\r
virtual Float_t GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse, const Double_t* times, \r
AliPID::EParticleType type) const;\r
\r
+ static Double_t GetCutGeo() { return fgCutGeo; };\r
+ static Double_t GetCutNcr() { return fgCutNcr; };\r
+ static Double_t GetCutNcl() { return fgCutNcl; };\r
+ \r
+ static void SetCutGeo(Double_t value) { fgCutGeo = value; };\r
+ static void SetCutNcr(Double_t value) { fgCutNcr = value; };\r
+ static void SetCutNcl(Double_t value) { fgCutNcl = value; };\r
+ \r
+ static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliVEvent* evt, TTreeStream* streamer = 0x0);\r
+ static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliInputEventHandler* evtHandler, TTreeStream* streamer = 0x0)\r
+ { if (!evtHandler) return kFALSE; return TPCCutMIGeo(track, evtHandler->GetEvent(), streamer); };\r
+ \r
protected:\r
+ static Double_t fgCutGeo; // Cut variable for TPCCutMIGeo concerning geometry\r
+ static Double_t fgCutNcr; // Cut variable for TPCCutMIGeo concerning num crossed rows\r
+ static Double_t fgCutNcl; // Cut variable for TPCCutMIGeo concerning num clusters\r
\r
AliVEvent *fEvent; //! VEvent object\r
AliESDEvent *fESD; //! ESDEvent object, if ESD\r
\r
Bool_t fIsPbpOrpPb; // Pbp/pPb collision or something else?\r
Bool_t fUsePhiCut; // Use cut on phi (useful for TPC)\r
+ Bool_t fUseTPCCutMIGeo; // Use geometrical cut for TPC \r
Double_t fZvtxCutEvent; // Vertex z cut for the event (cm)\r
Double_t fEtaCut; // Eta cut\r
\r
AliAnalysisTaskPIDV0base(const AliAnalysisTaskPIDV0base&); // not implemented\r
AliAnalysisTaskPIDV0base& operator=(const AliAnalysisTaskPIDV0base&); // not implemented\r
\r
- ClassDef(AliAnalysisTaskPIDV0base, 1); // example of analysis\r
+ ClassDef(AliAnalysisTaskPIDV0base, 1);\r
};\r
\r
\r