AliPhysics  d1ec5d4 (d1ec5d4)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskSEXic2eleXifromAODtracks.cxx
Go to the documentation of this file.
1 /**************************************************************************
2  * Copyright(c) 1998-2009, ALICE Experiment at CERN, All rights reserved. *
3  * *
4  * Author: The ALICE Off-line Project. *
5  * Contributors are mentioned in the code where appropriate. *
6  * *
7  * Permission to use, copy, modify and distribute this software and its *
8  * documentation strictly for non-commercial purposes is hereby granted *
9  * without fee, provided that the above copyright notice appears in all *
10  * copies and that both the copyright notice and this permission notice *
11  * appeuear in the supporting documentation. The authors make no claims *
12  * about the suitability of this software for any purpose. It is *
13  * provided "as is" without express or implied warranty. *
14  **************************************************************************/
15 
16 /* $Id$ */
17 
18 //
19 //
20 // Xic->eXi analysis code
21 //
22 // Input: AOD
23 // Output: TTree or THnSparse (mass vs pT vs Centrality)
24 //
25 //-------------------------------------------------------------------------
26 //
27 // Authors: Y.S Watanabe(a)
28 // (a) CNS, the University of Tokyo
29 // Contatcs: wyosuke@cns.s.u-tokyo.ac.jp
30 //-------------------------------------------------------------------------
31 
32 #include <TSystem.h>
33 #include <TParticle.h>
34 #include <TParticlePDG.h>
35 #include <TH1F.h>
36 #include <TH1F.h>
37 #include <TH2F.h>
38 #include <THnSparse.h>
39 #include <TLorentzVector.h>
40 #include <TTree.h>
41 #include "TROOT.h"
42 #include <TDatabasePDG.h>
43 #include <AliAnalysisDataSlot.h>
44 #include <AliAnalysisDataContainer.h>
45 #include "AliStack.h"
46 #include "AliMCEvent.h"
47 #include "AliAnalysisManager.h"
48 #include "AliAODMCHeader.h"
49 #include "AliAODHandler.h"
50 #include "AliLog.h"
51 #include "AliExternalTrackParam.h"
52 #include "AliAODVertex.h"
53 #include "AliESDVertex.h"
54 #include "AliAODRecoDecay.h"
55 #include "AliAODRecoDecayHF.h"
56 #include "AliAODRecoCascadeHF.h"
57 #include "AliESDtrack.h"
58 #include "AliAODTrack.h"
59 #include "AliAODv0.h"
60 #include "AliAODcascade.h"
61 #include "AliAODMCParticle.h"
62 #include "AliAnalysisTaskSE.h"
64 #include "AliPIDResponse.h"
65 #include "AliPIDCombined.h"
66 #include "AliTOFPIDResponse.h"
67 #include "AliAODPidHF.h"
68 #include "AliInputEventHandler.h"
69 #include "AliESDtrackCuts.h"
70 #include "AliNeutralTrackParam.h"
71 #include "AliKFParticle.h"
72 #include "AliKFVertex.h"
73 #include "AliExternalTrackParam.h"
74 #include "AliESDtrack.h"
75 #include "AliCentrality.h"
76 #include "AliVertexerTracks.h"
77 #include "AliEventPoolManager.h"
79 #include "AliVertexingHFUtils.h"
80 
81 using std::cout;
82 using std::endl;
83 
87 
88 //__________________________________________________________________________
91  fUseMCInfo(kFALSE),
92  fOutput(0),
93  fOutputAll(0),
94  fListCuts(0),
95  fCEvents(0),
96  fHTrigger(0),
97  fHCentrality(0),
98  fHEventPlane(0),
99  fHNTrackletvsZ(0),
100  fHNTrackletCorrvsZ(0),
101  fAnalCuts(0),
102  fIsEventSelected(kFALSE),
103  fWriteVariableTree(kFALSE),
104  fWriteEachVariableTree(kFALSE),
105  fWriteMCVariableTree(kFALSE),
106  fVariablesTree(0),
107  fEleVariablesTree(0),
108  fCascVariablesTree(0),
109  fSingleVariablesTree(0),
110  fMCVariablesTree(0),
111  fMCEleVariablesTree(0),
112  fMCCascVariablesTree(0),
113  fMCGenPairVariablesTree(0),
114  fCorrelationVariablesTree(0),
115  fReconstructPrimVert(kFALSE),
116  fIsMB(kFALSE),
117  fIsSemi(kFALSE),
118  fIsCent(kFALSE),
119  fIsINT7(kFALSE),
120  fIsEMC7(kFALSE),
121  fCandidateVariables(),
122  fCandidateEleVariables(),
123  fCandidateCascVariables(),
124  fCandidateSingleVariables(),
125  fCandidateMCVariables(),
126  fCandidateMCEleVariables(),
127  fCandidateMCCascVariables(),
128  fCandidateMCGenPairVariables(),
129  fCorrelationVariables(),
130  fVtx1(0),
131  fV1(0),
132  fVtxZ(0),
133  fEventPlane(0),
134  fQ(0),
135  fQSub1(0),
136  fQSub2(0),
137  fBzkG(0),
138  fCentrality(0),
139  fRunNumber(0),
140  fTriggerCheck(0),
141  fUseCentralityV0M(kFALSE),
142  fUseCentralitySPDTracklet(kFALSE),
143  fUseEventPlane(0),
144  fEvNumberCounter(0),
145  fMCEventType(-9999),
146  fMCDoPairAnalysis(kFALSE),
147  fHistoEleXiMass(0),
148  fHistoEleXiMassRS(0),
149  fHistoEleXiMassWS(0),
150  fHistoEleXiMassRSMix(0),
151  fHistoEleXiMassWSMix(0),
152  fHistoEleXiMassRSSide(0),
153  fHistoEleXiMassWSSide(0),
154  fHistoEleXiMassRS1(0),
155  fHistoEleXiMassWS1(0),
156  fHistoEleXiMassRSMix1(0),
157  fHistoEleXiMassWSMix1(0),
158  fHistoEleXiMassRSSide1(0),
159  fHistoEleXiMassWSSide1(0),
160  fHistoEleXiMassRS2(0),
161  fHistoEleXiMassWS2(0),
162  fHistoEleXiMassRSMix2(0),
163  fHistoEleXiMassWSMix2(0),
164  fHistoEleXiMassRSSide2(0),
165  fHistoEleXiMassWSSide2(0),
166  fHistoEleXiMassAway(0),
167  fHistoEleXiMassRSAway(0),
168  fHistoEleXiMassWSAway(0),
169  fHistoEleXiMassRSMixAway(0),
170  fHistoEleXiMassWSMixAway(0),
171  fHistoEleXiMassRSSideAway(0),
172  fHistoEleXiMassWSSideAway(0),
173  fHistoEleXiMassRS1Away(0),
174  fHistoEleXiMassWS1Away(0),
175  fHistoEleXiMassRSMix1Away(0),
176  fHistoEleXiMassWSMix1Away(0),
177  fHistoEleXiMassRSSide1Away(0),
178  fHistoEleXiMassWSSide1Away(0),
179  fHistoEleXiMassRS2Away(0),
180  fHistoEleXiMassWS2Away(0),
181  fHistoEleXiMassRSMix2Away(0),
182  fHistoEleXiMassWSMix2Away(0),
183  fHistoEleXiMassRSSide2Away(0),
184  fHistoEleXiMassWSSide2Away(0),
185  fHistoEleXiMassvsElePtRS(0),
186  fHistoEleXiMassvsElePtWS(0),
187  fHistoEleXiMassvsElePtRSMix(0),
188  fHistoEleXiMassvsElePtWSMix(0),
189  fHistoEleXiMassvsElePtRSSide(0),
190  fHistoEleXiMassvsElePtWSSide(0),
191  fHistoEleXiMassvsElePtRS1(0),
192  fHistoEleXiMassvsElePtWS1(0),
193  fHistoEleXiMassvsElePtRSMix1(0),
194  fHistoEleXiMassvsElePtWSMix1(0),
195  fHistoEleXiMassvsElePtRSSide1(0),
196  fHistoEleXiMassvsElePtWSSide1(0),
197  fHistoEleXiMassvsElePtRS2(0),
198  fHistoEleXiMassvsElePtWS2(0),
199  fHistoEleXiMassvsElePtRSMix2(0),
200  fHistoEleXiMassvsElePtWSMix2(0),
201  fHistoEleXiMassvsElePtRSSide2(0),
202  fHistoEleXiMassvsElePtWSSide2(0),
203  fHistoElePtRS(0),
204  fHistoElePtWS(0),
205  fHistoElePtRSMix(0),
206  fHistoElePtWSMix(0),
207  fHistoEleXiMassMCS(0),
208  fHistoEleXiMassMCS1(0),
209  fHistoEleXiMassMCS2(0),
210  fHistoEleXiMassXibMCS(0),
211  fHistoEleXiMassXibMCS1(0),
212  fHistoEleXiMassXibMCS2(0),
213  fHistoEleXiMassPromptMCS(0),
214  fHistoEleXiMassPromptMCS1(0),
215  fHistoEleXiMassPromptMCS2(0),
216  fHistoEleXiMassBFeeddownMCS(0),
217  fHistoEleXiMassBFeeddownMCS1(0),
218  fHistoEleXiMassBFeeddownMCS2(0),
219  fHistoEleXiMassMCGen(0),
220  fHistoEleXiMassvsElePtMCS(0),
221  fHistoEleXiMassvsElePtMCGen(0),
222  fHistoEleXiMassvsElePtMCS1(0),
223  fHistoEleXiMassvsElePtMCGen1(0),
224  fHistoEleXiMassvsElePtMCS2(0),
225  fHistoEleXiMassvsElePtMCGen2(0),
226  fHistoElePtMCS(0),
227  fHistoElePtMCGen(0),
228  fHistoElePtvsEtaRS(0),
229  fHistoElePtvsEtaWS(0),
230  fHistoElePtvsEtaRSMix(0),
231  fHistoElePtvsEtaWSMix(0),
232  fHistoElePtvsEtaMCS(0),
233  fHistoElePtvsEtaMCGen(0),
234  fHistoElePtvsXiPtRS(0),
235  fHistoElePtvsXiPtWS(0),
236  fHistoElePtvsXiPtRSMix(0),
237  fHistoElePtvsXiPtWSMix(0),
238  fHistoElePtvsXiPtMCS(0),
239  fHistoElePtvsXiPtvsXicPtMCS(0),
240  fHistoElePtvsXiPtMCGen(0),
241  fHistoElePtvsXiPtvsXicPtMCGen(0),
242  fHistoElePtvsXiPtMCXicGen(0),
243  fHistoElePtvsd0RS(0),
244  fHistoElePtvsd0WS(0),
245  fHistoElePtvsd0RSMix(0),
246  fHistoElePtvsd0WSMix(0),
247  fHistoElePtvsd0MCS(0),
248  fHistoElePtvsd0PromptMCS(0),
249  fHistoElePtvsd0BFeeddownMCS(0),
250  fHistoBachPt(0),
251  fHistoBachPtMCS(0),
252  fHistoBachPtMCGen(0),
253  fHistod0Bach(0),
254  fHistoXiMassvsPt(0),
255  fHistoXiMassvsPtMCS(0),
256  fHistoXiMassvsPtMCGen(0),
257  fHistoOmegaMassvsPt(0),
258  fHistoElectronTPCPID(0),
259  fHistoElectronTOFPID(0),
260  fHistoElectronTPCSelPID(0),
261  fHistoElectronTOFSelPID(0),
262  fHistoElectronTPCPIDSelTOF(0),
263  fHistoElectronTOFPIDSelTPC(0),
264  fHistoElectronTPCPIDSelTOFSmallEta(0),
265  fHistoElectronTPCPIDSelTOFLargeEta(0),
266  fHistoMassConversionsMin(0),
267  fHistoMassConversionsSameSignMin(0),
268  fHistoElectronQovPtvsPhi(0),
269  fHistoXiQovPtvsPhi(0),
270  fHistoXicMCGen(0),
271  fHistoXicMCGen1(0),
272  fHistoXicMCGen2(0),
273  fHistoXicMCS(0),
274  fHistoXicMCS1(0),
275  fHistoXicMCS2(0),
276  fHistoXibMCGen(0),
277  fHistoXibMCGenWithXic(0),
278  fHistoXibMCS(0),
279  fHistoXicElectronMCGen(0),
280  fHistoXicElectronMCGen1(0),
281  fHistoXicElectronMCGen2(0),
282  fHistoXicElectronMCS(0),
283  fHistoXicElectronMCS1(0),
284  fHistoXicElectronMCS2(0),
285  fHistoElectronMCGen(0),
286  fHistoBottomElectronMCGen(0),
287  fHistoCharmElectronMCGen(0),
288  fHistoXiMCGen(0),
289  fHistoLambdaPtvsDl(0),
290  fHistoLambdaPtvsDlSide(0),
291  fHistoLambdaPtvsDlMCS(0),
292  fHistoLambdaPtvsDR(0),
293  fHistoLambdaPtvsDRSide(0),
294  fHistoLambdaPtvsDRMCS(0),
295  fHistoEleXiPtvsRapidityRS(0),
296  fHistoEleXiPtvsRapidityWS(0),
297  fHistoEleXiPtvsRapidityMCS(0),
298  fHistoCorrelationVariablesvsEleXiPt(0),
299  fHistoCorrelationVariablesvsEleXiPtMix(0),
300  fHistoCorrelationVariablesvsEleXiPtMC(0),
301  fHistoCorrelationVariablesvsElePt(0),
302  fHistoCorrelationVariablesvsElePtMix(0),
303  fHistoCorrelationVariablesvsElePtMC(0),
304  fHistoCorrelationVariablesvsXiPt(0),
305  fHistoCorrelationVariablesvsXiPtMix(0),
306  fHistoCorrelationVariablesvsXiPtMC(0),
307  fHistoMassVariablesvsEleXiPt(0),
308  fHistoMassVariablesvsEleXiPtMix(0),
309  fHistoMassVariablesvsEleXiPtMC(0),
310  fHistoMassVariablesvsElePt(0),
311  fHistoMassVariablesvsElePtMix(0),
312  fHistoMassVariablesvsElePtMC(0),
313  fHistoMassVariablesvsXiPt(0),
314  fHistoMassVariablesvsXiPtMix(0),
315  fHistoMassVariablesvsXiPtMC(0),
316  fHistoResponseElePt(0),
317  fHistoResponseXiPt(0),
318  fHistoResponseEleXiPt(0),
319  fHistoResponseXiPtvsEleXiPt(0),
320  fHistoResponseXiPtXib(0),
321  fHistoResponseEleXiPtXib(0),
322  fHistoResponseMcGenXibPtvsXicPt(0),
323  fHistoPi0MCGen(0),
324  fHistoElectronPi0Total(0),
325  fHistoElectronPi0Tag(0),
326  fHistoEtaMCGen(0),
327  fHistoElectronEtaTotal(0),
328  fHistoElectronEtaTag(0),
329  fCounter(0),
330  fHistonEvtvsRunNumber(0),
331  fHistonElevsRunNumber(0),
332  fHistonXivsRunNumber(0),
333  fHistoMCEventType(0),
334  fHistoMCXic0Decays(0),
335  fHistoMCDeltaPhiccbar(0),
336  fHistoMCNccbar(0),
337  fRefMult(9.26),
338  fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
339  fHistodPhiSdEtaSElectronProtonR125RS(0),
340  fHistodPhiSdEtaSElectronProtonR125WS(0),
341  fHistodPhiSdEtaSElectronProtonR125RSMix(0),
342  fHistodPhiSdEtaSElectronProtonR125WSMix(0),
343  fHistodPhiSdEtaSElectronPionR125RS(0),
344  fHistodPhiSdEtaSElectronPionR125WS(0),
345  fHistodPhiSdEtaSElectronPionR125RSMix(0),
346  fHistodPhiSdEtaSElectronPionR125WSMix(0),
347  fHistodPhiSdEtaSElectronBachelorR125RS(0),
348  fHistodPhiSdEtaSElectronBachelorR125WS(0),
349  fHistodPhiSdEtaSElectronBachelorR125RSMix(0),
350  fHistodPhiSdEtaSElectronBachelorR125WSMix(0),
351  fDoEventMixing(0),
352  fMixWithoutConversionFlag(kFALSE),
353  fNumberOfEventsForMixing (5),
354  fNzVtxBins (0),
355  fNCentBins (0),
356  fNRPBins (0),
357  fNOfPools(1),
358  fPoolIndex(-9999),
359  nextResVec(),
360  reservoirsReady(),
361  m_ReservoirE(),
362  m_ReservoirL1(),
363  m_ReservoirL2(),
364  m_ReservoirVarsE(),
365  m_ReservoirVarsL1(),
366  m_ReservoirVarsL2()
367 {
368  //
369  // Default Constructor.
370  //
371  for(Int_t i=0;i<23;i++){
372  fHistoElePtvsCutVarsRS[i] = 0;
373  fHistoElePtvsCutVarsWS[i] = 0;
375  }
376  for(Int_t i=0;i<8;i++){
378  }
379  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
380 }
381 
382 //___________________________________________________________________________
385  Bool_t writeVariableTree) :
386  AliAnalysisTaskSE(name),
387  fUseMCInfo(kFALSE),
388  fOutput(0),
389  fOutputAll(0),
390  fListCuts(0),
391  fCEvents(0),
392  fHTrigger(0),
393  fHCentrality(0),
394  fHEventPlane(0),
395  fHNTrackletvsZ(0),
396  fHNTrackletCorrvsZ(0),
397  fAnalCuts(analCuts),
398  fIsEventSelected(kFALSE),
399  fWriteVariableTree(writeVariableTree),
400  fWriteEachVariableTree(kFALSE),
401  fWriteMCVariableTree(kFALSE),
402  fVariablesTree(0),
403  fEleVariablesTree(0),
404  fCascVariablesTree(0),
405  fSingleVariablesTree(0),
406  fMCVariablesTree(0),
407  fMCEleVariablesTree(0),
408  fMCCascVariablesTree(0),
409  fMCGenPairVariablesTree(0),
410  fCorrelationVariablesTree(0),
411  fReconstructPrimVert(kFALSE),
412  fIsMB(kFALSE),
413  fIsSemi(kFALSE),
414  fIsCent(kFALSE),
415  fIsINT7(kFALSE),
416  fIsEMC7(kFALSE),
417  fCandidateVariables(),
418  fCandidateEleVariables(),
419  fCandidateCascVariables(),
420  fCandidateSingleVariables(),
421  fCandidateMCVariables(),
422  fCandidateMCEleVariables(),
423  fCandidateMCCascVariables(),
424  fCandidateMCGenPairVariables(),
425  fCorrelationVariables(),
426  fVtx1(0),
427  fV1(0),
428  fVtxZ(0),
429  fEventPlane(0),
430  fQ(0),
431  fQSub1(0),
432  fQSub2(0),
433  fBzkG(0),
434  fCentrality(0),
435  fRunNumber(0),
436  fTriggerCheck(0),
437  fUseCentralityV0M(kFALSE),
438  fUseCentralitySPDTracklet(kFALSE),
439  fUseEventPlane(0),
440  fEvNumberCounter(0),
441  fMCEventType(-9999),
442  fMCDoPairAnalysis(kFALSE),
443  fHistoEleXiMass(0),
444  fHistoEleXiMassRS(0),
445  fHistoEleXiMassWS(0),
446  fHistoEleXiMassRSMix(0),
447  fHistoEleXiMassWSMix(0),
448  fHistoEleXiMassRSSide(0),
449  fHistoEleXiMassWSSide(0),
450  fHistoEleXiMassRS1(0),
451  fHistoEleXiMassWS1(0),
452  fHistoEleXiMassRSMix1(0),
453  fHistoEleXiMassWSMix1(0),
454  fHistoEleXiMassRSSide1(0),
455  fHistoEleXiMassWSSide1(0),
456  fHistoEleXiMassRS2(0),
457  fHistoEleXiMassWS2(0),
458  fHistoEleXiMassRSMix2(0),
459  fHistoEleXiMassWSMix2(0),
460  fHistoEleXiMassRSSide2(0),
461  fHistoEleXiMassWSSide2(0),
462  fHistoEleXiMassAway(0),
463  fHistoEleXiMassRSAway(0),
464  fHistoEleXiMassWSAway(0),
465  fHistoEleXiMassRSMixAway(0),
466  fHistoEleXiMassWSMixAway(0),
467  fHistoEleXiMassRSSideAway(0),
468  fHistoEleXiMassWSSideAway(0),
469  fHistoEleXiMassRS1Away(0),
470  fHistoEleXiMassWS1Away(0),
471  fHistoEleXiMassRSMix1Away(0),
472  fHistoEleXiMassWSMix1Away(0),
473  fHistoEleXiMassRSSide1Away(0),
474  fHistoEleXiMassWSSide1Away(0),
475  fHistoEleXiMassRS2Away(0),
476  fHistoEleXiMassWS2Away(0),
477  fHistoEleXiMassRSMix2Away(0),
478  fHistoEleXiMassWSMix2Away(0),
479  fHistoEleXiMassRSSide2Away(0),
480  fHistoEleXiMassWSSide2Away(0),
481  fHistoEleXiMassvsElePtRS(0),
482  fHistoEleXiMassvsElePtWS(0),
483  fHistoEleXiMassvsElePtRSMix(0),
484  fHistoEleXiMassvsElePtWSMix(0),
485  fHistoEleXiMassvsElePtRSSide(0),
486  fHistoEleXiMassvsElePtWSSide(0),
487  fHistoEleXiMassvsElePtRS1(0),
488  fHistoEleXiMassvsElePtWS1(0),
489  fHistoEleXiMassvsElePtRSMix1(0),
490  fHistoEleXiMassvsElePtWSMix1(0),
491  fHistoEleXiMassvsElePtRSSide1(0),
492  fHistoEleXiMassvsElePtWSSide1(0),
493  fHistoEleXiMassvsElePtRS2(0),
494  fHistoEleXiMassvsElePtWS2(0),
495  fHistoEleXiMassvsElePtRSMix2(0),
496  fHistoEleXiMassvsElePtWSMix2(0),
497  fHistoEleXiMassvsElePtRSSide2(0),
498  fHistoEleXiMassvsElePtWSSide2(0),
499  fHistoElePtRS(0),
500  fHistoElePtWS(0),
501  fHistoElePtRSMix(0),
502  fHistoElePtWSMix(0),
503  fHistoEleXiMassMCS(0),
504  fHistoEleXiMassMCS1(0),
505  fHistoEleXiMassMCS2(0),
506  fHistoEleXiMassXibMCS(0),
507  fHistoEleXiMassXibMCS1(0),
508  fHistoEleXiMassXibMCS2(0),
509  fHistoEleXiMassPromptMCS(0),
510  fHistoEleXiMassPromptMCS1(0),
511  fHistoEleXiMassPromptMCS2(0),
512  fHistoEleXiMassBFeeddownMCS(0),
513  fHistoEleXiMassBFeeddownMCS1(0),
514  fHistoEleXiMassBFeeddownMCS2(0),
515  fHistoEleXiMassMCGen(0),
516  fHistoEleXiMassvsElePtMCS(0),
517  fHistoEleXiMassvsElePtMCGen(0),
518  fHistoEleXiMassvsElePtMCS1(0),
519  fHistoEleXiMassvsElePtMCGen1(0),
520  fHistoEleXiMassvsElePtMCS2(0),
521  fHistoEleXiMassvsElePtMCGen2(0),
522  fHistoElePtMCS(0),
523  fHistoElePtMCGen(0),
524  fHistoElePtvsEtaRS(0),
525  fHistoElePtvsEtaWS(0),
526  fHistoElePtvsEtaRSMix(0),
527  fHistoElePtvsEtaWSMix(0),
528  fHistoElePtvsEtaMCS(0),
529  fHistoElePtvsEtaMCGen(0),
530  fHistoElePtvsXiPtRS(0),
531  fHistoElePtvsXiPtWS(0),
532  fHistoElePtvsXiPtRSMix(0),
533  fHistoElePtvsXiPtWSMix(0),
534  fHistoElePtvsXiPtMCS(0),
535  fHistoElePtvsXiPtvsXicPtMCS(0),
536  fHistoElePtvsXiPtMCGen(0),
537  fHistoElePtvsXiPtvsXicPtMCGen(0),
538  fHistoElePtvsXiPtMCXicGen(0),
539  fHistoElePtvsd0RS(0),
540  fHistoElePtvsd0WS(0),
541  fHistoElePtvsd0RSMix(0),
542  fHistoElePtvsd0WSMix(0),
543  fHistoElePtvsd0MCS(0),
544  fHistoElePtvsd0PromptMCS(0),
545  fHistoElePtvsd0BFeeddownMCS(0),
546  fHistoBachPt(0),
547  fHistoBachPtMCS(0),
548  fHistoBachPtMCGen(0),
549  fHistod0Bach(0),
550  fHistoXiMassvsPt(0),
551  fHistoXiMassvsPtMCS(0),
552  fHistoXiMassvsPtMCGen(0),
553  fHistoOmegaMassvsPt(0),
554  fHistoElectronTPCPID(0),
555  fHistoElectronTOFPID(0),
556  fHistoElectronTPCSelPID(0),
557  fHistoElectronTOFSelPID(0),
558  fHistoElectronTPCPIDSelTOF(0),
559  fHistoElectronTOFPIDSelTPC(0),
560  fHistoElectronTPCPIDSelTOFSmallEta(0),
561  fHistoElectronTPCPIDSelTOFLargeEta(0),
562  fHistoMassConversionsMin(0),
563  fHistoMassConversionsSameSignMin(0),
564  fHistoElectronQovPtvsPhi(0),
565  fHistoXiQovPtvsPhi(0),
566  fHistoXicMCGen(0),
567  fHistoXicMCGen1(0),
568  fHistoXicMCGen2(0),
569  fHistoXicMCS(0),
570  fHistoXicMCS1(0),
571  fHistoXicMCS2(0),
572  fHistoXibMCGen(0),
573  fHistoXibMCGenWithXic(0),
574  fHistoXibMCS(0),
575  fHistoXicElectronMCGen(0),
576  fHistoXicElectronMCGen1(0),
577  fHistoXicElectronMCGen2(0),
578  fHistoXicElectronMCS(0),
579  fHistoXicElectronMCS1(0),
580  fHistoXicElectronMCS2(0),
581  fHistoElectronMCGen(0),
582  fHistoBottomElectronMCGen(0),
583  fHistoCharmElectronMCGen(0),
584  fHistoXiMCGen(0),
585  fHistoLambdaPtvsDl(0),
586  fHistoLambdaPtvsDlSide(0),
587  fHistoLambdaPtvsDlMCS(0),
588  fHistoLambdaPtvsDR(0),
589  fHistoLambdaPtvsDRSide(0),
590  fHistoLambdaPtvsDRMCS(0),
591  fHistoEleXiPtvsRapidityRS(0),
592  fHistoEleXiPtvsRapidityWS(0),
593  fHistoEleXiPtvsRapidityMCS(0),
594  fHistoCorrelationVariablesvsEleXiPt(0),
595  fHistoCorrelationVariablesvsEleXiPtMix(0),
596  fHistoCorrelationVariablesvsEleXiPtMC(0),
597  fHistoCorrelationVariablesvsElePt(0),
598  fHistoCorrelationVariablesvsElePtMix(0),
599  fHistoCorrelationVariablesvsElePtMC(0),
600  fHistoCorrelationVariablesvsXiPt(0),
601  fHistoCorrelationVariablesvsXiPtMix(0),
602  fHistoCorrelationVariablesvsXiPtMC(0),
603  fHistoMassVariablesvsEleXiPt(0),
604  fHistoMassVariablesvsEleXiPtMix(0),
605  fHistoMassVariablesvsEleXiPtMC(0),
606  fHistoMassVariablesvsElePt(0),
607  fHistoMassVariablesvsElePtMix(0),
608  fHistoMassVariablesvsElePtMC(0),
609  fHistoMassVariablesvsXiPt(0),
610  fHistoMassVariablesvsXiPtMix(0),
611  fHistoMassVariablesvsXiPtMC(0),
612  fHistoResponseElePt(0),
613  fHistoResponseXiPt(0),
614  fHistoResponseEleXiPt(0),
615  fHistoResponseXiPtvsEleXiPt(0),
616  fHistoResponseXiPtXib(0),
617  fHistoResponseEleXiPtXib(0),
618  fHistoResponseMcGenXibPtvsXicPt(0),
619  fHistoPi0MCGen(0),
620  fHistoElectronPi0Total(0),
621  fHistoElectronPi0Tag(0),
622  fHistoEtaMCGen(0),
623  fHistoElectronEtaTotal(0),
624  fHistoElectronEtaTag(0),
625  fCounter(0),
626  fHistonEvtvsRunNumber(0),
627  fHistonElevsRunNumber(0),
628  fHistonXivsRunNumber(0),
629  fHistoMCEventType(0),
630  fHistoMCXic0Decays(0),
631  fHistoMCDeltaPhiccbar(0),
632  fHistoMCNccbar(0),
633  fRefMult(9.26),
634  fGTI(0),fGTIndex(0), fTrackBuffSize(19000),
635  fHistodPhiSdEtaSElectronProtonR125RS(0),
636  fHistodPhiSdEtaSElectronProtonR125WS(0),
637  fHistodPhiSdEtaSElectronProtonR125RSMix(0),
638  fHistodPhiSdEtaSElectronProtonR125WSMix(0),
639  fHistodPhiSdEtaSElectronPionR125RS(0),
640  fHistodPhiSdEtaSElectronPionR125WS(0),
641  fHistodPhiSdEtaSElectronPionR125RSMix(0),
642  fHistodPhiSdEtaSElectronPionR125WSMix(0),
643  fHistodPhiSdEtaSElectronBachelorR125RS(0),
644  fHistodPhiSdEtaSElectronBachelorR125WS(0),
645  fHistodPhiSdEtaSElectronBachelorR125RSMix(0),
646  fHistodPhiSdEtaSElectronBachelorR125WSMix(0),
647  fDoEventMixing(0),
648  fMixWithoutConversionFlag(kFALSE),
649  fNumberOfEventsForMixing (5),
650  fNzVtxBins (0),
651  fNCentBins (0),
652  fNRPBins (0),
653  fNOfPools(1),
654  fPoolIndex(-9999),
655  nextResVec(),
656  reservoirsReady(),
657  m_ReservoirE(),
658  m_ReservoirL1(),
659  m_ReservoirL2(),
660  m_ReservoirVarsE(),
661  m_ReservoirVarsL1(),
662  m_ReservoirVarsL2()
663 {
664  //
665  // Constructor. Initialization of Inputs and Outputs
666  //
667  Info("AliAnalysisTaskSEXic2eleXifromAODtracks","Calling Constructor");
668 
669  for(Int_t i=0;i<23;i++){
670  fHistoElePtvsCutVarsRS[i] = 0;
671  fHistoElePtvsCutVarsWS[i] = 0;
673  }
674  for(Int_t i=0;i<8;i++){
676  }
677  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
678 
679  DefineOutput(1,TList::Class()); //conters
680  DefineOutput(2,TList::Class());
681  DefineOutput(3,TList::Class()); //conters
682  DefineOutput(4,TTree::Class()); //My private output
683  DefineOutput(5,TTree::Class()); //My private output
684  DefineOutput(6,TTree::Class()); //My private output
685  DefineOutput(7,TTree::Class()); //My private output
686  DefineOutput(8,AliNormalizationCounter::Class());
687  DefineOutput(9,TTree::Class()); //My private output
688  DefineOutput(10,TTree::Class()); //My private output
689  DefineOutput(11,TTree::Class()); //My private output
690  DefineOutput(12,TTree::Class()); //My private output
691 }
692 
693 //___________________________________________________________________________
695  //
696  // destructor
697  //
698  Info("~AliAnalysisTaskSEXic2eleXifromAODtracks","Calling Destructor");
699 
700  if (fOutput) {
701  delete fOutput;
702  fOutput = 0;
703  }
704 
705  if (fOutputAll) {
706  delete fOutputAll;
707  fOutputAll = 0;
708  }
709 
710  if (fListCuts) {
711  delete fListCuts;
712  fListCuts = 0;
713  }
714 
715 
716  if (fAnalCuts) {
717  delete fAnalCuts;
718  fAnalCuts = 0;
719  }
720 
721  if (fVariablesTree) {
722  delete fVariablesTree;
723  fVariablesTree = 0;
724  }
725  if (fEleVariablesTree) {
726  delete fEleVariablesTree;
727  fEleVariablesTree = 0;
728  }
729  if (fCascVariablesTree) {
730  delete fCascVariablesTree;
731  fCascVariablesTree = 0;
732  }
733  if (fSingleVariablesTree) {
734  delete fSingleVariablesTree;
736  }
737  if (fMCVariablesTree) {
738  delete fMCVariablesTree;
739  fMCVariablesTree = 0;
740  }
741  if (fMCEleVariablesTree) {
742  delete fMCEleVariablesTree;
744  }
745  if (fMCCascVariablesTree) {
746  delete fMCCascVariablesTree;
748  }
752  }
756  }
757  if(fCounter){
758  delete fCounter;
759  fCounter = 0;
760  }
761 
762  for(Int_t i = 0;i<fNOfPools;i++){
763  for(Int_t j=0;j<fNumberOfEventsForMixing;j++){
764  while(!m_ReservoirE[i][j].empty()){
765  delete m_ReservoirE[i][j].back();
766  m_ReservoirE[i][j].pop_back();
767  }
768  while(!m_ReservoirL1[i][j].empty()){
769  delete m_ReservoirL1[i][j].back();
770  m_ReservoirL1[i][j].pop_back();
771  }
772  while(!m_ReservoirL2[i][j].empty()){
773  delete m_ReservoirL2[i][j].back();
774  m_ReservoirL2[i][j].pop_back();
775  }
776  while(!m_ReservoirVarsE[i][j].empty()){
777  delete m_ReservoirVarsE[i][j].back();
778  m_ReservoirVarsE[i][j].pop_back();
779  }
780  while(!m_ReservoirVarsL1[i][j].empty()){
781  delete m_ReservoirVarsL1[i][j].back();
782  m_ReservoirVarsL1[i][j].pop_back();
783  }
784  while(!m_ReservoirVarsL2[i][j].empty()){
785  delete m_ReservoirVarsL2[i][j].back();
786  m_ReservoirVarsL2[i][j].pop_back();
787  }
788  }
789  }
790 
791  if (fGTI)
792  delete[] fGTI;
793  fGTI=0;
794  if (fGTIndex)
795  delete[] fGTIndex;
796  fGTIndex=0;
797 }
798 
799 //_________________________________________________
801  //
802  // Initialization
803  //
804  //
805 
806  fIsEventSelected=kFALSE;
807 
808  if (fDebug > 1) AliInfo("Init");
809 
810  fListCuts = new TList();
811  fListCuts->SetOwner();
812  fListCuts->SetName("ListCuts");
814  PostData(2,fListCuts);
815 
816  return;
817 }
818 
819 //_________________________________________________
821 {
822  //
823  // UserExec
824  //
825 
826  if (!fInputEvent) {
827  AliError("NO EVENT FOUND!");
828  return;
829  }
830  AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
831 
832  fCEvents->Fill(1);
834 
835  //------------------------------------------------
836  // First check if the event has proper B
837  //------------------------------------------------
838  fBzkG = (Double_t)aodEvent->GetMagneticField();
839  AliKFParticle::SetField(fBzkG);
840  if (TMath::Abs(fBzkG)<0.001) {
841  return;
842  }
843  fCEvents->Fill(2);
844 
845  Int_t countTr=0;
846  Double_t countCorr=0;
848  {
849  AliAODTracklets* tracklets=aodEvent->GetTracklets();
850  Int_t nTr=tracklets->GetNumberOfTracklets();
851  for(Int_t iTr=0; iTr<nTr; iTr++){
852  Double_t theta=tracklets->GetTheta(iTr);
853  Double_t eta=-TMath::Log(TMath::Tan(theta/2.));
854  if(eta>-1.0 && eta<1.0) countTr++;
855  }
856  AliAODVertex *vtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
857  Bool_t isVtxOk=kFALSE;
858  if(vtx1){
859  if(vtx1->GetNContributors()>0){
860  fCEvents->Fill(8);
861  isVtxOk=kTRUE;
862  }
863  }
864 
865  countCorr=countTr;
866  if(isVtxOk){
867  TProfile* estimatorAvg = GetEstimatorHistogram(aodEvent);
868  countCorr=static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,countTr,vtx1->GetZ(),fRefMult));
869  }
870  }
871 
872 
874  fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo,countCorr);
875  }else{
877  }
878 
880 
881  //------------------------------------------------
882  // MC analysis setting
883  //------------------------------------------------
884  TClonesArray *mcArray = 0;
885  AliAODMCHeader *mcHeader=0;
886  if (fUseMCInfo) {
887  // MC array need for maching
888  mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
889  if (!mcArray) {
890  AliError("Could not find Monte-Carlo in AOD");
891  return;
892  }
893  fCEvents->Fill(6); // in case of MC events
894 
895  // load MC header
896  mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
897  if (!mcHeader) {
898  AliError("AliAnalysisTaskSEXic2eleXifromAODtracks::UserExec: MC header branch not found!\n");
899  return;
900  }
901  fCEvents->Fill(7); // in case of MC events
902 
903  Double_t zMCVertex = mcHeader->GetVtxZ();
904  if (TMath::Abs(zMCVertex) > fAnalCuts->GetMaxVtxZ()) {
905  AliDebug(2,Form("Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,fAnalCuts->GetMaxVtxZ()));
906  return;
907  } else {
908  fCEvents->Fill(17); // in case of MC events
909  }
910  if ((TMath::Abs(zMCVertex) < fAnalCuts->GetMaxVtxZ()) && (!fAnalCuts->IsEventRejectedDuePhysicsSelection()) && (!fAnalCuts->IsEventRejectedDueToTrigger())) {
911  Bool_t selevt = MakeMCAnalysis(mcArray);
912  if(!selevt) return;
913  }
914  }
915 
916  //------------------------------------------------
917  // Event selection
918  //------------------------------------------------
919  fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
920  if (!fVtx1) return;
921 
922  Double_t pos[3],cov[6];
923  fVtx1->GetXYZ(pos);
924  fVtx1->GetCovarianceMatrix(cov);
925  fV1 = new AliESDVertex(pos,cov,100.,100,fVtx1->GetName());
926  fVtxZ = pos[2];
927 
928  Bool_t fIsTriggerNotOK = fAnalCuts->IsEventRejectedDueToTrigger();
931  if(!fIsTriggerNotOK && !fIsPhysSelNotOK && !fIsNoVertex && fabs(fVtx1->GetZ())<fAnalCuts->GetMaxVtxZ()) fCEvents->Fill(3);
932  if(!fIsEventSelected) {
933  delete fV1;
934  return;
935  }
936  fCEvents->Fill(4);
937 
938  fHNTrackletvsZ->Fill(fVtxZ,countTr);
939  fHNTrackletCorrvsZ->Fill(fVtxZ,countCorr);
940 
941  fIsMB=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kMB)==(AliVEvent::kMB);
942  fIsSemi=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kSemiCentral)==(AliVEvent::kSemiCentral);
943  fIsCent=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kCentral)==(AliVEvent::kCentral);
944  fIsINT7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kINT7)==(AliVEvent::kINT7);
945  fIsEMC7=(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()&AliVEvent::kEMC7)==(AliVEvent::kEMC7);
947  if(fIsMB) fHTrigger->Fill(1);
948  if(fIsSemi) fHTrigger->Fill(2);
949  if(fIsCent) fHTrigger->Fill(3);
950  if(fIsINT7) fHTrigger->Fill(4);
951  if(fIsEMC7) fHTrigger->Fill(5);
952  if(fIsMB|fIsSemi|fIsCent) fHTrigger->Fill(7);
953  if(fIsINT7|fIsEMC7) fHTrigger->Fill(8);
954  if(fIsMB&fIsSemi) fHTrigger->Fill(10);
955  if(fIsMB&fIsCent) fHTrigger->Fill(11);
956  if(fIsINT7&fIsEMC7) fHTrigger->Fill(12);
957 
958  if(fUseCentralityV0M){
959  AliCentrality *cent = aodEvent->GetCentrality();
960  fCentrality = cent->GetCentralityPercentile("V0M");
961  }else if(fUseCentralitySPDTracklet){
962  if(countCorr>=0 && countCorr<=0) fCentrality = 5.;
963  else if(countCorr>=1 && countCorr<=8) fCentrality = 15.;
964  else if(countCorr>=9 && countCorr<=13) fCentrality = 25.;
965  else if(countCorr>=14 && countCorr<=19) fCentrality = 35.;
966  else if(countCorr>=20 && countCorr<=30) fCentrality = 45.;
967  else if(countCorr>=31 && countCorr<=49) fCentrality = 55.;
968  else fCentrality = 65.;
969  }else{
970  fCentrality = 1.;
971  }
972  if(fCentrality<0.||fCentrality>100.-0.0000001) {
973  delete fV1;
974  return;
975  }
976  fHCentrality->Fill(fCentrality);
977 
978  if(fUseEventPlane>0){
979  AliEventplane *pl=aodEvent->GetEventplane();
980  if(!pl){
981  AliError("AliAnalysisTaskSEXic2eleXifromAODtracks::UserExec:no eventplane! v2 analysis without eventplane not possible!\n");
982  fCEvents->Fill(18);
983  return;
984  }
985  Double_t ep_v0m = GetPhi0Pi(pl->GetEventplane("V0",aodEvent,2));
986  Double_t ep_v0a = GetPhi0Pi(pl->GetEventplane("V0A",aodEvent,2));
987  Double_t ep_v0c = GetPhi0Pi(pl->GetEventplane("V0C",aodEvent,2));
988  Double_t ep_tpc = GetPhi0Pi(pl->GetEventplane("Q"));
989  if(fUseEventPlane==1)
990  fEventPlane = ep_v0m;
991  if(fUseEventPlane==2)
992  fEventPlane = ep_v0a;
993  if(fUseEventPlane==3)
994  fEventPlane = ep_v0c;
995  if(fUseEventPlane==4){
996  fEventPlane = ep_tpc;
997  fQSub1 = pl->GetQsub1();
998  fQSub2 = pl->GetQsub2();
999  fQ = pl->GetQVector();
1000  if(!fQSub1 || !fQSub2){
1001  AliError("AliAnalysisTaskSEXic2eleXifromAODtracks::UserExec: no Q vectors");
1002  fCEvents->Fill(19);
1003  return;
1004  }
1005  }
1006  }
1007 
1008  fHEventPlane->Fill(fEventPlane);
1009  fRunNumber = aodEvent->GetRunNumber();
1010 
1011  Int_t runnumber_offset = 0;
1012  Int_t runnumber = aodEvent->GetRunNumber();
1013  if(runnumber<=131000&&runnumber>=114000){
1014  runnumber_offset = 114000;//lhc10bcde
1015  }else if(runnumber<=196000&&runnumber>=195000){
1016  runnumber_offset = 195000;//lhc13bc
1017  }else if(runnumber<=170593&&runnumber>=167902){
1018  runnumber_offset = 167902;//lhc11h
1019  }
1020  fHistonEvtvsRunNumber->Fill(runnumber-runnumber_offset,1.);
1021 
1022  //------------------------------------------------
1023  // Check if the event has v0 candidate
1024  //------------------------------------------------
1025  //Int_t nv0 = aodEvent->GetNumberOfV0s();
1026  fCEvents->Fill(5);
1027 
1028 
1029  //------------------------------------------------
1030  // Main analysis done in this function
1031  //------------------------------------------------
1034  MakeAnalysis(aodEvent,mcArray);
1035 
1036 
1037  PostData(1,fOutput);
1038  PostData(3,fOutputAll);
1039  PostData(4,fVariablesTree);
1040  PostData(5,fEleVariablesTree);
1041  PostData(6,fCascVariablesTree);
1042  PostData(7,fMCVariablesTree);
1043  PostData(8,fCounter);
1044  PostData(9,fMCEleVariablesTree);
1045  PostData(10,fMCCascVariablesTree);
1046  //PostData(11,fMCGenPairVariablesTree);
1047  PostData(11,fSingleVariablesTree);
1048  PostData(12,fCorrelationVariablesTree);
1049 
1050  fIsEventSelected=kFALSE;
1051 
1052  delete fV1;
1053  return;
1054 }
1055 
1056 //________________________________________ terminate ___________________________
1058 {
1059  // The Terminate() function is the last function to be called during
1060  // a query. It always runs on the client, it can be used to present
1061  // the results graphically or save the results to file.
1062 
1063  //AliInfo("Terminate","");
1064  AliAnalysisTaskSE::Terminate();
1065 
1066  fOutput = dynamic_cast<TList*> (GetOutputData(1));
1067  if (!fOutput) {
1068  AliError("fOutput not available");
1069  return;
1070  }
1071 
1072  fOutputAll = dynamic_cast<TList*> (GetOutputData(3));
1073  if (!fOutputAll) {
1074  AliError("fOutputAll not available");
1075  return;
1076  }
1077 
1078  return;
1079 }
1080 
1081 //___________________________________________________________________________
1083 {
1084  //
1085  // UserCreateOutputObject
1086  //
1087  //AliInfo(Form("CreateOutputObjects of task %s\n", GetName()));
1088 
1089  //------------------------------------------------
1090  // output object setting
1091  //------------------------------------------------
1092  fOutput = new TList();
1093  fOutput->SetOwner();
1094  fOutput->SetName("chist0");
1095  DefineGeneralHistograms(); // define general histograms
1096  PostData(1,fOutput);
1097 
1098  fOutputAll = new TList();
1099  fOutputAll->SetOwner();
1100  fOutputAll->SetName("anahisto");
1101  DefineAnalysisHistograms(); // define general histograms
1102  PostData(3,fOutputAll);
1103 
1105  PostData(4,fVariablesTree);
1106 
1108  PostData(5,fEleVariablesTree);
1109 
1111  PostData(6,fCascVariablesTree);
1112 
1114  PostData(7,fMCVariablesTree);
1115 
1117  PostData(9,fMCEleVariablesTree);
1118 
1120  PostData(10,fMCCascVariablesTree);
1121 
1122  //DefineMCGenPairTreeVariables();
1123  //PostData(11,fMCGenPairVariablesTree);
1125  PostData(11,fSingleVariablesTree);
1126 
1128  PostData(12,fCorrelationVariablesTree);
1129 
1130 
1131  //Counter for Normalization
1132  TString normName="NormalizationCounter";
1133  AliAnalysisDataContainer *cont = GetOutputSlot(8)->GetContainer();
1134  if(cont)normName=(TString)cont->GetName();
1135  fCounter = new AliNormalizationCounter(normName.Data());
1137  fCounter->SetStudyMultiplicity(kTRUE,1.);
1138  }
1139  fCounter->Init();
1140  PostData(8,fCounter);
1141 
1142  if(fDoEventMixing){
1144  m_ReservoirE.resize(fNOfPools,std::vector<std::vector<TLorentzVector *> > (fNumberOfEventsForMixing));
1145  m_ReservoirL1.resize(fNOfPools,std::vector<std::vector<TLorentzVector *> > (fNumberOfEventsForMixing));
1146  m_ReservoirL2.resize(fNOfPools,std::vector<std::vector<TLorentzVector *> > (fNumberOfEventsForMixing));
1147  m_ReservoirVarsE.resize(fNOfPools,std::vector<std::vector<TVector *> > (fNumberOfEventsForMixing));
1148  m_ReservoirVarsL1.resize(fNOfPools,std::vector<std::vector<TVector *> > (fNumberOfEventsForMixing));
1149  m_ReservoirVarsL2.resize(fNOfPools,std::vector<std::vector<TVector *> > (fNumberOfEventsForMixing));
1150  nextResVec.resize(fNOfPools,0);
1151  reservoirsReady.resize(fNOfPools,kFALSE);
1152 
1153  for(Int_t s=0; s<fNOfPools; s++) {
1154  for(Int_t k=0;k<fNumberOfEventsForMixing;k++){
1155  m_ReservoirE[s][k].clear();
1156  m_ReservoirL1[s][k].clear();
1157  m_ReservoirL2[s][k].clear();
1158  m_ReservoirVarsE[s][k].clear();
1159  m_ReservoirVarsL1[s][k].clear();
1160  m_ReservoirVarsL2[s][k].clear();
1161  }
1162  }
1163  }
1164 
1165  fGTI = new AliAODTrack *[fTrackBuffSize]; // Array of pointers
1166  fGTIndex = new Int_t [fTrackBuffSize]; // Array of index
1167 
1168  return;
1169 }
1170 
1171 //-------------------------------------------------------------------------------
1174  AliAODEvent *aodEvent, TClonesArray *mcArray
1175  )
1176 {
1177  //
1178  // Main Analysis part
1179  //
1180  //------------------------------------------------
1181  // Select good track before hand to save time
1182  //------------------------------------------------
1183  if(fDoEventMixing){
1184  fPoolIndex=GetPoolIndex(fVtxZ,fCentrality,fEventPlane);
1185  Int_t nextRes( nextResVec[fPoolIndex] );
1186  while(!m_ReservoirE[fPoolIndex][nextRes].empty()){
1187  delete m_ReservoirE[fPoolIndex][nextRes].back();
1188  m_ReservoirE[fPoolIndex][nextRes].pop_back();
1189  }
1190  while(!m_ReservoirL1[fPoolIndex][nextRes].empty()){
1191  delete m_ReservoirL1[fPoolIndex][nextRes].back();
1192  m_ReservoirL1[fPoolIndex][nextRes].pop_back();
1193  }
1194  while(!m_ReservoirL2[fPoolIndex][nextRes].empty()){
1195  delete m_ReservoirL2[fPoolIndex][nextRes].back();
1196  m_ReservoirL2[fPoolIndex][nextRes].pop_back();
1197  }
1198  while(!m_ReservoirVarsE[fPoolIndex][nextRes].empty()){
1199  delete m_ReservoirVarsE[fPoolIndex][nextRes].back();
1200  m_ReservoirVarsE[fPoolIndex][nextRes].pop_back();
1201  }
1202  while(!m_ReservoirVarsL1[fPoolIndex][nextRes].empty()){
1203  delete m_ReservoirVarsL1[fPoolIndex][nextRes].back();
1204  m_ReservoirVarsL1[fPoolIndex][nextRes].pop_back();
1205  }
1206  while(!m_ReservoirVarsL2[fPoolIndex][nextRes].empty()){
1207  delete m_ReservoirVarsL2[fPoolIndex][nextRes].back();
1208  m_ReservoirVarsL2[fPoolIndex][nextRes].pop_back();
1209  }
1210  }
1211 
1212  if(fAnalCuts->GetProdAODFilterBit()==7){
1213  ResetGlobalTrackReference();
1214  // ..and set it
1215  for (Int_t iTrack=0;iTrack<aodEvent->GetNumberOfTracks();iTrack++){
1216  // cast needed since the event now returns AliVTrack instead of AliAODTrack
1217  AliAODTrack *track = dynamic_cast<AliAODTrack *>(aodEvent->GetTrack(iTrack));
1218  if (!track) continue;
1219 
1220  // Store the reference of the global tracks
1221  StoreGlobalTrackReference(track,iTrack);
1222  }
1223  }
1224 
1225 
1226  Int_t nCascs= aodEvent->GetNumberOfCascades();
1227  Int_t nTracks= aodEvent->GetNumberOfTracks();
1228 
1229  Bool_t seleTrkFlags[nTracks];
1230  Int_t nSeleTrks=0;
1231  SelectTrack(aodEvent,nTracks,nSeleTrks,seleTrkFlags,mcArray);
1232 
1233  Bool_t seleCascFlags[nCascs];
1234  Int_t nSeleCasc=0;
1235  SelectCascade(aodEvent,nCascs,nSeleCasc,seleCascFlags,mcArray);
1236 
1237  Int_t runnumber_offset = 0;
1238  Int_t runnumber = aodEvent->GetRunNumber();
1239  if(runnumber<=131000&&runnumber>=114000){
1240  runnumber_offset = 114000;//lhc10bcde
1241  }else if(runnumber<=196000&&runnumber>=195000){
1242  runnumber_offset = 195000;//lhc13bc
1243  }else if(runnumber<=170593&&runnumber>=167902){
1244  runnumber_offset = 167902;//lhc11h
1245  }
1246  fHistonElevsRunNumber->Fill(runnumber-runnumber_offset,nSeleTrks);
1247  fHistonXivsRunNumber->Fill(runnumber-runnumber_offset,nSeleCasc);
1248 
1249  if(nSeleTrks==0 || nSeleCasc==0) return;
1250 
1251  //------------------------------------------------
1252  // Fill pool and single tree
1253  //------------------------------------------------
1254  for (Int_t itrk = 0; itrk<nTracks; itrk++) {
1255  if(!seleTrkFlags[itrk]) continue;
1256  AliAODTrack *trk = (AliAODTrack*)aodEvent->GetTrack(itrk);
1257 
1258  FillElectronROOTObjects(trk,aodEvent,mcArray);
1259  }
1260 
1261  for (Int_t icasc = 0; icasc<nCascs; icasc++) {
1262  if(!seleCascFlags[icasc]) continue;
1263  AliAODcascade *casc = aodEvent->GetCascade(icasc);
1264  if(!casc) continue;
1265 
1266  FillCascROOTObjects(casc,aodEvent,mcArray);
1267  }
1268 
1269  if(fWriteEachVariableTree)
1270  return;
1271 
1272  //------------------------------------------------
1273  // Cascade loop
1274  //------------------------------------------------
1275  for (Int_t icasc = 0; icasc<nCascs; icasc++) {
1276  if(!seleCascFlags[icasc]) continue;
1277  AliAODcascade *casc = aodEvent->GetCascade(icasc);
1278  if(!casc) continue;
1279 
1280  AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
1281  AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
1282  AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
1283 
1284  //------------------------------------------------
1285  // track loop
1286  //------------------------------------------------
1287  for (Int_t itrk = 0; itrk<nTracks; itrk++) {
1288  if(!seleTrkFlags[itrk]) continue;
1289  AliAODTrack *trk = (AliAODTrack*)aodEvent->GetTrack(itrk);
1290  //if(trk->GetID()<0) continue;
1291 
1292  //if(!fAnalCuts->SelectWithRoughCuts(v0,trk)) continue;
1293 
1294  //TPC only track (BIT 7) does not have PID information
1295  //In addition to that, TPC only tracks does not have good DCA resolution
1296  //(according to femtoscopy code)
1297  AliAODTrack *trkpid = 0;
1298  if(fAnalCuts->GetProdAODFilterBit()==7){
1299  trkpid = fGTI[-trk->GetID()-1];
1300  }else{
1301  trkpid = trk;
1302  }
1303 
1304  Int_t cpid = cptrack->GetID();
1305  Int_t cnid = cntrack->GetID();
1306  Int_t cbid = cbtrack->GetID();
1307  Int_t lpid = trkpid->GetID();
1308  if((cpid==lpid)||(cnid==lpid)||(cbid==lpid)) continue;
1309 
1310  AliAODVertex *secVert = ReconstructSecondaryVertex(casc,trk,aodEvent);//Fake, prim vertex is just used as secondary vertex. place holder for future
1311  if(!secVert) continue;
1312 
1313  AliAODRecoCascadeHF *exobj = MakeCascadeHF(casc,trk,trkpid,aodEvent,secVert);
1314  if(!exobj) {
1315  continue;
1316  }
1317 
1318  FillROOTObjects(exobj, casc,trk,trkpid,aodEvent,mcArray);
1319 
1320  exobj->GetSecondaryVtx()->RemoveDaughters();
1321  exobj->UnsetOwnPrimaryVtx();
1322  delete exobj;exobj=NULL;
1323  delete secVert;
1324  }
1325  }
1326 
1327  if(fDoEventMixing){
1328  DoEventMixingWithPools(fPoolIndex);
1329 
1330  Int_t nextRes( nextResVec[fPoolIndex] );
1331  nextRes++;
1332  if( nextRes>=fNumberOfEventsForMixing ){
1333  nextRes = 0;
1334  reservoirsReady[fPoolIndex] = kTRUE;
1335  }
1336  nextResVec[fPoolIndex] = nextRes;
1337  }
1338 }
1339 
1340 
1343 {
1344  //
1345  // Define tree variables
1346  //
1347 
1348  const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName();
1349  fVariablesTree = new TTree(nameoutput,"Candidates variables tree");
1350  Int_t nVar = 92;
1352  TString * fCandidateVariableNames = new TString[nVar];
1353 
1354  fCandidateVariableNames[ 0]="Centrality";
1355  fCandidateVariableNames[ 1]="InvMassEleXi";
1356  fCandidateVariableNames[ 2]="EleXiPt";
1357  fCandidateVariableNames[ 3]="EleXiPx";
1358  fCandidateVariableNames[ 4]="EleXiPy";
1359  fCandidateVariableNames[ 5]="EleXiPz";
1360  fCandidateVariableNames[ 6]="ElePx";
1361  fCandidateVariableNames[ 7]="ElePy";
1362  fCandidateVariableNames[ 8]="ElePz";
1363  fCandidateVariableNames[ 9]="XiPx";
1364  fCandidateVariableNames[10]="XiPy";
1365  fCandidateVariableNames[11]="XiPz";
1366  fCandidateVariableNames[12]="XiCharge";
1367  fCandidateVariableNames[13]="MassXi";
1368  fCandidateVariableNames[14]="MassLambda";
1369  fCandidateVariableNames[15]="Eled0";
1370  fCandidateVariableNames[16]="Xid0";
1371  fCandidateVariableNames[17]="nSigmaTPCele";
1372  fCandidateVariableNames[18]="nSigmaTOFele";
1373  fCandidateVariableNames[19]="nSigmaTPCpr_etrk";
1374  fCandidateVariableNames[20]="nSigmaTOFpr_etrk";
1375  fCandidateVariableNames[21]="nSigmaTPCka_etrk";
1376  fCandidateVariableNames[22]="nSigmaTOFka_etrk";
1377  fCandidateVariableNames[23]="nSigmaTPCv0pr";
1378  fCandidateVariableNames[24]="nSigmaTOFv0pr";
1379  fCandidateVariableNames[25]="nSigmaTPCv0pi";
1380  fCandidateVariableNames[26]="nSigmaTOFv0pi";
1381  fCandidateVariableNames[27]="nSigmaTPCbachpi";
1382  fCandidateVariableNames[28]="nSigmaTOFbachpi";
1383  fCandidateVariableNames[29]="EleCharge";
1384  fCandidateVariableNames[30]="Mixing";
1385  fCandidateVariableNames[31]="DcaXiDaughters";
1386  fCandidateVariableNames[32]="DcaV0Daughters";
1387  fCandidateVariableNames[33]="DecayLengthXi";
1388  fCandidateVariableNames[34]="CosPointingAngleXi";
1389  fCandidateVariableNames[35]="DcaV0toPrimVertex";
1390  fCandidateVariableNames[36]="DcaPostoPrimVertex";
1391  fCandidateVariableNames[37]="DcaNegtoPrimVertex";
1392  fCandidateVariableNames[38]="DcaBachtoPrimVertex";
1393  fCandidateVariableNames[39]="DecayLengthV0";
1394  fCandidateVariableNames[40]="CosPointingAngleV0";
1395 
1396  fCandidateVariableNames[41]="mcpdgxic";
1397  fCandidateVariableNames[42]="mclabxic";
1398  fCandidateVariableNames[43]="mcxicpx";
1399  fCandidateVariableNames[44]="mcxicpy";
1400  fCandidateVariableNames[45]="mcxicpz";
1401  fCandidateVariableNames[46]="mcelepx";
1402  fCandidateVariableNames[47]="mcelepy";
1403  fCandidateVariableNames[48]="mcelepz";
1404  fCandidateVariableNames[49]="mccascpx";
1405  fCandidateVariableNames[50]="mccascpy";
1406  fCandidateVariableNames[51]="mccascpz";
1407 
1408  fCandidateVariableNames[52]="mcpdgele";
1409  fCandidateVariableNames[53]="mcpdgcasc";
1410  fCandidateVariableNames[54]="mcpdgmomele";
1411  fCandidateVariableNames[55]="mcpdgmomcasc";
1412  fCandidateVariableNames[56]="mcpdggrmomele";
1413  fCandidateVariableNames[57]="mcpdggrmomcasc";
1414  fCandidateVariableNames[58]="mcngenele";
1415  fCandidateVariableNames[59]="mcngencasc";
1416 
1417  fCandidateVariableNames[60]="nSigmaTPCpi_etrk";
1418  fCandidateVariableNames[61]="nSigmaTOFpi_etrk";
1419 
1420  fCandidateVariableNames[62]="V0PosPx";
1421  fCandidateVariableNames[63]="V0PosPy";
1422  fCandidateVariableNames[64]="V0PosPz";
1423  fCandidateVariableNames[65]="V0NegPx";
1424  fCandidateVariableNames[66]="V0NegPy";
1425  fCandidateVariableNames[67]="V0NegPz";
1426  fCandidateVariableNames[68]="V0VertX";
1427  fCandidateVariableNames[69]="V0VertY";
1428  fCandidateVariableNames[70]="V0VertZ";
1429  fCandidateVariableNames[71]="BachPx";
1430  fCandidateVariableNames[72]="BachPy";
1431  fCandidateVariableNames[73]="BachPz";
1432  fCandidateVariableNames[74]="XiVertX";
1433  fCandidateVariableNames[75]="XiVertY";
1434  fCandidateVariableNames[76]="XiVertZ";
1435  fCandidateVariableNames[77]="PrimVertX";
1436  fCandidateVariableNames[78]="PrimVertY";
1437  fCandidateVariableNames[79]="PrimVertZ";
1438 
1439  fCandidateVariableNames[80]="MassOmega";
1440 
1441  fCandidateVariableNames[81]= "EleITSMatch";
1442  fCandidateVariableNames[82]= "BachITSMatch";
1443  fCandidateVariableNames[83]= "V0PosITSMatch";
1444  fCandidateVariableNames[84]= "V0NegITSMatch";
1445 
1446  fCandidateVariableNames[85]= "TPCNclsF";
1447  fCandidateVariableNames[86]= "TPCNcls";
1448  fCandidateVariableNames[87]= "TPCNclsS";
1449  fCandidateVariableNames[88]= "IsXiPeakReagion";
1450 
1451 
1452  fCandidateVariableNames[89]="MagneticField";
1453  fCandidateVariableNames[90]="EvNumber";
1454  fCandidateVariableNames[91]="RunNumber";
1455 
1456  for (Int_t ivar=0; ivar<nVar; ivar++) {
1457  fVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
1458  }
1459 
1460  return;
1461 }
1462 
1464 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillROOTObjects(AliAODRecoCascadeHF *exobj, AliAODcascade *casc, AliAODTrack *trk, AliAODTrack *trkpid, AliAODEvent *event, TClonesArray *mcArray)
1465 {
1466  //
1467  // Fill histograms or tree depending on fWriteVariableTree
1468  //
1469  if(!trk) return;
1470  if(!trkpid) return;
1471  if(!casc) return;
1472 
1473  for(Int_t i=0;i<92;i++){
1474  fCandidateVariables[i] = -9999.;
1475  }
1476 
1477 
1478  AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
1479  AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
1480  AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
1481 // if(cptrack->Charge()<0 && cntrack->Charge()>0){
1482 // cptrack = (AliAODTrack*)(casc->GetDaughter(1));
1483 // cntrack = (AliAODTrack*)(casc->GetDaughter(0));
1484 // }
1485 // Double_t d0z0[2],covd0z0[3];
1486 // cptrack->PropagateToDCA(fVtx1,fBzkG,kVeryBig,d0z0,covd0z0);//propagate to primary vertex for debugging
1487 // cntrack->PropagateToDCA(fVtx1,fBzkG,kVeryBig,d0z0,covd0z0);//propagate to primary vertex for debugging
1488 // cbtrack->PropagateToDCA(fVtx1,fBzkG,kVeryBig,d0z0,covd0z0);//propagate to primary vertex for debugging
1489 
1490  Double_t pxe = exobj->PxProng(0);
1491  Double_t pye = exobj->PyProng(0);
1492  Double_t pze = exobj->PzProng(0);
1493  Double_t mome = sqrt(pxe*pxe+pye*pye+pze*pze);
1494  Double_t Ee = sqrt(mome*mome+0.000510998928*0.000510998928);
1495  Double_t pxv = exobj->PxProng(1);
1496  Double_t pyv = exobj->PyProng(1);
1497  Double_t pzv = exobj->PzProng(1);
1498  Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
1499  Double_t Ev = sqrt(momv*momv+1.32171*1.32171);
1500  Double_t cosoa = (pxe*pxv+pye*pyv+pze*pzv)/mome/momv;
1501  Double_t Esum = Ee + Ev;
1502 
1503  Double_t uxe = pxe/mome;
1504  Double_t uye = pye/mome;
1505  Double_t uze = pze/mome;
1506  Double_t lf = -2.*(pxv*uxe+pyv*uye+pzv*uze);
1507  Double_t pxv_flip = pxv + lf * uxe;
1508  Double_t pyv_flip = pyv + lf * uye;
1509  Double_t pzv_flip = pzv + lf * uze;
1510  Double_t pxsum_flip = pxe + pxv_flip;
1511  Double_t pysum_flip = pye + pyv_flip;
1512  Double_t pzsum_flip = pze + pzv_flip;
1513  Double_t mexi_flip = sqrt(Esum*Esum-pxsum_flip*pxsum_flip-pysum_flip*pysum_flip-pzsum_flip*pzsum_flip);
1514  Double_t ptexi_flip = sqrt(pxsum_flip*pxsum_flip+pysum_flip*pysum_flip);
1515 
1516  Double_t minmass_ee = 9999.;
1517  Bool_t isconv = fAnalCuts->TagConversions(trk,fGTIndex,(AliAODEvent*)event,event->GetNumberOfTracks(),minmass_ee);
1518  Double_t minmasslike_ee = 9999.;
1519  Bool_t isconv_like = fAnalCuts->TagConversionsSameSign(trk,fGTIndex,(AliAODEvent*)event,event->GetNumberOfTracks(),minmasslike_ee);
1520 
1521 
1522  Double_t posVtx[3] = {0.,0.,0.};
1523  fVtx1->GetXYZ(posVtx);
1524 
1526  UInt_t pdgdg[2]={11,3312};
1527  fCandidateVariables[ 1] = exobj->InvMass(2,pdgdg);
1528  fCandidateVariables[ 2] = exobj->Pt();
1529  fCandidateVariables[ 3] = exobj->Px();
1530  fCandidateVariables[ 4] = exobj->Py();
1531  fCandidateVariables[ 5] = exobj->Pz();
1532  fCandidateVariables[ 6] = exobj->PxProng(0);
1533  fCandidateVariables[ 7] = exobj->PyProng(0);
1534  fCandidateVariables[ 8] = exobj->PzProng(0);
1535  fCandidateVariables[ 9] = exobj->PxProng(1);
1536  fCandidateVariables[10] = exobj->PyProng(1);
1537  fCandidateVariables[11] = exobj->PzProng(1);
1538  fCandidateVariables[12] = casc->ChargeXi();
1539  fCandidateVariables[13] = casc->MassXi();
1540  if(casc->ChargeXi()<0)
1541  fCandidateVariables[14] = casc->MassLambda();
1542  else
1543  fCandidateVariables[14] = casc->MassAntiLambda();
1544  fCandidateVariables[15] = exobj->Getd0Prong(0);
1545  fCandidateVariables[16] = exobj->Getd0Prong(1);
1546 
1547  Double_t nSigmaTPCele = -9999.;
1548  Double_t nSigmaTOFele = -9999.;
1549  if(fAnalCuts->GetIsUsePID())
1550  {
1551  nSigmaTPCele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trkpid,AliPID::kElectron);
1552  nSigmaTOFele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trkpid,AliPID::kElectron);
1553  fCandidateVariables[17] = nSigmaTPCele;
1554  fCandidateVariables[18] = nSigmaTOFele;
1555 
1556  Double_t nSigmaTPCpr_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trkpid,AliPID::kProton);
1557  Double_t nSigmaTOFpr_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trkpid,AliPID::kProton);
1558  Double_t nSigmaTPCka_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trkpid,AliPID::kKaon);
1559  Double_t nSigmaTOFka_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trkpid,AliPID::kKaon);
1560  Double_t nSigmaTPCpi_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trkpid,AliPID::kPion);
1561  Double_t nSigmaTOFpi_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trkpid,AliPID::kPion);
1562  fCandidateVariables[19] = nSigmaTPCpr_etrk;
1563  fCandidateVariables[20] = nSigmaTOFpr_etrk;
1564  fCandidateVariables[21] = nSigmaTPCka_etrk;
1565  fCandidateVariables[22] = nSigmaTOFka_etrk;
1566  fCandidateVariables[60] = nSigmaTPCpi_etrk;
1567  fCandidateVariables[61] = nSigmaTOFpi_etrk;
1568  }
1569 
1570  Double_t nSigmaTPCv0pr=-9999.;
1571  Double_t nSigmaTOFv0pr=-9999.;
1572  Double_t nSigmaTPCv0pi=-9999.;
1573  Double_t nSigmaTOFv0pi=-9999.;
1574  Double_t nSigmaTPCbachpi=-9999.;
1575  Double_t nSigmaTOFbachpi=-9999.;
1577  {
1578  if(casc->ChargeXi()>0){
1579  nSigmaTPCv0pr = fAnalCuts->GetPidCascPr()->GetPidResponse()->NumberOfSigmasTPC(cntrack,AliPID::kProton);
1580  nSigmaTOFv0pr = fAnalCuts->GetPidCascPr()->GetPidResponse()->NumberOfSigmasTOF(cntrack,AliPID::kProton);
1581  nSigmaTPCv0pi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTPC(cptrack,AliPID::kPion);
1582  nSigmaTOFv0pi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTOF(cptrack,AliPID::kPion);
1583  nSigmaTPCbachpi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTPC(cbtrack,AliPID::kPion);
1584  nSigmaTOFbachpi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTOF(cbtrack,AliPID::kPion);
1585  }else{
1586  nSigmaTPCv0pr = fAnalCuts->GetPidCascPr()->GetPidResponse()->NumberOfSigmasTPC(cptrack,AliPID::kProton);
1587  nSigmaTOFv0pr = fAnalCuts->GetPidCascPr()->GetPidResponse()->NumberOfSigmasTOF(cptrack,AliPID::kProton);
1588  nSigmaTPCv0pi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTPC(cntrack,AliPID::kPion);
1589  nSigmaTOFv0pi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTOF(cntrack,AliPID::kPion);
1590  nSigmaTPCbachpi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTPC(cbtrack,AliPID::kPion);
1591  nSigmaTOFbachpi = fAnalCuts->GetPidCascPi()->GetPidResponse()->NumberOfSigmasTOF(cbtrack,AliPID::kPion);
1592  }
1593  fCandidateVariables[23] = nSigmaTPCv0pr;
1594  fCandidateVariables[24] = nSigmaTOFv0pr;
1595  fCandidateVariables[25] = nSigmaTPCv0pi;
1596  fCandidateVariables[26] = nSigmaTOFv0pi;
1597  fCandidateVariables[27] = nSigmaTPCbachpi;
1598  fCandidateVariables[28] = nSigmaTOFbachpi;
1599  }
1600  fCandidateVariables[29] = trk->Charge();
1601  fCandidateVariables[30] = 0;
1602  fCandidateVariables[31] = casc->DcaXiDaughters();
1603  fCandidateVariables[32] = casc->DcaV0Daughters();
1604  fCandidateVariables[33] = casc->DecayLengthXi(posVtx[0],posVtx[1],posVtx[2]);
1605  fCandidateVariables[34] = casc->CosPointingAngleXi(posVtx[0],posVtx[1],posVtx[2]);
1606  fCandidateVariables[35] = casc->DcaV0ToPrimVertex();
1607  fCandidateVariables[36] = casc->DcaPosToPrimVertex();
1608  fCandidateVariables[37] = casc->DcaNegToPrimVertex();
1609  fCandidateVariables[38] = casc->DcaBachToPrimVertex();
1610  fCandidateVariables[39] = casc->DecayLengthV0();
1611  fCandidateVariables[40] = casc->CosPointingAngle(casc->GetDecayVertexXi());
1612 
1613  AliAODMCParticle *mcxic = 0;
1614  AliAODMCParticle *mcele = 0;
1615  AliAODMCParticle *mccasc = 0;
1616  Int_t mclabxic = 0;
1617  Int_t mcpdgele_array[100];
1618  Int_t mcpdgcasc_array[100];
1619  Int_t mclabelele_array[100];
1620  Int_t mclabelcasc_array[100];
1621  Int_t mcngen_ele = -9999;
1622  Int_t mcngen_casc = -9999;
1623 
1624  if(fUseMCInfo && mcArray){
1625  mclabxic = MatchToMC(exobj,mcArray,mcpdgele_array, mcpdgcasc_array,mclabelele_array,mclabelcasc_array,mcngen_ele,mcngen_casc);
1626 
1627  if(mclabxic>-1){
1628  mcxic = (AliAODMCParticle*) mcArray->At(mclabxic);
1629  if(mclabelele_array[0]>=0)
1630  mcele = (AliAODMCParticle*) mcArray->At(mclabelele_array[0]);
1631  if(mclabelcasc_array[0]>=0)
1632  mccasc = (AliAODMCParticle*) mcArray->At(mclabelcasc_array[0]);
1633  if(mcxic){
1634  fCandidateVariables[41] = mcxic->GetPdgCode();
1635  fCandidateVariables[42] = mcxic->Label();
1636  fCandidateVariables[43] = mcxic->Px();
1637  fCandidateVariables[44] = mcxic->Py();
1638  fCandidateVariables[45] = mcxic->Pz();
1639  }
1640  if(mcele){
1641  fCandidateVariables[46] = mcele->Px();
1642  fCandidateVariables[47] = mcele->Py();
1643  fCandidateVariables[48] = mcele->Pz();
1644  }
1645  if(mccasc){
1646  fCandidateVariables[49] = mccasc->Px();
1647  fCandidateVariables[50] = mccasc->Py();
1648  fCandidateVariables[51] = mccasc->Pz();
1649  }
1650  }
1651  fCandidateVariables[52] = mcpdgele_array[0];
1652  fCandidateVariables[53] = mcpdgcasc_array[0];
1653  fCandidateVariables[54] = mcpdgele_array[1];
1654  fCandidateVariables[55] = mcpdgcasc_array[1];
1655  fCandidateVariables[56] = mcpdgele_array[2];
1656  fCandidateVariables[57] = mcpdgcasc_array[2];
1657  fCandidateVariables[58] = mcngen_ele;
1658  fCandidateVariables[59] = mcngen_casc;
1659  }
1660  fCandidateVariables[62] = casc->MomPosX();
1661  fCandidateVariables[63] = casc->MomPosY();
1662  fCandidateVariables[64] = casc->MomPosZ();
1663  fCandidateVariables[65] = casc->MomNegX();
1664  fCandidateVariables[66] = casc->MomNegY();
1665  fCandidateVariables[67] = casc->MomNegZ();
1666  fCandidateVariables[68] = casc->DecayVertexV0X();
1667  fCandidateVariables[69] = casc->DecayVertexV0Y();
1668  fCandidateVariables[70] = casc->DecayVertexV0Z();
1669  fCandidateVariables[71] = casc->MomBachX();
1670  fCandidateVariables[72] = casc->MomBachY();
1671  fCandidateVariables[73] = casc->MomBachZ();
1672  fCandidateVariables[74] = casc->DecayVertexXiX();
1673  fCandidateVariables[75] = casc->DecayVertexXiY();
1674  fCandidateVariables[76] = casc->DecayVertexXiZ();
1675  fCandidateVariables[77] = fVtx1->GetX();
1676  fCandidateVariables[78] = fVtx1->GetY();
1677  fCandidateVariables[79] = fVtx1->GetZ();
1678 
1679  fCandidateVariables[80] = casc->MassOmega();
1680 
1681  if(trk) fCandidateVariables[81] = trk->GetITSClusterMap();
1682  if(cbtrack) fCandidateVariables[82] = cbtrack->GetITSClusterMap();
1683  if(cptrack) fCandidateVariables[83] = cptrack->GetITSClusterMap();
1684  if(cntrack) fCandidateVariables[84] = cntrack->GetITSClusterMap();
1685 
1686  fCandidateVariables[85] = trk->GetTPCNclsF();
1687  fCandidateVariables[86] = trk->GetTPCNcls();
1688  fCandidateVariables[87] = trk->GetTPCnclsS();
1690 
1691  fCandidateVariables[89] = fBzkG;
1694 
1695 
1696 // if(fWriteVariableTree)
1697 // fVariablesTree->Fill();
1698 
1699  Double_t dphis_ele_pr, detas_ele_pr,dphis_ele_pi, detas_ele_pi, dphis_ele_bach, detas_ele_bach;
1700  dphis_ele_pr = 9999.;detas_ele_pr = 9999.;dphis_ele_pi = 9999.;detas_ele_pi = 9999.;dphis_ele_bach=9999.;detas_ele_bach=9999.;
1701  //fAnalCuts->GetdPhiSdEtaSR125(trk,cptrack,cntrack,cbtrack,fBzkG,posVtx, dphis_ele_pr,detas_ele_pr,dphis_ele_pi,detas_ele_pi, dphis_ele_bach, detas_ele_bach);
1702 
1703 
1704  Double_t cont[4];
1705  cont[0] = exobj->InvMass(2,pdgdg);
1706  cont[1] = exobj->Pt();
1707  cont[2] = exobj->Getd0Prong(0)*trk->Charge();
1708  cont[3] = fCentrality;
1709  fHistoEleXiMass->Fill(cont);
1710 
1711  Double_t cont_flip[4];
1712  cont_flip[0] = mexi_flip;
1713  cont_flip[1] = ptexi_flip;
1714  cont_flip[2] = 0.0;
1715  cont_flip[3] = fCentrality;
1716 
1717  Double_t cont2[3];
1718  cont2[0] = exobj->InvMass(2,pdgdg);
1719  cont2[1] = trk->Pt();
1720  cont2[2] = fCentrality;
1721 
1722  Double_t cont_eleptvseta[3];
1723  cont_eleptvseta[0] = trk->Pt();
1724  cont_eleptvseta[1] = trk->Eta();
1725  cont_eleptvseta[2] = fCentrality;
1726 
1727  Double_t cont_eleptvsxipt[3];
1728  cont_eleptvsxipt[0] = trk->Pt();
1729  cont_eleptvsxipt[1] = sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY());
1730  cont_eleptvsxipt[2] = fCentrality;
1731 
1732  Double_t cont_eleptvsd0[3];
1733  cont_eleptvsd0[0] = trk->Pt();
1734  cont_eleptvsd0[1] = exobj->Getd0Prong(0)*trk->Charge();
1735  cont_eleptvsd0[2] = fCentrality;
1736 
1737  Double_t exobj_mass = exobj->InvMass(2,pdgdg);
1738  Double_t exobj_px = exobj->Px();
1739  Double_t exobj_py = exobj->Py();
1740  Double_t exobj_pz = exobj->Pz();
1741  Double_t exobj_E = sqrt(exobj_mass*exobj_mass+exobj_px*exobj_px+exobj_py*exobj_py+exobj_pz*exobj_pz);
1742  Double_t exobj_rap = 0.5*log((exobj_E+exobj_pz)/(exobj_E-exobj_pz));
1743 
1744  //
1745  // Old strategy only look at mass and pairpt
1746  //
1748  {
1749  if(trk->Charge()*casc->ChargeXi()<0){
1750  fHistoEleXiMassRS->Fill(cont);
1751  if(trk->Charge()>0) fHistoEleXiMassRS1->Fill(cont);
1752  else fHistoEleXiMassRS2->Fill(cont);
1753  fHistoEleXiMassvsElePtRS->Fill(cont2);
1754  if(trk->Charge()>0) fHistoEleXiMassvsElePtRS1->Fill(cont2);
1755  else fHistoEleXiMassvsElePtRS2->Fill(cont2);
1756  if(cont[0]<2.5){
1757  fHistoEleXiPtvsRapidityRS->Fill(exobj->Pt(),exobj_rap);
1758  fHistoElePtRS->Fill(trk->Pt(),fCentrality);
1759  fHistoElePtvsEtaRS->Fill(cont_eleptvseta);
1760  fHistoElePtvsXiPtRS->Fill(cont_eleptvsxipt);
1761  fHistoElePtvsd0RS->Fill(cont_eleptvsd0);
1762  for(Int_t ih=0;ih<23;ih++){
1763  Double_t cont_eleptvscutvars[3];
1764  cont_eleptvscutvars[0] = exobj->Pt();
1765  cont_eleptvscutvars[2] = fCentrality;
1766 
1767  if(ih==0){
1768  cont_eleptvscutvars[1] = trk->GetTPCNcls();
1769  }else if(ih==1){
1770  cont_eleptvscutvars[1] = trk->GetTPCsignalN();
1771  }else if(ih==2){
1772  cont_eleptvscutvars[1] = nSigmaTPCele;
1773  }else if(ih==3){
1774  cont_eleptvscutvars[1] = nSigmaTOFele;
1775  }else if(ih==4){
1776  cont_eleptvscutvars[1] = trk->Eta();
1777  }else if(ih==5){
1778  cont_eleptvscutvars[1] = trk->GetITSNcls();
1779  }else if(ih==6){
1780  if(casc->ChargeXi()<0)
1781  cont_eleptvscutvars[1] = casc->MassLambda();
1782  else
1783  cont_eleptvscutvars[1] = casc->MassAntiLambda();
1784  }else if(ih==7){
1785  cont_eleptvscutvars[1] = casc->MassXi();
1786  }else if(ih==8){
1787  Double_t lPosV0[3];
1788  lPosV0[0] = casc->DecayVertexV0X();
1789  lPosV0[1] = casc->DecayVertexV0Y();
1790  lPosV0[2] = casc->DecayVertexV0Z();
1791  cont_eleptvscutvars[1] = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
1792  }else if(ih==9){
1793  Double_t lPosXi[3];
1794  lPosXi[0] = casc->DecayVertexXiX();
1795  lPosXi[1] = casc->DecayVertexXiY();
1796  lPosXi[2] = casc->DecayVertexXiZ();
1797  cont_eleptvscutvars[1] = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
1798  }else if(ih==10){
1799  cont_eleptvscutvars[1] = casc->DcaV0Daughters();
1800  }else if(ih==11){
1801  cont_eleptvscutvars[1] = casc->DcaXiDaughters();
1802  }else if(ih==12){
1803  cont_eleptvscutvars[1] = casc->DcaBachToPrimVertex();
1804  }else if(ih==13){
1805  if(casc->ChargeXi()<0.)
1806  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
1807  else
1808  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
1809  }else if(ih==14){
1810  if(casc->ChargeXi()>0.)
1811  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
1812  else
1813  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
1814  }else if(ih==15){
1815  cont_eleptvscutvars[1] = casc->CosPointingAngle(casc->GetDecayVertexXi());
1816  }else if(ih==16){
1817  cont_eleptvscutvars[1] = casc->CosPointingAngleXi(posVtx[0],posVtx[1],posVtx[2]);
1818  }else if(ih==17){
1819  cont_eleptvscutvars[1] = nSigmaTPCv0pr;
1820  }else if(ih==18){
1821  cont_eleptvscutvars[1] = nSigmaTPCv0pi;
1822  }else if(ih==19){
1823  cont_eleptvscutvars[1] = nSigmaTPCbachpi;
1824  }else if(ih==20){
1825  cont_eleptvscutvars[1] = casc->Eta();
1826  }else if(ih==21){
1827  cont_eleptvscutvars[1] = 0.5*TMath::Log((sqrt(casc->Ptot2Xi())+casc->MomXiZ())/(sqrt(casc->Ptot2Xi())-casc->MomXiZ()));
1828  }else if(ih==22){
1829  Double_t xipx = exobj->PxProng(1);
1830  Double_t xipy = exobj->PyProng(1);
1831  Double_t xipz = exobj->PzProng(1);
1832  Double_t epx = exobj->PxProng(0);
1833  Double_t epy = exobj->PyProng(0);
1834  Double_t epz = exobj->PzProng(0);
1835  cont_eleptvscutvars[1] = acos((xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz));
1836  }else{
1837  cont_eleptvscutvars[1] = -9999.;
1838  }
1839 
1840  fHistoElePtvsCutVarsRS[ih]->Fill(cont_eleptvscutvars);
1841  }
1842  }
1843  if(fUseMCInfo){
1844  if(mcxic){
1845  Int_t pdgcode = mcxic->GetPdgCode();
1846  cont2[1] = mcele->Pt();
1847  if(abs(pdgcode)==4132 && abs(mcpdgele_array[1])==4132 && abs(mcpdgcasc_array[1])==4132){
1848  Int_t labmotherxic = mcxic->GetMother();
1849  Bool_t isbottomfd = kFALSE;
1850  if(labmotherxic>=0)
1851  {
1852  AliAODMCParticle *motherxic = (AliAODMCParticle*)mcArray->At(labmotherxic);
1853  Int_t pdgmotherxic = motherxic->GetPdgCode();
1854  if(TMath::Abs(pdgmotherxic)==511||TMath::Abs(pdgmotherxic)==521||TMath::Abs(pdgmotherxic)==5122||TMath::Abs(pdgmotherxic)==5132||TMath::Abs(pdgmotherxic)==5232||TMath::Abs(pdgmotherxic)==5332){
1855  isbottomfd = kTRUE;
1856  }
1857  }
1858 
1859  fHistoEleXiMassMCS->Fill(cont);
1860  if(trk->Charge()>0) fHistoEleXiMassMCS1->Fill(cont);
1861  else fHistoEleXiMassMCS2->Fill(cont);
1862 
1863  if(isbottomfd){
1864  fHistoEleXiMassBFeeddownMCS->Fill(cont);
1865  if(trk->Charge()>0) fHistoEleXiMassBFeeddownMCS1->Fill(cont);
1866  else fHistoEleXiMassBFeeddownMCS2->Fill(cont);
1867  }else{
1868  fHistoEleXiMassPromptMCS->Fill(cont);
1869  if(trk->Charge()>0) fHistoEleXiMassPromptMCS1->Fill(cont);
1870  else fHistoEleXiMassPromptMCS2->Fill(cont);
1871  }
1872 
1873  fHistoEleXiMassvsElePtMCS->Fill(cont2);
1874  if(trk->Charge()>0) fHistoEleXiMassvsElePtMCS1->Fill(cont2);
1875  else fHistoEleXiMassvsElePtMCS2->Fill(cont2);
1876  if(cont[0]<2.5){
1877  fHistoEleXiPtvsRapidityMCS->Fill(exobj->Pt(),exobj_rap);
1878  fHistoElePtMCS->Fill(mcele->Pt(),fCentrality);
1879  fHistoElePtvsEtaMCS->Fill(cont_eleptvseta);
1880  fHistoElePtvsXiPtMCS->Fill(cont_eleptvsxipt);
1881  fHistoElePtvsd0MCS->Fill(cont_eleptvsd0);
1882 
1883  Double_t cont_xic[3];
1884  cont_xic[0] = mcxic->Pt();
1885  cont_xic[1] = mcxic->Y();
1886  cont_xic[2] = fCentrality;
1887  fHistoXicMCS->Fill(cont_xic);
1888  if(trk->Charge()>0) fHistoXicMCS1->Fill(cont_xic);
1889  else fHistoXicMCS2->Fill(cont_xic);
1890 
1891  Double_t cont_mcele[3];
1892  cont_mcele[0] = mcele->Pt();
1893  cont_mcele[1] = mcele->Eta();
1894  cont_mcele[2] = fCentrality;
1895  fHistoXicElectronMCS->Fill(cont_mcele);
1896  if(trk->Charge()>0) fHistoXicElectronMCS1->Fill(cont_mcele);
1897  else fHistoXicElectronMCS2->Fill(cont_mcele);
1898 
1899  fHistoResponseElePt->Fill(mcxic->Pt(),trk->Pt());
1900  fHistoResponseXiPt->Fill(mcxic->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
1901  fHistoResponseEleXiPt->Fill(mcxic->Pt(),exobj->Pt());
1902  fHistoResponseXiPtvsEleXiPt->Fill(exobj->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
1903 
1904  Double_t cont_eleptvsxiptvsxicpt[4];
1905  cont_eleptvsxiptvsxicpt[0] = cont_eleptvsxipt[0];
1906  cont_eleptvsxiptvsxicpt[1] = cont_eleptvsxipt[1];
1907  cont_eleptvsxiptvsxicpt[2] = mcxic->Pt();
1908  cont_eleptvsxiptvsxicpt[3] = cont_eleptvsxipt[2];
1909  fHistoElePtvsXiPtvsXicPtMCS->Fill(cont_eleptvsxiptvsxicpt);
1910 
1911  if(isbottomfd){
1912  fHistoElePtvsd0BFeeddownMCS->Fill(cont_eleptvsd0);
1913  }else{
1914  fHistoElePtvsd0PromptMCS->Fill(cont_eleptvsd0);
1915  }
1916 
1917  for(Int_t ih=0;ih<23;ih++){
1918  Double_t cont_eleptvscutvars[3];
1919  cont_eleptvscutvars[0] = exobj->Pt();
1920  cont_eleptvscutvars[2] = fCentrality;
1921 
1922  if(ih==0){
1923  cont_eleptvscutvars[1] = trk->GetTPCNcls();
1924  }else if(ih==1){
1925  cont_eleptvscutvars[1] = trk->GetTPCsignalN();
1926  }else if(ih==2){
1927  cont_eleptvscutvars[1] = nSigmaTPCele;
1928  }else if(ih==3){
1929  cont_eleptvscutvars[1] = nSigmaTOFele;
1930  }else if(ih==4){
1931  cont_eleptvscutvars[1] = trk->Eta();
1932  }else if(ih==5){
1933  cont_eleptvscutvars[1] = trk->GetITSNcls();
1934  }else if(ih==6){
1935  if(casc->ChargeXi()<0)
1936  cont_eleptvscutvars[1] = casc->MassLambda();
1937  else
1938  cont_eleptvscutvars[1] = casc->MassAntiLambda();
1939  }else if(ih==7){
1940  cont_eleptvscutvars[1] = casc->MassXi();
1941  }else if(ih==8){
1942  Double_t lPosV0[3];
1943  lPosV0[0] = casc->DecayVertexV0X();
1944  lPosV0[1] = casc->DecayVertexV0Y();
1945  lPosV0[2] = casc->DecayVertexV0Z();
1946  cont_eleptvscutvars[1] = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
1947  }else if(ih==9){
1948  Double_t lPosXi[3];
1949  lPosXi[0] = casc->DecayVertexXiX();
1950  lPosXi[1] = casc->DecayVertexXiY();
1951  lPosXi[2] = casc->DecayVertexXiZ();
1952  cont_eleptvscutvars[1] = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
1953  }else if(ih==10){
1954  cont_eleptvscutvars[1] = casc->DcaV0Daughters();
1955  }else if(ih==11){
1956  cont_eleptvscutvars[1] = casc->DcaXiDaughters();
1957  }else if(ih==12){
1958  cont_eleptvscutvars[1] = casc->DcaBachToPrimVertex();
1959  }else if(ih==13){
1960  if(casc->ChargeXi()<0.)
1961  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
1962  else
1963  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
1964  }else if(ih==14){
1965  if(casc->ChargeXi()>0.)
1966  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
1967  else
1968  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
1969  }else if(ih==15){
1970  cont_eleptvscutvars[1] = casc->CosPointingAngle(casc->GetDecayVertexXi());
1971  }else if(ih==16){
1972  cont_eleptvscutvars[1] = casc->CosPointingAngleXi(posVtx[0],posVtx[1],posVtx[2]);
1973  }else if(ih==17){
1974  cont_eleptvscutvars[1] = nSigmaTPCv0pr;
1975  }else if(ih==18){
1976  cont_eleptvscutvars[1] = nSigmaTPCv0pi;
1977  }else if(ih==19){
1978  cont_eleptvscutvars[1] = nSigmaTPCbachpi;
1979  }else if(ih==20){
1980  cont_eleptvscutvars[1] = casc->Eta();
1981  }else if(ih==21){
1982  cont_eleptvscutvars[1] = 0.5*TMath::Log((sqrt(casc->Ptot2Xi())+casc->MomXiZ())/(sqrt(casc->Ptot2Xi())-casc->MomXiZ()));
1983  }else if(ih==22){
1984  Double_t xipx = exobj->PxProng(1);
1985  Double_t xipy = exobj->PyProng(1);
1986  Double_t xipz = exobj->PzProng(1);
1987  Double_t epx = exobj->PxProng(0);
1988  Double_t epy = exobj->PyProng(0);
1989  Double_t epz = exobj->PzProng(0);
1990  cont_eleptvscutvars[1] = acos((xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz));
1991  }else{
1992  cont_eleptvscutvars[1] = -9999.;
1993  }
1994 
1995  fHistoElePtvsCutVarsMCS[ih]->Fill(cont_eleptvscutvars);
1996  }
1997  }
1998  }
1999  }
2000  }
2001  fHistodPhiSdEtaSElectronProtonR125RS->Fill(dphis_ele_pr,detas_ele_pr);
2002  fHistodPhiSdEtaSElectronPionR125RS->Fill(dphis_ele_pi,detas_ele_pi);
2003  fHistodPhiSdEtaSElectronBachelorR125RS->Fill(dphis_ele_bach,detas_ele_bach);
2004  }else{
2005  fHistoEleXiMassWS->Fill(cont);
2006  if(trk->Charge()>0) fHistoEleXiMassWS1->Fill(cont);
2007  else fHistoEleXiMassWS2->Fill(cont);
2008  fHistoEleXiMassvsElePtWS->Fill(cont2);
2009  if(trk->Charge()>0) fHistoEleXiMassvsElePtWS1->Fill(cont2);
2010  else fHistoEleXiMassvsElePtWS2->Fill(cont2);
2011  if(cont[0]<2.5){
2012  fHistoEleXiPtvsRapidityWS->Fill(exobj->Pt(),exobj_rap);
2013  fHistoElePtWS->Fill(trk->Pt(),fCentrality);
2014  fHistoElePtvsEtaWS->Fill(cont_eleptvseta);
2015  fHistoElePtvsXiPtWS->Fill(cont_eleptvsxipt);
2016  fHistoElePtvsd0WS->Fill(cont_eleptvsd0);
2017 
2018  for(Int_t ih=0;ih<23;ih++){
2019  Double_t cont_eleptvscutvars[3];
2020  cont_eleptvscutvars[0] = exobj->Pt();
2021  cont_eleptvscutvars[2] = fCentrality;
2022 
2023  if(ih==0){
2024  cont_eleptvscutvars[1] = trk->GetTPCNcls();
2025  }else if(ih==1){
2026  cont_eleptvscutvars[1] = trk->GetTPCsignalN();
2027  }else if(ih==2){
2028  cont_eleptvscutvars[1] = nSigmaTPCele;
2029  }else if(ih==3){
2030  cont_eleptvscutvars[1] = nSigmaTOFele;
2031  }else if(ih==4){
2032  cont_eleptvscutvars[1] = trk->Eta();
2033  }else if(ih==5){
2034  cont_eleptvscutvars[1] = trk->GetITSNcls();
2035  }else if(ih==6){
2036  if(casc->ChargeXi()<0)
2037  cont_eleptvscutvars[1] = casc->MassLambda();
2038  else
2039  cont_eleptvscutvars[1] = casc->MassAntiLambda();
2040  }else if(ih==7){
2041  cont_eleptvscutvars[1] = casc->MassXi();
2042  }else if(ih==8){
2043  Double_t lPosV0[3];
2044  lPosV0[0] = casc->DecayVertexV0X();
2045  lPosV0[1] = casc->DecayVertexV0Y();
2046  lPosV0[2] = casc->DecayVertexV0Z();
2047  cont_eleptvscutvars[1] = TMath::Sqrt(lPosV0[0]*lPosV0[0]+lPosV0[1]*lPosV0[1]);
2048  }else if(ih==9){
2049  Double_t lPosXi[3];
2050  lPosXi[0] = casc->DecayVertexXiX();
2051  lPosXi[1] = casc->DecayVertexXiY();
2052  lPosXi[2] = casc->DecayVertexXiZ();
2053  cont_eleptvscutvars[1] = TMath::Sqrt(lPosXi[0]*lPosXi[0]+lPosXi[1]*lPosXi[1]);
2054  }else if(ih==10){
2055  cont_eleptvscutvars[1] = casc->DcaV0Daughters();
2056  }else if(ih==11){
2057  cont_eleptvscutvars[1] = casc->DcaXiDaughters();
2058  }else if(ih==12){
2059  cont_eleptvscutvars[1] = casc->DcaBachToPrimVertex();
2060  }else if(ih==13){
2061  if(casc->ChargeXi()<0.)
2062  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
2063  else
2064  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
2065  }else if(ih==14){
2066  if(casc->ChargeXi()>0.)
2067  cont_eleptvscutvars[1] = casc->DcaPosToPrimVertex();
2068  else
2069  cont_eleptvscutvars[1] = casc->DcaNegToPrimVertex();
2070  }else if(ih==15){
2071  cont_eleptvscutvars[1] = casc->CosPointingAngle(casc->GetDecayVertexXi());
2072  }else if(ih==16){
2073  cont_eleptvscutvars[1] = casc->CosPointingAngleXi(posVtx[0],posVtx[1],posVtx[2]);
2074  }else if(ih==17){
2075  cont_eleptvscutvars[1] = nSigmaTPCv0pr;
2076  }else if(ih==18){
2077  cont_eleptvscutvars[1] = nSigmaTPCv0pi;
2078  }else if(ih==19){
2079  cont_eleptvscutvars[1] = nSigmaTPCbachpi;
2080  }else if(ih==20){
2081  cont_eleptvscutvars[1] = casc->Eta();
2082  }else if(ih==21){
2083  cont_eleptvscutvars[1] = 0.5*TMath::Log((sqrt(casc->Ptot2Xi())+casc->MomXiZ())/(sqrt(casc->Ptot2Xi())-casc->MomXiZ()));
2084  }else if(ih==22){
2085  Double_t xipx = exobj->PxProng(1);
2086  Double_t xipy = exobj->PyProng(1);
2087  Double_t xipz = exobj->PzProng(1);
2088  Double_t epx = exobj->PxProng(0);
2089  Double_t epy = exobj->PyProng(0);
2090  Double_t epz = exobj->PzProng(0);
2091  cont_eleptvscutvars[1] = acos((xipx*epx+xipy*epy+xipz*epz)/sqrt(xipx*xipx+xipy*xipy+xipz*xipz)/sqrt(epx*epx+epy*epy+epz*epz));
2092  }else{
2093  cont_eleptvscutvars[1] = -9999.;
2094  }
2095 
2096  fHistoElePtvsCutVarsWS[ih]->Fill(cont_eleptvscutvars);
2097  }
2098  }
2099  if(fUseMCInfo){
2100  if(mcxic){
2101  Int_t pdgcode = mcxic->GetPdgCode();
2102  Double_t cont_xib[3];
2103  cont_xib[0] = mcxic->Pt();
2104  cont_xib[1] = mcxic->Y();
2105  cont_xib[2] = fCentrality;
2106 
2107  if(abs(pdgcode)==5132 && abs(mcpdgele_array[1])==5132 && abs(mcpdgcasc_array[1])==4132 && abs(mcpdgcasc_array[2])==5132){
2108  fHistoEleXiMassXibMCS->Fill(cont);
2109  if(trk->Charge()>0) fHistoEleXiMassXibMCS1->Fill(cont);
2110  else fHistoEleXiMassXibMCS2->Fill(cont);
2111  if(cont[0]<2.5){
2112  fHistoXibMCS->Fill(cont_xib);
2113  fHistoResponseXiPtXib->Fill(mcxic->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
2114  fHistoResponseEleXiPtXib->Fill(mcxic->Pt(),exobj->Pt());
2115  }
2116  }
2117  if(abs(pdgcode)==5132 && abs(mcpdgele_array[1])==5132 && abs(mcpdgcasc_array[1])==4232 && abs(mcpdgcasc_array[2])==5132){
2118  fHistoEleXiMassXibMCS->Fill(cont);
2119  if(trk->Charge()>0) fHistoEleXiMassXibMCS1->Fill(cont);
2120  else fHistoEleXiMassXibMCS2->Fill(cont);
2121  if(cont[0]<2.5){
2122  fHistoXibMCS->Fill(cont_xib);
2123  fHistoResponseXiPtXib->Fill(mcxic->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
2124  fHistoResponseEleXiPtXib->Fill(mcxic->Pt(),exobj->Pt());
2125  }
2126  }
2127  if(abs(pdgcode)==5232 && abs(mcpdgele_array[1])==5232 && abs(mcpdgcasc_array[1])==4132 && abs(mcpdgcasc_array[2])==5232){
2128  fHistoEleXiMassXibMCS->Fill(cont);
2129  if(trk->Charge()>0) fHistoEleXiMassXibMCS1->Fill(cont);
2130  else fHistoEleXiMassXibMCS2->Fill(cont);
2131  if(cont[0]<2.5){
2132  fHistoXibMCS->Fill(cont_xib);
2133  fHistoResponseXiPtXib->Fill(mcxic->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
2134  fHistoResponseEleXiPtXib->Fill(mcxic->Pt(),exobj->Pt());
2135  }
2136  }
2137  if(abs(pdgcode)==5232 && abs(mcpdgele_array[1])==5232 && abs(mcpdgcasc_array[1])==4232 && abs(mcpdgcasc_array[2])==5232){
2138  fHistoEleXiMassXibMCS->Fill(cont);
2139  if(trk->Charge()>0) fHistoEleXiMassXibMCS1->Fill(cont);
2140  else fHistoEleXiMassXibMCS2->Fill(cont);
2141  if(cont[0]<2.5){
2142  fHistoXibMCS->Fill(cont_xib);
2143  fHistoResponseXiPtXib->Fill(mcxic->Pt(),sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2)));
2144  fHistoResponseEleXiPtXib->Fill(mcxic->Pt(),exobj->Pt());
2145  }
2146  }
2147  }
2148  }
2149  fHistodPhiSdEtaSElectronProtonR125WS->Fill(dphis_ele_pr,detas_ele_pr);
2150  fHistodPhiSdEtaSElectronPionR125WS->Fill(dphis_ele_pi,detas_ele_pi);
2151  fHistodPhiSdEtaSElectronBachelorR125WS->Fill(dphis_ele_bach,detas_ele_bach);
2152  }
2153 
2154  }
2155 
2156  //if( exobj->InvMass(2,pdgdg)<10. && cosoa < 0. && fAnalCuts->IsPeakRegion(casc))
2157  if( mexi_flip <10. && cosoa < 0. && fAnalCuts->IsPeakRegion(casc))
2158  {
2159  if(trk->Charge()*casc->ChargeXi()<0){
2160  fHistoEleXiMassRSAway->Fill(cont_flip);
2161  if(trk->Charge()>0) fHistoEleXiMassRS1Away->Fill(cont_flip);
2162  else fHistoEleXiMassRS2Away->Fill(cont_flip);
2163  }else{
2164  fHistoEleXiMassWSAway->Fill(cont_flip);
2165  if(trk->Charge()>0) fHistoEleXiMassWS1Away->Fill(cont_flip);
2166  else fHistoEleXiMassWS2Away->Fill(cont_flip);
2167  }
2168  }
2169 
2171  {
2172  if(trk->Charge()*casc->ChargeXi()<0){
2173  fHistoEleXiMassRSSide->Fill(cont);
2174  if(trk->Charge()>0) fHistoEleXiMassRSSide1->Fill(cont);
2175  else fHistoEleXiMassRSSide2->Fill(cont);
2176  fHistoEleXiMassvsElePtRSSide->Fill(cont2);
2177  if(trk->Charge()>0) fHistoEleXiMassvsElePtRSSide1->Fill(cont2);
2178  else fHistoEleXiMassvsElePtRSSide2->Fill(cont2);
2179  }else{
2180  fHistoEleXiMassWSSide->Fill(cont);
2181  if(trk->Charge()>0) fHistoEleXiMassWSSide1->Fill(cont);
2182  else fHistoEleXiMassWSSide2->Fill(cont);
2183  fHistoEleXiMassvsElePtWSSide->Fill(cont2);
2184  if(trk->Charge()>0) fHistoEleXiMassvsElePtWSSide1->Fill(cont2);
2185  else fHistoEleXiMassvsElePtWSSide2->Fill(cont2);
2186  }
2187  }
2188 
2189  //if( exobj->InvMass(2,pdgdg)<10. && cosoa < 0. && fAnalCuts->IsSideBand(casc))
2190  if( mexi_flip< 10. && cosoa < 0. && fAnalCuts->IsSideBand(casc))
2191  {
2192  if(trk->Charge()*casc->ChargeXi()<0){
2193  fHistoEleXiMassRSSideAway->Fill(cont_flip);
2194  if(trk->Charge()>0) fHistoEleXiMassRSSide1Away->Fill(cont_flip);
2195  else fHistoEleXiMassRSSide2Away->Fill(cont_flip);
2196  }else{
2197  fHistoEleXiMassWSSideAway->Fill(cont_flip);
2198  if(trk->Charge()>0) fHistoEleXiMassWSSide1Away->Fill(cont_flip);
2199  else fHistoEleXiMassWSSide2Away->Fill(cont_flip);
2200  }
2201  }
2202 
2203  //
2204  // New strategy: Fully analyze correlation
2205  //
2206  for(Int_t iv=0;iv<14;iv++){
2207  fCorrelationVariables[iv] = -9999.;
2208  }
2209  Double_t cont_cor_nd[7];
2210  for(Int_t iv=0;iv<7;iv++){
2211  cont_cor_nd[iv] = -9999.;
2212  }
2213  Double_t cont_mass_nd[8];
2214  for(Int_t iv=0;iv<8;iv++){
2215  cont_mass_nd[iv] = -9999.;
2216  }
2217 
2218  fCorrelationVariables[0] = sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2));
2219  fCorrelationVariables[1] = trk->Pt();
2220  fCorrelationVariables[2] = fAnalCuts->DeltaPhi(casc,trk);
2221  fCorrelationVariables[3] = fAnalCuts->DeltaEta(casc,trk);
2222  fCorrelationVariables[5] = exobj->Getd0Prong(0);
2223  if(!fUseMCInfo) fCorrelationVariables[6] = 0;
2224  else fCorrelationVariables[6] = 1;
2225  if(trk->Charge()>0){
2226  if(casc->ChargeXi()<0) fCorrelationVariables[7] = 0;
2227  else fCorrelationVariables[7] = 2;
2228  }else if(trk->Charge()<0){
2229  if(casc->ChargeXi()<0) fCorrelationVariables[7] = 1;
2230  else fCorrelationVariables[7] = 3;
2231  }
2232  fCorrelationVariables[8] = (Int_t)isconv + 2 * (Int_t)isconv_like;
2234  fCorrelationVariables[11] = exobj->Pt();
2235  fCorrelationVariables[12] = exobj->InvMass(2,pdgdg);
2237 
2238  cont_cor_nd[0] = exobj->Pt();
2239  cont_cor_nd[1] = fAnalCuts->DeltaPhi(casc,trk);
2240  cont_cor_nd[2] = 1.;//not used
2241  if(trk->Charge()>0){
2242  if(casc->ChargeXi()<0) cont_cor_nd[3] = 0;
2243  else cont_cor_nd[3] = 2;
2244  }else if(trk->Charge()<0){
2245  if(casc->ChargeXi()<0) cont_cor_nd[3] = 3;
2246  else cont_cor_nd[3] = 1;
2247  }
2248  cont_cor_nd[4] = fCorrelationVariables[8];
2249  cont_cor_nd[5] = 0;
2250  cont_cor_nd[6] = fCentrality;
2251 
2252  if(fUseMCInfo && FromSemileptonicDecays(mcpdgele_array)>0){
2253  if(mcxic){
2254  Int_t pdgcode = mcxic->GetPdgCode();
2255  if(abs(pdgcode)==4132 && abs(mcpdgele_array[1])==4132 && abs(mcpdgcasc_array[1])==4132){
2256  fCorrelationVariables[9] = 1;
2257  cont_cor_nd[5] = 1;
2258  }
2259  if(abs(pdgcode)==5132 && abs(mcpdgele_array[1])==5132 && abs(mcpdgcasc_array[1])==4132 && abs(mcpdgcasc_array[2])==5132){
2260  fCorrelationVariables[9] = 11;
2261  cont_cor_nd[5] = 6;
2262  }
2263  if(abs(pdgcode)==5132 && abs(mcpdgele_array[1])==5132 && abs(mcpdgcasc_array[1])==4232 && abs(mcpdgcasc_array[2])==5132){
2264  fCorrelationVariables[9] = 12;
2265  cont_cor_nd[5] = 6;
2266  }
2267  if(abs(pdgcode)==5232 && abs(mcpdgele_array[1])==5232 && abs(mcpdgcasc_array[1])==4132 && abs(mcpdgcasc_array[2])==5232){
2268  fCorrelationVariables[9] = 13;
2269  cont_cor_nd[5] = 6;
2270  }
2271  if(abs(pdgcode)==5232 && abs(mcpdgele_array[1])==5232 && abs(mcpdgcasc_array[1])==4232 && abs(mcpdgcasc_array[2])==5232){
2272  fCorrelationVariables[9] = 14;
2273  cont_cor_nd[5] = 6;
2274  }
2275  }
2276  if(fCorrelationVariables[9]<0){
2277  Bool_t lam_from_bottom = HaveBottomInHistory(mcpdgcasc_array);
2278  Bool_t lam_from_charm = HaveCharmInHistory(mcpdgcasc_array);
2279  if(FromSemileptonicDecays(mcpdgele_array)==1){
2280  if(lam_from_bottom) fCorrelationVariables[9] = 1011;
2281  else if(lam_from_charm) fCorrelationVariables[9] = 1012;
2282  else fCorrelationVariables[9] = 1013;
2283  cont_cor_nd[5] = 7;
2284  }
2285  if(FromSemileptonicDecays(mcpdgele_array)==2){
2286  if(lam_from_bottom) fCorrelationVariables[9] = 1014;
2287  else if(lam_from_charm) fCorrelationVariables[9] = 1015;
2288  else fCorrelationVariables[9] = 1016;
2289  cont_cor_nd[5] = 8;
2290  }
2291  if(FromSemileptonicDecays(mcpdgele_array)==1 && HaveBottomInHistory(mcpdgele_array)){
2292  if(lam_from_bottom) fCorrelationVariables[9] = 1017;
2293  else if(lam_from_charm) fCorrelationVariables[9] = 1018;
2294  else fCorrelationVariables[9] = 1019;
2295  cont_cor_nd[5] = 9;
2296  }
2297  }
2298  }
2299 
2301  {
2302  if(fWriteVariableTree)
2303  fCorrelationVariablesTree->Fill();
2304 
2305  if(fUseMCInfo){
2306  if(exobj->InvMass(2,pdgdg)<2.5)
2307  fHistoCorrelationVariablesvsEleXiPtMC->Fill(cont_cor_nd);
2308  cont_cor_nd[0] = trk->Pt();
2309  fHistoCorrelationVariablesvsElePtMC->Fill(cont_cor_nd);
2310  cont_cor_nd[0] = sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2));
2311  fHistoCorrelationVariablesvsXiPtMC->Fill(cont_cor_nd);
2312  }else{
2313  if(exobj->InvMass(2,pdgdg)<2.5)
2314  fHistoCorrelationVariablesvsEleXiPt->Fill(cont_cor_nd);
2315  cont_cor_nd[0] = trk->Pt();
2316  fHistoCorrelationVariablesvsElePt->Fill(cont_cor_nd);
2317  cont_cor_nd[0] = sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2));
2318  fHistoCorrelationVariablesvsXiPt->Fill(cont_cor_nd);
2319  }
2320  }
2321 
2322  cont_mass_nd[0] = exobj->InvMass(2,pdgdg);
2323  cont_mass_nd[1] = cont_cor_nd[0];
2324  cont_mass_nd[4] = cont_cor_nd[3];
2325  cont_mass_nd[5] = cont_cor_nd[4];
2326  cont_mass_nd[6] = cont_cor_nd[5];
2327  cont_mass_nd[7] = cont_cor_nd[6];
2328  if(fAnalCuts->IsPeakRegion(casc)) cont_mass_nd[3] = 1;
2329  if(fAnalCuts->IsSideBand(casc)) cont_mass_nd[3] = 0;
2330  if(fAnalCuts->IsSelected(exobj,AliRDHFCuts::kCandidate)) cont_mass_nd[2]=1;
2331  if(mexi_flip < 10.&& cosoa < 0.) cont_mass_nd[2]=0;
2332  if(fUseMCInfo){
2333  fHistoMassVariablesvsEleXiPtMC->Fill(cont_cor_nd);
2334  cont_cor_nd[0] = trk->Pt();
2335  fHistoMassVariablesvsElePtMC->Fill(cont_cor_nd);
2336  cont_cor_nd[0] = sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2));
2337  fHistoMassVariablesvsXiPtMC->Fill(cont_cor_nd);
2338  }else{
2339  fHistoMassVariablesvsEleXiPt->Fill(cont_cor_nd);
2340  cont_cor_nd[0] = trk->Pt();
2341  fHistoMassVariablesvsElePt->Fill(cont_cor_nd);
2342  cont_cor_nd[0] = sqrt(pow(casc->MomXiX(),2)+pow(casc->MomXiY(),2));
2343  fHistoMassVariablesvsXiPt->Fill(cont_cor_nd);
2344  }
2345 
2346 
2347  return;
2348 }
2349 
2351 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillMixROOTObjects(TLorentzVector *trke, TLorentzVector *casc, TVector *elevars, TVector *cascvars, Int_t chargexi)
2352 {
2353  //
2354  // Fill histograms or tree depending on fWriteVariableTree
2355  //
2356  if(!trke) return;
2357  if(!casc) return;
2358 
2359 
2360  for(Int_t i=0;i<90;i++){
2361  fCandidateVariables[i] = -9999.;
2362  }
2363 
2364  Double_t pxe = trke->Px();
2365  Double_t pye = trke->Py();
2366  Double_t pze = trke->Pz();
2367  Double_t mome = sqrt(pxe*pxe+pye*pye+pze*pze);
2368  Double_t Ee = sqrt(mome*mome+0.000510998928*0.000510998928);
2369 
2370  Double_t pxv = casc->Px();
2371  Double_t pyv = casc->Py();
2372  Double_t pzv = casc->Pz();
2373  Double_t momv = sqrt(pxv*pxv+pyv*pyv+pzv*pzv);
2374  Double_t Ev = sqrt(momv*momv+1.32171*1.32171);
2375 
2376  Double_t cosoa = (pxe*pxv+pye*pyv+pze*pzv)/mome/momv;
2377 
2378  Double_t pxsum = pxe + pxv;
2379  Double_t pysum = pye + pyv;
2380  Double_t pzsum = pze + pzv;
2381  Double_t Esum = Ee + Ev;
2382  Double_t mexi = sqrt(Esum*Esum-pxsum*pxsum-pysum*pysum-pzsum*pzsum);
2383 
2384  Double_t uxe = pxe/mome;
2385  Double_t uye = pye/mome;
2386  Double_t uze = pze/mome;
2387  Double_t lf = -2.*(pxv*uxe+pyv*uye+pzv*uze);
2388  Double_t pxv_flip = pxv + lf * uxe;
2389  Double_t pyv_flip = pyv + lf * uye;
2390  Double_t pzv_flip = pzv + lf * uze;
2391  Double_t pxsum_flip = pxe + pxv_flip;
2392  Double_t pysum_flip = pye + pyv_flip;
2393  Double_t pzsum_flip = pze + pzv_flip;
2394  Double_t mexi_flip = sqrt(Esum*Esum-pxsum_flip*pxsum_flip-pysum_flip*pysum_flip-pzsum_flip*pzsum_flip);
2395  Double_t ptexi_flip = sqrt(pxsum_flip*pxsum_flip+pysum_flip*pysum_flip);
2396 
2397  Double_t posVtx[3] = {0.,0.,0.};
2398  fVtx1->GetXYZ(posVtx);
2399 
2401  UInt_t pdgdg[2]={11,3312};
2402  fCandidateVariables[ 1] = mexi;
2403  fCandidateVariables[ 2] = sqrt(pxsum*pxsum+pysum*pysum);
2404  fCandidateVariables[ 3] = pxsum;
2405  fCandidateVariables[ 4] = pysum;
2406  fCandidateVariables[ 5] = pzsum;
2407  fCandidateVariables[ 6] = pxe;
2408  fCandidateVariables[ 7] = pye;
2409  fCandidateVariables[ 8] = pze;
2410  fCandidateVariables[ 9] = pxv;
2411  fCandidateVariables[10] = pyv;
2412  fCandidateVariables[11] = pzv;
2413  fCandidateVariables[12] = chargexi;
2414  fCandidateVariables[13] = casc->M();
2415  fCandidateVariables[29] = trke->T();
2416  fCandidateVariables[30] = 1;//mixing
2417  fCandidateVariables[77] = fVtx1->GetX();
2418  fCandidateVariables[78] = fVtx1->GetY();
2419  fCandidateVariables[79] = fVtx1->GetZ();
2421 
2422 // if(fWriteVariableTree)
2423 // fVariablesTree->Fill();
2424 
2425  Double_t cont[4];
2426  cont[0] = mexi;
2427  cont[1] = sqrt(pxsum*pxsum+pysum*pysum);
2428  cont[2] = 0.0;
2429  cont[3] = fCentrality;
2430 
2431  Double_t cont_flip[4];
2432  cont_flip[0] = mexi_flip;
2433  cont_flip[1] = ptexi_flip;
2434  cont_flip[2] = 0.0;
2435  cont_flip[3] = fCentrality;
2436 
2437  Double_t cont2[3];
2438  cont2[0] = mexi;
2439  cont2[1] = sqrt(pxe*pxe+pye*pye);
2440  cont2[2] = fCentrality;
2441 
2442  Double_t cont_eleptvseta[3];
2443  cont_eleptvseta[0] = trke->Pt();
2444  cont_eleptvseta[1] = trke->Eta();
2445  cont_eleptvseta[2] = fCentrality;
2446 
2447  Double_t cont_eleptvsxipt[3];
2448  cont_eleptvsxipt[0] = trke->Pt();
2449  cont_eleptvsxipt[1] = casc->Pt();
2450  cont_eleptvsxipt[2] = fCentrality;
2451 
2452  Double_t cont_eleptvsd0[3];
2453  cont_eleptvsd0[0] = trke->Pt();
2454  cont_eleptvsd0[1] = 0.;
2455  cont_eleptvsd0[2] = fCentrality;
2456 
2457  Double_t xyzR125_ele[3], xyzR125_pr[3], xyzR125_pi[3], xyzR125_bach[3];
2458  xyzR125_ele[0] = (*elevars)[0];
2459  xyzR125_ele[1] = (*elevars)[1];
2460  xyzR125_ele[2] = (*elevars)[2];
2461  xyzR125_pr[0] = (*cascvars)[0];
2462  xyzR125_pr[1] = (*cascvars)[1];
2463  xyzR125_pr[2] = (*cascvars)[2];
2464  xyzR125_pi[0] = (*cascvars)[3];
2465  xyzR125_pi[1] = (*cascvars)[4];
2466  xyzR125_pi[2] = (*cascvars)[5];
2467  xyzR125_bach[0] = (*cascvars)[6];
2468  xyzR125_bach[1] = (*cascvars)[7];
2469  xyzR125_bach[2] = (*cascvars)[8];
2470 
2471  Double_t rdhfcutvars[12];
2472  rdhfcutvars[0] = xyzR125_ele[0];
2473  rdhfcutvars[1] = xyzR125_ele[1];
2474  rdhfcutvars[2] = xyzR125_ele[2];
2475  rdhfcutvars[3] = xyzR125_pr[0];
2476  rdhfcutvars[4] = xyzR125_pr[1];
2477  rdhfcutvars[5] = xyzR125_pr[2];
2478  rdhfcutvars[6] = xyzR125_pi[0];
2479  rdhfcutvars[7] = xyzR125_pi[1];
2480  rdhfcutvars[8] = xyzR125_pi[2];
2481  rdhfcutvars[9] = xyzR125_bach[0];
2482  rdhfcutvars[10] = xyzR125_bach[1];
2483  rdhfcutvars[11] = xyzR125_bach[2];
2484 
2485  Double_t dphis_ele_pr = fAnalCuts->dPhiSR125(xyzR125_ele,xyzR125_pr);
2486  Double_t detas_ele_pr = fAnalCuts->dEtaSR125(xyzR125_ele,xyzR125_pr);
2487  Double_t dphis_ele_pi = fAnalCuts->dPhiSR125(xyzR125_ele,xyzR125_pi);
2488  Double_t detas_ele_pi = fAnalCuts->dEtaSR125(xyzR125_ele,xyzR125_pi);
2489  Double_t dphis_ele_bach = fAnalCuts->dPhiSR125(xyzR125_ele,xyzR125_bach);
2490  Double_t detas_ele_bach = fAnalCuts->dEtaSR125(xyzR125_ele,xyzR125_bach);
2491 
2492  //if(mexi<10. && cosoa>0. && fAnalCuts->IsPeakRegion(casc))
2493  if(fAnalCuts->IsSelected(trke,casc,rdhfcutvars,AliRDHFCuts::kCandidate) && fAnalCuts->IsPeakRegion(casc))
2494  {
2495  if(((int)trke->T())*chargexi<0){
2496  fHistoEleXiMassRSMix->Fill(cont);
2497  if(trke->T()>0) fHistoEleXiMassRSMix1->Fill(cont);
2498  else fHistoEleXiMassRSMix2->Fill(cont);
2499  fHistoEleXiMassvsElePtRSMix->Fill(cont2);
2500  if(trke->T()>0) fHistoEleXiMassvsElePtRSMix1->Fill(cont2);
2501  else fHistoEleXiMassvsElePtRSMix2->Fill(cont2);
2502  if(cont[0]<2.5){
2503  fHistoElePtRSMix->Fill(trke->Pt(),fCentrality);
2504  fHistoElePtvsEtaRSMix->Fill(cont_eleptvseta);
2505  fHistoElePtvsXiPtRSMix->Fill(cont_eleptvsxipt);
2506  fHistoElePtvsd0RSMix->Fill(cont_eleptvsd0);
2507  }
2508  fHistodPhiSdEtaSElectronProtonR125RSMix->Fill(dphis_ele_pr,detas_ele_pr);
2509  fHistodPhiSdEtaSElectronPionR125RSMix->Fill(dphis_ele_pi,detas_ele_pi);
2510  fHistodPhiSdEtaSElectronBachelorR125RSMix->Fill(dphis_ele_bach,detas_ele_bach);
2511  }else{
2512  fHistoEleXiMassWSMix->Fill(cont);
2513  if(trke->T()>0) fHistoEleXiMassWSMix1->Fill(cont);
2514  else fHistoEleXiMassWSMix2->Fill(cont);
2515  fHistoEleXiMassvsElePtWSMix->Fill(cont2);
2516  if(trke->T()>0) fHistoEleXiMassvsElePtWSMix1->Fill(cont2);
2517  else fHistoEleXiMassvsElePtWSMix2->Fill(cont2);
2518  if(cont[0]<2.5){
2519  fHistoElePtWSMix->Fill(trke->Pt(),fCentrality);
2520  fHistoElePtvsEtaWSMix->Fill(cont_eleptvseta);
2521  fHistoElePtvsXiPtWSMix->Fill(cont_eleptvsxipt);
2522  fHistoElePtvsd0WSMix->Fill(cont_eleptvsd0);
2523  }
2524  fHistodPhiSdEtaSElectronProtonR125WSMix->Fill(dphis_ele_pr,detas_ele_pr);
2525  fHistodPhiSdEtaSElectronPionR125WSMix->Fill(dphis_ele_pi,detas_ele_pi);
2526  fHistodPhiSdEtaSElectronBachelorR125WSMix->Fill(dphis_ele_bach,detas_ele_bach);
2527  }
2528  }
2529 
2530  //if(mexi < 10. && cosoa<0. && fAnalCuts->IsPeakRegion(casc))
2531  if(mexi_flip < 10. && cosoa<0. && fAnalCuts->IsPeakRegion(casc))
2532  {
2533  if(((int)trke->T())*chargexi<0){
2534  fHistoEleXiMassRSMixAway->Fill(cont_flip);
2535  if(trke->T()>0) fHistoEleXiMassRSMix1Away->Fill(cont_flip);
2536  else fHistoEleXiMassRSMix2Away->Fill(cont_flip);
2537  }else{
2538  fHistoEleXiMassWSMixAway->Fill(cont_flip);
2539  if(trke->T()>0) fHistoEleXiMassWSMix1Away->Fill(cont_flip);
2540  else fHistoEleXiMassWSMix2Away->Fill(cont_flip);
2541  }
2542  }
2543 
2544  //
2545  // New strategy: Fully analyze correlation
2546  //
2547  for(Int_t iv=0;iv<14;iv++){
2548  fCorrelationVariables[iv] = -9999.;
2549  }
2550 
2551  Double_t cont_cor_nd[7];
2552  for(Int_t iv=0;iv<7;iv++){
2553  cont_cor_nd[iv] = -9999.;
2554  }
2555  Double_t cont_mass_nd[8];
2556  for(Int_t iv=0;iv<8;iv++){
2557  cont_mass_nd[iv] = -9999.;
2558  }
2559 
2560  fCorrelationVariables[0] = casc->Pt();
2561  fCorrelationVariables[1] = trke->Pt();
2562  fCorrelationVariables[2] = TVector2::Phi_mpi_pi(casc->Phi()-trke->Phi());
2563  fCorrelationVariables[3] = casc->Eta()-trke->Eta();
2564  fCorrelationVariables[5] = (*elevars)[5];
2565  fCorrelationVariables[6] = 2;
2566  if(trke->T()>0){
2567  if(chargexi<0) fCorrelationVariables[7] = 0;
2568  else fCorrelationVariables[7] = 2;
2569  }else if(trke->T()<0){
2570  if(chargexi<0) fCorrelationVariables[7] = 1;
2571  else fCorrelationVariables[7] = 3;
2572  }
2573  fCorrelationVariables[8] = (*elevars)[6];
2574  fCorrelationVariables[9] = (*elevars)[7];
2575  fCorrelationVariables[10] = fCentrality;
2576  fCorrelationVariables[11] = sqrt(pxsum*pxsum+pysum*pysum);
2577  fCorrelationVariables[12] = mexi;
2578  fCorrelationVariables[13] = cosoa;
2579 
2580  cont_cor_nd[0] = sqrt(pxsum*pxsum+pysum*pysum);
2581  cont_cor_nd[1] = TVector2::Phi_mpi_pi(casc->Phi()-trke->Phi());
2582  cont_cor_nd[2] = 1.;//not used
2583  if(trke->T()>0){
2584  if(chargexi<0) cont_cor_nd[3] = 0;
2585  else cont_cor_nd[3] = 2;
2586  }else if(trke->T()<0){
2587  if(chargexi<0) cont_cor_nd[3] = 3;
2588  else cont_cor_nd[3] = 1;
2589  }
2590  cont_cor_nd[4] = fCorrelationVariables[8];
2591  cont_cor_nd[5] = 0;
2592  if(fabs(fCorrelationVariables[9]-1013)<0.001) cont_cor_nd[5] = 7;
2593  if(fabs(fCorrelationVariables[9]-1016)<0.001) cont_cor_nd[5] = 8;
2594  if(fabs(fCorrelationVariables[9]-1019)<0.001) cont_cor_nd[5] = 9;
2595  cont_cor_nd[6] = fCentrality;
2596 
2597  if(fAnalCuts->IsSelected(trke,casc,rdhfcutvars,AliRDHFCuts::kCandidate) && fAnalCuts->IsPeakRegion(casc))
2598  {
2599  if(fWriteVariableTree)
2600  fCorrelationVariablesTree->Fill();
2601 
2602  if(mexi<2.5)
2603  fHistoCorrelationVariablesvsEleXiPtMix->Fill(cont_cor_nd);
2604  cont_cor_nd[0] = trke->Pt();
2605  fHistoCorrelationVariablesvsElePtMix->Fill(cont_cor_nd);
2606  cont_cor_nd[0] = casc->Pt();
2607  fHistoCorrelationVariablesvsXiPtMix->Fill(cont_cor_nd);
2608  }
2609 
2610  cont_mass_nd[0] = mexi;
2611  cont_mass_nd[1] = cont_cor_nd[0];
2612  cont_mass_nd[4] = cont_cor_nd[3];
2613  cont_mass_nd[5] = cont_cor_nd[4];
2614  cont_mass_nd[6] = cont_cor_nd[5];
2615  cont_mass_nd[7] = cont_cor_nd[6];
2616  if(fAnalCuts->IsPeakRegion(casc)) cont_mass_nd[3] = 1;
2617  if(fAnalCuts->IsSideBand(casc)) cont_mass_nd[3] = 0;
2618  if(fAnalCuts->IsSelected(trke,casc,rdhfcutvars,AliRDHFCuts::kCandidate) ) cont_mass_nd[2]=1;
2619  if(mexi_flip < 10.&& cosoa < 0.) cont_mass_nd[2]=0;
2620  fHistoMassVariablesvsEleXiPtMix->Fill(cont_mass_nd);
2621  cont_mass_nd[0] = trke->Pt();
2622  fHistoMassVariablesvsElePtMix->Fill(cont_mass_nd);
2623  cont_mass_nd[0] = casc->Pt();
2624  fHistoMassVariablesvsXiPtMix->Fill(cont_mass_nd);
2625 
2626  return;
2627 }
2628 
2631 {
2632  //
2634  //
2635 
2636  const char* nameoutput = GetOutputSlot(11)->GetContainer()->GetName();
2637  fSingleVariablesTree = new TTree(nameoutput,"single variables tree");
2638  Int_t nVar = 16;
2640  TString * fCandidateVariableNames = new TString[nVar];
2641 
2642  fCandidateVariableNames[ 0]="Px";
2643  fCandidateVariableNames[ 1]="Py";
2644  fCandidateVariableNames[ 2]="Pz";
2645  fCandidateVariableNames[ 3]="Charge";
2646  fCandidateVariableNames[ 4]="XiMass";
2647  fCandidateVariableNames[ 5]="Bz";
2648  fCandidateVariableNames[ 6]="Centrality";
2649  fCandidateVariableNames[ 7]="PrimVertZ";
2650  fCandidateVariableNames[ 8]="EvNumber";
2651  fCandidateVariableNames[ 9]="RunNumber";
2652  fCandidateVariableNames[10]="EventPlane";
2653  fCandidateVariableNames[11]="Vars0";//e: dca, X:
2654  fCandidateVariableNames[12]="Vars1";//e: trk ID, X: trk ID (bach)
2655  fCandidateVariableNames[13]="Vars2";//e: nSigma TPC, X: trk ID (pos)
2656  fCandidateVariableNames[14]="Vars3";//e: nSigma TOF X: trk ID (neg)
2657  fCandidateVariableNames[15]="Vars4";//e: nSigma ITS X:
2658 
2659  for (Int_t ivar=0; ivar<nVar; ivar++) {
2660  fSingleVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateSingleVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
2661  }
2662 
2663  return;
2664 }
2665 
2668 {
2669  //
2670  // Define electron tree variables
2671  //
2672 
2673  const char* nameoutput = GetOutputSlot(5)->GetContainer()->GetName();
2674  fEleVariablesTree = new TTree(nameoutput,"electron variables tree");
2675  Int_t nVar = 26;
2677  TString * fCandidateVariableNames = new TString[nVar];
2678 
2679  fCandidateVariableNames[ 0]="ElePx";
2680  fCandidateVariableNames[ 1]="ElePy";
2681  fCandidateVariableNames[ 2]="ElePz";
2682  fCandidateVariableNames[ 3]="TPCChi2overNDF";
2683  fCandidateVariableNames[ 4]="ITSNcls";
2684  fCandidateVariableNames[ 5]="TPCNcls";
2685  fCandidateVariableNames[ 6]="TPCNclsPID";
2686  fCandidateVariableNames[ 7]="TPCNclsRatio";
2687  fCandidateVariableNames[ 8]="d0R";
2688  fCandidateVariableNames[ 9]="d0Z";
2689  fCandidateVariableNames[10]="ITSClusterMap";
2690  fCandidateVariableNames[11]="nSigmaTPCele";
2691  fCandidateVariableNames[12]="nSigmaTOFele";
2692  fCandidateVariableNames[13]="nSigmaTPCpi";
2693  fCandidateVariableNames[14]="nSigmaTPCka";
2694  fCandidateVariableNames[15]="nSigmaTPCpr";
2695  fCandidateVariableNames[16]="EvNumber";
2696  fCandidateVariableNames[17]="EleCharge";
2697  fCandidateVariableNames[18]="ElePdgCode";
2698  fCandidateVariableNames[19]="EleMotherPdgCode";
2699  fCandidateVariableNames[20]="mcelepx";
2700  fCandidateVariableNames[21]="mcelepy";
2701  fCandidateVariableNames[22]="mcelepz";
2702  fCandidateVariableNames[23]="Centrality";
2703  fCandidateVariableNames[24]="PrimVertZ";
2704  fCandidateVariableNames[25]="RunNumber";
2705 
2706  for (Int_t ivar=0; ivar<nVar; ivar++) {
2707  fEleVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateEleVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
2708  }
2709 
2710  return;
2711 }
2713 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillElectronROOTObjects(AliAODTrack *trk, AliAODEvent *event, TClonesArray *mcArray)
2714 {
2715  //
2716  // Fill histograms or tree depending on fWriteVariableTree
2717  //
2718 
2719  if(!trk) return;
2720 
2721  AliAODTrack *trkpid = 0;
2722  if(fAnalCuts->GetProdAODFilterBit()==7){
2723  trkpid = fGTI[-trk->GetID()-1];
2724  }else{
2725  trkpid = trk;
2726  }
2727 
2728  fHistoBachPt->Fill(trk->Pt());
2729  fHistoElectronQovPtvsPhi->Fill(trk->Phi(),(Double_t)trk->Charge()/trk->Pt());
2730 
2731  Double_t d0z0[2],covd0z0[3];
2732  trk->PropagateToDCA(fVtx1,fBzkG,kVeryBig,d0z0,covd0z0);
2733  fHistod0Bach->Fill(d0z0[0]);
2734 
2735  Double_t minmass_ee = 9999.;
2736  Double_t minmasslike_ee = 9999.;
2737  Bool_t isconv = fAnalCuts->TagConversions(trk,fGTIndex,(AliAODEvent*)event,event->GetNumberOfTracks(),minmass_ee);
2738  Bool_t isconv_like = fAnalCuts->TagConversionsSameSign(trk,fGTIndex,(AliAODEvent*)event,event->GetNumberOfTracks(),minmasslike_ee);
2739  fHistoMassConversionsMin->Fill(minmass_ee);
2740  fHistoMassConversionsSameSignMin->Fill(minmasslike_ee);
2741 
2742  Int_t mcetype = -9999;
2743  Int_t pdgEle = -9999;
2744  Int_t pdgEleMother = -9999;
2745  Float_t mcepx = -9999;
2746  Float_t mcepy = -9999;
2747  Float_t mcepz = -9999;
2748  Int_t pdgarray_ele[100], labelarray_ele[100], ngen_ele;
2749  for(Int_t i=0;i<100;i++){
2750  pdgarray_ele[i]=-9999;
2751  labelarray_ele[i]=-9999;
2752  }
2753  ngen_ele = -9999;
2754  if(fUseMCInfo)
2755  {
2756  Int_t labEle = trk->GetLabel();
2757  if(labEle<0) return;
2758  AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labEle);
2759  if(!mcetrk) return;
2760  pdgEle = mcetrk->GetPdgCode();
2761  if(abs(pdgEle)!=11) return;
2762  mcepx = mcetrk->Px();
2763  mcepy = mcetrk->Py();
2764  mcepz = mcetrk->Pz();
2765 
2766  Int_t labEleMother = mcetrk->GetMother();
2767  if(labEleMother>-1){
2768  AliAODMCParticle *mcemothertrk = (AliAODMCParticle*)mcArray->At(labEleMother);
2769  if(mcemothertrk){
2770  pdgEleMother = mcemothertrk->GetPdgCode();
2771  }
2772  }
2773 
2774  GetMCDecayHistory(mcetrk,mcArray,pdgarray_ele,labelarray_ele,ngen_ele);
2775 
2776  Int_t hfe_flag = 0;
2777  Bool_t gamma_flag = kFALSE;
2778  Bool_t pi0_flag = kFALSE;
2779  Bool_t eta_flag = kFALSE;
2780  Double_t pt_pi0 = -9999.;
2781  Double_t pt_eta = -9999.;
2782  if(abs(pdgarray_ele[0])>400&&abs(pdgarray_ele[0])<440){
2783  hfe_flag = 1;
2784  }
2785  if(abs(pdgarray_ele[0])>4000&&abs(pdgarray_ele[0])<4400){
2786  hfe_flag = 1;
2787  }
2788  if(abs(pdgarray_ele[0])>500&&abs(pdgarray_ele[0])<540){
2789  hfe_flag = 2;
2790  }
2791  if(abs(pdgarray_ele[0])>5000&&abs(pdgarray_ele[0])<5400){
2792  hfe_flag = 2;
2793  }
2794  if(abs(pdgarray_ele[0])==22){
2795  gamma_flag = kTRUE;
2796  }
2797  if(!gamma_flag){
2798  fHistoBachPtMCS->Fill(trk->Pt());
2799  }
2800  if((abs(pdgarray_ele[0])==22) && (abs(pdgarray_ele[1])==111)){
2801  pi0_flag = kTRUE;
2802  AliAODMCParticle *mctrkm = (AliAODMCParticle*)mcArray->At(labelarray_ele[1]);
2803  pt_pi0 = mctrkm->Pt();
2804  }
2805  if(abs(pdgarray_ele[0])==111){
2806  pi0_flag = kTRUE;
2807  AliAODMCParticle *mctrkm = (AliAODMCParticle*)mcArray->At(labelarray_ele[0]);
2808  pt_pi0 = mctrkm->Pt();
2809  }
2810  if((abs(pdgarray_ele[0])==22) && (abs(pdgarray_ele[1])==221)){
2811  eta_flag = kTRUE;
2812  AliAODMCParticle *mctrkm = (AliAODMCParticle*)mcArray->At(labelarray_ele[1]);
2813  pt_eta = mctrkm->Pt();
2814  }
2815  if(abs(pdgarray_ele[0])==221){
2816  eta_flag = kTRUE;
2817  AliAODMCParticle *mctrkm = (AliAODMCParticle*)mcArray->At(labelarray_ele[0]);
2818  pt_eta = mctrkm->Pt();
2819  }
2820 
2821  if(pi0_flag){
2822  Double_t cont_pi0[3];
2823  cont_pi0[0] = trk->Pt();
2824  cont_pi0[1] = pt_pi0;
2825  cont_pi0[2] = fCentrality;
2826  fHistoElectronPi0Total->Fill(cont_pi0);
2827  if(isconv) fHistoElectronPi0Tag->Fill(cont_pi0);
2828  }
2829 
2830  if(eta_flag){
2831  Double_t cont_eta[3];
2832  cont_eta[0] = trk->Pt();
2833  cont_eta[1] = pt_eta;
2834  cont_eta[2] = fCentrality;
2835  fHistoElectronEtaTotal->Fill(cont_eta);
2836  if(isconv) fHistoElectronEtaTag->Fill(cont_eta);
2837  }
2838 
2839  if(hfe_flag==0) return;
2840 
2841  if(hfe_flag==1){
2842  mcetype = 1013;
2843  }
2844  if(hfe_flag==2){
2845  mcetype = 1016;
2846  }
2847  if(hfe_flag==1 && HaveBottomInHistory(pdgarray_ele)){
2848  mcetype = 1019;
2849  }
2850  }
2851 
2852 
2853  if(fDoEventMixing && !(fMixWithoutConversionFlag && isconv)){
2854  Double_t pv[3];
2855  pv[0] = fVtx1->GetX();
2856  pv[1] = fVtx1->GetY();
2857  pv[2] = fVtx1->GetZ();
2858  Double_t xyzR125[3] = {9999.,9999.,9999.};
2859  if(fAnalCuts->GetCuts()[2]>0. || fAnalCuts->GetCuts()[3]>0.) fAnalCuts->SetSftPosR125(trk,fBzkG,pv,xyzR125);
2860  TVector *varvec = new TVector(8);
2861  (*varvec)[0] = xyzR125[0];
2862  (*varvec)[1] = xyzR125[1];
2863  (*varvec)[2] = xyzR125[2];
2864  (*varvec)[3] = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trkpid,AliPID::kElectron);
2865  (*varvec)[4] = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trkpid,AliPID::kElectron);
2866  (*varvec)[5] = d0z0[0];
2867  (*varvec)[6] = (Int_t)isconv + 2 * (Int_t)isconv_like;
2868  (*varvec)[7] = mcetype;
2869 
2870  Int_t nextRes( nextResVec[fPoolIndex] );
2871  m_ReservoirE[fPoolIndex][nextRes].push_back(new TLorentzVector(trk->Px(),trk->Py(),trk->Pz(),trk->Charge()));
2872  m_ReservoirVarsE[fPoolIndex][nextRes].push_back(varvec);
2873  }
2874 
2875  if(!fWriteEachVariableTree) return;
2876 
2877 
2878  for(Int_t i=0;i<26;i++){
2879  fCandidateEleVariables[i] = -9999.;
2880  }
2881  for(Int_t i=0;i<16;i++){
2882  fCandidateSingleVariables[i] = -9999.;
2883  }
2884 
2885  fCandidateSingleVariables[ 0] = trk->Px();
2886  fCandidateSingleVariables[ 1] = trk->Py();
2887  fCandidateSingleVariables[ 2] = trk->Pz();
2888  fCandidateSingleVariables[ 3] = trk->Charge();
2889  fCandidateSingleVariables[ 4] = -9999.;//not lambda
2895  if(fUseEventPlane==4){
2896  //Double_t evplane = GetEventPlaneForCandidate(trkpid,0,event->GetEventplane(),fQ,fQSub1,fQSub2); // remove autocorrelations
2897  //fCandidateSingleVariables[10] = evplane;
2899  }else{
2901  }
2902  fCandidateSingleVariables[11] = d0z0[0];
2903  fCandidateSingleVariables[12] = trkpid->GetID();
2904  if(fAnalCuts->GetIsUsePID())
2905  {
2906  Double_t nSigmaTPCele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trk,AliPID::kElectron);
2907  Double_t nSigmaTOFele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trk,AliPID::kElectron);
2908  Double_t nSigmaITSele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasITS(trk,AliPID::kElectron);
2909  fCandidateSingleVariables[13] = nSigmaTPCele;
2910  fCandidateSingleVariables[14] = nSigmaTOFele;
2911  fCandidateSingleVariables[15] = nSigmaITSele;
2912  }
2913 
2914  fSingleVariablesTree->Fill();
2915 
2916 // fCandidateEleVariables[ 0] = trk->Px();
2917 // fCandidateEleVariables[ 1] = trk->Py();
2918 // fCandidateEleVariables[ 2] = trk->Pz();
2919 // fCandidateEleVariables[ 3] = trk->Chi2perNDF();
2920 // fCandidateEleVariables[ 4] = trk->GetITSNcls();
2921 // fCandidateEleVariables[ 5] = trk->GetTPCncls();
2922 // fCandidateEleVariables[ 6] = trk->GetTPCsignalN();
2923 // if(trk->GetTPCNclsF()>0)
2924 // fCandidateEleVariables[ 7] = (Float_t)trk->GetTPCncls()/(Float_t)trk->GetTPCNclsF();
2925 //
2926 // fCandidateEleVariables[ 8] = d0z0[0];
2927 // fCandidateEleVariables[ 9] = d0z0[1];
2928 // Int_t itsmap = trk->GetITSClusterMap();
2929 // Int_t bit1 = 1;
2930 // Int_t bit2 = 2;
2931 // Bool_t spdfirst = (itsmap & bit1) == bit1;
2932 // Bool_t spdsecond = (itsmap & bit2) == bit2;
2933 // fCandidateEleVariables[10] = ((Int_t)spdfirst) + 2 * ((Int_t)spdsecond);
2934 //
2935 // if(fAnalCuts->GetIsUsePID())
2936 // {
2937 // Double_t nSigmaTPCele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trk,AliPID::kElectron);
2938 // Double_t nSigmaTOFele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(trk,AliPID::kElectron);
2939 // Double_t nSigmaTPCpi_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trk,AliPID::kPion);
2940 // Double_t nSigmaTPCka_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trk,AliPID::kKaon);
2941 // Double_t nSigmaTPCpr_etrk = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(trk,AliPID::kProton);
2942 // fCandidateEleVariables[11] = nSigmaTPCele;
2943 // fCandidateEleVariables[12] = nSigmaTOFele;
2944 // fCandidateEleVariables[13] = nSigmaTPCpi_etrk;
2945 // fCandidateEleVariables[14] = nSigmaTPCka_etrk;
2946 // fCandidateEleVariables[15] = nSigmaTPCpr_etrk;
2947 // }
2948 // fCandidateEleVariables[16] = fEvNumberCounter;
2949 // fCandidateEleVariables[17] = trk->Charge();
2950 // fCandidateEleVariables[18] = pdgEle;
2951 // fCandidateEleVariables[19] = pdgEleMother;
2952 // fCandidateEleVariables[20] = mcepx;
2953 // fCandidateEleVariables[21] = mcepy;
2954 // fCandidateEleVariables[22] = mcepz;
2955 // fCandidateEleVariables[23] = fCentrality;
2956 // fCandidateEleVariables[24] = fVtxZ;
2957 // fCandidateEleVariables[25] = fRunNumber;
2958 //
2959 //
2960 // fEleVariablesTree->Fill();
2961 }
2964 {
2965  //
2966  // Define V0 tree variables
2967  //
2968 
2969  const char* nameoutput = GetOutputSlot(6)->GetContainer()->GetName();
2970  fCascVariablesTree = new TTree(nameoutput,"cascade variables tree");
2971  Int_t nVar = 26;
2973  TString * fCandidateVariableNames = new TString[nVar];
2974 
2975  fCandidateVariableNames[ 0]="Centrality";
2976  fCandidateVariableNames[ 1]="InvMassXi";
2977  fCandidateVariableNames[ 2]="XiPx";
2978  fCandidateVariableNames[ 3]="XiPy";
2979  fCandidateVariableNames[ 4]="XiPz";
2980  fCandidateVariableNames[ 5]="InvMassLambda";
2981  fCandidateVariableNames[ 6]="DcaXiDaughters";
2982  fCandidateVariableNames[ 7]="DcaV0Daughters";
2983  fCandidateVariableNames[ 8]="DecayLengthXi";
2984  fCandidateVariableNames[ 9]="CosPointingAngleXi";
2985  fCandidateVariableNames[10]="DcaV0toPrimVertex";
2986  fCandidateVariableNames[11]="DcaPostoPrimVertex";
2987  fCandidateVariableNames[12]="DcaNegtoPrimVertex";
2988  fCandidateVariableNames[13]="DcaBachtoPrimVertex";
2989  fCandidateVariableNames[14]="DecayLengthV0";
2990  fCandidateVariableNames[15]="CosPointingAngleV0";
2991  fCandidateVariableNames[16]="XiCharge";
2992  fCandidateVariableNames[17]="XiPdgCode";
2993  fCandidateVariableNames[18]="XiMotherPdgCode";
2994  fCandidateVariableNames[19]="mcxipx";
2995  fCandidateVariableNames[20]="mcxipy";
2996  fCandidateVariableNames[21]="mcxipz";
2997  fCandidateVariableNames[22]="labcasc";
2998  fCandidateVariableNames[23]="RunNumber";
2999  fCandidateVariableNames[24]="PrimVertZ";
3000  fCandidateVariableNames[25]="EvNumber";
3001 
3002  for (Int_t ivar=0; ivar<nVar; ivar++) {
3003  fCascVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateCascVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
3004  }
3005 
3006  return;
3007 }
3008 
3010 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillCascROOTObjects(AliAODcascade *casc, AliAODEvent *event, TClonesArray *mcArray)
3011 {
3012  //
3013  // Fill histograms or tree depending on fWriteVariableTree (tree not implemented yet)
3014  //
3015  if(!casc) return;
3016  AliAODTrack *cptrack = (AliAODTrack*)(casc->GetDaughter(0));
3017  AliAODTrack *cntrack = (AliAODTrack*)(casc->GetDaughter(1));
3018  AliAODTrack *cbtrack = (AliAODTrack*)(casc->GetDecayVertexXi()->GetDaughter(0));
3019  if(!cptrack) return;
3020  if(!cntrack) return;
3021  if(!cbtrack) return;
3022 
3023  fHistoXiMassvsPt->Fill(casc->MassXi(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
3024  fHistoOmegaMassvsPt->Fill(casc->MassOmega(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
3025  Double_t momxix = casc->MomXiX();
3026  Double_t momxiy = casc->MomXiY();
3027  Double_t phi_alice = atan2(momxiy,momxix);
3028  if(phi_alice<0.) phi_alice += 2 * M_PI;
3029  fHistoXiQovPtvsPhi->Fill(phi_alice,(Double_t)casc->ChargeXi()/sqrt(momxix*momxix+momxiy*momxiy));
3030 
3031  Double_t mlamPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
3032  Double_t posVtx[3] = {0.,0.,0.};
3033  fVtx1->GetXYZ(posVtx);
3034  Double_t ptotlam = TMath::Sqrt(pow(casc->Px(),2)+pow(casc->Py(),2)+pow(casc->Pz(),2));
3035  Double_t dl = sqrt(pow(casc->DecayVertexV0X()-posVtx[0],2)+pow(casc->DecayVertexV0Y()-posVtx[1],2)+pow(casc->DecayVertexV0Z()-posVtx[2],2));
3036  Double_t v0propdl = dl*mlamPDG/ptotlam;
3037  if(fAnalCuts->IsPeakRegion(casc)){
3038  fHistoLambdaPtvsDl->Fill(casc->Pt(),v0propdl);
3039  fHistoLambdaPtvsDR->Fill(casc->Pt(),dl);
3040  }
3041  if(fAnalCuts->IsSideBand(casc)){
3042  fHistoLambdaPtvsDlSide->Fill(casc->Pt(),v0propdl);
3043  fHistoLambdaPtvsDRSide->Fill(casc->Pt(),dl);
3044  }
3045 
3046  Int_t xipdgcode = -9999;
3047  Int_t ximotherpdgcode = -9999;
3048  Float_t mcxipx = -9999.;
3049  Float_t mcxipy = -9999.;
3050  Float_t mcxipz = -9999.;
3051  Int_t labcasc = -9999.;
3052  if(fUseMCInfo){
3053  Int_t pdgDgcasc[2]={211,3122};
3054  Int_t pdgDgv0[2]={2212,211};
3055  labcasc = MatchToMCCascade(casc,3312,pdgDgcasc,pdgDgv0,mcArray); // the cascade
3056  if(labcasc<0) return;
3057 
3058  fHistoXiMassvsPtMCS->Fill(casc->MassXi(),sqrt(casc->MomXiX()*casc->MomXiX()+casc->MomXiY()*casc->MomXiY()));
3059 
3060  AliAODMCParticle *mccasctrk = (AliAODMCParticle*)mcArray->At(labcasc);
3061  if(!mccasctrk) return;
3062 
3063  fHistoLambdaPtvsDlMCS->Fill(casc->Pt(),v0propdl);
3064  fHistoLambdaPtvsDRMCS->Fill(casc->Pt(),dl);
3065 
3066  Bool_t hfxi_flag = kFALSE;
3067  xipdgcode = mccasctrk->GetPdgCode();
3068  Int_t labcascmother = mccasctrk->GetMother();
3069  if(labcascmother>=0){
3070  AliAODMCParticle *mothercasc = (AliAODMCParticle*)mcArray->At(labcascmother);
3071  if(mothercasc){
3072  ximotherpdgcode = mothercasc->GetPdgCode();
3073  if(abs(ximotherpdgcode)>4000&&abs(ximotherpdgcode)<4400){
3074  hfxi_flag = kTRUE;
3075  }
3076  }
3077  }
3078  if(!hfxi_flag) return;
3079  mcxipx = mccasctrk->Px();
3080  mcxipy = mccasctrk->Py();
3081  mcxipz = mccasctrk->Pz();
3082  }
3083 
3084 
3085  Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
3086  xyz[0]=casc->DecayVertexXiX();
3087  xyz[1]=casc->DecayVertexXiY();
3088  xyz[2]=casc->DecayVertexXiZ();
3089  pxpypz[0]=casc->MomXiX();
3090  pxpypz[1]=casc->MomXiY();
3091  pxpypz[2]=casc->MomXiZ();
3092  casc->GetCovarianceXYZPxPyPz(cv);
3093  sign=casc->ChargeXi();
3094  AliExternalTrackParam *trackCasc = new AliExternalTrackParam(xyz,pxpypz,cv,sign);
3095  trackCasc->PropagateToDCA(fVtx1,fBzkG,kVeryBig);
3096  Double_t momcasc_new[3]={-9999,-9999,-9999.};
3097  trackCasc->GetPxPyPz(momcasc_new);
3098  delete trackCasc;
3099 
3100  if(fDoEventMixing){
3101  Int_t nextRes( nextResVec[fPoolIndex] );
3102  TLorentzVector *lv = new TLorentzVector();
3103  lv->SetXYZM(momcasc_new[0],momcasc_new[1],momcasc_new[2],casc->MassXi());
3104  Double_t xyzR125pr[3]={9999.,9999.,9999.};
3105  Double_t xyzR125pi[3]={9999.,9999.,9999.};
3106  Double_t xyzR125bach[3]={9999.,9999.,9999.};
3107  if(casc->ChargeXi()>0){
3108  m_ReservoirL1[fPoolIndex][nextRes].push_back(lv);
3109  if(fAnalCuts->GetCuts()[2]>0. || fAnalCuts->GetCuts()[3]>0.){
3110  fAnalCuts->SetSftPosR125(cptrack,fBzkG,posVtx,xyzR125pr);
3111  fAnalCuts->SetSftPosR125(cntrack,fBzkG,posVtx,xyzR125pi);
3112  fAnalCuts->SetSftPosR125(cbtrack,fBzkG,posVtx,xyzR125bach);
3113  }
3114  TVector *varvec = new TVector(9);
3115  (*varvec)[0] = xyzR125pr[0];
3116  (*varvec)[1] = xyzR125pr[1];
3117  (*varvec)[2] = xyzR125pr[2];
3118  (*varvec)[3] = xyzR125pi[0];
3119  (*varvec)[4] = xyzR125pi[1];
3120  (*varvec)[5] = xyzR125pi[2];
3121  (*varvec)[6] = xyzR125bach[0];
3122  (*varvec)[7] = xyzR125bach[1];
3123  (*varvec)[8] = xyzR125bach[2];
3124  m_ReservoirVarsL1[fPoolIndex][nextRes].push_back(varvec);
3125  }else{
3126  m_ReservoirL2[fPoolIndex][nextRes].push_back(lv);
3127  if(fAnalCuts->GetCuts()[2]>0. || fAnalCuts->GetCuts()[3]>0.){
3128  fAnalCuts->SetSftPosR125(cntrack,fBzkG,posVtx,xyzR125pr);
3129  fAnalCuts->SetSftPosR125(cptrack,fBzkG,posVtx,xyzR125pi);
3130  fAnalCuts->SetSftPosR125(cbtrack,fBzkG,posVtx,xyzR125bach);
3131  }
3132  TVector *varvec = new TVector(9);
3133  (*varvec)[0] = xyzR125pr[0];
3134  (*varvec)[1] = xyzR125pr[1];
3135  (*varvec)[2] = xyzR125pr[2];
3136  (*varvec)[3] = xyzR125pi[0];
3137  (*varvec)[4] = xyzR125pi[1];
3138  (*varvec)[5] = xyzR125pi[2];
3139  (*varvec)[6] = xyzR125bach[0];
3140  (*varvec)[7] = xyzR125bach[1];
3141  (*varvec)[8] = xyzR125bach[2];
3142  m_ReservoirVarsL2[fPoolIndex][nextRes].push_back(varvec);
3143  }
3144  }
3145 
3146  if(!fWriteEachVariableTree) return;
3147 
3148  for(Int_t i=0;i<26;i++){
3149  fCandidateCascVariables[i] = -9999.;
3150  }
3151  for(Int_t i=0;i<16;i++){
3152  fCandidateSingleVariables[i] = -9999.;
3153  }
3154  fCandidateSingleVariables[ 0] = momcasc_new[0];
3155  fCandidateSingleVariables[ 1] = momcasc_new[1];
3156  fCandidateSingleVariables[ 2] = momcasc_new[2];
3157  fCandidateSingleVariables[ 3] = casc->ChargeXi();
3158  fCandidateSingleVariables[ 4] = casc->MassXi();
3164  if(fUseEventPlane==4){
3165  //Double_t evplane = GetEventPlaneForCandidate(0,v0,event->GetEventplane(),fQ,fQSub1,fQSub2); // remove autocorrelations
3166  //fCandidateSingleVariables[10] = evplane;
3168 
3169  }else{
3171  }
3172  fCandidateSingleVariables[11] = casc->DecayLengthXi(posVtx[0],posVtx[1],posVtx[2]);
3173  fCandidateSingleVariables[12] = cbtrack->GetID();
3174  fCandidateSingleVariables[13] = cptrack->GetID();
3175  fCandidateSingleVariables[14] = cntrack->GetID();
3176  fCandidateSingleVariables[15] = casc->DecayLengthV0();
3177 
3178  fSingleVariablesTree->Fill();
3179 
3180 // fCandidateCascVariables[ 0] = fCentrality;
3181 // fCandidateCascVariables[ 1] = casc->MassXi();
3182 // fCandidateCascVariables[ 2] = momcasc_new[0];//casc->MomXiX();
3183 // fCandidateCascVariables[ 3] = momcasc_new[1];//casc->MomXiY();
3184 // fCandidateCascVariables[ 4] = momcasc_new[2];//casc->MomXiZ();
3185 // if(casc->ChargeXi()<0)
3186 // fCandidateCascVariables[ 5] = casc->MassLambda();
3187 // else
3188 // fCandidateCascVariables[ 5] = casc->MassAntiLambda();
3189 //
3190 // fCandidateCascVariables[ 6] = casc->DcaXiDaughters();
3191 // fCandidateCascVariables[ 7] = casc->DcaV0Daughters();
3192 // fCandidateCascVariables[ 8] = casc->DecayLengthXi(posVtx[0],posVtx[1],posVtx[2]);
3193 // fCandidateCascVariables[ 9] = casc->CosPointingAngleXi(posVtx[0],posVtx[1],posVtx[2]);
3194 // fCandidateCascVariables[10] = casc->DcaV0ToPrimVertex();
3195 // fCandidateCascVariables[11] = casc->DcaPosToPrimVertex();
3196 // fCandidateCascVariables[12] = casc->DcaNegToPrimVertex();
3197 // fCandidateCascVariables[13] = casc->DcaBachToPrimVertex();
3198 // fCandidateCascVariables[14] = casc->DecayLengthV0();
3199 // fCandidateCascVariables[15] = casc->CosPointingAngle(casc->GetDecayVertexXi());
3200 // fCandidateCascVariables[16] = casc->ChargeXi();
3201 // fCandidateCascVariables[17] = xipdgcode;
3202 // fCandidateCascVariables[18] = ximotherpdgcode;
3203 // fCandidateCascVariables[19] = mcxipx;
3204 // fCandidateCascVariables[20] = mcxipy;
3205 // fCandidateCascVariables[21] = mcxipz;
3206 // fCandidateCascVariables[22] = labcasc;
3207 // fCandidateCascVariables[23] = fRunNumber;
3208 // fCandidateCascVariables[24] = fVtxZ;
3209 // fCandidateCascVariables[25] = fEvNumberCounter;
3210 //
3211 //
3212 // fCascVariablesTree->Fill();
3213 }
3216 {
3217  //
3218  // Define electron tree variables
3219  //
3220 
3221  const char* nameoutput = GetOutputSlot(7)->GetContainer()->GetName();
3222  fMCVariablesTree = new TTree(nameoutput,"MC variables tree");
3223  Int_t nVar = 16;
3225  TString * fCandidateVariableNames = new TString[nVar];
3226 
3227  fCandidateVariableNames[ 0]="Centrality";
3228  fCandidateVariableNames[ 1]="DecayType";
3229  fCandidateVariableNames[ 2]="XicPx";
3230  fCandidateVariableNames[ 3]="XicPy";
3231  fCandidateVariableNames[ 4]="XicPz";
3232  fCandidateVariableNames[ 5]="ElePx";
3233  fCandidateVariableNames[ 6]="ElePy";
3234  fCandidateVariableNames[ 7]="ElePz";
3235  fCandidateVariableNames[ 8]="CascPx";
3236  fCandidateVariableNames[ 9]="CascPy";
3237  fCandidateVariableNames[10]="CascPz";
3238  fCandidateVariableNames[11]="PdgCode";
3239  fCandidateVariableNames[12]="ElePdgCode";
3240  fCandidateVariableNames[13]="CascPdgCode";
3241  fCandidateVariableNames[14]="RunNumber";
3242  fCandidateVariableNames[15]="EvNumber";
3243 
3244  for (Int_t ivar=0; ivar<nVar; ivar++) {
3245  fMCVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateMCVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
3246  }
3247  return;
3248 }
3250 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillMCROOTObjects(AliAODMCParticle *mcpart, AliAODMCParticle *mcepart, AliAODMCParticle *mccascpart, Int_t decaytype)
3251 {
3252  //
3253  // Fill histograms or tree depending on fWriteMCVariableTree
3254  //
3255  if(!mcpart) return;
3256  if(!mcepart) return;
3257  if(!mccascpart) return;
3258 
3259  for(Int_t i=0;i<14;i++){
3260  fCandidateMCVariables[i] = -9999.;
3261  }
3262 
3264  fCandidateMCVariables[ 1] = decaytype;
3265  fCandidateMCVariables[ 2] = mcpart->Px();
3266  fCandidateMCVariables[ 3] = mcpart->Py();
3267  fCandidateMCVariables[ 4] = mcpart->Pz();
3268  fCandidateMCVariables[ 5] = mcepart->Px();
3269  fCandidateMCVariables[ 6] = mcepart->Py();
3270  fCandidateMCVariables[ 7] = mcepart->Pz();
3271  fCandidateMCVariables[ 8] = mccascpart->Px();
3272  fCandidateMCVariables[ 9] = mccascpart->Py();
3273  fCandidateMCVariables[10] = mccascpart->Pz();
3274  fCandidateMCVariables[11] = mcpart->GetPdgCode();
3275  fCandidateMCVariables[12] = mcepart->GetPdgCode();
3276  fCandidateMCVariables[13] = mccascpart->GetPdgCode();
3279 
3280  Double_t epx = mcepart->Px();
3281  Double_t epy = mcepart->Py();
3282  Double_t epz = mcepart->Pz();
3283  Double_t eE = sqrt(epx*epx+epy*epy+epz*epz+0.000511*0.000511);
3284  Double_t cascpx = mccascpart->Px();
3285  Double_t cascpy = mccascpart->Py();
3286  Double_t cascpz = mccascpart->Pz();
3287  Double_t cascE = sqrt(cascpx*cascpx+cascpy*cascpy+cascpz*cascpz+1.32171*1.32171);
3288 
3289  Double_t InvMassEleXi = sqrt(pow(eE+cascE,2)-pow(epx+cascpx,2)-pow(epy+cascpy,2)-pow(epz+cascpz,2));
3290 
3291  Double_t cont[4];
3292  cont[0] = InvMassEleXi;
3293  cont[1] = mcpart->Pt();
3294  cont[2] = 0.0;
3295  cont[3] = fCentrality;
3296  Double_t cont2[3];
3297  cont2[0] = InvMassEleXi;
3298  cont2[1] = mcepart->Pt();
3299  cont2[2] = fCentrality;
3300  Double_t cont_eleptvseta[3];
3301  cont_eleptvseta[0] = mcepart->Pt();
3302  cont_eleptvseta[1] = mcepart->Eta();
3303  cont_eleptvseta[2] = fCentrality;
3304  Double_t cont_eleptvsxipt[3];
3305  cont_eleptvsxipt[0] = mcepart->Pt();
3306  cont_eleptvsxipt[1] = mccascpart->Pt();
3307  cont_eleptvsxipt[2] = fCentrality;
3308  Double_t cont_eleptvsxiptvsxicpt[4];
3309  cont_eleptvsxiptvsxicpt[0] = mcepart->Pt();
3310  cont_eleptvsxiptvsxicpt[1] = mccascpart->Pt();
3311  cont_eleptvsxiptvsxicpt[2] = mcpart->Pt();
3312  cont_eleptvsxiptvsxicpt[3] = fCentrality;
3313 
3314  Double_t contmc[3];
3315  contmc[0] = mcpart->Pt();
3316  contmc[1] = mcpart->Y();
3317  contmc[2] = fCentrality;
3318  Double_t contmcele[3];
3319  contmcele[0] = mcepart->Pt();
3320  contmcele[1] = mcepart->Eta();
3321  contmcele[2] = fCentrality;
3322 
3323 
3324  AliESDtrackCuts *esdcuts = fAnalCuts->GetTrackCuts();
3326  esdcuts->GetEtaRange(etamin,etamax);
3327 
3328  if(decaytype==0){
3329  fHistoXicMCGen->Fill(contmc);
3330  if(mcpart->GetPdgCode()>0) fHistoXicMCGen1->Fill(contmc);//4132 is particle
3331  if(mcpart->GetPdgCode()<0) fHistoXicMCGen2->Fill(contmc);//-4132 is anti-particle
3332  fHistoXicElectronMCGen->Fill(contmcele);
3333  if(mcepart->GetPdgCode()<0) fHistoXicElectronMCGen1->Fill(contmcele);//-11 is positron
3334  if(mcepart->GetPdgCode()>0) fHistoXicElectronMCGen2->Fill(contmcele);//11 is electron
3335  fHistoEleXiMassMCGen->Fill(cont);
3336  if(fabs(mcepart->Eta())<etamax){
3337  fHistoEleXiMassvsElePtMCGen->Fill(cont2);
3338  if(mcepart->GetPdgCode()<0) fHistoEleXiMassvsElePtMCGen1->Fill(cont2);//-11 is positron
3339  if(mcepart->GetPdgCode()>0) fHistoEleXiMassvsElePtMCGen2->Fill(cont2);//11 is electron
3340  if(InvMassEleXi<2.5){
3341  fHistoElePtMCGen->Fill(mcepart->Pt(),fCentrality);
3342  fHistoElePtvsEtaMCGen->Fill(cont_eleptvseta);
3343  fHistoElePtvsXiPtMCGen->Fill(cont_eleptvsxipt);
3344  }
3345  }
3346  if(fabs(mcpart->Y())<0.7){
3347  if(InvMassEleXi<2.5){
3348  fHistoElePtvsXiPtMCXicGen->Fill(cont_eleptvsxipt);
3349  fHistoElePtvsXiPtvsXicPtMCGen->Fill(cont_eleptvsxiptvsxicpt);
3350  }
3351  }
3352  }else if(decaytype==10){
3353  fHistoXibMCGen->Fill(contmc);
3354  }
3355 
3357  fMCVariablesTree->Fill();
3358 }
3361 {
3362  //
3363  // Define mc gen electron tree variables
3364  //
3365 
3366  const char* nameoutput = GetOutputSlot(9)->GetContainer()->GetName();
3367  fMCEleVariablesTree = new TTree(nameoutput,"MC Ele variables tree");
3368  Int_t nVar = 8;
3370  TString * fCandidateVariableNames = new TString[nVar];
3371 
3372  fCandidateVariableNames[ 0]="Centrality";
3373  fCandidateVariableNames[ 1]="ElePx";
3374  fCandidateVariableNames[ 2]="ElePy";
3375  fCandidateVariableNames[ 3]="ElePz";
3376  fCandidateVariableNames[ 4]="ElePdgCode";
3377  fCandidateVariableNames[ 5]="EleMotherPdgCode";
3378  fCandidateVariableNames[ 6]="RunNumber";
3379  fCandidateVariableNames[ 7]="EvNumber";
3380 
3381  for (Int_t ivar=0; ivar<nVar; ivar++) {
3382  fMCEleVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateMCEleVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
3383  }
3384  return;
3385 }
3387 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillMCEleROOTObjects(AliAODMCParticle *mcepart, TClonesArray *mcArray)
3388 {
3389  //
3390  // Fill tree depending on fWriteMCVariableTree
3391  //
3392  if(!mcepart) return;
3393 
3394  Int_t pdgarray_ele[100], labelarray_ele[100], ngen_ele;
3395  GetMCDecayHistory(mcepart,mcArray,pdgarray_ele,labelarray_ele,ngen_ele);
3396  Bool_t ele_from_bottom = HaveBottomInHistory(pdgarray_ele);
3397  Bool_t ele_from_charm = HaveCharmInHistory(pdgarray_ele);
3398  Int_t semi_flag = FromSemileptonicDecays(pdgarray_ele);
3399 
3400  Double_t contmc[3];
3401  contmc[0] = mcepart->Pt();
3402  contmc[1] = mcepart->Eta();
3403  contmc[2] = fCentrality;
3404 
3405  if(semi_flag==1 && !ele_from_bottom){
3406  fHistoCharmElectronMCGen->Fill(contmc);
3407  }
3408  if(semi_flag==1 && ele_from_bottom){
3409  fHistoBottomElectronMCGen->Fill(contmc);
3410  }
3411  if(semi_flag==2 ){
3412  fHistoBottomElectronMCGen->Fill(contmc);
3413  }
3414 
3415 
3416  Bool_t hfe_flag = kFALSE;
3417  Int_t labemother = mcepart->GetMother();
3418  Int_t pdgmotherele = -9999;
3419  if(labemother>=0){
3420  AliAODMCParticle *motherele = (AliAODMCParticle*)mcArray->At(labemother);
3421  pdgmotherele = motherele->GetPdgCode();
3422  if(abs(pdgmotherele)>4000&&abs(pdgmotherele)<4400){
3423  hfe_flag = kTRUE;
3424  }
3425  }
3426  if(!hfe_flag) return;
3427 
3428  fHistoElectronMCGen->Fill(contmc);
3429 
3430  for(Int_t i=0;i<8;i++){
3431  fCandidateMCEleVariables[i] = -9999.;
3432  }
3433 
3435  fCandidateMCEleVariables[ 1] = mcepart->Px();
3436  fCandidateMCEleVariables[ 2] = mcepart->Py();
3437  fCandidateMCEleVariables[ 3] = mcepart->Pz();
3438  fCandidateMCEleVariables[ 4] = mcepart->GetPdgCode();
3439  fCandidateMCEleVariables[ 5] = pdgmotherele;
3442 
3443  // This function makes output too heavy (do not use if you have output size limitation)
3444  //if(fWriteMCVariableTree && fWriteEachVariableTree && mcepart->Pt()>0.4 && fabs(mcepart->Eta())<1.0)
3445  //fMCEleVariablesTree->Fill();
3446 }
3449 {
3450  //
3451  // Define Mc cascade tree variables
3452  //
3453 
3454  const char* nameoutput = GetOutputSlot(10)->GetContainer()->GetName();
3455  fMCCascVariablesTree = new TTree(nameoutput,"MC cascade variables tree");
3456  Int_t nVar = 8;
3458  TString * fCandidateVariableNames = new TString[nVar];
3459 
3460  fCandidateVariableNames[ 0]="Centrality";
3461  fCandidateVariableNames[ 1]="CascPx";
3462  fCandidateVariableNames[ 2]="CascPy";
3463  fCandidateVariableNames[ 3]="CascPz";
3464  fCandidateVariableNames[ 4]="CascPdgCode";
3465  fCandidateVariableNames[ 5]="CascMotherPdgCode";
3466  fCandidateVariableNames[ 6]="RunNumber";
3467  fCandidateVariableNames[ 7]="EvNumber";
3468 
3469  for (Int_t ivar=0; ivar<nVar; ivar++) {
3470  fMCCascVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateMCCascVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
3471  }
3472  return;
3473 }
3475 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillMCCascROOTObjects(AliAODMCParticle *mccascpart, TClonesArray *mcArray)
3476 {
3477  //
3478  // Fill histograms or tree depending on fWriteMCVariableTree
3479  //
3480  if(!mccascpart) return;
3481 
3482  for(Int_t i=0;i<8;i++){
3483  fCandidateMCCascVariables[i] = -9999.;
3484  }
3485 
3486  Bool_t hfxi_flag = kFALSE;
3487  Int_t labcascmother = mccascpart->GetMother();
3488  Int_t pdgmothercasc = -9999;
3489  if(labcascmother>=0){
3490  AliAODMCParticle *mothercasc = (AliAODMCParticle*)mcArray->At(labcascmother);
3491  if(mothercasc){
3492  pdgmothercasc = mothercasc->GetPdgCode();
3493  if(abs(pdgmothercasc)>4000&&abs(pdgmothercasc)<4400){
3494  hfxi_flag = kTRUE;
3495  }
3496  }
3497  }
3498  if(!hfxi_flag) return;
3499 
3500  Double_t contmc[3];
3501  contmc[0] = mccascpart->Pt();
3502  contmc[1] = mccascpart->Eta();
3503  contmc[2] = fCentrality;
3504  fHistoXiMCGen->Fill(contmc);
3505 
3507  fCandidateMCCascVariables[ 1] = mccascpart->Px();
3508  fCandidateMCCascVariables[ 2] = mccascpart->Py();
3509  fCandidateMCCascVariables[ 3] = mccascpart->Pz();
3510  fCandidateMCCascVariables[ 4] = mccascpart->GetPdgCode();
3511  fCandidateMCCascVariables[ 5] = pdgmothercasc;
3514 
3515  // This function makes output too heavy (do not use if you have output size limitation)
3516  //if(fWriteMCVariableTree && fWriteEachVariableTree && mccascpart->Pt()>0.4 && fabs(mccascpart->Eta())<1.0)
3517  //fMCCascVariablesTree->Fill();
3518 }
3519 
3522  //
3523  // This is to define general histograms
3524  //
3525 
3526  fCEvents = new TH1F("fCEvents","conter",18,-0.5,17.5);
3527  fCEvents->SetStats(kTRUE);
3528  fCEvents->GetXaxis()->SetBinLabel(1,"X1");
3529  fCEvents->GetXaxis()->SetBinLabel(2,"Analyzed events");
3530  fCEvents->GetXaxis()->SetBinLabel(3,"AliAODVertex exists");
3531  fCEvents->GetXaxis()->SetBinLabel(4,"TriggerOK");
3532  fCEvents->GetXaxis()->SetBinLabel(5,"IsEventSelected");
3533  fCEvents->GetXaxis()->SetBinLabel(6,"CascadesHF exists");
3534  fCEvents->GetXaxis()->SetBinLabel(7,"MCarray exists");
3535  fCEvents->GetXaxis()->SetBinLabel(8,"MCheader exists");
3536  fCEvents->GetXaxis()->SetBinLabel(9,"triggerClass!=CINT1");
3537  fCEvents->GetXaxis()->SetBinLabel(10,"triggerMask!=kAnyINT");
3538  fCEvents->GetXaxis()->SetBinLabel(11,"triggerMask!=kAny");
3539  fCEvents->GetXaxis()->SetBinLabel(12,"vtxTitle.Contains(Z)");
3540  fCEvents->GetXaxis()->SetBinLabel(13,"vtxTitle.Contains(3D)");
3541  fCEvents->GetXaxis()->SetBinLabel(14,"vtxTitle.Doesn'tContain(Z-3D)");
3542  fCEvents->GetXaxis()->SetBinLabel(15,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
3543  fCEvents->GetXaxis()->SetBinLabel(16,"!IsEventSelected");
3544  fCEvents->GetXaxis()->SetBinLabel(17,"triggerMask!=kAnyINT || triggerClass!=CINT1");
3545  fCEvents->GetXaxis()->SetBinLabel(18,Form("zVtxMC<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
3546  //fCEvents->GetXaxis()->SetTitle("");
3547  fCEvents->GetYaxis()->SetTitle("counts");
3548 
3549  fHTrigger = new TH1F("fHTrigger","counter",18,-0.5,17.5);
3550  fHTrigger->SetStats(kTRUE);
3551  fHTrigger->GetXaxis()->SetBinLabel(1,"X1");
3552  fHTrigger->GetXaxis()->SetBinLabel(2,"kMB");
3553  fHTrigger->GetXaxis()->SetBinLabel(3,"kSemiCentral");
3554  fHTrigger->GetXaxis()->SetBinLabel(4,"kCentral");
3555  fHTrigger->GetXaxis()->SetBinLabel(5,"kINT7");
3556  fHTrigger->GetXaxis()->SetBinLabel(6,"kEMC7");
3557  //fHTrigger->GetXaxis()->SetBinLabel(7,"Space");
3558  fHTrigger->GetXaxis()->SetBinLabel(8,"kMB|kSemiCentral|kCentral");
3559  fHTrigger->GetXaxis()->SetBinLabel(9,"kINT7|kEMC7");
3560  fHTrigger->GetXaxis()->SetBinLabel(11,"kMB&kSemiCentral");
3561  fHTrigger->GetXaxis()->SetBinLabel(12,"kMB&kCentral");
3562  fHTrigger->GetXaxis()->SetBinLabel(13,"kINT7&kEMC7");
3563 
3564  fHCentrality = new TH1F("fHCentrality","conter",100,0.,100.);
3565  fHEventPlane = new TH1F("fHEventPlane","conter",100,-3.14,3.14);
3566  fHNTrackletvsZ = new TH2F("fHNTrackletvsZ","N_{tracklet} vs z",30,-15.,15.,120,-0.5,119.5);
3567  fHNTrackletCorrvsZ = new TH2F("fHNTrackletCorrvsZ","N_{tracklet} vs z",30,-15.,15.,120,-0.5,119.5);
3568 
3569  fOutput->Add(fCEvents);
3570  fOutput->Add(fHTrigger);
3571  fOutput->Add(fHCentrality);
3572  fOutput->Add(fHEventPlane);
3573  fOutput->Add(fHNTrackletvsZ);
3575 
3576  return;
3577 }
3578 //__________________________________________________________________________
3580 {
3581  //
3582  // Define analyis histograms
3583  //
3584 
3585  //------------------------------------------------
3586  // Basic histogram
3587  //------------------------------------------------
3588  Int_t bins_base[4]= {22 ,100 , 100 ,10};
3589  Double_t xmin_base[4]={1.3,0 , -0.5 ,0.00};
3590  Double_t xmax_base[4]={5.7,20. , 0.5 ,100};
3591 
3592  fHistoEleXiMass = new THnSparseF("fHistoEleXiMass","",4,bins_base,xmin_base,xmax_base);
3594  fHistoEleXiMassRS = new THnSparseF("fHistoEleXiMassRS","",4,bins_base,xmin_base,xmax_base);
3596  fHistoEleXiMassWS = new THnSparseF("fHistoEleXiMassWS","",4,bins_base,xmin_base,xmax_base);
3598  fHistoEleXiMassRSMix = new THnSparseF("fHistoEleXiMassRSMix","",4,bins_base,xmin_base,xmax_base);
3600  fHistoEleXiMassWSMix = new THnSparseF("fHistoEleXiMassWSMix","",4,bins_base,xmin_base,xmax_base);
3602  fHistoEleXiMassRSSide = new THnSparseF("fHistoEleXiMassRSSide","",4,bins_base,xmin_base,xmax_base);
3604  fHistoEleXiMassWSSide = new THnSparseF("fHistoEleXiMassWSSide","",4,bins_base,xmin_base,xmax_base);
3606  fHistoEleXiMassRS1 = new THnSparseF("fHistoEleXiMassRS1","",4,bins_base,xmin_base,xmax_base);
3608  fHistoEleXiMassWS1 = new THnSparseF("fHistoEleXiMassWS1","",4,bins_base,xmin_base,xmax_base);
3610  fHistoEleXiMassRSMix1 = new THnSparseF("fHistoEleXiMassRSMix1","",4,bins_base,xmin_base,xmax_base);
3612  fHistoEleXiMassWSMix1 = new THnSparseF("fHistoEleXiMassWSMix1","",4,bins_base,xmin_base,xmax_base);
3614  fHistoEleXiMassRSSide1 = new THnSparseF("fHistoEleXiMassRSSide1","",4,bins_base,xmin_base,xmax_base);
3616  fHistoEleXiMassWSSide1 = new THnSparseF("fHistoEleXiMassWSSide1","",4,bins_base,xmin_base,xmax_base);
3618  fHistoEleXiMassRS2 = new THnSparseF("fHistoEleXiMassRS2","",4,bins_base,xmin_base,xmax_base);
3620  fHistoEleXiMassWS2 = new THnSparseF("fHistoEleXiMassWS2","",4,bins_base,xmin_base,xmax_base);
3622  fHistoEleXiMassRSMix2 = new THnSparseF("fHistoEleXiMassRSMix2","",4,bins_base,xmin_base,xmax_base);
3624  fHistoEleXiMassWSMix2 = new THnSparseF("fHistoEleXiMassWSMix2","",4,bins_base,xmin_base,xmax_base);
3626  fHistoEleXiMassRSSide2 = new THnSparseF("fHistoEleXiMassRSSide2","",4,bins_base,xmin_base,xmax_base);
3628  fHistoEleXiMassWSSide2 = new THnSparseF("fHistoEleXiMassWSSide2","",4,bins_base,xmin_base,xmax_base);
3630 
3631  fHistoEleXiMassRSAway = new THnSparseF("fHistoEleXiMassRSAway","",4,bins_base,xmin_base,xmax_base);
3633  fHistoEleXiMassWSAway = new THnSparseF("fHistoEleXiMassWSAway","",4,bins_base,xmin_base,xmax_base);
3635  fHistoEleXiMassRSMixAway = new THnSparseF("fHistoEleXiMassRSMixAway","",4,bins_base,xmin_base,xmax_base);
3637  fHistoEleXiMassWSMixAway = new THnSparseF("fHistoEleXiMassWSMixAway","",4,bins_base,xmin_base,xmax_base);
3639  fHistoEleXiMassRSSideAway = new THnSparseF("fHistoEleXiMassRSSideAway","",4,bins_base,xmin_base,xmax_base);
3641  fHistoEleXiMassWSSideAway = new THnSparseF("fHistoEleXiMassWSSideAway","",4,bins_base,xmin_base,xmax_base);
3643  fHistoEleXiMassRS1Away = new THnSparseF("fHistoEleXiMassRS1Away","",4,bins_base,xmin_base,xmax_base);
3645  fHistoEleXiMassWS1Away = new THnSparseF("fHistoEleXiMassWS1Away","",4,bins_base,xmin_base,xmax_base);
3647  fHistoEleXiMassRSMix1Away = new THnSparseF("fHistoEleXiMassRSMix1Away","",4,bins_base,xmin_base,xmax_base);
3649  fHistoEleXiMassWSMix1Away = new THnSparseF("fHistoEleXiMassWSMix1Away","",4,bins_base,xmin_base,xmax_base);
3651  fHistoEleXiMassRSSide1Away = new THnSparseF("fHistoEleXiMassRSSide1Away","",4,bins_base,xmin_base,xmax_base);
3653  fHistoEleXiMassWSSide1Away = new THnSparseF("fHistoEleXiMassWSSide1Away","",4,bins_base,xmin_base,xmax_base);
3655  fHistoEleXiMassRS2Away = new THnSparseF("fHistoEleXiMassRS2Away","",4,bins_base,xmin_base,xmax_base);
3657  fHistoEleXiMassWS2Away = new THnSparseF("fHistoEleXiMassWS2Away","",4,bins_base,xmin_base,xmax_base);
3659  fHistoEleXiMassRSMix2Away = new THnSparseF("fHistoEleXiMassRSMix2Away","",4,bins_base,xmin_base,xmax_base);
3661  fHistoEleXiMassWSMix2Away = new THnSparseF("fHistoEleXiMassWSMix2Away","",4,bins_base,xmin_base,xmax_base);
3663  fHistoEleXiMassRSSide2Away = new THnSparseF("fHistoEleXiMassRSSide2Away","",4,bins_base,xmin_base,xmax_base);
3665  fHistoEleXiMassWSSide2Away = new THnSparseF("fHistoEleXiMassWSSide2Away","",4,bins_base,xmin_base,xmax_base);
3667 
3668  Int_t bins_base_elept[3]= {10 ,100 ,10};
3669  Double_t xmin_base_elept[3]={1.3,0 ,0.00};
3670  Double_t xmax_base_elept[3]={3.3,10. ,100};
3671 
3672  fHistoEleXiMassvsElePtRS = new THnSparseF("fHistoEleXiMassvsElePtRS","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3674  fHistoEleXiMassvsElePtWS = new THnSparseF("fHistoEleXiMassvsElePtWS","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3676  fHistoEleXiMassvsElePtRSMix = new THnSparseF("fHistoEleXiMassvsElePtRSMix","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3678  fHistoEleXiMassvsElePtWSMix = new THnSparseF("fHistoEleXiMassvsElePtWSMix","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3680  fHistoEleXiMassvsElePtRSSide = new THnSparseF("fHistoEleXiMassvsElePtRSSide","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3682  fHistoEleXiMassvsElePtWSSide = new THnSparseF("fHistoEleXiMassvsElePtWSSide","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3684  fHistoEleXiMassvsElePtRS1 = new THnSparseF("fHistoEleXiMassvsElePtRS1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3686  fHistoEleXiMassvsElePtWS1 = new THnSparseF("fHistoEleXiMassvsElePtWS1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3688  fHistoEleXiMassvsElePtRSMix1 = new THnSparseF("fHistoEleXiMassvsElePtRSMix1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3690  fHistoEleXiMassvsElePtWSMix1 = new THnSparseF("fHistoEleXiMassvsElePtWSMix1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3692  fHistoEleXiMassvsElePtRSSide1 = new THnSparseF("fHistoEleXiMassvsElePtRSSide1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3694  fHistoEleXiMassvsElePtWSSide1 = new THnSparseF("fHistoEleXiMassvsElePtWSSide1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3696  fHistoEleXiMassvsElePtRS2 = new THnSparseF("fHistoEleXiMassvsElePtRS2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3698  fHistoEleXiMassvsElePtWS2 = new THnSparseF("fHistoEleXiMassvsElePtWS2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3700  fHistoEleXiMassvsElePtRSMix2 = new THnSparseF("fHistoEleXiMassvsElePtRSMix2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3702  fHistoEleXiMassvsElePtWSMix2 = new THnSparseF("fHistoEleXiMassvsElePtWSMix2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3704  fHistoEleXiMassvsElePtRSSide2 = new THnSparseF("fHistoEleXiMassvsElePtRSSide2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3706  fHistoEleXiMassvsElePtWSSide2 = new THnSparseF("fHistoEleXiMassvsElePtWSSide2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3708 
3709  fHistoElePtRS=new TH2F("fHistoElePtRS","Right-sign e pt",100,0.,10.,10,0.,100.);
3710  fOutputAll->Add(fHistoElePtRS);
3711  fHistoElePtWS=new TH2F("fHistoElePtWS","Wrong-sign e pt",100,0.,10.,10,0.,100.);
3712  fOutputAll->Add(fHistoElePtWS);
3713  fHistoElePtRSMix=new TH2F("fHistoElePtRSMix","Right-sign e pt",100,0.,10.,10,0.,100.);
3715  fHistoElePtWSMix=new TH2F("fHistoElePtWSMix","Wrong-sign e pt",100,0.,10.,10,0.,100.);
3717 
3718  fHistoEleXiMassMCS = new THnSparseF("fHistoEleXiMassMCS","",4,bins_base,xmin_base,xmax_base);
3720  fHistoEleXiMassMCS1 = new THnSparseF("fHistoEleXiMassMCS1","",4,bins_base,xmin_base,xmax_base);
3722  fHistoEleXiMassMCS2 = new THnSparseF("fHistoEleXiMassMCS2","",4,bins_base,xmin_base,xmax_base);
3724  fHistoEleXiMassXibMCS = new THnSparseF("fHistoEleXiMassXibMCS","",4,bins_base,xmin_base,xmax_base);
3726  fHistoEleXiMassXibMCS1 = new THnSparseF("fHistoEleXiMassXibMCS1","",4,bins_base,xmin_base,xmax_base);
3728  fHistoEleXiMassXibMCS2 = new THnSparseF("fHistoEleXiMassXibMCS2","",4,bins_base,xmin_base,xmax_base);
3730  fHistoEleXiMassPromptMCS = new THnSparseF("fHistoEleXiMassPromptMCS","",4,bins_base,xmin_base,xmax_base);
3732  fHistoEleXiMassPromptMCS1 = new THnSparseF("fHistoEleXiMassPromptMCS1","",4,bins_base,xmin_base,xmax_base);
3734  fHistoEleXiMassPromptMCS2 = new THnSparseF("fHistoEleXiMassPromptMCS2","",4,bins_base,xmin_base,xmax_base);
3736  fHistoEleXiMassBFeeddownMCS = new THnSparseF("fHistoEleXiMassBFeeddownMCS","",4,bins_base,xmin_base,xmax_base);
3738  fHistoEleXiMassBFeeddownMCS1 = new THnSparseF("fHistoEleXiMassBFeeddownMCS1","",4,bins_base,xmin_base,xmax_base);
3740  fHistoEleXiMassBFeeddownMCS2 = new THnSparseF("fHistoEleXiMassBFeeddownMCS2","",4,bins_base,xmin_base,xmax_base);
3742  fHistoEleXiMassMCGen = new THnSparseF("fHistoEleXiMassMCGen","",4,bins_base,xmin_base,xmax_base);
3744  fHistoEleXiMassvsElePtMCS = new THnSparseF("fHistoEleXiMassvsElePtMCS","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3746  fHistoEleXiMassvsElePtMCGen = new THnSparseF("fHistoEleXiMassvsElePtMCGen","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3748  fHistoEleXiMassvsElePtMCS1 = new THnSparseF("fHistoEleXiMassvsElePtMCS1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3750  fHistoEleXiMassvsElePtMCGen1 = new THnSparseF("fHistoEleXiMassvsElePtMCGen1","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3752  fHistoEleXiMassvsElePtMCS2 = new THnSparseF("fHistoEleXiMassvsElePtMCS2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3754  fHistoEleXiMassvsElePtMCGen2 = new THnSparseF("fHistoEleXiMassvsElePtMCGen2","",3,bins_base_elept,xmin_base_elept,xmax_base_elept);
3756  fHistoElePtMCS=new TH2F("fHistoElePtMCS","MC S e pt",100,0.,10.,10,0.,100.);
3757  fOutputAll->Add(fHistoElePtMCS);
3758  fHistoElePtMCGen=new TH2F("fHistoElePtMCGen","MC Gen e pt",100,0.,10.,10,0.,100.);
3760 
3761  Int_t bins_eleptvseta[3]= {50,20 ,10};
3762  Double_t xmin_eleptvseta[3]={0.,-1. ,0.0};
3763  Double_t xmax_eleptvseta[3]={5.,1. ,100};
3764 
3765  fHistoElePtvsEtaRS = new THnSparseF("fHistoElePtvsEtaRS","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3767  fHistoElePtvsEtaWS = new THnSparseF("fHistoElePtvsEtaWS","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3769  fHistoElePtvsEtaRSMix = new THnSparseF("fHistoElePtvsEtaRSMix","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3771  fHistoElePtvsEtaWSMix = new THnSparseF("fHistoElePtvsEtaWSMix","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3773  fHistoElePtvsEtaMCS = new THnSparseF("fHistoElePtvsEtaMCS","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3775  fHistoElePtvsEtaMCGen = new THnSparseF("fHistoElePtvsEtaMCGen","",3,bins_eleptvseta,xmin_eleptvseta,xmax_eleptvseta);
3777 
3778  Int_t bins_eleptvsxipt[3]= {50,20 ,10};
3779  Double_t xmin_eleptvsxipt[3]={0.,0. ,0.0};
3780  Double_t xmax_eleptvsxipt[3]={5.,5. ,100};
3781 
3782  fHistoElePtvsXiPtRS = new THnSparseF("fHistoElePtvsXiPtRS","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3784  fHistoElePtvsXiPtWS = new THnSparseF("fHistoElePtvsXiPtWS","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3786  fHistoElePtvsXiPtRSMix = new THnSparseF("fHistoElePtvsXiPtRSMix","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3788  fHistoElePtvsXiPtWSMix = new THnSparseF("fHistoElePtvsXiPtWSMix","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3790  fHistoElePtvsXiPtMCS = new THnSparseF("fHistoElePtvsXiPtMCS","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3792  fHistoElePtvsXiPtMCGen = new THnSparseF("fHistoElePtvsXiPtMCGen","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3794  fHistoElePtvsXiPtMCXicGen = new THnSparseF("fHistoElePtvsXiPtMCXicGen","",3,bins_eleptvsxipt,xmin_eleptvsxipt,xmax_eleptvsxipt);
3796 
3797  Int_t bins_eleptvsxiptvsxicpt[4]= {50,20,10,10};
3798  Double_t xmin_eleptvsxiptvsxicpt[4]={0.,0.,0.,0.0};
3799  Double_t xmax_eleptvsxiptvsxicpt[4]={5.,5.,10.,100};
3800  fHistoElePtvsXiPtvsXicPtMCS = new THnSparseF("fHistoElePtvsXiPtvsXicPtMCS","",4,bins_eleptvsxiptvsxicpt,xmin_eleptvsxiptvsxicpt,xmax_eleptvsxiptvsxicpt);
3802  fHistoElePtvsXiPtvsXicPtMCGen = new THnSparseF("fHistoElePtvsXiPtvsXicPtMCGen","",4,bins_eleptvsxiptvsxicpt,xmin_eleptvsxiptvsxicpt,xmax_eleptvsxiptvsxicpt);
3804 
3805  Int_t bins_eleptvsd0[3]= {50 ,50 ,10};
3806  Double_t xmin_eleptvsd0[3]={0.,-0.2 ,0.0};
3807  Double_t xmax_eleptvsd0[3]={5.,0.2 ,100};
3808 
3809  fHistoElePtvsd0RS = new THnSparseF("fHistoElePtvsd0RS","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3811  fHistoElePtvsd0WS = new THnSparseF("fHistoElePtvsd0WS","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3813  fHistoElePtvsd0RSMix = new THnSparseF("fHistoElePtvsd0RSMix","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3815  fHistoElePtvsd0WSMix = new THnSparseF("fHistoElePtvsd0WSMix","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3817  fHistoElePtvsd0MCS = new THnSparseF("fHistoElePtvsd0MCS","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3819  fHistoElePtvsd0PromptMCS = new THnSparseF("fHistoElePtvsd0PromptMCS","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3821  fHistoElePtvsd0BFeeddownMCS = new THnSparseF("fHistoElePtvsd0BFeeddownMCS","",3,bins_eleptvsd0,xmin_eleptvsd0,xmax_eleptvsd0);
3823 
3824  //------------------------------------------------
3825  // checking histograms
3826  //------------------------------------------------
3827  fHistoBachPt = new TH1F("fHistoBachPt","Bachelor p_{T}",100,0.0,5.0);
3828  fOutputAll->Add(fHistoBachPt);
3829  fHistoBachPtMCS = new TH1F("fHistoBachPtMCS","Bachelor p_{T}",100,0.0,5.0);
3831  fHistoBachPtMCGen = new TH1F("fHistoBachPtMCGen","Bachelor p_{T}",100,0.0,5.0);
3833  fHistod0Bach = new TH1F("fHistod0Bach","Bachelor d_{0}",100,-0.5,0.5);
3834  fOutputAll->Add(fHistod0Bach);
3835  fHistoXiMassvsPt=new TH2F("fHistoXiMassvsPt","Xi mass",100,1.32-0.05,1.32+0.05,20,0.,10.);
3837  fHistoXiMassvsPtMCS=new TH2F("fHistoXiMassvsPtMCS","Xi mass",100,1.32-0.05,1.32+0.05,20,0.,10.);
3839  fHistoXiMassvsPtMCGen=new TH2F("fHistoXiMassvsPtMCGen","Xi mass",100,1.32-0.05,1.32+0.05,20,0.,10.);
3841  fHistoOmegaMassvsPt=new TH2F("fHistoOmegaMassvsPt","Omega mass",100,1.67-0.05,1.67+0.05,20,0.,10.);
3843 
3844  fHistoElectronTPCPID=new TH2F("fHistoElectronTPCPID","",50,0.,5.,50,-20.,20.);
3846  fHistoElectronTOFPID=new TH2F("fHistoElectronTOFPID","",50,0.,5.,50,-20.,20.);
3848  fHistoElectronTPCSelPID=new TH2F("fHistoElectronTPCSelPID","",50,0.,5.,50,-20.,20.);
3850  fHistoElectronTOFSelPID=new TH2F("fHistoElectronTOFSelPID","",50,0.,5.,50,-20.,20.);
3852  fHistoElectronTPCPIDSelTOF=new TH2F("fHistoElectronTPCPIDSelTOF","",10,0.,5.,500,-10.,10.);
3854  fHistoElectronTOFPIDSelTPC=new TH2F("fHistoElectronTOFPIDSelTPC","",10,0.,5.,500,-10.,10.);
3856  fHistoElectronTPCPIDSelTOFSmallEta=new TH2F("fHistoElectronTPCPIDSelTOFSmallEta","",10,0.,5.,500,-10.,10.);
3858  fHistoElectronTPCPIDSelTOFLargeEta=new TH2F("fHistoElectronTPCPIDSelTOFLargeEta","",10,0.,5.,500,-10.,10.);
3860  fHistoMassConversionsMin=new TH1F("fHistoMassConversionsMin","",500,0,0.5);
3862  fHistoMassConversionsSameSignMin=new TH1F("fHistoMassConversionsSameSignMin","",500,0,0.5);
3864 
3865  for(Int_t i=0;i<8;i++){
3866  fHistoElectronTPCPIDSelTOFEtaDep[i]=new TH2F(Form("fHistoElectronTPCPIDSelTOFEtaDep[%d]",i),"",10,0.,5.,500,-10.,10.);
3868  }
3869 
3870  fHistoElectronQovPtvsPhi=new TH2F("fHistoElectronQovPtvsPhi","",70,0.,7.,50,-2.,2.);
3872  fHistoXiQovPtvsPhi=new TH2F("fHistoXiQovPtvsPhi","",70,0.,7.,50,-2.,2.);
3874 
3875  Int_t bins_xicmcgen[3]= {100 ,20 ,10};
3876  Double_t xmin_xicmcgen[3]={0.,-1.0 ,0.0};
3877  Double_t xmax_xicmcgen[3]={20.,1.0 ,100};
3878  fHistoXicMCGen = new THnSparseF("fHistoXicMCGen","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3879  fOutputAll->Add(fHistoXicMCGen);
3880  fHistoXicMCGen1 = new THnSparseF("fHistoXicMCGen1","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3882  fHistoXicMCGen2 = new THnSparseF("fHistoXicMCGen2","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3884  fHistoXicMCS = new THnSparseF("fHistoXicMCS","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3885  fOutputAll->Add(fHistoXicMCS);
3886  fHistoXicMCS1 = new THnSparseF("fHistoXicMCS1","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3887  fOutputAll->Add(fHistoXicMCS1);
3888  fHistoXicMCS2 = new THnSparseF("fHistoXicMCS2","",3,bins_xicmcgen,xmin_xicmcgen,xmax_xicmcgen);
3889  fOutputAll->Add(fHistoXicMCS2);
3890 
3891  Int_t bins_xibmcgen[3]= {100 ,20 ,10};
3892  Double_t xmin_xibmcgen[3]={0.,-1.0 ,0.0};
3893  Double_t xmax_xibmcgen[3]={50.,1.0 ,100};
3894  fHistoXibMCGen = new THnSparseF("fHistoXibMCGen","",3,bins_xibmcgen,xmin_xibmcgen,xmax_xibmcgen);
3895  fOutputAll->Add(fHistoXibMCGen);
3896  fHistoXibMCS = new THnSparseF("fHistoXibMCS","",3,bins_xibmcgen,xmin_xibmcgen,xmax_xibmcgen);
3897  fOutputAll->Add(fHistoXibMCS);
3898 
3899  Int_t bins_xibmcgen_withxic[3]= {50 ,100 ,100};
3900  Double_t xmin_xibmcgen_withxic[3]={0.,-5.,-5.};
3901  Double_t xmax_xibmcgen_withxic[3]={50.,5.,5.};
3902  fHistoXibMCGenWithXic = new THnSparseF("fHistoXibMCGenWithXic","",3,bins_xibmcgen_withxic,xmin_xibmcgen_withxic,xmax_xibmcgen_withxic);
3904 
3905  Int_t bins_elemcgen[3]= {100 ,20 ,10};
3906  Double_t xmin_elemcgen[3]={0.,-1.0 ,0.0};
3907  Double_t xmax_elemcgen[3]={10.,1.0 ,100};
3908  fHistoElectronMCGen = new THnSparseF("fHistoElectronMCGen","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3910  fHistoBottomElectronMCGen = new THnSparseF("fHistoBottomElectronMCGen","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3912  fHistoCharmElectronMCGen = new THnSparseF("fHistoCharmElectronMCGen","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3914  fHistoXicElectronMCGen = new THnSparseF("fHistoXicElectronMCGen","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3916  fHistoXicElectronMCGen1 = new THnSparseF("fHistoXicElectronMCGen1","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3918  fHistoXicElectronMCGen2 = new THnSparseF("fHistoXicElectronMCGen2","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3920  fHistoXicElectronMCS = new THnSparseF("fHistoXicElectronMCS","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3922  fHistoXicElectronMCS1 = new THnSparseF("fHistoXicElectronMCS1","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3924  fHistoXicElectronMCS2 = new THnSparseF("fHistoXicElectronMCS2","",3,bins_elemcgen,xmin_elemcgen,xmax_elemcgen);
3926 
3927  Int_t bins_ximcgen[3]= {50 ,20 ,10};
3928  Double_t xmin_ximcgen[3]={0.,-1.0 ,0.0};
3929  Double_t xmax_ximcgen[3]={10.,1.0 ,100};
3930  fHistoXiMCGen = new THnSparseF("fHistoXiMCGen","",3,bins_ximcgen,xmin_ximcgen,xmax_ximcgen);
3931  fOutputAll->Add(fHistoXiMCGen);
3932 
3933  fHistoLambdaPtvsDl=new TH2F("fHistoLambdaPtvsDl","Lambda pt vs dl",20,0.,10.,20,0.,40.);
3935  fHistoLambdaPtvsDlSide=new TH2F("fHistoLambdaPtvsDlSide","Lambda pt vs dl",20,0.,10.,20,0.,40.);
3937  fHistoLambdaPtvsDlMCS=new TH2F("fHistoLambdaPtvsDlMCS","Lambda pt vs dl",20,0.,10.,20,0.,40.);
3939  fHistoLambdaPtvsDR=new TH2F("fHistoLambdaPtvsDR","Lambda pt vs dl",20,0.,10.,80,0.,160.);
3941  fHistoLambdaPtvsDRSide=new TH2F("fHistoLambdaPtvsDRSide","Lambda pt vs dl",20,0.,10.,80,0.,160.);
3943  fHistoLambdaPtvsDRMCS=new TH2F("fHistoLambdaPtvsDRMCS","Lambda pt vs dl",20,0.,10.,80,0.,160.);
3945 
3946  fHistoEleXiPtvsRapidityRS=new TH2F("fHistoEleXiPtvsRapidityRS","EleXi pt vs rap",20,0.,20.,40,-2.,2.);
3948  fHistoEleXiPtvsRapidityWS=new TH2F("fHistoEleXiPtvsRapidityWS","EleXi pt vs rap",20,0.,20.,40,-2.,2.);
3950  fHistoEleXiPtvsRapidityMCS=new TH2F("fHistoEleXiPtvsRapidityMCS","EleXi pt vs rap",20,0.,20.,40,-2.,2.);
3952 
3953  fHistoResponseElePt = new TH2D("fHistoResponseElePt","",100,0.,20.,100,0.,10.);
3955  fHistoResponseXiPt = new TH2D("fHistoResponseXiPt","",100,0.,20.,100,0.,20.);
3957  fHistoResponseEleXiPt = new TH2D("fHistoResponseEleXiPt","",100,0.,20.,100,0.,20.);
3959  fHistoResponseXiPtvsEleXiPt = new TH2D("fHistoResponseXiPtvsEleXiPt","",100,0.,20.,100,0.,20.);
3961  fHistoResponseXiPtXib = new TH2D("fHistoResponseXiPtXib","",100,0.,50.,100,0.,20.);
3963  fHistoResponseEleXiPtXib = new TH2D("fHistoResponseEleXiPtXib","",100,0.,50.,100,0.,20.);
3965  fHistoResponseMcGenXibPtvsXicPt = new TH2D("fHistoResponseMcGenXibPtvsXicPt","",100,0.,50.,100,0.,20.);
3967 
3968 
3969  fHistonEvtvsRunNumber=new TH1F("fHistonEvtvsRunNumber","",20000,-0.5,19999.5);
3971  fHistonElevsRunNumber=new TH1F("fHistonElevsRunNumber","",20000,-0.5,19999.5);
3973  fHistonXivsRunNumber=new TH1F("fHistonXivsRunNumber","",20000,-0.5,19999.5);
3975  fHistoMCEventType=new TH1F("fHistoMCEventType","",4,-0.5,3.5);
3977  fHistoMCXic0Decays=new TH1F("fHistoMCXic0Decays","",4,0.5,4.5);
3979  fHistoMCDeltaPhiccbar=new TH1F("fHistoMCDeltaPhiccbar","",100,0.,3.2);
3981  fHistoMCNccbar=new TH1F("fHistoMCNccbar","",100,-0.5,99.5);
3982  fOutputAll->Add(fHistoMCNccbar);
3983 
3984  fHistodPhiSdEtaSElectronProtonR125RS = new TH2D("fHistodPhiSdEtaSElectronProtonR125RS","",50,0.,0.2,50,0.,0.2);
3986  fHistodPhiSdEtaSElectronProtonR125WS = new TH2D("fHistodPhiSdEtaSElectronProtonR125WS","",50,0.,0.2,50,0.,0.2);
3988  fHistodPhiSdEtaSElectronProtonR125RSMix = new TH2D("fHistodPhiSdEtaSElectronProtonR125RSMix","",50,0.,0.2,50,0.,0.2);
3990  fHistodPhiSdEtaSElectronProtonR125WSMix = new TH2D("fHistodPhiSdEtaSElectronProtonR125WSMix","",50,0.,0.2,50,0.,0.2);
3992  fHistodPhiSdEtaSElectronPionR125RS = new TH2D("fHistodPhiSdEtaSElectronPionR125RS","",50,0.,0.2,50,0.,0.2);
3994  fHistodPhiSdEtaSElectronPionR125WS = new TH2D("fHistodPhiSdEtaSElectronPionR125WS","",50,0.,0.2,50,0.,0.2);
3996  fHistodPhiSdEtaSElectronPionR125RSMix = new TH2D("fHistodPhiSdEtaSElectronPionR125RSMix","",50,0.,0.2,50,0.,0.2);
3998  fHistodPhiSdEtaSElectronPionR125WSMix = new TH2D("fHistodPhiSdEtaSElectronPionR125WSMix","",50,0.,0.2,50,0.,0.2);
4000  fHistodPhiSdEtaSElectronBachelorR125RS = new TH2D("fHistodPhiSdEtaSElectronBachelorR125RS","",50,0.,0.2,50,0.,0.2);
4002  fHistodPhiSdEtaSElectronBachelorR125WS = new TH2D("fHistodPhiSdEtaSElectronBachelorR125WS","",50,0.,0.2,50,0.,0.2);
4004  fHistodPhiSdEtaSElectronBachelorR125RSMix = new TH2D("fHistodPhiSdEtaSElectronBachelorR125RSMix","",50,0.,0.2,50,0.,0.2);
4006  fHistodPhiSdEtaSElectronBachelorR125WSMix = new TH2D("fHistodPhiSdEtaSElectronBachelorR125WSMix","",50,0.,0.2,50,0.,0.2);
4008 
4009  for(Int_t ih=0;ih<23;ih++){
4010  Int_t bins_eleptvscutvars[3];
4011  Double_t xmin_eleptvscutvars[3];
4012  Double_t xmax_eleptvscutvars[3];
4013 
4014  bins_eleptvscutvars[0] = 20;//electron pT bin
4015  xmin_eleptvscutvars[0] = 0.;
4016  xmax_eleptvscutvars[0] = 20.;
4017  bins_eleptvscutvars[2] = 10;//centrality bin
4018  xmin_eleptvscutvars[2] = 0.;
4019  xmax_eleptvscutvars[2] = 100.;
4020 
4021  if(ih==0 || ih==1){
4022  //0: TPC Ncluster 1: TPC ncluster PID
4023  bins_eleptvscutvars[1] = 40;
4024  xmin_eleptvscutvars[1] = 0.;
4025  xmax_eleptvscutvars[1] = 160.;
4026  }else if(ih==2 || ih==3){
4027  //2: nSigma(TPC,e) 3: nSigma(TOF,e)
4028  bins_eleptvscutvars[1] = 20;
4029  xmin_eleptvscutvars[1] = -5.;
4030  xmax_eleptvscutvars[1] = 5.;
4031  }else if(ih==4){
4032  //4: eta
4033  bins_eleptvscutvars[1] = 30;
4034  xmin_eleptvscutvars[1] = -1.5;
4035  xmax_eleptvscutvars[1] = 1.5;
4036  }else if(ih==5){
4037  //5: nITS cluster
4038  bins_eleptvscutvars[1] = 7;
4039  xmin_eleptvscutvars[1] = -0.5;
4040  xmax_eleptvscutvars[1] = 6.5;
4041  }else if(ih==6){
4042  //6: Lambda mass
4043  bins_eleptvscutvars[1] = 50;
4044  xmin_eleptvscutvars[1] = 1.1156-0.03;
4045  xmax_eleptvscutvars[1] = 1.1156+0.03;
4046  }else if(ih==7){
4047  //7: Xi mass
4048  bins_eleptvscutvars[1] = 50;
4049  xmin_eleptvscutvars[1] = 1.32-0.03;
4050  xmax_eleptvscutvars[1] = 1.32+0.03;
4051  }else if(ih==8 || ih==9){
4052  //8: Rfid Lambda, 9: Rfid Xi
4053  bins_eleptvscutvars[1] = 20;
4054  xmin_eleptvscutvars[1] = 0.;
4055  xmax_eleptvscutvars[1] = 5.;
4056  }else if(ih==10 || ih==11){
4057  //11: DCA Xi, 10: Dca V0
4058  bins_eleptvscutvars[1] = 20;
4059  xmin_eleptvscutvars[1] = 0.;
4060  xmax_eleptvscutvars[1] = 2.;
4061  }else if(ih==12 || ih==13 || ih==14){
4062  //12: DCA Bachto prim, 13: DCA V0pr to prim 14: DCA V0pi to prim
4063  bins_eleptvscutvars[1] = 20;
4064  xmin_eleptvscutvars[1] = 0.;
4065  xmax_eleptvscutvars[1] = 0.5;
4066  }else if(ih==15 || ih==16){
4067  //16: CosPAXi, 15: CosPAv0
4068  bins_eleptvscutvars[1] = 20;
4069  xmin_eleptvscutvars[1] = 0.95;
4070  xmax_eleptvscutvars[1] = 1.0;
4071  }else if(ih==17 || ih==18 || ih==19){
4072  //17: nSigma(TPC, bach) 18: nSigma(TPC, v0pr), 19: nSigma(TPC,v0pi)
4073  bins_eleptvscutvars[1] = 20;
4074  xmin_eleptvscutvars[1] = -5.;
4075  xmax_eleptvscutvars[1] = 5.;
4076  }else if(ih==20 || ih==21){
4077  //20: V0 eta 21: Xi eta
4078  bins_eleptvscutvars[1] = 30;
4079  xmin_eleptvscutvars[1] = -1.5;
4080  xmax_eleptvscutvars[1] = 1.5;
4081  }else if(ih==22){
4082  //20: Opening angle
4083  bins_eleptvscutvars[1] = 20;
4084  xmin_eleptvscutvars[1] = 0.;
4085  xmax_eleptvscutvars[1] = 3.141592/2;
4086  }
4087 
4088  fHistoElePtvsCutVarsRS[ih] = new THnSparseF(Form("fHistoElePtvsCutVarsRS[%d]",ih),"",3,bins_eleptvscutvars,xmin_eleptvscutvars,xmax_eleptvscutvars);
4090  fHistoElePtvsCutVarsWS[ih] = new THnSparseF(Form("fHistoElePtvsCutVarsWS[%d]",ih),"",3,bins_eleptvscutvars,xmin_eleptvscutvars,xmax_eleptvscutvars);
4092  fHistoElePtvsCutVarsMCS[ih] = new THnSparseF(Form("fHistoElePtvsCutVarsMCS[%d]",ih),"",3,bins_eleptvscutvars,xmin_eleptvscutvars,xmax_eleptvscutvars);
4094  }
4095 
4096  Int_t bins_eletag[3]= {20 ,40 ,10};
4097  Double_t xmin_eletag[3]={0.,0. ,0.0};
4098  Double_t xmax_eletag[3]={10.,20 ,100};
4099  fHistoElectronPi0Total = new THnSparseF("fHistoElectronPi0Total","",3,bins_eletag,xmin_eletag,xmax_eletag);
4101  fHistoElectronPi0Tag = new THnSparseF("fHistoElectronPi0Tag","",3,bins_eletag,xmin_eletag,xmax_eletag);
4103  fHistoElectronEtaTotal = new THnSparseF("fHistoElectronEtaTotal","",3,bins_eletag,xmin_eletag,xmax_eletag);
4105  fHistoElectronEtaTag = new THnSparseF("fHistoElectronEtaTag","",3,bins_eletag,xmin_eletag,xmax_eletag);
4107 
4108  fHistoPi0MCGen = new TH1F("fHistoPi0MCGen","",100,0.,20.);
4109  fOutputAll->Add(fHistoPi0MCGen);
4110  fHistoEtaMCGen = new TH1F("fHistoEtaMCGen","",100,0.,20.);
4111  fOutputAll->Add(fHistoEtaMCGen);
4112 
4113  //Axis 0: Pt
4114  //Axis 1: Dphi
4115  //Axis 2: proper dl
4116  //Axis 3: Sign Type
4117  //Axis 4: Conv Type
4118  //Axis 5: MC Type
4119  //Axis 6: Centrality
4120  Int_t bins_cor_nd[7]= {100 , 20, 20, 4, 3, 10, 10};
4121  Double_t xmin_cor_nd[7]={0.,-M_PI,0.,-0.5,-0.5,-0.5,0.};
4122  Double_t xmax_cor_nd[7]={20.,M_PI,40.,3.5,2.5,9.5,100.};
4123  Double_t xmax_cor_nd2[7]={10.,M_PI,40.,3.5,2.5,9.5,100.};
4124  fHistoCorrelationVariablesvsEleXiPt = new THnSparseF("fHistoCorrelationVariablesvsEleXiPt","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4125  fHistoCorrelationVariablesvsEleXiPtMix = new THnSparseF("fHistoCorrelationVariablesvsEleXiPtMix","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4126  fHistoCorrelationVariablesvsEleXiPtMC = new THnSparseF("fHistoCorrelationVariablesvsEleXiPtMC","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4127  fHistoCorrelationVariablesvsElePt = new THnSparseF("fHistoCorrelationVariablesvsElePt","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd2);
4128  fHistoCorrelationVariablesvsElePtMix = new THnSparseF("fHistoCorrelationVariablesvsElePtMix","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd2);
4129  fHistoCorrelationVariablesvsElePtMC = new THnSparseF("fHistoCorrelationVariablesvsElePtMC","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd2);
4130  fHistoCorrelationVariablesvsXiPt = new THnSparseF("fHistoCorrelationVariablesvsXiPt","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4131  fHistoCorrelationVariablesvsXiPtMix = new THnSparseF("fHistoCorrelationVariablesvsXiPtMix","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4132  fHistoCorrelationVariablesvsXiPtMC = new THnSparseF("fHistoCorrelationVariablesvsXiPtMC","",7,bins_cor_nd,xmin_cor_nd,xmax_cor_nd);
4133 
4134  //Axis 0: Mass
4135  //Axis 1: Pt
4136  //Axis 2: Near or Away
4137  //Axis 3: peak or Sideband
4138  //Axis 4: Sign Type
4139  //Axis 5: Conv Type
4140  //Axis 6: MC Type
4141  //Axis 7: Centrality
4142  Int_t bins_mass_nd[8]= {22,100 , 2, 2, 4, 3, 10, 10};
4143  Double_t xmin_mass_nd[8]={1.3,0.,-0.5,-0.5,-0.5,-0.5,-0.5,0.};
4144  Double_t xmax_mass_nd[8]={5.7,20.,1.5,1.5,3.5,2.5,9.5,100.};
4145  Double_t xmax_mass_nd2[8]={5.7,10.,1.5,1.5,3.5,2.5,9.5,100.};
4146  fHistoMassVariablesvsEleXiPt = new THnSparseF("fHistoMassVariablesvsEleXiPt","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4147  fHistoMassVariablesvsEleXiPtMix = new THnSparseF("fHistoMassVariablesvsEleXiPtMix","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4148  fHistoMassVariablesvsEleXiPtMC = new THnSparseF("fHistoMassVariablesvsEleXiPtMC","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4149  fHistoMassVariablesvsElePt = new THnSparseF("fHistoMassVariablesvsElePt","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd2);
4150  fHistoMassVariablesvsElePtMix = new THnSparseF("fHistoMassVariablesvsElePtMix","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd2);
4151  fHistoMassVariablesvsElePtMC = new THnSparseF("fHistoMassVariablesvsElePtMC","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd2);
4152  fHistoMassVariablesvsXiPt = new THnSparseF("fHistoMassVariablesvsXiPt","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4153  fHistoMassVariablesvsXiPtMix = new THnSparseF("fHistoMassVariablesvsXiPtMix","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4154  fHistoMassVariablesvsXiPtMC = new THnSparseF("fHistoMassVariablesvsXiPtMC","",8,bins_mass_nd,xmin_mass_nd,xmax_mass_nd);
4155 
4156 
4166 
4176 
4177  return;
4178 }
4179 
4180 //________________________________________________________________________
4181 AliAODRecoCascadeHF* AliAnalysisTaskSEXic2eleXifromAODtracks::MakeCascadeHF(AliAODcascade *casc, AliAODTrack *part, AliAODTrack *partpid, AliAODEvent * aod, AliAODVertex *secVert)
4182 {
4183  //
4184  // Create AliAODRecoCascadeHF object from the argument
4185  //
4186 
4187  if(!casc) return 0x0;
4188  if(!part) return 0x0;
4189  if(!aod) return 0x0;
4190 
4191  //------------------------------------------------
4192  // PrimaryVertex
4193  //------------------------------------------------
4194  AliAODVertex *primVertexAOD;
4195  Bool_t unsetvtx = kFALSE;
4197  primVertexAOD = CallPrimaryVertex(casc,part,aod);
4198  if(!primVertexAOD){
4199  primVertexAOD = fVtx1;
4200  }else{
4201  unsetvtx = kTRUE;
4202  }
4203  }else{
4204  primVertexAOD = fVtx1;
4205  }
4206  if(!primVertexAOD) return 0x0;
4207  Double_t posprim[3]; primVertexAOD->GetXYZ(posprim);
4208 
4209  //------------------------------------------------
4210  // DCA between tracks
4211  //------------------------------------------------
4212  AliESDtrack *esdtrack = new AliESDtrack((AliVTrack*)partpid);
4213 
4214  Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
4215  xyz[0]=casc->DecayVertexXiX();
4216  xyz[1]=casc->DecayVertexXiY();
4217  xyz[2]=casc->DecayVertexXiZ();
4218  pxpypz[0]=casc->MomXiX();
4219  pxpypz[1]=casc->MomXiY();
4220  pxpypz[2]=casc->MomXiZ();
4221  casc->GetCovarianceXYZPxPyPz(cv);
4222  sign=casc->ChargeXi();
4223  AliExternalTrackParam *trackCasc = new AliExternalTrackParam(xyz,pxpypz,cv,sign);
4224 
4225  Double_t xdummy, ydummy;
4226  Double_t dca = esdtrack->GetDCA(trackCasc,fBzkG,xdummy,ydummy);
4227 
4228 
4229  //------------------------------------------------
4230  // Propagate all tracks to the secondary vertex and calculate momentum there
4231  //------------------------------------------------
4232 
4233  Double_t d0z0bach[2],covd0z0bach[3];
4234  if(sqrt(pow(secVert->GetX(),2)+pow(secVert->GetY(),2))<1.){
4235  part->PropagateToDCA(secVert,fBzkG,kVeryBig,d0z0bach,covd0z0bach);
4236  trackCasc->PropagateToDCA(secVert,fBzkG,kVeryBig);
4237  }else{
4238  part->PropagateToDCA(primVertexAOD,fBzkG,kVeryBig,d0z0bach,covd0z0bach);
4239  trackCasc->PropagateToDCA(primVertexAOD,fBzkG,kVeryBig);
4240  }
4241  Double_t momcasc_new[3]={-9999,-9999,-9999.};
4242  trackCasc->GetPxPyPz(momcasc_new);
4243 
4244  Double_t px[2],py[2],pz[2];
4245  px[0] = part->Px(); py[0] = part->Py(); pz[0] = part->Pz();
4246  px[1] = momcasc_new[0]; py[1] = momcasc_new[1]; pz[1] = momcasc_new[2];
4247 
4248  //------------------------------------------------
4249  // d0
4250  //------------------------------------------------
4251  Double_t d0[3],d0err[3];
4252 
4253  part->PropagateToDCA(primVertexAOD,fBzkG,kVeryBig,d0z0bach,covd0z0bach);
4254  d0[0]= d0z0bach[0];
4255  d0err[0] = TMath::Sqrt(covd0z0bach[0]);
4256 
4257  Double_t d0z0casc[2],covd0z0casc[3];
4258  trackCasc->PropagateToDCA(primVertexAOD,fBzkG,kVeryBig,d0z0casc,covd0z0casc);
4259  d0[1]= d0z0casc[0];
4260  d0err[1] = TMath::Sqrt(covd0z0casc[0]);
4261 
4262  //------------------------------------------------
4263  // Create AliAODRecoCascadeHF
4264  //------------------------------------------------
4265  Short_t charge = part->Charge();
4266  AliAODRecoCascadeHF *theCascade = new AliAODRecoCascadeHF(secVert,charge,px,py,pz,d0,d0err,dca);
4267  if(!theCascade)
4268  {
4269  if(unsetvtx) delete primVertexAOD; primVertexAOD=NULL;
4270  if(esdtrack) delete esdtrack;
4271  if(trackCasc) delete trackCasc;
4272  return 0x0;
4273  }
4274  theCascade->SetOwnPrimaryVtx(primVertexAOD);
4275  UShort_t id[2]={(UShort_t)part->GetID(),(UShort_t)trackCasc->GetID()};
4276  theCascade->SetProngIDs(2,id);
4277 
4278  theCascade->GetSecondaryVtx()->AddDaughter(part);
4279  theCascade->GetSecondaryVtx()->AddDaughter(casc);
4280  if(unsetvtx) delete primVertexAOD; primVertexAOD=NULL;
4281  if(esdtrack) delete esdtrack;
4282  if(trackCasc) delete trackCasc;
4283 
4284  return theCascade;
4285 }
4286 
4287 //________________________________________________________________________
4288 AliAODVertex* AliAnalysisTaskSEXic2eleXifromAODtracks::CallPrimaryVertex(AliAODcascade *casc, AliAODTrack *trk, AliAODEvent* aod)
4289 {
4290  //
4291  // Make an array of tracks which should not be used in primary vertex calculation and
4292  // Call PrimaryVertex function
4293  //
4294 
4295  TObjArray *TrackArray = new TObjArray(3);
4296 
4297  AliESDtrack *cptrk1 = new AliESDtrack((AliVTrack*)trk);
4298  TrackArray->AddAt(cptrk1,0);
4299 
4300  AliESDtrack *cascptrack = new AliESDtrack((AliVTrack*)casc->GetDaughter(0));
4301  TrackArray->AddAt(cascptrack,1);
4302  AliESDtrack *cascntrack = new AliESDtrack((AliVTrack*)casc->GetDaughter(1));
4303  TrackArray->AddAt(cascntrack,2);
4304  AliESDtrack *cascbtrack = new AliESDtrack((AliVTrack*)casc->GetDecayVertexXi()->GetDaughter(0));
4305  TrackArray->AddAt(cascbtrack,3);
4306 
4307  AliAODVertex *newvert = PrimaryVertex(TrackArray,aod);
4308 
4309  for(Int_t i=0;i<4;i++)
4310  {
4311  AliESDtrack *tesd = (AliESDtrack*)TrackArray->UncheckedAt(i);
4312  delete tesd;
4313  }
4314  TrackArray->Clear();
4315  delete TrackArray;
4316 
4317  return newvert;
4318 }
4319 
4320 //________________________________________________________________________
4322  AliVEvent *event)
4323 {
4324  //
4325  //Used only for pp
4326  //copied from AliAnalysisVertexingHF (except for the following 3 lines)
4327  //
4328 
4329  Bool_t fRecoPrimVtxSkippingTrks = kTRUE;
4330  Bool_t fRmTrksFromPrimVtx = kFALSE;
4331 
4332  AliESDVertex *vertexESD = 0;
4333  AliAODVertex *vertexAOD = 0;
4334 
4335  //vertexESD = new AliESDVertex(*fV1);
4336 
4337 
4338  if(!fRecoPrimVtxSkippingTrks && !fRmTrksFromPrimVtx) {
4339  // primary vertex from the input event
4340 
4341  vertexESD = new AliESDVertex(*fV1);
4342 
4343  } else {
4344  // primary vertex specific to this candidate
4345 
4346  Int_t nTrks = trkArray->GetEntriesFast();
4347  AliVertexerTracks *vertexer = new AliVertexerTracks(event->GetMagneticField());
4348 
4349  if(fRecoPrimVtxSkippingTrks) {
4350  // recalculating the vertex
4351 
4352  if(strstr(fV1->GetTitle(),"VertexerTracksWithConstraint")) {
4353  Float_t diamondcovxy[3];
4354  event->GetDiamondCovXY(diamondcovxy);
4355  Double_t pos[3]={event->GetDiamondX(),event->GetDiamondY(),0.};
4356  Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
4357  AliESDVertex *diamond = new AliESDVertex(pos,cov,1.,1);
4358  vertexer->SetVtxStart(diamond);
4359  delete diamond; diamond=NULL;
4360  if(strstr(fV1->GetTitle(),"VertexerTracksWithConstraintOnlyFitter"))
4361  vertexer->SetOnlyFitter();
4362  }
4363  Int_t skipped[1000];
4364  Int_t nTrksToSkip=0,id;
4365  AliExternalTrackParam *t = 0;
4366  for(Int_t i=0; i<nTrks; i++) {
4367  t = (AliExternalTrackParam*)trkArray->UncheckedAt(i);
4368  id = (Int_t)t->GetID();
4369  if(id<0) continue;
4370  skipped[nTrksToSkip++] = id;
4371  }
4372  // TEMPORARY FIX
4373  // For AOD, skip also tracks without covariance matrix
4374  Double_t covtest[21];
4375  for(Int_t j=0; j<event->GetNumberOfTracks(); j++) {
4376  AliVTrack *vtrack = (AliVTrack*)event->GetTrack(j);
4377  if(!vtrack->GetCovarianceXYZPxPyPz(covtest)) {
4378  id = (Int_t)vtrack->GetID();
4379  if(id<0) continue;
4380  skipped[nTrksToSkip++] = id;
4381  }
4382  }
4383  for(Int_t ijk=nTrksToSkip; ijk<1000; ijk++) skipped[ijk]=-1;
4384  //
4385  vertexer->SetSkipTracks(nTrksToSkip,skipped);
4386  vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
4387 
4388  } else if(fRmTrksFromPrimVtx && nTrks>0) {
4389  // removing the prongs tracks
4390 
4391  TObjArray rmArray(nTrks);
4392  UShort_t *rmId = new UShort_t[nTrks];
4393  AliESDtrack *esdTrack = 0;
4394  AliESDtrack *t = 0;
4395  for(Int_t i=0; i<nTrks; i++) {
4396  t = (AliESDtrack*)trkArray->UncheckedAt(i);
4397  esdTrack = new AliESDtrack(*t);
4398  rmArray.AddLast(esdTrack);
4399  if(esdTrack->GetID()>=0) {
4400  rmId[i]=(UShort_t)esdTrack->GetID();
4401  } else {
4402  rmId[i]=9999;
4403  }
4404  }
4405  Float_t diamondxy[2]={static_cast<Float_t>(event->GetDiamondX()),static_cast<Float_t>(event->GetDiamondY())};
4406  vertexESD = vertexer->RemoveTracksFromVertex(fV1,&rmArray,rmId,diamondxy);
4407  delete [] rmId; rmId=NULL;
4408  rmArray.Delete();
4409 
4410  }
4411 
4412  delete vertexer; vertexer=NULL;
4413  if(!vertexESD) return vertexAOD;
4414  if(vertexESD->GetNContributors()<=0) {
4415  //AliDebug(2,"vertexing failed");
4416  delete vertexESD; vertexESD=NULL;
4417  return vertexAOD;
4418  }
4419 
4420 
4421  }
4422 
4423  // convert to AliAODVertex
4424  Double_t pos[3],cov[6],chi2perNDF;
4425  vertexESD->GetXYZ(pos); // position
4426  vertexESD->GetCovMatrix(cov); //covariance matrix
4427  chi2perNDF = vertexESD->GetChi2toNDF();
4428  delete vertexESD; vertexESD=NULL;
4429 
4430  vertexAOD = new AliAODVertex(pos,cov,chi2perNDF);
4431 
4432  return vertexAOD;
4433 }
4434 
4435 //________________________________________________________________________
4436 AliAODVertex* AliAnalysisTaskSEXic2eleXifromAODtracks::ReconstructSecondaryVertex(AliAODcascade *casc, AliAODTrack *part, AliAODEvent * aod)
4437 {
4438  //
4439  // Reconstruct secondary vertex from trkArray (Copied from AliAnalysisVertexingHF)
4440  //
4441 
4442  AliAODVertex *primVertexAOD;
4443  Bool_t unsetvtx = kFALSE;
4445  primVertexAOD = CallPrimaryVertex(casc,part,aod);
4446  if(!primVertexAOD){
4447  primVertexAOD = fVtx1;
4448  }else{
4449  unsetvtx = kTRUE;
4450  }
4451  }else{
4452  primVertexAOD = fVtx1;
4453  }
4454  if(!primVertexAOD) return 0x0;
4455 
4456  AliESDVertex * vertexESD = new AliESDVertex(*fV1);
4457 
4458  Double_t pos[3],cov[6],chi2perNDF;
4459  vertexESD->GetXYZ(pos); // position
4460  vertexESD->GetCovMatrix(cov); //covariance matrix
4461  chi2perNDF = vertexESD->GetChi2toNDF();
4462  delete vertexESD; vertexESD=NULL;
4463 
4464  AliAODVertex *secVert = new AliAODVertex(pos,cov,chi2perNDF);
4465 
4466  return secVert;
4467 }
4468 //________________________________________________________________________
4469 Int_t AliAnalysisTaskSEXic2eleXifromAODtracks::MatchToMC(AliAODRecoCascadeHF *exobj, TClonesArray *mcArray, Int_t *pdgarray_ele, Int_t *pdgarray_casc, Int_t *labelarray_ele, Int_t *labelarray_casc, Int_t &ngen_ele, Int_t &ngen_casc)
4470 {
4471  //
4472  // Match to MC
4473  //
4474  for(Int_t i=0;i<100;i++){
4475  pdgarray_ele[i] = -9999;
4476  labelarray_ele[i] = -9999;
4477  pdgarray_casc[i] = -9999;
4478  labelarray_casc[i] = -9999;
4479  }
4480  ngen_ele = 0;
4481  ngen_casc = 0;
4482 
4483  AliVTrack *trk = dynamic_cast<AliVTrack*>(exobj->GetBachelor());
4484  if(!trk) return -1;
4485  Int_t labEle = trk->GetLabel();
4486  if(labEle<0) return -1;
4487  AliAODMCParticle *mcetrk = (AliAODMCParticle*)mcArray->At(labEle);
4488  if(!mcetrk) return -1;
4489  labelarray_ele[0] = labEle;
4490  pdgarray_ele[0] = mcetrk->GetPdgCode();
4491  ngen_ele ++;
4492 
4493  AliAODMCParticle *mcprimele=0;
4494  mcprimele = mcetrk;
4495  while(mcprimele->GetMother()>=0) {
4496  Int_t labprim_ele=mcprimele->GetMother();
4497  AliAODMCParticle *tmcprimele = (AliAODMCParticle*)mcArray->At(labprim_ele);
4498  if(!tmcprimele) {
4499  break;
4500  }
4501 
4502  mcprimele = tmcprimele;
4503  pdgarray_ele[ngen_ele] = mcprimele->GetPdgCode();
4504  labelarray_ele[ngen_ele] = labprim_ele;
4505  ngen_ele ++;
4506  if(ngen_ele==100) break;
4507  }
4508 
4509  AliAODcascade *theCascade = dynamic_cast<AliAODcascade*>(exobj->GetCascade());
4510  if(!theCascade) return -1;
4511 
4512  Int_t pdgDgcasc[2]={211,3122};
4513  Int_t pdgDgv0[2]={2212,211};
4514  Int_t labcasc = MatchToMCCascade(theCascade,3312,pdgDgcasc,pdgDgv0,mcArray); // the cascade
4515  if(labcasc<0) return -1;
4516 
4517  AliAODMCParticle *mccasc = (AliAODMCParticle*)mcArray->At(labcasc);
4518  if(!mccasc) return -1;
4519  labelarray_casc[0] = labcasc;
4520  pdgarray_casc[0] = mccasc->GetPdgCode();
4521  ngen_casc ++;
4522 
4523  AliAODMCParticle *mcprimcasc=0;
4524  mcprimcasc = mccasc;
4525  while(mcprimcasc->GetMother()>=0) {
4526  Int_t labprim_casc=mcprimcasc->GetMother();
4527  AliAODMCParticle *tmcprimcasc = (AliAODMCParticle*)mcArray->At(labprim_casc);
4528  if(!tmcprimcasc) {
4529  break;
4530  }
4531 
4532  mcprimcasc = tmcprimcasc;
4533  pdgarray_casc[ngen_casc] = mcprimcasc->GetPdgCode();
4534  labelarray_casc[ngen_casc] = labprim_casc;
4535  ngen_casc ++;
4536  if(ngen_casc==100) break;
4537  }
4538 
4539  Bool_t same_flag = kFALSE;
4540  Int_t matchedlabel=-9999;
4541  for(Int_t iemc=0;iemc<ngen_ele;iemc++){
4542  for(Int_t ivmc=0;ivmc<ngen_casc;ivmc++){
4543  if(labelarray_ele[iemc]==labelarray_casc[ivmc]){
4544  same_flag = kTRUE;
4545  matchedlabel = labelarray_ele[iemc];
4546  break;
4547  }
4548  }
4549  if(same_flag) break;
4550  }
4551 
4552  return matchedlabel;
4553 
4554 }
4555 //________________________________________________________________________
4556 Int_t AliAnalysisTaskSEXic2eleXifromAODtracks::MatchToMCCascade(AliAODcascade *theCascade, Int_t pdgabscasc, Int_t *pdgDgcasc, Int_t *pdgDgv0, TClonesArray *mcArray) const // the cascade
4557 {
4558  //
4559  // Matching to MC of cascade
4560  //
4561 
4562  AliAODTrack *cptrack = (AliAODTrack*) theCascade->GetDaughter(0);
4563  if(!cptrack) return -1;
4564  Int_t label_p = TMath::Abs(cptrack->GetLabel());
4565  if(label_p<0) return -1;
4566  AliAODTrack *cntrack = (AliAODTrack*) theCascade->GetDaughter(1);
4567  if(!cntrack) return -1;
4568  Int_t label_n = TMath::Abs(cntrack->GetLabel());
4569  if(label_n<0) return -1;
4570  Int_t labv0 = theCascade->MatchToMC(pdgDgcasc[1],mcArray,2,pdgDgv0);
4571  if(labv0<0) return -1;
4572  AliAODMCParticle *mcpartv0= (AliAODMCParticle*) mcArray->At(labv0);
4573 
4574  AliAODTrack *cbtrack = (AliAODTrack*) theCascade->GetDecayVertexXi()->GetDaughter(0);
4575  if(!cbtrack) return -1;
4576 
4577  Int_t label_b = TMath::Abs(cbtrack->GetLabel());
4578  if(label_b<0) return -1;
4579 
4580  AliAODMCParticle *mcpartb= (AliAODMCParticle*) mcArray->At(label_b);
4581  Int_t pdgb = TMath::Abs(mcpartb->GetPdgCode());
4582  if(pdgb!=pdgDgcasc[0]) return -1;
4583 
4584  AliAODMCParticle *mcmotherv0=mcpartv0;
4585  Bool_t isFromXiv0 = kFALSE;
4586  Int_t labxiv0 = mcmotherv0->GetMother();
4587  if(labxiv0<0) return -1;
4588  mcmotherv0 = (AliAODMCParticle*) mcArray->At(labxiv0);
4589  if(mcmotherv0){
4590  Int_t pdg = TMath::Abs(mcmotherv0 ->GetPdgCode());
4591  if(pdg==pdgabscasc){
4592  isFromXiv0 = kTRUE;
4593  }
4594  }
4595  if(!isFromXiv0) return -1;
4596 
4597  AliAODMCParticle *mcmotherb=mcpartb;
4598  Bool_t isFromXib = kFALSE;
4599  Int_t labxib = mcmotherb->GetMother();
4600  if(labxib<0) return -1;
4601  mcmotherb = (AliAODMCParticle*) mcArray->At(labxib);
4602  if(mcmotherb){
4603  Int_t pdg = TMath::Abs(mcmotherb ->GetPdgCode());
4604  if(pdg==pdgabscasc){
4605  isFromXib = kTRUE;
4606  }
4607  }
4608  if(!isFromXib) return -1;
4609 
4610  if(labxiv0!=labxib) return -1;//Bachelor and V0 should come from the same Xi
4611 
4612  return labxib;
4613 }
4614 //________________________________________________________________________
4615 void AliAnalysisTaskSEXic2eleXifromAODtracks::SelectTrack( const AliVEvent *event, Int_t trkEntries, Int_t &nSeleTrks,Bool_t *seleFlags, TClonesArray *mcArray)
4616 {
4617  //
4618  // Select good tracks using fAnalCuts (AliRDHFCuts object) and return the array of their ids
4619  //
4620 
4621  //const Int_t entries = event->GetNumberOfTracks();
4622  if(trkEntries==0) return;
4623 
4624  nSeleTrks=0;
4625  for(Int_t i=0; i<trkEntries; i++) {
4626  seleFlags[i] = kFALSE;
4627 
4628  AliVTrack *track;
4629  track = (AliVTrack*)event->GetTrack(i);
4630 
4631  //if(track->GetID()<0) continue;
4632  Double_t covtest[21];
4633  if(!track->GetCovarianceXYZPxPyPz(covtest)) continue;
4634 
4635  if(!fAnalCuts) continue;
4636 
4637  AliAODTrack *aodt = (AliAODTrack*)track;
4638 
4640  Int_t filterbit = fAnalCuts->GetProdAODFilterBit();
4641  if(filterbit==7){
4642  if(!aodt->TestFilterBit(BIT(filterbit))) continue;
4643  }else{
4644  if(!aodt->TestFilterMask(BIT(filterbit))) continue;
4645  }
4646  }
4647 
4648  AliAODTrack *aodtpid = 0;
4649  if(fAnalCuts->GetProdAODFilterBit()==7){
4650  aodtpid = fGTI[-aodt->GetID()-1];
4651  }else{
4652  aodtpid = aodt;
4653  }
4654 
4655  Double_t nsigma_tpcele = -9999;
4656  Double_t nsigma_tofele = -9999;
4657  if(fAnalCuts->GetIsUsePID()){
4658  nsigma_tpcele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTPC(aodtpid,AliPID::kElectron);
4659  nsigma_tofele = fAnalCuts->GetPidHF()->GetPidResponse()->NumberOfSigmasTOF(aodtpid,AliPID::kElectron);
4660  }
4661 
4662  if(fAnalCuts->SingleTrkCutsNoPID(aodt,aodtpid,fVtx1)){
4663  fHistoElectronTPCPID->Fill(aodt->Pt(),nsigma_tpcele);
4664  fHistoElectronTOFPID->Fill(aodt->Pt(),nsigma_tofele);
4665  if(fabs(nsigma_tofele)<3.){
4666  fHistoElectronTPCPIDSelTOF->Fill(aodt->Pt(),nsigma_tpcele);
4667  Double_t eleeta = aodt->Eta();
4668  if(fabs(eleeta)<0.6)
4669  fHistoElectronTPCPIDSelTOFSmallEta->Fill(aodt->Pt(),nsigma_tpcele);
4670  if(fabs(eleeta)>0.6 && fabs(eleeta)<0.8)
4671  fHistoElectronTPCPIDSelTOFLargeEta->Fill(aodt->Pt(),nsigma_tpcele);
4672  if(eleeta>-0.8 && eleeta<-0.6){
4673  fHistoElectronTPCPIDSelTOFEtaDep[0]->Fill(aodt->Pt(),nsigma_tpcele);
4674  }else if(eleeta>-0.6&&eleeta<-0.4){
4675  fHistoElectronTPCPIDSelTOFEtaDep[1]->Fill(aodt->Pt(),nsigma_tpcele);
4676  }else if(eleeta>-0.4&&eleeta<-0.2){
4677  fHistoElectronTPCPIDSelTOFEtaDep[2]->Fill(aodt->Pt(),nsigma_tpcele);
4678  }else if(eleeta>-0.2&&eleeta<0.0){
4679  fHistoElectronTPCPIDSelTOFEtaDep[3]->Fill(aodt->Pt(),nsigma_tpcele);
4680  }else if(eleeta>0.0&&eleeta<0.2){
4681  fHistoElectronTPCPIDSelTOFEtaDep[4]->Fill(aodt->Pt(),nsigma_tpcele);
4682  }else if(eleeta>0.2&&eleeta<0.4){
4683  fHistoElectronTPCPIDSelTOFEtaDep[5]->Fill(aodt->Pt(),nsigma_tpcele);
4684  }else if(eleeta>0.4&&eleeta<0.6){
4685  fHistoElectronTPCPIDSelTOFEtaDep[6]->Fill(aodt->Pt(),nsigma_tpcele);
4686  }else if(eleeta>0.6&&eleeta<0.8){
4687  fHistoElectronTPCPIDSelTOFEtaDep[7]->Fill(aodt->Pt(),nsigma_tpcele);
4688  }
4689  }
4690  if(nsigma_tpcele>-0.5&&nsigma_tpcele<3.){
4691  fHistoElectronTOFPIDSelTPC->Fill(aodt->Pt(),nsigma_tofele);
4692  }
4693  }
4694  if(fAnalCuts->SingleTrkCuts(aodt,aodtpid,fVtx1)){
4695  seleFlags[i]=kTRUE;
4696  nSeleTrks++;
4697  fHistoElectronTPCSelPID->Fill(aodt->Pt(),nsigma_tpcele);
4698  fHistoElectronTOFSelPID->Fill(aodt->Pt(),nsigma_tofele);
4699  }
4700  } // end loop on tracks
4701 }
4702 //________________________________________________________________________
4703 void AliAnalysisTaskSEXic2eleXifromAODtracks::SelectCascade( const AliVEvent *event,Int_t nCascs,Int_t &nSeleCasc, Bool_t *seleCascFlags, TClonesArray *mcArray)
4704 {
4705  //
4706  // Select good Casc using fAnalCuts (AliRDHFCuts object) and return the array of their ids
4707  //
4708 
4709  Double_t primVtx[3];
4710  fVtx1->GetXYZ(primVtx);
4711 
4712  nSeleCasc = 0;
4713  for(Int_t icasc=0;icasc<nCascs;icasc++)
4714  {
4715  seleCascFlags[icasc] = kFALSE;
4716  AliAODcascade *casc = ((AliAODEvent*)event)->GetCascade(icasc);
4717 
4718  if(!fAnalCuts) continue;
4719  if(fAnalCuts->SingleCascadeCuts(casc,primVtx)){
4720  seleCascFlags[icasc] = kTRUE;
4721  nSeleCasc++;
4722  }
4723  }
4724 }
4725 //_________________________________________________________________
4727  //
4728  // check in which of the pools the current event falls
4729  //
4730 
4731  Int_t theBinZ=TMath::BinarySearch(fNzVtxBins,fZvtxBins,zvert);
4732  if(theBinZ<0 || theBinZ>=fNzVtxBins) return -1;
4733  Int_t theBinM=TMath::BinarySearch(fNCentBins,fCentBins,mult);
4734  if(theBinM<0 || theBinM>=fNCentBins) return -1;
4735  //return fNCentBins*theBinZ+theBinM;
4736  Int_t theBinR=TMath::BinarySearch(fNRPBins,fRPBins,rp);
4737  if(theBinR<0 || theBinR>=fNRPBins) return -1;
4738  return fNzVtxBins*fNCentBins*theBinR+fNCentBins*theBinZ+theBinM;
4739 }
4740 //_________________________________________________________________
4742 {
4743  //
4744  // perform mixed event analysis
4745  //
4746  Int_t nextRes( nextResVec[poolIndex] );
4747  Int_t KiddiePool = m_ReservoirE[poolIndex].size();
4748  if( !reservoirsReady[poolIndex] ) KiddiePool = nextRes;
4749 
4750  if( KiddiePool>0 )
4751  {
4752  for(Int_t j=0;j<KiddiePool;j++){
4753  if( j!=nextRes ){
4754  FillBackground(m_ReservoirE[poolIndex][nextRes],m_ReservoirVarsE[poolIndex][nextRes],m_ReservoirL1[poolIndex][j],m_ReservoirVarsL1[poolIndex][j],1);
4755  FillBackground(m_ReservoirE[poolIndex][j],m_ReservoirVarsE[poolIndex][j],m_ReservoirL1[poolIndex][nextRes],m_ReservoirVarsL1[poolIndex][nextRes],1);
4756  FillBackground(m_ReservoirE[poolIndex][nextRes],m_ReservoirVarsE[poolIndex][nextRes],m_ReservoirL2[poolIndex][j],m_ReservoirVarsL2[poolIndex][j],-1);
4757  FillBackground(m_ReservoirE[poolIndex][j],m_ReservoirVarsE[poolIndex][j],m_ReservoirL2[poolIndex][nextRes],m_ReservoirVarsL2[poolIndex][nextRes],-1);
4758  }
4759  }
4760  }
4761 }
4762 //_________________________________________________________________
4763 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillBackground(std::vector<TLorentzVector * > mixTypeE,std::vector<TVector * > mixTypeEVars, std::vector<TLorentzVector * > mixTypeL, std::vector<TVector * > mixTypeLVars, Int_t charge_xi)
4764 {
4765  //
4766  // Fill background
4767  //
4768  int nEle = mixTypeE.size();
4769  int nCasc = mixTypeL.size();
4770  for(Int_t ie=0;ie<nEle;ie++){
4771  TLorentzVector* trke=mixTypeE[ie];
4772  if(!trke) continue;
4773  TVector *elevars = mixTypeEVars[ie];
4774  for(Int_t iv=0;iv<nCasc;iv++){
4775  TLorentzVector* casc=mixTypeL[iv];
4776  TVector *cascvars = mixTypeLVars[iv];
4777  if(!casc) continue;
4778  FillMixROOTObjects(trke,casc,elevars,cascvars,charge_xi);
4779  }
4780  }
4781  return;
4782 }
4783 //_________________________________________________________________
4785 {
4786  //
4787  // Analyze AliAODmcparticle
4788  //
4789 
4790  Int_t nmcpart = mcArray->GetEntriesFast();
4791 
4792  Int_t mcevttype = 0;
4793  Int_t nccbar = 0;
4794  Bool_t sigmaevent = kFALSE;
4795  if(fMCEventType==1 || fMCEventType==2 || fMCEventType==11 || fMCEventType==12){
4796  //1: c quark event
4797  //2: b quark event
4798  //11: near side c-cbar event
4799  //12: away side c-cbar event
4800  Int_t ncquark = 0;
4801  Int_t ncbarquark = 0;
4802  Double_t phi_c = -9999.;
4803  Double_t phi_cbar = -9999.;
4804  for(Int_t i=0;i<nmcpart;i++)
4805  {
4806  AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(i);
4807  if(TMath::Abs(mcpart->GetPdgCode())==4){
4808  if(fabs(mcpart->Y())<1.5){
4809  if(mcpart->GetPdgCode()==4){
4810  phi_c = mcpart->Phi();
4811  ncquark++;
4812  }
4813  if(mcpart->GetPdgCode()==-4){
4814  phi_cbar = mcpart->Phi();
4815  ncbarquark++;
4816  }
4817  if(mcevttype==0){
4818  mcevttype = 1;
4819  }else if(mcevttype==1){
4820  mcevttype = 1;
4821  }else if(mcevttype==2){
4822  mcevttype = 3;
4823  }else if(mcevttype==3){
4824  mcevttype = 3;
4825  }
4826  nccbar++;
4827  }
4828  }
4829  if(TMath::Abs(mcpart->GetPdgCode())==5){
4830  if(!mcpart->IsPhysicalPrimary()) continue;
4831  if(fabs(mcpart->Y())<1.5){
4832  if(mcevttype==0){
4833  mcevttype = 2;
4834  }else if(mcevttype==1){
4835  mcevttype = 3;
4836  }else if(mcevttype==2){
4837  mcevttype = 2;
4838  }else if(mcevttype==3){
4839  mcevttype = 3;
4840  }
4841  }
4842  }
4843  }
4844 
4845  if(fMCEventType==1||fMCEventType==11||fMCEventType==12){
4846  if((mcevttype==2)||(mcevttype==0)||(mcevttype==3)) return kFALSE;
4847  }else if(fMCEventType==2){
4848  if((mcevttype==1)||(mcevttype==0)||(mcevttype==3)) return kFALSE;
4849  }
4850 
4851  if(fMCEventType>10){
4852  if(ncquark!=1) return kFALSE;
4853  if(ncbarquark!=1) return kFALSE;
4854  Double_t dphi = fabs(phi_c - phi_cbar);
4855  if(dphi>2*M_PI) dphi -= 2*M_PI;
4856  if(dphi>M_PI) dphi = 2*M_PI-dphi;
4857  if(fMCEventType==11 && dphi>M_PI/3.) return kFALSE;
4858  if(fMCEventType==12 && dphi<2*M_PI/3.) return kFALSE;
4859  fHistoMCDeltaPhiccbar->Fill(dphi);
4860  }
4861 
4862  fHistoMCEventType->Fill(mcevttype);
4863  fHistoMCNccbar->Fill(nccbar);
4864  }
4865 
4866  for(Int_t i=0;i<nmcpart;i++)
4867  {
4868  AliAODMCParticle *mcpart = (AliAODMCParticle*) mcArray->At(i);
4869  if(TMath::Abs(mcpart->GetPdgCode())==4132){
4870  Bool_t e_flag = kFALSE;
4871  Bool_t xi_flag = kFALSE;
4872  AliAODMCParticle *mcepart = 0;
4873  AliAODMCParticle *mccascpart = 0;
4874  for(Int_t idau=mcpart->GetFirstDaughter();idau<mcpart->GetLastDaughter()+1;idau++)
4875  {
4876  if(idau<0) break;
4877  AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
4878  if(!mcdau) continue;
4879  if(TMath::Abs(mcdau->GetPdgCode())==11){
4880  e_flag = kTRUE;
4881  mcepart = mcdau;
4882  }
4883  if(TMath::Abs(mcdau->GetPdgCode())==3312){
4884  xi_flag = kTRUE;
4885  mccascpart = mcdau;
4886  }
4887  }
4888 
4889  Int_t decaytype = -9999;
4890  if(e_flag && xi_flag) decaytype = 0;
4891 
4892  if(e_flag&&xi_flag)
4893  fHistoMCXic0Decays->Fill(1);
4894  if(!e_flag&&xi_flag)
4895  fHistoMCXic0Decays->Fill(2);
4896  if(e_flag&&!xi_flag)
4897  fHistoMCXic0Decays->Fill(3);
4898  if(!e_flag&&!xi_flag)
4899  fHistoMCXic0Decays->Fill(4);
4900 
4901  FillMCROOTObjects(mcpart,mcepart,mccascpart,decaytype);
4902  }
4903  if(TMath::Abs(mcpart->GetPdgCode())==5132 || TMath::Abs(mcpart->GetPdgCode())==5232){
4904  Bool_t e_flag = kFALSE;
4905  Bool_t xic_flag = kFALSE;
4906  AliAODMCParticle *mcepart = 0;
4907  AliAODMCParticle *mcxicpart = 0;
4908  AliAODMCParticle *mccascpart = 0;
4909  for(Int_t idau=mcpart->GetFirstDaughter();idau<mcpart->GetLastDaughter()+1;idau++)
4910  {
4911  if(idau<0) break;
4912  AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
4913  if(!mcdau) continue;
4914  if(TMath::Abs(mcdau->GetPdgCode())==11){
4915  e_flag = kTRUE;
4916  mcepart = mcdau;
4917  }
4918  if(TMath::Abs(mcdau->GetPdgCode())==4132 || TMath::Abs(mcdau->GetPdgCode())==4232 ){
4919  xic_flag = kTRUE;
4920  mcxicpart = mcdau;
4921  }
4922  }
4923 
4924  Bool_t xi_flag = kFALSE;
4925  if(e_flag && xic_flag){
4926  for(Int_t idau=mcxicpart->GetFirstDaughter();idau<mcxicpart->GetLastDaughter()+1;idau++)
4927  {
4928  if(idau<0) break;
4929  AliAODMCParticle *mcdau = (AliAODMCParticle*) mcArray->At(idau);
4930  if(!mcdau) continue;
4931  if(TMath::Abs(mcdau->GetPdgCode())==3312){
4932  xi_flag = kTRUE;
4933  mccascpart = mcdau;
4934  }
4935  }
4936  }
4937 
4938  if(xic_flag){
4939  Double_t contmc_withxic[3];
4940  contmc_withxic[0] = mcpart->Pt();
4941  contmc_withxic[1] = mcpart->Y();
4942  contmc_withxic[2] = mcxicpart->Y();
4943  if(fabs(mcxicpart->Y())<1.){
4944  fHistoResponseMcGenXibPtvsXicPt->Fill(mcpart->Pt(),mcxicpart->Pt());
4945  }
4946  fHistoXibMCGenWithXic->Fill(contmc_withxic);
4947  }
4948 
4949  Int_t decaytype = -9999;
4950  if(e_flag && xic_flag && xi_flag) decaytype = 10;
4951  FillMCROOTObjects(mcpart,mcepart,mccascpart,decaytype);
4952  }
4953  if(TMath::Abs(mcpart->GetPdgCode())==11 && mcpart->GetStatus()==1){
4954  AliESDtrackCuts *esdcuts = fAnalCuts->GetTrackCuts();
4956  esdcuts->GetEtaRange(etamin,etamax);
4957  if(fabs(mcpart->Eta())<etamax){
4958  Bool_t gamma_flag = kFALSE;
4959  Int_t labmother = mcpart->GetMother();
4960  if(labmother>=0){
4961  AliAODMCParticle *mcmother = (AliAODMCParticle*) mcArray->At(labmother);
4962  Int_t pdgmother = mcmother->GetPdgCode();
4963  if(TMath::Abs(pdgmother)==22) gamma_flag = kTRUE;
4964  }
4965  if(!gamma_flag) fHistoBachPtMCGen->Fill(mcpart->Pt());
4966  }
4967  FillMCEleROOTObjects(mcpart, mcArray);
4968  }
4969  if(TMath::Abs(mcpart->GetPdgCode())==3312){
4970  Double_t etamin, etamax, rapmin, rapmax;
4971  fAnalCuts->GetProdCascEtaRange(etamin,etamax);
4972  fAnalCuts->GetProdCascRapRange(rapmin,rapmax);
4973 
4974  if((fabs(mcpart->Y())<rapmax) && (fabs(mcpart->Eta())<etamax)){
4975  fHistoXiMassvsPtMCGen->Fill(1.32171, mcpart->Pt());
4976  }
4977  FillMCCascROOTObjects(mcpart, mcArray);
4978  }
4979 
4980  if(TMath::Abs(mcpart->GetPdgCode())==111){
4981  if(fabs(mcpart->Y())<0.5){
4982  fHistoPi0MCGen->Fill(mcpart->Pt());
4983  }
4984  }
4985  if(TMath::Abs(mcpart->GetPdgCode())==221){
4986  if(fabs(mcpart->Y())<0.5){
4987  fHistoEtaMCGen->Fill(mcpart->Pt());
4988  }
4989  }
4990  }
4991 
4992  if(fMCDoPairAnalysis)
4993  {
4994  for(Int_t i=0;i<nmcpart;i++)
4995  {
4996  AliAODMCParticle *mcparte = (AliAODMCParticle*) mcArray->At(i);
4997  if(!mcparte) continue;
4998  if(TMath::Abs(mcparte->GetPdgCode())!=11) continue;
4999  if(mcparte->GetStatus()!=1) continue;
5000  if(mcparte->Pt()<0.4) continue;//Apply rough cuts
5001  if(fabs(mcparte->Eta())>0.8) continue;//Apply rough cuts
5002  for(Int_t j=0;j<nmcpart;j++)
5003  {
5004  AliAODMCParticle *mcpartv = (AliAODMCParticle*) mcArray->At(j);
5005  if(!mcpartv) continue;
5006  if(TMath::Abs(mcpartv->GetPdgCode())!=3312) continue;
5007  if(mcpartv->Pt()<0.4) continue;//Apply rough cuts
5008  if(fabs(mcpartv->Eta())>0.8) continue;//Apply rough cuts
5009  if(mcpartv->GetNDaughters()!=2) continue;//Apply rough cuts
5010 
5011  FillMCGenPairROOTObjects(mcparte,mcpartv,mcArray);
5012  }
5013  }
5014  return kFALSE;
5015  }
5016 
5017  return kTRUE;
5018 }
5019 
5022 {
5023  //
5024  // Define mc pair tree variables
5025  //
5026 
5027  const char* nameoutput = GetOutputSlot(11)->GetContainer()->GetName();
5028  fMCGenPairVariablesTree = new TTree(nameoutput,"MC pair variables tree");
5029  Int_t nVar = 38;
5031  TString * fCandidateVariableNames = new TString[nVar];
5032 
5033  fCandidateVariableNames[ 0] = "InvMassEleXi";
5034  fCandidateVariableNames[ 1] = "EleXiPx";
5035  fCandidateVariableNames[ 2] = "EleXiPy";
5036  fCandidateVariableNames[ 3] = "EleXiPz";
5037  fCandidateVariableNames[ 4] = "ElePdgCode";
5038  fCandidateVariableNames[ 5] = "ElePx";
5039  fCandidateVariableNames[ 6] = "ElePy";
5040  fCandidateVariableNames[ 7] = "ElePz";
5041  fCandidateVariableNames[ 8] = "XiPdgCode";
5042  fCandidateVariableNames[ 9] = "XiPx";
5043  fCandidateVariableNames[10] = "XiPy";
5044  fCandidateVariableNames[11] = "XiPz";
5045  fCandidateVariableNames[12] = "SameFlag";
5046  fCandidateVariableNames[13] = "EleNGeneration";
5047  fCandidateVariableNames[14] = "EleGen1PDG";
5048  fCandidateVariableNames[15] = "EleGen2PDG";
5049  fCandidateVariableNames[16] = "EleGen3PDG";
5050  fCandidateVariableNames[17] = "EleGen4PDG";
5051  fCandidateVariableNames[18] = "EleGen5PDG";
5052  fCandidateVariableNames[19] = "EleGen6PDG";
5053  fCandidateVariableNames[20] = "EleGen7PDG";
5054  fCandidateVariableNames[21] = "EleGen8PDG";
5055  fCandidateVariableNames[22] = "EleGen9PDG";
5056  fCandidateVariableNames[23] = "EleGen10PDG";
5057  fCandidateVariableNames[24] = "ElePrimPDG";
5058  fCandidateVariableNames[25] = "XiNGeneration";
5059  fCandidateVariableNames[26] = "XiGen1PDG";
5060  fCandidateVariableNames[27] = "XiGen2PDG";
5061  fCandidateVariableNames[28] = "XiGen3PDG";
5062  fCandidateVariableNames[29] = "XiGen4PDG";
5063  fCandidateVariableNames[30] = "XiGen5PDG";
5064  fCandidateVariableNames[31] = "XiGen6PDG";
5065  fCandidateVariableNames[32] = "XiGen7PDG";
5066  fCandidateVariableNames[33] = "XiGen8PDG";
5067  fCandidateVariableNames[34] = "XiGen9PDG";
5068  fCandidateVariableNames[35] = "XiGen10PDG";
5069  fCandidateVariableNames[36] = "XiPrimPDG";
5070  fCandidateVariableNames[37] = "MatchedPDG";
5071 
5072  for (Int_t ivar=0; ivar<nVar; ivar++) {
5073  fMCGenPairVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateMCGenPairVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
5074  }
5075  return;
5076 }
5077 
5079 void AliAnalysisTaskSEXic2eleXifromAODtracks::FillMCGenPairROOTObjects(AliAODMCParticle *mcparte, AliAODMCParticle *mcpartv, TClonesArray *mcArray)
5080 {
5081  //
5082  // Fill histograms or mc pair analysis tree
5083  //
5084  for(Int_t i=0;i<38;i++){
5085  fCandidateMCGenPairVariables[i] = -9999.;
5086  }
5087 
5088  TLorentzVector vele, vxi, vexi;
5089  vele.SetXYZM(mcparte->Px(),mcparte->Py(),mcparte->Pz(),0.000510998928);
5090  vxi.SetXYZM(mcpartv->Px(),mcpartv->Py(),mcpartv->Pz(),1.32171);
5091  vexi = vele + vxi;
5092 
5093  Int_t pdgarray_ele[100], labelarray_ele[100], ngen_ele;
5094  Int_t pdgarray_xi[100], labelarray_xi[100], ngen_xi;
5095  GetMCDecayHistory(mcparte,mcArray,pdgarray_ele,labelarray_ele,ngen_ele);
5096  GetMCDecayHistory(mcpartv,mcArray,pdgarray_xi,labelarray_xi,ngen_xi);
5097 
5098  Bool_t same_flag = kFALSE;
5099  Int_t matched_pdg = -999999;
5100  for(Int_t iemc=0;iemc<ngen_ele;iemc++){
5101  for(Int_t ivmc=0;ivmc<ngen_xi;ivmc++){
5102  if(labelarray_ele[iemc]==labelarray_xi[ivmc]){
5103  same_flag = kTRUE;
5104  matched_pdg = pdgarray_ele[iemc];
5105  break;
5106  }
5107  }
5108  if(same_flag) break;
5109  }
5110  Int_t pdgprim_ele = pdgarray_ele[ngen_ele-1];
5111  Int_t pdgprim_xi = pdgarray_xi[ngen_xi-1];
5112 
5113  fCandidateMCGenPairVariables[ 0] = vexi.M();
5114  fCandidateMCGenPairVariables[ 1] = vexi.Px();
5115  fCandidateMCGenPairVariables[ 2] = vexi.Py();
5116  fCandidateMCGenPairVariables[ 3] = vexi.Pz();
5117  fCandidateMCGenPairVariables[ 4] = mcparte->GetPdgCode();
5118  fCandidateMCGenPairVariables[ 5] = vele.Px();
5119  fCandidateMCGenPairVariables[ 6] = vele.Py();
5120  fCandidateMCGenPairVariables[ 7] = vele.Pz();
5121  fCandidateMCGenPairVariables[ 8] = mcpartv->GetPdgCode();
5122  fCandidateMCGenPairVariables[ 9] = vxi.Px();
5123  fCandidateMCGenPairVariables[10] = vxi.Py();
5124  fCandidateMCGenPairVariables[11] = vxi.Pz();
5125  fCandidateMCGenPairVariables[12] = (Float_t)same_flag;
5126  fCandidateMCGenPairVariables[13] = (Float_t)ngen_ele;
5127  fCandidateMCGenPairVariables[14] = (Float_t)pdgarray_ele[0];
5128  fCandidateMCGenPairVariables[15] = (Float_t)pdgarray_ele[1];
5129  fCandidateMCGenPairVariables[16] = (Float_t)pdgarray_ele[2];
5130  fCandidateMCGenPairVariables[17] = (Float_t)pdgarray_ele[3];
5131  fCandidateMCGenPairVariables[18] = (Float_t)pdgarray_ele[4];
5132  fCandidateMCGenPairVariables[19] = (Float_t)pdgarray_ele[5];
5133  fCandidateMCGenPairVariables[20] = (Float_t)pdgarray_ele[6];
5134  fCandidateMCGenPairVariables[21] = (Float_t)pdgarray_ele[7];
5135  fCandidateMCGenPairVariables[22] = (Float_t)pdgarray_ele[8];
5136  fCandidateMCGenPairVariables[23] = (Float_t)pdgarray_ele[9];
5137  fCandidateMCGenPairVariables[24] = (Float_t)pdgarray_ele[ngen_ele-1];
5138  fCandidateMCGenPairVariables[25] = (Float_t)ngen_xi;
5139  fCandidateMCGenPairVariables[26] = (Float_t)pdgarray_xi[0];
5140  fCandidateMCGenPairVariables[27] = (Float_t)pdgarray_xi[1];
5141  fCandidateMCGenPairVariables[28] = (Float_t)pdgarray_xi[2];
5142  fCandidateMCGenPairVariables[29] = (Float_t)pdgarray_xi[3];
5143  fCandidateMCGenPairVariables[30] = (Float_t)pdgarray_xi[4];
5144  fCandidateMCGenPairVariables[31] = (Float_t)pdgarray_xi[5];
5145  fCandidateMCGenPairVariables[32] = (Float_t)pdgarray_xi[6];
5146  fCandidateMCGenPairVariables[33] = (Float_t)pdgarray_xi[7];
5147  fCandidateMCGenPairVariables[34] = (Float_t)pdgarray_xi[8];
5148  fCandidateMCGenPairVariables[35] = (Float_t)pdgarray_xi[9];
5149  fCandidateMCGenPairVariables[36] = (Float_t)pdgarray_xi[ngen_xi-1];
5150  fCandidateMCGenPairVariables[37] = (Float_t) matched_pdg;
5151 
5152  fMCGenPairVariablesTree->Fill();
5153 }
5154 
5157 {
5158  //
5159  // Define mc pair tree variables
5160  //
5161 
5162  const char* nameoutput = GetOutputSlot(12)->GetContainer()->GetName();
5163  fCorrelationVariablesTree = new TTree(nameoutput,"Correlation variables tree");
5164  Int_t nVar = 14;
5165