a66a152a19cb4b38e377839394de9f422908c5d7
[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, nMixEvents);
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, nMixEvents);
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, nMixEvents);
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 single tracks:
78   // - pt between 0.2 and 10000.0 GeV/c
79   // - eta between -0.9 and 0.9 (ALICE acceptance)
80   // - impact parameter
81   AliRsnCut *cutDr = new AliRsnCut("cutDr", "", AliRsnCut::kRadialImpactParam, 0.0, 1.0);
82   AliRsnCut *cutPtMCPart = new AliRsnCut("cutPtMCPart", "cutPtMCPart", AliRsnCut::kTransMomentumMC, 0.2, 10000.0);
83   AliRsnCut *cutEtaMCPart = new AliRsnCut("cutMcEta", "cutMcEta", AliRsnCut::kEtaMC, -0.9, 0.9);
84   
85   // cuts on pairs:
86   // - true daughters of a phi resonance (only for true pairs histogram)
87   AliRsnCut *cutTruePair = new AliRsnCut("cutTrue", "cutTrue", AliRsnCut::kIsTruePair, iResPDG);
88   
89   // cut set definition for single particles
90   AliRsnCutSet *cutSetParticle = new AliRsnCutSet("partCut");
91   cutSetParticle->AddCut(cutPtMCPart);
92   cutSetParticle->AddCut(cutEtaMCPart);
93   cutSetParticle->AddCut(cutDr);
94   cutSetParticle->SetCutScheme("cutPtMCPart&cutMcEta&cutDr");
95   
96   // cut set definition for true pairs
97   AliRsnCutSet *cutSetPairTrue = new AliRsnCutSet("truePairs");
98   cutSetPairTrue->AddCut(cutTruePair);
99   cutSetPairTrue->SetCutScheme("cutTrue");
100   
101   // define cut manager for all histos but true pairs
102   AliRsnCutMgr *cutMgr = new AliRsnCutMgr("standard", "Standard cuts");
103   cutMgr->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
104   
105   // define cut manager for true pairs
106   AliRsnCutMgr *cutMgrTrue = new AliRsnCutMgr("true", "True pairs");
107   cutMgrTrue->SetCutSet(AliRsnCut::kParticle, cutSetParticle);
108   cutMgrTrue->SetCutSet(AliRsnCut::kPair, cutSetPairTrue);
109   
110   // define cut for mixing
111   AliRsnCut *cutMult = new AliRsnCut("cutM", "", AliRsnCut::kMultiplicityDifference, 0, 10);
112   AliRsnCut *cutVz = new AliRsnCut("cutV", "", AliRsnCut::kVzDifference, 0.0, 3.0);
113   AliRsnCutSet *cutMixing = new AliRsnCutSet("");
114   cutMixing->AddCut(cutMult);
115   cutMixing->AddCut(cutVz);
116   cutMixing->SetCutScheme("cutM&cutV");
117     
118   // add cuts to pair analysis
119   pairUnlike_NoPID_Signal->SetCutMgr(cutMgr);
120   pairUnlike_NoPID_True->SetCutMgr(cutMgrTrue);
121   pairUnlike_NoPID_Mix->SetCutMgr(cutMgr);
122   pairLikePP_NoPID->SetCutMgr(cutMgr);
123   pairLikeMM_NoPID->SetCutMgr(cutMgr);
124   
125   pairUnlike_PerfectPID_Signal->SetCutMgr(cutMgr);
126   pairUnlike_PerfectPID_True->SetCutMgr(cutMgrTrue);
127   pairUnlike_PerfectPID_Mix->SetCutMgr(cutMgr);
128   pairLikePP_PerfectPID->SetCutMgr(cutMgr);
129   pairLikeMM_PerfectPID->SetCutMgr(cutMgr);
130   
131   pairUnlike_RealisticPID_Signal->SetCutMgr(cutMgr);
132   pairUnlike_RealisticPID_True->SetCutMgr(cutMgrTrue);
133   pairUnlike_RealisticPID_Mix->SetCutMgr(cutMgr);
134   pairLikePP_RealisticPID->SetCutMgr(cutMgr);
135   pairLikeMM_RealisticPID->SetCutMgr(cutMgr);
136   
137   pairUnlike_NoPID_Mix->SetMixingCut(cutMixing);
138   pairUnlike_PerfectPID_Mix->SetMixingCut(cutMixing);
139   pairUnlike_RealisticPID_Mix->SetMixingCut(cutMixing);
140   
141   // =========== END CUTS ==============
142
143   // =========== FUNCTIONS ==============
144
145   // define histogram templates
146   AliRsnHistoDef *hdIM  = new AliRsnHistoDef(800, 0.0, 2.0);     // invmass
147   AliRsnHistoDef *hdRES = new AliRsnHistoDef(200, -10.0, 10.0);  // resolution
148   AliRsnHistoDef *hdPt  = new AliRsnHistoDef(10, 0.0, 10.0);     // pt distribution
149   
150   // functions
151   AliRsnFunction *fcnIM  = new AliRsnFunction(AliRsnFunction::kInvMass, hdIM);      // invmass
152   AliRsnFunction *fcnRES = new AliRsnFunction(AliRsnFunction::kResolution, hdRES);    // IM resolution
153   AliRsnFunction *fcnPt  = new AliRsnFunction(AliRsnFunction::kPtSpectrum, hdPt);     // pt spectrum
154   
155   // uncomment these lines when doing analysis in momentum bins
156   // in this case, take care of the dimension and values in the template array
157   Double_t mom[7] = {0.0, 1.0, 2.0, 3.0, 4.0, 5.0, 10.0};
158   fcnIM->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
159   fcnRES->SetBinningCut(AliRsnCut::kTransMomentum, 7, mom);
160   
161   pairUnlike_NoPID_Signal->AddFunction(fcnIM);
162   pairUnlike_NoPID_True->AddFunction(fcnIM);
163   pairUnlike_NoPID_Mix->AddFunction(fcnIM);
164   pairLikePP_NoPID->AddFunction(fcnIM);
165   pairLikeMM_NoPID->AddFunction(fcnIM);
166   
167   pairUnlike_PerfectPID_Signal->AddFunction(fcnIM);
168   pairUnlike_PerfectPID_True->AddFunction(fcnIM);
169   pairUnlike_PerfectPID_Mix->AddFunction(fcnIM);
170   pairLikePP_PerfectPID->AddFunction(fcnIM);
171   pairLikeMM_PerfectPID->AddFunction(fcnIM);
172   
173   pairUnlike_RealisticPID_Signal->AddFunction(fcnIM);
174   pairUnlike_RealisticPID_True->AddFunction(fcnIM);
175   pairUnlike_RealisticPID_Mix->AddFunction(fcnIM);
176   pairLikePP_RealisticPID->AddFunction(fcnIM);
177   pairLikeMM_RealisticPID->AddFunction(fcnIM);
178   
179   pairUnlike_NoPID_Signal->AddFunction(fcnRES);
180   pairUnlike_PerfectPID_Signal->AddFunction(fcnRES);
181   pairUnlike_RealisticPID_Signal->AddFunction(fcnRES);
182   
183   pairUnlike_NoPID_True->AddFunction(fcnPt);
184   pairUnlike_PerfectPID_True->AddFunction(fcnPt);
185   pairUnlike_RealisticPID_True->AddFunction(fcnPt);
186   
187   // =========== END FUNCTIONS =============
188
189   if (boolUseNoPID) {
190     pairMgr->AddPair(pairUnlike_NoPID_Signal);
191     pairMgr->AddPair(pairUnlike_NoPID_True);
192     pairMgr->AddPair(pairUnlike_NoPID_Mix);
193     pairMgr->AddPair(pairLikePP_NoPID);
194     pairMgr->AddPair(pairLikeMM_NoPID);
195   }
196   
197   if (boolUsePerfectPID) {
198     pairMgr->AddPair(pairUnlike_PerfectPID_Signal);
199     pairMgr->AddPair(pairUnlike_PerfectPID_True);
200     pairMgr->AddPair(pairUnlike_PerfectPID_Mix);
201     pairMgr->AddPair(pairLikePP_PerfectPID);
202     pairMgr->AddPair(pairLikeMM_PerfectPID);
203   }
204   
205   if (boolUseRealisticPID) {
206     pairMgr->AddPair(pairUnlike_RealisticPID_Signal);
207     pairMgr->AddPair(pairUnlike_RealisticPID_True);
208     pairMgr->AddPair(pairUnlike_RealisticPID_Mix);
209     pairMgr->AddPair(pairLikePP_RealisticPID);
210     pairMgr->AddPair(pairLikeMM_RealisticPID);
211   }
212   return pairMgr;
213 }