]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGPP/AliFilteredTreeEventCuts.h
automatically write MC info into the trees when MC available
[u/mrichter/AliRoot.git] / PWGPP / AliFilteredTreeEventCuts.h
1 #ifndef ALIFILTEREDTREEEVENTCUTS_H\r
2 #define ALIFILTEREDTREEEVENTCUTS_H\r
3 \r
4 //------------------------------------------------------------------------------\r
5 // Class to keep event selection cuts for dNdPt analysis. \r
6 // \r
7 // Author: J.Otwinowski 01/11/2008 \r
8 //------------------------------------------------------------------------------\r
9 \r
10 #include "AliAnalysisCuts.h"\r
11 \r
12 class AliESDEvent;\r
13 class AliESDVertex;\r
14 class AliMCEvent;\r
15 class AliHeader;\r
16 class AliGenEventHeader;\r
17 class AliStack;\r
18 \r
19 class AliFilteredTreeEventCuts : public AliAnalysisCuts\r
20 {\r
21 public:\r
22   AliFilteredTreeEventCuts(const Char_t* name ="AliFilteredTreeEventCuts", const Char_t *title ="");\r
23   virtual ~AliFilteredTreeEventCuts(); \r
24 \r
25   //TODO: copied from AliPWG0Helper, find a more central place for these\r
26   enum AnalysisMode { kInvalid = -1, kSPD = 0x1, kTPC = 0x2, kTPCITS = 0x4, kFieldOn = 0x8, kSPDOnlyL0 = 0x10, kTPCSPD = 0x20};\r
27   enum MCProcessType { kInvalidProcess = -1, kND = 0x1, kDD = 0x2, kSD = 0x4, kOnePart = 0x8 };\r
28   enum DiffTreatment { kMCFlags = 0, kUA5Cuts = 1, kE710Cuts, kALICEHadronLevel };\r
29   \r
30   // setters \r
31   void SetTriggerRequired(Bool_t bFlag=kTRUE)  {fTriggerRequired=bFlag;}\r
32   void SetRecVertexRequired(Bool_t bFlag=kTRUE)  {fRecVertexRequired=bFlag;}\r
33   void SetEventProcessType(MCProcessType type=kInvalidProcess)  {fEventProcessType=type;}\r
34   void SetNContributorsRange(Float_t min=0.,Float_t max=1e99) {fMinNContributors=min; fMaxNContributors=max;}\r
35   void SetMaxR(Float_t max=1e99) {fMaxR=max;}\r
36   void SetZvRange(Float_t min=-1e99, Float_t max=1e99) {fMinZv=min; fMaxZv=max;}\r
37 \r
38   void SetMeanXYZv(Float_t xv=0.0, Float_t yv=0.0, Float_t zv=0.0) {\r
39     fMeanXv = xv; fMeanYv = yv; fMeanZv = zv;\r
40   }\r
41 \r
42   void SetSigmaMeanXYZv(Float_t sxv=1.0, Float_t syv=1.0, Float_t szv=10.0) {\r
43     fSigmaMeanXv = sxv; fSigmaMeanYv = syv; fSigmaMeanZv = szv;\r
44   }\r
45 \r
46 \r
47   void SetRedoTPCVertex(Bool_t redo = kTRUE) {fRedoTPCVertex = redo;}\r
48   void SetUseBeamSpotConstraint(Bool_t useConstr = kTRUE) {fUseBeamSpotConstraint = useConstr;}\r
49   void SetEventSelectedRequired(Bool_t evtSel = kTRUE) {fEventSelectedRequired = evtSel;} \r
50 \r
51 \r
52   // getters \r
53   Bool_t  IsEventSelectedRequired() const {return fEventSelectedRequired;}\r
54   Bool_t  IsTriggerRequired() const {return fTriggerRequired;}\r
55   Bool_t  IsRecVertexRequired() const {return fRecVertexRequired;}\r
56   Int_t   GetEventProcessType() const {return fEventProcessType;}  \r
57   Float_t GetMinNContributors() const {return fMinNContributors;}\r
58   Float_t GetMaxNContributors() const {return fMaxNContributors;}\r
59   Float_t GetMaxR() const {return fMaxR;}\r
60   Float_t GetMinZv() const {return fMinZv;}\r
61   Float_t GetMaxZv() const {return fMaxZv;}\r
62 \r
63   Float_t GetMeanXv() const {return fMeanXv;}\r
64   Float_t GetMeanYv() const {return fMeanYv;}\r
65   Float_t GetMeanZv() const {return fMeanZv;}\r
66 \r
67   Float_t GetSigmaMeanXv() const {return fSigmaMeanXv;}\r
68   Float_t GetSigmaMeanYv() const {return fSigmaMeanYv;}\r
69   Float_t GetSigmaMeanZv() const {return fSigmaMeanZv;}\r
70  \r
71   Bool_t IsRedoTPCVertex() const {return fRedoTPCVertex;}\r
72   Bool_t IsUseBeamSpotConstraint() const {return fUseBeamSpotConstraint;}\r
73 \r
74 \r
75   // cuts init function\r
76   void Init();\r
77 \r
78   // check MC tracks\r
79   Bool_t IsSelected(TObject *) {return kTRUE;}\r
80   Bool_t IsSelected(TList *) {return kTRUE;}\r
81 \r
82   // accept event\r
83   Bool_t AcceptEvent(AliESDEvent *event=0, AliMCEvent *mcEvent=0, const AliESDVertex *vtx=0);\r
84   Bool_t AcceptMCEvent(AliMCEvent *mcEvent=0);\r
85 \r
86   // Merge output objects (needed by PROOF) \r
87   virtual Long64_t Merge(TCollection* list);\r
88 \r
89   //statics copied from AliPWG0Helper\r
90   static MCProcessType GetEventProcessType(AliESDEvent* esd, AliHeader* header, AliStack* stack, DiffTreatment diffTreatment);\r
91   static MCProcessType GetEventProcessType(AliHeader* aHeader, Bool_t adebug = kFALSE);\r
92   static MCProcessType GetPythiaEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);\r
93   static MCProcessType GetDPMjetEventProcessType(AliGenEventHeader* aHeader, Bool_t adebug = kFALSE);\r
94   static Bool_t IsHadronLevelSingleDiffractive(AliStack* stack, Float_t cms, Float_t xiMin, Float_t xiMax);\r
95   static Double_t Rapidity(Double_t pt, Double_t pz, Double_t m);\r
96 protected:\r
97   static Int_t fgLastProcessType;    // stores the raw value of the last process type extracted\r
98   //\r
99  \r
100 private:\r
101   Bool_t fTriggerRequired; // trigger required  \r
102   Bool_t fRecVertexRequired; // reconstructed event vertex required  \r
103   Int_t fEventProcessType;   // select MC event process type (ND, SD, DD)\r
104   Float_t fMinNContributors; // min. number of contributing vertex tracks\r
105   Float_t fMaxNContributors; // max. number of contributing vertex tracks\r
106   Float_t fMaxR;             // max. vertex radii (R = sqrt(Xv^2+Yv^2) \r
107   Float_t fMinZv;            // min. Zv vertex\r
108   Float_t fMaxZv;            // max. Zv vertex\r
109 \r
110   // interaction spot constraint\r
111   Float_t fMeanXv; // mean Xv position\r
112   Float_t fMeanYv; // mean Yv position\r
113   Float_t fMeanZv; // mean Zv position\r
114 \r
115   Float_t fSigmaMeanXv; // sigma mean Xv position \r
116   Float_t fSigmaMeanYv; // sigma mean Yv position\r
117   Float_t fSigmaMeanZv; // sigma mean Zv position\r
118  \r
119   Bool_t fRedoTPCVertex;         // redo vertex\r
120   Bool_t fUseBeamSpotConstraint; // use beam spot contraints  \r
121 \r
122   Bool_t fEventSelectedRequired; // event with at least one track (pT>0.5 GeV, |eta|<0.8) required\r
123 \r
124   AliFilteredTreeEventCuts(const AliFilteredTreeEventCuts&); // not implemented\r
125   AliFilteredTreeEventCuts& operator=(const AliFilteredTreeEventCuts&); // not implemented\r
126 \r
127   ClassDef(AliFilteredTreeEventCuts, 1)\r
128 };\r
129 \r
130 #endif // ALIFILTEREDTREEEVENTCUTS_H\r