]> git.uio.no Git - u/mrichter/AliRoot.git/blobdiff - PWGJE/UserTasks/AliAnalysisTaskPIDV0base.h
Merge branch 'feature-movesplit'
[u/mrichter/AliRoot.git] / PWGJE / UserTasks / AliAnalysisTaskPIDV0base.h
index 019b79675b70be0bf0953446876e6d87cda401b2..b652d262e851dbaf16dee28d2b409abf39eca630 100644 (file)
-#ifndef ALIANALYSISTASKPIDV0BASE_H\r
-#define ALIANALYSISTASKPIDV0BASE_H\r
-\r
-/*\r
-This class is a base class for all other\r
-analysis tasks that use V0's.\r
-It provides basics for V0 identification.\r
-In addition, some further basic functions are provided.\r
-\r
-Class written by Benjamin Hess.\r
-Contact: bhess@cern.ch\r
-*/\r
-\r
-class TF1;\r
-class TRandom3;\r
-class TObjArray;\r
-class AliVEvent;\r
-class AliESDEvent;\r
-class AliMCEvent;\r
-class AliPIDResponse;\r
-class AliESDv0KineCuts;\r
-class AliPID;\r
-class AliAnalysisFilter;\r
-class AliVTrack;\r
-\r
-#include <TTreeStream.h>\r
-#include "AliInputEventHandler.h"\r
-#include "AliTOFPIDResponse.h"\r
-#include "AliAnalysisTaskSE.h"\r
-\r
-class AliAnalysisTaskPIDV0base : public AliAnalysisTaskSE {\r
- public:\r
-  AliAnalysisTaskPIDV0base();\r
-  AliAnalysisTaskPIDV0base(const char *name);\r
-  virtual ~AliAnalysisTaskPIDV0base();\r
-  \r
-  virtual void   UserCreateOutputObjects();\r
-  virtual void   UserExec(Option_t *option);\r
-  virtual void   Terminate(const Option_t*);\r
-  \r
-  virtual Bool_t GetVertexIsOk(AliVEvent* event) const;\r
-  \r
-  virtual Bool_t GetIsPbpOrpPb() const { return fIsPbpOrpPb; };\r
-  virtual void SetIsPbpOrpPb(Bool_t newValue) { fIsPbpOrpPb = newValue; };\r
-  \r
-  virtual Double_t GetZvtxCutEvent() const { return fZvtxCutEvent; };\r
-  virtual void SetZvtxCutEvent(Double_t newValue) { fZvtxCutEvent = newValue; };\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 const AliAnalysisFilter* GetTrackFilter() const { return fTrackFilter; };\r
-  virtual void  SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}\r
-  \r
-  virtual Char_t GetV0tag(Int_t trackIndex) const;\r
-  \r
-  virtual Bool_t GetStoreMotherIndex() const { return fStoreMotherIndex; };\r
-  virtual void SetStoreMotherIndex(Bool_t newValue) { fStoreMotherIndex = newValue; };\r
-  \r
-  virtual Int_t GetV0motherIndex(Int_t trackIndex) const;\r
-  \r
-  virtual Double_t GetPhiPrime(Double_t phi, Double_t magField, Int_t charge) const;\r
-  virtual Bool_t PhiPrimeCut(const AliVTrack* track, Double_t magField) const;\r
-  virtual Bool_t PhiPrimeCut(Double_t trackPt, Double_t trackPhi, Short_t trackCharge, Double_t magField) const;\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
-  AliMCEvent  *fMC;       //! MC object\r
-\r
-  AliPIDResponse *fPIDResponse;    //! PID response Handler\r
-  AliESDv0KineCuts *fV0KineCuts;       //! ESD V0 kine cuts\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
-  TF1* fPhiCutLow;          // phi prime cut, low\r
-  TF1* fPhiCutHigh;         // phi prime cut, high\r
-  \r
-  TRandom3* fRandom;        //! Can be used to statistically determine the shape in the pt bins e.g.\r
-  \r
-  AliAnalysisFilter* fTrackFilter; // Track Filter\r
-  \r
-\r
-  Int_t fNumTagsStored;     // Number of entries of fV0tags\r
-  Char_t* fV0tags;         //! Pointer to array with tags for identified particles from V0 decays\r
-  \r
-  Bool_t fStoreMotherIndex; // Switch on/off storing the mother indices of V0 daughters\r
-  Int_t* fV0motherIndex; //! Pointer to array with index of the mother V0\r
-  \r
- private:\r
-  void FillV0PIDlist(AliESDEvent* esdEvent = 0x0);\r
-  void ClearV0PIDlist();\r
-  \r
-  AliAnalysisTaskPIDV0base(const AliAnalysisTaskPIDV0base&); // not implemented\r
-  AliAnalysisTaskPIDV0base& operator=(const AliAnalysisTaskPIDV0base&); // not implemented\r
-  \r
-  ClassDef(AliAnalysisTaskPIDV0base, 1);\r
-};\r
-\r
-\r
-\r
-inline Float_t AliAnalysisTaskPIDV0base::GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse,\r
-                                                     const Double_t* times, AliPID::EParticleType type) const\r
-{\r
-  return (track->GetTOFsignal() - tofPIDresponse->GetStartTime(track->P()) - times[type]);\r
-}\r
-\r
-#endif\r
+#ifndef ALIANALYSISTASKPIDV0BASE_H
+#define ALIANALYSISTASKPIDV0BASE_H
+
+/*
+This class is a base class for all other
+analysis tasks that use V0's.
+It provides basics for V0 identification.
+In addition, some further basic functions are provided.
+
+Class written by Benjamin Hess.
+Contact: bhess@cern.ch
+*/
+
+class TF1;
+class TRandom3;
+class TObjArray;
+class AliVEvent;
+class AliESDEvent;
+class AliMCEvent;
+class AliPIDResponse;
+class AliESDv0KineCuts;
+class AliPID;
+class AliAnalysisFilter;
+class AliVTrack;
+
+#include <TTreeStream.h>
+#include "AliInputEventHandler.h"
+#include "AliTOFPIDResponse.h"
+#include "AliAnalysisTaskSE.h"
+#include "AliAnalysisUtils.h"
+
+class AliAnalysisTaskPIDV0base : public AliAnalysisTaskSE {
+ public:
+  enum PileUpRejectionType { kPileUpRejectionOff = 0, kPileUpRejectionSPD = 1, kPileUpRejectionMV = 2 };
+  enum TPCcutType { kNoCut = 0, kTPCCutMIGeo = 1, kTPCnclCut = 2 };
+  AliAnalysisTaskPIDV0base();
+  AliAnalysisTaskPIDV0base(const char *name);
+  virtual ~AliAnalysisTaskPIDV0base();
+  
+  virtual void   UserCreateOutputObjects();
+  virtual void   UserExec(Option_t *option);
+  virtual void   Terminate(const Option_t*);
+  
+  virtual Bool_t GetVertexIsOk(AliVEvent* event, Bool_t doVtxZcut = kTRUE) const;
+  virtual Bool_t GetIsPileUp(AliVEvent* event, PileUpRejectionType pileUpRejectionType) const;
+  
+  virtual Bool_t GetIsPbpOrpPb() const { return fIsPbpOrpPb; };
+  virtual void SetIsPbpOrpPb(Bool_t newValue) { fIsPbpOrpPb = newValue; };
+  
+  virtual Double_t GetZvtxCutEvent() const { return fZvtxCutEvent; };
+  virtual void SetZvtxCutEvent(Double_t newValue) { fZvtxCutEvent = newValue; if (fAnaUtils) fAnaUtils->SetMaxVtxZ(fZvtxCutEvent);};
+  
+  virtual Bool_t GetUsePhiCut() const { return fUsePhiCut; };
+  virtual void SetUsePhiCut(Bool_t newValue) { fUsePhiCut = newValue; };
+  
+  virtual TPCcutType GetTPCcutType() const { return fTPCcutType; };
+  virtual Bool_t GetUseTPCCutMIGeo() const { return (fTPCcutType == kTPCCutMIGeo); };
+  virtual Bool_t GetUseTPCnclCut() const { return (fTPCcutType == kTPCnclCut); };
+  
+  virtual void SetTPCcutType(TPCcutType newType) { fTPCcutType = newType; };
+  
+  virtual Double_t GetEtaCut() const { return fEtaCut; };     
+  virtual void  SetEtaCut(Double_t etaCut){ fEtaCut = etaCut; };
+  
+  virtual const AliAnalysisFilter* GetTrackFilter() const { return fTrackFilter; };
+  virtual void  SetTrackFilter(AliAnalysisFilter* trackF) {fTrackFilter = trackF;}
+  
+  virtual Char_t GetV0tag(Int_t trackIndex) const;
+  
+  virtual Bool_t GetStoreMotherIndex() const { return fStoreMotherIndex; };
+  virtual void SetStoreMotherIndex(Bool_t newValue) { fStoreMotherIndex = newValue; };
+  
+  virtual Int_t GetV0motherIndex(Int_t trackIndex) const;
+  
+  virtual Double_t GetPhiPrime(Double_t phi, Double_t magField, Int_t charge) const;
+  virtual Bool_t PhiPrimeCut(const AliVTrack* track, Double_t magField) const;
+  virtual Bool_t PhiPrimeCut(Double_t trackPt, Double_t trackPhi, Short_t trackCharge, Double_t magField) const;
+  virtual Float_t GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse, const Double_t* times, 
+                              AliPID::EParticleType type) const;
+  
+  static Double_t GetCutGeo() { return fgCutGeo; };
+  static Double_t GetCutNcr() { return fgCutNcr; };
+  static Double_t GetCutNcl() { return fgCutNcl; };
+  
+  static void SetCutGeo(Double_t value) { fgCutGeo = value; };
+  static void SetCutNcr(Double_t value) { fgCutNcr = value; };
+  static void SetCutNcl(Double_t value) { fgCutNcl = value; };
+  
+  static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliVEvent* evt, TTreeStream* streamer = 0x0);
+  static Bool_t TPCCutMIGeo(const AliVTrack* track, const AliInputEventHandler* evtHandler, TTreeStream* streamer = 0x0)
+    { if (!evtHandler) return kFALSE; return TPCCutMIGeo(track, evtHandler->GetEvent(), streamer); };
+  
+  static UShort_t GetCutPureNcl() { return fgCutPureNcl; };
+  static void SetCutPureNcl(UShort_t value) { fgCutPureNcl = value; };
+  
+  static Bool_t TPCnclCut(const AliVTrack* track);
+  
+ protected:
+  void FillV0PIDlist(AliESDEvent* esdEvent = 0x0);
+  void ClearV0PIDlist();
+  
+  static Double_t fgCutGeo;   // Cut variable for TPCCutMIGeo concerning geometry
+  static Double_t fgCutNcr; // Cut variable for TPCCutMIGeo concerning num crossed rows
+  static Double_t fgCutNcl;  // Cut variable for TPCCutMIGeo concerning num clusters
+  
+  static UShort_t fgCutPureNcl; // Cut variable for TPCnclCut
+  
+  AliVEvent   *fEvent;    //! VEvent object
+  AliESDEvent *fESD;      //! ESDEvent object, if ESD
+  AliMCEvent  *fMC;       //! MC object
+
+  AliPIDResponse *fPIDResponse;    //! PID response Handler
+  AliESDv0KineCuts *fV0KineCuts;       //! ESD V0 kine cuts
+  
+  AliAnalysisUtils *fAnaUtils; //! Object to use analysis utils like pile-up rejection
+  
+  Bool_t fIsPbpOrpPb;       // Pbp/pPb collision or something else?
+  Bool_t fUsePhiCut;        // Use cut on phi (useful for TPC)
+  TPCcutType fTPCcutType;   // Type of TPC cut to be used
+  Double_t fZvtxCutEvent;   // Vertex z cut for the event (cm)
+  Double_t fEtaCut;         // Eta cut
+  
+  TF1* fPhiCutLow;          // phi prime cut, low
+  TF1* fPhiCutHigh;         // phi prime cut, high
+  
+  TRandom3* fRandom;        //! Can be used to statistically determine the shape in the pt bins e.g.
+  
+  AliAnalysisFilter* fTrackFilter; // Track Filter
+  
+
+  Int_t fNumTagsStored;     // Number of entries of fV0tags
+  Char_t* fV0tags;         //! Pointer to array with tags for identified particles from V0 decays
+  
+  Bool_t fStoreMotherIndex; // Switch on/off storing the mother indices of V0 daughters
+  Int_t* fV0motherIndex; //! Pointer to array with index of the mother V0
+  
+ private:
+  AliAnalysisTaskPIDV0base(const AliAnalysisTaskPIDV0base&); // not implemented
+  AliAnalysisTaskPIDV0base& operator=(const AliAnalysisTaskPIDV0base&); // not implemented
+  
+  ClassDef(AliAnalysisTaskPIDV0base, 3);
+};
+
+
+
+inline Float_t AliAnalysisTaskPIDV0base::GetDeltaTOF(const AliVTrack *track, const AliTOFPIDResponse* tofPIDresponse,
+                                                     const Double_t* times, AliPID::EParticleType type) const
+{
+  return (track->GetTOFsignal() - tofPIDresponse->GetStartTime(track->P()) - times[type]);
+}
+
+#endif