5c7fb2dd59f6065ed05ecdb5c6abacc18e3800d7
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / AliRsnPair.h
1 //
2 // *** Class AliRsnPair ***
3 //
4 // TODO
5 //
6 // authors: A. Pulvirenti (email: alberto.pulvirenti@ct.infn.it)
7 //          M. Vala (email: martin.vala@cern.ch)
8 //
9
10 #ifndef ALIRSNPAIR_H
11 #define ALIRSNPAIR_H
12
13 #include "TH1.h"
14 #include "TH2.h"
15 #include "TList.h"
16 #include "TArrayI.h"
17 #include "TClonesArray.h"
18
19 #include "AliRsnDaughter.h"
20 #include "AliRsnPairDef.h"
21 #include "AliRsnPairParticle.h"
22 #include "AliRsnEvent.h"
23 #include "AliRsnCutMgr.h"
24 #include "AliRsnHistoDef.h"
25 #include "AliRsnPIDIndex.h"
26
27 class AliRsnFunction;
28
29 class AliRsnPair : public TObject
30 {
31   public:
32
33     enum EPairType
34     {
35       kNoPID = 0,    kNoPIDMix,
36       kRealisticPID, kRealisticPIDMix,
37       kPerfectPID,   kPerfectPIDMix,
38       kPairTypes
39     };
40
41     AliRsnPair(EPairType type = kRealisticPID, AliRsnPairDef *def = 0);
42     ~AliRsnPair();
43
44     void    Print(Option_t *option = "") const;
45     void    LoopPair(AliRsnPIDIndex *pidIndex1, AliRsnEvent *ev1, AliRsnPIDIndex *pidIndex2 = 0, AliRsnEvent *ev2 = 0);
46     void    LoopPair(TArrayI *a1, TArrayI *a2, AliRsnEvent *ev1, AliRsnEvent *ev2 = 0);
47     void    SetCutMgr(AliRsnCutMgr* theValue) { fCutMgr = theValue; }
48     void    AddFunction(AliRsnFunction *fcn);
49     //void    AddFunction(AliRsnFunctionDef *fcn);
50     TList*  GenerateHistograms(TString prefix = "");
51     void    GenerateHistograms(TString prefix, TList *tgt);
52
53     Bool_t  IsMixed() {return fIsMixed;}
54     Bool_t  IsPairEqual() {if (fPIDMethod == AliRsnDaughter::kNoPID) return (fPairDef->IsLikeSign());
55                            else return (fPairDef->IsLikeSign() && fPairDef->HasEqualTypes());}
56
57     TString GetPairTypeName(EPairType type) const;
58     TString GetPairName() const;
59     TString GetPairHistName(AliRsnFunction *fcn, TString text = "") const;
60     TString GetPairHistTitle(AliRsnFunction *fcn, TString text = "") const;
61     //TString GetPairHistName(AliRsnFunctionNew *fcn, TString text = "") const;
62     //TString GetPairHistTitle(AliRsnFunctionNew *fcn, TString text = "") const;
63
64   private:
65
66     AliRsnPair (const AliRsnPair &copy) : TObject(copy),
67       fIsMixed(kFALSE),fPairType(kPairTypes),fPIDMethod(AliRsnDaughter::kRealistic),
68       fPairDef(0x0),fCutMgr(0x0),fFunctions("AliRsnFunction",0),fTrack1(),fTrack2(),fPairParticle() {}
69     AliRsnPair& operator=(const AliRsnPair&) {return *this;}
70
71     void     SetUp(EPairType type);
72     void     SetAllFlags(AliRsnDaughter::EPIDMethod pid, Bool_t mix) {fPIDMethod = pid; fIsMixed = mix;}
73
74     Bool_t   CutPass(AliRsnDaughter *d);
75     Bool_t   CutPass(AliRsnPairParticle *p);
76     Bool_t   CutPass(AliRsnEvent *e);
77
78     Bool_t                      fIsMixed;        // doing event-mixing ?
79     EPairType                   fPairType;       // pair type (PID + mixing or not)
80     AliRsnDaughter::EPIDMethod  fPIDMethod;      // pid type variable for single track
81
82     AliRsnPairDef              *fPairDef;        // pair definition (particles, charges)
83     AliRsnCutMgr               *fCutMgr;         // cut manager
84     TClonesArray                fFunctions;      // functions
85     AliRsnDaughter              fTrack1;         // track #1 (external loop)
86     AliRsnDaughter              fTrack2;         // track #2 (internal loop)
87     AliRsnPairParticle          fPairParticle;   // track pair
88
89     ClassDef (AliRsnPair, 2)
90 };
91
92 #endif