]> git.uio.no Git - u/mrichter/AliRoot.git/blob - PWGCF/FEMTOSCOPY/macros/Train/DataTrain1/ConfigFemtoAnalysis.C
Migration of PWG2/FEMTOSCOPY to PWGCF/FEMTOSCOPY
[u/mrichter/AliRoot.git] / PWGCF / FEMTOSCOPY / macros / Train / DataTrain1 / ConfigFemtoAnalysis.C
1 /*********************************************************************
2  *                                                                   *
3  * ConfigFemtoAnalysis.C - configuration macro for the femtoscopic   *
4  * analysis, to be run in the analysis train.                        *
5  * Assumed input data: large (>10M) sample of MC pp events           *
6  * Inluded analysis:                                                 *
7  *    - positive pion HBT, 3 kt bins, 1D+3D functions                *
8  *    - negative pion HBT, 3 kt bins, 1D+3D functions                *
9  *    - positive kaon HBT, 1 kt bin,  1D+3D functions                *
10  *                                                                   *
11  * Author: Adam Kisiel (Adam.Kisiel@cern.ch)                         *
12  *                                                                   *
13  *********************************************************************/
14
15 #if !defined(__CINT__) || defined(__MAKECINT_)
16 #include "AliFemtoManager.h"
17 #include "AliFemtoEventReaderESDChain.h"
18 #include "AliFemtoEventReaderESDChainKine.h"
19 #include "AliFemtoSimpleAnalysis.h"
20 #include "AliFemtoBasicEventCut.h"
21 #include "AliFemtoESDTrackCut.h"
22 #include "AliFemtoCorrFctn.h"
23 #include "AliFemtoCutMonitorParticleYPt.h"
24 #include "AliFemtoCutMonitorParticleVertPos.h"
25 #include "AliFemtoCutMonitorParticleMomRes.h"
26 #include "AliFemtoCutMonitorEventMult.h"
27 #include "AliFemtoCutMonitorEventVertex.h"
28 #include "AliFemtoShareQualityTPCEntranceSepPairCut.h"
29 #include "AliFemtoQinvCorrFctn.h"
30 #include "AliFemtoShareQualityCorrFctn.h"
31 #include "AliFemtoTPCInnerCorrFctn.h"
32 #include "AliFemtoVertexMultAnalysis.h"
33 #include "AliFemtoCorrFctn3DSpherical.h"
34 #include "AliFemtoChi2CorrFctn.h"
35 #include "AliFemtoCorrFctnTPCNcls.h"
36 #include "AliFemtoModelBPLCMSCorrFctn.h"
37 #include "AliFemtoModelCorrFctn3DSpherical.h"
38 #include "AliFemtoModelGausLCMSFreezeOutGenerator.h"
39 #include "AliFemtoModelGausRinvFreezeOutGenerator.h"
40 #include "AliFemtoModelManager.h"
41 #include "AliFemtoModelWeightGeneratorBasic.h"
42 #include "AliFemtoModelWeightGeneratorLednicky.h"
43 #include "AliFemtoCorrFctnDirectYlm.h"
44 #include "AliFemtoModelCorrFctnDirectYlm.h"
45 #include "AliFemtoModelCorrFctnSource.h"
46 #include "AliFemtoCutMonitorParticlePtPDG.h"
47 #include "AliFemtoKTPairCut.h"
48 #endif
49
50 //________________________________________________________________________
51 AliFemtoManager* ConfigFemtoAnalysis() {
52
53   double PionMass = 0.13956995;
54   double KaonMass = 0.493677;
55   
56   AliFemtoEventReaderESDChain* Reader=new AliFemtoEventReaderESDChain();
57   Reader->SetConstrained(true);
58   Reader->SetUseTPCOnly(false);
59
60   AliFemtoManager* Manager=new AliFemtoManager();
61   Manager->SetEventReader(Reader);
62
63   int runPositivePions = 1;
64   int runNegativePions = 1;
65   int runPositiveKaons = 1;
66   int runNegativeKaons = 1;
67   int runPositiveNegativeKaons = 1;
68
69   // Z vertex mixing settings
70   int nZVertexBins = 4;
71   Double_t minZVertex = -10.0;
72   Double_t maxZVertex = 10.0;
73
74   if (runPositivePions) {
75     // *** Begin pion-pion (positive) analysis ***
76     AliFemtoVertexMultAnalysis *anpip = new AliFemtoVertexMultAnalysis(nZVertexBins, minZVertex, maxZVertex, 1, 2, 200000);
77     anpip->SetNumEventsToMix(10);
78     anpip->SetMinSizePartCollection(2);
79
80     AliFemtoBasicEventCut* mecpip = new AliFemtoBasicEventCut();
81     mecpip->SetEventMult(2,100000);
82     mecpip->SetVertZPos(-1000,1000);
83         
84     AliFemtoESDTrackCut* dtcpip = new AliFemtoESDTrackCut();
85     dtcpip->SetPidProbPion(0.2,1.001);
86     dtcpip->SetPidProbMuon(0.0,1.0);
87     dtcpip->SetPidProbKaon(0.0,1.0);
88     dtcpip->SetPidProbProton(0.0,1.0);
89     dtcpip->SetCharge(1.0);
90     dtcpip->SetPt(0.05,1.0);
91     dtcpip->SetRapidity(-0.9,0.9);
92     dtcpip->SetMass(PionMass);
93     // Track quality cuts
94     dtcpip->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
95     //  dtcpip->SetStatus(AliESDtrack::kTPCrefit);
96     dtcpip->SetminTPCncls(50);
97     dtcpip->SetRemoveKinks(kTRUE);
98     dtcpip->SetLabel(kFALSE);
99     dtcpip->SetMaxITSChiNdof(2.5);
100     dtcpip->SetMaxTPCChiNdof(3.0);
101     dtcpip->SetMaxImpactXY(3.0);
102     dtcpip->SetMaxImpactZ(3.0);
103
104     // Track monitors
105     AliFemtoCutMonitorParticleYPt *cutPassYPtpip = new AliFemtoCutMonitorParticleYPt("cutPasspip", 0.13957);
106     AliFemtoCutMonitorParticleYPt *cutFailYPtpip = new AliFemtoCutMonitorParticleYPt("cutFailpip", 0.13957);
107     dtcpip->AddCutMonitor(cutPassYPtpip, cutFailYPtpip);
108
109     AliFemtoCutMonitorEventMult *cutPassEvMpip = new AliFemtoCutMonitorEventMult("cutPasspip");
110     AliFemtoCutMonitorEventMult *cutFailEvMpip = new AliFemtoCutMonitorEventMult("cutFailpip");
111     mecpip->AddCutMonitor(cutPassEvMpip, cutFailEvMpip);
112
113     AliFemtoCutMonitorEventVertex *cutPassEvVpip = new AliFemtoCutMonitorEventVertex("cutPasspip");
114     AliFemtoCutMonitorEventVertex *cutFailEvVpip = new AliFemtoCutMonitorEventVertex("cutFailpip");
115     mecpip->AddCutMonitor(cutPassEvVpip, cutFailEvVpip);
116
117     // Pair cut
118     AliFemtoShareQualityTPCEntranceSepPairCut *sqpcpip = new AliFemtoShareQualityTPCEntranceSepPairCut();
119     sqpcpip->SetShareQualityMax(0.0);
120     sqpcpip->SetShareFractionMax(0.02);
121     sqpcpip->SetRemoveSameLabel(kFALSE);
122     sqpcpip->SetTPCEntranceSepMinimum(2.0);
123
124     anpip->SetEventCut(mecpip);
125     anpip->SetFirstParticleCut(dtcpip);
126     anpip->SetSecondParticleCut(dtcpip);
127     anpip->SetPairCut(sqpcpip);
128
129     // Two-track quality monitoring
130     AliFemtoShareQualityCorrFctn *csqqinvpip= new AliFemtoShareQualityCorrFctn("sqqinvcfpip",40,0.0,0.4);
131     AliFemtoChi2CorrFctn *cchiqinvpip= new AliFemtoChi2CorrFctn("chicfpip",40,0.0,0.4);
132     AliFemtoCorrFctnTPCNcls *cqtpcnclspip = new AliFemtoCorrFctnTPCNcls("cqtpcnclspip",40,0.0,0.4);
133
134     // Intrdouce kT binning
135     AliFemtoKTPairCut *ktpairkT1pip = new AliFemtoKTPairCut(0.05,0.27);
136     AliFemtoKTPairCut *ktpairkT2pip = new AliFemtoKTPairCut(0.27,0.37);
137     AliFemtoKTPairCut *ktpairkT3pip = new AliFemtoKTPairCut(0.37,1.0);
138
139     // Purely experimental correlation function
140     AliFemtoCorrFctnDirectYlm *cylmkT1pip = new AliFemtoCorrFctnDirectYlm("cylmkT1pip",3,80,0.0,0.8,1);
141     cylmkT1pip->SetPairSelectionCut(ktpairkT1pip);
142     anpip->AddCorrFctn(cylmkT1pip);
143     
144     AliFemtoCorrFctnDirectYlm *cylmkT2pip = new AliFemtoCorrFctnDirectYlm("cylmkT2pip",3,80,0.0,0.8,1);
145     cylmkT2pip->SetPairSelectionCut(ktpairkT2pip);
146     anpip->AddCorrFctn(cylmkT2pip);
147     
148     AliFemtoCorrFctnDirectYlm *cylmkT3pip = new AliFemtoCorrFctnDirectYlm("cylmkT3pip",3,80,0.0,0.8,1);
149     cylmkT3pip->SetPairSelectionCut(ktpairkT3pip);
150     anpip->AddCorrFctn(cylmkT3pip);
151
152     AliFemtoQinvCorrFctn *cqinvkt1pip = new AliFemtoQinvCorrFctn("qinvcfkt1pip", 100,0.0,1.0);
153     cqinvkt1pip->SetPairSelectionCut(ktpairkT1pip);
154     anpip->AddCorrFctn(cqinvkt1pip);
155
156     AliFemtoQinvCorrFctn *cqinvkt2pip = new AliFemtoQinvCorrFctn("qinvcfkt2pip", 100,0.0,1.0);
157     cqinvkt2pip->SetPairSelectionCut(ktpairkT2pip);
158     anpip->AddCorrFctn(cqinvkt2pip);
159
160     AliFemtoQinvCorrFctn *cqinvkt3pip = new AliFemtoQinvCorrFctn("qinvcfkt3pip", 100,0.0,1.0);
161     cqinvkt3pip->SetPairSelectionCut(ktpairkT3pip);
162     anpip->AddCorrFctn(cqinvkt3pip);
163
164     // Add correlation functions to the analysis 
165     anpip->AddCorrFctn(csqqinvpip);
166     anpip->AddCorrFctn(cchiqinvpip);
167     anpip->AddCorrFctn(cqtpcnclspip);
168
169     Manager->AddAnalysis(anpip);        
170
171     // *** End pion-pion (positive) analysis
172   }
173
174   if (runNegativePions) {
175     // *** Begin pion-pion (negative) analysis ***
176     AliFemtoVertexMultAnalysis *anpim = new AliFemtoVertexMultAnalysis(nZVertexBins, minZVertex, maxZVertex, 1, 2, 200000);
177     anpim->SetNumEventsToMix(10);
178     anpim->SetMinSizePartCollection(2);
179
180     AliFemtoBasicEventCut* mecpim = new AliFemtoBasicEventCut();
181     mecpim->SetEventMult(2,100000);
182     mecpim->SetVertZPos(-1000,1000);
183         
184     AliFemtoESDTrackCut* dtcpim = new AliFemtoESDTrackCut();
185     dtcpim->SetPidProbPion(0.2,1.001);
186     dtcpim->SetPidProbMuon(0.0,1.0);
187     dtcpim->SetPidProbKaon(0.0,1.0);
188     dtcpim->SetPidProbProton(0.0,1.0);
189     dtcpim->SetCharge(1.0);
190     dtcpim->SetPt(0.05,1.0);
191     dtcpim->SetRapidity(-0.9,0.9);
192     dtcpim->SetMass(PionMass);
193     // Track quality cuts
194     dtcpim->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
195     //  dtcpim->SetStatus(AliESDtrack::kTPCrefit);
196     dtcpim->SetminTPCncls(50);
197     dtcpim->SetRemoveKinks(kTRUE);
198     dtcpim->SetLabel(kFALSE);
199     dtcpim->SetMaxITSChiNdof(2.5);
200     dtcpim->SetMaxTPCChiNdof(3.0);
201     dtcpim->SetMaxImpactXY(3.0);
202     dtcpim->SetMaxImpactZ(3.0);
203
204     // Track monitors
205     AliFemtoCutMonitorParticleYPt *cutPassYPtpim = new AliFemtoCutMonitorParticleYPt("cutPasspim", 0.13957);
206     AliFemtoCutMonitorParticleYPt *cutFailYPtpim = new AliFemtoCutMonitorParticleYPt("cutFailpim", 0.13957);
207     dtcpim->AddCutMonitor(cutPassYPtpim, cutFailYPtpim);
208
209     AliFemtoCutMonitorEventMult *cutPassEvMpim = new AliFemtoCutMonitorEventMult("cutPasspim");
210     AliFemtoCutMonitorEventMult *cutFailEvMpim = new AliFemtoCutMonitorEventMult("cutFailpim");
211     mecpim->AddCutMonitor(cutPassEvMpim, cutFailEvMpim);
212
213     AliFemtoCutMonitorEventVertex *cutPassEvVpim = new AliFemtoCutMonitorEventVertex("cutPasspim");
214     AliFemtoCutMonitorEventVertex *cutFailEvVpim = new AliFemtoCutMonitorEventVertex("cutFailpim");
215     mecpim->AddCutMonitor(cutPassEvVpim, cutFailEvVpim);
216
217     // Pair cut
218     AliFemtoShareQualityTPCEntranceSepPairCut *sqpcpim = new AliFemtoShareQualityTPCEntranceSepPairCut();
219     sqpcpim->SetShareQualityMax(0.0);
220     sqpcpim->SetShareFractionMax(0.02);
221     sqpcpim->SetRemoveSameLabel(kFALSE);
222     sqpcpim->SetTPCEntranceSepMinimum(2.0);
223
224     anpim->SetEventCut(mecpim);
225     anpim->SetFirstParticleCut(dtcpim);
226     anpim->SetSecondParticleCut(dtcpim);
227     anpim->SetPairCut(sqpcpim);
228
229     // Two-track quality monitoring
230     AliFemtoShareQualityCorrFctn *csqqinvpim= new AliFemtoShareQualityCorrFctn("sqqinvcfpim",40,0.0,0.4);
231     AliFemtoChi2CorrFctn *cchiqinvpim= new AliFemtoChi2CorrFctn("chicfpim",40,0.0,0.4);
232     AliFemtoCorrFctnTPCNcls *cqtpcnclspim = new AliFemtoCorrFctnTPCNcls("cqtpcnclspim",40,0.0,0.4);
233
234     // Intrdouce kT binning
235     AliFemtoKTPairCut *ktpairkT1pim = new AliFemtoKTPairCut(0.05,0.27);
236     AliFemtoKTPairCut *ktpairkT2pim = new AliFemtoKTPairCut(0.27,0.37);
237     AliFemtoKTPairCut *ktpairkT3pim = new AliFemtoKTPairCut(0.37,1.0);
238
239     // Purely experimental correlation function
240     AliFemtoCorrFctnDirectYlm *cylmkT1pim = new AliFemtoCorrFctnDirectYlm("cylmkT1pim",3,80,0.0,0.8,1);
241     cylmkT1pim->SetPairSelectionCut(ktpairkT1pim);
242     anpim->AddCorrFctn(cylmkT1pim);
243     
244     AliFemtoCorrFctnDirectYlm *cylmkT2pim = new AliFemtoCorrFctnDirectYlm("cylmkT2pim",3,80,0.0,0.8,1);
245     cylmkT2pim->SetPairSelectionCut(ktpairkT2pim);
246     anpim->AddCorrFctn(cylmkT2pim);
247     
248     AliFemtoCorrFctnDirectYlm *cylmkT3pim = new AliFemtoCorrFctnDirectYlm("cylmkT3pim",3,80,0.0,0.8,1);
249     cylmkT3pim->SetPairSelectionCut(ktpairkT3pim);
250     anpim->AddCorrFctn(cylmkT3pim);
251
252     AliFemtoQinvCorrFctn *cqinvkt1pim = new AliFemtoQinvCorrFctn("qinvcfkt1pim", 100,0.0,1.0);
253     cqinvkt1pim->SetPairSelectionCut(ktpairkT1pim);
254     anpim->AddCorrFctn(cqinvkt1pim);
255
256     AliFemtoQinvCorrFctn *cqinvkt2pim = new AliFemtoQinvCorrFctn("qinvcfkt2pim", 100,0.0,1.0);
257     cqinvkt2pim->SetPairSelectionCut(ktpairkT2pim);
258     anpim->AddCorrFctn(cqinvkt2pim);
259
260     AliFemtoQinvCorrFctn *cqinvkt3pim = new AliFemtoQinvCorrFctn("qinvcfkt3pim", 100,0.0,1.0);
261     cqinvkt3pim->SetPairSelectionCut(ktpairkT3pim);
262     anpim->AddCorrFctn(cqinvkt3pim);
263
264     // Add correlation functions to the analysis 
265     anpim->AddCorrFctn(csqqinvpim);
266     anpim->AddCorrFctn(cchiqinvpim);
267     anpim->AddCorrFctn(cqtpcnclspim);
268
269     Manager->AddAnalysis(anpim);        
270
271     // *** End pion-pion (negative) analysis
272   }
273
274   if (runPositiveKaons) {
275     // *** Begin Kaon-Kaon (positive) analysis
276     AliFemtoVertexMultAnalysis *ankp = new AliFemtoVertexMultAnalysis(nZVertexBins, minZVertex, maxZVertex, 1, 2, 20000);
277     ankp->SetNumEventsToMix(5);
278     ankp->SetMinSizePartCollection(2);
279
280     AliFemtoBasicEventCut* meckp = new AliFemtoBasicEventCut();
281     meckp->SetEventMult(1,100000);
282     meckp->SetVertZPos(-1000,1000);
283         
284     AliFemtoESDTrackCut* dtckp = new AliFemtoESDTrackCut();
285     dtckp->SetPidProbKaon(0.7,1.001);
286     dtckp->SetPidProbMuon(0.0,0.5);
287     dtckp->SetPidProbPion(0.0,0.5);
288     dtckp->SetPidProbProton(0.0,0.5);
289     dtckp->SetCharge(1.0);
290     dtckp->SetMostProbableKaon();
291     dtckp->SetMomRangeTOFpidIs(0.6,10000.);
292     dtckp->SetPt(0.15,2.0);
293     dtckp->SetMass(KaonMass);
294     // Track quality cuts
295     dtckp->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
296     dtckp->SetminTPCncls(50);
297     dtckp->SetRemoveKinks(kTRUE);
298     dtckp->SetLabel(kFALSE);
299     dtckp->SetMaxITSChiNdof(2.5);
300     dtckp->SetMaxTPCChiNdof(3.0);
301     dtckp->SetMaxImpactXY(3.0);
302     dtckp->SetMaxImpactZ(3.0);
303
304     AliFemtoCutMonitorParticleYPt *cutPassYPtkp = new AliFemtoCutMonitorParticleYPt("cutPasskp", 0.493677);
305     AliFemtoCutMonitorParticleYPt *cutFailYPtkp = new AliFemtoCutMonitorParticleYPt("cutFailkp", 0.493677);
306     dtckp->AddCutMonitor(cutPassYPtkp, cutFailYPtkp);
307
308     AliFemtoCutMonitorParticlePtPDG *cutPassPidkp = new AliFemtoCutMonitorParticlePtPDG("cutPasskp", 0.493677);
309     AliFemtoCutMonitorParticlePtPDG *cutFailPidkp = new AliFemtoCutMonitorParticlePtPDG("cutFailkp", 0.493677);
310     dtckp->AddCutMonitor(cutPassPidkp, cutFailPidkp);
311
312     AliFemtoCutMonitorParticleMomRes *cutPassMRkp = new AliFemtoCutMonitorParticleMomRes("cutPasskp");
313     AliFemtoCutMonitorParticleMomRes *cutFailMRkp = new AliFemtoCutMonitorParticleMomRes("cutFailkp");
314     dtckp->AddCutMonitor(cutPassMRkp, cutFailMRkp);
315
316     AliFemtoCutMonitorParticleVertPos *cutPassVPkp = new AliFemtoCutMonitorParticleVertPos("cutPasskp");
317     AliFemtoCutMonitorParticleVertPos *cutFailVPkp = new AliFemtoCutMonitorParticleVertPos("cutFailkp");
318     dtckp->AddCutMonitor(cutPassVPkp, cutFailVPkp);
319
320     AliFemtoCutMonitorEventMult *cutPassEvMkp = new AliFemtoCutMonitorEventMult("cutPasskp");
321     AliFemtoCutMonitorEventMult *cutFailEvMkp = new AliFemtoCutMonitorEventMult("cutFailkp");
322     meckp->AddCutMonitor(cutPassEvMkp, cutFailEvMkp);
323
324     AliFemtoCutMonitorEventVertex *cutPassEvVkp = new AliFemtoCutMonitorEventVertex("cutPasskp");
325     AliFemtoCutMonitorEventVertex *cutFailEvVkp = new AliFemtoCutMonitorEventVertex("cutFailkp");
326     meckp->AddCutMonitor(cutPassEvVkp, cutFailEvVkp);
327
328     AliFemtoShareQualityTPCEntranceSepPairCut *sqpckp = new AliFemtoShareQualityTPCEntranceSepPairCut();
329     sqpckp->SetShareQualityMax(0.0);
330     sqpckp->SetShareFractionMax(0.02);
331     sqpckp->SetRemoveSameLabel(kFALSE);
332     sqpckp->SetTPCEntranceSepMinimum(3.0);
333
334     ankp->SetEventCut(meckp);
335     ankp->SetFirstParticleCut(dtckp);
336     ankp->SetSecondParticleCut(dtckp);
337     ankp->SetPairCut(sqpckp);
338
339     AliFemtoQinvCorrFctn *cqinvkp= new AliFemtoQinvCorrFctn("qinvcf",100,0.0,1.0);
340
341     //###
342     ankp->AddCorrFctn(cqinvkp);
343
344     Manager->AddAnalysis(ankp);   
345
346     // *** End Kaon-Kaon (positive) analysis
347   }
348
349   if (runNegativeKaons) {
350     // *** Begin Kaon-Kaon (negative) analysis
351     AliFemtoVertexMultAnalysis *ankm = new AliFemtoVertexMultAnalysis(nZVertexBins, minZVertex, maxZVertex, 1, 2, 20000);
352     ankm->SetNumEventsToMix(5);
353     ankm->SetMinSizePartCollection(2);
354
355     AliFemtoBasicEventCut* meckm = new AliFemtoBasicEventCut();
356     meckm->SetEventMult(1,100000);
357     meckm->SetVertZPos(-1000,1000);
358         
359     AliFemtoESDTrackCut* dtckm = new AliFemtoESDTrackCut();
360     dtckm->SetPidProbKaon(0.7,1.001);
361     dtckm->SetPidProbMuon(0.0,0.5);
362     dtckm->SetPidProbPion(0.0,0.5);
363     dtckm->SetPidProbProton(0.0,0.5);
364     dtckp->SetMomRangeTOFpidIs(0.6,10000.);
365     dtckm->SetCharge(-1.0);
366     dtckm->SetMostProbableKaon();
367     dtckm->SetPt(0.15,2.0);
368     dtckm->SetMass(KaonMass);
369     // Track quality cuts
370     dtckm->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
371     dtckm->SetminTPCncls(50);
372     dtckm->SetRemoveKinks(kTRUE);
373     dtckm->SetLabel(kFALSE);
374     dtckm->SetMaxITSChiNdof(2.5);
375     dtckm->SetMaxTPCChiNdof(3.0);
376     dtckm->SetMaxImpactXY(3.0);
377     dtckm->SetMaxImpactZ(3.0);
378
379     AliFemtoCutMonitorParticleYPt *cutPassYPtkm = new AliFemtoCutMonitorParticleYPt("cutPasskm", 0.493677);
380     AliFemtoCutMonitorParticleYPt *cutFailYPtkm = new AliFemtoCutMonitorParticleYPt("cutFailkm", 0.493677);
381     dtckm->AddCutMonitor(cutPassYPtkm, cutFailYPtkm);
382
383     AliFemtoCutMonitorParticlePtPDG *cutPassPidkm = new AliFemtoCutMonitorParticlePtPDG("cutPasskm", 0.493677);
384     AliFemtoCutMonitorParticlePtPDG *cutFailPidkm = new AliFemtoCutMonitorParticlePtPDG("cutFailkm", 0.493677);
385     dtckm->AddCutMonitor(cutPassPidkm, cutFailPidkm);
386
387     AliFemtoCutMonitorParticleMomRes *cutPassMRkm = new AliFemtoCutMonitorParticleMomRes("cutPasskm");
388     AliFemtoCutMonitorParticleMomRes *cutFailMRkm = new AliFemtoCutMonitorParticleMomRes("cutFailkm");
389     dtckm->AddCutMonitor(cutPassMRkm, cutFailMRkm);
390
391     AliFemtoCutMonitorParticleVertPos *cutPassVPkm = new AliFemtoCutMonitorParticleVertPos("cutPasskm");
392     AliFemtoCutMonitorParticleVertPos *cutFailVPkm = new AliFemtoCutMonitorParticleVertPos("cutFailkm");
393     dtckm->AddCutMonitor(cutPassVPkm, cutFailVPkm);
394
395     AliFemtoCutMonitorEventMult *cutPassEvMkm = new AliFemtoCutMonitorEventMult("cutPasskm");
396     AliFemtoCutMonitorEventMult *cutFailEvMkm = new AliFemtoCutMonitorEventMult("cutFailkm");
397     meckm->AddCutMonitor(cutPassEvMkm, cutFailEvMkm);
398
399     AliFemtoCutMonitorEventVertex *cutPassEvVkm = new AliFemtoCutMonitorEventVertex("cutPasskm");
400     AliFemtoCutMonitorEventVertex *cutFailEvVkm = new AliFemtoCutMonitorEventVertex("cutFailkm");
401     meckm->AddCutMonitor(cutPassEvVkm, cutFailEvVkm);
402
403     AliFemtoShareQualityTPCEntranceSepPairCut *sqpckm = new AliFemtoShareQualityTPCEntranceSepPairCut();
404     sqpckm->SetShareQualityMax(0.0);
405     sqpckm->SetShareFractionMax(0.02);
406     sqpckm->SetRemoveSameLabel(kFALSE);
407     sqpckm->SetTPCEntranceSepMinimum(3.0);
408
409     ankm->SetEventCut(meckm);
410     ankm->SetFirstParticleCut(dtckm);
411     ankm->SetSecondParticleCut(dtckm);
412     ankm->SetPairCut(sqpckm);
413
414     AliFemtoQinvCorrFctn *cqinvkm= new AliFemtoQinvCorrFctn("qinvcf",100,0.0,1.0);
415
416
417     //###
418     ankm->AddCorrFctn(cqinvkm);
419  
420     Manager->AddAnalysis(ankm);   
421
422     // *** End Kaon-Kaon (negative) analysis
423   }
424
425   if (runPositiveNegativeKaons) {
426     // *** Begin Kaon+Kaon- analysis
427     AliFemtoVertexMultAnalysis *ankpkm = new AliFemtoVertexMultAnalysis(nZVertexBins, minZVertex, maxZVertex, 1, 2, 20000);
428     ankpkm->SetNumEventsToMix(5);
429     ankpkm->SetMinSizePartCollection(2);
430
431     AliFemtoBasicEventCut* meckpkm = new AliFemtoBasicEventCut();
432     meckpkm->SetEventMult(1,100000);
433     meckpkm->SetVertZPos(-1000,1000);
434         
435     AliFemtoESDTrackCut* dtckp = new AliFemtoESDTrackCut();
436     dtckp->SetPidProbKaon(0.7,1.001);
437     dtckp->SetPidProbMuon(0.0,0.5);
438     dtckp->SetPidProbPion(0.0,0.5);
439     dtckp->SetPidProbProton(0.0,0.5);
440     dtckp->SetMomRangeTOFpidIs(0.6,10000.);
441     dtckp->SetCharge(1.0);
442     dtckp->SetMostProbableKaon();
443     dtckp->SetPt(0.15,2.0);
444     dtckp->SetMass(KaonMass);
445     // Track quality cuts
446     dtckp->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
447     dtckp->SetminTPCncls(50);
448     dtckp->SetRemoveKinks(kTRUE);
449     dtckp->SetLabel(kFALSE);
450     dtckp->SetMaxITSChiNdof(2.5);
451     dtckp->SetMaxTPCChiNdof(3.0);
452     dtckp->SetMaxImpactXY(3.0);
453     dtckp->SetMaxImpactZ(3.0);
454
455     AliFemtoESDTrackCut* dtckm = new AliFemtoESDTrackCut();
456     dtckm->SetPidProbKaon(0.7,1.001);
457     dtckm->SetPidProbMuon(0.0,0.5);
458     dtckm->SetPidProbPion(0.0,0.5);
459     dtckm->SetPidProbProton(0.0,0.5);
460     dtckm->SetMomRangeTOFpidIs(0.6,10000.);
461     dtckm->SetCharge(-1.0);
462     dtckm->SetMostProbableKaon();
463     dtckm->SetPt(0.15,2.0);
464     dtckm->SetMass(KaonMass);
465     // Track quality cuts
466     dtckm->SetStatus(AliESDtrack::kTPCrefit|AliESDtrack::kITSrefit);
467     dtckm->SetminTPCncls(50);
468     dtckm->SetRemoveKinks(kTRUE);
469     dtckm->SetLabel(kFALSE);
470     dtckm->SetMaxITSChiNdof(2.5);
471     dtckm->SetMaxTPCChiNdof(3.0);
472     dtckm->SetMaxImpactXY(3.0);
473     dtckm->SetMaxImpactZ(3.0);
474
475
476     AliFemtoCutMonitorParticleYPt *cutPassYPtkp = new AliFemtoCutMonitorParticleYPt("cutPasskp", 0.493677);
477     AliFemtoCutMonitorParticleYPt *cutFailYPtkp = new AliFemtoCutMonitorParticleYPt("cutFailkp", 0.493677);
478     dtckp->AddCutMonitor(cutPassYPtkp, cutFailYPtkp);
479
480     AliFemtoCutMonitorParticleYPt *cutPassYPtkm = new AliFemtoCutMonitorParticleYPt("cutPasskm", 0.493677);
481     AliFemtoCutMonitorParticleYPt *cutFailYPtkm = new AliFemtoCutMonitorParticleYPt("cutFailkm", 0.493677);
482     dtckm->AddCutMonitor(cutPassYPtkm, cutFailYPtkm);
483
484     AliFemtoCutMonitorParticlePtPDG *cutPassPidkp = new AliFemtoCutMonitorParticlePtPDG("cutPasskp", 0.493677);
485     AliFemtoCutMonitorParticlePtPDG *cutFailPidkp = new AliFemtoCutMonitorParticlePtPDG("cutFailkp", 0.493677);
486     dtckp->AddCutMonitor(cutPassPidkp, cutFailPidkp);
487
488     AliFemtoCutMonitorParticlePtPDG *cutPassPidkm = new AliFemtoCutMonitorParticlePtPDG("cutPasskm", 0.493677);
489     AliFemtoCutMonitorParticlePtPDG *cutFailPidkm = new AliFemtoCutMonitorParticlePtPDG("cutFailkm", 0.493677);
490     dtckm->AddCutMonitor(cutPassPidkm, cutFailPidkm);
491   
492     AliFemtoCutMonitorParticleMomRes *cutPassMRkp = new AliFemtoCutMonitorParticleMomRes("cutPasskp");
493     AliFemtoCutMonitorParticleMomRes *cutFailMRkp = new AliFemtoCutMonitorParticleMomRes("cutFailkp");
494     dtckp->AddCutMonitor(cutPassMRkp, cutFailMRkp);
495
496     AliFemtoCutMonitorParticleMomRes *cutPassMRkm = new AliFemtoCutMonitorParticleMomRes("cutPasskm");
497     AliFemtoCutMonitorParticleMomRes *cutFailMRkm = new AliFemtoCutMonitorParticleMomRes("cutFailkm");
498     dtckm->AddCutMonitor(cutPassMRkm, cutFailMRkm);
499
500     AliFemtoCutMonitorParticleVertPos *cutPassVPkp = new AliFemtoCutMonitorParticleVertPos("cutPasskp");
501     AliFemtoCutMonitorParticleVertPos *cutFailVPkp = new AliFemtoCutMonitorParticleVertPos("cutFailkp");
502     dtckp->AddCutMonitor(cutPassVPkp, cutFailVPkp);
503
504     AliFemtoCutMonitorParticleVertPos *cutPassVPkm = new AliFemtoCutMonitorParticleVertPos("cutPasskm");
505     AliFemtoCutMonitorParticleVertPos *cutFailVPkm = new AliFemtoCutMonitorParticleVertPos("cutFailkm");
506     dtckm->AddCutMonitor(cutPassVPkm, cutFailVPkm);
507
508     AliFemtoCutMonitorEventMult *cutPassEvMkpkm = new AliFemtoCutMonitorEventMult("cutPasskpkm");
509     AliFemtoCutMonitorEventMult *cutFailEvMkpkm = new AliFemtoCutMonitorEventMult("cutFailkpkm");
510     meckpkm->AddCutMonitor(cutPassEvMkpkm, cutFailEvMkpkm);
511  
512     AliFemtoCutMonitorEventVertex *cutPassEvVkpkm = new AliFemtoCutMonitorEventVertex("cutPasskpkm");
513     AliFemtoCutMonitorEventVertex *cutFailEvVkpkm = new AliFemtoCutMonitorEventVertex("cutFailkpkm");
514     meckpkm->AddCutMonitor(cutPassEvVkpkm, cutFailEvVkpkm);
515
516     AliFemtoShareQualityTPCEntranceSepPairCut *sqpckpkm = new AliFemtoShareQualityTPCEntranceSepPairCut();
517     sqpckpkm->SetShareQualityMax(0.0);
518     sqpckpkm->SetShareFractionMax(0.02);
519     sqpckpkm->SetRemoveSameLabel(kFALSE);
520     sqpckpkm->SetTPCEntranceSepMinimum(3.0);
521
522     ankpkm->SetEventCut(meckpkm);
523     ankpkm->SetFirstParticleCut(dtckp);
524     ankpkm->SetSecondParticleCut(dtckm);
525     ankpkm->SetPairCut(sqpckpkm);
526
527     AliFemtoQinvCorrFctn *cqinvkpkm= new AliFemtoQinvCorrFctn("qinvcf",100,0.0,1.0);
528
529     //###
530     ankpkm->AddCorrFctn(cqinvkpkm);
531  
532     Manager->AddAnalysis(ankpkm);         
533
534     // *** End Kaon+Kaon-  analysis
535   }
536
537   return Manager;
538 }                         
539