AliPhysics  b97afa6 (b97afa6)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliAnalysisTaskSELc2V0bachelor.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 // Base class for Lc2V0 Analysis
21 //
22 //
23 // The Lc spectra study is done 2D histograms:
24 // cascade_invariantMass VS cascade_pT
25 //
26 // Cuts have been centralized in AliRDHFCutsLctoV0 class
27 //
28 //-------------------------------------------------------------------------
29 //
30 // Authors: A.De Caro(a,b), P. Pagano(b)
31 // (a) Centro 'E.Fermi' - Roma
32 // (b) INFN and University of Salerno
33 //
34 // Contatcs: decaro@sa.infn.it
35 // paola.pagano@sa.infn.it
36 //-------------------------------------------------------------------------
37 
38 #include <TSystem.h>
39 #include <TParticle.h>
40 #include <TParticlePDG.h>
41 #include <TH1F.h>
42 #include <TH2F.h>
43 #include <TH3F.h>
44 #include <THnSparse.h>
45 #include <TTree.h>
46 #include "TROOT.h"
47 #include <TDatabasePDG.h>
48 #include <AliAnalysisDataSlot.h>
49 #include <AliAnalysisDataContainer.h>
50 #include "AliMCEvent.h"
51 #include "AliAnalysisManager.h"
52 #include "AliAODMCHeader.h"
53 #include "AliAODHandler.h"
54 #include "AliLog.h"
55 #include "AliExternalTrackParam.h"
56 #include "AliAODVertex.h"
57 #include "AliAODRecoDecay.h"
58 #include "AliAODRecoDecayHF.h"
59 #include "AliAODRecoCascadeHF.h"
60 #include "AliAnalysisVertexingHF.h"
61 #include "AliESDtrack.h"
62 #include "AliAODTrack.h"
63 #include "AliAODv0.h"
64 #include "AliAODMCParticle.h"
65 #include "AliAnalysisTaskSE.h"
68 #include "AliAODPidHF.h"
69 #include "AliInputEventHandler.h"
70 #include "AliESDtrackCuts.h"
71 #include "AliNeutralTrackParam.h"
72 #include "AliVertexingHFUtils.h"
73 
74 using std::cout;
75 using std::endl;
76 
80 
81 //__________________________________________________________________________
83  fUseMCInfo(kFALSE),
84  fOutput(0),
85  fOutputAll(0),
86  fOutputPIDBach(0),
87  fCEvents(0),
88  fEventCounter(0),
89  fCounter(0),
90  fAnalCuts(0),
91  fUseOnTheFlyV0(kFALSE),
92  fAODProtection(1),
93  fIsEventSelected(kFALSE),
94  fWriteVariableTree(kFALSE),
95  fVariablesTree(0),
96  fCandidateVariables(),
97  fVtx1(0),
98  fBzkG(0),
99  fAdditionalChecks(kFALSE),
100  fFillSubSampleHist(kFALSE),
101  fTrackRotation(kFALSE),
102  fOutputPIDBachTR(0),
103  fMinAngleForRot(5*TMath::Pi()/6),
104  fMaxAngleForRot(7*TMath::Pi()/6),
105  fMinMass(0),
106  fMaxMass(0),
107  fNRotations(9),
108  fPtMinToFillTheTree(0.),
109  fPtMaxToFillTheTree(999.),
110  fUseTPCPIDtoFillTree(kFALSE),
111  fSign(2),
112  fCheckOrigin(kFALSE),
113  fReconstructSecVtx(kFALSE),
114  fDoSingleAnalysisForSystK0SP(0)
115 {
116  //
118  //
119 
120  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
121  fMinMass=mLcPDG-0.250;
122  fMaxMass=mLcPDG+0.250;
123 
124 }
125 //___________________________________________________________________________
127  AliRDHFCutsLctoV0* analCuts, Bool_t useOnTheFly,
128  Bool_t writeVariableTree, Bool_t additionalChecks, Bool_t trackRotation, Bool_t useTPCpid, Char_t sign, Bool_t origin) :
129  AliAnalysisTaskSE(name),
130  fUseMCInfo(kFALSE),
131  fOutput(0),
132  fOutputAll(0),
133  fOutputPIDBach(0),
134  fCEvents(0),
135  fEventCounter(0),
136  fCounter(0),
137  fAnalCuts(analCuts),
138  fUseOnTheFlyV0(useOnTheFly),
139  fAODProtection(1),
140  fIsEventSelected(kFALSE),
141  fWriteVariableTree(writeVariableTree),
142  fVariablesTree(0),
143  fCandidateVariables(),
144  fVtx1(0),
145  fBzkG(0),
146  fAdditionalChecks(additionalChecks),
147  fFillSubSampleHist(kFALSE),
148  fTrackRotation(trackRotation),
149  fOutputPIDBachTR(0),
150  fMinAngleForRot(5*TMath::Pi()/6),
151  fMaxAngleForRot(7*TMath::Pi()/6),
152  fMinMass(0),
153  fMaxMass(0),
154  fNRotations(9),
155  fPtMinToFillTheTree(0.),
156  fPtMaxToFillTheTree(999.),
157  fUseTPCPIDtoFillTree(useTPCpid),
158  fSign(sign),
159  fCheckOrigin(origin),
160  fReconstructSecVtx(kFALSE),
161  fDoSingleAnalysisForSystK0SP(0)
162 {
163  //
165  //
166  Info("AliAnalysisTaskSELc2V0bachelor","Calling Constructor");
167 
169  AliInfo(Form("You cannot initialize fWriteVariableTree=%d and fTrackRotation=%d => fTrackRotation=0",fWriteVariableTree,fTrackRotation));
170  fTrackRotation=kFALSE;
171  }
172 
173  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
174  fMinMass=mLcPDG-0.250;
175  fMaxMass=mLcPDG+0.250;
176 
177  DefineOutput(1,TList::Class()); //conters
178  DefineOutput(2,AliNormalizationCounter::Class());
179  DefineOutput(3,AliRDHFCutsLctoV0::Class());
180  if (!writeVariableTree) {
181  DefineOutput(4,TList::Class()); //All Entries output
182  DefineOutput(5,TList::Class()); //3sigma PID output
183  if (trackRotation) {
184  DefineOutput(6,TList::Class()); //All Entries output
185  }
186  } else {
187  // Output slot #4 keeps a tree of the candidate variables after track selection
188  DefineOutput(4,TTree::Class()); //My private output
189  }
190 
191  if (fWriteVariableTree) fSign=2;
192 
193 }
194 
195 //___________________________________________________________________________
197  //
199  //
200  Info("~AliAnalysisTaskSELc2V0bachelor","Calling Destructor");
201 
202  if (fOutput) {
203  delete fOutput;
204  fOutput = 0;
205  }
206 
207  if (fOutputAll) {
208  delete fOutputAll;
209  fOutputAll = 0;
210  }
211 
212  if (fOutputPIDBach) {
213  delete fOutputPIDBach;
214  fOutputPIDBach = 0;
215  }
216 
217  if (fCounter) {
218  delete fCounter;
219  fCounter = 0;
220  }
221 
222  if (fAnalCuts) {
223  delete fAnalCuts;
224  fAnalCuts = 0;
225  }
226 
227  if (fVariablesTree) {
228  delete fVariablesTree;
229  fVariablesTree = 0;
230  }
231 
232  if (fOutputPIDBachTR) {
233  delete fOutputPIDBachTR;
234  fOutputPIDBachTR = 0;
235  }
236 
237 }
238 //_________________________________________________
240  //
242  //
243 
244  fIsEventSelected=kFALSE;
245 
246  if (fDebug > 1) AliInfo("Init");
247 
248  PostData(3,fAnalCuts);
249 
250  return;
251 }
252 
253 //_________________________________________________
255 {
257  if (!fInputEvent) {
258  AliError("NO EVENT FOUND!");
259  return;
260  }
261 
262  AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
263 
264  if(fAODProtection>=0)
265  {
266  // Protection against different number of events in the AOD and deltaAOD
267  // In case of discrepancy the event is rejected.
268  Int_t matchingAODdeltaAODlevel = AliRDHFCuts::CheckMatchingAODdeltaAODevents();
269  if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 && fAODProtection==1)) {
270  // AOD/deltaAOD trees have different number of entries || TProcessID do not match while it was required
271  fCEvents->Fill(19);
272  return;
273  }
274  }
275 
276  TClonesArray *arrayLctopKos=0;
277 
278  if (!aodEvent && AODEvent() && IsStandardAOD()) {
279  // In case there is an AOD handler writing a standard AOD, use the AOD
280  // event in memory rather than the input (ESD) event.
281  aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
282  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
283  // have to taken from the AOD event hold by the AliAODExtension
284  AliAODHandler* aodHandler = (AliAODHandler*)
285  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
286 
287  if (aodHandler->GetExtensions()) {
288  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
289  AliAODEvent *aodFromExt = ext->GetAOD();
290  arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
291  }
292  } else {
293  arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF");
294  }
295 
296  fCEvents->Fill(1);
297 
298  if (fUseMCInfo)
300 
301  // AOD primary vertex
302  fVtx1 = (AliAODVertex*)aodEvent->GetPrimaryVertex();
303  if (!fVtx1) return;
304 
305  fIsEventSelected = fAnalCuts->IsEventSelected(aodEvent); // better to initialize before CheckEventSelection call
306 
307  CheckEventSelection(aodEvent);
308 
309 
310  // fix for temporary bug in ESDfilter
311  fBzkG = (Double_t)aodEvent->GetMagneticField();
313  if (TMath::Abs(fBzkG)<0.001) return;
314  fCEvents->Fill(2);
315 
316  if (!arrayLctopKos) {
317  AliInfo("Could not find array of HF cascades, skipping the event");
318  return;
319  } else {
320  if (arrayLctopKos->GetEntriesFast()) {
321  AliInfo(Form("Found %d cascades",arrayLctopKos->GetEntriesFast()));
322  }
323  }
324  fCEvents->Fill(3);
325 
326  // mc analysis
327  TClonesArray *mcArray = 0;
328  AliAODMCHeader *mcHeader=0;
329 
330  if (fUseMCInfo) {
331  // MC array need for maching
332  mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
333  if (!mcArray) {
334  AliError("Could not find Monte-Carlo in AOD");
335  return;
336  }
337  fCEvents->Fill(4); // in case of MC events
338 
339  // load MC header
340  mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
341  if (!mcHeader) {
342  AliError("AliAnalysisTaskSELc2V0bachelor::UserExec: MC header branch not found!\n");
343  return;
344  }
345  fCEvents->Fill(5); // in case of MC events
346 
347  Double_t zMCVertex = mcHeader->GetVtxZ();
348  if (TMath::Abs(zMCVertex) > fAnalCuts->GetMaxVtxZ()) {
349  AliDebug(2,Form("Event rejected: abs(zVtxMC)=%f > fAnalCuts->GetMaxVtxZ()=%f",zMCVertex,fAnalCuts->GetMaxVtxZ()));
350  return;
351  } else {
352  fCEvents->Fill(17); // in case of MC events
353  }
354  }
355 
356  Int_t runnumber = aodEvent->GetRunNumber();
357  if (aodEvent->GetTriggerMask() == 0 && (runnumber >= 195344 && runnumber <= 195677)){
358  AliDebug(3,"Event rejected because of null trigger mask");
359  return;
360  }
361 
362  fCounter->StoreEvent(aodEvent,fAnalCuts,fUseMCInfo); // it is very important that it stays BEFORE any other event selection
363 
364  if (fVtx1->GetNContributors()>0) // this check is done in IsEventSelected
365  fCEvents->Fill(6);
366 
367  if ( !fIsEventSelected ) return; // don't take into account not selected events
368  fCEvents->Fill(7);
369 
371  MakeSingleAnalysisForSystK0SP(aodEvent,mcArray,fAnalCuts);
372  if(fDoSingleAnalysisForSystK0SP==2) return;
373  }
374 
375  fEventCounter++;
376 
377  Int_t nSelectedAnal = 0;
378  MakeAnalysisForLc2prK0S(aodEvent,arrayLctopKos,mcArray, nSelectedAnal, fAnalCuts);
379 
380  if (nSelectedAnal)
382 
383  fCounter->StoreCandidates(aodEvent,nSelectedAnal,kTRUE);
384  fCounter->StoreCandidates(aodEvent,nSelectedAnal,kFALSE);
385 
386  PostData(1,fOutput);
387  PostData(2,fCounter);
388  if (!fWriteVariableTree) {
389  PostData(4,fOutputAll);
390  PostData(5,fOutputPIDBach);
391  if (fTrackRotation)
392  PostData(6,fOutputPIDBachTR);
393  } else {
394  PostData(4,fVariablesTree);
395  }
396 
397  fIsEventSelected=kFALSE;
398 
399  return;
400 }
401 
402 //________________________________________ terminate ___________________________
404 {
405  // The Terminate() function is the last function to be called during
406  // a query. It always runs on the client, it can be used to present
407  // the results graphically or save the results to file.
408 
409  //AliInfo("Terminate","");
410  AliAnalysisTaskSE::Terminate();
411 
412  fOutput = dynamic_cast<TList*> (GetOutputData(1));
413  if (!fOutput) {
414  AliError("fOutput not available");
415  return;
416  }
417 
418  //fCEvents = dynamic_cast<TH1F*>(fOutput->FindObject("fCEvents"));
419  if (!fWriteVariableTree) {
420  fOutputAll = dynamic_cast<TList*> (GetOutputData(4));
421  if (!fOutputAll) {
422  AliError("fOutputAll not available");
423  return;
424  }
425 
426  fOutputPIDBach = dynamic_cast<TList*> (GetOutputData(5));
427  if (!fOutputPIDBach) {
428  AliError("fOutputPIDBach not available");
429  return;
430  }
431 
432  if (fTrackRotation) {
433  fOutputPIDBachTR = dynamic_cast<TList*> (GetOutputData(6));
434  if (!fOutputPIDBachTR) {
435  AliError("fOutputPIDBachTR not available");
436  return;
437  }
438  }
439 
440  } else {
441  fVariablesTree = dynamic_cast<TTree*> (GetOutputData(4));
442  if (!fVariablesTree) {
443  AliError("fVariablesTree not available");
444  return;
445  }
446  }
447 
448  return;
449 }
450 //___________________________________________________________________________
453  AliInfo(Form("CreateOutputObjects of task %s\n", GetName()));
454 
455  fOutput = new TList();
456  fOutput->SetOwner();
457  fOutput->SetName("chist0");
458  DefineGeneralHistograms(); // define general histograms
459  PostData(1,fOutput);
460 
461  fCounter = new AliNormalizationCounter("NormalizationCounter");
462  fCounter->Init();
463  PostData(2,fCounter);
464 
465  if (!fWriteVariableTree) {
466 
467  fOutputAll = new TList();
468  fOutputAll->SetOwner();
469  fOutputAll->SetName("listAll");
470 
471  fOutputPIDBach = new TList();
472  fOutputPIDBach->SetOwner();
473  fOutputPIDBach->SetName("listPIDBach");
474 
475  if (fTrackRotation) {
476  fOutputPIDBachTR = new TList();
477  fOutputPIDBachTR->SetOwner();
478  fOutputPIDBachTR->SetName("listPIDBachTR");
479  }
480 
481  DefineK0SHistos(); // define analysis histograms
482  if (fUseMCInfo && fCheckOrigin) DefineSignalHistosSeparatedPerOrigin(); // define analysis histograms for SNG separated for origin
483 
484  PostData(4,fOutputAll);
485  PostData(5,fOutputPIDBach);
486 
487  if (fTrackRotation)
488  PostData(6,fOutputPIDBachTR);
489 
490  }
491  else {
493  PostData(4,fVariablesTree);
494  }
495 
496  return;
497 }
498 
499 //-------------------------------------------------------------------------------
500 void AliAnalysisTaskSELc2V0bachelor::MakeAnalysisForLc2prK0S(AliAODEvent *aodEvent,TClonesArray *arrayLctopKos,
501  TClonesArray *mcArray,
502  Int_t &nSelectedAnal,
503  AliRDHFCutsLctoV0 *cutsAnal)
504 {
505 
507 
508  Int_t pdgCand = 4122;
509  Int_t pdgDgLctoV0bachelor[2]={2212,310}; // always 1st bachelor, 2nd V0
510  Int_t pdgDgV0toDaughters[2]={211,211};
511 
512  // loop over cascades to search for candidates Lc->p+K0S
513  Int_t nCascades= arrayLctopKos->GetEntriesFast();
514  if (nCascades==0) {
515  AliInfo("Could not find cascades, skipping the event");
516  return;
517  }
519  for (Int_t iLctopK0S = 0; iLctopK0S<nCascades; iLctopK0S++) {
520 
521  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(0);
522 
523  // Lc candidates and K0S from Lc
524  AliAODRecoCascadeHF* lcK0Spr = dynamic_cast<AliAODRecoCascadeHF*>(arrayLctopKos->At(iLctopK0S));
525  if (!lcK0Spr) {
526  AliDebug(2,Form("Cascade %d doens't exist, skipping",iLctopK0S));
527  continue;
528  }
529 
530  if (!(lcK0Spr->CheckCascadeFlags())) {
531  AliDebug(2,Form("Cascade %d is not flagged as Lc candidate",iLctopK0S));
532  continue;
533  }
534 
535  Bool_t unsetvtx=kFALSE;
536  if (!lcK0Spr->GetOwnPrimaryVtx()) {
537  lcK0Spr->SetOwnPrimaryVtx(fVtx1);
538  unsetvtx=kTRUE;
539  }
540 
541  if(!vHF->FillRecoCasc(aodEvent,lcK0Spr,kFALSE)){//Fill the data members of the candidate only if they are empty.
542  fCEvents->Fill(18);//monitor how often this fails
543  continue;
544  }
545  if (fReconstructSecVtx) {
546  if (!(vHF->RecoSecondaryVertexForCascades(aodEvent, lcK0Spr))) {
547  continue;
548  }
549  }
550  if (!lcK0Spr->GetSecondaryVtx()) {
551  AliInfo("No secondary vertex"); // it will be done in AliRDHFCutsLctoV0::IsSelected
552  continue;
553  }
554 
555  if (lcK0Spr->GetNDaughters()!=2) {
556  AliDebug(2,Form("Cascade %d has not 2 daughters (nDaughters=%d)",iLctopK0S,lcK0Spr->GetNDaughters())); // it will be done in AliRDHFCutsLctoV0::IsSelected
557  continue;
558  }
559 
560  if ( (fSign == 0 && lcK0Spr->Charge()<0) ||
561  (fSign == 1 && lcK0Spr->Charge()>0) ) {
562  AliDebug(2,Form("Charge of the cascade %d is different with respect to the required one",iLctopK0S)); //
563  continue;
564  }
565 
566  AliAODv0 * v0part = dynamic_cast<AliAODv0*>(lcK0Spr->Getv0());
567  AliAODTrack * bachPart = dynamic_cast<AliAODTrack*>(lcK0Spr->GetBachelor());
568  if (!v0part || !bachPart) {
569  AliDebug(2,Form("Cascade %d has no V0 or no bachelor object",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected
570  continue;
571  }
572 
573  if (!v0part->GetSecondaryVtx()) {
574  AliDebug(2,Form("No secondary vertex for V0 by cascade %d",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected
575  continue;
576  }
577 
578  if (v0part->GetNDaughters()!=2) {
579  AliDebug(2,Form("current V0 has not 2 daughters (onTheFly=%d, nDaughters=%d)",v0part->GetOnFlyStatus(),v0part->GetNDaughters())); // it will be done in AliRDHFCutsLctoV0::IsSelected
580  continue;
581  }
582 
583  AliAODTrack * v0Pos = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0PositiveTrack());
584  AliAODTrack * v0Neg = dynamic_cast<AliAODTrack*>(lcK0Spr->Getv0NegativeTrack());
585  if (!v0Neg || !v0Pos) {
586  AliDebug(2,Form("V0 by cascade %d has no V0positive of V0negative object",iLctopK0S)); // it will be done in AliRDHFCutsLctoV0::IsSelected
587  continue;
588  }
589 
590  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(1);
591 
592  if (v0Pos->Charge() == v0Neg->Charge()) continue;
593 
594  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(2);
595 
596  Int_t isLc = 0;
597  Int_t originLc = -1; // -1 -> RD; 0 -> BKG; 1 -> form c; 2 -> from b; 3 -> not from quark
598 
599  if (fUseMCInfo) {
600 
601  Int_t pdgCode=-2;
602 
603  // find associated MC particle for Lc -> p+K0 and K0S->pi+pi
604  Int_t mcLabel = lcK0Spr->MatchToMC(pdgCand,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE);
605  if (mcLabel!=-1) {
606  AliDebug(2,Form(" ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~cascade number %d (total cascade number = %d)", iLctopK0S,nCascades));
607 
608  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel));
609  if (partLc) {
610  pdgCode = partLc->GetPdgCode();
611  if (pdgCode<0) AliDebug(2,Form(" ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯ MClabel=%d ~~~~~~~~~~ pdgCode=%d", mcLabel, pdgCode));
612  pdgCode = TMath::Abs(pdgCode);
613  isLc = 1;
615  Int_t pdgMom = util->CheckOrigin(mcArray,partLc,kFALSE);
616  if (pdgMom == 4) {
617  originLc=1; // from c
618  } else if (pdgMom == 5) {
619  originLc=2; // form b
620  } else {
621  Int_t isThereaQuark=util->CheckOrigin(mcArray,partLc,kTRUE);
622  if (isThereaQuark<=0) originLc=3; // not from q
623  }
624  delete util;
625  }
626  } else {
627  AliDebug(2,Form("No MC candidate (cascade number %d -total cascade number = %d -)", iLctopK0S,nCascades));
628  pdgCode=-1;
629  }
630  } else {
631  originLc=-1; // real data
632  }
633 
634  FillLc2pK0Sspectrum(lcK0Spr, isLc,
635  nSelectedAnal, cutsAnal,
636  mcArray, originLc);
637 
638  if (unsetvtx) lcK0Spr->UnsetOwnPrimaryVtx();
639 
640  }
641 
642  delete vHF;
643  AliDebug(2, Form("Found %d Reco particles that are Lc!!", nSelectedAnal));
644 
645  return;
646 }
647 
648 //________________________________________________________________________
650  Int_t isLc,
651  Int_t &nSelectedAnal,
652  AliRDHFCutsLctoV0 *cutsAnal,
653  TClonesArray *mcArray,
654  Int_t originLc)
655 {
656  //
658  //
659 
660  TString fillthis="";
661 
662  AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor();
663  Double_t momBach = bachelor->P();
664 
665  AliAODv0 * v0part = (AliAODv0*)part->Getv0();
666  Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s
667 
668  Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID();
669  cutsAnal->SetUsePID(kFALSE);
670  Bool_t isInCascadeWindow = (((cutsAnal->IsSelectedSingleCut(part,AliRDHFCuts::kCandidate,0))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // cut on Lc->p+K0S invMass
671  cutsAnal->SetUsePID(areCutsUsingPID);
672 
673  if ( onFlyV0 && !fUseOnTheFlyV0 ) return;
674 
676 
677  // track rotation
678  if (fTrackRotation) {
679  if (onFlyV0) {
680  TrackRotation(cutsAnal,part,"");
681  }
682  else {
683  TrackRotation(cutsAnal,part,"Offline");
684  }
685  if (fUseMCInfo) {
686  if (isLc==1) {
687  if (onFlyV0) {
688  TrackRotation(cutsAnal,part,"Sgn");
689  }
690  else {
691  TrackRotation(cutsAnal,part,"OfflineSgn");
692  }
693  }// sgn
694  else { // bkg
695  if (onFlyV0) {
696  TrackRotation(cutsAnal,part,"Bkg");
697  }
698  else {
699  TrackRotation(cutsAnal,part,"OfflineBkg");
700  }
701  }
702  } // if fUseMCInfo
703  } // if fTrackRotation
704 
705 
706 
707 
708  if ( !(cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122))) ) return;
709 
711 
712  if ( ( ( (cutsAnal->IsSelected(part,AliRDHFCuts::kAll))&(AliRDHFCutsLctoV0::kLcToK0Spr)) == (AliRDHFCutsLctoV0::kLcToK0Spr) ) ) nSelectedAnal++;
713 
714  // Fill candidate variable Tree (track selection, V0 invMass selection)
715  if ( fWriteVariableTree ) {
716  Double_t invmassK0S = v0part->MassK0Short();
717  Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
718  Double_t nSigmaTPCpr=-999.;
719  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr);
720  if ( !onFlyV0 && isInCascadeWindow &&
721  part->CosV0PointingAngle()>0.99 && TMath::Abs(invmassK0S-mk0sPDG)<=0.05 &&
722  part->Pt()>=fPtMinToFillTheTree && part->Pt()<fPtMaxToFillTheTree &&
723  (!fUseTPCPIDtoFillTree || (fUseTPCPIDtoFillTree && TMath::Abs(nSigmaTPCpr)<3.)))
724  FillTheTree(part,cutsAnal,mcArray,isLc,originLc);
725  return;
726  }
727 
728  cutsAnal->SetUsePID(kFALSE);
729  Bool_t isCandidateSelectedCuts = (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // kinematic/topological cuts
730  cutsAnal->SetUsePID(areCutsUsingPID);
731  Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor
732 
733  //if (((cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)) {
735  if (fUseMCInfo && isLc && !fWriteVariableTree) {
736  Int_t pdgCand1 = 4122;
737  Int_t pdgDgLctoV0bachelor1[2]={2212,310};
738  Int_t pdgDgV0toDaughters1[2]={211,211};
739  Int_t mcLabel1=part->MatchToMC(pdgCand1,pdgDgLctoV0bachelor1[1],pdgDgLctoV0bachelor1,pdgDgV0toDaughters1,mcArray,kTRUE);
740  AliDebug(2,Form(" Found true MC candidate: Lc->pK0S(%d) - onTheFly=%1d",mcLabel1,onFlyV0));
741  }
742  }
743 
744  Double_t nSigmaTPCpr=-999.;
745  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr);
746  Double_t nSigmaTOFpr=-999.;
747  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr);
748 
749  Double_t nSigmaTPCpi=-999.;
750  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi);
751  Double_t nSigmaTOFpi=-999.;
752  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi);
753 
754  Double_t nSigmaTPCka=-999.;
755  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka);
756  Double_t nSigmaTOFka=-999.;
757  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka);
758 
759  if (onFlyV0) {
760 
761  fillthis="histArmPodK0S";
762  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
763 
764  fillthis="histArmPodLc";
765  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
766 
767  //if (isCandidateSelectedCuts) {
768  FillAnalysisHistograms(part,cutsAnal,"");
769  //}
770  }
771  else {
772 
773  fillthis="histArmPodK0SOffline";
774  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
775 
776  fillthis="histArmPodLcOffline";
777  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
778 
779  FillAnalysisHistograms(part,cutsAnal,"Offline");
780  if (isCandidateSelectedCuts) {
781  fillthis="histoprotonBachSigmaVspTOF";
782  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
783  fillthis="histoprotonBachSigmaVspTPC";
784  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
785  //FillAnalysisHistograms(part,cutsAnal,"Offline");
786  }
787  }
788  if (fUseMCInfo) {
789  if (isLc==1) {
790  if (onFlyV0) {
791 
792  fillthis="histArmPodK0SSgn";
793  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
794 
795  fillthis="histArmPodLcSgn";
796  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
797 
798  //if (isCandidateSelectedCuts) {
799  FillAnalysisHistograms(part,cutsAnal,"Sgn");
800  //}
801  if (fCheckOrigin) {
802  switch (originLc) {
803  case 1:
804  FillAnalysisHistograms(part,cutsAnal,"SgnC");
805  break;
806  case 2:
807  FillAnalysisHistograms(part,cutsAnal,"SgnB");
808  break;
809  case 3:
810  FillAnalysisHistograms(part,cutsAnal,"SgnNoQ");
811  break;
812  }
813  }
814  }
815  else {
816 
817  fillthis="histArmPodK0SOfflineSgn";
818  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
819 
820  fillthis="histArmPodLcOfflineSgn";
821  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
822 
823  if (isCandidateSelectedCuts) {
824  fillthis="histoprotonBachSigmaVspTOFsgn";
825  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
826  fillthis="histoprotonBachSigmaVspTPCsgn";
827  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
828  //FillAnalysisHistograms(part,cutsAnal,"OfflineSgn");
829  }
830 
831  if (fCheckOrigin) {
832  switch (originLc) {
833  case 1:
834  FillAnalysisHistograms(part,cutsAnal,"OfflineSgnC");
835  break;
836  case 2:
837  FillAnalysisHistograms(part,cutsAnal,"OfflineSgnB");
838  break;
839  case 3:
840  FillAnalysisHistograms(part,cutsAnal,"OfflineSgnNoQ");
841  break;
842  }
843  }
844  FillAnalysisHistograms(part,cutsAnal,"OfflineSgn");
845 
846  }
847  }// sgn
848  else { // bkg
849  if (onFlyV0) {
850 
851  fillthis="histArmPodK0SBkg";
852  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
853 
854  fillthis="histArmPodLcBkg";
855  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
856 
857  //if (isCandidateSelectedCuts) {
858  FillAnalysisHistograms(part,cutsAnal,"Bkg");
859  //}
860  }
861  else {
862 
863  fillthis="histArmPodK0SOfflineBkg";
864  FillArmPodDistribution(v0part,fillthis,isCandidateSelectedCuts,isBachelorID);
865 
866  fillthis="histArmPodLcOfflineBkg";
867  FillArmPodDistribution(part,fillthis,isCandidateSelectedCuts,isBachelorID);
868 
869  FillAnalysisHistograms(part,cutsAnal,"OfflineBkg");
870  if (isCandidateSelectedCuts) {
871  fillthis="histoprotonBachSigmaVspTOFbkg";
872  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTOFpr);
873  fillthis="histoprotonBachSigmaVspTPCbkg";
874  ((TH2F*)(fOutput->FindObject(fillthis)))->Fill(momBach,nSigmaTPCpr);
875  //FillAnalysisHistograms(part,cutsAnal,"OfflineBkg");
876  }
877  }
878  }
879  } // if fUseMCInfo
880 
881  return;
882 }
883 
884 //----------------------------------------------------
886 {
887 
888  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
889  Double_t mK0SPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
890  Double_t mMinLambdaPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass()+
891  TDatabasePDG::Instance()->GetParticle(211)->Mass();
892  Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
893 
894  TString nameHisto=" ", nameHistoSgn=" ", nameHistoBkg=" ";
895  TString titleHisto=" ", titleHistoSgn=" ", titleHistoBkg=" ";
896 
897  // pt(Lc)
898  Double_t *binLimpTLc=new Double_t[11+1]; // 11 pT(Lc) bins
899  binLimpTLc[ 0]= 0.;
900  binLimpTLc[ 1]= 1.;
901  binLimpTLc[ 2]= 2.;
902  binLimpTLc[ 3]= 3.;
903  binLimpTLc[ 4]= 4.;
904  binLimpTLc[ 5]= 5.;
905  binLimpTLc[ 6]= 6.;
906  binLimpTLc[ 7]= 8.;
907  binLimpTLc[ 8]=12.;
908  binLimpTLc[ 9]=17.;
909  binLimpTLc[10]=25.;
910  binLimpTLc[11]=35.;
911 
912  // pt(prong)
913  Double_t *binLimpTprong=new Double_t[41+1]; // 41 pT(prong) bins
914  binLimpTprong[ 0]= 0.0;
915  binLimpTprong[ 1]= 0.1;
916  binLimpTprong[ 2]= 0.2;
917  binLimpTprong[ 3]= 0.3;
918  binLimpTprong[ 4]= 0.4;
919  binLimpTprong[ 5]= 0.5;
920  binLimpTprong[ 6]= 0.6;
921  binLimpTprong[ 7]= 0.7;
922  binLimpTprong[ 8]= 0.8;
923  binLimpTprong[ 9]= 0.9;
924  binLimpTprong[10]= 1.0;
925  binLimpTprong[11]= 1.2;
926  binLimpTprong[12]= 1.4;
927  binLimpTprong[13]= 1.6;
928  binLimpTprong[14]= 1.8;
929  binLimpTprong[15]= 2.0;
930  binLimpTprong[16]= 2.2;
931  binLimpTprong[17]= 2.4;
932  binLimpTprong[18]= 2.6;
933  binLimpTprong[19]= 2.8;
934  binLimpTprong[20]= 3.0;
935  binLimpTprong[21]= 3.5;
936  binLimpTprong[22]= 4.0;
937  binLimpTprong[23]= 4.5;
938  binLimpTprong[24]= 5.0;
939  binLimpTprong[25]= 5.5;
940  binLimpTprong[26]= 6.0;
941  binLimpTprong[27]= 6.5;
942  binLimpTprong[28]= 7.0;
943  binLimpTprong[29]= 7.5;
944  binLimpTprong[30]= 8.0;
945  binLimpTprong[31]= 9.0;
946  binLimpTprong[32]=10.0;
947  binLimpTprong[33]=11.0;
948  binLimpTprong[34]=12.0;
949  binLimpTprong[35]=13.0;
950  binLimpTprong[36]=14.0;
951  binLimpTprong[37]=15.0;
952  binLimpTprong[38]=20.0;
953  binLimpTprong[39]=25.0;
954  binLimpTprong[40]=30.0;
955  binLimpTprong[41]=35.0;
956 
957  if (fUseOnTheFlyV0) {
958 
959  // V0 invariant masses (on-the-fly)
960  nameHisto="histK0SMass";
961  titleHisto="K^{0}_{S} invariant mass VS p_{T}; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
962  TH2F* spectrumK0SMass = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
963 
964  // Lc invariant masses (x K0S on-the-fly)
965  nameHisto="histLcMassByK0S";
966  titleHisto="#Lambda_{c} invariant mass (by K^{0}_{S}) vs p_{T}; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
967  TH2F* spectrumLcMassByK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
968 
969  nameHisto="histpK0Svsp";
970  titleHisto="p(K^{0}_{S}) vs p(p); p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
971  TH2F* momentumDistributionK0Svsp = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,41,binLimpTprong);
972 
973  nameHisto="histArmPodK0S";
974  titleHisto="V0-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
975  TH2F* armenterosPodK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3);
976 
977  nameHisto="histArmPodLc";
978  titleHisto="#Lambda_{c}-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
979  TH2F* armenterosPodLc = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6);
980 
981  TH2F* allspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone();
982  TH2F* allspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone();
983  TH2F* allmomentumDistributionK0Svsp = (TH2F*)momentumDistributionK0Svsp->Clone();
984  TH2F* allArmenterosPodK0S = (TH2F*)armenterosPodK0S->Clone();
985  TH2F* allArmenterosPodLc = (TH2F*)armenterosPodLc->Clone();
986 
987  TH2F* pidBachspectrumK0SMass = (TH2F*)spectrumK0SMass->Clone();
988  TH2F* pidBachspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone();
989  TH2F* pidBachmomentumDistributionK0Svsp = (TH2F*)momentumDistributionK0Svsp->Clone();
990  TH2F* pidBachArmenterosPodK0S = (TH2F*)armenterosPodK0S->Clone();
991  TH2F* pidBachArmenterosPodLc = (TH2F*)armenterosPodLc->Clone();
992 
993  fOutputAll->Add(allspectrumK0SMass);
994  fOutputAll->Add(allspectrumLcMassByK0S);
995  fOutputAll->Add(allmomentumDistributionK0Svsp);
996  fOutputAll->Add(allArmenterosPodK0S);
997  fOutputAll->Add(allArmenterosPodLc);
998 
999  fOutputPIDBach->Add(pidBachspectrumK0SMass);
1000  fOutputPIDBach->Add(pidBachspectrumLcMassByK0S);
1001  fOutputPIDBach->Add(pidBachmomentumDistributionK0Svsp);
1002  fOutputPIDBach->Add(pidBachArmenterosPodK0S);
1003  fOutputPIDBach->Add(pidBachArmenterosPodLc);
1004 
1005  nameHisto="histArmPodK0S0";
1006  titleHisto="V0-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1007  TH2F* armenterosPodK0S0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3);
1008  nameHisto="histArmPodLc0";
1009  titleHisto="#Lambda_{c}-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1010  TH2F* armenterosPodLc0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6);
1011  fOutputAll->Add(armenterosPodK0S0);
1012  fOutputAll->Add(armenterosPodLc0);
1013 
1014 
1015  if (fTrackRotation) {
1016  TH2F* pidBachTRspectrumLcMassByK0S = (TH2F*)spectrumLcMassByK0S->Clone();
1017  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0S);
1018  }
1019 
1020 
1021 
1022  nameHisto="histptK0S";
1023  titleHisto="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1024  TH2F* ptK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1025 
1026  nameHisto="histptP";
1027  titleHisto="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1028  TH2F* ptP = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1029 
1030  nameHisto="histptPip";
1031  titleHisto="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1032  TH2F* ptPiP = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1033 
1034  nameHisto="histptPim";
1035  titleHisto="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1036  TH2F* ptPiM = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1037 
1038  nameHisto="histLambdaMass";
1039  titleHisto="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1040  TH2F* massLambda = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1041 
1042  nameHisto="histLambdaBarMass";
1043  titleHisto="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1044  TH2F* massLambdaBar = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1045 
1046  nameHisto="histGammaMass";
1047  titleHisto="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1048  TH2F* massGamma = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,100,0.,1.);
1049 
1050  nameHisto="histD0K0S";
1051  titleHisto="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1052  TH2F* d0K0S = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.);
1053 
1054  nameHisto="histD0P";
1055  titleHisto="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1056  TH2F* d0P = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.);
1057 
1058  nameHisto="histCosPAK0S";
1059  titleHisto="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1060  TH2F *cosPAK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,0.99,1.);
1061 
1062  nameHisto="histCosThetaProtonCMS";
1063  titleHisto="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1064  TH2F *cosThePr = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,-1.,1.);
1065 
1066  nameHisto="histResignedD0";
1067  titleHisto="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1068  TH2F *resignedD0 = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,-0.1,0.1);
1069 
1070  TH2F* allptK0S = (TH2F*)ptK0S->Clone();
1071  TH2F* allptP = (TH2F*)ptP->Clone();
1072  TH2F* allptPiP = (TH2F*)ptPiP->Clone();
1073  TH2F* allptPiM = (TH2F*)ptPiM->Clone();
1074  TH2F* allmassLambda = (TH2F*)massLambda->Clone();
1075  TH2F* allmassLambdaBar = (TH2F*)massLambdaBar->Clone();
1076  TH2F* allmassGamma = (TH2F*)massGamma->Clone();
1077  TH2F* alld0K0S = (TH2F*)d0K0S->Clone();
1078  TH2F* alld0P = (TH2F*)d0P->Clone();
1079  TH2F* allcosPAK0S = (TH2F*)cosPAK0S->Clone();
1080  TH2F* allcosThePr = (TH2F*)cosThePr->Clone();
1081  TH2F* allresignedD0 = (TH2F*)resignedD0->Clone();
1082 
1083  TH2F* pidptK0S = (TH2F*)ptK0S->Clone();
1084  TH2F* pidptP = (TH2F*)ptP->Clone();
1085  TH2F* pidptPiP = (TH2F*)ptPiP->Clone();
1086  TH2F* pidptPiM = (TH2F*)ptPiM->Clone();
1087  TH2F* pidmassLambda = (TH2F*)massLambda->Clone();
1088  TH2F* pidmassLambdaBar = (TH2F*)massLambdaBar->Clone();
1089  TH2F* pidmassGamma = (TH2F*)massGamma->Clone();
1090  TH2F* pidd0K0S = (TH2F*)d0K0S->Clone();
1091  TH2F* pidd0P = (TH2F*)d0P->Clone();
1092  TH2F* pidcosPAK0S = (TH2F*)cosPAK0S->Clone();
1093  TH2F* pidcosThePr = (TH2F*)cosThePr->Clone();
1094  TH2F* pidresignedD0 = (TH2F*)resignedD0->Clone();
1095 
1096  fOutputAll->Add(allptK0S);
1097  fOutputAll->Add(allptP);
1098  fOutputAll->Add(allptPiP);
1099  fOutputAll->Add(allptPiM);
1100  fOutputAll->Add(allmassLambda);
1101  fOutputAll->Add(allmassLambdaBar);
1102  fOutputAll->Add(allmassGamma);
1103  fOutputAll->Add(alld0K0S);
1104  fOutputAll->Add(alld0P);
1105  fOutputAll->Add(allcosPAK0S);
1106  fOutputAll->Add(allcosThePr);
1107  fOutputAll->Add(allresignedD0);
1108 
1109  fOutputPIDBach->Add(pidptK0S);
1110  fOutputPIDBach->Add(pidptP);
1111  fOutputPIDBach->Add(pidptPiP);
1112  fOutputPIDBach->Add(pidptPiM);
1113  fOutputPIDBach->Add(pidmassLambda);
1114  fOutputPIDBach->Add(pidmassLambdaBar);
1115  fOutputPIDBach->Add(pidmassGamma);
1116  fOutputPIDBach->Add(pidd0K0S);
1117  fOutputPIDBach->Add(pidd0P);
1118  fOutputPIDBach->Add(pidcosPAK0S);
1119  fOutputPIDBach->Add(pidcosThePr);
1120  fOutputPIDBach->Add(pidresignedD0);
1121 
1122  if (fTrackRotation) {
1123 
1124  TH2F* pidTRptK0S = (TH2F*)ptK0S->Clone();
1125  TH2F* pidTRptP = (TH2F*)ptP->Clone();
1126  TH2F* pidTRptPiP = (TH2F*)ptPiP->Clone();
1127  TH2F* pidTRptPiM = (TH2F*)ptPiM->Clone();
1128  TH2F* pidTRmassLambda = (TH2F*)massLambda->Clone();
1129  TH2F* pidTRmassLambdaBar = (TH2F*)massLambdaBar->Clone();
1130  TH2F* pidTRmassGamma = (TH2F*)massGamma->Clone();
1131  TH2F* pidTRcosPAK0S = (TH2F*)cosPAK0S->Clone();
1132  TH2F* pidTRcosThePr = (TH2F*)cosThePr->Clone();
1133  TH2F* pidTRresignedD0 = (TH2F*)resignedD0->Clone();
1134  fOutputPIDBachTR->Add(pidTRptK0S);
1135  fOutputPIDBachTR->Add(pidTRptP);
1136  fOutputPIDBachTR->Add(pidTRptPiP);
1137  fOutputPIDBachTR->Add(pidTRptPiM);
1138  fOutputPIDBachTR->Add(pidTRmassLambda);
1139  fOutputPIDBachTR->Add(pidTRmassLambdaBar);
1140  fOutputPIDBachTR->Add(pidTRmassGamma);
1141  fOutputPIDBachTR->Add(pidTRcosPAK0S);
1142  fOutputPIDBachTR->Add(pidTRcosThePr);
1143  fOutputPIDBachTR->Add(pidTRresignedD0);
1144 
1145  }
1146 
1147  }
1148 
1149  // V0 invariant masses (offline)
1150  nameHisto="histK0SMassOffline";
1151  titleHisto="K^{0}_{S} invariant mass VS p_{T}; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
1152  TH2F* spectrumK0SMassOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
1153 
1154  // Lc invariant masses (x K0S offline)
1155  nameHisto="histLcMassByK0SOffline";
1156  titleHisto="#Lambda_{c} invariant mass (by K^{0}_{S}) vs p_{T}; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
1157  TH2F* spectrumLcMassOfflineByK0S = new TH2F(nameHisto.Data(),titleHisto.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
1158 
1159  nameHisto="histpK0SvspOffline";
1160  titleHisto="p(K^{0}_{S}) vs p(p); p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
1161  TH2F* momentumDistributionK0SvspOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,41,binLimpTprong);
1162 
1163  nameHisto="histArmPodK0SOffline";
1164  titleHisto="V0-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1165  TH2F* armenterosPodK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3);
1166 
1167  nameHisto="histArmPodLcOffline";
1168  titleHisto="#Lambda_{c}-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1169  TH2F* armenterosPodLcOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6);
1170 
1171  TH2F* allspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone();
1172  TH2F* allspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone();
1173  TH2F* allmomentumDistributionK0SvspOffline = (TH2F*)momentumDistributionK0SvspOffline->Clone();
1174  TH2F* allArmenterosPodK0SOffline = (TH2F*)armenterosPodK0SOffline->Clone();
1175  TH2F* allArmenterosPodLcOffline = (TH2F*)armenterosPodLcOffline->Clone();
1176 
1177  TH2F* pidBachspectrumK0SMassOffline = (TH2F*)spectrumK0SMassOffline->Clone();
1178  TH2F* pidBachspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone();
1179  TH2F* pidBachmomentumDistributionK0SvspOffline = (TH2F*)momentumDistributionK0SvspOffline->Clone();
1180  TH2F* pidBachArmenterosPodK0SOffline = (TH2F*)armenterosPodK0SOffline->Clone();
1181  TH2F* pidBachArmenterosPodLcOffline = (TH2F*)armenterosPodLcOffline->Clone();
1182 
1183  fOutputAll->Add(allspectrumK0SMassOffline);
1184  fOutputAll->Add(allspectrumLcMassOfflineByK0S);
1185  fOutputAll->Add(allmomentumDistributionK0SvspOffline);
1186  fOutputAll->Add(allArmenterosPodK0SOffline);
1187  fOutputAll->Add(allArmenterosPodLcOffline);
1188 
1189  fOutputPIDBach->Add(pidBachspectrumK0SMassOffline);
1190  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0S);
1191  fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOffline);
1192  fOutputPIDBach->Add(pidBachArmenterosPodK0SOffline);
1193  fOutputPIDBach->Add(pidBachArmenterosPodLcOffline);
1194 
1195  if(fFillSubSampleHist){
1196  nameHisto="histLcMassByK0SSubSampleOffline";
1197  titleHisto="#Lambda_{c} invariant mass (by K^{0}_{S}) vs p_{T} vs Sub ID";
1198  Int_t bins_subsample[3]= {1000,24,25};
1199  Double_t xmin_subsample[3]={mLcPDG-0.25,0,-0.5};
1200  Double_t xmax_subsample[3]={mLcPDG+0.25,24.,24.5};
1201  THnSparse *spectrumLcMassOfflineByK0SSubSample = new THnSparseF(nameHisto.Data(),titleHisto.Data(),3,bins_subsample,xmin_subsample,xmax_subsample);
1202  fOutputPIDBach->Add(spectrumLcMassOfflineByK0SSubSample);
1203  }
1204 
1205  nameHisto="histArmPodK0SOffline0";
1206  titleHisto="V0-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1207  TH2F* armenterosPodK0SOffline0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-1.,1.,300,0.,0.3);
1208  nameHisto="histArmPodLcOffline0";
1209  titleHisto="#Lambda_{c}-candidate Armenteros-Podolanski distribution; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1210  TH2F* armenterosPodLcOffline0 = new TH2F(nameHisto.Data(),titleHisto.Data(),200,-4.,4.,800,0.,1.6);
1211  fOutputAll->Add(armenterosPodK0SOffline0);
1212  fOutputAll->Add(armenterosPodLcOffline0);
1213 
1214  if (fTrackRotation) {
1215  TH2F* pidBachTRspectrumLcMassOfflineByK0S = (TH2F*)spectrumLcMassOfflineByK0S->Clone();
1216  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0S);
1217  }
1218 
1219 
1220 
1221 
1222  nameHisto="histptK0SOffline";
1223  titleHisto="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1224  TH2F* ptK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1225 
1226  nameHisto="histptPOffline";
1227  titleHisto="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1228  TH2F* ptPOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1229 
1230  nameHisto="histptPipOffline";
1231  titleHisto="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1232  TH2F* ptPiPOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1233 
1234  nameHisto="histptPimOffline";
1235  titleHisto="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1236  TH2F* ptPiMOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,41,binLimpTprong);
1237 
1238  nameHisto="histLambdaMassOffline";
1239  titleHisto="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1240  TH2F* massLambdaOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1241 
1242  nameHisto="histLambdaBarMassOffline";
1243  titleHisto="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1244  TH2F* massLambdaBarOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1245 
1246  nameHisto="histGammaMassOffline";
1247  titleHisto="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1248  TH2F* massGammaOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,100,0.,1.);
1249 
1250  nameHisto="histD0K0SOffline";
1251  titleHisto="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1252  TH2F* d0K0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.);
1253 
1254  nameHisto="histD0POffline";
1255  titleHisto="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1256  TH2F* d0POffline = new TH2F(nameHisto.Data(),titleHisto.Data(),11,binLimpTLc,1000,-1.,1.);
1257 
1258  nameHisto="histCosPAK0SOffline";
1259  titleHisto="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1260  TH2F *cosPAK0SOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,0.99,1.);
1261 
1262  nameHisto="histCosThetaProtonCMSOffline";
1263  titleHisto="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1264  TH2F *cosThePrOffline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,-1.,1.);
1265 
1266  nameHisto="histResignedD0Offline";
1267  titleHisto="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1268  TH2F *resignedD0Offline = new TH2F(nameHisto.Data(),titleHisto.Data(),41,binLimpTprong,100,-0.1,0.1);
1269 
1270 
1271  TH2F* allptK0SOffline = (TH2F*)ptK0SOffline->Clone();
1272  TH2F* allptPOffline = (TH2F*)ptPOffline->Clone();
1273  TH2F* allptPiPOffline = (TH2F*)ptPiPOffline->Clone();
1274  TH2F* allptPiMOffline = (TH2F*)ptPiMOffline->Clone();
1275  TH2F* allmassLambdaOffline = (TH2F*)massLambdaOffline->Clone();
1276  TH2F* allmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone();
1277  TH2F* allmassGammaOffline = (TH2F*)massGammaOffline->Clone();
1278  TH2F* alld0K0SOffline = (TH2F*)d0K0SOffline->Clone();
1279  TH2F* alld0POffline = (TH2F*)d0POffline->Clone();
1280  TH2F* allcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone();
1281  TH2F* allcosThePrOffline = (TH2F*)cosThePrOffline->Clone();
1282  TH2F* allresignedD0Offline = (TH2F*)resignedD0Offline->Clone();
1283 
1284  TH2F* pidptK0SOffline = (TH2F*)ptK0SOffline->Clone();
1285  TH2F* pidptPOffline = (TH2F*)ptPOffline->Clone();
1286  TH2F* pidptPiPOffline = (TH2F*)ptPiPOffline->Clone();
1287  TH2F* pidptPiMOffline = (TH2F*)ptPiMOffline->Clone();
1288  TH2F* pidmassLambdaOffline = (TH2F*)massLambdaOffline->Clone();
1289  TH2F* pidmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone();
1290  TH2F* pidmassGammaOffline = (TH2F*)massGammaOffline->Clone();
1291  TH2F* pidd0K0SOffline = (TH2F*)d0K0SOffline->Clone();
1292  TH2F* pidd0POffline = (TH2F*)d0POffline->Clone();
1293  TH2F* pidcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone();
1294  TH2F* pidcosThePrOffline = (TH2F*)cosThePrOffline->Clone();
1295  TH2F* pidresignedD0Offline = (TH2F*)resignedD0Offline->Clone();
1296 
1297  fOutputAll->Add(allptK0SOffline);
1298  fOutputAll->Add(allptPOffline);
1299  fOutputAll->Add(allptPiPOffline);
1300  fOutputAll->Add(allptPiMOffline);
1301  fOutputAll->Add(allmassLambdaOffline);
1302  fOutputAll->Add(allmassLambdaBarOffline);
1303  fOutputAll->Add(allmassGammaOffline);
1304  fOutputAll->Add(alld0K0SOffline);
1305  fOutputAll->Add(alld0POffline);
1306  fOutputAll->Add(allcosPAK0SOffline);
1307  fOutputAll->Add(allcosThePrOffline);
1308  fOutputAll->Add(allresignedD0Offline);
1309 
1310  fOutputPIDBach->Add(pidptK0SOffline);
1311  fOutputPIDBach->Add(pidptPOffline);
1312  fOutputPIDBach->Add(pidptPiPOffline);
1313  fOutputPIDBach->Add(pidptPiMOffline);
1314  fOutputPIDBach->Add(pidmassLambdaOffline);
1315  fOutputPIDBach->Add(pidmassLambdaBarOffline);
1316  fOutputPIDBach->Add(pidmassGammaOffline);
1317  fOutputPIDBach->Add(pidd0K0SOffline);
1318  fOutputPIDBach->Add(pidd0POffline);
1319  fOutputPIDBach->Add(pidcosPAK0SOffline);
1320  fOutputPIDBach->Add(pidcosThePrOffline);
1321  fOutputPIDBach->Add(pidresignedD0Offline);
1322 
1323  if (fTrackRotation) {
1324 
1325  TH2F* pidTRptK0SOffline = (TH2F*)ptK0SOffline->Clone();
1326  TH2F* pidTRptPOffline = (TH2F*)ptPOffline->Clone();
1327  TH2F* pidTRptPiPOffline = (TH2F*)ptPiPOffline->Clone();
1328  TH2F* pidTRptPiMOffline = (TH2F*)ptPiMOffline->Clone();
1329  TH2F* pidTRmassLambdaOffline = (TH2F*)massLambdaOffline->Clone();
1330  TH2F* pidTRmassLambdaBarOffline = (TH2F*)massLambdaBarOffline->Clone();
1331  TH2F* pidTRmassGammaOffline = (TH2F*)massGammaOffline->Clone();
1332  TH2F* pidTRcosPAK0SOffline = (TH2F*)cosPAK0SOffline->Clone();
1333  TH2F* pidTRcosThePrOffline = (TH2F*)cosThePrOffline->Clone();
1334  TH2F* pidTRresignedD0Offline = (TH2F*)resignedD0Offline->Clone();
1335  fOutputPIDBachTR->Add(pidTRptK0SOffline);
1336  fOutputPIDBachTR->Add(pidTRptPOffline);
1337  fOutputPIDBachTR->Add(pidTRptPiPOffline);
1338  fOutputPIDBachTR->Add(pidTRptPiMOffline);
1339  fOutputPIDBachTR->Add(pidTRmassLambdaOffline);
1340  fOutputPIDBachTR->Add(pidTRmassLambdaBarOffline);
1341  fOutputPIDBachTR->Add(pidTRmassGammaOffline);
1342  fOutputPIDBachTR->Add(pidTRcosPAK0SOffline);
1343  fOutputPIDBachTR->Add(pidTRcosThePrOffline);
1344  fOutputPIDBachTR->Add(pidTRresignedD0Offline);
1345 
1346  }
1347 
1348 
1349 
1350 
1351 
1352  if (fUseMCInfo) {
1353 
1354  if (fUseOnTheFlyV0) {
1355 
1356  nameHistoSgn="histK0SMassSgn";
1357  nameHistoBkg="histK0SMassBkg";
1358  titleHistoSgn="K^{0}_{S} - sgn: invariant mass VS p_{T} - MC; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
1359  titleHistoBkg="K^{0}_{S} - bkg: invariant mass VS p_{T} - MC; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
1360  TH2F* spectrumK0SMassSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
1361  TH2F* spectrumK0SMassBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
1362 
1363  nameHistoSgn="histLcMassByK0SSgn";
1364  nameHistoBkg="histLcMassByK0SBkg";
1365  titleHistoSgn="#Lambda_{c} - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
1366  titleHistoBkg="#Lambda_{c} - bkg: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
1367  TH2F* spectrumLcMassByK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
1368  TH2F* spectrumLcMassByK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
1369 
1370  nameHistoSgn="histpK0SvspSgn";
1371  nameHistoBkg="histpK0SvspBkg";
1372  titleHistoSgn="#Lambda_{c} - sgn: K^{0}_{S} vs p Total Momentum Distribution - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
1373  titleHistoBkg="#Lambda_{c} - bkg: K^{0}_{S} vs p Total Momentum Distribution - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
1374  TH2F* momentumDistributionK0SvspSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,41,binLimpTprong);
1375  TH2F* momentumDistributionK0SvspBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,41,binLimpTprong);
1376 
1377  // armenteros-podolanski plots K0S
1378  nameHistoSgn="histArmPodK0SSgn";
1379  nameHistoBkg="histArmPodK0SBkg";
1380  titleHistoSgn="V0-candidate Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1381  titleHistoBkg="V0-candidate Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1382  TH2F* armenterosPodK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3);
1383  TH2F* armenterosPodK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3);
1384 
1385  nameHistoSgn="histArmPodLcSgn";
1386  nameHistoBkg="histArmPodLcBkg";
1387  titleHistoSgn="#Lambda_{c}-candidate Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1388  titleHistoBkg="#Lambda_{c}-candidate Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1389  TH2F* armenterosPodLcSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6);
1390  TH2F* armenterosPodLcBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6);
1391 
1392  TH2F* allspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone();
1393  TH2F* allspectrumK0SMassBkg = (TH2F*)spectrumK0SMassBkg->Clone();
1394  TH2F* allspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone();
1395  TH2F* allspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone();
1396  TH2F* allmomentumDistributionK0SvspSgn = (TH2F*)momentumDistributionK0SvspSgn->Clone();
1397  TH2F* allmomentumDistributionK0SvspBkg = (TH2F*)momentumDistributionK0SvspBkg->Clone();
1398  TH2F* allArmenterosPodK0SSgn = (TH2F*)armenterosPodK0SSgn->Clone();
1399  TH2F* allArmenterosPodK0SBkg = (TH2F*)armenterosPodK0SBkg->Clone();
1400  TH2F* allArmenterosPodLcSgn = (TH2F*)armenterosPodLcSgn->Clone();
1401  TH2F* allArmenterosPodLcBkg = (TH2F*)armenterosPodLcBkg->Clone();
1402 
1403  TH2F* pidBachspectrumK0SMassSgn = (TH2F*)spectrumK0SMassSgn->Clone();
1404  TH2F* pidBachspectrumK0SMassBkg = (TH2F*)spectrumK0SMassBkg->Clone();
1405  TH2F* pidBachspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone();
1406  TH2F* pidBachspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone();
1407  TH2F* pidBachmomentumDistributionK0SvspSgn = (TH2F*)momentumDistributionK0SvspSgn->Clone();
1408  TH2F* pidBachmomentumDistributionK0SvspBkg = (TH2F*)momentumDistributionK0SvspBkg->Clone();
1409  TH2F* pidBachArmenterosPodK0SSgn = (TH2F*)armenterosPodK0SSgn->Clone();
1410  TH2F* pidBachArmenterosPodK0SBkg = (TH2F*)armenterosPodK0SBkg->Clone();
1411  TH2F* pidBachArmenterosPodLcSgn = (TH2F*)armenterosPodLcSgn->Clone();
1412  TH2F* pidBachArmenterosPodLcBkg = (TH2F*)armenterosPodLcBkg->Clone();
1413 
1414  fOutputAll->Add(allspectrumK0SMassSgn);
1415  fOutputAll->Add(allspectrumK0SMassBkg);
1416  fOutputAll->Add(allspectrumLcMassByK0SSgn);
1417  fOutputAll->Add(allspectrumLcMassByK0SBkg);
1418  fOutputAll->Add(allmomentumDistributionK0SvspSgn);
1419  fOutputAll->Add(allmomentumDistributionK0SvspBkg);
1420  fOutputAll->Add(allArmenterosPodK0SSgn);
1421  fOutputAll->Add(allArmenterosPodK0SBkg);
1422  fOutputAll->Add(allArmenterosPodLcSgn);
1423  fOutputAll->Add(allArmenterosPodLcBkg);
1424 
1425  fOutputPIDBach->Add(pidBachspectrumK0SMassSgn);
1426  fOutputPIDBach->Add(pidBachspectrumK0SMassBkg);
1427  fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgn);
1428  fOutputPIDBach->Add(pidBachspectrumLcMassByK0SBkg);
1429  fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspSgn);
1430  fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspBkg);
1431  fOutputPIDBach->Add(pidBachArmenterosPodK0SSgn);
1432  fOutputPIDBach->Add(pidBachArmenterosPodK0SBkg);
1433  fOutputPIDBach->Add(pidBachArmenterosPodLcSgn);
1434  fOutputPIDBach->Add(pidBachArmenterosPodLcBkg);
1435 
1436  nameHistoSgn="histArmPodK0SSgn0";
1437  nameHistoBkg="histArmPodK0SBkg0";
1438  titleHistoSgn="V0-candidate Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1439  titleHistoBkg="V0-candidate Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1440  TH2F* armenterosPodK0SSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3);
1441  TH2F* armenterosPodK0SBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3);
1442  fOutputAll->Add(armenterosPodK0SSgn0);
1443  fOutputAll->Add(armenterosPodK0SBkg0);
1444  nameHistoSgn="histArmPodLcSgn0";
1445  nameHistoBkg="histArmPodLcBkg0";
1446  titleHistoSgn="#Lambda_{c}-candidate Armenteros-Podolanski distribution (sgn); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1447  titleHistoBkg="#Lambda_{c}-candidate Armenteros-Podolanski distribution (bkg); #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1448  TH2F* armenterosPodLcSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6);
1449  TH2F* armenterosPodLcBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6);
1450  fOutputAll->Add(armenterosPodLcSgn0);
1451  fOutputAll->Add(armenterosPodLcBkg0);
1452 
1453  if (fTrackRotation) {
1454  TH2F* pidBachTRspectrumLcMassByK0SSgn = (TH2F*)spectrumLcMassByK0SSgn->Clone();
1455  TH2F* pidBachTRspectrumLcMassByK0SBkg = (TH2F*)spectrumLcMassByK0SBkg->Clone();
1456  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0SSgn);
1457  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassByK0SBkg);
1458  }
1459 
1460 
1461 
1462  nameHistoSgn="histptK0SSgn";
1463  nameHistoBkg="histptK0SBkg";
1464  titleHistoSgn="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1465  titleHistoBkg="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1466  TH2F* ptK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1467  TH2F* ptK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1468 
1469  nameHistoSgn="histptPSgn";
1470  nameHistoBkg="histptPBkg";
1471  titleHistoSgn="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1472  titleHistoBkg="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1473  TH2F* ptPSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1474  TH2F* ptPBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1475 
1476  nameHistoSgn="histptPipSgn";
1477  nameHistoBkg="histptPipBkg";
1478  titleHistoSgn="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1479  titleHistoBkg="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1480  TH2F* ptPiPSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1481  TH2F* ptPiPBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1482 
1483  nameHistoSgn="histptPimSgn";
1484  nameHistoBkg="histptPimBkg";
1485  titleHistoSgn="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1486  titleHistoBkg="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1487  TH2F* ptPiMSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1488  TH2F* ptPiMBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1489 
1490  nameHistoSgn="histLambdaMassSgn";
1491  nameHistoBkg="histLambdaMassBkg";
1492  titleHistoSgn="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1493  titleHistoBkg="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1494  TH2F* massLambdaSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1495  TH2F* massLambdaBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1496 
1497  nameHistoSgn="histLambdaBarMassSgn";
1498  nameHistoBkg="histLambdaBarMassBkg";
1499  titleHistoSgn="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1500  titleHistoBkg="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1501  TH2F* massLambdaBarSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1502  TH2F* massLambdaBarBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1503 
1504  nameHistoSgn="histGammaMassSgn";
1505  nameHistoBkg="histGammaMassBkg";
1506  titleHistoSgn="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1507  titleHistoBkg="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1508  TH2F* massGammaSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,100,0.,1.);
1509  TH2F* massGammaBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,100,0.,1.);
1510 
1511  nameHistoSgn="histD0K0SSgn";
1512  nameHistoBkg="histD0K0SBkg";
1513  titleHistoSgn="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1514  titleHistoBkg="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1515  TH2F* d0K0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.);
1516  TH2F* d0K0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.);
1517 
1518  nameHistoSgn="histD0PSgn";
1519  nameHistoBkg="histD0PBkg";
1520  titleHistoSgn="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1521  titleHistoBkg="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1522  TH2F* d0PSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.);
1523  TH2F* d0PBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.);
1524 
1525  nameHistoSgn="histCosPAK0SSgn";
1526  nameHistoBkg="histCosPAK0SBkg";
1527  titleHistoSgn="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1528  titleHistoBkg="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1529  TH2F *cosPAK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,0.99,1.);
1530  TH2F *cosPAK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,0.99,1.);
1531 
1532  nameHistoSgn="histCosThetaProtonCMSSgn";
1533  nameHistoBkg="histCosThetaProtonCMSBkg";
1534  titleHistoSgn="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1535  titleHistoBkg="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1536  TH2F *cosThePrSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,-1.,1.);
1537  TH2F *cosThePrBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,-1.,1.);
1538 
1539 
1540  nameHistoSgn="histResignedD0Sgn";
1541  nameHistoBkg="histResignedD0Bkg";
1542  titleHistoSgn="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1543  titleHistoBkg="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1544  TH2F *resignedD0Sgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,-0.1,0.1);
1545  TH2F *resignedD0Bkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,-0.1,0.1);
1546 
1547  TH2F* allptK0SSgn = (TH2F*)ptK0SSgn->Clone();
1548  TH2F* allptK0SBkg = (TH2F*)ptK0SBkg->Clone();
1549  TH2F* allptPSgn = (TH2F*)ptPSgn->Clone();
1550  TH2F* allptPBkg = (TH2F*)ptPBkg->Clone();
1551  TH2F* allptPiPSgn = (TH2F*)ptPiPSgn->Clone();
1552  TH2F* allptPiPBkg = (TH2F*)ptPiPBkg->Clone();
1553  TH2F* allptPiMSgn = (TH2F*)ptPiMSgn->Clone();
1554  TH2F* allptPiMBkg = (TH2F*)ptPiMBkg->Clone();
1555  TH2F* allmassLambdaSgn = (TH2F*)massLambdaSgn->Clone();
1556  TH2F* allmassLambdaBkg = (TH2F*)massLambdaBkg->Clone();
1557  TH2F* allmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone();
1558  TH2F* allmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone();
1559  TH2F* allmassGammaSgn = (TH2F*)massGammaSgn->Clone();
1560  TH2F* allmassGammaBkg = (TH2F*)massGammaBkg->Clone();
1561  TH2F* alld0K0SSgn = (TH2F*)d0K0SSgn->Clone();
1562  TH2F* alld0K0SBkg = (TH2F*)d0K0SBkg->Clone();
1563  TH2F* alld0PSgn = (TH2F*)d0PSgn->Clone();
1564  TH2F* alld0PBkg = (TH2F*)d0PBkg->Clone();
1565  TH2F* allcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone();
1566  TH2F* allcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone();
1567  TH2F* allcosThePrSgn = (TH2F*)cosThePrSgn->Clone();
1568  TH2F* allcosThePrBkg = (TH2F*)cosThePrBkg->Clone();
1569  TH2F* allresignedD0Sgn = (TH2F*)resignedD0Sgn->Clone();
1570  TH2F* allresignedD0Bkg = (TH2F*)resignedD0Bkg->Clone();
1571 
1572  TH2F* pidptK0SSgn = (TH2F*)ptK0SSgn->Clone();
1573  TH2F* pidptK0SBkg = (TH2F*)ptK0SBkg->Clone();
1574  TH2F* pidptPSgn = (TH2F*)ptPSgn->Clone();
1575  TH2F* pidptPBkg = (TH2F*)ptPBkg->Clone();
1576  TH2F* pidptPiPSgn = (TH2F*)ptPiPSgn->Clone();
1577  TH2F* pidptPiPBkg = (TH2F*)ptPiPBkg->Clone();
1578  TH2F* pidptPiMSgn = (TH2F*)ptPiMSgn->Clone();
1579  TH2F* pidptPiMBkg = (TH2F*)ptPiMBkg->Clone();
1580  TH2F* pidmassLambdaSgn = (TH2F*)massLambdaSgn->Clone();
1581  TH2F* pidmassLambdaBkg = (TH2F*)massLambdaBkg->Clone();
1582  TH2F* pidmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone();
1583  TH2F* pidmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone();
1584  TH2F* pidmassGammaSgn = (TH2F*)massGammaSgn->Clone();
1585  TH2F* pidmassGammaBkg = (TH2F*)massGammaBkg->Clone();
1586  TH2F* pidd0K0SSgn = (TH2F*)d0K0SSgn->Clone();
1587  TH2F* pidd0K0SBkg = (TH2F*)d0K0SBkg->Clone();
1588  TH2F* pidd0PSgn = (TH2F*)d0PSgn->Clone();
1589  TH2F* pidd0PBkg = (TH2F*)d0PBkg->Clone();
1590  TH2F* pidcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone();
1591  TH2F* pidcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone();
1592  TH2F* pidcosThePrSgn = (TH2F*)cosThePrSgn->Clone();
1593  TH2F* pidcosThePrBkg = (TH2F*)cosThePrBkg->Clone();
1594  TH2F* pidresignedD0Sgn = (TH2F*)resignedD0Sgn->Clone();
1595  TH2F* pidresignedD0Bkg = (TH2F*)resignedD0Bkg->Clone();
1596 
1597  fOutputAll->Add(allptK0SSgn);
1598  fOutputAll->Add(allptK0SBkg);
1599  fOutputAll->Add(allptPSgn);
1600  fOutputAll->Add(allptPBkg);
1601  fOutputAll->Add(allptPiPSgn);
1602  fOutputAll->Add(allptPiPBkg);
1603  fOutputAll->Add(allptPiMSgn);
1604  fOutputAll->Add(allptPiMBkg);
1605  fOutputAll->Add(allmassLambdaSgn);
1606  fOutputAll->Add(allmassLambdaBkg);
1607  fOutputAll->Add(allmassLambdaBarSgn);
1608  fOutputAll->Add(allmassLambdaBarBkg);
1609  fOutputAll->Add(allmassGammaSgn);
1610  fOutputAll->Add(allmassGammaBkg);
1611  fOutputAll->Add(alld0K0SSgn);
1612  fOutputAll->Add(alld0K0SBkg);
1613  fOutputAll->Add(alld0PSgn);
1614  fOutputAll->Add(alld0PBkg);
1615  fOutputAll->Add(allcosPAK0SSgn);
1616  fOutputAll->Add(allcosPAK0SBkg);
1617  fOutputAll->Add(allcosThePrSgn);
1618  fOutputAll->Add(allcosThePrBkg);
1619  fOutputAll->Add(allresignedD0Sgn);
1620  fOutputAll->Add(allresignedD0Bkg);
1621 
1622  fOutputPIDBach->Add(pidptK0SSgn);
1623  fOutputPIDBach->Add(pidptK0SBkg);
1624  fOutputPIDBach->Add(pidptPSgn);
1625  fOutputPIDBach->Add(pidptPBkg);
1626  fOutputPIDBach->Add(pidptPiPSgn);
1627  fOutputPIDBach->Add(pidptPiPBkg);
1628  fOutputPIDBach->Add(pidptPiMSgn);
1629  fOutputPIDBach->Add(pidptPiMBkg);
1630  fOutputPIDBach->Add(pidmassLambdaSgn);
1631  fOutputPIDBach->Add(pidmassLambdaBkg);
1632  fOutputPIDBach->Add(pidmassLambdaBarSgn);
1633  fOutputPIDBach->Add(pidmassLambdaBarBkg);
1634  fOutputPIDBach->Add(pidmassGammaSgn);
1635  fOutputPIDBach->Add(pidmassGammaBkg);
1636  fOutputPIDBach->Add(pidd0K0SSgn);
1637  fOutputPIDBach->Add(pidd0K0SBkg);
1638  fOutputPIDBach->Add(pidd0PSgn);
1639  fOutputPIDBach->Add(pidd0PBkg);
1640  fOutputPIDBach->Add(pidcosPAK0SSgn);
1641  fOutputPIDBach->Add(pidcosPAK0SBkg);
1642  fOutputPIDBach->Add(pidcosThePrSgn);
1643  fOutputPIDBach->Add(pidcosThePrBkg);
1644  fOutputPIDBach->Add(pidresignedD0Sgn);
1645  fOutputPIDBach->Add(pidresignedD0Bkg);
1646 
1647  if (fTrackRotation) {
1648 
1649  TH2F* pidTRptK0SSgn = (TH2F*)ptK0SSgn->Clone();
1650  TH2F* pidTRptK0SBkg = (TH2F*)ptK0SBkg->Clone();
1651  TH2F* pidTRptPSgn = (TH2F*)ptPSgn->Clone();
1652  TH2F* pidTRptPBkg = (TH2F*)ptPBkg->Clone();
1653  TH2F* pidTRptPiPSgn = (TH2F*)ptPiPSgn->Clone();
1654  TH2F* pidTRptPiPBkg = (TH2F*)ptPiPBkg->Clone();
1655  TH2F* pidTRptPiMSgn = (TH2F*)ptPiMSgn->Clone();
1656  TH2F* pidTRptPiMBkg = (TH2F*)ptPiMBkg->Clone();
1657  TH2F* pidTRmassLambdaSgn = (TH2F*)massLambdaSgn->Clone();
1658  TH2F* pidTRmassLambdaBkg = (TH2F*)massLambdaBkg->Clone();
1659  TH2F* pidTRmassLambdaBarSgn = (TH2F*)massLambdaBarSgn->Clone();
1660  TH2F* pidTRmassLambdaBarBkg = (TH2F*)massLambdaBarBkg->Clone();
1661  TH2F* pidTRmassGammaSgn = (TH2F*)massGammaSgn->Clone();
1662  TH2F* pidTRmassGammaBkg = (TH2F*)massGammaBkg->Clone();
1663  TH2F* pidTRcosPAK0SSgn = (TH2F*)cosPAK0SSgn->Clone();
1664  TH2F* pidTRcosPAK0SBkg = (TH2F*)cosPAK0SBkg->Clone();
1665  TH2F* pidTRcosThePrSgn = (TH2F*)cosThePrSgn->Clone();
1666  TH2F* pidTRcosThePrBkg = (TH2F*)cosThePrBkg->Clone();
1667  TH2F* pidTRresignedD0Sgn = (TH2F*)resignedD0Sgn->Clone();
1668  TH2F* pidTRresignedD0Bkg = (TH2F*)resignedD0Bkg->Clone();
1669  fOutputPIDBachTR->Add(pidTRptK0SSgn);
1670  fOutputPIDBachTR->Add(pidTRptK0SBkg);
1671  fOutputPIDBachTR->Add(pidTRptPSgn);
1672  fOutputPIDBachTR->Add(pidTRptPBkg);
1673  fOutputPIDBachTR->Add(pidTRptPiPSgn);
1674  fOutputPIDBachTR->Add(pidTRptPiPBkg);
1675  fOutputPIDBachTR->Add(pidTRptPiMSgn);
1676  fOutputPIDBachTR->Add(pidTRptPiMBkg);
1677  fOutputPIDBachTR->Add(pidTRmassLambdaSgn);
1678  fOutputPIDBachTR->Add(pidTRmassLambdaBkg);
1679  fOutputPIDBachTR->Add(pidTRmassLambdaBarSgn);
1680  fOutputPIDBachTR->Add(pidTRmassLambdaBarBkg);
1681  fOutputPIDBachTR->Add(pidTRmassGammaSgn);
1682  fOutputPIDBachTR->Add(pidTRmassGammaBkg);
1683  fOutputPIDBachTR->Add(pidTRcosPAK0SSgn);
1684  fOutputPIDBachTR->Add(pidTRcosPAK0SBkg);
1685  fOutputPIDBachTR->Add(pidTRcosThePrSgn);
1686  fOutputPIDBachTR->Add(pidTRcosThePrBkg);
1687  fOutputPIDBachTR->Add(pidTRresignedD0Sgn);
1688  fOutputPIDBachTR->Add(pidTRresignedD0Bkg);
1689 
1690  }
1691 
1692 
1693  } // useOnTheFly
1694 
1695 
1696  nameHistoSgn="histK0SMassOfflineSgn";
1697  nameHistoBkg="histK0SMassOfflineBkg";
1698  titleHistoSgn="K^{0}_{S} - sgn: invariant mass VS p_{T} - MC; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
1699  titleHistoBkg="K^{0}_{S} - bkg: invariant mass VS p_{T} - MC; p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]; Entries";
1700  TH2F* spectrumK0SMassOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
1701  TH2F* spectrumK0SMassOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mK0SPDG-0.050,mK0SPDG+0.050);
1702 
1703  nameHistoSgn="histLcMassByK0SOfflineSgn";
1704  nameHistoBkg="histLcMassByK0SOfflineBkg";
1705  titleHistoSgn="#Lambda_{c} - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
1706  titleHistoBkg="#Lambda_{c} - bkg: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
1707  TH2F* spectrumLcMassOfflineByK0SSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
1708  TH2F* spectrumLcMassOfflineByK0SBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
1709 
1710  nameHistoSgn="histpK0SvspOfflineSgn";
1711  nameHistoBkg="histpK0SvspOfflineBkg";
1712  titleHistoSgn="#Lambda_{c} - sgn: K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
1713  titleHistoBkg="#Lambda_{c} - bkg: K^{0}_{S} vs p Total Momentum Distribution - Offline - MC; p(p) [GeV/c]; p(K^{0}_{S}) [GeV/c]";
1714  TH2F* momentumDistributionK0SvspOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,41,binLimpTprong);
1715  TH2F* momentumDistributionK0SvspOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,41,binLimpTprong);
1716 
1717  // armenteros-podolanski plots K0S (offline)
1718  nameHistoSgn="histArmPodK0SOfflineSgn";
1719  nameHistoBkg="histArmPodK0SOfflineBkg";
1720  titleHistoSgn="V0-candidate Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1721  titleHistoBkg="V0-candidate Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1722  TH2F* armenterosPodK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3);
1723  TH2F* armenterosPodK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3);
1724 
1725  nameHistoSgn="histArmPodLcOfflineSgn";
1726  nameHistoBkg="histArmPodLcOfflineBkg";
1727  titleHistoSgn="#Lambda_{c}-candidate Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1728  titleHistoBkg="#Lambda_{c}-candidate Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1729  TH2F* armenterosPodLcOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6);
1730  TH2F* armenterosPodLcOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6);
1731 
1732 
1733  TH2F* allspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone();
1734  TH2F* allspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone();
1735  TH2F* allspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone();
1736  TH2F* allspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone();
1737  TH2F* allmomentumDistributionK0SvspOfflineSgn = (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone();
1738  TH2F* allmomentumDistributionK0SvspOfflineBkg = (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone();
1739  TH2F* allArmenterosPodK0SOfflineSgn = (TH2F*)armenterosPodK0SOfflineSgn->Clone();
1740  TH2F* allArmenterosPodK0SOfflineBkg = (TH2F*)armenterosPodK0SOfflineBkg->Clone();
1741  TH2F* allArmenterosPodLcOfflineSgn = (TH2F*)armenterosPodLcOfflineSgn->Clone();
1742  TH2F* allArmenterosPodLcOfflineBkg = (TH2F*)armenterosPodLcOfflineBkg->Clone();
1743 
1744  TH2F* pidBachspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone();
1745  TH2F* pidBachspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone();
1746  TH2F* pidBachspectrumK0SMassOfflineSgn = (TH2F*)spectrumK0SMassOfflineSgn->Clone();
1747  TH2F* pidBachspectrumK0SMassOfflineBkg = (TH2F*) spectrumK0SMassOfflineBkg->Clone();
1748  TH2F* pidBachmomentumDistributionK0SvspOfflineSgn = (TH2F*)momentumDistributionK0SvspOfflineSgn->Clone();
1749  TH2F* pidBachmomentumDistributionK0SvspOfflineBkg = (TH2F*)momentumDistributionK0SvspOfflineBkg->Clone();
1750  TH2F* pidBachArmenterosPodK0SOfflineSgn = (TH2F*)armenterosPodK0SOfflineSgn->Clone();
1751  TH2F* pidBachArmenterosPodK0SOfflineBkg = (TH2F*)armenterosPodK0SOfflineBkg->Clone();
1752  TH2F* pidBachArmenterosPodLcOfflineSgn = (TH2F*)armenterosPodLcOfflineSgn->Clone();
1753  TH2F* pidBachArmenterosPodLcOfflineBkg = (TH2F*)armenterosPodLcOfflineBkg->Clone();
1754 
1755  fOutputAll->Add(allspectrumK0SMassOfflineSgn);
1756  fOutputAll->Add(allspectrumK0SMassOfflineBkg);
1757  fOutputAll->Add(allspectrumLcMassOfflineByK0SSgn);
1758  fOutputAll->Add(allspectrumLcMassOfflineByK0SBkg);
1759  fOutputAll->Add(allmomentumDistributionK0SvspOfflineSgn);
1760  fOutputAll->Add(allmomentumDistributionK0SvspOfflineBkg);
1761  fOutputAll->Add(allArmenterosPodK0SOfflineSgn);
1762  fOutputAll->Add(allArmenterosPodK0SOfflineBkg);
1763  fOutputAll->Add(allArmenterosPodLcOfflineSgn);
1764  fOutputAll->Add(allArmenterosPodLcOfflineBkg);
1765 
1766  fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineSgn);
1767  fOutputPIDBach->Add(pidBachspectrumK0SMassOfflineBkg);
1768  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgn);
1769  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SBkg);
1770  fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineSgn);
1771  fOutputPIDBach->Add(pidBachmomentumDistributionK0SvspOfflineBkg);
1772  fOutputPIDBach->Add(pidBachArmenterosPodK0SOfflineSgn);
1773  fOutputPIDBach->Add(pidBachArmenterosPodK0SOfflineBkg);
1774  fOutputPIDBach->Add(pidBachArmenterosPodLcOfflineSgn);
1775  fOutputPIDBach->Add(pidBachArmenterosPodLcOfflineBkg);
1776 
1777  nameHistoSgn="histArmPodK0SOfflineSgn0";
1778  nameHistoBkg="histArmPodK0SOfflineBkg0";
1779  titleHistoSgn="V0-candidate Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1780  titleHistoBkg="V0-candidate Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1781  TH2F* armenterosPodK0SOfflineSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-1.,1.,300,0.,0.3);
1782  TH2F* armenterosPodK0SOfflineBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-1.,1.,300,0.,0.3);
1783  nameHistoSgn="histArmPodLcOfflineSgn0";
1784  nameHistoBkg="histArmPodLcOfflineBkg0";
1785  titleHistoSgn="#Lambda_{c}-candidate Armenteros-Podolanski distribution (sgn) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1786  titleHistoBkg="#Lambda_{c}-candidate Armenteros-Podolanski distribution (bkg) -offline-; #frac{p_{L}^{+}-p_{L}^{-}}{p_{L}^{+}+p_{L}^{-}}; p_{T}^{+} [GeV/c]";
1787  TH2F* armenterosPodLcOfflineSgn0 = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),200,-4.,4.,800,0.,1.6);
1788  TH2F* armenterosPodLcOfflineBkg0 = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),200,-4.,4.,800,0.,1.6);
1789  fOutputAll->Add(armenterosPodK0SOfflineSgn0);
1790  fOutputAll->Add(armenterosPodK0SOfflineBkg0);
1791  fOutputAll->Add(armenterosPodLcOfflineSgn0);
1792  fOutputAll->Add(armenterosPodLcOfflineBkg0);
1793 
1794  if (fTrackRotation) {
1795  TH2F* pidBachTRspectrumLcMassOfflineByK0SSgn = (TH2F*)spectrumLcMassOfflineByK0SSgn->Clone();
1796  TH2F* pidBachTRspectrumLcMassOfflineByK0SBkg = (TH2F*) spectrumLcMassOfflineByK0SBkg->Clone();
1797  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0SSgn);
1798  fOutputPIDBachTR->Add(pidBachTRspectrumLcMassOfflineByK0SBkg);
1799  }
1800 
1801 
1802 
1803 
1804  nameHistoSgn="histptK0SOfflineSgn";
1805  nameHistoBkg="histptK0SOfflineBkg";
1806  titleHistoSgn="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1807  titleHistoBkg="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
1808  TH2F* ptK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1809  TH2F* ptK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1810 
1811  nameHistoSgn="histptPOfflineSgn";
1812  nameHistoBkg="histptPOfflineBkg";
1813  titleHistoSgn="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1814  titleHistoBkg="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
1815  TH2F* ptPOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1816  TH2F* ptPOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1817 
1818  nameHistoSgn="histptPipOfflineSgn";
1819  nameHistoBkg="histptPipOfflineBkg";
1820  titleHistoSgn="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1821  titleHistoBkg="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
1822  TH2F* ptPiPOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1823  TH2F* ptPiPOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1824 
1825  nameHistoSgn="histptPimOfflineSgn";
1826  nameHistoBkg="histptPimOfflineBkg";
1827  titleHistoSgn="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1828  titleHistoBkg="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
1829  TH2F* ptPiMOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,41,binLimpTprong);
1830  TH2F* ptPiMOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,41,binLimpTprong);
1831 
1832  nameHistoSgn="histLambdaMassOfflineSgn";
1833  nameHistoBkg="histLambdaMassOfflineBkg";
1834  titleHistoSgn="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1835  titleHistoBkg="m_{inv}(p,#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(p,#pi^{-}) [GeV/c^{2}]; Entries";
1836  TH2F* massLambdaOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1837  TH2F* massLambdaOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1838 
1839  nameHistoSgn="histLambdaBarMassOfflineSgn";
1840  nameHistoBkg="histLambdaBarMassOfflineBkg";
1841  titleHistoSgn="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1842  titleHistoBkg="m_{inv}(#bar{p},#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(#bar{p},#pi^{+}) [GeV/c^{2}]; Entries";
1843  TH2F* massLambdaBarOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1844  TH2F* massLambdaBarOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,mMinLambdaPDG,mMinLambdaPDG+0.5);
1845 
1846  nameHistoSgn="histGammaMassOfflineSgn";
1847  nameHistoBkg="histGammaMassOfflineBkg";
1848  titleHistoSgn="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1849  titleHistoBkg="m_{inv}(e^{+},e^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; m_{inv}(e^{+},e^{-}) [GeV/c^{2}]; Entries";
1850  TH2F* massGammaOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,100,0.,1.);
1851  TH2F* massGammaOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,100,0.,1.);
1852 
1853  nameHistoSgn="histD0K0SOfflineSgn";
1854  nameHistoBkg="histD0K0SOfflineBkg";
1855  titleHistoSgn="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1856  titleHistoBkg="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
1857  TH2F* d0K0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.);
1858  TH2F* d0K0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.);
1859 
1860  nameHistoSgn="histD0POfflineSgn";
1861  nameHistoBkg="histD0POfflineBkg";
1862  titleHistoSgn="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1863  titleHistoBkg="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
1864  TH2F* d0POfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),11,binLimpTLc,1000,-1.,1.);
1865  TH2F* d0POfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),11,binLimpTLc,1000,-1.,1.);
1866 
1867  nameHistoSgn="histCosPAK0SOfflineSgn";
1868  nameHistoBkg="histCosPAK0SOfflineBkg";
1869  titleHistoSgn="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1870  titleHistoBkg="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1871  TH2F *cosPAK0SOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,0.99,1.);
1872  TH2F *cosPAK0SOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,0.99,1.);
1873 
1874  nameHistoSgn="histCosThetaProtonCMSOfflineSgn";
1875  nameHistoBkg="histCosThetaProtonCMSOfflineBkg";
1876  titleHistoSgn="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1877  titleHistoBkg="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
1878  TH2F *cosThePrOfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,-1.,1.);
1879  TH2F *cosThePrOfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,-1.,1.);
1880 
1881 
1882  nameHistoSgn="histResignedD0OfflineSgn";
1883  nameHistoBkg="histResignedD0OfflineBkg";
1884  titleHistoSgn="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1885  titleHistoBkg="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
1886  TH2F *resignedD0OfflineSgn = new TH2F(nameHistoSgn.Data(),titleHistoSgn.Data(),41,binLimpTprong,100,-0.1,0.1);
1887  TH2F *resignedD0OfflineBkg = new TH2F(nameHistoBkg.Data(),titleHistoBkg.Data(),41,binLimpTprong,100,-0.1,0.1);
1888 
1889  TH2F* allptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone();
1890  TH2F* allptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone();
1891  TH2F* allptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone();
1892  TH2F* allptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone();
1893  TH2F* allptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone();
1894  TH2F* allptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone();
1895  TH2F* allptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone();
1896  TH2F* allptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone();
1897  TH2F* allmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone();
1898  TH2F* allmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone();
1899  TH2F* allmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone();
1900  TH2F* allmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone();
1901  TH2F* allmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone();
1902  TH2F* allmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone();
1903  TH2F* alld0K0SOfflineSgn = (TH2F*)d0K0SOfflineSgn->Clone();
1904  TH2F* alld0K0SOfflineBkg = (TH2F*)d0K0SOfflineBkg->Clone();
1905  TH2F* alld0POfflineSgn = (TH2F*)d0POfflineSgn->Clone();
1906  TH2F* alld0POfflineBkg = (TH2F*)d0POfflineBkg->Clone();
1907  TH2F* allcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone();
1908  TH2F* allcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone();
1909  TH2F* allcosThePrOfflineSgn = (TH2F*)cosThePrOfflineSgn->Clone();
1910  TH2F* allcosThePrOfflineBkg = (TH2F*)cosThePrOfflineBkg->Clone();
1911  TH2F* allresignedD0OfflineSgn = (TH2F*)resignedD0OfflineSgn->Clone();
1912  TH2F* allresignedD0OfflineBkg = (TH2F*)resignedD0OfflineBkg->Clone();
1913 
1914  TH2F* pidptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone();
1915  TH2F* pidptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone();
1916  TH2F* pidptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone();
1917  TH2F* pidptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone();
1918  TH2F* pidptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone();
1919  TH2F* pidptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone();
1920  TH2F* pidptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone();
1921  TH2F* pidptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone();
1922  TH2F* pidmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone();
1923  TH2F* pidmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone();
1924  TH2F* pidmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone();
1925  TH2F* pidmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone();
1926  TH2F* pidmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone();
1927  TH2F* pidmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone();
1928  TH2F* pidd0K0SOfflineSgn = (TH2F*)d0K0SOfflineSgn->Clone();
1929  TH2F* pidd0K0SOfflineBkg = (TH2F*)d0K0SOfflineBkg->Clone();
1930  TH2F* pidd0POfflineSgn = (TH2F*)d0POfflineSgn->Clone();
1931  TH2F* pidd0POfflineBkg = (TH2F*)d0POfflineBkg->Clone();
1932  TH2F* pidcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone();
1933  TH2F* pidcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone();
1934  TH2F* pidcosThePrOfflineSgn = (TH2F*)cosThePrOfflineSgn->Clone();
1935  TH2F* pidcosThePrOfflineBkg = (TH2F*)cosThePrOfflineBkg->Clone();
1936  TH2F* pidresignedD0OfflineSgn = (TH2F*)resignedD0OfflineSgn->Clone();
1937  TH2F* pidresignedD0OfflineBkg = (TH2F*)resignedD0OfflineBkg->Clone();
1938 
1939  fOutputAll->Add(allptK0SOfflineSgn);
1940  fOutputAll->Add(allptK0SOfflineBkg);
1941  fOutputAll->Add(allptPOfflineSgn);
1942  fOutputAll->Add(allptPOfflineBkg);
1943  fOutputAll->Add(allptPiPOfflineSgn);
1944  fOutputAll->Add(allptPiPOfflineBkg);
1945  fOutputAll->Add(allptPiMOfflineSgn);
1946  fOutputAll->Add(allptPiMOfflineBkg);
1947  fOutputAll->Add(allmassLambdaOfflineSgn);
1948  fOutputAll->Add(allmassLambdaOfflineBkg);
1949  fOutputAll->Add(allmassLambdaBarOfflineSgn);
1950  fOutputAll->Add(allmassLambdaBarOfflineBkg);
1951  fOutputAll->Add(allmassGammaOfflineSgn);
1952  fOutputAll->Add(allmassGammaOfflineBkg);
1953  fOutputAll->Add(alld0K0SOfflineSgn);
1954  fOutputAll->Add(alld0K0SOfflineBkg);
1955  fOutputAll->Add(alld0POfflineSgn);
1956  fOutputAll->Add(alld0POfflineBkg);
1957  fOutputAll->Add(allcosPAK0SOfflineSgn);
1958  fOutputAll->Add(allcosPAK0SOfflineBkg);
1959  fOutputAll->Add(allcosThePrOfflineSgn);
1960  fOutputAll->Add(allcosThePrOfflineBkg);
1961  fOutputAll->Add(allresignedD0OfflineSgn);
1962  fOutputAll->Add(allresignedD0OfflineBkg);
1963 
1964  fOutputPIDBach->Add(pidptK0SOfflineSgn);
1965  fOutputPIDBach->Add(pidptK0SOfflineBkg);
1966  fOutputPIDBach->Add(pidptPOfflineSgn);
1967  fOutputPIDBach->Add(pidptPOfflineBkg);
1968  fOutputPIDBach->Add(pidptPiPOfflineSgn);
1969  fOutputPIDBach->Add(pidptPiPOfflineBkg);
1970  fOutputPIDBach->Add(pidptPiMOfflineSgn);
1971  fOutputPIDBach->Add(pidptPiMOfflineBkg);
1972  fOutputPIDBach->Add(pidmassLambdaOfflineSgn);
1973  fOutputPIDBach->Add(pidmassLambdaOfflineBkg);
1974  fOutputPIDBach->Add(pidmassLambdaBarOfflineSgn);
1975  fOutputPIDBach->Add(pidmassLambdaBarOfflineBkg);
1976  fOutputPIDBach->Add(pidmassGammaOfflineSgn);
1977  fOutputPIDBach->Add(pidmassGammaOfflineBkg);
1978  fOutputPIDBach->Add(pidd0K0SOfflineSgn);
1979  fOutputPIDBach->Add(pidd0K0SOfflineBkg);
1980  fOutputPIDBach->Add(pidd0POfflineSgn);
1981  fOutputPIDBach->Add(pidd0POfflineBkg);
1982  fOutputPIDBach->Add(pidcosPAK0SOfflineSgn);
1983  fOutputPIDBach->Add(pidcosPAK0SOfflineBkg);
1984  fOutputPIDBach->Add(pidcosThePrOfflineSgn);
1985  fOutputPIDBach->Add(pidcosThePrOfflineBkg);
1986  fOutputPIDBach->Add(pidresignedD0OfflineSgn);
1987  fOutputPIDBach->Add(pidresignedD0OfflineBkg);
1988 
1989  if (fTrackRotation) {
1990 
1991  TH2F* pidTRptK0SOfflineSgn = (TH2F*)ptK0SOfflineSgn->Clone();
1992  TH2F* pidTRptK0SOfflineBkg = (TH2F*)ptK0SOfflineBkg->Clone();
1993  TH2F* pidTRptPOfflineSgn = (TH2F*)ptPOfflineSgn->Clone();
1994  TH2F* pidTRptPOfflineBkg = (TH2F*)ptPOfflineBkg->Clone();
1995  TH2F* pidTRptPiPOfflineSgn = (TH2F*)ptPiPOfflineSgn->Clone();
1996  TH2F* pidTRptPiPOfflineBkg = (TH2F*)ptPiPOfflineBkg->Clone();
1997  TH2F* pidTRptPiMOfflineSgn = (TH2F*)ptPiMOfflineSgn->Clone();
1998  TH2F* pidTRptPiMOfflineBkg = (TH2F*)ptPiMOfflineBkg->Clone();
1999  TH2F* pidTRmassLambdaOfflineSgn = (TH2F*)massLambdaOfflineSgn->Clone();
2000  TH2F* pidTRmassLambdaOfflineBkg = (TH2F*)massLambdaOfflineBkg->Clone();
2001  TH2F* pidTRmassLambdaBarOfflineSgn = (TH2F*)massLambdaBarOfflineSgn->Clone();
2002  TH2F* pidTRmassLambdaBarOfflineBkg = (TH2F*)massLambdaBarOfflineBkg->Clone();
2003  TH2F* pidTRmassGammaOfflineSgn = (TH2F*)massGammaOfflineSgn->Clone();
2004  TH2F* pidTRmassGammaOfflineBkg = (TH2F*)massGammaOfflineBkg->Clone();
2005  TH2F* pidTRcosPAK0SOfflineSgn = (TH2F*)cosPAK0SOfflineSgn->Clone();
2006  TH2F* pidTRcosPAK0SOfflineBkg = (TH2F*)cosPAK0SOfflineBkg->Clone();
2007  TH2F* pidTRcosThePrOfflineSgn = (TH2F*)cosThePrOfflineSgn->Clone();
2008  TH2F* pidTRcosThePrOfflineBkg = (TH2F*)cosThePrOfflineBkg->Clone();
2009  TH2F* pidTRresignedD0OfflineSgn = (TH2F*)resignedD0OfflineSgn->Clone();
2010  TH2F* pidTRresignedD0OfflineBkg = (TH2F*)resignedD0OfflineBkg->Clone();
2011  fOutputPIDBachTR->Add(pidTRptK0SOfflineSgn);
2012  fOutputPIDBachTR->Add(pidTRptK0SOfflineBkg);
2013  fOutputPIDBachTR->Add(pidTRptPOfflineSgn);
2014  fOutputPIDBachTR->Add(pidTRptPOfflineBkg);
2015  fOutputPIDBachTR->Add(pidTRptPiPOfflineSgn);
2016  fOutputPIDBachTR->Add(pidTRptPiPOfflineBkg);
2017  fOutputPIDBachTR->Add(pidTRptPiMOfflineSgn);
2018  fOutputPIDBachTR->Add(pidTRptPiMOfflineBkg);
2019  fOutputPIDBachTR->Add(pidTRmassLambdaOfflineSgn);
2020  fOutputPIDBachTR->Add(pidTRmassLambdaOfflineBkg);
2021  fOutputPIDBachTR->Add(pidTRmassLambdaBarOfflineSgn);
2022  fOutputPIDBachTR->Add(pidTRmassLambdaBarOfflineBkg);
2023  fOutputPIDBachTR->Add(pidTRmassGammaOfflineSgn);
2024  fOutputPIDBachTR->Add(pidTRmassGammaOfflineBkg);
2025  fOutputPIDBachTR->Add(pidTRcosPAK0SOfflineSgn);
2026  fOutputPIDBachTR->Add(pidTRcosPAK0SOfflineBkg);
2027  fOutputPIDBachTR->Add(pidTRcosThePrOfflineSgn);
2028  fOutputPIDBachTR->Add(pidTRcosThePrOfflineBkg);
2029  fOutputPIDBachTR->Add(pidTRresignedD0OfflineSgn);
2030  fOutputPIDBachTR->Add(pidTRresignedD0OfflineBkg);
2031 
2032  }
2033 
2034  } // useMCinfo
2035 
2036 
2037  if (fTrackRotation) {
2038 
2039  TH3F *phiVSthetaVSpt = new TH3F("phiVSthetaVSpt","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2040  TH3F *phiVSthetaVSptRot = new TH3F("phiVSthetaVSptRot","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2041  TH3F *phiVSthetaVSptOffline = new TH3F("phiVSthetaVSptOffline","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2042  TH3F *phiVSthetaVSptRotOffline = new TH3F("phiVSthetaVSptRotOffline","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2043  fOutputPIDBachTR->Add(phiVSthetaVSpt);
2044  fOutputPIDBachTR->Add(phiVSthetaVSptRot);
2045  fOutputPIDBachTR->Add(phiVSthetaVSptOffline);
2046  fOutputPIDBachTR->Add(phiVSthetaVSptRotOffline);
2047 
2048  TH1F *hNormRotated=new TH1F("hNormRotated","",fNRotations+1,-0.5,fNRotations+0.5);
2049  TH1F *hNormRotatedOffline=new TH1F("hNormRotatedOffline","",fNRotations+1,-0.5,fNRotations+0.5);
2050  /*
2051  hNormRotated->Sumw2();
2052  hNormRotatedOffline->Sumw2();
2053 
2054  hNormRotated->SetMinimum(0);
2055  hNormRotatedOffline->SetMinimum(0);
2056  */
2057 
2058  fOutputPIDBachTR->Add(hNormRotated);
2059  fOutputPIDBachTR->Add(hNormRotatedOffline);
2060 
2061  if (fUseMCInfo) {
2062 
2063  TH3F *phiVSthetaVSptSgn = new TH3F("phiVSthetaVSptSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2064  TH3F *phiVSthetaVSptRotSgn = new TH3F("phiVSthetaVSptRotSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2065  TH3F *phiVSthetaVSptOfflineSgn = new TH3F("phiVSthetaVSptOfflineSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2066  TH3F *phiVSthetaVSptRotOfflineSgn = new TH3F("phiVSthetaVSptRotOfflineSgn","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2067  fOutputPIDBachTR->Add(phiVSthetaVSptSgn);
2068  fOutputPIDBachTR->Add(phiVSthetaVSptRotSgn);
2069  fOutputPIDBachTR->Add(phiVSthetaVSptOfflineSgn);
2070  fOutputPIDBachTR->Add(phiVSthetaVSptRotOfflineSgn);
2071 
2072  TH3F *phiVSthetaVSptBkg = new TH3F("phiVSthetaVSptBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2073  TH3F *phiVSthetaVSptRotBkg = new TH3F("phiVSthetaVSptRotBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2074  TH3F *phiVSthetaVSptOfflineBkg = new TH3F("phiVSthetaVSptOfflineBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2075  TH3F *phiVSthetaVSptRotOfflineBkg = new TH3F("phiVSthetaVSptRotOfflineBkg","",35,0.,35.,360,0.,2.*TMath::Pi(),100,40.*TMath::DegToRad(),140.*TMath::DegToRad());
2076  fOutputPIDBachTR->Add(phiVSthetaVSptBkg);
2077  fOutputPIDBachTR->Add(phiVSthetaVSptRotBkg);
2078  fOutputPIDBachTR->Add(phiVSthetaVSptOfflineBkg);
2079  fOutputPIDBachTR->Add(phiVSthetaVSptRotOfflineBkg);
2080 
2081  TH1F *hNormRotatedSgn=new TH1F("hNormRotatedSgn","",fNRotations+1,-0.5,fNRotations+0.5);
2082  TH1F *hNormRotatedOfflineSgn=new TH1F("hNormRotatedOfflineSgn","",fNRotations+1,-0.5,fNRotations+0.5);
2083  TH1F *hNormRotatedBkg=new TH1F("hNormRotatedBkg","",fNRotations+1,-0.5,fNRotations+0.5);
2084  TH1F *hNormRotatedOfflineBkg=new TH1F("hNormRotatedOfflineBkg","",fNRotations+1,-0.5,fNRotations+0.5);
2085  /*
2086  hNormRotatedSgn->Sumw2();
2087  hNormRotatedOfflineSgn->Sumw2();
2088  hNormRotatedBkg->Sumw2();
2089  hNormRotatedOfflineBkg->Sumw2();
2090 
2091  hNormRotatedSgn->SetMinimum(0);
2092  hNormRotatedOfflineSgn->SetMinimum(0);
2093  hNormRotatedBkg->SetMinimum(0);
2094  hNormRotatedOfflineBkg->SetMinimum(0);
2095  */
2096 
2097  fOutputPIDBachTR->Add(hNormRotatedSgn);
2098  fOutputPIDBachTR->Add(hNormRotatedOfflineSgn);
2099  fOutputPIDBachTR->Add(hNormRotatedBkg);
2100  fOutputPIDBachTR->Add(hNormRotatedOfflineBkg);
2101 
2102  }
2103 
2104  Int_t nMassBins=(Int_t)(fMaxMass*1000.-fMinMass*1000.);
2105  Double_t maxm=fMinMass+nMassBins*0.001;
2106  TH3F *hMassVsPtVsY=new TH3F("hMassVsPtVsY","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2107  TH3F *hMassVsPtVsYOffline=new TH3F("hMassVsPtVsYOffline","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2108  /*
2109  hMassVsPtVsY->Sumw2();
2110  hMassVsPtVsYOffline->Sumw2();
2111 
2112  hMassVsPtVsY->SetMinimum(0);
2113  hMassVsPtVsYOffline->SetMinimum(0);
2114  */
2115 
2116  fOutputPIDBachTR->Add(hMassVsPtVsY);
2117  fOutputPIDBachTR->Add(hMassVsPtVsYOffline);
2118 
2119  if (fUseMCInfo) {
2120 
2121  TH3F *hMassVsPtVsYSgn=new TH3F("hMassVsPtVsYSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2122  TH3F *hMassVsPtVsYOfflineSgn=new TH3F("hMassVsPtVsYOfflineSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2123  TH3F *hMassVsPtVsYBkg=new TH3F("hMassVsPtVsYBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2124  TH3F *hMassVsPtVsYOfflineBkg=new TH3F("hMassVsPtVsYOfflineBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2125 
2126  /*
2127  hMassVsPtVsYSgn->Sumw2();
2128  hMassVsPtVsYOfflineSgn->Sumw2();
2129  hMassVsPtVsYBkg->Sumw2();
2130  hMassVsPtVsYOfflineBkg->Sumw2();
2131 
2132  hMassVsPtVsYSgn->SetMinimum(0);
2133  hMassVsPtVsYOfflineSgn->SetMinimum(0);
2134  hMassVsPtVsYBkg->SetMinimum(0);
2135  hMassVsPtVsYOfflineBkg->SetMinimum(0);
2136  */
2137 
2138  fOutputPIDBachTR->Add(hMassVsPtVsYSgn);
2139  fOutputPIDBachTR->Add(hMassVsPtVsYOfflineSgn);
2140  fOutputPIDBachTR->Add(hMassVsPtVsYBkg);
2141  fOutputPIDBachTR->Add(hMassVsPtVsYOfflineBkg);
2142 
2143  }
2144 
2145  TH3F *hMassVsPtVsYRot=new TH3F("hMassVsPtVsYRot","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2146  TH3F *hMassVsPtVsYRotOffline=new TH3F("hMassVsPtVsYRotOffline","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2147  /*
2148  hMassVsPtVsYRot->Sumw2();
2149  hMassVsPtVsYRotOffline->Sumw2();
2150 
2151  hMassVsPtVsYRot->SetMinimum(0);
2152  hMassVsPtVsYRotOffline->SetMinimum(0);
2153  */
2154 
2155  fOutputPIDBachTR->Add(hMassVsPtVsYRot);
2156  fOutputPIDBachTR->Add(hMassVsPtVsYRotOffline);
2157 
2158  if (fUseMCInfo) {
2159 
2160  TH3F *hMassVsPtVsYRotSgn=new TH3F("hMassVsPtVsYRotSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2161  TH3F *hMassVsPtVsYRotOfflineSgn=new TH3F("hMassVsPtVsYRotOfflineSgn","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2162  TH3F *hMassVsPtVsYRotBkg=new TH3F("hMassVsPtVsYRotBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2163  TH3F *hMassVsPtVsYRotOfflineBkg=new TH3F("hMassVsPtVsYRotOfflineBkg","",nMassBins,fMinMass,maxm,15,0.,15.,20,-1.,1.);
2164  /*
2165  hMassVsPtVsYRotSgn->Sumw2();
2166  hMassVsPtVsYRotOfflineSgn->Sumw2();
2167  hMassVsPtVsYRotBkg->Sumw2();
2168  hMassVsPtVsYRotOfflineBkg->Sumw2();
2169 
2170  hMassVsPtVsYRotSgn->SetMinimum(0);
2171  hMassVsPtVsYRotOfflineSgn->SetMinimum(0);
2172  hMassVsPtVsYRotBkg->SetMinimum(0);
2173  hMassVsPtVsYRotOfflineBkg->SetMinimum(0);
2174  */
2175 
2176  fOutputPIDBachTR->Add(hMassVsPtVsYRotSgn);
2177  fOutputPIDBachTR->Add(hMassVsPtVsYRotOfflineSgn);
2178  fOutputPIDBachTR->Add(hMassVsPtVsYRotBkg);
2179  fOutputPIDBachTR->Add(hMassVsPtVsYRotOfflineBkg);
2180 
2181  }
2182 
2183  TH1F *hDeltaMass=new TH1F("hDeltaMass","",100,-0.4,0.4);
2184  TH1F *hDeltaMassOffline=new TH1F("hDeltaMassOffline","",100,-0.4,0.4);
2185  /*
2186  hDeltaMass->Sumw2();
2187  hDeltaMassOffline->Sumw2();
2188 
2189  hDeltaMass->SetMinimum(0);
2190  hDeltaMassOffline->SetMinimum(0);
2191  */
2192 
2193  fOutputPIDBachTR->Add(hDeltaMass);
2194  fOutputPIDBachTR->Add(hDeltaMassOffline);
2195 
2196  if (fUseMCInfo) {
2197 
2198  TH1F *hDeltaMassSgn=new TH1F("hDeltaMassSgn","",100,-0.4,0.4);
2199  TH1F *hDeltaMassOfflineSgn=new TH1F("hDeltaMassOfflineSgn","",100,-0.4,0.4);
2200  TH1F *hDeltaMassBkg=new TH1F("hDeltaMassBkg","",100,-0.4,0.4);
2201  TH1F *hDeltaMassOfflineBkg=new TH1F("hDeltaMassOfflineBkg","",100,-0.4,0.4);
2202  /*
2203  hDeltaMassSgn->Sumw2();
2204  hDeltaMassOfflineSgn->Sumw2();
2205  hDeltaMassBkg->Sumw2();
2206  hDeltaMassOfflineBkg->Sumw2();
2207 
2208  hDeltaMassSgn->SetMinimum(0);
2209  hDeltaMassOfflineSgn->SetMinimum(0);
2210  hDeltaMassBkg->SetMinimum(0);
2211  hDeltaMassOfflineBkg->SetMinimum(0);
2212  */
2213 
2214  fOutputPIDBachTR->Add(hDeltaMassSgn);
2215  fOutputPIDBachTR->Add(hDeltaMassOfflineSgn);
2216  fOutputPIDBachTR->Add(hDeltaMassBkg);
2217  fOutputPIDBachTR->Add(hDeltaMassOfflineBkg);
2218 
2219  }
2220 
2221  /*
2222  Int_t binSparseDMassRot[5]={nMassBins,100,24,40,20};
2223  Double_t edgeLowSparseDMassRot[5]={fMinMass,-0.4,0.,-4.,0};
2224  Double_t edgeHighSparseDMassRot[5]={maxm,0.4,12.,4.,3.14};
2225  THnSparse *hDeltaMassFullAnalysis=new THnSparseF("hDeltaMassFullAnalysis","hDeltaMassFullAnalysis;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2226  THnSparse *hDeltaMassFullAnalysisOffline=new THnSparseF("fDeltaMassFullAnalysisOffline","hDeltaMassFullAnalysisOffline;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2227 
2228  fOutputPIDBachTR->Add(hDeltaMassFullAnalysis);
2229  fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOffline);
2230 
2231  if (fUseMCInfo) {
2232 
2233  THnSparse *hDeltaMassFullAnalysisSgn=new THnSparseF("hDeltaMassFullAnalysisSgn","hDeltaMassFullAnalysisSgn;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2234  THnSparse *hDeltaMassFullAnalysisOfflineSgn=new THnSparseF("fDeltaMassFullAnalysisOfflineSgn","hDeltaMassFullAnalysisOfflineSgn;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2235 
2236  THnSparse *hDeltaMassFullAnalysisBkg=new THnSparseF("hDeltaMassFullAnalysisBkg","hDeltaMassFullAnalysisBkg;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2237  THnSparse *hDeltaMassFullAnalysisOfflineBkg=new THnSparseF("fDeltaMassFullAnalysisOfflineBkg","hDeltaMassFullAnalysisOfflineBkg;inv mass (GeV/c);#Delta inv mass (GeV/c); p_{T}^{#Lambda_{c}} (GeV/c); #Delta p_{T} (GeV/c); daughter angle (2prongs) (rad);",5,binSparseDMassRot,edgeLowSparseDMassRot,edgeHighSparseDMassRot);
2238 
2239  fOutputPIDBachTR->Add(hDeltaMassFullAnalysisSgn);
2240  fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOfflineSgn);
2241  fOutputPIDBachTR->Add(hDeltaMassFullAnalysisBkg);
2242  fOutputPIDBachTR->Add(hDeltaMassFullAnalysisOfflineBkg);
2243 
2244  }
2245  */
2246 
2247  }
2248 
2250  TH2D *hMassvsPtInclusiveK0S = new TH2D("hMassvsPtInclusiveK0S","",100,mK0SPDG-0.05,mK0SPDG+0.05,20,0.,10.);
2251  TH2D *hMassvsPtInclusiveK0SSgn = new TH2D("hMassvsPtInclusiveK0SSgn","",100,mK0SPDG-0.05,mK0SPDG+0.05,20,0.,10.);
2252  TH3D *hMassvsPtInclusiveLambda = new TH3D("hMassvsPtInclusiveLambda","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,62,0.,62);
2253  TH3D *hMassvsPtInclusiveLambdaLoosePID = new TH3D("hMassvsPtInclusiveLambdaLoosePID","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,62,0.,62);
2254  TH3D *hMassvsPtInclusiveLambdaSgn = new TH3D("hMassvsPtInclusiveLambdaSgn","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,62,0.,62);
2255  TH3D *hMassvsPtInclusiveLambdaLoosePIDSgn = new TH3D("hMassvsPtInclusiveLambdaLoosePIDSgn","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,62,0.,62);
2256  TH3D *hMassvsPtInclusiveLambdaPID = (TH3D*)hMassvsPtInclusiveLambda->Clone();
2257  TH3D *hMassvsPtInclusiveLambdaPIDSgn = (TH3D*)hMassvsPtInclusiveLambdaSgn->Clone();
2258  TH3D *hMassvsPtInclusiveLambdaCosThetaStarPID = new TH3D("hMassvsPtInclusiveLambdaCosThetaStarPID","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,40,-1.,1.);
2259  TH3D *hMassvsPtInclusiveLambdaCosThetaStarPIDSgn = new TH3D("hMassvsPtInclusiveLambdaCosThetaStarPIDSgn","",100,mLPDG-0.025,mLPDG+0.025,20,0.,10.,40,-1.,1.);
2260  fOutputAll->Add(hMassvsPtInclusiveK0S);
2261  fOutputAll->Add(hMassvsPtInclusiveK0SSgn);
2262  fOutputAll->Add(hMassvsPtInclusiveLambda);
2263  fOutputAll->Add(hMassvsPtInclusiveLambdaLoosePID);
2264  fOutputPIDBach->Add(hMassvsPtInclusiveLambdaPID);
2265  fOutputAll->Add(hMassvsPtInclusiveLambdaSgn);
2266  fOutputAll->Add(hMassvsPtInclusiveLambdaLoosePIDSgn);
2267  fOutputPIDBach->Add(hMassvsPtInclusiveLambdaPIDSgn);
2268  fOutputPIDBach->Add(hMassvsPtInclusiveLambdaCosThetaStarPID);
2269  fOutputPIDBach->Add(hMassvsPtInclusiveLambdaCosThetaStarPIDSgn);
2270  }
2271 
2272  /*
2273  fOutputAll->Print();
2274  fOutputPIDBach->Print();
2275  if (fTrackRotation) fOutputPIDBachTR->Print();
2276  */
2277  return;
2278 }
2279 
2280 //-------------------------------------------------------------------------------
2282  TClonesArray *mcArray,
2283  AliRDHFCutsLctoV0 *cutsAnal)
2284 {
2285 
2286  //
2287  // make single analysis for the systematics studies
2288  // 1: Inclusive K0s (Tracking, K0S cut variation)
2289  // 2: Proton from Lambda (PID, Tracking TPC(not yet))
2290  //
2291 
2292  Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
2293 
2294  Int_t nTracks = aodEvent->GetNumberOfTracks();
2295  Int_t nV0s = aodEvent->GetNumberOfV0s();
2296 
2297  Double_t pos[3]; fVtx1->GetXYZ(pos);
2298  Double_t cov[6]; fVtx1->GetCovarianceMatrix(cov);
2299  const AliESDVertex vESD(pos,cov,100.,100);
2300 
2301  AliESDtrackCuts *trkCuts = fAnalCuts->GetTrackCuts();
2302  AliESDtrackCuts *v0trkCuts = fAnalCuts->GetTrackCutsV0daughters();
2303  const Float_t *cutVars = fAnalCuts->GetCuts();
2304 
2305  //1: Inclusive K0s
2306  for (Int_t iv0 = 0; iv0<nV0s; iv0++) {
2307  AliAODv0 *v0 = aodEvent->GetV0(iv0);
2308  if(!v0) continue;
2309  AliAODTrack *ptrk = dynamic_cast<AliAODTrack*>(v0->GetDaughter(0));
2310  if (!ptrk) continue;
2311  AliAODTrack *ntrk = dynamic_cast<AliAODTrack*>(v0->GetDaughter(1));
2312  if (!ntrk) continue;
2313 
2314  Float_t etaMin=0, etaMax=0; v0trkCuts->GetEtaRange(etaMin,etaMax);
2315  if ( (ptrk->Eta()<=etaMin || ptrk->Eta()>=etaMax) ||
2316  (ntrk->Eta()<=etaMin || ntrk->Eta()>=etaMax) ) continue;
2317  Float_t ptMin=0, ptMax=0; v0trkCuts->GetPtRange(ptMin,ptMax);
2318  if ( (ptrk->Pt()<=ptMin || ptrk->Pt()>=ptMax) ||
2319  (ntrk->Pt()<=ptMin || ntrk->Pt()>=ptMax) ) continue;
2320 
2321  // Condition on nTPCclusters
2322  if (v0trkCuts->GetMinNClusterTPC()>0) {
2323  if ( ( ( ptrk->GetTPCClusterInfo(2,1) ) < v0trkCuts->GetMinNClusterTPC() ) ||
2324  ( ( ntrk->GetTPCClusterInfo(2,1) ) < v0trkCuts->GetMinNClusterTPC() ) ) continue;
2325  }
2326 
2327  if (v0trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC()>0.5) {
2328  Float_t ratioCrossedRowsOverFindableClustersTPCPos = 1.0;
2329  Float_t ratioCrossedRowsOverFindableClustersTPCNeg = 1.0;
2330  if (ptrk->GetTPCNclsF()>0) {
2331  ratioCrossedRowsOverFindableClustersTPCPos = ptrk->GetTPCClusterInfo(2,1) / ptrk->GetTPCNclsF();
2332  }
2333  if (ntrk->GetTPCNclsF()>0) {
2334  ratioCrossedRowsOverFindableClustersTPCNeg = ntrk->GetTPCClusterInfo(2,1) / ntrk->GetTPCNclsF();
2335  }
2336  if ( ( ( ratioCrossedRowsOverFindableClustersTPCPos ) < v0trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ||
2337  ( ( ratioCrossedRowsOverFindableClustersTPCNeg ) < v0trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ) continue;
2338  }
2339 
2340  // kTPCrefit status
2341  if (v0->GetOnFlyStatus()==kFALSE) { // only for offline V0s
2342  if (v0trkCuts->GetRequireTPCRefit()) {
2343  if( !(ptrk->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2344  if( !(ntrk->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2345  }
2346  }
2347 
2348  AliESDtrack esdTrackP(ptrk);
2349  esdTrackP.SetTPCClusterMap(ptrk->GetTPCClusterMap());
2350  esdTrackP.SetTPCSharedMap(ptrk->GetTPCSharedMap());
2351  esdTrackP.SetTPCPointsF(ptrk->GetTPCNclsF());
2352  esdTrackP.RelateToVertex(&vESD,0.,3.);
2353 
2354  AliESDtrack esdTrackN(ntrk);
2355  esdTrackN.SetTPCClusterMap(ntrk->GetTPCClusterMap());
2356  esdTrackN.SetTPCSharedMap(ntrk->GetTPCSharedMap());
2357  esdTrackN.SetTPCPointsF(ntrk->GetTPCNclsF());
2358  esdTrackN.RelateToVertex(&vESD,0.,3.);
2359 
2360  //appliyng TPC crossed rows pT dependent cut
2362  if(tmptxt.Contains("pt")){
2363  tmptxt.ReplaceAll("pt","x");
2364  TF1 funcCutMin("funcCutMin",tmptxt);
2365  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2366  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2367  if(nCrossedRowsTPCP<funcCutMin.Eval(esdTrackP.Pt())) continue;
2368  if(nCrossedRowsTPCN<funcCutMin.Eval(esdTrackN.Pt())) continue;
2369  }
2370 
2371  //appliyng NTPCcls/NTPCcrossedRows cut
2373  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2374  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2375  Float_t nClustersTPCP = esdTrackP.GetTPCNcls();
2376  Float_t nClustersTPCN = esdTrackN.GetTPCNcls();
2377  if(nCrossedRowsTPCP!=0){
2378  Float_t ratioP = nClustersTPCP/nCrossedRowsTPCP;
2379  if(ratioP<fAnalCuts->GetMinRatioClsOverCrossRowsTPC()) continue;
2380  }
2381  else continue;
2382  if(nCrossedRowsTPCN!=0){
2383  Float_t ratioN = nClustersTPCN/nCrossedRowsTPCN;
2384  if(ratioN<fAnalCuts->GetMinRatioClsOverCrossRowsTPC()) continue;
2385  }
2386  else continue;
2387  }
2388 
2389  //appliyng TPCsignalN/NTPCcrossedRows cut
2391  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2392  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2393  Float_t nTPCsignalP = esdTrackP.GetTPCsignalN();
2394  Float_t nTPCsignalN = esdTrackN.GetTPCsignalN();
2395  if(nCrossedRowsTPCP!=0){
2396  Float_t ratioP = nTPCsignalP/nCrossedRowsTPCP;
2397  if(ratioP<fAnalCuts->GetMinRatioSignalNOverCrossRowsTPC()) continue;
2398  }
2399  else continue;
2400  if(nCrossedRowsTPCN!=0){
2401  Float_t ratioN = nTPCsignalN/nCrossedRowsTPCN;
2402  if(ratioN<fAnalCuts->GetMinRatioSignalNOverCrossRowsTPC()) continue;
2403  }
2404  else continue;
2405  }
2406 
2407  // kink condition
2408  if (!v0trkCuts->GetAcceptKinkDaughters()) {
2409  AliAODVertex *maybeKinkPos = (AliAODVertex*)ptrk->GetProdVertex();
2410  AliAODVertex *maybeKinkNeg = (AliAODVertex*)ntrk->GetProdVertex();
2411  if (maybeKinkPos->GetType()==AliAODVertex::kKink ||
2412  maybeKinkNeg->GetType()==AliAODVertex::kKink) continue;
2413  }
2414 
2415  //RDHF cuts
2416  if(ptrk->Pt()<cutVars[fAnalCuts->GetGlobalIndex(5,0)] || ntrk->Pt()<cutVars[fAnalCuts->GetGlobalIndex(6,0)]) continue;
2417  if(v0->GetDCA()>cutVars[fAnalCuts->GetGlobalIndex(8,0)]) continue;
2418  if(v0->CosPointingAngle(pos)<cutVars[fAnalCuts->GetGlobalIndex(9,0)]) continue;
2419  if(v0->DcaV0ToPrimVertex()>cutVars[fAnalCuts->GetGlobalIndex(11,0)]) continue;
2420  if((v0->PtArmV0()/TMath::Abs(v0->AlphaV0())<cutVars[fAnalCuts->GetGlobalIndex(19,0)])) continue;
2421 
2422  if(TMath::Abs(v0->MassLambda()-mLPDG) < cutVars[fAnalCuts->GetGlobalIndex(13,0)]) continue;
2423  if(TMath::Abs(v0->MassAntiLambda()-mLPDG) < cutVars[fAnalCuts->GetGlobalIndex(13,0)]) continue;
2424  if(v0->InvMass2Prongs(0,1,11,11) < cutVars[fAnalCuts->GetGlobalIndex(13,0)]) continue;
2425 
2426  ((TH2D*)(fOutputAll->FindObject("hMassvsPtInclusiveK0S")))->Fill(v0->MassK0Short(),v0->Pt());
2427 
2428  if(fUseMCInfo){
2429  Int_t pdgdgv0[2]={211,211};
2430  Int_t labV0 = v0->MatchToMC(310,mcArray,2,pdgdgv0); // the V0
2431  if(labV0>=0){
2432  AliAODMCParticle *mcv0 = (AliAODMCParticle*) mcArray->At(labV0);
2433  if(mcv0){
2434  ((TH2D*)(fOutputAll->FindObject("hMassvsPtInclusiveK0SSgn")))->Fill(v0->MassK0Short(),v0->Pt());
2435  }
2436  }
2437  }
2438  }
2439 
2440  //2: Proton from Lambda
2441  for (Int_t iv0 = 0; iv0<nV0s; iv0++) {
2442  AliAODv0 *v0 = aodEvent->GetV0(iv0);
2443  if(!v0) continue;
2444  AliAODTrack *ptrk = dynamic_cast<AliAODTrack*>(v0->GetDaughter(0));
2445  if (!ptrk) continue;
2446  AliAODTrack *ntrk = dynamic_cast<AliAODTrack*>(v0->GetDaughter(1));
2447  if (!ntrk) continue;
2448 
2449  Float_t etaMin=0, etaMax=0; trkCuts->GetEtaRange(etaMin,etaMax);
2450  if ( (ptrk->Eta()<=etaMin || ptrk->Eta()>=etaMax) ||
2451  (ntrk->Eta()<=etaMin || ntrk->Eta()>=etaMax) ) continue;
2452  Float_t ptMin=0, ptMax=0; trkCuts->GetPtRange(ptMin,ptMax);
2453  if ( (ptrk->Pt()<=ptMin || ptrk->Pt()>=ptMax) ||
2454  (ntrk->Pt()<=ptMin || ntrk->Pt()>=ptMax) ) continue;
2455 
2456 
2457  // kTPCrefit status
2458  if (v0->GetOnFlyStatus()==kFALSE) { // only for offline V0s
2459  if (trkCuts->GetRequireTPCRefit()) {
2460  if( !(ptrk->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2461  if( !(ntrk->GetStatus() & AliESDtrack::kTPCrefit)) continue;
2462  }
2463  }
2464 
2465  // kink condition
2466  if (!trkCuts->GetAcceptKinkDaughters()) {
2467  AliAODVertex *maybeKinkPos = (AliAODVertex*)ptrk->GetProdVertex();
2468  AliAODVertex *maybeKinkNeg = (AliAODVertex*)ntrk->GetProdVertex();
2469  if (maybeKinkPos->GetType()==AliAODVertex::kKink ||
2470  maybeKinkNeg->GetType()==AliAODVertex::kKink) continue;
2471  }
2472 
2473  //Should decay before TPC
2474  Double_t dR = TMath::Sqrt(v0->DecayVertexV0X()*v0->DecayVertexV0X()+v0->DecayVertexV0Y()*v0->DecayVertexV0Y());
2475  if(dR>40.) continue;
2476  if(dR<2.) continue;
2477 
2478  //Use the topological cuts for K0s to improve S/B
2479  if(v0->GetDCA()>cutVars[fAnalCuts->GetGlobalIndex(8,0)]) continue;
2480  if(v0->CosPointingAngle(pos)<cutVars[fAnalCuts->GetGlobalIndex(9,0)]) continue;
2481 
2482 
2483  Int_t LType = 0;
2484  if(TMath::Abs(v0->MassLambda()-mLPDG)<0.02) LType += 1;
2485  if(TMath::Abs(v0->MassAntiLambda()-mLPDG)<0.02) LType += 2;
2486  if(LType==3) continue;//to avoid complexity
2487 
2488  Bool_t okLcK0Sp = kTRUE; // K0S case
2489  Bool_t okLcLambdaBarPi = kTRUE; // LambdaBar case
2490  Bool_t okLcLambdaPi = kTRUE; // Lambda case
2491 
2492  AliAODMCParticle *mcv0 = 0x0;
2493  if(fUseMCInfo){
2494  Int_t pdgdgv0[2]={2212,211};
2495  Int_t labV0 = v0->MatchToMC(3122,mcArray,2,pdgdgv0); // the V0
2496  if(labV0>=0){
2497  mcv0 = (AliAODMCParticle*) mcArray->At(labV0);
2498  }
2499  }
2500 
2501  AliESDtrack esdTrackP(ptrk);
2502  esdTrackP.SetTPCClusterMap(ptrk->GetTPCClusterMap());
2503  esdTrackP.SetTPCSharedMap(ptrk->GetTPCSharedMap());
2504  esdTrackP.SetTPCPointsF(ptrk->GetTPCNclsF());
2505  esdTrackP.RelateToVertex(&vESD,0.,3.);
2506 
2507  AliESDtrack esdTrackN(ntrk);
2508  esdTrackN.SetTPCClusterMap(ntrk->GetTPCClusterMap());
2509  esdTrackN.SetTPCSharedMap(ntrk->GetTPCSharedMap());
2510  esdTrackN.SetTPCPointsF(ntrk->GetTPCNclsF());
2511  esdTrackN.RelateToVertex(&vESD,0.,3.);
2512 
2513  // Condition on nTPCclusters
2514  if (trkCuts->GetMinNClusterTPC()>0) {
2515  if(LType==1){
2516  if ( ( ( ptrk->GetTPCClusterInfo(2,1) ) < trkCuts->GetMinNClusterTPC() ) ||
2517  ( ( ntrk->GetTPCClusterInfo(2,1) ) < 70 ) ) continue;
2518  }
2519  if(LType==2){
2520  if ( ( ( ntrk->GetTPCClusterInfo(2,1) ) < trkCuts->GetMinNClusterTPC() ) ||
2521  ( ( ptrk->GetTPCClusterInfo(2,1) ) < 70 ) ) continue;
2522  }
2523  }
2524 
2525  if (trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC()>0.5) {
2526  Float_t ratioCrossedRowsOverFindableClustersTPCPos = 1.0;
2527  Float_t ratioCrossedRowsOverFindableClustersTPCNeg = 1.0;
2528  if (ptrk->GetTPCNclsF()>0) {
2529  ratioCrossedRowsOverFindableClustersTPCPos = ptrk->GetTPCClusterInfo(2,1) / ptrk->GetTPCNclsF();
2530  }
2531  if (ntrk->GetTPCNclsF()>0) {
2532  ratioCrossedRowsOverFindableClustersTPCNeg = ntrk->GetTPCClusterInfo(2,1) / ntrk->GetTPCNclsF();
2533  }
2534  if(LType==1){
2535  if ( ( ( ratioCrossedRowsOverFindableClustersTPCPos ) < trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ||
2536  ( ( ratioCrossedRowsOverFindableClustersTPCNeg ) < 0.8 ) ) continue;
2537  }
2538  if(LType==2){
2539  if ( ( ( ratioCrossedRowsOverFindableClustersTPCNeg ) < trkCuts->GetMinRatioCrossedRowsOverFindableClustersTPC() ) ||
2540  ( ( ratioCrossedRowsOverFindableClustersTPCPos ) < 0.8 ) ) continue;
2541  }
2542  }
2543 
2544  //appliyng TPC crossed rows pT dependent cut
2546  if(tmptxt.Contains("pt")){
2547  tmptxt.ReplaceAll("pt","x");
2548  TF1 funcCutMin("funcCutMin",tmptxt);
2549  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2550  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2551  if(LType==1 && nCrossedRowsTPCP<funcCutMin.Eval(esdTrackP.Pt())) continue;
2552  if(LType==2 && nCrossedRowsTPCN<funcCutMin.Eval(esdTrackN.Pt())) continue;
2553  }
2554 
2555  //appliyng NTPCcls/NTPCcrossedRows cut
2557  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2558  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2559  Float_t nClustersTPCP = esdTrackP.GetTPCNcls();
2560  Float_t nClustersTPCN = esdTrackN.GetTPCNcls();
2561  if(LType==1){
2562  if(nCrossedRowsTPCP!=0){
2563  Float_t ratioP = nClustersTPCP/nCrossedRowsTPCP;
2564  if(ratioP<fAnalCuts->GetMinRatioClsOverCrossRowsTPC()) continue;
2565  }
2566  else continue;
2567 
2568  }
2569  if(LType==2){
2570  if(nCrossedRowsTPCN!=0){
2571  Float_t ratioN = nClustersTPCN/nCrossedRowsTPCN;
2572  if(ratioN<fAnalCuts->GetMinRatioClsOverCrossRowsTPC()) continue;
2573  }
2574  else continue;
2575  }
2576  }
2577 
2578  //appliyng TPCsignalN/NTPCcrossedRows cut
2580  Float_t nCrossedRowsTPCP = esdTrackP.GetTPCCrossedRows();
2581  Float_t nCrossedRowsTPCN = esdTrackN.GetTPCCrossedRows();
2582  Float_t nTPCsignalP = esdTrackP.GetTPCsignalN();
2583  Float_t nTPCsignalN = esdTrackN.GetTPCsignalN();
2584  if(LType==1){
2585  if(nCrossedRowsTPCP!=0){
2586  Float_t ratioP = nTPCsignalP/nCrossedRowsTPCP;
2587  if(ratioP<fAnalCuts->GetMinRatioSignalNOverCrossRowsTPC()) continue;
2588  }
2589  else continue;
2590  }
2591  if(LType==2){
2592  if(nCrossedRowsTPCN!=0){
2593  Float_t ratioN = nTPCsignalN/nCrossedRowsTPCN;
2594  if(ratioN<fAnalCuts->GetMinRatioSignalNOverCrossRowsTPC()) continue;
2595  }
2596  else continue;
2597  }
2598  }
2599 
2600  if(LType==1){
2601  Double_t nTPCsigmas=-9999, nTOFsigmas=-9999;
2602  fAnalCuts->GetPidHF()->GetnSigmaTPC(ptrk,4,nTPCsigmas);
2603  fAnalCuts->GetPidHF()->GetnSigmaTOF(ptrk,4,nTOFsigmas);
2604  Bool_t PIDOK=kFALSE;
2605  switch(fAnalCuts->GetPidSelectionFlag()){
2606  case 10:
2607  if(TMath::Abs(nTPCsigmas)<3. && TMath::Abs(nTOFsigmas)<3.){
2608  PIDOK = !(ptrk->Pt()>fAnalCuts->GetLowPtCut()&& nTOFsigmas<-2.)&&!(ptrk->Pt()>fAnalCuts->GetLowPtCut()&&nTPCsigmas>2.);
2609  }
2610  break;
2611  }
2612  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambda")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2613  if(TMath::Abs(nTPCsigmas)<5&&TMath::Abs(nTOFsigmas)<5){
2614  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaLoosePID")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2615  }
2616 
2617  Double_t bachcosthe = -9999;
2618  if(PIDOK){
2619  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambda")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2620  TLorentzVector vpr, vpi,vlam;
2621  vpr.SetXYZM(ptrk->Px(),ptrk->Py(),ptrk->Pz(),0.938272081);
2622  vpi.SetXYZM(ntrk->Px(),ntrk->Py(),ntrk->Pz(),0.13957061);
2623  vlam = vpr + vpi;
2624  TVector3 vboost = vlam.BoostVector();
2625  vpr.Boost(-vboost);
2626  bachcosthe = cos(vpr.Angle(vlam.Vect()));
2627  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaCosThetaStarPID")))->Fill(v0->MassLambda(),ptrk->Pt(),bachcosthe);
2628  }
2629 
2630  if(fUseMCInfo && mcv0){
2631  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaSgn")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2632  if(TMath::Abs(nTPCsigmas)<5&&TMath::Abs(nTOFsigmas)<5){
2633  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaLoosePIDSgn")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2634  }
2635  if(PIDOK){
2636  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaSgn")))->Fill(v0->MassLambda(),ptrk->Pt(),dR);
2637  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaCosThetaStarPIDSgn")))->Fill(v0->MassLambda(),ptrk->Pt(),bachcosthe);
2638  }
2639 
2640  }
2641  }
2642  if(LType==2){
2643  Double_t nTPCsigmas=-9999, nTOFsigmas=-9999;
2644  fAnalCuts->GetPidHF()->GetnSigmaTPC(ntrk,4,nTPCsigmas);
2645  fAnalCuts->GetPidHF()->GetnSigmaTOF(ntrk,4,nTOFsigmas);
2646  Bool_t PIDOK=kFALSE;
2647  switch(fAnalCuts->GetPidSelectionFlag()){
2648  case 10:
2649  if(TMath::Abs(nTPCsigmas)<3. && TMath::Abs(nTOFsigmas)<3.){
2650  PIDOK = !(ptrk->Pt()>fAnalCuts->GetLowPtCut()&& nTOFsigmas<-2.)&&!(ptrk->Pt()>fAnalCuts->GetLowPtCut()&&nTPCsigmas>2.);
2651  }
2652  break;
2653  }
2654  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambda")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2655  if(TMath::Abs(nTPCsigmas)<5&&TMath::Abs(nTOFsigmas)<5){
2656  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaLoosePID")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2657  }
2658 
2659  Double_t bachcosthe = -9999;
2660  if(PIDOK){
2661  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambda")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2662  TLorentzVector vpr, vpi,vlam;
2663  vpr.SetXYZM(ntrk->Px(),ntrk->Py(),ntrk->Pz(),0.938272081);
2664  vpi.SetXYZM(ptrk->Px(),ptrk->Py(),ptrk->Pz(),0.13957061);
2665  vlam = vpr + vpi;
2666  TVector3 vboost = vlam.BoostVector();
2667  vpr.Boost(-vboost);
2668  bachcosthe = cos(vpr.Angle(vlam.Vect()));
2669  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaCosThetaStarPID")))->Fill(v0->MassLambda(),ntrk->Pt(),bachcosthe);
2670  }
2671  if(fUseMCInfo && mcv0){
2672  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaSgn")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2673  if(TMath::Abs(nTPCsigmas)<5&&TMath::Abs(nTOFsigmas)<5){
2674  ((TH3D*)(fOutputAll->FindObject("hMassvsPtInclusiveLambdaLoosePIDSgn")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2675  }
2676  if(PIDOK){
2677  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaSgn")))->Fill(v0->MassAntiLambda(),ntrk->Pt(),dR);
2678  ((TH3D*)(fOutputPIDBach->FindObject("hMassvsPtInclusiveLambdaCosThetaStarPIDSgn")))->Fill(v0->MassLambda(),ntrk->Pt(),bachcosthe);
2679  }
2680  }
2681  }
2682  }
2683  return;
2684 }
2685 
2686 //---------------------------
2688  //
2690  //
2691 
2692  TClonesArray *arrayLctopKos=0;
2693  if (!aodEvent){
2694  if(AODEvent() && IsStandardAOD()) {
2695  // In case there is an AOD handler writing a standard AOD, use the AOD
2696  // event in memory rather than the input (ESD) event.
2697  aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
2698  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
2699  // have to taken from the AOD event hold by the AliAODExtension
2700  AliAODHandler* aodHandler = (AliAODHandler*)
2701  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
2702 
2703  if (aodHandler->GetExtensions()) {
2704  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
2705  AliAODEvent *aodFromExt = ext->GetAOD();
2706  arrayLctopKos=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
2707  }
2708  }
2709  } else {
2710  arrayLctopKos=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF");
2711  }
2712 
2713  Float_t zVertex = fVtx1->GetZ();
2714  TString titleVtx=fVtx1->GetTitle();
2715 
2716  if (TMath::Abs(fBzkG)>=0.001) {
2717 
2718  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ2")))->Fill(zVertex);
2719 
2720  if (arrayLctopKos) {
2721 
2722  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ3")))->Fill(zVertex);
2723 
2724  // mc analysis
2725  TClonesArray *mcArray = 0;
2726  AliAODMCHeader *mcHeader=0;
2727 
2728  if (fUseMCInfo) {
2729  // MC array need for maching
2730  mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
2731 
2732  if (mcArray) {
2733  // load MC header
2734  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ4")))->Fill(zVertex);
2735  mcHeader = (AliAODMCHeader*)aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName());
2736 
2737  if (mcHeader && fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ5")))->Fill(zVertex);
2738 
2739  // check on MC Lc Daughter
2740  if (fAdditionalChecks) {
2741  for (Int_t iii=0; iii<mcArray->GetEntries(); iii++)
2742  SearchLcDaughter(mcArray,iii);
2743  }
2744 
2745  }
2746 
2747  }
2748 
2749  if (fVtx1->GetNContributors()>0) {
2750  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ6")))->Fill(zVertex);
2751 
2752  TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class
2753  ULong64_t fTriggerMask=AliVEvent::kAnyINT;
2754  Bool_t check1 = kFALSE;
2755  if ( !fUseMCInfo && // don't do for MC...
2756  (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data
2757  if ( !(firedTriggerClasses.Contains("CINT1")) ) {
2758  AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data()));
2759  fCEvents->Fill(8);
2760  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ8")))->Fill(zVertex);
2761  check1 = kTRUE;
2762  }
2763  }
2764 
2765  Bool_t isSelectedAAA = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
2766  if (!isSelectedAAA) {
2767  fCEvents->Fill(9);
2768  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ9")))->Fill(zVertex);
2769  }
2770 
2771  if (!isSelectedAAA || check1) {
2772  fCEvents->Fill(16);
2773  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ16")))->Fill(zVertex);
2774  }
2775 
2776  fTriggerMask=AliVEvent::kAny;
2777  Bool_t isSelectedBBB = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
2778  if (!isSelectedBBB) {
2779  fCEvents->Fill(10);
2780  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ10")))->Fill(zVertex);
2781  }
2782 
2783  if (titleVtx.Contains("Z")) {
2784  fCEvents->Fill(11);
2785  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ11")))->Fill(zVertex);
2786  }
2787  else if (titleVtx.Contains("3D")) {
2788  fCEvents->Fill(12);
2789  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ12")))->Fill(zVertex);
2790  } else {
2791  fCEvents->Fill(13);
2792  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ13")))->Fill(zVertex);
2793  }
2794 
2795  if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) {
2796  fCEvents->Fill(14);
2797  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ14")))->Fill(zVertex);
2798  }
2799 
2800  if ( fIsEventSelected ) {
2801  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ7")))->Fill(zVertex);
2802  } else {
2803  fCEvents->Fill(15);
2804  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ15")))->Fill(zVertex);
2805  }
2806 
2807  } // nContributors>=1
2808  } // analysisArray exists
2809  } // magnetic field exists
2810 
2811  return;
2812 }
2813 
2814 //-----------------
2819 
2820  Float_t zVertex = fVtx1->GetZ();
2821  TString titleVtx=fVtx1->GetTitle();
2822  TString firedTriggerClasses = aodEvent->GetFiredTriggerClasses(); // trigger class
2823  ULong64_t fTriggerMask=AliVEvent::kAnyINT;
2824 
2825  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(6);
2826  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ6a")))->Fill(zVertex);
2827 
2828  Bool_t check1a = kFALSE;
2829  if ( !fUseMCInfo && // don't do for MC...
2830  (aodEvent->GetRunNumber()<136851 || aodEvent->GetRunNumber()>139517) ) { // ...and for PbPb 2010 data
2831  if ( !(firedTriggerClasses.Contains("CINT1")) ) {
2832  AliInfo(Form(" ======================== firedTriggerClasses.Data() = %s",firedTriggerClasses.Data()));
2833  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(8);
2834  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ8a")))->Fill(zVertex);
2835  check1a = kTRUE;
2836  }
2837  }
2838 
2839  Bool_t isSelectedAAAa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
2840  if (!isSelectedAAAa) {
2841  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(9);
2842  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ9a")))->Fill(zVertex);
2843  }
2844 
2845  if (!isSelectedAAAa || check1a) {
2846  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(16);
2847  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ16a")))->Fill(zVertex);
2848  }
2849 
2850  fTriggerMask=AliVEvent::kAny;
2851  Bool_t isSelectedBBBa = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() & fTriggerMask);
2852  if (!isSelectedBBBa) {
2853  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(10);
2854  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ10a")))->Fill(zVertex);
2855  }
2856 
2857  if (titleVtx.Contains("Z")) {
2858  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(11);
2859  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ11a")))->Fill(zVertex);
2860  }
2861  else if (titleVtx.Contains("3D")) {
2862  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(12);
2863  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ12a")))->Fill(zVertex);
2864  } else {
2865  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(13);
2866  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ13a")))->Fill(zVertex);
2867  }
2868 
2869  if (TMath::Abs(zVertex)<=fAnalCuts->GetMaxVtxZ()) {
2870  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(14);
2871  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ14a")))->Fill(zVertex);
2872  }
2873 
2874  if ( fIsEventSelected ) {
2875  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(7);
2876  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ7a")))->Fill(zVertex);
2877  } else {
2878  ((TH1F*)(fOutput->FindObject("hEventsWithCandidates")))->Fill(15);
2879  if (fAdditionalChecks) ((TH1F*)(fOutput->FindObject("hZ15a")))->Fill(zVertex);
2880  }
2881 
2882  return;
2883 }
2884 
2885 //-----------------------------
2887  Int_t *pdgDgLc2bacV0, Int_t *pdgDgV0,
2888  TClonesArray *mcArray) {
2889  //
2891  //
2892 
2893  // bachelor
2894  AliAODTrack *bachelor = (AliAODTrack*)lc2bacV0->GetBachelor();
2895  if (!bachelor) return -1;
2896  Int_t labBachelor = TMath::Abs(bachelor->GetLabel());
2897  if (labBachelor<0) return -1;
2898  AliAODMCParticle *partBachelor = (AliAODMCParticle*)mcArray->At(labBachelor);
2899  if (!partBachelor) return -1;
2900  if (TMath::Abs(partBachelor->GetPdgCode())!=pdgDgLc2bacV0[0]) return -1;
2901 
2902  Int_t labBacMother = partBachelor->GetMother();
2903  if (labBacMother<0) return -1;
2904  AliAODMCParticle *partBacMother = (AliAODMCParticle*)mcArray->At(labBacMother);
2905  if (!partBacMother) return -1;
2906  if (TMath::Abs(partBacMother->GetPdgCode())!=4122) return -1;
2907 
2908  // V0
2909  AliAODTrack *posV0Daugh = (AliAODTrack*)lc2bacV0->Getv0PositiveTrack();
2910  AliAODTrack *negV0Daugh = (AliAODTrack*)lc2bacV0->Getv0NegativeTrack();
2911  if (!posV0Daugh || !negV0Daugh) return -1;
2912 
2913  Int_t labV0pos = TMath::Abs(posV0Daugh->GetLabel());
2914  Int_t labV0neg = TMath::Abs(negV0Daugh->GetLabel());
2915  if (labV0pos<0 || labV0neg<0) return -1;
2916 
2917  AliAODMCParticle *partV0pos = (AliAODMCParticle*)mcArray->At(labV0neg);
2918  AliAODMCParticle *partV0neg = (AliAODMCParticle*)mcArray->At(labV0pos);
2919  if (!partV0pos || !partV0neg) return -1;
2920 
2921  if ( ! ( (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[0] &&
2922  TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[1]) ||
2923  (TMath::Abs(partV0pos->GetPdgCode())==pdgDgV0[1] &&
2924  TMath::Abs(partV0neg->GetPdgCode())==pdgDgV0[0]) ) ) return -1;
2925  Int_t labV0posMother = partV0pos->GetMother();
2926  Int_t labV0negMother = partV0neg->GetMother();
2927 
2928  if (labV0posMother<0 || labV0negMother<0) return -1;
2929  if (labV0posMother!=labV0negMother) return -1;
2930 
2931  AliAODMCParticle *motherV0 = (AliAODMCParticle*)mcArray->At(labV0posMother);
2932  if (!motherV0) return-1;
2933 
2934  if (TMath::Abs(motherV0->GetPdgCode())!=pdgDgLc2bacV0[1]) return -1;
2935  Int_t labV0mother = motherV0->GetMother();
2936  if (labV0mother<0) return -1;
2937  AliAODMCParticle *gMotherV0 = (AliAODMCParticle*)mcArray->At(labV0mother);
2938  if (!gMotherV0) return-1;
2939 
2940  if ( !(pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) &&
2941  !(pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) ) return -1;
2942 
2943  if ( (pdgDgLc2bacV0[1]==310 && TMath::Abs(gMotherV0->GetPdgCode())==311) ) {
2944  Int_t labV0GMother = gMotherV0->GetMother();
2945  if (labV0GMother<0) return -1;
2946  AliAODMCParticle *ggMotherV0 = (AliAODMCParticle*)mcArray->At(labV0GMother);
2947  if (!ggMotherV0) return-1;
2948 
2949  if (TMath::Abs(ggMotherV0->GetPdgCode())!=4122) return -1;
2950  gMotherV0 = (AliAODMCParticle*)ggMotherV0;
2951  labV0mother=labV0GMother;
2952  }
2953  else if (pdgDgLc2bacV0[1]==3122 && TMath::Abs(motherV0->GetPdgCode())==3122) {
2954  if (TMath::Abs(gMotherV0->GetPdgCode())!=4122) return -1;
2955  }
2956 
2957  if (labBacMother!=labV0mother) {
2958  return -1;
2959  }
2960 
2961  return labBacMother;
2962 
2963 }
2964 
2965 //________________________________________________________________
2967  //
2969  //
2970 
2971  Int_t indexToBeReturned=-999;
2972 
2973  Int_t pdgLc=4122;
2974  Int_t pdgLambda=3122;
2975  Int_t pdgV0=310;
2976  Int_t pdgK0=311;
2977  Int_t pdgBachelor=2212;
2978  Int_t pdgBachelorPi=211;
2979 
2980  TString fillthis="";
2981  fillthis="histMcStatLc";
2982 
2983  AliAODMCParticle *searchLc = dynamic_cast<AliAODMCParticle*>(arrayMC->At(iii));
2984  if(!searchLc) return -999;
2985  if (TMath::Abs(searchLc->GetPdgCode()) != pdgLc) return -999;
2986 
2987  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(0);
2988  indexToBeReturned = 0;
2989 
2990  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*1);
2991  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*1;
2992 
2993  Int_t nDaughLc = searchLc->GetNDaughters();
2994  if (nDaughLc!=2) {
2995  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*10);
2996  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*10;
2997  return indexToBeReturned;
2998  }
2999 
3000  Int_t index1=searchLc->GetDaughter(0);
3001  Int_t index2=searchLc->GetDaughter(1);
3002  if (index1<=0 || index2<=0) {
3003  return -999;
3004  }
3005 
3006  AliAODMCParticle *daugh1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1));
3007  AliAODMCParticle *daugh2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2));
3008  if (!daugh1 || !daugh2) return -999;
3009 
3010  Int_t daughPdg1 = TMath::Abs(daugh1->GetPdgCode());
3011  Int_t daughPdg2 = TMath::Abs(daugh2->GetPdgCode());
3012  if ( !( (daughPdg1==pdgBachelor && daughPdg2==pdgK0) ||
3013  (daughPdg2==pdgBachelor && daughPdg1==pdgK0) ||
3014  (daughPdg1==pdgLambda && daughPdg2==pdgBachelorPi) ||
3015  (daughPdg2==pdgLambda && daughPdg1==pdgBachelorPi) ) ) {
3016  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*10);
3017  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*10;
3018  return indexToBeReturned;
3019  }
3020 
3021  if (daughPdg1==pdgK0 || daughPdg1==pdgLambda) {
3022  index1=searchLc->GetDaughter(1);
3023  index2=searchLc->GetDaughter(0);
3024  }
3025  daugh1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1));
3026  daugh2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2));
3027  if (!daugh1 || !daugh2) return -999;
3028 
3029  daughPdg1=TMath::Abs(daugh1->GetPdgCode());
3030  daughPdg2=TMath::Abs(daugh2->GetPdgCode());
3031 
3032  if ( daughPdg1==pdgBachelor && daughPdg2==pdgK0 ) { // Lc+ -> p K0bar
3033 
3034  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*2);
3035  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*2;
3036 
3037  Int_t nDaughK0 = daugh2->GetNDaughters();
3038  if (nDaughK0!=1) return -999;
3039 
3040  Int_t indexK0daugh=daugh2->GetDaughter(0);
3041  if (indexK0daugh<=0) return -999;
3042 
3043  AliAODMCParticle *daughK0 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(indexK0daugh));
3044  if (!daughK0) return -999;
3045 
3046  Int_t daughK0Pdg=TMath::Abs(daughK0->GetPdgCode());
3047  if (daughK0Pdg!=pdgV0) {
3048  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*4); // K0L
3049  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*4;
3050  return indexToBeReturned;
3051  }
3052  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*3); // K0S
3053  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*3;
3054 
3055  Int_t nDaughK0S = daughK0->GetNDaughters();
3056  if (nDaughK0S!=2) {
3057  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*5); // other decays for K0S
3058  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*5;
3059  return indexToBeReturned;
3060  }
3061 
3062  index1=daughK0->GetDaughter(0);
3063  index2=daughK0->GetDaughter(1);
3064  if(index1<=0 || index2<=0) {
3065  return -999;
3066  }
3067 
3068  AliAODMCParticle *daughK0S1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1));
3069  AliAODMCParticle *daughK0S2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2));
3070  if (!daughK0S1 || !daughK0S2) return -999;
3071 
3072  Int_t daughK0S1pdg=TMath::Abs(daughK0S1->GetPdgCode());
3073  Int_t daughK0S2pdg=TMath::Abs(daughK0S2->GetPdgCode());
3074 
3075  if ( daughK0S1pdg==211 && daughK0S2pdg==211 ) {
3076  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*6); // K0S -> pi+ pi-
3077  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*6;
3078  } else {
3079  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*5); // other decays for K0S
3080  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*5;
3081  }
3082 
3083  } //if (daughPdg1==pdgBachelor && daughPdg2==pdgK0)
3084  else if ( daughPdg1==pdgBachelorPi && daughPdg2==pdgLambda ) { // Lc+ -> pi+ Lambda
3085 
3086  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*7);
3087  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*7;
3088 
3089  Int_t nDaughL = daugh2->GetNDaughters();
3090  if (nDaughL!=2) {
3091  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*8);
3092  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*8;
3093  return indexToBeReturned;
3094  }
3095 
3096  index1=daugh2->GetDaughter(0);
3097  index2=daugh2->GetDaughter(1);
3098  if(index1<=0 || index2<=0) {
3099  return -999;
3100  }
3101 
3102  AliAODMCParticle *daughL1 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index1));
3103  AliAODMCParticle *daughL2 = dynamic_cast<AliAODMCParticle*>(arrayMC->At(index2));
3104  if (!daughL1 || !daughL2) return -999;
3105 
3106  Int_t daughL1pdg=TMath::Abs(daughL1->GetPdgCode());
3107  Int_t daughL2pdg=TMath::Abs(daughL2->GetPdgCode());
3108  if ( (daughL1pdg==211 && daughL2pdg==2212) ||
3109  (daughL2pdg==211 && daughL1pdg==2212) ) {
3110  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*9);
3111  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*9;
3112  } else {
3113  ((TH1F*)(fOutput->FindObject(fillthis)))->Fill(TMath::Nint(searchLc->Charge()/3.)*8);
3114  indexToBeReturned = TMath::Nint(searchLc->Charge()/3.)*8;
3115  }
3116 
3117  } //else if (daughPdg1==pdgBachelorPi && daughPdg2==pdgLambda)
3118 
3119  return indexToBeReturned;
3120 }
3121 
3122 //________________________________________________________________
3124  TString histoTitle,
3125  Bool_t isCandidateSelectedCuts,
3126  Bool_t isBachelorID) {
3127  //
3129  //
3130 
3131  Double_t alpha = vZero->Alpha();//AlphaV0();
3132  Double_t qT = vZero->QtProng();//PtArmV0();
3133 
3134  ((TH2F*)(fOutputAll->FindObject(histoTitle+"0")))->Fill(alpha,qT);
3135  if (isCandidateSelectedCuts) {
3136  ((TH2F*)(fOutputAll->FindObject(histoTitle)))->Fill(alpha,qT);
3137  if (isBachelorID)
3138  ((TH2F*)(fOutputPIDBach->FindObject(histoTitle)))->Fill(alpha,qT);
3139  }
3140 
3141 }
3142 
3143 //-------------------------------------------------------------------------------
3145  //
3147  //
3148 
3149  Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID();
3150 
3151  AliAODv0 * v0part = (AliAODv0*)part->Getv0();
3152  Bool_t onFlyV0 = v0part->GetOnFlyStatus(); // on-the-flight V0s
3153 
3154  AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor();
3155 
3156  if ( !onFlyV0 )
3157  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(3); // it counts number of candidates coming from offline V0s
3158 
3159  if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) )
3160  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(4);
3162  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(5);
3163  cutsAnal->SetUsePID(kFALSE);
3165  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(6);
3166  cutsAnal->SetUsePID(areCutsUsingPID);
3168  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(7);
3170  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(8);
3172  ((TH1F*)(fOutput->FindObject("hCandidateSelection")))->Fill(9);
3173 
3174  if ( cutsAnal->IsInFiducialAcceptance(part->Pt(),part->Y(4122)) ) {
3175 
3177 
3178  Int_t aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kTracks);
3179  if ( (aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr ) {
3180  if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()<0) ||
3181  ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()>0) )
3182  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( -aaa );
3183  else
3184  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates1")))->Fill( aaa );
3185  }
3186 
3187  cutsAnal->SetUsePID(kFALSE);
3188  aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kCandidate);
3189  if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
3190  if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()<0) ||
3191  ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()>0) )
3192  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( -aaa );
3193  else
3194  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates2")))->Fill( aaa );
3195  }
3196  cutsAnal->SetUsePID(areCutsUsingPID);
3197 
3198  aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kPID);
3199  if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
3200  if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()<0) ||
3201  ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()>0) )
3202  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( -aaa );
3203  else
3204  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates3")))->Fill( aaa );
3205  }
3206 
3207  aaa = cutsAnal->IsSelected(part,AliRDHFCuts::kAll);
3208  if ((aaa&AliRDHFCutsLctoV0::kLcToK0Spr)==AliRDHFCutsLctoV0::kLcToK0Spr) {
3209  if ( ( (aaa&AliRDHFCutsLctoV0::kLcToLpi)==AliRDHFCutsLctoV0::kLcToLpi && bachelor->Charge()<0) ||
3210  ( (aaa&AliRDHFCutsLctoV0::kLcToLBarpi)==AliRDHFCutsLctoV0::kLcToLBarpi && bachelor->Charge()>0) )
3211  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( -aaa );
3212  else
3213  ((TH1F*)(fOutput->FindObject("hSwitchOnCandidates4")))->Fill( aaa );
3214  }
3215 
3216  }
3217  }
3218 
3219  return;
3220 }
3221 
3222 //-------------------------------------------------------------------------------
3223 void AliAnalysisTaskSELc2V0bachelor::FillTheTree(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TClonesArray *mcArray, Int_t isLc, Int_t checkLcOrigin) {
3224  //
3226  //
3227 
3228  Double_t mk0sPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
3229  Double_t mLPDG = TDatabasePDG::Instance()->GetParticle(3122)->Mass();
3230 
3231  Double_t invmassLc = part->InvMassLctoK0sP();
3232  Double_t invmassLc2Lpi = part->InvMassLctoLambdaPi();
3233 
3234  AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor();
3235 
3236  AliAODv0 * v0part = (AliAODv0*)part->Getv0();
3237  Double_t dcaV0ptp = v0part->GetDCA();
3238  Double_t invmassK0S = v0part->MassK0Short();
3239  Double_t invmassLambda = v0part->MassLambda();
3240  Double_t invmassLambdaBar = v0part->MassAntiLambda();
3241 
3242  Int_t isLc2LBarpi=0, isLc2Lpi=0;
3243  Int_t mcLabel = -1;
3244  Int_t isDp2K0Spi=0, isDs2K0SK=0;
3245  Int_t mcLabel2 = -1;
3246  Int_t mcLabel3 = -1;
3247  Int_t isKstar12K0Spi=0, isKstar22K0Spi=0;
3248  Int_t mcLabel4 = -1;
3249  Int_t mcLabel5 = -1;
3250  Double_t ptCandByMC = 0.;//fmcPartCandidate->Pt();
3251  Double_t yCandByMC = 0.;//fmcPartCandidate->Y();
3252  if (fUseMCInfo) {
3253  if (isLc) {
3254  Int_t pdgCand0 = 4122;
3255  Int_t pdgDgLctoV0bachelor0[2]={2212,310};
3256  Int_t pdgDgV0toDaughters0[2]={211,211};
3257  Int_t mcLabelLc2pK0S = part->MatchToMC(pdgCand0,pdgDgLctoV0bachelor0[1],pdgDgLctoV0bachelor0,pdgDgV0toDaughters0,mcArray,kTRUE);
3258  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabelLc2pK0S);
3259  if (lambdaCpartMC) {
3260  ptCandByMC = lambdaCpartMC->Pt();
3261  yCandByMC = lambdaCpartMC->Y();
3262  }
3263  }
3264 
3265  Int_t pdgCand = 4122;
3266  Int_t pdgDgLctoV0bachelor[2]={211,3122};
3267  Int_t pdgDgV0toDaughters[2]={2212,211};
3268  mcLabel = part->MatchToMC(pdgCand,pdgDgLctoV0bachelor[1],pdgDgLctoV0bachelor,pdgDgV0toDaughters,mcArray,kTRUE);
3269  if (mcLabel!=-1) {
3270  if (bachelor->Charge()<0) isLc2LBarpi=1;
3271  if (bachelor->Charge()>0) isLc2Lpi=1;
3272  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel);
3273  if (lambdaCpartMC) {
3274  ptCandByMC = lambdaCpartMC->Pt();
3275  yCandByMC = lambdaCpartMC->Y();
3276  }
3277  }
3278 
3279  Int_t pdgCand2 = 411; // D+ -> pi+ K0S
3280  Int_t pdgCand3 = 431; // Ds+ -> K+ K0S
3281  Int_t pdgDgCand2[2]={211,310};
3282  Int_t pdgDgCand3[2]={321,310};
3283  pdgDgV0toDaughters[0]=211;
3284  pdgDgV0toDaughters[1]=211;
3285  mcLabel2 = part->MatchToMC(pdgCand2,pdgDgCand2[1],pdgDgCand2,pdgDgV0toDaughters,mcArray,kTRUE);
3286  mcLabel3 = part->MatchToMC(pdgCand3,pdgDgCand3[1],pdgDgCand3,pdgDgV0toDaughters,mcArray,kTRUE);
3287  if (mcLabel2!=-1) {
3288  isDp2K0Spi=1;
3289  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel2);
3290  if (lambdaCpartMC) {
3291  ptCandByMC = lambdaCpartMC->Pt();
3292  yCandByMC = lambdaCpartMC->Y();
3293  }
3294  }
3295  if (mcLabel3!=-1) {
3296  isDs2K0SK=1;
3297  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel3);
3298  if (lambdaCpartMC) {
3299  ptCandByMC = lambdaCpartMC->Pt();
3300  yCandByMC = lambdaCpartMC->Y();
3301  }
3302  }
3303 
3304  Int_t pdgCand4 = 313; // K*(892)+ -> pi+ K0S
3305  Int_t pdgCand5 = 325; // K*(1430)+ -> pi+ K0S
3306  Int_t pdgDgCand4[2]={211,310};
3307  Int_t pdgDgCand5[2]={211,310};
3308  pdgDgV0toDaughters[0]=211;
3309  pdgDgV0toDaughters[1]=211;
3310  mcLabel4 = part->MatchToMC(pdgCand4,pdgDgCand4[1],pdgDgCand4,pdgDgV0toDaughters,mcArray,kTRUE);
3311  mcLabel5 = part->MatchToMC(pdgCand5,pdgDgCand5[1],pdgDgCand5,pdgDgV0toDaughters,mcArray,kTRUE);
3312  if (mcLabel4!=-1) {
3313  isKstar12K0Spi=1;
3314  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel4);
3315  if (lambdaCpartMC) {
3316  ptCandByMC = lambdaCpartMC->Pt();
3317  yCandByMC = lambdaCpartMC->Y();
3318  }
3319  }
3320  if (mcLabel5!=-1) {
3321  isKstar22K0Spi=1;
3322  AliAODMCParticle *lambdaCpartMC = (AliAODMCParticle*)mcArray->At(mcLabel5);
3323  if (lambdaCpartMC) {
3324  ptCandByMC = lambdaCpartMC->Pt();
3325  yCandByMC = lambdaCpartMC->Y();
3326  }
3327  }
3328  }
3329 
3330  Int_t isLcByMC = isLc+isLc2LBarpi*2+isLc2Lpi*4+isDp2K0Spi*8+isDs2K0SK*16+isKstar12K0Spi*32+isKstar22K0Spi*64;
3331 
3332  Bool_t isMCparticleInFiducialAcceptance = kTRUE;
3333  if (isLc || isLc2LBarpi || isLc2Lpi || isDp2K0Spi || isDs2K0SK || isKstar12K0Spi || isKstar22K0Spi) {
3334  isMCparticleInFiducialAcceptance = cutsAnal->IsInFiducialAcceptance(ptCandByMC,yCandByMC);
3335  }
3336 
3337  Int_t isK0S = 0;
3338  Int_t isLambda = 0;
3339  Int_t isLambdaBar = 0;
3340  Int_t isGamma = 0;
3341  if (fUseMCInfo) {
3342  Int_t pdgDg2prong[2] = {211, 211};
3343  Int_t labelK0S = v0part->MatchToMC(310,mcArray,2,pdgDg2prong);
3344  if (labelK0S>=0) isK0S = 1;
3345 
3346  pdgDg2prong[0] = 211;
3347  pdgDg2prong[1] = 2212;
3348  Int_t lambdaLabel = v0part->MatchToMC(3122,mcArray,2,pdgDg2prong);
3349  if (lambdaLabel>=0) {
3350  AliAODMCParticle *lambdaTrack = (AliAODMCParticle*)mcArray->At(lambdaLabel);
3351  if (lambdaTrack->GetPdgCode()==3122) isLambda = 1;
3352  else if (lambdaTrack->GetPdgCode()==-3122) isLambdaBar = 1;
3353  }
3354 
3355  pdgDg2prong[0] = 11;
3356  pdgDg2prong[1] = 11;
3357  Int_t gammaLabel = v0part->MatchToMC(22,mcArray,2,pdgDg2prong);
3358  if (gammaLabel>=0) {
3359  AliAODMCParticle *gammaTrack = (AliAODMCParticle*)mcArray->At(gammaLabel);
3360  if (gammaTrack->GetPdgCode()==22) isGamma = 1;
3361  }
3362  }
3363 
3364  Int_t isV0ByMC = isK0S+isLambdaBar*2+isLambda*4+isGamma*8;
3365 
3366  Int_t isBachelorSelected = (bachelor->TestFilterMask(BIT(4)))*1 + (!(bachelor->TestFilterMask(BIT(4))))*2;
3367  isBachelorSelected += (bachelor->GetLabel()<0)*4 + (bachelor->GetLabel()>=0)*8;
3368  if ( ( !(bachelor->HasPointOnITSLayer(0)) && !(bachelor->HasPointOnITSLayer(1)) ) )
3369  isBachelorSelected += 16;
3370  else {
3371  if ( bachelor->HasPointOnITSLayer(0) && !(bachelor->HasPointOnITSLayer(1)) )
3372  isBachelorSelected += 32;
3373  else if ( !(bachelor->HasPointOnITSLayer(0)) && bachelor->HasPointOnITSLayer(1) )
3374  isBachelorSelected += 64;
3375  else
3376  isBachelorSelected += 128;
3377  }
3378 
3379  AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack();
3380  AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack();
3381 
3382  Int_t areV0daughtersSelected = (v0pos->TestFilterMask(BIT(4)))*1 + (!(v0pos->TestFilterMask(BIT(4))))*2;
3383  areV0daughtersSelected += (v0pos->GetLabel()<0)*4 + (v0pos->GetLabel()>=0)*8;
3384  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(0))*16;
3385  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(1))*32;
3386  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(2))*64;
3387  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(3))*128;
3388  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(4))*256;
3389  areV0daughtersSelected += (v0pos->HasPointOnITSLayer(5))*512;
3390 
3391  areV0daughtersSelected += (v0neg->TestFilterMask(BIT(4)))*1024 + (!(v0neg->TestFilterMask(BIT(4))))*2048;
3392  areV0daughtersSelected += (v0neg->GetLabel()<0)*4096 + (v0neg->GetLabel()>=0)*8192;
3393  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(0))*16384;
3394  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(1))*32768;
3395  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(2))*65536;
3396  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(3))*131072;
3397  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(4))*262144;
3398  areV0daughtersSelected += (v0neg->HasPointOnITSLayer(5))*524288;
3399 
3400  Double_t nSigmaITSpr=-999.;
3401  cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,4,nSigmaITSpr);
3402  Double_t nSigmaTPCpr=-999.;
3403  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,4,nSigmaTPCpr);
3404  Double_t nSigmaTOFpr=-999.;
3405  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,4,nSigmaTOFpr);
3406 
3407  Double_t nSigmaITSpi=-999.;
3408  cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,2,nSigmaITSpi);
3409  Double_t nSigmaTPCpi=-999.;
3410  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,2,nSigmaTPCpi);
3411  Double_t nSigmaTOFpi=-999.;
3412  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,2,nSigmaTOFpi);
3413 
3414  Double_t nSigmaITSka=-999.;
3415  cutsAnal->GetPidHF()->GetnSigmaITS(bachelor,3,nSigmaITSka);
3416  Double_t nSigmaTPCka=-999.;
3417  cutsAnal->GetPidHF()->GetnSigmaTPC(bachelor,3,nSigmaTPCka);
3418  Double_t nSigmaTOFka=-999.;
3419  cutsAnal->GetPidHF()->GetnSigmaTOF(bachelor,3,nSigmaTOFka);
3420 
3421 
3422  Int_t flagToCheckCandidate = 1*(TMath::Abs(invmassK0S-mk0sPDG)<=0.050);
3423  flagToCheckCandidate+=2*((TMath::Abs(invmassLambdaBar-mLPDG)<=0.050) && (bachelor->Charge()<0));
3424  flagToCheckCandidate+=4*((TMath::Abs(invmassLambda-mLPDG)<=0.050) && (bachelor->Charge()>0));
3425  flagToCheckCandidate+=8*((TMath::Abs(invmassLambdaBar-mLPDG)<=0.050) && (bachelor->Charge()>0));
3426  flagToCheckCandidate+=16*((TMath::Abs(invmassLambda-mLPDG)<=0.050) && (bachelor->Charge()<0));
3427 
3428  fCandidateVariables[ 0] = fUseMCInfo+isLcByMC; // 0: real data; 1: bkg; 2: Lc->K0S+p; 3: Lc->LambdaBar+pbar; 5: Lc->Lambda+p; 9: D+->K0S+pi; 17: Ds+->K0S+K; 33: K*+->K0S+pi; 65: K*+->K0S+K
3429  fCandidateVariables[ 1] = fUseMCInfo+isV0ByMC; // 0: real data; 1: bkg; 2: K0S->pi+pi; 3: LambdaBar->pbar+pi+; 5: Lambda->p+pi-
3430  fCandidateVariables[ 2] = isBachelorSelected;
3431  fCandidateVariables[ 3] = areV0daughtersSelected;
3432  fCandidateVariables[ 4] = flagToCheckCandidate;
3433  fCandidateVariables[ 5] = invmassLc;
3434  fCandidateVariables[ 6] = invmassLc2Lpi;
3435  fCandidateVariables[ 7] = part->InvMass2Prongs(0,1,211,310); // D+ -> pi+ K0S
3436  fCandidateVariables[ 8] = part->InvMass2Prongs(0,1,321,310); // D+S -> K+ K0S
3437  fCandidateVariables[ 9] = invmassK0S;
3438  fCandidateVariables[10] = invmassLambda;
3439  fCandidateVariables[11] = invmassLambdaBar;
3440  fCandidateVariables[12] = v0part->InvMass2Prongs(0,1,11,11);
3441  fCandidateVariables[13] = part->GetDCA();
3442  fCandidateVariables[14] = dcaV0ptp;
3443  fCandidateVariables[15] = part->Getd0Prong(0);
3444  fCandidateVariables[16] = part->Getd0Prong(1);
3445  fCandidateVariables[17] = v0part->Getd0Prong(0);
3446  fCandidateVariables[18] = v0part->Getd0Prong(1);
3447  fCandidateVariables[19] = part->CosPointingAngle();
3449  fCandidateVariables[21] = v0part->RadiusSecVtx();
3450  fCandidateVariables[22] = nSigmaITSpr;
3451  fCandidateVariables[23] = nSigmaITSpi;
3452  fCandidateVariables[24] = nSigmaITSka;
3453  fCandidateVariables[25] = nSigmaTPCpr;
3454  fCandidateVariables[26] = nSigmaTPCpi;
3455  fCandidateVariables[27] = nSigmaTPCka;
3456  fCandidateVariables[28] = nSigmaTOFpr;
3457  fCandidateVariables[29] = nSigmaTOFpi;
3458  fCandidateVariables[30] = nSigmaTOFka;
3459  fCandidateVariables[31] = part->Y(4122);
3460  fCandidateVariables[32] = bachelor->Eta();
3461  fCandidateVariables[33] = v0pos->Eta();
3462  fCandidateVariables[34] = v0neg->Eta();
3463  fCandidateVariables[35] = part->P();
3464  fCandidateVariables[36] = part->Pt();
3465  fCandidateVariables[37] = v0part->P();
3466  fCandidateVariables[38] = v0part->Pt();
3467  fCandidateVariables[39] = bachelor->P();
3468  fCandidateVariables[40] = bachelor->Pt();
3469  fCandidateVariables[41] = v0pos->P();
3470  fCandidateVariables[42] = v0pos->Pt();
3471  fCandidateVariables[43] = v0neg->P();
3472  fCandidateVariables[44] = v0neg->Pt();
3473  fCandidateVariables[45] = part->DecayLength();
3474  fCandidateVariables[46] = part->DecayLengthV0();
3477  fCandidateVariables[49] = part->DecayLengthXY();
3478  fCandidateVariables[50] = part->DecayLengthXYV0();
3483 
3484  Double_t dcaForLc=0.;
3485  if (fAdditionalChecks) {
3486  Double_t xVtxLc=0, yVtxLc=0, zVtxLc=0;
3487  Double_t xLcMC=0,yLcMC=0,zLcMC=0;
3488  Double_t pxVtxBachelor=0, pyVtxBachelor=0, pzVtxBachelor=0;
3489  dcaForLc = PropagateToDCA(v0part,bachelor,fBzkG, xVtxLc, yVtxLc, zVtxLc, pxVtxBachelor, pyVtxBachelor, pzVtxBachelor);
3490  if (isLc) {
3491  Int_t pdgCand0 = 4122;
3492  Int_t pdgDgLctoV0bachelor0[2]={2212,310};
3493  Int_t pdgDgV0toDaughters0[2]={211,211};
3494  Int_t mcLabel0 = part->MatchToMC(pdgCand0,pdgDgLctoV0bachelor0[1],pdgDgLctoV0bachelor0,pdgDgV0toDaughters0,mcArray,kTRUE);
3495  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel0));
3496  if(partLc){
3497  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3498  if(partLcDaug0){
3499  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3500  }
3501  }
3502  } else if (isLc2LBarpi || isLc2Lpi) {
3503  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel));
3504  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3505  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3506  } else if (isDp2K0Spi) {
3507  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel2));
3508  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3509  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3510  } else if (isDs2K0SK) {
3511  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel3));
3512  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3513  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3514  } else if (isKstar12K0Spi) {
3515  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel4));
3516  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3517  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3518  } else if (isKstar22K0Spi) {
3519  AliAODMCParticle *partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(mcLabel5));
3520  AliAODMCParticle *partLcDaug0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(partLc->GetDaughter(0)));
3521  xLcMC=partLcDaug0->Xv(), yLcMC=partLcDaug0->Yv(), zLcMC=partLcDaug0->Zv();
3522  }
3523 
3524  fCandidateVariables[75]=part->GetSecVtxX();
3525  fCandidateVariables[76]=part->GetSecVtxY();
3526  fCandidateVariables[77]=part->GetSecVtxZ();
3527  fCandidateVariables[78]=xVtxLc;
3528  fCandidateVariables[79]=yVtxLc;
3529  fCandidateVariables[80]=zVtxLc;
3530  fCandidateVariables[81]=xLcMC;
3531  fCandidateVariables[82]=yLcMC;
3532  fCandidateVariables[83]=zLcMC;
3533  fCandidateVariables[84]=bachelor->Px();
3534  fCandidateVariables[85]=bachelor->Py();
3535  fCandidateVariables[86]=pxVtxBachelor;
3536  fCandidateVariables[87]=pyVtxBachelor;
3537  fCandidateVariables[88]=pzVtxBachelor;
3538  fCandidateVariables[89]=v0part->Px();
3539  fCandidateVariables[90]=v0part->Py();
3540  fCandidateVariables[91]=v0part->Pz();
3541  fCandidateVariables[92]=fVtx1->GetX();
3542  fCandidateVariables[93]=fVtx1->GetY();
3543  fCandidateVariables[94]=fVtx1->GetZ();
3544  }
3545 
3546  fCandidateVariables[55]=dcaForLc;
3547 
3548  fCandidateVariables[56]=part->CosThetaStar(0,4122,2212,310);
3549  fCandidateVariables[57]=part->CosThetaStar(1,4122,2212,310);
3550  fCandidateVariables[58]=v0part->Eta();
3551  fCandidateVariables[59]=v0part->Y(310);
3552  fCandidateVariables[60]=bachelor->Charge();
3553  fCandidateVariables[61]=isMCparticleInFiducialAcceptance;
3554 
3555  fCandidateVariables[62] = part->InvMass2Prongs(0,1,211,310); // Kstar( 892)+ -> pi+K0S
3556  fCandidateVariables[63] = part->InvMass2Prongs(0,1,321,310); // Kstar(1430)+ -> pi+K0S
3557 
3558  fCandidateVariables[64]=-1;
3559  fCandidateVariables[65]=-1;
3560  fCandidateVariables[66]=-1;
3561  fCandidateVariables[67]=-1;
3562  fCandidateVariables[68]=-1;
3563  if (fUseMCInfo) {
3564  if (bachelor->GetLabel()!=-1) {
3565  AliAODMCParticle *partBachelor = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(bachelor->GetLabel())));
3566  if(partBachelor) fCandidateVariables[64]=partBachelor->GetPdgCode();
3567  }
3568  if (bachelor->GetLabel()!=-1 &&
3569  v0pos->GetLabel()!=-1 &&
3570  v0neg->GetLabel()!=-1) {
3571  const Int_t ndg=3;
3572  Int_t dgLabels[ndg]={TMath::Abs(bachelor->GetLabel()),
3573  TMath::Abs(v0pos->GetLabel()),
3574  TMath::Abs(v0neg->GetLabel())};
3575  Int_t ndgCk=0;
3576  Int_t *pdgDg=0;
3577  Int_t absLabelMother=-1;
3578  Int_t nDauCand=-1;
3580  dgLabels,ndg,ndgCk,pdgDg,absLabelMother,nDauCand);
3581  }
3582  if (v0pos->GetLabel()!=-1) {
3583  AliAODMCParticle *part1 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0pos->GetLabel())));
3584  if(part1) fCandidateVariables[66]=part1->GetPdgCode();
3585  }
3586  if (v0neg->GetLabel()!=-1) {
3587  AliAODMCParticle *part2 = dynamic_cast<AliAODMCParticle*>(mcArray->At(TMath::Abs(v0neg->GetLabel())));
3588  if(part2) fCandidateVariables[67]=part2->GetPdgCode();
3589  }
3590  if (v0pos->GetLabel()!=-1 &&
3591  v0neg->GetLabel()!=-1) {
3592  const Int_t ndg=2;
3593  Int_t dgLabels[ndg]={TMath::Abs(v0pos->GetLabel()),
3594  TMath::Abs(v0neg->GetLabel())};
3595  Int_t ndgCk=0;
3596  Int_t *pdgDg=0;
3597  Int_t absLabelMother=-1;
3598  Int_t nDauCand=-1;
3600  dgLabels,ndg,ndgCk,pdgDg,absLabelMother,nDauCand);
3601  }
3602  }
3603 
3604  AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
3605  AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
3606  AliPIDResponse *pidResponse=inputHandler->GetPIDResponse();
3607  fCandidateVariables[69]=pidResponse->GetTOFResponse().GetStartTimeMask(bachelor->P());
3608 
3609  AliPIDCombined *objectPIDCombined=new AliPIDCombined;
3610  objectPIDCombined->SetDefaultTPCPriors();
3611  objectPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
3612 
3613  Double_t probTPCTOF[AliPID::kSPECIES]={-1.};
3614  UInt_t detUsed = objectPIDCombined->ComputeProbabilities(bachelor, pidResponse, probTPCTOF);
3615 
3616  Double_t probProton = -1.;
3617  // Double_t probPion = -1.;
3618  // Double_t probKaon = -1.;
3619  if (detUsed == (UInt_t)objectPIDCombined->GetDetectorMask() ) {
3620  AliDebug(2, Form("We have found the detector mask for TOF + TPC: probProton will be set to %f", probTPCTOF[AliPID::kProton]));
3621  probProton = probTPCTOF[AliPID::kProton];
3622  // probPion = probTPCTOF[AliPID::kPion];
3623  // probKaon = probTPCTOF[AliPID::kKaon];
3624  }
3625  else { // if you don't have both TOF and TPC, try only TPC
3626  objectPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC);
3627  AliDebug(2, "We did not find the detector mask for TOF + TPC, let's see only TPC");
3628  detUsed = objectPIDCombined->ComputeProbabilities(bachelor, pidResponse, probTPCTOF);
3629  AliDebug(2,Form(" detUsed (TPC case) = %d", detUsed));
3630  if (detUsed == (UInt_t)objectPIDCombined->GetDetectorMask()) {
3631  probProton = probTPCTOF[AliPID::kProton];
3632  // probPion = probTPCTOF[AliPID::kPion];
3633  // probKaon = probTPCTOF[AliPID::kKaon];
3634  AliDebug(2, Form("TPC only worked: probProton will be set to %f", probTPCTOF[AliPID::kProton]));
3635  }
3636  else {
3637  AliDebug(2, "Only TPC did not work...");
3638  }
3639  // resetting mask to ask for both TPC+TOF
3640  objectPIDCombined->SetDetectorMask(AliPIDResponse::kDetTPC+AliPIDResponse::kDetTOF);
3641  }
3642  AliDebug(2, Form("probProton = %f", probProton));
3643 
3644  // now we get the TPC and TOF single PID probabilities (only for Proton, or the tree will explode :) )
3645  Double_t probProtonTPC = -1.;
3646  Double_t probProtonTOF = -1.;
3647  Double_t pidTPC[AliPID::kSPECIES]={-1.};
3648  Double_t pidTOF[AliPID::kSPECIES]={-1.};
3649  Int_t respTPC = pidResponse->ComputePIDProbability(AliPIDResponse::kDetTPC, bachelor, AliPID::kSPECIES, pidTPC);
3650  Int_t respTOF = pidResponse->ComputePIDProbability(AliPIDResponse::kDetTOF, bachelor, AliPID::kSPECIES, pidTOF);
3651  if (respTPC == AliPIDResponse::kDetPidOk) probProtonTPC = pidTPC[AliPID::kProton];
3652  if (respTOF == AliPIDResponse::kDetPidOk) probProtonTOF = pidTOF[AliPID::kProton];
3653 
3654  fCandidateVariables[70]=probProton;
3655  fCandidateVariables[71]=probProtonTPC;
3656  fCandidateVariables[72]=probProtonTOF;
3657 
3658  fCandidateVariables[73]=checkLcOrigin;
3659 
3660  fCandidateVariables[74]=v0part->QtProng();
3661 
3662  delete objectPIDCombined;
3663 
3664  fVariablesTree->Fill();
3665 
3666  return;
3667 }
3668 
3669 //-------------------------------------------------------------------------------
3671  //
3673  //
3674 
3675  const char* nameoutput = GetOutputSlot(4)->GetContainer()->GetName();
3676  fVariablesTree = new TTree(nameoutput,"Candidates variables tree");
3677  Int_t nVar = 75;
3678  if (fAdditionalChecks) nVar = 95;
3680  TString * fCandidateVariableNames = new TString[nVar];
3681  fCandidateVariableNames[ 0]="isLcByMC";
3682  fCandidateVariableNames[ 1]="isV0ByMC";
3683  fCandidateVariableNames[ 2]="flagToCheckBachelor";
3684  fCandidateVariableNames[ 3]="flagToCheckV0daughters";
3685  fCandidateVariableNames[ 4]="flagToCheckCandidate";
3686  fCandidateVariableNames[ 5]="massLc2K0Sp";
3687  fCandidateVariableNames[ 6]="massLc2Lambdapi";
3688  fCandidateVariableNames[ 7]="massD2K0Spi"; // D+ -> pi+ K0S
3689  fCandidateVariableNames[ 8]="massDS2K0SK"; // D+S -> K+ K0S
3690  fCandidateVariableNames[ 9]="massK0S";
3691  fCandidateVariableNames[10]="massLambda";
3692  fCandidateVariableNames[11]="massLambdaBar";
3693  fCandidateVariableNames[12]="massGamma";
3694  fCandidateVariableNames[13]="dcaLcptp"; // DCA Lc prong-to-prong
3695  fCandidateVariableNames[14]="dcaV0ptp";
3696  fCandidateVariableNames[15]="tImpParBach";
3697  fCandidateVariableNames[16]="tImpParV0";
3698  fCandidateVariableNames[17]="dcaV0postoPV";
3699  fCandidateVariableNames[18]="dcaV0negtoPV";
3700  fCandidateVariableNames[19]="cosPALc";
3701  fCandidateVariableNames[20]="cosPAK0S";
3702  fCandidateVariableNames[21]="rhoV0";
3703  fCandidateVariableNames[22]="nSigmaITSpr";
3704  fCandidateVariableNames[23]="nSigmaITSpi";
3705  fCandidateVariableNames[24]="nSigmaITSka";
3706  fCandidateVariableNames[25]="nSigmaTPCpr";
3707  fCandidateVariableNames[26]="nSigmaTPCpi";
3708  fCandidateVariableNames[27]="nSigmaTPCka";
3709  fCandidateVariableNames[28]="nSigmaTOFpr";
3710  fCandidateVariableNames[29]="nSigmaTOFpi";
3711  fCandidateVariableNames[30]="nSigmaTOFka";
3712  fCandidateVariableNames[31]="yLc";
3713  fCandidateVariableNames[32]="etaBach"; // etaBachelor
3714  fCandidateVariableNames[33]="etaV0pos"; // etaV0pos
3715  fCandidateVariableNames[34]="etaV0neg"; // etaV0neg
3716  fCandidateVariableNames[35]="LcP"; // @ DCA
3717  fCandidateVariableNames[36]="LcPt"; // @ DCA
3718  fCandidateVariableNames[37]="v0P"; // @ V0 DCA
3719  fCandidateVariableNames[38]="v0Pt"; // @ V0 DCA
3720  fCandidateVariableNames[39]="bachelorP"; // @ prim vtx
3721  fCandidateVariableNames[40]="bachelorPt"; // @ prim vtx
3722  fCandidateVariableNames[41]="V0positiveP"; // @ prim vtx
3723  fCandidateVariableNames[42]="V0positivePt"; // @ prim vtx
3724  fCandidateVariableNames[43]="V0negativeP"; // @ prim vtx
3725  fCandidateVariableNames[44]="V0negativePt"; // @ prim vtx
3726  fCandidateVariableNames[45]="decayLengthLc";
3727  fCandidateVariableNames[46]="decayLengthV0";
3728  fCandidateVariableNames[47]="cosPALcXY"; // cosPA XY x Lc
3729  fCandidateVariableNames[48]="cosPAV0XY"; // cosPA XY x V0
3730  fCandidateVariableNames[49]="decayLengthLcXY"; // decay length XY x Lc
3731  fCandidateVariableNames[50]="decayLengthV0XY"; // decay length XY x V0
3732  fCandidateVariableNames[51]="normalizedDecayLengthLc"; // normalized decay length x Lc
3733  fCandidateVariableNames[52]="normalizedDecayLengthV0"; // normalized decay length x V0
3734  fCandidateVariableNames[53]="normalizedDecayLengthXYLc"; // normalized decay length XY x Lc
3735  fCandidateVariableNames[54]="normalizedDecayLengthXYV0"; // normalized decay length XY x V0
3736  fCandidateVariableNames[55]="newLcDCA";
3737 
3738  fCandidateVariableNames[56]="cosThetaStarBachelor";
3739  fCandidateVariableNames[57]="cosThetaStarV0";
3740  fCandidateVariableNames[58]="etaV0";
3741  fCandidateVariableNames[59]="yV0";
3742  fCandidateVariableNames[60]="bachelorCharge";
3743  fCandidateVariableNames[61]="isMCparticleInFiducialAcceptance";
3744 
3745  fCandidateVariableNames[62]="massKstar12K0Spi"; // Kstar( 892)+ -> pi+ K0S
3746  fCandidateVariableNames[63]="massKstar22K0Spi"; // Kstar(1430)+ -> pi+ K0S
3747  fCandidateVariableNames[64]="pdgBachelor"; // pdg MC bachelor
3748  fCandidateVariableNames[65]="pdgCandidate"; // pdg MC candidate recovered via new method
3749  fCandidateVariableNames[66]="pdgV0pos"; // pdg MC V0 positive
3750  fCandidateVariableNames[67]="pdgV0neg"; // pdg MC V0 negative
3751  fCandidateVariableNames[68]="pdgV0Candidate"; // pdg MC V0candidate recovered via new method
3752  fCandidateVariableNames[69]="startTimeMask"; // start time mask
3753 
3754  fCandidateVariableNames[70]="combinedProtonProb";
3755  fCandidateVariableNames[71]="TPCProtonProb";
3756  fCandidateVariableNames[72]="TOFProtonProb";
3757  fCandidateVariableNames[73]="checkLcOrigin";
3758 
3759  fCandidateVariableNames[74]="qtProng0V0";
3760 
3761  if (fAdditionalChecks) {
3762  fCandidateVariableNames[75]="xVtxLcBad";
3763  fCandidateVariableNames[76]="yVtxLcBad";
3764  fCandidateVariableNames[77]="zVtxLcBad";
3765  fCandidateVariableNames[78]="xVtxLcGood";
3766  fCandidateVariableNames[79]="yVtxLcGood";
3767  fCandidateVariableNames[80]="zVtxLcGood";
3768  fCandidateVariableNames[81]="xVtxLcMC";
3769  fCandidateVariableNames[82]="yVtxLcMC";
3770  fCandidateVariableNames[83]="zVtxLcMC";
3771  fCandidateVariableNames[84]="pxVtxBachelorBad";
3772  fCandidateVariableNames[85]="pyVtxBachelorBad";
3773  fCandidateVariableNames[86]="pxVtxBachelorGood";
3774  fCandidateVariableNames[87]="pyVtxBachelorGood";
3775  fCandidateVariableNames[88]="pzVtxBachelorGood";
3776  fCandidateVariableNames[89]="pxVtxV0";
3777  fCandidateVariableNames[90]="pyVtxV0";
3778  fCandidateVariableNames[91]="pzVtxV0";
3779  fCandidateVariableNames[92]="xPvtx";
3780  fCandidateVariableNames[93]="yPvtx";
3781  fCandidateVariableNames[94]="zPvtx";
3782  }
3783 
3784  for (Int_t ivar=0; ivar<nVar; ivar++) {
3785  fVariablesTree->Branch(fCandidateVariableNames[ivar].Data(),&fCandidateVariables[ivar],Form("%s/f",fCandidateVariableNames[ivar].Data()));
3786  }
3787 
3788  return;
3789 }
3790 
3791 //__________________________________________________________________________
3793  //
3795  //
3796 
3797  fCEvents = new TH1F("fCEvents","conter",20,0,20);
3798  fCEvents->SetStats(kTRUE);
3799  fCEvents->GetXaxis()->SetBinLabel(1,"X1");
3800  fCEvents->GetXaxis()->SetBinLabel(2,"Analyzed events");
3801  fCEvents->GetXaxis()->SetBinLabel(3,"AliAODVertex exists");
3802  fCEvents->GetXaxis()->SetBinLabel(4,"CascadesHF exists");
3803  fCEvents->GetXaxis()->SetBinLabel(5,"MCarray exists");
3804  fCEvents->GetXaxis()->SetBinLabel(6,"MCheader exists");
3805  fCEvents->GetXaxis()->SetBinLabel(7,"GetNContributors()>0");
3806  fCEvents->GetXaxis()->SetBinLabel(8,"IsEventSelected");
3807  fCEvents->GetXaxis()->SetBinLabel(9,"triggerClass!=CINT1");
3808  fCEvents->GetXaxis()->SetBinLabel(10,"triggerMask!=kAnyINT");
3809  fCEvents->GetXaxis()->SetBinLabel(11,"triggerMask!=kAny");
3810  fCEvents->GetXaxis()->SetBinLabel(12,"vtxTitle.Contains(Z)");
3811  fCEvents->GetXaxis()->SetBinLabel(13,"vtxTitle.Contains(3D)");
3812  fCEvents->GetXaxis()->SetBinLabel(14,"vtxTitle.Doesn'tContain(Z-3D)");
3813  fCEvents->GetXaxis()->SetBinLabel(15,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
3814  fCEvents->GetXaxis()->SetBinLabel(16,"!IsEventSelected");
3815  fCEvents->GetXaxis()->SetBinLabel(17,"triggerMask!=kAnyINT || triggerClass!=CINT1");
3816  fCEvents->GetXaxis()->SetBinLabel(18,Form("zVtxMC<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
3817  fCEvents->GetXaxis()->SetBinLabel(19,"Re-Fill Fail");
3818  fCEvents->GetXaxis()->SetBinLabel(20,"AOD Mismatch");
3819  //fCEvents->GetXaxis()->SetTitle("");
3820  fCEvents->GetYaxis()->SetTitle("counts");
3821 
3822  fOutput->Add(fCEvents);
3823  TString fillthis="";
3824 
3825  if (fUseMCInfo && fAdditionalChecks) {
3826  fillthis="histMcStatLc";
3827  TH1F* mcStatisticLc = new TH1F(fillthis.Data(),"#Lambda_{c} generated and their decays",21,-10.5,10.5);
3828  fOutput->Add(mcStatisticLc);
3829  }
3830 
3831  //fillthis="histopionV0SigmaVspTOF";
3832  //TH2F *hpionV0SigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3833  fillthis="histoprotonBachSigmaVspTOF";
3834  TH2F *hprotonBachSigmaVspTOF=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3835 
3836  //fOutput->Add(hpionV0SigmaVspTOF);
3837  fOutput->Add(hprotonBachSigmaVspTOF);
3838 
3839  //fillthis="histopionV0SigmaVspTPC";
3840  //TH2F *hpionV0SigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3841  fillthis="histoprotonBachSigmaVspTPC";
3842  TH2F *hprotonBachSigmaVspTPC=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3843 
3844  //fOutput->Add(hpionV0SigmaVspTPC);
3845  fOutput->Add(hprotonBachSigmaVspTPC);
3846 
3847  if (fUseMCInfo) {
3848 
3849  //fillthis="histopionV0SigmaVspTOFsgn";
3850  //TH2F *hpionV0SigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3851  fillthis="histoprotonBachSigmaVspTOFsgn";
3852  TH2F *hprotonBachSigmaVspTOFsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3853 
3854  //fOutput->Add(hpionV0SigmaVspTOFsgn);
3855  fOutput->Add(hprotonBachSigmaVspTOFsgn);
3856 
3857  //fillthis="histopionV0SigmaVspTPCsgn";
3858  //TH2F *hpionV0SigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3859  fillthis="histoprotonBachSigmaVspTPCsgn";
3860  TH2F *hprotonBachSigmaVspTPCsgn=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3861 
3862  //fOutput->Add(hpionV0SigmaVspTPCsgn);
3863  fOutput->Add(hprotonBachSigmaVspTPCsgn);
3864 
3865 
3866  //fillthis="histopionV0SigmaVspTOFbkg";
3867  //TH2F *hpionV0SigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3868  fillthis="histoprotonBachSigmaVspTOFbkg";
3869  TH2F *hprotonBachSigmaVspTOFbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3870 
3871  //fOutput->Add(hpionV0SigmaVspTOFbkg);
3872  fOutput->Add(hprotonBachSigmaVspTOFbkg);
3873 
3874  //fillthis="histopionV0SigmaVspTPCbkg";
3875  //TH2F *hpionV0SigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3876  fillthis="histoprotonBachSigmaVspTPCbkg";
3877  TH2F *hprotonBachSigmaVspTPCbkg=new TH2F(fillthis.Data(),fillthis.Data(),300,0.,30.,100,-5.,5.);
3878 
3879  //fOutput->Add(hpionV0SigmaVspTPCbkg);
3880  fOutput->Add(hprotonBachSigmaVspTPCbkg);
3881 
3882  }
3883 
3884  if (fAdditionalChecks) {
3885 
3886  TH1F *hZ2 = new TH1F("hZ2","",100,-50.,50.);
3887  fOutput->Add(hZ2);
3888  TH1F *hZ3 = new TH1F("hZ3","",100,-50.,50.);
3889  fOutput->Add(hZ3);
3890  TH1F *hZ4 = new TH1F("hZ4","",100,-50.,50.);
3891  fOutput->Add(hZ4);
3892  TH1F *hZ5 = new TH1F("hZ5","",100,-50.,50.);
3893  fOutput->Add(hZ5);
3894  TH1F *hZ6 = new TH1F("hZ6","",100,-50.,50.);
3895  fOutput->Add(hZ6);
3896  TH1F *hZ7 = new TH1F("hZ7","",100,-50.,50.);
3897  fOutput->Add(hZ7);
3898  TH1F *hZ8 = new TH1F("hZ8","",100,-50.,50.);
3899  fOutput->Add(hZ8);
3900  TH1F *hZ9 = new TH1F("hZ9","",100,-50.,50.);
3901  fOutput->Add(hZ9);
3902  TH1F *hZ10 = new TH1F("hZ10","",100,-50.,50.);
3903  fOutput->Add(hZ10);
3904  TH1F *hZ11 = new TH1F("hZ11","",100,-50.,50.);
3905  fOutput->Add(hZ11);
3906  TH1F *hZ12 = new TH1F("hZ12","",100,-50.,50.);
3907  fOutput->Add(hZ12);
3908  TH1F *hZ13 = new TH1F("hZ13","",100,-50.,50.);
3909  fOutput->Add(hZ13);
3910  TH1F *hZ14 = new TH1F("hZ14","",100,-50.,50.);
3911  fOutput->Add(hZ14);
3912  TH1F *hZ15 = new TH1F("hZ15","",100,-50.,50.);
3913  fOutput->Add(hZ15);
3914  TH1F *hZ16 = new TH1F("hZ16","",100,-50.,50.);
3915  fOutput->Add(hZ16);
3916  }
3917 
3918  TH1F *hCandidateSelection = new TH1F("hCandidateSelection","",10,-0.5,9.5);
3919  hCandidateSelection->GetXaxis()->SetBinLabel(1,"IsEventSelected");
3920  hCandidateSelection->GetXaxis()->SetBinLabel(2,"IsSecondaryVtx");
3921  hCandidateSelection->GetXaxis()->SetBinLabel(3,"V0toPosNeg");
3922  hCandidateSelection->GetXaxis()->SetBinLabel(4,"offlineV0");
3923  hCandidateSelection->GetXaxis()->SetBinLabel(5,"isInFiducialAcceptance");
3924  hCandidateSelection->GetXaxis()->SetBinLabel(6,"analCuts::kTracks");
3925  hCandidateSelection->GetXaxis()->SetBinLabel(7,"analCuts::kCandidateNoPID");
3926  hCandidateSelection->GetXaxis()->SetBinLabel(8,"analCuts::kPID");
3927  hCandidateSelection->GetXaxis()->SetBinLabel(9,"analCuts::kCandidateWithPID");
3928  hCandidateSelection->GetXaxis()->SetBinLabel(10,"analCuts::kAll");
3929  fOutput->Add(hCandidateSelection);
3930 
3931  TH1F *hEventsWithCandidates = new TH1F("hEventsWithCandidates","conter",11,5.5,16.5);
3932  hEventsWithCandidates->GetXaxis()->SetBinLabel(1,"GetNContributors()>0");
3933  hEventsWithCandidates->GetXaxis()->SetBinLabel(2,"IsEventSelected");
3934  hEventsWithCandidates->GetXaxis()->SetBinLabel(3,"triggerClass!=CINT1");
3935  hEventsWithCandidates->GetXaxis()->SetBinLabel(4,"triggerMask!=kAnyINT");
3936  hEventsWithCandidates->GetXaxis()->SetBinLabel(5,"triggerMask!=kAny");
3937  hEventsWithCandidates->GetXaxis()->SetBinLabel(6,"vtxTitle.Contains(Z)");
3938  hEventsWithCandidates->GetXaxis()->SetBinLabel(7,"vtxTitle.Contains(3D)");
3939  hEventsWithCandidates->GetXaxis()->SetBinLabel(8,"vtxTitle.Doesn'tContain(Z-3D)");
3940  hEventsWithCandidates->GetXaxis()->SetBinLabel(9,Form("zVtx<=%2.0fcm",fAnalCuts->GetMaxVtxZ()));
3941  hEventsWithCandidates->GetXaxis()->SetBinLabel(10,"!IsEventSelected");
3942  hEventsWithCandidates->GetXaxis()->SetBinLabel(11,"triggerMask!=kAnyINT || triggerClass!=CINT1");
3943  fOutput->Add(hEventsWithCandidates);
3944 
3945  if (fAdditionalChecks) {
3946 
3947  TH1F *hZ6a = new TH1F("hZ6a","",100,-50.,50.);
3948  fOutput->Add(hZ6a);
3949  TH1F *hZ7a = new TH1F("hZ7a","",100,-50.,50.);
3950  fOutput->Add(hZ7a);
3951  TH1F *hZ8a = new TH1F("hZ8a","",100,-50.,50.);
3952  fOutput->Add(hZ8a);
3953  TH1F *hZ9a = new TH1F("hZ9a","",100,-50.,50.);
3954  fOutput->Add(hZ9a);
3955  TH1F *hZ10a = new TH1F("hZ10a","",100,-50.,50.);
3956  fOutput->Add(hZ10a);
3957  TH1F *hZ11a = new TH1F("hZ11a","",100,-50.,50.);
3958  fOutput->Add(hZ11a);
3959  TH1F *hZ12a = new TH1F("hZ12a","",100,-50.,50.);
3960  fOutput->Add(hZ12a);
3961  TH1F *hZ13a = new TH1F("hZ13a","",100,-50.,50.);
3962  fOutput->Add(hZ13a);
3963  TH1F *hZ14a = new TH1F("hZ14a","",100,-50.,50.);
3964  fOutput->Add(hZ14a);
3965  TH1F *hZ15a = new TH1F("hZ15a","",100,-50.,50.);
3966  fOutput->Add(hZ15a);
3967  TH1F *hZ16a = new TH1F("hZ16a","",100,-50.,50.);
3968  fOutput->Add(hZ16a);
3969  }
3970 
3971  TH1F *hSwitchOnCandidates1 = new TH1F("hSwitchOnCandidates1","",15,-7.5,7.5);
3972  fOutput->Add(hSwitchOnCandidates1);
3973  TH1F *hSwitchOnCandidates2 = new TH1F("hSwitchOnCandidates2","",15,-7.5,7.5);
3974  fOutput->Add(hSwitchOnCandidates2);
3975  TH1F *hSwitchOnCandidates3 = new TH1F("hSwitchOnCandidates3","",15,-7.5,7.5);
3976  fOutput->Add(hSwitchOnCandidates3);
3977  TH1F *hSwitchOnCandidates4 = new TH1F("hSwitchOnCandidates4","",15,-7.5,7.5);
3978  fOutput->Add(hSwitchOnCandidates4);
3979 
3980  return;
3981 }
3982 
3983 //________________________________________________________________________
3985  //
3986  // This is to fill analysis histograms
3987  //
3988 
3989  TString fillthis="";
3990 
3991  Bool_t isBachelorID = (((cutsAnal->IsSelected(part,AliRDHFCuts::kPID))&(AliRDHFCutsLctoV0::kLcToK0Spr))==(AliRDHFCutsLctoV0::kLcToK0Spr)); // ID x bachelor
3992 
3993  Bool_t areCutsUsingPID = cutsAnal->GetIsUsePID();
3994  cutsAnal->SetUsePID(kFALSE);
3995 
3996  Double_t invmassLc = part->InvMassLctoK0sP();
3997  Double_t lambdacpt = part->Pt();
3998 
3999  AliAODTrack *bachelor = (AliAODTrack*)part->GetBachelor();
4000  Double_t momBach = bachelor->P();
4001  Double_t ptBach = bachelor->Pt();
4002 
4003  AliAODv0 *v0part = (AliAODv0*)part->Getv0();
4004  Double_t momK0S = v0part->P();
4005  Double_t ptK0S = v0part->Pt();
4006  //Double_t dcaV0ptp = v0part->GetDCA();
4007  Double_t invmassK0S = v0part->MassK0Short();
4008 
4009  AliAODTrack *v0pos = (AliAODTrack*)part->Getv0PositiveTrack();
4010  Double_t ptV0pos = v0pos->Pt();
4011  AliAODTrack *v0neg = (AliAODTrack*)part->Getv0NegativeTrack();
4012  Double_t ptV0neg = v0neg->Pt();
4013 
4014  if (!appendthis.Contains("SgnC") && !appendthis.Contains("SgnB") && !appendthis.Contains("SgnNoQ")) {
4015  fillthis="histpK0Svsp"+appendthis;
4016  //cout << fillthis << endl;
4018  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(momBach,momK0S);
4019  if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(momBach,momK0S);
4020  }
4021  }
4022 
4023  fillthis="histLcMassByK0S"+appendthis;
4024  //cout << fillthis << endl;
4026  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
4027  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(invmassLc,lambdacpt);
4028  }
4029 
4030  if(fFillSubSampleHist && appendthis=="Offline"){
4031  fillthis="histLcMassByK0SSubSample"+appendthis;
4033  Double_t contsp[3];contsp[0]=invmassLc;contsp[1]=lambdacpt;contsp[2]=(Double_t)(fEventCounter%24);
4034  if (isBachelorID)((THnSparse*)(fOutputPIDBach->FindObject(fillthis)))->Fill(contsp);
4035  }
4036  }
4037 
4038  if (!appendthis.Contains("SgnC") && !appendthis.Contains("SgnB") && !appendthis.Contains("SgnNoQ")) {
4039  fillthis="histK0SMass"+appendthis;
4040  // cout << fillthis << endl;
4041  cutsAnal->SetExcludedCut(2);
4043  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,invmassK0S);
4044  if (isBachelorID) ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,invmassK0S);
4045  }
4046  cutsAnal->SetExcludedCut(-1);
4047  }
4048 
4049  fillthis="histptK0S"+appendthis;
4050  //cout << fillthis << endl;
4051  cutsAnal->SetExcludedCut(15);
4053  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptK0S);
4054  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptK0S);
4055  }
4056 
4057  fillthis="histptP"+appendthis;
4058  //cout << fillthis << endl;
4059  cutsAnal->SetExcludedCut(4);
4061  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptBach);
4062  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptBach);
4063  }
4064 
4065  fillthis="histptPip"+appendthis;
4066  //cout << fillthis << endl;
4067  cutsAnal->SetExcludedCut(5);
4069  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptV0pos);
4070  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptV0pos);
4071  }
4072 
4073  fillthis="histptPim"+appendthis;
4074  //cout << fillthis << endl;
4075  cutsAnal->SetExcludedCut(6);
4077  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,ptV0neg);
4078  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,ptV0neg);
4079  }
4080 
4081  if (!appendthis.Contains("SgnC") && !appendthis.Contains("SgnB") && !appendthis.Contains("SgnNoQ")) {
4082  fillthis="histLambdaMass"+appendthis;
4083  // cout << fillthis << endl;
4084  cutsAnal->SetExcludedCut(13);
4086  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassLambda());
4087  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassLambda());
4088  }
4089 
4090  fillthis="histLambdaBarMass"+appendthis;
4091  // cout << fillthis << endl;
4092  cutsAnal->SetExcludedCut(13);
4094  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassAntiLambda());
4095  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->MassAntiLambda());
4096  }
4097 
4098  fillthis="histGammaMass"+appendthis;
4099  // cout << fillthis << endl;
4100  cutsAnal->SetExcludedCut(14);
4102  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,v0part->InvMass2Prongs(0,1,11,11));
4103  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,v0part->InvMass2Prongs(0,1,11,11));
4104  }
4105  }
4106 
4107  fillthis="histD0K0S"+appendthis;
4108  //cout << fillthis << endl;
4109  cutsAnal->SetExcludedCut(11);
4111  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(1));
4112  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(1));
4113  }
4114 
4115  fillthis="histD0P"+appendthis;
4116  //cout << fillthis << endl;
4117  cutsAnal->SetExcludedCut(10);
4119  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(0));
4120  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->Getd0Prong(0));
4121  }
4122 
4123  fillthis="histCosPAK0S"+appendthis;
4124  //cout << fillthis << endl;
4125  cutsAnal->SetExcludedCut(9);
4127  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,part->CosV0PointingAngle());
4128  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,part->CosV0PointingAngle());
4129  }
4130 
4131  fillthis="histCosThetaProtonCMS"+appendthis;
4132  //cout << fillthis << endl;
4133  cutsAnal->SetExcludedCut(16);
4135  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,cutsAnal->GetProtonEmissionAngleCMS(part));
4136  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,cutsAnal->GetProtonEmissionAngleCMS(part));
4137  }
4138 
4139  fillthis="histResignedD0"+appendthis;
4140  //cout << fillthis << endl;
4141  cutsAnal->SetExcludedCut(18);
4143  ((TH2F*)(fOutputAll->FindObject(fillthis)))->Fill(lambdacpt,cutsAnal->GetReSignedd0(part));
4144  if (isBachelorID)((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(lambdacpt,cutsAnal->GetReSignedd0(part));
4145  }
4146 
4147  cutsAnal->SetExcludedCut(-1);
4148 
4149  cutsAnal->SetUsePID(areCutsUsingPID);
4150 
4151  return;
4152 }
4153 //---------------------------
4155  Double_t &xVtxLc, Double_t &yVtxLc, Double_t &zVtxLc,
4156  Double_t &pxVtxBachelor, Double_t &pyVtxBachelor, Double_t &pzVtxBachelor) {
4157  //--------------------------------------------------------------------
4160  //--------------------------------------------------------------------
4161 
4162  // Get AliExternalTrackParam out of the AliAODTracks
4163  Double_t xyz[3], pxpypz[3], cv[21]; Short_t sign;
4164  bachelor->PxPyPz(pxpypz);
4165  bachelor->XvYvZv(xyz);
4166  bachelor->GetCovarianceXYZPxPyPz(cv);
4167  sign=bachelor->Charge();
4168  AliExternalTrackParam *t = new AliExternalTrackParam(xyz,pxpypz,cv,sign);
4169 
4170  Double_t alpha=t->GetAlpha(), cs1=TMath::Cos(alpha), sn1=TMath::Sin(alpha);
4171  //Double_t alpha = GetAlpha(xyz,pxpypz), cs1=TMath::Cos(alpha), sn1=TMath::Sin(alpha);
4172 
4173  // position and momentum of bachelor
4174  Double_t x1=xyz[0], y1=xyz[1], z1=xyz[2];
4175  Double_t px1=pxpypz[0], py1=pxpypz[1], pz1=pxpypz[2];
4176 
4177  // position and momentum of V0
4178  Double_t x2=v->DecayVertexV0X(),
4179  y2=v->DecayVertexV0Y(),
4180  z2=v->DecayVertexV0Z();
4181  Double_t px2=v->Px(),
4182  py2=v->Py(),
4183  pz2=v->Pz();
4184 
4185  /*
4186  AliAODTrack *trackP = (AliAODTrack*) v->GetDaughter(0);
4187  //Double_t pxpypzP[3]; trackP->PxPyPz(pxpypzP);
4188  //Double_t xyzP[3]; trackP->XvYvZv(xyzP);
4189  Double_t cvP[21]; trackP->GetCovarianceXYZPxPyPz(cvP);
4190  //Short_t signP=trackP->Charge();
4191  //AliExternalTrackParam *tP = new AliExternalTrackParam(xyzP,pxpypzP,cvP,signP);
4192 
4193  // Get AliExternalTrackParam out of the AliAODTrack
4194  AliAODTrack *trackN = (AliAODTrack*) v->GetDaughter(1);
4195  //Double_t pxpypzN[3]; trackN->PxPyPz(pxpypzN);
4196  //Double_t xyzN[3]; trackN->XvYvZv(xyzN);
4197  Double_t cvN[21]; trackN->GetCovarianceXYZPxPyPz(cvN);
4198  //Short_t signN=trackN->Charge();
4199  //AliExternalTrackParam *tN = new AliExternalTrackParam(xyzN,pxpypzN,cvN,signN);
4200 
4201  Double_t xyzV0[3]={x2,y2,z2};
4202  Double_t pxpypzV0[3]={px2,py2,pz2};
4203  Double_t cvV0[21]; for (Int_t ii=0; ii<21; ii++) cvV0[ii]=cvP[ii]+cvN[ii];
4204  AliNeutralTrackParam *trackV0 = new AliNeutralTrackParam(xyzV0,pxpypzV0,cvV0,0);
4205  */
4206 
4207  // calculation dca
4208  Double_t dd= Det(x2-x1,y2-y1,z2-z1,px1,py1,pz1,px2,py2,pz2);
4209  Double_t ax= Det(py1,pz1,py2,pz2);
4210  Double_t ay=-Det(px1,pz1,px2,pz2);
4211  Double_t az= Det(px1,py1,px2,py2);
4212 
4213  Double_t dca=TMath::Abs(dd)/TMath::Sqrt(ax*ax + ay*ay + az*az);
4214 
4215  // bachelor point @ the DCA
4216  Double_t t1 = Det(x2-x1,y2-y1,z2-z1,px2,py2,pz2,ax,ay,az)/
4217  Det(px1,py1,pz1,px2,py2,pz2,ax,ay,az);
4218  x1 += px1*t1; y1 += py1*t1; z1 += pz1*t1;
4219 
4220  //propagate track to the point of DCA
4221  Double_t rho1=x1*cs1 + y1*sn1;
4222  if (!t->PropagateTo(rho1,b)) {
4223  Error("PropagateToDCA","Propagation failed !");
4224  delete t; t=NULL;
4225  return 1.e+33;
4226  }
4227 
4228  Double_t pBachelorDCA[3]; t->GetPxPyPz(pBachelorDCA);
4229  pxVtxBachelor=pBachelorDCA[0], pyVtxBachelor=pBachelorDCA[1], pzVtxBachelor=pBachelorDCA[2];
4230 
4231  delete t; t=NULL;
4232 
4233  // V0 point @ the DCA
4234  Double_t t2 = Det(x1-x2,y1-y2,z1-z2,px1,py1,pz1,ax,ay,az)/
4235  Det(px2,py2,pz2,px1,py1,pz1,ax,ay,az);
4236  x2 += px2*t2; y2 += py2*t2; z2 += pz2*t2;
4237 
4238 
4239  // Lc decay vtx
4240  xVtxLc = 0.5*(x1+x2);
4241  yVtxLc = 0.5*(y1+y2);
4242  zVtxLc = 0.5*(z1+z2);
4243 
4244  return dca;
4245 
4246 }
4247 
4248 //---------------------------
4250 {
4251  //
4253  //
4254 
4255  Double_t alpha = 0.;
4256 
4257  const double kSafe = 1e-5;
4258  Double_t radPos2 = xyz[0]*xyz[0]+xyz[1]*xyz[1];
4259  Double_t radMax = 45.; // approximately ITS outer radius
4260  if (radPos2 < radMax*radMax) { // inside the ITS
4261  alpha = TMath::ATan2(pxpypz[1],pxpypz[0]);
4262  } else { // outside the ITS
4263  Float_t phiPos = TMath::Pi()+TMath::ATan2(-xyz[1], -xyz[0]);
4264  alpha =
4265  TMath::DegToRad()*(20*((((Int_t)(phiPos*TMath::RadToDeg()))/20))+10);
4266  }
4267 
4268  Double_t cs=TMath::Cos(alpha), sn=TMath::Sin(alpha);
4269  // protection: avoid alpha being too close to 0 or +-pi/2
4270  if (TMath::Abs(sn)<2*kSafe) {
4271  if (alpha>0) alpha += alpha< TMath::Pi()/2. ? 2*kSafe : -2*kSafe;
4272  else alpha += alpha>-TMath::Pi()/2. ? -2*kSafe : 2*kSafe;
4273  cs=TMath::Cos(alpha);
4274  sn=TMath::Sin(alpha);
4275  }
4276  else if (TMath::Abs(cs)<2*kSafe) {
4277  if (alpha>0) alpha += alpha> TMath::Pi()/2. ? 2*kSafe : -2*kSafe;
4278  else alpha += alpha>-TMath::Pi()/2. ? 2*kSafe : -2*kSafe;
4279  cs=TMath::Cos(alpha);
4280  sn=TMath::Sin(alpha);
4281  }
4282 
4283 
4284  return alpha;
4285 }
4286 
4287 //---------------------------
4289  Double_t a10, Double_t a11) const {
4290  //--------------------------------------------------------------------
4293  //--------------------------------------------------------------------
4294  return a00*a11 - a01*a10;
4295 }
4296 
4297 //---------------------------
4299  Double_t a10,Double_t a11,Double_t a12,
4300  Double_t a20,Double_t a21,Double_t a22) const {
4301  //--------------------------------------------------------------------
4304  //--------------------------------------------------------------------
4305  return a00*Det(a11,a12,a21,a22)-a01*Det(a10,a12,a20,a22)+a02*Det(a10,a11,a20,a21);
4306 }
4307 
4308 //----------------------------------------------------------------------------
4310  TClonesArray *mcArray)
4311 {
4312  //
4316  //
4317 
4318  AliAODv0 *theV0 = dynamic_cast<AliAODv0*>(candidate->Getv0()); // the V0
4319  AliVTrack *trk = dynamic_cast<AliVTrack*>(candidate->GetBachelor()); // the bachelor
4320  if (!trk || !theV0) return -1;
4321 
4322  if (trk->GetLabel()==-1) return -1;
4323  Int_t bachLabels = TMath::Abs(trk->GetLabel());
4324  AliAODMCParticle*bachelorMC = dynamic_cast<AliAODMCParticle*>(mcArray->At(bachLabels));
4325  if (!bachelorMC) return -1;
4326  if (TMath::Abs(bachelorMC->GetPdgCode())!=2212) return -1;
4327  Int_t indexMotherBach = bachelorMC->GetMother();
4328  if (indexMotherBach==-1) return -1;
4329 
4330  Int_t pdgDg2prong[2] = {211,211};
4331  Int_t lab2Prong = theV0->MatchToMC(310,mcArray,2,pdgDg2prong); // the V0
4332  if(lab2Prong<0) return -1;
4333  AliAODMCParticle*partK0S = dynamic_cast<AliAODMCParticle*>(mcArray->At(lab2Prong));
4334  if (!partK0S) return -1;
4335  Int_t indexMotherK0S = partK0S->GetMother();
4336  if (indexMotherK0S==-1) return -1;
4337  AliAODMCParticle*partK0 = dynamic_cast<AliAODMCParticle*>(mcArray->At(indexMotherK0S));
4338  if (!partK0) return -1;
4339  Int_t indexMotherK0 = partK0->GetMother();
4340  if (indexMotherK0==-1) return -1;
4341 
4342  if (indexMotherBach!=indexMotherK0) return -1; // p e K0S sono fratelli
4343 
4344  AliAODMCParticle*partLc = dynamic_cast<AliAODMCParticle*>(mcArray->At(indexMotherK0));
4345  if (!partLc) return -1;
4346  Int_t ndg2 = partLc->GetDaughter(1)-partLc->GetDaughter(0)+1;
4347  if (ndg2==2) return -1;
4348 
4349  TString stringaCheck = Form(">>>>>>>> %d -> ",partLc->GetPdgCode());
4350  for(Int_t ii=0; ii<ndg2; ii++) {
4351  AliAODMCParticle* partDau=(AliAODMCParticle*)(mcArray->At(partLc->GetDaughter(0)+ii));
4352  stringaCheck.Append(Form(" %d",partDau->GetPdgCode()));
4353  }
4354  //printf("%s \n",stringaCheck.Data());
4355 
4356  return indexMotherBach;
4357 
4358 }
4359 //--------------------------------------------------------------------------
4361  Int_t dgLabels[10],Int_t ndg,
4362  Int_t &ndgCk, Int_t *pdgDg, Int_t &absLabelMother, Int_t &nDauCand) const
4363 {
4369 
4370  Int_t lab=-1,labMother=-1,pdgMother=0;
4371  AliAODMCParticle *part=0;
4372  AliAODMCParticle *mother=0;
4373 
4374  // loop on daughter labels
4375  TArrayI **labelMother = new TArrayI*[ndg];
4376  for(Int_t i=0; i<ndg; i++) labelMother[i] = new TArrayI(0);
4377  for(Int_t i=0; i<ndg; i++) {
4378  lab = TMath::Abs(dgLabels[i]);
4379  if(lab<0) {
4380  AliDebug(2,Form("daughter with negative label %d",lab));
4381  delete [] labelMother;
4382  return 0;
4383  }
4384  part = (AliAODMCParticle*)mcArray->At(lab);
4385  if(!part) {
4386  AliDebug(2,"no MC particle");
4387  delete [] labelMother;
4388  return 0;
4389  }
4390 
4391  mother = part;
4392  while(mother->GetMother()>=0) {
4393  labMother=mother->GetMother();
4394  mother = (AliAODMCParticle*)mcArray->At(labMother);
4395  if(!mother) {
4396  AliDebug(2,"no MC mother particle");
4397  break;
4398  }
4399  pdgMother = TMath::Abs(mother->GetPdgCode());
4400  if (pdgMother<10 || (pdgMother>18 && pdgMother<111)) {
4401  break;
4402  }
4403  labelMother[i]->Set(labelMother[i]->GetSize()+1);
4404  labelMother[i]->AddAt(labMother,labelMother[i]->GetSize()-1);
4405  }
4406 
4407  } // end loop on daughters
4408 
4409 
4410  TString stringaCheck;
4411  for(Int_t i=0; i<ndg; i++) {
4412  AliAODMCParticle*part0 = (AliAODMCParticle*)mcArray->At(TMath::Abs(dgLabels[i]));
4413  stringaCheck.Append(Form("part[%d]->GetLabel()=%d(%d) | ",i,dgLabels[i],part0->GetPdgCode()));
4414  stringaCheck.Append(Form("labelMother[%d] = ",i));
4415  for (Int_t jj=0;jj<labelMother[i]->GetSize(); jj++)
4416  stringaCheck.Append(Form("%d, ",labelMother[i]->At(jj)));
4417  }
4418  AliDebug(2,Form("%s \n",stringaCheck.Data()));
4419  Int_t pdgToBeReturned=0;
4420 
4421  TString stringaCheck2;
4422  ndgCk=ndg;
4423  pdgDg = new Int_t[ndgCk];
4424  for (Int_t index=1; index<ndg; index++) {
4425  Bool_t found=kFALSE;
4426  for (Int_t jj=0;jj<labelMother[index]->GetSize(); jj++) {
4427  for (Int_t ii=0;ii<labelMother[0]->GetSize(); ii++) {
4428  if (labelMother[0]->At(ii)==labelMother[index]->At(jj) &&
4429  labelMother[0]->At(ii)!=0 && labelMother[0]->At(ii)!=1 && !found) {
4430  mother = (AliAODMCParticle*)mcArray->At(labelMother[0]->At(ii));
4431  pdgToBeReturned=mother->GetPdgCode();
4432  absLabelMother=labelMother[0]->At(ii);
4433  AliDebug(2,Form("FOUND label for the mother of this candidate: %d (PDG=%d)\n",labelMother[0]->At(ii),pdgToBeReturned));
4434  //mother->Print();
4435  nDauCand=mother->GetNDaughters();
4436  found = kTRUE;
4437  AliAODMCParticle *partMC = (AliAODMCParticle*)mcArray->At(dgLabels[0]);
4438  pdgDg[0]=partMC->GetPdgCode();
4439  partMC = (AliAODMCParticle*)mcArray->At(dgLabels[index]);
4440  pdgDg[index]=partMC->GetPdgCode();
4441  if (index==1) stringaCheck2.Append(Form("found daughters -> %d(%d)",dgLabels[0],pdgDg[0]));
4442  stringaCheck2.Append(Form(" %d(%d)",dgLabels[index],pdgDg[index]));
4443  break;
4444  }
4445  }
4446  if (found) break;
4447  }
4448  }
4449  stringaCheck2.Prepend(Form("Ecco quanto trovato: %d(%d) with %d daughters; ",absLabelMother,pdgToBeReturned,nDauCand));
4450  AliDebug(2,Form("%s \n",stringaCheck2.Data()));
4451 
4452  delete [] labelMother;
4453  delete [] pdgDg;
4454 
4455  return pdgToBeReturned;
4456 
4457 }
4458 
4460 {
4461 
4462  AliAODRecoCascadeHF *partCopy = new AliAODRecoCascadeHF(*part);
4463 
4464  Double_t px[2]={partCopy->PxProng(0),partCopy->PxProng(1)};
4465  Double_t py[2]={partCopy->PyProng(0),partCopy->PyProng(1)};
4466  Double_t pz[2]={partCopy->PzProng(0),partCopy->PzProng(1)};
4467 
4468  Double_t pt = partCopy->Pt();
4469  Int_t pdgD=4122;
4470  UInt_t pdgLc2pK0S[2]={2212,310};
4471  Double_t minv2 = partCopy->InvMass2(2,pdgLc2pK0S);
4472  Double_t mass=TMath::Sqrt(minv2);
4473  Double_t rapid = partCopy->Y(pdgD);
4474 
4475  TString fillthis;
4476 
4478  fillthis="hMassVsPtVsY"+appendthis;
4479  //cout << fillthis << endl;
4480  ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(mass,pt,rapid);
4481 
4482  fillthis="phiVSthetaVSpt"+appendthis;
4483  //cout << fillthis << endl;
4484  ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,part->Phi(),part->Theta());
4485  }
4486 
4487  Int_t nRotated=0;
4488  Double_t massRot=0;// calculated later only if candidate is acceptable
4489  // Double_t angleProngXY=TMath::ACos((px[0]*px[1]+py[0]*py[1])/TMath::Sqrt((px[0]*px[0]+py[0]*py[0])*(px[1]*px[1]+py[1]*py[1])));
4490  // Double_t ptOrig=pt;
4491  Double_t rotStep=(fMaxAngleForRot-fMinAngleForRot)/(fNRotations-1); // -1 is to ensure that the last rotation is done with angle=fMaxAngleForRot
4492 
4493  for(Int_t irot=0; irot<fNRotations; irot++){
4494  Double_t phirot=fMinAngleForRot+rotStep*irot;
4495  Double_t tmpx=px[0];
4496  Double_t tmpy=py[0];
4497  px[0]=tmpx*TMath::Cos(phirot)-tmpy*TMath::Sin(phirot);
4498  py[0]=tmpx*TMath::Sin(phirot)+tmpy*TMath::Cos(phirot);
4499  partCopy->SetPxPyPzProngs(2,px,py,pz);
4500  pt = partCopy->Pt();
4501  minv2 = partCopy->InvMass2(2,pdgLc2pK0S);
4502  massRot=TMath::Sqrt(minv2);
4503  rapid = partCopy->Y(pdgD);
4504  //if(minv2>fMinMass*fMinMass && minv2<fMaxMass*fMaxMass){
4505  if ( cuts->IsInFiducialAcceptance(pt,partCopy->Y(4122)) ) {
4507 
4508  fillthis="histLcMassByK0S"+appendthis;
4509  //cout << fillthis << endl;
4510  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(massRot,pt);
4511 
4512  fillthis="hMassVsPtVsYRot"+appendthis;
4513  //cout << fillthis << endl;
4514  ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(mass,pt,rapid);
4515 
4516  fillthis="phiVSthetaVSptRot"+appendthis;
4517  //cout << fillthis << endl;
4518  ((TH3F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,partCopy->Phi(),partCopy->Theta());
4519 
4520  fillthis="hDeltaMass"+appendthis;
4521  //cout << fillthis << endl;
4522  ((TH1F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(massRot-mass);
4523  //if(fFullAnalysis){
4524  //Double_t pointRot[5]={mass,massRot-mass,ptOrig,pt-ptOrig,angleProngXY};
4525  //fillthis="hDeltaMassFullAnalysis"+appendthis;
4527  //((THnSparse*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pointRot);
4528  //}
4529  nRotated++;
4530  //}
4531  }
4532 
4533  // fill additional histos for track-rotated candidates
4534  fillthis="histptK0S"+appendthis;
4535  //cout << fillthis << endl;
4536  cuts->SetExcludedCut(15);
4538  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,TMath::Sqrt(px[1]*px[1]+py[1]*py[1]));
4539  }
4540 
4541  fillthis="histptP"+appendthis;
4542  //cout << fillthis << endl;
4543  cuts->SetExcludedCut(4);
4545  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,TMath::Sqrt(px[0]*px[0]+py[0]*py[0]));
4546  }
4547 
4548  fillthis="histptPip"+appendthis;
4549  //cout << fillthis << endl;
4550  cuts->SetExcludedCut(5);
4552  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0PositiveTrack())->Pt());
4553  }
4554 
4555  fillthis="histptPim"+appendthis;
4556  //cout << fillthis << endl;
4557  cuts->SetExcludedCut(6);
4559  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0NegativeTrack())->Pt());
4560  }
4561 
4562  fillthis="histLambdaMass"+appendthis;
4563  //cout << fillthis << endl;
4564  cuts->SetExcludedCut(13);
4566  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->MassLambda());
4567  }
4568 
4569  fillthis="histLambdaBarMass"+appendthis;
4570  //cout << fillthis << endl;
4571  cuts->SetExcludedCut(13);
4573  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->MassAntiLambda());
4574  }
4575 
4576  fillthis="histGammaMass"+appendthis;
4577  //cout << fillthis << endl;
4578  cuts->SetExcludedCut(14);
4580  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,(partCopy->Getv0())->InvMass2Prongs(0,1,11,11));
4581  }
4582 
4583  fillthis="histCosPAK0S"+appendthis;
4584  //cout << fillthis << endl;
4585  cuts->SetExcludedCut(9);
4587  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,partCopy->CosV0PointingAngle());
4588  }
4589 
4590  fillthis="histCosThetaProtonCMS"+appendthis;
4591  //cout << fillthis << endl;
4592  cuts->SetExcludedCut(16);
4594  ((TH2F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(pt,cuts->GetProtonEmissionAngleCMS(partCopy));
4595  }
4596 
4597  fillthis="histResignedD0"+appendthis;
4598  //cout << fillthis << endl;
4599  cuts->SetExcludedCut(18);
4601  ((TH2F*)(fOutputPIDBach->FindObject(fillthis)))->Fill(pt,cuts->GetReSignedd0(partCopy));
4602  }
4603  cuts->SetExcludedCut(-1);
4604 
4605  } // isInFiducialAcceptance
4606 
4607  px[0]=tmpx;
4608  py[0]=tmpy;
4609  }
4610  fillthis="hNormRotated"+appendthis;
4611  //cout << fillthis << endl;
4612  ((TH1F*)(fOutputPIDBachTR->FindObject(fillthis)))->Fill(nRotated);
4613 
4614  delete partCopy;
4615 
4616  return;
4617 
4618 }
4619 
4620 //----------------------------------------------------
4622 {
4623  //
4624  // Define analysis histograms for SNG separated for origin (from c, from b and from no-quark)
4625  //
4626 
4627  if (!fUseMCInfo) return;
4628  if (!fCheckOrigin) return;
4629 
4630  Double_t mLcPDG = TDatabasePDG::Instance()->GetParticle(4122)->Mass();
4631  Double_t mK0SPDG = TDatabasePDG::Instance()->GetParticle(310)->Mass();
4632  Double_t mMinLambdaPDG = TDatabasePDG::Instance()->GetParticle(2212)->Mass()+
4633  TDatabasePDG::Instance()->GetParticle(211)->Mass();
4634 
4635  TString nameHistoSgnC=" ", nameHistoSgnB=" ", nameHistoSgnNoQ=" ";
4636  TString titleHistoSgnC=" ", titleHistoSgnB=" ", titleHistoSgnNoQ=" ";
4637 
4638  // pt(Lc)
4639  Double_t *binLimpTLc=new Double_t[11+1]; // 11 pT(Lc) bins
4640  binLimpTLc[ 0]= 0.;
4641  binLimpTLc[ 1]= 1.;
4642  binLimpTLc[ 2]= 2.;
4643  binLimpTLc[ 3]= 3.;
4644  binLimpTLc[ 4]= 4.;
4645  binLimpTLc[ 5]= 5.;
4646  binLimpTLc[ 6]= 6.;
4647  binLimpTLc[ 7]= 8.;
4648  binLimpTLc[ 8]=12.;
4649  binLimpTLc[ 9]=17.;
4650  binLimpTLc[10]=25.;
4651  binLimpTLc[11]=35.;
4652 
4653  // pt(prong)
4654  Double_t *binLimpTprong=new Double_t[41+1]; // 41 pT(prong) bins
4655  binLimpTprong[ 0]= 0.0;
4656  binLimpTprong[ 1]= 0.1;
4657  binLimpTprong[ 2]= 0.2;
4658  binLimpTprong[ 3]= 0.3;
4659  binLimpTprong[ 4]= 0.4;
4660  binLimpTprong[ 5]= 0.5;
4661  binLimpTprong[ 6]= 0.6;
4662  binLimpTprong[ 7]= 0.7;
4663  binLimpTprong[ 8]= 0.8;
4664  binLimpTprong[ 9]= 0.9;
4665  binLimpTprong[10]= 1.0;
4666  binLimpTprong[11]= 1.2;
4667  binLimpTprong[12]= 1.4;
4668  binLimpTprong[13]= 1.6;
4669  binLimpTprong[14]= 1.8;
4670  binLimpTprong[15]= 2.0;
4671  binLimpTprong[16]= 2.2;
4672  binLimpTprong[17]= 2.4;
4673  binLimpTprong[18]= 2.6;
4674  binLimpTprong[19]= 2.8;
4675  binLimpTprong[20]= 3.0;
4676  binLimpTprong[21]= 3.5;
4677  binLimpTprong[22]= 4.0;
4678  binLimpTprong[23]= 4.5;
4679  binLimpTprong[24]= 5.0;
4680  binLimpTprong[25]= 5.5;
4681  binLimpTprong[26]= 6.0;
4682  binLimpTprong[27]= 6.5;
4683  binLimpTprong[28]= 7.0;
4684  binLimpTprong[29]= 7.5;
4685  binLimpTprong[30]= 8.0;
4686  binLimpTprong[31]= 9.0;
4687  binLimpTprong[32]=10.0;
4688  binLimpTprong[33]=11.0;
4689  binLimpTprong[34]=12.0;
4690  binLimpTprong[35]=13.0;
4691  binLimpTprong[36]=14.0;
4692  binLimpTprong[37]=15.0;
4693  binLimpTprong[38]=20.0;
4694  binLimpTprong[39]=25.0;
4695  binLimpTprong[40]=30.0;
4696  binLimpTprong[41]=35.0;
4697 
4698  if (fUseOnTheFlyV0) {
4699 
4700  nameHistoSgnC="histLcMassByK0SSgnC";
4701  nameHistoSgnB="histLcMassByK0SSgnB";
4702  nameHistoSgnNoQ="histLcMassByK0SSgnNoQ";
4703  titleHistoSgnC="#Lambda_{c} #leftarrow c - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4704  titleHistoSgnB="#Lambda_{c} #leftarrow b - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4705  titleHistoSgnNoQ="#Lambda_{c} #leftarrow no quark - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4706  TH2F* spectrumLcMassByK0SSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4707  TH2F* spectrumLcMassByK0SSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4708  TH2F* spectrumLcMassByK0SSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4709 
4710  TH2F* allspectrumLcMassByK0SSgnC = (TH2F*)spectrumLcMassByK0SSgnC->Clone();
4711  TH2F* allspectrumLcMassByK0SSgnB = (TH2F*) spectrumLcMassByK0SSgnB->Clone();
4712  TH2F* allspectrumLcMassByK0SSgnNoQ = (TH2F*) spectrumLcMassByK0SSgnNoQ->Clone();
4713  TH2F* pidBachspectrumLcMassByK0SSgnC = (TH2F*)spectrumLcMassByK0SSgnC->Clone();
4714  TH2F* pidBachspectrumLcMassByK0SSgnB = (TH2F*) spectrumLcMassByK0SSgnB->Clone();
4715  TH2F* pidBachspectrumLcMassByK0SSgnNoQ = (TH2F*) spectrumLcMassByK0SSgnNoQ->Clone();
4716 
4717  fOutputAll->Add(allspectrumLcMassByK0SSgnC);
4718  fOutputAll->Add(allspectrumLcMassByK0SSgnB);
4719  fOutputAll->Add(allspectrumLcMassByK0SSgnNoQ);
4720  fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgnC);
4721  fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgnB);
4722  fOutputPIDBach->Add(pidBachspectrumLcMassByK0SSgnNoQ);
4723 
4724  nameHistoSgnC="histptK0SSgnC";
4725  nameHistoSgnB="histptK0SSgnB";
4726  nameHistoSgnNoQ="histptK0SSgnNoQ";
4727  titleHistoSgnC="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4728  titleHistoSgnB="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4729  titleHistoSgnNoQ="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4730  TH2F* ptK0SSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4731  TH2F* ptK0SSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4732  TH2F* ptK0SSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,41,binLimpTprong);
4733 
4734  nameHistoSgnC="histptPSgnC";
4735  nameHistoSgnB="histptPSgnB";
4736  nameHistoSgnNoQ="histptPSgnNoQ";
4737  titleHistoSgnC="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4738  titleHistoSgnB="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4739  titleHistoSgnNoQ="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4740  TH2F* ptPSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4741  TH2F* ptPSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4742  TH2F* ptPSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,41,binLimpTprong);
4743 
4744  nameHistoSgnC="histptPipSgnC";
4745  nameHistoSgnB="histptPipSgnB";
4746  nameHistoSgnNoQ="histptPipSgnNoQ";
4747  titleHistoSgnC="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4748  titleHistoSgnB="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4749  titleHistoSgnNoQ="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4750  TH2F* ptPiPSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4751  TH2F* ptPiPSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4752  TH2F* ptPiPSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4753 
4754  nameHistoSgnC="histptPimSgnC";
4755  nameHistoSgnB="histptPimSgnB";
4756  nameHistoSgnNoQ="histptPimSgnNoQ";
4757  titleHistoSgnC="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4758  titleHistoSgnB="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4759  titleHistoSgnNoQ="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4760  TH2F* ptPiMSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4761  TH2F* ptPiMSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4762  TH2F* ptPiMSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4763 
4764  nameHistoSgnC="histD0K0SSgnC";
4765  nameHistoSgnB="histD0K0SSgnB";
4766  nameHistoSgnNoQ="histD0K0SSgnNoQ";
4767  titleHistoSgnC="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4768  titleHistoSgnB="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4769  titleHistoSgnNoQ="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4770  TH2F* d0K0SSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,1000,-1.,1.);
4771  TH2F* d0K0SSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,1000,-1.,1.);
4772  TH2F* d0K0SSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,1000,-1.,1.);
4773 
4774  nameHistoSgnC="histD0PSgnC";
4775  nameHistoSgnB="histD0PSgnB";
4776  nameHistoSgnNoQ="histD0PSgnNoQ";
4777  titleHistoSgnC="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
4778  titleHistoSgnB="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
4779  titleHistoSgnNoQ="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
4780  TH2F* d0PSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,1000,-1.,1.);
4781  TH2F* d0PSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,1000,-1.,1.);
4782  TH2F* d0PSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,1000,-1.,1.);
4783 
4784  nameHistoSgnC="histCosPAK0SSgnC";
4785  nameHistoSgnB="histCosPAK0SSgnB";
4786  nameHistoSgnNoQ="histCosPAK0SSgnNoQ";
4787  titleHistoSgnC="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4788  titleHistoSgnB="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4789  titleHistoSgnNoQ="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4790  TH2F *cosPAK0SSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,0.99,1.);
4791  TH2F *cosPAK0SSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,0.99,1.);
4792  TH2F *cosPAK0SSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,0.99,1.);
4793 
4794  nameHistoSgnC="histCosThetaProtonCMSSgnC";
4795  nameHistoSgnB="histCosThetaProtonCMSSgnB";
4796  nameHistoSgnNoQ="histCosThetaProtonCMSSgnNoQ";
4797  titleHistoSgnC="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4798  titleHistoSgnB="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4799  titleHistoSgnNoQ="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
4800  TH2F *cosThePrSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,-1.,1.);
4801  TH2F *cosThePrSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,-1.,1.);
4802  TH2F *cosThePrSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,-1.,1.);
4803 
4804  nameHistoSgnC="histResignedD0SgnC";
4805  nameHistoSgnB="histResignedD0SgnB";
4806  nameHistoSgnNoQ="histResignedD0SgnNoQ";
4807  titleHistoSgnC="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
4808  titleHistoSgnB="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
4809  titleHistoSgnNoQ="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
4810  TH2F *resignedD0SgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,-0.1,0.1);
4811  TH2F *resignedD0SgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,-0.1,0.1);
4812  TH2F *resignedD0SgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,-0.1,0.1);
4813 
4814  TH2F* allptK0SSgnC = (TH2F*)ptK0SSgnC->Clone();
4815  TH2F* allptK0SSgnB = (TH2F*)ptK0SSgnB->Clone();
4816  TH2F* allptK0SSgnNoQ = (TH2F*)ptK0SSgnNoQ->Clone();
4817  TH2F* allptPSgnC = (TH2F*)ptPSgnC->Clone();
4818  TH2F* allptPSgnB = (TH2F*)ptPSgnB->Clone();
4819  TH2F* allptPSgnNoQ = (TH2F*)ptPSgnNoQ->Clone();
4820  TH2F* allptPiPSgnC = (TH2F*)ptPiPSgnC->Clone();
4821  TH2F* allptPiPSgnB = (TH2F*)ptPiPSgnB->Clone();
4822  TH2F* allptPiPSgnNoQ = (TH2F*)ptPiPSgnNoQ->Clone();
4823  TH2F* allptPiMSgnC = (TH2F*)ptPiMSgnC->Clone();
4824  TH2F* allptPiMSgnB = (TH2F*)ptPiMSgnB->Clone();
4825  TH2F* allptPiMSgnNoQ = (TH2F*)ptPiMSgnNoQ->Clone();
4826  TH2F* alld0K0SSgnC = (TH2F*)d0K0SSgnC->Clone();
4827  TH2F* alld0K0SSgnB = (TH2F*)d0K0SSgnB->Clone();
4828  TH2F* alld0K0SSgnNoQ = (TH2F*)d0K0SSgnNoQ->Clone();
4829  TH2F* alld0PSgnC = (TH2F*)d0PSgnC->Clone();
4830  TH2F* alld0PSgnB = (TH2F*)d0PSgnB->Clone();
4831  TH2F* alld0PSgnNoQ = (TH2F*)d0PSgnNoQ->Clone();
4832  TH2F* allcosPAK0SSgnC = (TH2F*)cosPAK0SSgnC->Clone();
4833  TH2F* allcosPAK0SSgnB = (TH2F*)cosPAK0SSgnB->Clone();
4834  TH2F* allcosPAK0SSgnNoQ = (TH2F*)cosPAK0SSgnNoQ->Clone();
4835  TH2F* allcosThePrSgnC = (TH2F*)cosThePrSgnC->Clone();
4836  TH2F* allcosThePrSgnB = (TH2F*)cosThePrSgnB->Clone();
4837  TH2F* allcosThePrSgnNoQ = (TH2F*)cosThePrSgnNoQ->Clone();
4838  TH2F* allresignedD0SgnC = (TH2F*)resignedD0SgnC->Clone();
4839  TH2F* allresignedD0SgnB = (TH2F*)resignedD0SgnB->Clone();
4840  TH2F* allresignedD0SgnNoQ = (TH2F*)resignedD0SgnNoQ->Clone();
4841 
4842  TH2F* pidptK0SSgnC = (TH2F*)ptK0SSgnC->Clone();
4843  TH2F* pidptK0SSgnB = (TH2F*)ptK0SSgnB->Clone();
4844  TH2F* pidptK0SSgnNoQ = (TH2F*)ptK0SSgnNoQ->Clone();
4845  TH2F* pidptPSgnC = (TH2F*)ptPSgnC->Clone();
4846  TH2F* pidptPSgnB = (TH2F*)ptPSgnB->Clone();
4847  TH2F* pidptPSgnNoQ = (TH2F*)ptPSgnNoQ->Clone();
4848  TH2F* pidptPiPSgnC = (TH2F*)ptPiPSgnC->Clone();
4849  TH2F* pidptPiPSgnB = (TH2F*)ptPiPSgnB->Clone();
4850  TH2F* pidptPiPSgnNoQ = (TH2F*)ptPiPSgnNoQ->Clone();
4851  TH2F* pidptPiMSgnC = (TH2F*)ptPiMSgnC->Clone();
4852  TH2F* pidptPiMSgnB = (TH2F*)ptPiMSgnB->Clone();
4853  TH2F* pidptPiMSgnNoQ = (TH2F*)ptPiMSgnNoQ->Clone();
4854  TH2F* pidd0K0SSgnC = (TH2F*)d0K0SSgnC->Clone();
4855  TH2F* pidd0K0SSgnB = (TH2F*)d0K0SSgnB->Clone();
4856  TH2F* pidd0K0SSgnNoQ = (TH2F*)d0K0SSgnNoQ->Clone();
4857  TH2F* pidd0PSgnC = (TH2F*)d0PSgnC->Clone();
4858  TH2F* pidd0PSgnB = (TH2F*)d0PSgnB->Clone();
4859  TH2F* pidd0PSgnNoQ = (TH2F*)d0PSgnNoQ->Clone();
4860  TH2F* pidcosPAK0SSgnC = (TH2F*)cosPAK0SSgnC->Clone();
4861  TH2F* pidcosPAK0SSgnB = (TH2F*)cosPAK0SSgnB->Clone();
4862  TH2F* pidcosPAK0SSgnNoQ = (TH2F*)cosPAK0SSgnNoQ->Clone();
4863  TH2F* pidcosThePrSgnC = (TH2F*)cosThePrSgnC->Clone();
4864  TH2F* pidcosThePrSgnB = (TH2F*)cosThePrSgnB->Clone();
4865  TH2F* pidcosThePrSgnNoQ = (TH2F*)cosThePrSgnNoQ->Clone();
4866  TH2F* pidresignedD0SgnC = (TH2F*)resignedD0SgnC->Clone();
4867  TH2F* pidresignedD0SgnB = (TH2F*)resignedD0SgnB->Clone();
4868  TH2F* pidresignedD0SgnNoQ = (TH2F*)resignedD0SgnNoQ->Clone();
4869 
4870  fOutputAll->Add(allptK0SSgnC);
4871  fOutputAll->Add(allptK0SSgnB);
4872  fOutputAll->Add(allptK0SSgnNoQ);
4873  fOutputAll->Add(allptPSgnC);
4874  fOutputAll->Add(allptPSgnB);
4875  fOutputAll->Add(allptPSgnNoQ);
4876  fOutputAll->Add(allptPiPSgnC);
4877  fOutputAll->Add(allptPiPSgnB);
4878  fOutputAll->Add(allptPiPSgnNoQ);
4879  fOutputAll->Add(allptPiMSgnC);
4880  fOutputAll->Add(allptPiMSgnB);
4881  fOutputAll->Add(allptPiMSgnNoQ);
4882  fOutputAll->Add(alld0K0SSgnC);
4883  fOutputAll->Add(alld0K0SSgnB);
4884  fOutputAll->Add(alld0K0SSgnNoQ);
4885  fOutputAll->Add(alld0PSgnC);
4886  fOutputAll->Add(alld0PSgnB);
4887  fOutputAll->Add(alld0PSgnNoQ);
4888  fOutputAll->Add(allcosPAK0SSgnC);
4889  fOutputAll->Add(allcosPAK0SSgnB);
4890  fOutputAll->Add(allcosPAK0SSgnNoQ);
4891  fOutputAll->Add(allcosThePrSgnC);
4892  fOutputAll->Add(allcosThePrSgnB);
4893  fOutputAll->Add(allcosThePrSgnNoQ);
4894  fOutputAll->Add(allresignedD0SgnC);
4895  fOutputAll->Add(allresignedD0SgnB);
4896  fOutputAll->Add(allresignedD0SgnNoQ);
4897 
4898  fOutputPIDBach->Add(pidptK0SSgnC);
4899  fOutputPIDBach->Add(pidptK0SSgnB);
4900  fOutputPIDBach->Add(pidptK0SSgnNoQ);
4901  fOutputPIDBach->Add(pidptPSgnC);
4902  fOutputPIDBach->Add(pidptPSgnB);
4903  fOutputPIDBach->Add(pidptPSgnNoQ);
4904  fOutputPIDBach->Add(pidptPiPSgnC);
4905  fOutputPIDBach->Add(pidptPiPSgnB);
4906  fOutputPIDBach->Add(pidptPiPSgnNoQ);
4907  fOutputPIDBach->Add(pidptPiMSgnC);
4908  fOutputPIDBach->Add(pidptPiMSgnB);
4909  fOutputPIDBach->Add(pidptPiMSgnNoQ);
4910  fOutputPIDBach->Add(pidd0K0SSgnC);
4911  fOutputPIDBach->Add(pidd0K0SSgnB);
4912  fOutputPIDBach->Add(pidd0K0SSgnNoQ);
4913  fOutputPIDBach->Add(pidd0PSgnC);
4914  fOutputPIDBach->Add(pidd0PSgnB);
4915  fOutputPIDBach->Add(pidd0PSgnNoQ);
4916  fOutputPIDBach->Add(pidcosPAK0SSgnC);
4917  fOutputPIDBach->Add(pidcosPAK0SSgnB);
4918  fOutputPIDBach->Add(pidcosPAK0SSgnNoQ);
4919  fOutputPIDBach->Add(pidcosThePrSgnC);
4920  fOutputPIDBach->Add(pidcosThePrSgnB);
4921  fOutputPIDBach->Add(pidcosThePrSgnNoQ);
4922  fOutputPIDBach->Add(pidresignedD0SgnC);
4923  fOutputPIDBach->Add(pidresignedD0SgnB);
4924  fOutputPIDBach->Add(pidresignedD0SgnNoQ);
4925 
4926  }
4927 
4928  nameHistoSgnC="histLcMassByK0SOfflineSgnC";
4929  nameHistoSgnB="histLcMassByK0SOfflineSgnB";
4930  nameHistoSgnNoQ="histLcMassByK0SOfflineSgnNoQ";
4931  titleHistoSgnC="#Lambda_{c} #leftarrow c - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4932  titleHistoSgnB="#Lambda_{c} #leftarrow b - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4933  titleHistoSgnNoQ="#Lambda_{c} #leftarrow no quark - sgn: invariant mass (by K^{0}_{S}) vs p_{T} - MC; m_{inv}(p,K^{0}_{S}) [GeV/c^{2}]; p_{T}(#Lambda_{c}) [GeV/c]";
4934  TH2F* spectrumLcMassOfflineByK0SSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4935  TH2F* spectrumLcMassOfflineByK0SSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4936  TH2F* spectrumLcMassOfflineByK0SSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),1000,mLcPDG-0.250,mLcPDG+0.250,11,binLimpTLc);
4937 
4938  TH2F* allspectrumLcMassOfflineByK0SSgnC = (TH2F*)spectrumLcMassOfflineByK0SSgnC->Clone();
4939  TH2F* allspectrumLcMassOfflineByK0SSgnB = (TH2F*) spectrumLcMassOfflineByK0SSgnB->Clone();
4940  TH2F* allspectrumLcMassOfflineByK0SSgnNoQ = (TH2F*) spectrumLcMassOfflineByK0SSgnNoQ->Clone();
4941  TH2F* pidBachspectrumLcMassOfflineByK0SSgnC = (TH2F*)spectrumLcMassOfflineByK0SSgnC->Clone();
4942  TH2F* pidBachspectrumLcMassOfflineByK0SSgnB = (TH2F*) spectrumLcMassOfflineByK0SSgnB->Clone();
4943  TH2F* pidBachspectrumLcMassOfflineByK0SSgnNoQ = (TH2F*) spectrumLcMassOfflineByK0SSgnNoQ->Clone();
4944  fOutputAll->Add(allspectrumLcMassOfflineByK0SSgnC);
4945  fOutputAll->Add(allspectrumLcMassOfflineByK0SSgnB);
4946  fOutputAll->Add(allspectrumLcMassOfflineByK0SSgnNoQ);
4947  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgnC);
4948  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgnB);
4949  fOutputPIDBach->Add(pidBachspectrumLcMassOfflineByK0SSgnNoQ);
4950 
4951  nameHistoSgnC="histptK0SOfflineSgnC";
4952  nameHistoSgnB="histptK0SOfflineSgnB";
4953  nameHistoSgnNoQ="histptK0SOfflineSgnNoQ";
4954  titleHistoSgnC="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4955  titleHistoSgnB="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4956  titleHistoSgnNoQ="p_{T}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(K^{0}_{S}) [GeV/c]; Entries";
4957  TH2F* ptK0SOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4958  TH2F* ptK0SOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4959  TH2F* ptK0SOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,41,binLimpTprong);
4960 
4961  nameHistoSgnC="histptPOfflineSgnC";
4962  nameHistoSgnB="histptPOfflineSgnB";
4963  nameHistoSgnNoQ="histptPOfflineSgnNoQ";
4964  titleHistoSgnC="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4965  titleHistoSgnB="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4966  titleHistoSgnNoQ="p_{T}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(p) [GeV/c]; Entries";
4967  TH2F* ptPOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4968  TH2F* ptPOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4969  TH2F* ptPOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,41,binLimpTprong);
4970 
4971  nameHistoSgnC="histptPipOfflineSgnC";
4972  nameHistoSgnB="histptPipOfflineSgnB";
4973  nameHistoSgnNoQ="histptPipOfflineSgnNoQ";
4974  titleHistoSgnC="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4975  titleHistoSgnB="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4976  titleHistoSgnNoQ="p_{T}(#pi^{+}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{+}) [GeV/c]; Entries";
4977  TH2F* ptPiPOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4978  TH2F* ptPiPOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4979  TH2F* ptPiPOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4980 
4981  nameHistoSgnC="histptPimOfflineSgnC";
4982  nameHistoSgnB="histptPimOfflineSgnB";
4983  nameHistoSgnNoQ="histptPimOfflineSgnNoQ";
4984  titleHistoSgnC="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4985  titleHistoSgnB="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4986  titleHistoSgnNoQ="p_{T}(#pi^{-}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; p_{T}(#pi^{-}) [GeV/c]; Entries";
4987  TH2F* ptPiMOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,41,binLimpTprong);
4988  TH2F* ptPiMOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4989  TH2F* ptPiMOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnB.Data(),11,binLimpTLc,41,binLimpTprong);
4990 
4991  nameHistoSgnC="histD0K0SOfflineSgnC";
4992  nameHistoSgnB="histD0K0SOfflineSgnB";
4993  nameHistoSgnNoQ="histD0K0SOfflineSgnNoQ";
4994  titleHistoSgnC="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4995  titleHistoSgnB="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4996  titleHistoSgnNoQ="d_{0}(K^{0}_{S}) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(K^{0}_{S}) [#sigmas]; Entries";
4997  TH2F* d0K0SOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,1000,-1.,1.);
4998  TH2F* d0K0SOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,1000,-1.,1.);
4999  TH2F* d0K0SOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,1000,-1.,1.);
5000 
5001  nameHistoSgnC="histD0POfflineSgnC";
5002  nameHistoSgnB="histD0POfflineSgnB";
5003  nameHistoSgnNoQ="histD0POfflineSgnNoQ";
5004  titleHistoSgnC="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
5005  titleHistoSgnB="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
5006  titleHistoSgnNoQ="d_{0}(p) vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; d_{0}(p) [cm]; Entries";
5007  TH2F* d0POfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),11,binLimpTLc,1000,-1.,1.);
5008  TH2F* d0POfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),11,binLimpTLc,1000,-1.,1.);
5009  TH2F* d0POfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),11,binLimpTLc,1000,-1.,1.);
5010 
5011  nameHistoSgnC="histCosPAK0SOfflineSgnC";
5012  nameHistoSgnB="histCosPAK0SOfflineSgnB";
5013  nameHistoSgnNoQ="histCosPAK0SOfflineSgnNoQ";
5014  titleHistoSgnC="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5015  titleHistoSgnB="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5016  titleHistoSgnNoQ="K^{0}_{S} cosine of pointing angle wrt primary vertex vs p_{T}(#Lambda_{c}); p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5017  TH2F *cosPAK0SOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,0.99,1.);
5018  TH2F *cosPAK0SOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,0.99,1.);
5019  TH2F *cosPAK0SOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,0.99,1.);
5020 
5021  nameHistoSgnC="histCosThetaProtonCMSOfflineSgnC";
5022  nameHistoSgnB="histCosThetaProtonCMSOfflineSgnB";
5023  nameHistoSgnNoQ="histCosThetaProtonCMSOfflineSgnNoQ";
5024  titleHistoSgnC="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5025  titleHistoSgnB="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5026  titleHistoSgnNoQ="cosien of proton emission angle in Lc rest frame; p_{T}(#Lambda_{c}) [GeV/c]; cosine; Entries";
5027  TH2F *cosThePrOfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,-1.,1.);
5028  TH2F *cosThePrOfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,-1.,1.);
5029  TH2F *cosThePrOfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,-1.,1.);
5030 
5031  nameHistoSgnC="histResignedD0OfflineSgnC";
5032  nameHistoSgnB="histResignedD0OfflineSgnB";
5033  nameHistoSgnNoQ="histResignedD0OfflineSgnNoQ";
5034  titleHistoSgnC="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
5035  titleHistoSgnB="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
5036  titleHistoSgnNoQ="Proton d0 with different sign convention; p_{T}(#Lambda_{c}) [GeV/c]; d0 [cm]; Entries";
5037  TH2F *resignedD0OfflineSgnC = new TH2F(nameHistoSgnC.Data(),titleHistoSgnC.Data(),41,binLimpTprong,100,-0.1,0.1);
5038  TH2F *resignedD0OfflineSgnB = new TH2F(nameHistoSgnB.Data(),titleHistoSgnB.Data(),41,binLimpTprong,100,-0.1,0.1);
5039  TH2F *resignedD0OfflineSgnNoQ = new TH2F(nameHistoSgnNoQ.Data(),titleHistoSgnNoQ.Data(),41,binLimpTprong,100,-0.1,0.1);
5040 
5041  TH2F* allptK0SOfflineSgnC = (TH2F*)ptK0SOfflineSgnC->Clone();
5042  TH2F* allptK0SOfflineSgnB = (TH2F*)ptK0SOfflineSgnB->Clone();
5043  TH2F* allptK0SOfflineSgnNoQ = (TH2F*)ptK0SOfflineSgnNoQ->Clone();
5044  TH2F* allptPOfflineSgnC = (TH2F*)ptPOfflineSgnC->Clone();
5045  TH2F* allptPOfflineSgnB = (TH2F*)ptPOfflineSgnB->Clone();
5046  TH2F* allptPOfflineSgnNoQ = (TH2F*)ptPOfflineSgnNoQ->Clone();
5047  TH2F* allptPiPOfflineSgnC = (TH2F*)ptPiPOfflineSgnC->Clone();
5048  TH2F* allptPiPOfflineSgnB = (TH2F*)ptPiPOfflineSgnB->Clone();
5049  TH2F* allptPiPOfflineSgnNoQ = (TH2F*)ptPiPOfflineSgnNoQ->Clone();
5050  TH2F* allptPiMOfflineSgnC = (TH2F*)ptPiMOfflineSgnC->Clone();
5051  TH2F* allptPiMOfflineSgnB = (TH2F*)ptPiMOfflineSgnB->Clone();
5052  TH2F* allptPiMOfflineSgnNoQ = (TH2F*)ptPiMOfflineSgnNoQ->Clone();
5053  TH2F* alld0K0SOfflineSgnC = (TH2F*)d0K0SOfflineSgnC->Clone();
5054  TH2F* alld0K0SOfflineSgnB = (TH2F*)d0K0SOfflineSgnB->Clone();
5055  TH2F* alld0K0SOfflineSgnNoQ = (TH2F*)d0K0SOfflineSgnNoQ->Clone();
5056  TH2F* alld0POfflineSgnC = (TH2F*)d0POfflineSgnC->Clone();
5057  TH2F* alld0POfflineSgnB = (TH2F*)d0POfflineSgnB->Clone();
5058  TH2F* alld0POfflineSgnNoQ = (TH2F*)d0POfflineSgnNoQ->Clone();
5059  TH2F* allcosPAK0SOfflineSgnC = (TH2F*)cosPAK0SOfflineSgnC->Clone();
5060  TH2F* allcosPAK0SOfflineSgnB = (TH2F*)cosPAK0SOfflineSgnB->Clone();
5061  TH2F* allcosPAK0SOfflineSgnNoQ = (TH2F*)cosPAK0SOfflineSgnNoQ->Clone();
5062  TH2F* allcosThePrOfflineSgnC = (TH2F*)cosThePrOfflineSgnC->Clone();
5063  TH2F* allcosThePrOfflineSgnB = (TH2F*)cosThePrOfflineSgnB->Clone();
5064  TH2F* allcosThePrOfflineSgnNoQ = (TH2F*)cosThePrOfflineSgnNoQ->Clone();
5065  TH2F* allresignedD0OfflineSgnC = (TH2F*)resignedD0OfflineSgnC->Clone();
5066  TH2F* allresignedD0OfflineSgnB = (TH2F*)resignedD0OfflineSgnB->Clone();
5067  TH2F* allresignedD0OfflineSgnNoQ = (TH2F*)resignedD0OfflineSgnNoQ->Clone();
5068 
5069  TH2F* pidptK0SOfflineSgnC = (TH2F*)ptK0SOfflineSgnC->Clone();
5070  TH2F* pidptK0SOfflineSgnB = (TH2F*)ptK0SOfflineSgnB->Clone();
5071  TH2F* pidptK0SOfflineSgnNoQ = (TH2F*)ptK0SOfflineSgnNoQ->Clone();
5072  TH2F* pidptPOfflineSgnC = (TH2F*)ptPOfflineSgnC->Clone();
5073  TH2F* pidptPOfflineSgnB = (TH2F*)ptPOfflineSgnB->Clone();
5074  TH2F* pidptPOfflineSgnNoQ = (TH2F*)ptPOfflineSgnNoQ->Clone();
5075  TH2F* pidptPiPOfflineSgnC = (TH2F*)ptPiPOfflineSgnC->Clone();
5076  TH2F* pidptPiPOfflineSgnB = (TH2F*)ptPiPOfflineSgnB->Clone();
5077  TH2F* pidptPiPOfflineSgnNoQ = (TH2F*)ptPiPOfflineSgnNoQ->Clone();
5078  TH2F* pidptPiMOfflineSgnC = (TH2F*)ptPiMOfflineSgnC->Clone();
5079  TH2F* pidptPiMOfflineSgnB = (TH2F*)ptPiMOfflineSgnB->Clone();
5080  TH2F* pidptPiMOfflineSgnNoQ = (TH2F*)ptPiMOfflineSgnNoQ->Clone();
5081  TH2F* pidd0K0SOfflineSgnC = (TH2F*)d0K0SOfflineSgnC->Clone();
5082  TH2F* pidd0K0SOfflineSgnB = (TH2F*)d0K0SOfflineSgnB->Clone();
5083  TH2F* pidd0K0SOfflineSgnNoQ = (TH2F*)d0K0SOfflineSgnNoQ->Clone();
5084  TH2F* pidd0POfflineSgnC = (TH2F*)d0POfflineSgnC->Clone();
5085  TH2F* pidd0POfflineSgnB = (TH2F*)d0POfflineSgnB->Clone();
5086  TH2F* pidd0POfflineSgnNoQ = (TH2F*)d0POfflineSgnNoQ->Clone();
5087  TH2F* pidcosPAK0SOfflineSgnC = (TH2F*)cosPAK0SOfflineSgnC->Clone();
5088  TH2F* pidcosPAK0SOfflineSgnB = (TH2F*)cosPAK0SOfflineSgnB->Clone();
5089  TH2F* pidcosPAK0SOfflineSgnNoQ = (TH2F*)cosPAK0SOfflineSgnNoQ->Clone();
5090  TH2F* pidcosThePrOfflineSgnC = (TH2F*)cosThePrOfflineSgnC->Clone();
5091  TH2F* pidcosThePrOfflineSgnB = (TH2F*)cosThePrOfflineSgnB->Clone();
5092  TH2F* pidcosThePrOfflineSgnNoQ = (TH2F*)cosThePrOfflineSgnNoQ->Clone();
5093  TH2F* pidresignedD0OfflineSgnC = (TH2F*)resignedD0OfflineSgnC->Clone();
5094  TH2F* pidresignedD0OfflineSgnB = (TH2F*)resignedD0OfflineSgnB->Clone();
5095  TH2F* pidresignedD0OfflineSgnNoQ = (TH2F*)resignedD0OfflineSgnNoQ->Clone();
5096 
5097  fOutputAll->Add(allptK0SOfflineSgnC);
5098  fOutputAll->Add(allptK0SOfflineSgnB);
5099  fOutputAll->Add(allptK0SOfflineSgnNoQ);
5100  fOutputAll->Add(allptPOfflineSgnC);
5101  fOutputAll->Add(allptPOfflineSgnB);
5102  fOutputAll->Add(allptPOfflineSgnNoQ);
5103  fOutputAll->Add(allptPiPOfflineSgnC);
5104  fOutputAll->Add(allptPiPOfflineSgnB);
5105  fOutputAll->Add(allptPiPOfflineSgnNoQ);
5106  fOutputAll->Add(allptPiMOfflineSgnC);
5107  fOutputAll->Add(allptPiMOfflineSgnB);
5108  fOutputAll->Add(allptPiMOfflineSgnNoQ);
5109  fOutputAll->Add(alld0K0SOfflineSgnC);
5110  fOutputAll->Add(alld0K0SOfflineSgnB);
5111  fOutputAll->Add(alld0K0SOfflineSgnNoQ);
5112  fOutputAll->Add(alld0POfflineSgnC);
5113  fOutputAll->Add(alld0POfflineSgnB);
5114  fOutputAll->Add(alld0POfflineSgnNoQ);
5115  fOutputAll->Add(allcosPAK0SOfflineSgnC);
5116  fOutputAll->Add(allcosPAK0SOfflineSgnB);
5117  fOutputAll->Add(allcosPAK0SOfflineSgnNoQ);
5118  fOutputAll->Add(allcosThePrOfflineSgnC);
5119  fOutputAll->Add(allcosThePrOfflineSgnB);
5120  fOutputAll->Add(allcosThePrOfflineSgnNoQ);
5121  fOutputAll->Add(allresignedD0OfflineSgnC);
5122  fOutputAll->Add(allresignedD0OfflineSgnB);
5123  fOutputAll->Add(allresignedD0OfflineSgnNoQ);
5124 
5125  fOutputPIDBach->Add(pidptK0SOfflineSgnC);
5126  fOutputPIDBach->Add(pidptK0SOfflineSgnB);
5127  fOutputPIDBach->Add(pidptK0SOfflineSgnNoQ);
5128  fOutputPIDBach->Add(pidptPOfflineSgnC);
5129  fOutputPIDBach->Add(pidptPOfflineSgnB);
5130  fOutputPIDBach->Add(pidptPOfflineSgnNoQ);
5131  fOutputPIDBach->Add(pidptPiPOfflineSgnC);
5132  fOutputPIDBach->Add(pidptPiPOfflineSgnB);
5133  fOutputPIDBach->Add(pidptPiPOfflineSgnNoQ);
5134  fOutputPIDBach->Add(pidptPiMOfflineSgnC);
5135  fOutputPIDBach->Add(pidptPiMOfflineSgnB);
5136  fOutputPIDBach->Add(pidptPiMOfflineSgnNoQ);
5137  fOutputPIDBach->Add(pidd0K0SOfflineSgnC);
5138  fOutputPIDBach->Add(pidd0K0SOfflineSgnB);
5139  fOutputPIDBach->Add(pidd0K0SOfflineSgnNoQ);
5140  fOutputPIDBach->Add(pidd0POfflineSgnC);
5141  fOutputPIDBach->Add(pidd0POfflineSgnB);
5142  fOutputPIDBach->Add(pidd0POfflineSgnNoQ);
5143  fOutputPIDBach->Add(pidcosPAK0SOfflineSgnC);
5144  fOutputPIDBach->Add(pidcosPAK0SOfflineSgnB);
5145  fOutputPIDBach->Add(pidcosPAK0SOfflineSgnNoQ);
5146  fOutputPIDBach->Add(pidcosThePrOfflineSgnC);
5147  fOutputPIDBach->Add(pidcosThePrOfflineSgnB);
5148  fOutputPIDBach->Add(pidcosThePrOfflineSgnNoQ);
5149  fOutputPIDBach->Add(pidresignedD0OfflineSgnC);
5150  fOutputPIDBach->Add(pidresignedD0OfflineSgnB);
5151  fOutputPIDBach->Add(pidresignedD0OfflineSgnNoQ);
5152 
5153 }
Double_t NormalizedDecayLengthXY() const
Double_t NormalizedDecayLength() const
void FillTheTree(AliAODRecoCascadeHF *part, AliRDHFCutsLctoV0 *cutsAnal, TClonesArray *mcArray, Int_t isLc, Int_t originLc)
Definition: