AliRsnReader:
[u/mrichter/AliRoot.git] / PWG2 / RESONANCES / macros / CreatePairsPhi.C
1 //
2 // Creates an AliRsnPairMgr containing all invmass spectra
3 // for the PHI --> K+ K- resonance:
4 //
5 // - signal
6 // - event mixing
7 // - like-sign
8 // - true pairs
9 //
10 // When required, PDG code of phi is 333
11 //
12 // In order to allow analysis customization, some user-defined parameters
13 // are listed at the beginning of this macro, to define some details like
14 // the number of event mixing to do, and what PID to be used.
15 // Since they are many, they are hard-coded in the macro and the user should
16 // take care of them when launching it for an analysis.
17 // Moreover, here some cuts are defined, which are very general: if a user
18 // wants to add more specific cuts, he should take a look to the "CUTS" section
19 // of this macro.
20 //
21 // The idea of this macro is to be loaded and launched from another
22 // upper-level macro which prepares the AnalysisTask object to run it,
23 // which is defined in "CreateAnalysisManager.C" macro in this directory
24 //
25
26 AliRsnPairMgr* CreatePairsPhi(const char *name = "PHI")
27 {
28   AliRsnPairMgr  *pairMgr  = new AliRsnPairMgr(name);
29
30   // ========== USER CUSTOMIZATION VARIABLES ==========
31
32   Int_t   iResPDG             = 333;
33   Int_t   nMixEvents          = 10;
34   Bool_t  boolUseNoPID        = kTRUE;
35   Bool_t  boolUseRealisticPID = kTRUE;
36   Bool_t  boolUsePerfectPID   = kTRUE;
37
38   // ======= END USER CUSTOMIZATION VARIABLES =========
39
40   // =========== DEFINE PAIRS ==============
41
42   // decay tree definitions
43   // for a PHI resonance (PDG = 333) decaying into K+ K-
44   // and for related like-sign pairs
45   AliRsnPairDef *defUnlike = new AliRsnPairDef(AliRsnPID::kKaon, '+', AliRsnPID::kKaon, '-', iResPDG);
46   AliRsnPairDef *defLikePP = new AliRsnPairDef(AliRsnPID::kKaon, '+', AliRsnPID::kKaon, '+', iResPDG);
47   AliRsnPairDef *defLikeMM = new AliRsnPairDef(AliRsnPID::kKaon, '-', AliRsnPID::kKaon, '-', iResPDG);
48
49   // No PID
50   AliRsnPair *pairUnlike_NoPID_Signal = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
51   AliRsnPair *pairUnlike_NoPID_True   = new AliRsnPair(AliRsnPair::kNoPID, defUnlike);
52   AliRsnPair *pairUnlike_NoPID_Mix    = new AliRsnPair(AliRsnPair::kNoPIDMix, defUnlike);
53   AliRsnPair *pairLikePP_NoPID        = new AliRsnPair(AliRsnPair::kNoPID, defLikePP);
54   AliRsnPair *pairLikeMM_NoPID        = new AliRsnPair(AliRsnPair::kNoPID, defLikeMM);
55   // end No PID
56
57   // Perfect PID
58   AliRsnPair *pairUnlike_PerfectPID_Signal = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
59   AliRsnPair *pairUnlike_PerfectPID_True   = new AliRsnPair(AliRsnPair::kPerfectPID, defUnlike);
60   AliRsnPair *pairUnlike_PerfectPID_Mix    = new AliRsnPair(AliRsnPair::kPerfectPIDMix, defUnlike);
61   AliRsnPair *pairLikePP_PerfectPID        = new AliRsnPair(AliRsnPair::kPerfectPID, defLikePP);
62   AliRsnPair *pairLikeMM_PerfectPID        = new AliRsnPair(AliRsnPair::kPerfectPID, defLikeMM);
63   // end Perfect PID
64
65   // Perfect PID
66   AliRsnPair *pairUnlike_RealisticPID_Signal = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
67   AliRsnPair *pairUnlike_RealisticPID_True   = new AliRsnPair(AliRsnPair::kRealisticPID, defUnlike);
68   AliRsnPair *pairUnlike_RealisticPID_Mix    = new AliRsnPair(AliRsnPair::kRealisticPIDMix, defUnlike);
69   AliRsnPair *pairLikePP_RealisticPID        = new AliRsnPair(AliRsnPair::kRealisticPID, defLikePP);
70   AliRsnPair *pairLikeMM_RealisticPID        = new AliRsnPair(AliRsnPair::kRealisticPID, defLikeMM);
71   // end Realistic PID
72
73   // =========== END DEFINE PAIRS ==============
74
75   // =========== CUTS ==============
76
77   // cuts on tracks:
78   // - defined in 'AddRsnAnalysisTask.C' for single-step analysis
79
80   // cuts on pairs:
81   // - true daughters of a phi resonance (only for true pairs histogram)
82   AliRsnCut *cutTruePair = new AliRsnCut("cutTrue", "cutTrue", AliRsnCut::kIsTruePair, iResPDG);
83
84   // cut set definition for true pairs
85   AliRsnCutSet *cutSetPairTrue = new AliRsnCutSet("truePairs");
86   cutSetPairTrue->AddCut(cutTruePair);
87   cutSetPairTrue->SetCutScheme("cutTrue");
88
89   // define cut manager for true pairs
90   AliRsnCutMgr *cutMgrTrue = new AliRsnCutMgr("true", "True pairs");
91   cutMgrTrue->SetCutSet(AliRsnCut::kPair, cutSetPairTrue);
92
93   // add cuts to pair analysis
94   pairUnlike_NoPID_True->SetCutMgr(cutMgrTrue);
95   pairUnlike_PerfectPID_True->SetCutMgr(cutMgrTrue);
96   pairUnlike_RealisticPID_True->SetCutMgr(cutMgrTrue);
97
98   // =========== END CUTS ==============
99
100   // =========== FUNCTIONS ==============
101
102   // define histogram templates
103   AliRsnHistoDef *hdIM  = new AliRsnHistoDef(800, 0.0, 2.0);     // invmass
104   AliRsnHistoDef *hdRES = new AliRsnHistoDef(200, -10.0, 10.0);  // resolution
105
106   // functions
107   AliRsnFunction *fcnIM  = new AliRsnFunction(AliRsnFunction::kInvMass, hdIM);      // invmass
108   AliRsnFunction *fcnRES = new AliRsnFunction(AliRsnFunction::kResolution, hdRES);    // IM resolution
109
110   // uncomment these lines when doing analysis in momentum bins
111   // in this case, take care of the dimension and values in the template array
112   Double_t mom[7] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0};
113   fcnIM->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
114   fcnRES->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
115
116   pairUnlike_NoPID_Signal->AddFunction(fcnIM);
117   pairUnlike_NoPID_True->AddFunction(fcnIM);
118   pairUnlike_NoPID_Mix->AddFunction(fcnIM);
119   pairLikePP_NoPID->AddFunction(fcnIM);
120   pairLikeMM_NoPID->AddFunction(fcnIM);
121
122   pairUnlike_PerfectPID_Signal->AddFunction(fcnIM);
123   pairUnlike_PerfectPID_True->AddFunction(fcnIM);
124   pairUnlike_PerfectPID_Mix->AddFunction(fcnIM);
125   pairLikePP_PerfectPID->AddFunction(fcnIM);
126   pairLikeMM_PerfectPID->AddFunction(fcnIM);
127
128   pairUnlike_RealisticPID_Signal->AddFunction(fcnIM);
129   pairUnlike_RealisticPID_True->AddFunction(fcnIM);
130   pairUnlike_RealisticPID_Mix->AddFunction(fcnIM);
131   pairLikePP_RealisticPID->AddFunction(fcnIM);
132   pairLikeMM_RealisticPID->AddFunction(fcnIM);
133
134   pairUnlike_NoPID_Signal->AddFunction(fcnRES);
135   pairUnlike_PerfectPID_Signal->AddFunction(fcnRES);
136   pairUnlike_RealisticPID_Signal->AddFunction(fcnRES);
137
138   // =========== END FUNCTIONS =============
139
140   if (boolUseNoPID) {
141     pairMgr->AddPair(pairUnlike_NoPID_Signal);
142     pairMgr->AddPair(pairUnlike_NoPID_True);
143     pairMgr->AddPair(pairUnlike_NoPID_Mix);
144     pairMgr->AddPair(pairLikePP_NoPID);
145     pairMgr->AddPair(pairLikeMM_NoPID);
146   }
147
148   if (boolUsePerfectPID) {
149     pairMgr->AddPair(pairUnlike_PerfectPID_Signal);
150     pairMgr->AddPair(pairUnlike_PerfectPID_True);
151     pairMgr->AddPair(pairUnlike_PerfectPID_Mix);
152     pairMgr->AddPair(pairLikePP_PerfectPID);
153     pairMgr->AddPair(pairLikeMM_PerfectPID);
154   }
155
156   if (boolUseRealisticPID) {
157     pairMgr->AddPair(pairUnlike_RealisticPID_Signal);
158     pairMgr->AddPair(pairUnlike_RealisticPID_True);
159     pairMgr->AddPair(pairUnlike_RealisticPID_Mix);
160     pairMgr->AddPair(pairLikePP_RealisticPID);
161     pairMgr->AddPair(pairLikeMM_RealisticPID);
162   }
163   return pairMgr;
164 }