enum genYieldAxes { kGenYieldMCID = 0, kGenYieldPt = 1, kGenYieldCentrality = 2, kGenYieldJetPt = 3, kGenYieldZ = 4, kGenYieldXi = 5,\r
kGenYieldCharge = 6, kGenYieldNumAxes = 7 };\r
\r
+ enum ptResolutionAxes { kPtResJetPt = 0, kPtResGenPt = 1, kPtResRecPt = 2, kPtResNumAxes = 3 };\r
+ \r
enum efficiencyAxes { kEffMCID = 0, kEffTrackPt = 1, kEffTrackEta = 2, kEffTrackCharge = 3, kEffCentrality = 4, kEffJetPt = 5,\r
kEffZ = 6, kEffXi = 7, kEffNumAxes = 8 };\r
\r
enum EffSteps { kStepGenWithGenCuts = 0, kStepRecWithGenCuts = 1, kStepRecWithGenCutsMeasuredObs = 2,\r
kStepRecWithRecCutsMeasuredObs = 3, kStepRecWithRecCutsMeasuredObsPrimaries = 4,\r
- kStepRecWithRecCutsMeasuredObsStrangenessScaled = 5, kNumSteps = 6};\r
+ kStepRecWithRecCutsMeasuredObsStrangenessScaled = 5, kStepRecWithRecCutsPrimaries = 6, kNumSteps = 7};\r
\r
static Int_t PDGtoMCID(Int_t pdg);\r
\r
Bool_t FillEfficiencyContainer(const Double_t* values, const EffSteps step, const Double_t weight = 1.0);\r
\r
Bool_t FillGeneratedYield(const Double_t* values, const Double_t weight = 1.0);\r
+ Bool_t FillPtResolution(const Int_t mcID, const Double_t* values);\r
Bool_t FillGenJets(const Double_t centralityPercentile, const Double_t jetPt, const Double_t norm = -1.);\r
Bool_t FillRecJets(const Double_t centralityPercentile, const Double_t jetPt, const Double_t norm = -1.);\r
\r
Bool_t IncrementEventsProcessed(const Double_t centralityPercentile);\r
\r
- void PostOutputData() { PostData(1, fOutputContainer); PostData(2, fContainerEff); };\r
+ void PostOutputData();\r
\r
void PrintSettings(Bool_t printSystematicsSettings = kFALSE) const;\r
\r
Bool_t GetInputFromOtherTask() const { return fInputFromOtherTask; };\r
void SetInputFromOtherTask(Bool_t flag) { fInputFromOtherTask = flag; };\r
\r
+ Bool_t GetDoPID() const { return fDoPID; };\r
+ void SetDoPID(Bool_t flag) { fDoPID = flag; };\r
+ \r
+ Bool_t GetDoEfficiency() const { return fDoEfficiency; };\r
+ void SetDoEfficiency(Bool_t flag) { fDoEfficiency = flag; };\r
+ \r
+ Bool_t GetDoPtResolution() const { return fDoPtResolution; };\r
+ void SetDoPtResolution(Bool_t flag) { fDoPtResolution = flag; };\r
+ \r
Bool_t GetStoreCentralityPercentile() const { return fStoreCentralityPercentile; };\r
void SetStoreCentralityPercentile(Bool_t flag) { fStoreCentralityPercentile = flag; };\r
\r
virtual void SetUpGenHist(THnSparse* hist, Double_t* binsPt, Double_t* binsDeltaPrime, Double_t* binsCent, Double_t* binsJetPt) const;\r
virtual void SetUpGenYieldHist(THnSparse* hist, Double_t* binsPt, Double_t* binsCent, Double_t* binsJetPt) const;\r
virtual void SetUpHist(THnSparse* hist, Double_t* binsPt, Double_t* binsDeltaPrime, Double_t* binsCent, Double_t* binsJetPt) const;\r
+ void SetUpPtResHist(THnSparse* hist, Double_t* binsPt, Double_t* binsJetPt) const;\r
virtual void SetUpPIDcombined();\r
\r
static const Int_t fgkNumJetAxes = 3; // Number of additional axes for jets\r
\r
Bool_t fInputFromOtherTask; // If set to kTRUE, no events are processed and the input must be fed in from another task. If set to kFALSE, normal event processing\r
\r
+ Bool_t fDoPID; // Only do PID processing (and post the output), if flag is set to kTRUE\r
+ Bool_t fDoEfficiency; // Only do efficiency processing (and post the output), if flag is set to kTRUE\r
+ Bool_t fDoPtResolution; // Only do pT resolution processing (and post the output), if flag is set to kTRUE\r
+ \r
Bool_t fStoreCentralityPercentile; // If set to kTRUE, store centrality percentile for each event. In case of kFALSE (appropriate for pp), centrality percentile will be set to -1 for every event\r
Bool_t fStoreAdditionalJetInformation; // If set to kTRUE, additional jet information like jetPt, z, xi will be stored in the THnSparses\r
\r
\r
AliCFContainer* fContainerEff; // Container for efficiency determination\r
\r
- TObjArray * fOutputContainer; // output data container\r
+ THnSparseD* fPtResolution[AliPID::kSPECIES]; // Pt Resolution for the individual species\r
+ \r
+ TObjArray* fOutputContainer; // output data container\r
+ \r
+ TObjArray* fPtResolutionContainer; // output data container for pt resolution\r
\r
AliAnalysisTaskPID(const AliAnalysisTaskPID&); // not implemented\r
AliAnalysisTaskPID& operator=(const AliAnalysisTaskPID&); // not implemented\r
\r
- ClassDef(AliAnalysisTaskPID, 12);\r
+ ClassDef(AliAnalysisTaskPID, 13);\r
};\r
\r
\r
{\r
// Fill efficiency container at step "step" with the values\r
\r
+ if (!fDoEfficiency)\r
+ return kFALSE;\r
+ \r
if (!fContainerEff) {\r
AliError("Efficiency container not initialised -> cannot be filled!");\r
return kFALSE;\r
{\r
// Fill histos with generated primary yields with provided values\r
\r
+ if (!fDoPID)\r
+ return kFALSE;\r
+ \r
if (!fhMCgeneratedYieldsPrimaries) {\r
AliError("Histo for generated primary yield not initialised -> cannot be filled!");\r
return kFALSE;\r
//_____________________________________________________________________________\r
inline Bool_t AliAnalysisTaskPID::FillGenJets(const Double_t centralityPercentile, const Double_t jetPt, const Double_t norm)\r
{\r
+ if (!fDoPID && !fDoEfficiency)\r
+ return kFALSE;\r
+ \r
if (!fh2FFJetPtGen)\r
return kFALSE;\r
\r
//_____________________________________________________________________________\r
inline Bool_t AliAnalysisTaskPID::FillRecJets(const Double_t centralityPercentile, const Double_t jetPt, const Double_t norm)\r
{\r
+ if (!fDoPID && !fDoEfficiency)\r
+ return kFALSE;\r
+ \r
if (!fh2FFJetPtRec)\r
return kFALSE;\r
\r
\r
return kTRUE;\r
}\r
+\r
+\r
+//_____________________________________________________________________________\r
+inline Bool_t AliAnalysisTaskPID::FillPtResolution(const Int_t mcID, const Double_t* values)\r
+{\r
+ // Fill histos with pT resolution with provided values\r
+ \r
+ if (!fDoPtResolution || mcID < 0 || mcID >= AliPID::kSPECIES)\r
+ return kFALSE;\r
+ \r
+ if (!fPtResolution[mcID]) {\r
+ AliError(Form("Histo for pT resolution (species: %s) not initialised -> cannot be filled!", AliPID::ParticleName(mcID)));\r
+ return kFALSE;\r
+ }\r
+ \r
+ fPtResolution[mcID]->Fill(values);\r
+ \r
+ return kTRUE;\r
+}\r
\r
\r
//_____________________________________________________________________________\r
{\r
// Increment the number of processed events for the given centrality percentile\r
\r
+ if (!fDoPID)\r
+ return kFALSE;\r
+ \r
if (!fhEventsProcessed) {\r
AliError("Histogram for number of events not initialised -> cannot be incremented!");\r
return kFALSE;\r
return centralityPercentile;\r
}\r
\r
+\r
+//_____________________________________________________________________________\r
+inline void AliAnalysisTaskPID::PostOutputData()\r
+{\r
+ PostData(1, fOutputContainer);\r
+ \r
+ if (fDoEfficiency)\r
+ PostData(2, fContainerEff);\r
+ \r
+ if (fDoPtResolution)\r
+ PostData(3, fPtResolutionContainer);\r
+}\r
+\r
#endif\r