AliPhysics  b97afa6 (b97afa6)
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
AliCFTaskVertexingHF.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  * appear 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 //-----------------------------------------------------------------------
17 // Class for HF corrections as a function of many variables
18 // 6 Steps introduced: MC, MC Acc, Reco, Reco Acc, Reco Acc + ITS Cl,
19 // Reco Acc + ITS Cl + PPR cuts
20 // 12 variables used: pt, y, cosThetaStar, ptPi, ptK, ct,
21 // dca, d0Pi, d0K, d0Pixd0K, cosPointingAngle, phi
22 //
23 //-----------------------------------------------------------------------
24 // Author : C. Zampolli, CERN
25 // D. Caffarri, Univ & INFN Padova caffarri@pd.infn.it
26 //-----------------------------------------------------------------------
27 //-----------------------------------------------------------------------
28 // Base class for HF Unfolding (pt and eta)
29 // correlation matrix filled at Acceptance and PPR level
30 // Author: A.Grelli , Utrecht - agrelli@uu.nl
31 //-----------------------------------------------------------------------
32 #include <TCanvas.h>
33 #include <TParticle.h>
34 #include <TDatabasePDG.h>
35 #include <TProfile.h>
36 #include <TH1I.h>
37 #include <TStyle.h>
38 #include <TFile.h>
39 #include <TF1.h>
40 
41 #include "AliCFTaskVertexingHF.h"
42 #include "AliMCEvent.h"
43 #include "AliCFManager.h"
44 #include "AliCFContainer.h"
45 #include "AliLog.h"
46 #include "AliInputEventHandler.h"
47 #include "AliAnalysisManager.h"
48 #include "AliAODHandler.h"
49 #include "AliAODEvent.h"
50 #include "AliAODRecoDecay.h"
51 #include "AliAODRecoDecayHF.h"
55 #include "AliAODRecoCascadeHF.h"
56 #include "AliAODMCParticle.h"
57 #include "AliAODMCHeader.h"
58 #include "AliESDtrack.h"
59 #include "TChain.h"
60 #include "THnSparse.h"
61 #include "TH2D.h"
62 #include "AliESDtrackCuts.h"
63 #include "AliRDHFCuts.h"
64 #include "AliRDHFCutsD0toKpi.h"
67 #include "AliRDHFCutsDstoKKpi.h"
68 #include "AliRDHFCutsLctopKpi.h"
69 #include "AliRDHFCutsD0toKpipipi.h"
70 #include "AliRDHFCutsLctoV0.h"
71 #include "AliCFVertexingHF2Prong.h"
72 #include "AliCFVertexingHF3Prong.h"
75 #include "AliCFVertexingHF.h"
76 #include "AliVertexingHFUtils.h"
77 #include "AliAnalysisDataSlot.h"
78 #include "AliAnalysisDataContainer.h"
79 #include "AliAnalysisVertexingHF.h"
80 #include "AliPIDResponse.h"
81 
82 //__________________________________________________________________________
85  fCFManager(0x0),
86  fHistEventsProcessed(0x0),
87  fCorrelation(0x0),
88  fListProfiles(0),
89  fCountMC(0),
90  fCountGenLimAcc(0),
91  fCountGenLimAccNoAcc(0),
92  fCountAcc(0),
93  fCountVertex(0),
94  fCountRefit(0),
95  fCountReco(0),
96  fCountRecoAcc(0),
97  fCountRecoITSClusters(0),
98  fCountRecoPPR(0),
99  fCountRecoPID(0),
100  fEvents(0),
101  fDecayChannel(0),
102  fFillFromGenerated(kFALSE),
103  fOriginDselection(0),
104  fAcceptanceUnf(kTRUE),
105  fCuts(0),
106  fUseWeight(kFALSE),
107  fWeight(1.),
108  fUseFlatPtWeight(kFALSE),
109  fUseZWeight(kFALSE),
110  fUseNchWeight(kFALSE),
111  fUseTrackletsWeight(kFALSE),
112  fUseMultRatioAsWeight(kFALSE),
113  fNvar(0),
114  fPartName(""),
115  fDauNames(""),
116  fSign(2),
117  fCentralitySelection(kTRUE),
118  fFakeSelection(0),
119  fRejectIfNoQuark(kTRUE),
120  fUseMCVertex(kFALSE),
121  fDsOption(1),
122  fGenDsOption(3),
123  fConfiguration(kCheetah), // by default, setting the fast configuration
124  fFuncWeight(0x0),
125  fHistoPtWeight(0x0),
126  fHistoMeasNch(0x0),
127  fHistoMCNch(0x0),
128  fResonantDecay(0),
129  fLctoV0bachelorOption(1),
130  fGenLctoV0bachelorOption(0),
131  fUseSelectionBit(kTRUE),
132  fPDGcode(0),
133  fMultiplicityEstimator(kNtrk10),
134  fRefMult(9.26),
135  fZvtxCorrectedNtrkEstimator(kFALSE),
136  fIsPPData(kFALSE),
137  fIsPPbData(kFALSE),
138  fUseAdditionalCuts(kFALSE),
139  fUseCutsForTMVA(kFALSE),
140  fUseCascadeTaskForLctoV0bachelor(kFALSE),
141  fFillMinimumSteps(kFALSE),
142  fCutOnMomConservation(0.00001)
143 {
144  //
145  //Default ctor
146  //
147  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
148 }
149 //___________________________________________________________________________
151  AliAnalysisTaskSE(name),
152  fCFManager(0x0),
153  fHistEventsProcessed(0x0),
154  fCorrelation(0x0),
155  fListProfiles(0),
156  fCountMC(0),
157  fCountGenLimAcc(0),
158  fCountGenLimAccNoAcc(0),
159  fCountAcc(0),
160  fCountVertex(0),
161  fCountRefit(0),
162  fCountReco(0),
163  fCountRecoAcc(0),
164  fCountRecoITSClusters(0),
165  fCountRecoPPR(0),
166  fCountRecoPID(0),
167  fEvents(0),
168  fDecayChannel(0),
169  fFillFromGenerated(kFALSE),
170  fOriginDselection(0),
171  fAcceptanceUnf(kTRUE),
172  fCuts(cuts),
173  fUseWeight(kFALSE),
174  fWeight(1.),
175  fUseFlatPtWeight(kFALSE),
176  fUseZWeight(kFALSE),
177  fUseNchWeight(kFALSE),
178  fUseTrackletsWeight(kFALSE),
179  fUseMultRatioAsWeight(kFALSE),
180  fNvar(0),
181  fPartName(""),
182  fDauNames(""),
183  fSign(2),
184  fCentralitySelection(kTRUE),
185  fFakeSelection(0),
186  fRejectIfNoQuark(kTRUE),
187  fUseMCVertex(kFALSE),
188  fDsOption(1),
189  fGenDsOption(3),
190  fConfiguration(kCheetah), // by default, setting the fast configuration
191  fFuncWeight(func),
192  fHistoPtWeight(0x0),
193  fHistoMeasNch(0x0),
194  fHistoMCNch(0x0),
195  fResonantDecay(0),
196  fLctoV0bachelorOption(1),
197  fGenLctoV0bachelorOption(0),
198  fUseSelectionBit(kTRUE),
199  fPDGcode(0),
200  fMultiplicityEstimator(kNtrk10),
201  fRefMult(9.26),
202  fZvtxCorrectedNtrkEstimator(kFALSE),
203  fIsPPData(kFALSE),
204  fIsPPbData(kFALSE),
205  fUseAdditionalCuts(kFALSE),
206  fUseCutsForTMVA(kFALSE),
207  fUseCascadeTaskForLctoV0bachelor(kFALSE),
208  fFillMinimumSteps(kFALSE),
209  fCutOnMomConservation(0.00001)
210 {
211  //
212  // Constructor. Initialization of Inputs and Outputs
213  //
214  /*
215  DefineInput(0) and DefineOutput(0)
216  are taken care of by AliAnalysisTaskSE constructor
217  */
218  DefineOutput(1,TH1I::Class());
219  DefineOutput(2,AliCFContainer::Class());
220  DefineOutput(3,THnSparseD::Class());
221  DefineOutput(4,AliRDHFCuts::Class());
222  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
223  DefineOutput(5,TList::Class()); // slot #5 keeps the zvtx Ntrakclets correction profiles
224 
225  fCuts->PrintAll();
226 }
227 
228 //___________________________________________________________________________
230 {
231  //
232  // Assignment operator
233  //
234  if (this!=&c) {
235  AliAnalysisTaskSE::operator=(c) ;
238  fCuts = c.fCuts;
243  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=c.fMultEstimatorAvg[i];
244  }
245  return *this;
246 }
247 
248 //___________________________________________________________________________
251  fCFManager(c.fCFManager),
252  fHistEventsProcessed(c.fHistEventsProcessed),
253  fCorrelation(c.fCorrelation),
254  fListProfiles(c.fListProfiles),
255  fCountMC(c.fCountMC),
256  fCountGenLimAcc(c.fCountGenLimAcc),
257  fCountGenLimAccNoAcc(c.fCountGenLimAccNoAcc),
258  fCountAcc(c.fCountAcc),
259  fCountVertex(c.fCountVertex),
260  fCountRefit(c.fCountRefit),
261  fCountReco(c.fCountReco),
262  fCountRecoAcc(c.fCountRecoAcc),
263  fCountRecoITSClusters(c.fCountRecoITSClusters),
264  fCountRecoPPR(c.fCountRecoPPR),
265  fCountRecoPID(c.fCountRecoPID),
266  fEvents(c.fEvents),
267  fDecayChannel(c.fDecayChannel),
268  fFillFromGenerated(c.fFillFromGenerated),
269  fOriginDselection(c.fOriginDselection),
270  fAcceptanceUnf(c.fAcceptanceUnf),
271  fCuts(c.fCuts),
272  fUseWeight(c.fUseWeight),
273  fWeight(c.fWeight),
274  fUseFlatPtWeight(c.fUseFlatPtWeight),
275  fUseZWeight(c.fUseZWeight),
276  fUseNchWeight(c.fUseNchWeight),
277  fUseTrackletsWeight(c.fUseTrackletsWeight),
278  fUseMultRatioAsWeight(c.fUseMultRatioAsWeight),
279  fNvar(c.fNvar),
280  fPartName(c.fPartName),
281  fDauNames(c.fDauNames),
282  fSign(c.fSign),
283  fCentralitySelection(c.fCentralitySelection),
284  fFakeSelection(c.fFakeSelection),
285  fRejectIfNoQuark(c.fRejectIfNoQuark),
286  fUseMCVertex(c.fUseMCVertex),
287  fDsOption(c.fDsOption),
288  fGenDsOption(c.fGenDsOption),
289  fConfiguration(c.fConfiguration),
290  fFuncWeight(c.fFuncWeight),
291  fHistoPtWeight(c.fHistoPtWeight),
292  fHistoMeasNch(c.fHistoMeasNch),
293  fHistoMCNch(c.fHistoMCNch),
294  fResonantDecay(c.fResonantDecay),
295  fLctoV0bachelorOption(c.fLctoV0bachelorOption),
296  fGenLctoV0bachelorOption(c.fGenLctoV0bachelorOption),
297  fUseSelectionBit(c.fUseSelectionBit),
298  fPDGcode(c.fPDGcode),
299  fMultiplicityEstimator(c.fMultiplicityEstimator),
300  fRefMult(c.fRefMult),
301  fZvtxCorrectedNtrkEstimator(c.fZvtxCorrectedNtrkEstimator),
302  fIsPPData(c.fIsPPData),
303  fIsPPbData(c.fIsPPbData),
304  fUseAdditionalCuts(c.fUseAdditionalCuts),
305  fUseCutsForTMVA(c.fUseCutsForTMVA),
306  fUseCascadeTaskForLctoV0bachelor(c.fUseCascadeTaskForLctoV0bachelor),
307  fFillMinimumSteps(c.fFillMinimumSteps),
308  fCutOnMomConservation(c.fCutOnMomConservation)
309 {
310  //
311  // Copy Constructor
312  //
313  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=c.fMultEstimatorAvg[i];
314 }
315 
316 //___________________________________________________________________________
318 {
319  //
320  //destructor
321  //
322  if (fCFManager) delete fCFManager ;
324  if (fCorrelation) delete fCorrelation ;
325  if (fListProfiles) delete fListProfiles;
326  if (fCuts) delete fCuts;
327  if (fFuncWeight) delete fFuncWeight;
328  if (fHistoPtWeight) delete fHistoPtWeight;
329  if (fHistoMeasNch) delete fHistoMeasNch;
330  if (fHistoMCNch) delete fHistoMCNch;
331  for(Int_t i=0; i<4; i++) { if(fMultEstimatorAvg[i]) delete fMultEstimatorAvg[i]; }
332 }
333 
334 //_________________________________________________________________________-
336 {
337  //
338  // Initialization
339  //
340 
341  if (fDebug>1) printf("AliCFTaskVertexingHF::Init()");
342  if(fUseWeight && fUseZWeight) { AliFatal("Can not use at the same time pt and z-vtx weights, please choose"); return; }
343  if(fUseWeight && fUseNchWeight) { AliInfo("Beware, using at the same time pt and Nch weights, please check"); }
344  if(fUseNchWeight && !fHistoMCNch) { AliFatal("Need to pass the MC Nch distribution to use Nch weights"); return; }
346 
347  AliRDHFCuts *copyfCuts = 0x0;
348  if (!fCuts){
349  AliFatal("No cuts defined - Exiting...");
350  return;
351  }
352 
353  switch (fDecayChannel){
354  case 2:{
355  fPDGcode = 421;
356  copyfCuts = new AliRDHFCutsD0toKpi(*(static_cast<AliRDHFCutsD0toKpi*>(fCuts)));
357  switch (fConfiguration) {
358  case kSnail: // slow configuration: all variables in
359  fNvar = 16;
360  break;
361  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
362  fNvar = 8;
363  break;
364  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
365  fNvar = 4;
366  break;
367  }
368  fPartName="D0";
369  fDauNames="K+pi";
370  break;
371  }
372  case 21:{
373  fPDGcode = 413;
374  copyfCuts = new AliRDHFCutsDStartoKpipi(*(static_cast<AliRDHFCutsDStartoKpipi*>(fCuts)));
375  switch (fConfiguration) {
376  case kSnail: // slow configuration: all variables in
377  fNvar = 16;
378  break;
379  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
380  fNvar = 8;
381  break;
382  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
383  fNvar = 4;
384  break;
385  }
386  fPartName="Dstar";
387  fDauNames="K+pi+pi";
388  break;
389  }
390  case 22:{
391  fPDGcode = 4122;
392  copyfCuts = new AliRDHFCutsLctoV0(*(static_cast<AliRDHFCutsLctoV0*>(fCuts)));
393  switch (fConfiguration) {
394  case kSnail: // slow configuration: all variables in
395  fNvar = 16;
396  break;
397  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
398  fNvar = 8;
399  break;
400  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
401  fNvar = 4;
402  break;
403  }
404  fPartName="Lambdac";
405  fDauNames="V0+bachelor";
406  break;
407  }
408  case 31:{
409  fPDGcode = 411;
410  copyfCuts = new AliRDHFCutsDplustoKpipi(*(static_cast<AliRDHFCutsDplustoKpipi*>(fCuts)));
411  switch (fConfiguration) {
412  case kSnail: // slow configuration: all variables in
413  fNvar = 14;
414  break;
415  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
416  fNvar = 8;
417  break;
418  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
419  fNvar = 4;
420  break;
421  }
422  fPartName="Dplus";
423  fDauNames="K+pi+pi";
424  break;
425  }
426  case 32:{
427  fPDGcode = 4122;
428  copyfCuts = new AliRDHFCutsLctopKpi(*(static_cast<AliRDHFCutsLctopKpi*>(fCuts)));
429  switch (fConfiguration) {
430  case kSnail: // slow configuration: all variables in
431  fNvar = 18;
432  break;
433  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
434  fNvar = 8;
435  break;
436  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
437  fNvar = 4;
438  break;
439  }
440  fPartName="Lambdac";
441  fDauNames="p+K+pi";
442  break;
443  }
444  case 33:{
445  fPDGcode = 431;
446  copyfCuts = new AliRDHFCutsDstoKKpi(*(static_cast<AliRDHFCutsDstoKKpi*>(fCuts)));
447  switch (fConfiguration) {
448  case kSnail: // slow configuration: all variables in
449  fNvar = 14;
450  break;
451  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
452  fNvar = 8;
453  break;
454  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
455  fNvar = 4;
456  break;
457  }
458  fPartName="Ds";
459  fDauNames="K+K+pi";
460  break;
461  }
462  case 4:{
463  fPDGcode = 421;
464  copyfCuts = new AliRDHFCutsD0toKpipipi(*(static_cast<AliRDHFCutsD0toKpipipi*>(fCuts)));
465  switch (fConfiguration) {
466  case kSnail: // slow configuration: all variables in
467  fNvar = 16;
468  break;
469  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
470  fNvar = 8;
471  break;
472  case kFalcon:// super fast configuration: only pt_candidate, y, centrality
473  fNvar = 4;
474  break;
475  }
476  fPartName="D0";
477  fDauNames="K+pi+pi+pi";
478  break;
479  }
480  default:
481  AliFatal("The decay channel MUST be defined according to AliCFVertexing::DecayChannel - Exiting...");
482  break;
483  }
484 
485  const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
486  if (copyfCuts){
487  copyfCuts->SetName(nameoutput);
488 
489  //Post the data
490  PostData(4, copyfCuts);
491  }
492  else{
493  AliFatal("Failing initializing AliRDHFCuts object - Exiting...");
494  }
495 
496  fListProfiles = new TList();
497  fListProfiles->SetOwner();
498  TString period[4];
499  Int_t nProfiles=4;
500 
501  if (fIsPPbData) { //if pPb, use only two estimator histos
502  period[0] = "LHC13b"; period[1] = "LHC13c";
503  nProfiles = 2;
504  } else { // else assume pp (four histos for LHC10)
505  period[0] = "LHC10b"; period[1] = "LHC10c"; period[2] = "LHC10d"; period[3] = "LHC10e";
506  nProfiles = 4;
507  }
508 
509  for(Int_t i=0; i<nProfiles; i++){
510  if(fMultEstimatorAvg[i]){
511  TProfile* hprof=new TProfile(*fMultEstimatorAvg[i]);
512  hprof->SetName(Form("ProfileTrkVsZvtx%s\n",period[i].Data()));
513  fListProfiles->Add(hprof);
514  }
515  }
516 
517  // Save also the weight functions or histograms
522 
523  PostData(5,fListProfiles);
524 
525  return;
526 }
527 
528 //_________________________________________________
530 {
531  //
532  // Main loop function
533  //
534 
535  PostData(1,fHistEventsProcessed) ;
536  PostData(2,fCFManager->GetParticleContainer()) ;
537  PostData(3,fCorrelation) ;
538 
539  AliDebug(3,Form("*** Processing event %d\n", fEvents));
540 
541  if (fFillFromGenerated){
542  AliWarning("Flag to fill container with generated value ON ---> dca, d0pi, d0K, d0xd0, cosPointingAngle will be set as dummy!");
543  }
544 
545  if (!fInputEvent) {
546  Error("UserExec","NO EVENT FOUND!");
547  return;
548  }
549 
550  AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
551 
552  TClonesArray *arrayBranch=0;
553 
554  if(!aodEvent && AODEvent() && IsStandardAOD()) {
555  // In case there is an AOD handler writing a standard AOD, use the AOD
556  // event in memory rather than the input (ESD) event.
557  aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
558  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
559  // have to taken from the AOD event hold by the AliAODExtension
560  AliAODHandler* aodHandler = (AliAODHandler*)
561  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
562  if(aodHandler->GetExtensions()) {
563  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
564  AliAODEvent *aodFromExt = ext->GetAOD();
565 
566  switch (fDecayChannel){
567  case 2:{
568  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
569  break;
570  }
571  case 21:{
572  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar");
573  break;
574  }
575  case 22:{
576  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
577  break;
578  }
579  case 31:
580  case 32:
581  case 33:{
582  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
583  break;
584  }
585  case 4:{
586  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm4Prong");
587  break;
588  }
589  default:
590  break;
591  }
592  }
593  }
594  else {
595  switch (fDecayChannel){
596  case 2:{
597  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("D0toKpi");
598  break;
599  }
600  case 21:{
601  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Dstar");
602  break;
603  }
604  case 22:{
605  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF");
606  break;
607  }
608  case 31:
609  case 32:
610  case 33:{
611  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Charm3Prong");
612  break;
613  }
614  case 4:{
615  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Charm4Prong");
616  break;
617  }
618  default:
619  break;
620  }
621  }
622 
623  AliAODVertex *aodVtx = (AliAODVertex*)aodEvent->GetPrimaryVertex();
624  if (!aodVtx) {
625  AliDebug(3, "The event was skipped due to missing vertex");
626  return;
627  }
628 
629  if (!arrayBranch) {
630  AliError("Could not find array of HF vertices");
631  return;
632  }
633 
634  fEvents++;
635 
636  fCFManager->SetRecEventInfo(aodEvent);
637  fCFManager->SetMCEventInfo(aodEvent);
638 
639  //******** DEFINE number of variables of the container***** for now set at 13, in the future in the config macro.
640 
641  //loop on the MC event
642 
643  TClonesArray* mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
644  if (!mcArray) {
645  AliError("Could not find Monte-Carlo in AOD");
646  return;
647  }
648  Int_t icountMC = 0;
649  Int_t icountGenLimAcc = 0;
650  Int_t icountGenLimAccNoAcc = 0;
651  Int_t icountAcc = 0;
652  Int_t icountReco = 0;
653  Int_t icountVertex = 0;
654  Int_t icountRefit = 0;
655  Int_t icountRecoAcc = 0;
656  Int_t icountRecoITSClusters = 0;
657  Int_t icountRecoPPR = 0;
658  Int_t icountRecoPID = 0;
659  Int_t cquarks = 0;
660 
661  AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
662  if (!mcHeader) {
663  AliError("Could not find MC Header in AOD");
664  return;
665  }
666 
667  fHistEventsProcessed->Fill(0.5);
668 
669  Double_t* containerInput = new Double_t[fNvar];
670  Double_t* containerInputMC = new Double_t[fNvar];
671 
672 
673  AliCFVertexingHF* cfVtxHF=0x0;
674  switch (fDecayChannel){
675  case 2:{
676  cfVtxHF = new AliCFVertexingHF2Prong(mcArray, fOriginDselection);
677  break;
678  }
679  case 21:{
680  cfVtxHF = new AliCFVertexingHFCascade(mcArray, fOriginDselection);
681  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGcascade(413);
682  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGbachelor(211);
683  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaugh(421);
684  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughForMC(421);
685  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughPositive(211);
686  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughNegative(321);
687  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPrimaryVertex(aodVtx);
688  break;
689  }
690  case 22:{
691  // Lc -> K0S+proton
693  cfVtxHF = new AliCFVertexingHFCascade(mcArray, fOriginDselection);
694  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGcascade(4122);
695  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGbachelor(2212);
696  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaugh(310);
697  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughForMC(311);
698  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughPositive(211);
699  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughNegative(211);
700  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPrimaryVertex(aodVtx);
701  ((AliCFVertexingHFCascade*)cfVtxHF)->SetCutOnMomConservation(fCutOnMomConservation);
702  if (fUseAdditionalCuts) ((AliCFVertexingHFCascade*)cfVtxHF)->SetUseCutsForTMVA(fUseCutsForTMVA);
703  }
704  else {
706  }
707  break;
708  }
709  case 31:
710  // case 32:
711  case 33:{
712  cfVtxHF = new AliCFVertexingHF3Prong(mcArray, fOriginDselection, fDecayChannel);
713  if(fDecayChannel==33){
714  ((AliCFVertexingHF3Prong*)cfVtxHF)->SetGeneratedDsOption(fGenDsOption);
715  }
716  break;
717  }
718  case 32:{
720  }
721  case 4:{
722  //cfVtxHF = new AliCFVertexingHF4Prong(mcArray, originDselection); // not there yet
723  break;
724  }
725  default:
726  break;
727  }
728  if (!cfVtxHF){
729  AliError("No AliCFVertexingHF initialized");
730  delete[] containerInput;
731  delete[] containerInputMC;
732  return;
733  }
734 
735  Double_t zPrimVertex = aodVtx ->GetZ();
736  Double_t zMCVertex = mcHeader->GetVtxZ();
737  Int_t runnumber = aodEvent->GetRunNumber();
738 
739  // Multiplicity definition with tracklets
740  Double_t nTracklets = 0;
741  Int_t nTrackletsEta10 = static_cast<Int_t>(AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.,1.));
742  Int_t nTrackletsEta16 = static_cast<Int_t>(AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.6,1.6));
743  nTracklets = (Double_t)nTrackletsEta10;
744  if(fMultiplicityEstimator==kNtrk10to16) { nTracklets = (Double_t)(nTrackletsEta16 - nTrackletsEta10); }
745 
746  // Apply the Ntracklets z-vtx data driven correction
748  TProfile* estimatorAvg = GetEstimatorHistogram(aodEvent);
749  if(estimatorAvg) {
750  Int_t nTrackletsEta10Corr = static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,nTrackletsEta10,zPrimVertex,fRefMult));
751  Int_t nTrackletsEta16Corr = static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,nTrackletsEta16,zPrimVertex,fRefMult));
752  nTracklets = (Double_t)nTrackletsEta10Corr;
753  if(fMultiplicityEstimator==kNtrk10to16) { nTracklets = (Double_t)(nTrackletsEta16Corr - nTrackletsEta10Corr); }
754  }
755  }
756 
757 
758  fWeight=1.;
759  if(fUseZWeight) fWeight *= GetZWeight(zMCVertex,runnumber);
760  if(fUseNchWeight){
761  Int_t nChargedMCPhysicalPrimary=AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(mcArray,-1.0,1.0);
762  if(!fUseTrackletsWeight) fWeight *= GetNchWeight(nChargedMCPhysicalPrimary);
763  else fWeight *= GetNchWeight(static_cast<Int_t>(nTracklets));
764  AliDebug(2,Form("Using Nch weights, Mult=%d Weight=%f\n",nChargedMCPhysicalPrimary,fWeight));
765  }
766  Double_t eventWeight=fWeight;
767 
768  if (TMath::Abs(zMCVertex) > fCuts->GetMaxVtxZ()){
769  AliDebug(3,Form("z coordinate of MC vertex = %f, it was required to be within [-%f, +%f], skipping event", zMCVertex, fCuts->GetMaxVtxZ(), fCuts->GetMaxVtxZ()));
770  delete[] containerInput;
771  delete[] containerInputMC;
772  delete cfVtxHF;
773  return;
774  }
775 
776  if(aodEvent->GetTriggerMask()==0 &&
777  (runnumber>=195344 && runnumber<=195677)){
778  AliDebug(3,"Event rejected because of null trigger mask");
779  delete[] containerInput;
780  delete[] containerInputMC;
781  delete cfVtxHF;
782  return;
783  }
784 
785  AliESDtrackCuts** trackCuts = new AliESDtrackCuts*[cfVtxHF->GetNProngs()];
786  if (fDecayChannel == 21){
787  // for the D*, setting the third element of the array of the track cuts to those for the soft pion
788  for (Int_t iProng = 0; iProng<cfVtxHF->GetNProngs()-1; iProng++){
789  trackCuts[iProng]=fCuts->GetTrackCuts();
790  }
791  trackCuts[2] = fCuts->GetTrackCutsSoftPi();
792  }
793  else if (fDecayChannel == 22) {
794  // for the Lc->V0+bachelor, setting the second and third elements of the array of the track cuts to those for the V0 daughters
795  trackCuts[0]=fCuts->GetTrackCuts();
796  trackCuts[1]=fCuts->GetTrackCutsV0daughters();
797  trackCuts[2]=fCuts->GetTrackCutsV0daughters();
798  }
799  else {
800  for (Int_t iProng = 0; iProng<cfVtxHF->GetNProngs(); iProng++){
801  trackCuts[iProng]=fCuts->GetTrackCuts();
802  }
803  }
804 
805  //General settings: vertex, feed down and fill reco container with generated values.
806  cfVtxHF->SetRecoPrimVertex(zPrimVertex);
807  cfVtxHF->SetMCPrimaryVertex(zMCVertex);
809  cfVtxHF->SetNVar(fNvar);
813 
814  // switch-off the trigger class selection (doesn't work for MC)
815  fCuts->SetTriggerClass("");
816 
817  // MC vertex, to be used, in case, for pp
819 
820  if (fCentralitySelection){ // keep only the requested centrality
821 
822  if(fCuts->IsEventSelectedInCentrality(aodEvent)!=0) {
823  delete[] containerInput;
824  delete[] containerInputMC;
825  delete [] trackCuts;
826  delete cfVtxHF;
827  return;
828  }
829  } else { // keep all centralities
830  fCuts->SetMinCentrality(0.);
831  fCuts->SetMaxCentrality(100.);
832  }
833 
834  Float_t centValue = 0.;
835  if(!fIsPPData) centValue = fCuts->GetCentrality(aodEvent);
836  cfVtxHF->SetCentralityValue(centValue);
837 
838  // multiplicity estimator with VZERO
839  Double_t vzeroMult=0;
840  AliAODVZERO *vzeroAOD = (AliAODVZERO*)aodEvent->GetVZEROData();
841  if(vzeroAOD) vzeroMult = vzeroAOD->GetMTotV0A() + vzeroAOD->GetMTotV0C();
842 
843  Double_t multiplicity = nTracklets; // set to the Ntracklet estimator
844  if(fMultiplicityEstimator==kVZERO) { multiplicity = vzeroMult; }
845 
846  cfVtxHF->SetMultiplicity(multiplicity);
847 
848  // printf("Multiplicity estimator %d, value %2.2f\n",fMultiplicityEstimator,multiplicity);
849 
850  for (Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) {
851  AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(mcArray->At(iPart));
852  if (!mcPart){
853  AliError("Failed casting particle from MC array!, Skipping particle");
854  continue;
855  }
856 
857  //counting c quarks
858  cquarks += cfVtxHF->MCcquarkCounting(mcPart);
859 
860  // check the MC-level cuts, must be the desidered particle
861  if (!fCFManager->CheckParticleCuts(0, mcPart)) {
862  AliDebug(2,"Check the MC-level cuts - not desidered particle");
863  continue; // 0 stands for MC level
864  }
865  else {
866  AliDebug(3, Form("\n\n---> COOL! we found a particle (particle %d)!!! with PDG code = %d \n\n", iPart, mcPart->GetPdgCode()));
867  }
868  cfVtxHF->SetMCCandidateParam(iPart);
869 
870 
871  if (!(cfVtxHF->SetLabelArray())){
872  AliDebug(2,Form("Impossible to set the label array for particle %d (decaychannel = %d)", iPart, fDecayChannel));
873  continue;
874  }
875 
876  //check the candiate family at MC level
877  if (!(cfVtxHF->CheckMCPartFamily(mcPart, mcArray))) {
878  AliDebug(2,Form("Check on the family wrong for particle %d!!! (decaychannel = %d)", iPart, fDecayChannel));
879  continue;
880  }
881  else{
882  AliDebug(2,Form("Check on the family OK for particle %d!!! (decaychannel = %d)", iPart, fDecayChannel));
883  }
884 
885  //Fill the MC container
886  Bool_t mcContainerFilled = cfVtxHF -> FillMCContainer(containerInputMC);
887  AliDebug(2, Form("particle = %d mcContainerFilled = %d", iPart, mcContainerFilled));
888  if (mcContainerFilled) {
889  if (fUseWeight){
890  if (fHistoPtWeight) { // using an histogram as weight function
891  AliDebug(2,"Using Histogram as Pt weight function");
892  fWeight = eventWeight*GetPtWeightFromHistogram(containerInputMC[0]);
893  }
894  else if (fFuncWeight){ // using user-defined function
895  AliDebug(2,"Using function");
896  fWeight = eventWeight*fFuncWeight->Eval(containerInputMC[0]);
897  }
898  else{ // using FONLL
899  AliDebug(2,"Using FONLL");
900  fWeight = eventWeight*GetWeight(containerInputMC[0]);
901  }
902  AliDebug(2,Form("pt = %f, weight = %f",containerInputMC[0], fWeight));
903  }
904  if (!fCuts->IsInFiducialAcceptance(containerInputMC[0],containerInputMC[1])) {
905  AliDebug(3, Form("Not in limited acceptance, containerInputMC[0] = %f, containerInputMC[1] = %f", containerInputMC[0], containerInputMC[1]));
906  continue;
907  }
908  else{
909  AliDebug(3, Form("YES!! in limited acceptance, containerInputMC[0] = %f, containerInputMC[1] = %f", containerInputMC[0],containerInputMC[1]));
910  }
911 
912  //MC Limited Acceptance
913  if (TMath::Abs(containerInputMC[1]) < 0.5) {
914  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepGeneratedLimAcc, fWeight);
915  icountGenLimAcc++;
916  AliDebug(3,"MC Lim Acc container filled\n");
917  if (fCFManager->GetParticleContainer()->GetNStep() == kStepGenLimAccNoAcc+1) {
918  if (!(cfVtxHF-> MCAcceptanceStep())) {
919  if(!fFillMinimumSteps)
920  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepGenLimAccNoAcc, fWeight);
921  icountGenLimAccNoAcc++;
922  AliDebug(3,"MC Lim Acc No Acc container filled\n");
923  }
924  }
925  }
926 
927  //MC
928  if(!fFillMinimumSteps)
929  fCFManager->GetParticleContainer()->Fill(containerInputMC, kStepGenerated, fWeight);
930  icountMC++;
931  AliDebug(3,"MC container filled \n");
932 
933  // MC in acceptance
934  // check the MC-Acceptance level cuts
935  // since standard CF functions are not applicable, using Kine Cuts on daughters
936  Bool_t mcAccepStep = cfVtxHF-> MCAcceptanceStep();
937  if (mcAccepStep){
938  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepAcceptance, fWeight);
939  AliDebug(3,"MC acceptance cut passed\n");
940  icountAcc++;
941 
942  //MC Vertex step
943  if (fCuts->IsEventSelected(aodEvent)){
944  // filling the container if the vertex is ok
945  if(!fFillMinimumSteps)
946  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepVertex, fWeight) ;
947  AliDebug(3,"Vertex cut passed and container filled\n");
948  icountVertex++;
949 
950  //mc Refit requirement
951  Bool_t mcRefitStep = cfVtxHF->MCRefitStep(aodEvent, &trackCuts[0]);
952  if (mcRefitStep){
953  if(!fFillMinimumSteps)
954  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepRefit, fWeight);
955  AliDebug(3,"MC Refit cut passed and container filled\n");
956  icountRefit++;
957  }
958  else{
959  AliDebug(3,"MC Refit cut not passed\n");
960  continue;
961  }
962  }
963  else{
964  AliDebug (3, "MC vertex step not passed\n");
965  continue;
966  }
967  }
968  else{
969  AliDebug (3, "MC in acceptance step not passed\n");
970  continue;
971  }
972  }
973  else {
974  AliDebug (3, "MC container not filled\n");
975  }
976  }
977 
978  if (cquarks<2) AliDebug(2,Form("Event with %d c-quarks", cquarks));
979  AliDebug(2,Form("Found %i MC particles that are %s!!",icountMC,fPartName.Data()));
980  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Acc cuts!!",icountAcc,fPartName.Data()));
981  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Vertex cuts!!",icountVertex,fPartName.Data()));
982  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Refit cuts!!",icountRefit,fPartName.Data()));
983 
984  // Now go to rec level
985  fCountMC += icountMC;
986  fCountGenLimAcc += icountGenLimAcc;
987  fCountGenLimAccNoAcc += icountGenLimAccNoAcc;
988  fCountAcc += icountAcc;
989  fCountVertex+= icountVertex;
990  fCountRefit+= icountRefit;
991 
992  AliDebug(2,Form("Found %d vertices for decay channel %d",arrayBranch->GetEntriesFast(),fDecayChannel));
994  for(Int_t iCandid = 0; iCandid<arrayBranch->GetEntriesFast();iCandid++){
995  fHistEventsProcessed->Fill(2.5);
996  AliAODRecoDecayHF* charmCandidate=0x0;
997  switch (fDecayChannel){
998  case 2:{
999  charmCandidate = (AliAODRecoDecayHF2Prong*)arrayBranch->At(iCandid);
1000  if(charmCandidate->GetIsFilled()!=0) fHistEventsProcessed->Fill(3.5);
1001  if(!vHF->FillRecoCand(aodEvent,(AliAODRecoDecayHF2Prong*)charmCandidate)){
1002  fHistEventsProcessed->Fill(5.5);
1003  continue;
1004  }else{
1005  fHistEventsProcessed->Fill(4.5);
1006  }
1007  break;
1008  }
1009  case 21:{
1010  charmCandidate = (AliAODRecoCascadeHF*)arrayBranch->At(iCandid);
1011  if(charmCandidate->GetIsFilled()!=0) fHistEventsProcessed->Fill(3.5);
1012  if(!vHF->FillRecoCasc(aodEvent,((AliAODRecoCascadeHF*)charmCandidate),kTRUE)){
1013  fHistEventsProcessed->Fill(5.5);
1014  continue; //DStar
1015  }else{
1016  fHistEventsProcessed->Fill(4.5);
1017  }
1018  break;
1019  }
1020  case 22:{
1021  charmCandidate = (AliAODRecoCascadeHF*)arrayBranch->At(iCandid);
1022  if(charmCandidate->GetIsFilled()!=0) fHistEventsProcessed->Fill(3.5);
1023  if(!vHF->FillRecoCasc(aodEvent,((AliAODRecoCascadeHF*)charmCandidate),kFALSE)){
1024  fHistEventsProcessed->Fill(5.5);
1025  continue; //Cascade
1026  }else{
1027  fHistEventsProcessed->Fill(4.5);
1028  }
1029  break;
1030  }
1031  case 31:
1032  case 32:
1033  case 33:{
1034  charmCandidate = (AliAODRecoDecayHF3Prong*)arrayBranch->At(iCandid);
1035  if(charmCandidate->GetIsFilled()!=0) fHistEventsProcessed->Fill(3.5);
1036  if(!vHF->FillRecoCand(aodEvent,(AliAODRecoDecayHF3Prong*)charmCandidate)){
1037  fHistEventsProcessed->Fill(5.5);
1038  continue;
1039  }else{
1040  fHistEventsProcessed->Fill(4.5);
1041  }
1042  break;
1043  }
1044  case 4:{
1045  charmCandidate = (AliAODRecoDecayHF4Prong*)arrayBranch->At(iCandid);
1046  break;
1047  }
1048  default:
1049  break;
1050  }
1051 
1052  Bool_t unsetvtx=kFALSE;
1053  if(!charmCandidate->GetOwnPrimaryVtx()) {
1054  charmCandidate->SetOwnPrimaryVtx(aodVtx); // needed to compute all variables
1055  unsetvtx=kTRUE;
1056  }
1057 
1058  Bool_t signAssociation = cfVtxHF->SetRecoCandidateParam((AliAODRecoDecayHF*)charmCandidate);
1059  if (!signAssociation){
1060  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1061  continue;
1062  }
1063 
1064  Int_t isPartOrAntipart = cfVtxHF->CheckReflexion(fSign);
1065  if (isPartOrAntipart == 0){
1066  AliDebug(2, Form("The candidate pdg code doesn't match the requirement set in the task (fSign = %d)",fSign));
1067  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1068  continue;
1069  }
1070 
1071  AliDebug(3,Form("iCandid=%d - signAssociation=%d, isPartOrAntipart=%d",iCandid, signAssociation, isPartOrAntipart));
1072 
1073  Bool_t recoContFilled = cfVtxHF->FillRecoContainer(containerInput);
1074  AliDebug(3, Form("CF task: RecoContFilled for candidate %d is %d", iCandid, (Int_t)recoContFilled));
1075  if (recoContFilled){
1076 
1077  // weight according to pt
1078  if (fUseWeight){
1079  if (fHistoPtWeight) {
1080  AliDebug(2,"Using Histogram as Pt weight function");
1081  fWeight = eventWeight*GetPtWeightFromHistogram(containerInput[0]);
1082  }
1083  else if (fFuncWeight){ // using user-defined function
1084  AliDebug(2, "Using function");
1085  fWeight = eventWeight*fFuncWeight->Eval(containerInput[0]);
1086  }
1087  else{ // using FONLL
1088  AliDebug(2, "Using FONLL");
1089  fWeight = eventWeight*GetWeight(containerInput[0]);
1090  }
1091  AliDebug(2, Form("pt = %f, weight = %f",containerInput[0], fWeight));
1092  }
1093 
1094  if (!fCuts->IsInFiducialAcceptance(containerInput[0],containerInput[1])){
1095  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1096  continue;
1097  }
1098  //Reco Step
1099  Bool_t recoStep = cfVtxHF->RecoStep();
1100  if (recoStep) AliDebug(2, Form("particle = %d --> CF task: Reco step for candidate %d is %d", iCandid, iCandid, (Int_t)recoStep));
1101  Bool_t vtxCheck = fCuts->IsEventSelected(aodEvent);
1102 
1103 
1104  // Selection on the filtering bit
1105  Bool_t isBitSelected = kTRUE;
1106  if(fDecayChannel==2) {
1107  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)) isBitSelected = kFALSE;
1108  }else if(fDecayChannel==31){
1109  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kDplusCuts)) isBitSelected = kFALSE;
1110  }else if(fDecayChannel==33){
1111  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kDsCuts)) isBitSelected = kFALSE;
1112  }else if(fDecayChannel==32){
1113  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kLcCuts)) isBitSelected = kFALSE;
1114  }else if(fDecayChannel==22){
1115  if(!((dynamic_cast<AliAODRecoCascadeHF*>(charmCandidate))->CheckCascadeFlags())) isBitSelected = kFALSE; // select only Lc among cascade candidates
1116  }
1117  if(!isBitSelected){
1118  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1119  continue;
1120  }
1121 
1122 
1123  if (recoStep && recoContFilled && vtxCheck){
1124  if(!fFillMinimumSteps)
1125  fCFManager->GetParticleContainer()->Fill(containerInput,kStepReconstructed, fWeight) ;
1126  icountReco++;
1127  AliDebug(3,"Reco step passed and container filled\n");
1128 
1129  //Reco in the acceptance -- take care of UNFOLDING!!!!
1130  Bool_t recoAcceptanceStep = cfVtxHF->RecoAcceptStep(&trackCuts[0]);
1131  if (recoAcceptanceStep) {
1132  if(!fFillMinimumSteps)
1133  fCFManager->GetParticleContainer()->Fill(containerInput,kStepRecoAcceptance, fWeight) ;
1134  icountRecoAcc++;
1135  AliDebug(3,"Reco acceptance cut passed and container filled\n");
1136 
1137  if(fAcceptanceUnf){
1138  Double_t fill[4]; //fill response matrix
1139  Bool_t bUnfolding = cfVtxHF -> FillUnfoldingMatrix(fPDGcode,fill);
1140  if (bUnfolding) fCorrelation->Fill(fill);
1141  }
1142 
1143  //Number of ITS cluster requirements
1144  Int_t recoITSnCluster = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kTracks, aodEvent);
1145  if (recoITSnCluster){
1146  if(!fFillMinimumSteps)
1147  fCFManager->GetParticleContainer()->Fill(containerInput,kStepRecoITSClusters, fWeight) ;
1148  icountRecoITSClusters++;
1149  AliDebug(3,"Reco n ITS cluster cut passed and container filled\n");
1150 
1151  Bool_t iscutsusingpid = fCuts->GetIsUsePID();
1152  Int_t recoAnalysisCuts = -1, recoPidSelection = -1;
1153  fCuts->SetUsePID(kFALSE);
1154  recoAnalysisCuts = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kCandidate, aodEvent);
1155 
1156  if (fDecayChannel==33){ // Ds case, where more possibilities are considered
1157  Bool_t keepDs=ProcessDs(recoAnalysisCuts);
1158  if(keepDs) recoAnalysisCuts=3;
1159  }
1160  else if (fDecayChannel==22){ // Lc->V0+bachelor case, where more possibilities are considered
1161  Bool_t keepLctoV0bachelor = ProcessLctoV0Bachelor(recoAnalysisCuts);
1162  if (keepLctoV0bachelor) recoAnalysisCuts=3;
1163  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
1164  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
1165  AliPIDResponse* pidResponse = inputHandler->GetPIDResponse();
1166  if (fUseAdditionalCuts){
1167  if (!((AliCFVertexingHFCascade*)cfVtxHF)->CheckAdditionalCuts(pidResponse)) recoAnalysisCuts = -1;
1168  }
1169  }
1170 
1171  fCuts->SetUsePID(iscutsusingpid); //restoring usage of the PID from the cuts object
1172  Bool_t tempAn=(recoAnalysisCuts == 3 || recoAnalysisCuts == isPartOrAntipart);
1173  if (fDecayChannel == 22) tempAn = (recoAnalysisCuts == 3);
1174  if (fDecayChannel == 32) tempAn=(recoAnalysisCuts >0 || recoAnalysisCuts == isPartOrAntipart);
1175 
1176  if (tempAn){
1177  fCFManager->GetParticleContainer()->Fill(containerInput, kStepRecoPPR, fWeight);
1178  icountRecoPPR++;
1179  AliDebug(3,"Reco Analysis cuts passed and container filled \n");
1180  //pid selection
1181  //recoPidSelection = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kPID);
1182  //if((fCuts->CombineSelectionLevels(3,recoAnalysisCuts,recoPidSelection)==isPartOrAntipart)||(fCuts->CombineSelectionLevels(3,recoAnalysisCuts,recoPidSelection)==3)){
1183  recoPidSelection = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kCandidate, aodEvent);
1184 
1185  if (fDecayChannel==33){ // Ds case, where more possibilities are considered
1186  Bool_t keepDs=ProcessDs(recoPidSelection);
1187  if(keepDs) recoPidSelection=3;
1188  } else if (fDecayChannel==22){ // Lc->V0+bachelor case, where more possibilities are considered
1189  Bool_t keepLctoV0bachelor=ProcessLctoV0Bachelor(recoPidSelection);
1190  if (keepLctoV0bachelor) recoPidSelection=3;
1191  }
1192 
1193  Bool_t tempPid=(recoPidSelection == 3 || recoPidSelection == isPartOrAntipart);
1194  if (fDecayChannel == 22) tempPid = (recoPidSelection == 3);
1195  if (fDecayChannel == 32) tempPid=(recoPidSelection >0 || recoPidSelection == isPartOrAntipart);
1196 
1197  if (tempPid){
1198  Double_t weigPID = 1.;
1199  if (fDecayChannel == 2){ // D0 with Bayesian PID using weights
1200  if(((AliRDHFCutsD0toKpi*)fCuts)->GetCombPID() && (((AliRDHFCutsD0toKpi*)fCuts)->GetBayesianStrategy() == AliRDHFCutsD0toKpi::kBayesWeight || ((AliRDHFCutsD0toKpi*)fCuts)->GetBayesianStrategy() == AliRDHFCutsD0toKpi::kBayesWeightNoFilter)){
1201  if (isPartOrAntipart == 1){
1202  weigPID = ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsNegative()[AliPID::kKaon] * ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsPositive()[AliPID::kPion];
1203  }else if (isPartOrAntipart == 2){
1204  weigPID = ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsPositive()[AliPID::kKaon] * ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsNegative()[AliPID::kPion];
1205  }
1206  if ((weigPID < 0) || (weigPID > 1)) weigPID = 0.;
1207  }
1208  }else if (fDecayChannel == 33){ // Ds with Bayesian PID using weights
1210  Int_t labDau0=((AliAODTrack*)charmCandidate->GetDaughter(0))->GetLabel();
1211  AliAODMCParticle* firstDau=(AliAODMCParticle*)mcArray->UncheckedAt(TMath::Abs(labDau0));
1212  if(firstDau){
1213  Int_t pdgCode0=TMath::Abs(firstDau->GetPdgCode());
1214  if(pdgCode0==321){
1215  weigPID=((AliRDHFCutsDstoKKpi*)fCuts)->GetWeightForKKpi();
1216  }else if(pdgCode0==211){
1217  weigPID=((AliRDHFCutsDstoKKpi*)fCuts)->GetWeightForpiKK();
1218  }
1219  if ((weigPID < 0) || (weigPID > 1)) weigPID = 0.;
1220  }else{
1221  weigPID=0.;
1222  }
1223  }
1224  }
1225  fCFManager->GetParticleContainer()->Fill(containerInput, kStepRecoPID, fWeight*weigPID);
1226  icountRecoPID++;
1227  AliDebug(3,"Reco PID cuts passed and container filled \n");
1228  if(!fAcceptanceUnf){
1229  Double_t fill[4]; //fill response matrix
1230  Bool_t bUnfolding = cfVtxHF -> FillUnfoldingMatrix(fPDGcode,fill);
1231  if (bUnfolding) fCorrelation->Fill(fill);
1232  }
1233  }
1234  else {
1235  AliDebug(3, "Analysis Cuts step not passed \n");
1236  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1237  continue;
1238  }
1239  }
1240  else {
1241  AliDebug(3, "PID selection not passed \n");
1242  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1243  continue;
1244  }
1245  }
1246  else{
1247  AliDebug(3, "Number of ITS cluster step not passed\n");
1248  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1249  continue;
1250  }
1251  }
1252  else{
1253  AliDebug(3, "Reco acceptance step not passed\n");
1254  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1255  continue;
1256  }
1257  }
1258  else {
1259  AliDebug(3, "Reco step not passed\n");
1260  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1261  continue;
1262  }
1263  }
1264 
1265  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1266  } // end loop on candidate
1267  delete vHF;
1268  fCountReco+= icountReco;
1269  fCountRecoAcc+= icountRecoAcc;
1270  fCountRecoITSClusters+= icountRecoITSClusters;
1271  fCountRecoPPR+= icountRecoPPR;
1272  fCountRecoPID+= icountRecoPID;
1273 
1274  fHistEventsProcessed->Fill(1.5);
1275 
1276  delete[] containerInput;
1277  delete[] containerInputMC;
1278  delete cfVtxHF;
1279  if (trackCuts){
1280  // for (Int_t i=0; i<cfVtxHF->GetNProngs(); i++){
1281  // delete [] trackCuts[i];
1282  // }
1283  delete [] trackCuts;
1284  }
1285 
1286 
1287 }
1288 
1289 //___________________________________________________________________________
1291 {
1292  // The Terminate() function is the last function to be called during
1293  // a query. It always runs on the client, it can be used to present
1294  // the results graphically or save the results to file.
1295 
1296  AliAnalysisTaskSE::Terminate();
1297 
1298  AliInfo(Form("Found %i MC particles that are %s in MC, in %d events",fCountMC,fPartName.Data(),fEvents));
1299  AliInfo(Form("Found %i MC particles that are %s in MC in limited acceptance, in %d events",fCountGenLimAcc,fPartName.Data(),fEvents));
1300  AliInfo(Form("Found %i MC particles that are %s in MC in limited acceptance and don't satisfy Acc cuts, in %d events",fCountGenLimAccNoAcc,fPartName.Data(),fEvents));
1301  AliInfo(Form("Found %i MC particles that are %s in MC and satisfy Acc cuts, in %d events",fCountAcc,fPartName.Data(),fEvents));
1302  AliInfo(Form("Found %i MC particles that are %s in MC and satisfy Acc cuts, and satisfy Vertex requirement in %d events",fCountVertex,fPartName.Data(),fEvents));
1303  AliInfo(Form("Found %i MC particles that are %s in MC and satisfy Acc cuts, and satisfy ITS+TPC refit requirementin %d events",fCountRefit,fPartName.Data(),fEvents));
1304  AliInfo(Form("Found %i reco %s that are decaying in %s, in %d events",fCountReco,fPartName.Data(),fDauNames.Data(),fEvents));
1305  AliInfo(Form("Among the above, found %i reco %s that are decaying in %s and are in the requested acceptance, in %d events",fCountRecoAcc,fPartName.Data(),fDauNames.Data(),fEvents));
1306  AliInfo(Form("Among the above, found %i reco %s that are decaying in %s and have at least 5 clusters in ITS, in %d events",fCountRecoITSClusters,fPartName.Data(),fDauNames.Data(),fEvents));
1307  AliInfo(Form("Among the above, found %i reco %s that are decaying in %s and satisfy PPR cuts, in %d events",fCountRecoPPR,fPartName.Data(),fDauNames.Data(),fEvents));
1308  AliInfo(Form("Among the above, found %i reco %s that are decaying in %s and satisfy PPR+PID cuts, in %d events",fCountRecoPID,fPartName.Data(),fDauNames.Data(),fEvents));
1309 
1310  // draw some example plots....
1311  AliCFContainer *cont= dynamic_cast<AliCFContainer*> (GetOutputData(2));
1312  if(!cont) {
1313  printf("CONTAINER NOT FOUND\n");
1314  return;
1315  }
1316  // projecting the containers to obtain histograms
1317  // first argument = variable, second argument = step
1318 
1319  TH1D** h = new TH1D*[3];
1320  Int_t nvarToPlot = 0;
1321  if (fConfiguration == kSnail){
1322  //h = new TH1D[3][12];
1323  for (Int_t ih = 0; ih<3; ih++){
1324  if(fDecayChannel==22){
1325  nvarToPlot = 16;
1326  } else {
1327  nvarToPlot = 12;
1328  }
1329  h[ih] = new TH1D[nvarToPlot];
1330  }
1331  for(Int_t iC=1;iC<nvarToPlot; iC++){
1332  // MC-level
1333  h[0][iC] = *(cont->ShowProjection(iC,0));
1334  // MC-Acceptance level
1335  h[1][iC] = *(cont->ShowProjection(iC,1));
1336  // Reco-level
1337  h[2][iC] = *(cont->ShowProjection(iC,4));
1338  }
1339  }
1340  else if(fConfiguration == kCheetah){
1341  //h = new TH1D[3][12];
1342  nvarToPlot = 8;
1343  for (Int_t ih = 0; ih<3; ih++){
1344  h[ih] = new TH1D[nvarToPlot];
1345  }
1346  for(Int_t iC=0;iC<nvarToPlot; iC++){
1347  // MC-level
1348  h[0][iC] = *(cont->ShowProjection(iC,0));
1349  // MC-Acceptance level
1350  h[1][iC] = *(cont->ShowProjection(iC,1));
1351  // Reco-level
1352  h[2][iC] = *(cont->ShowProjection(iC,4));
1353  }
1354  }
1355  else if(fConfiguration == kFalcon){
1356  //h = new TH1D[3][12];
1357  nvarToPlot = 4;
1358  for (Int_t ih = 0; ih<3; ih++){
1359  h[ih] = new TH1D[nvarToPlot];
1360  }
1361  for(Int_t iC=0;iC<nvarToPlot; iC++){
1362  // MC-level
1363  h[0][iC] = *(cont->ShowProjection(iC,0));
1364  // MC-Acceptance level
1365  h[1][iC] = *(cont->ShowProjection(iC,1));
1366  // Reco-level
1367  h[2][iC] = *(cont->ShowProjection(iC,4));
1368  }
1369  }
1370  TString* titles;
1371  //Int_t nvarToPlot = 0;
1372  if (fConfiguration == kSnail){
1373  if(fDecayChannel==31){
1374  //nvarToPlot = 12;
1375  titles = new TString[nvarToPlot];
1376  titles[0]="pT_Dplus (GeV/c)";
1377  titles[1]="rapidity";
1378  titles[2]="phi (rad)";
1379  titles[3]="cT (#mum)";
1380  titles[4]="cosPointingAngle";
1381  titles[5]="pT_1 (GeV/c)";
1382  titles[6]="pT_2 (GeV/c)";
1383  titles[7]="pT_3 (GeV/c)";
1384  titles[8]="d0_1 (#mum)";
1385  titles[9]="d0_2 (#mum)";
1386  titles[10]="d0_3 (#mum)";
1387  titles[11]="zVertex (cm)";
1388  } else if (fDecayChannel==22) {
1389  //nvarToPlot = 16;
1390  titles = new TString[nvarToPlot];
1391  titles[0]="p_{T}(#Lambda_{c}) [GeV/c]";
1392  titles[1]="y(#Lambda_{c})";
1393  titles[2]="#varphi(#Lambda_{c}) [rad]";
1394  titles[3]="onTheFlyStatusV0";
1395  titles[4]="z_{vtx} [cm]";
1396  titles[5]="centrality";
1397  titles[6]="fake";
1398  titles[7]="multiplicity";
1399  //titles[8]="pT(bachelor) [GeV/c]";
1400  titles[8]="p(bachelor) [GeV/c]";
1401  titles[9]="p_{T}(V0) [GeV/c]";
1402  titles[10]="y(V0)";
1403  titles[11]="#varphi(V0) [rad]";
1404  titles[12]="m_{inv}(#pi^{+}#pi^{+}) [GeV/c^{2}]";
1405  titles[13]="dcaV0 (nSigma)";
1406  titles[14]="cosine pointing angle (V0)";
1407  titles[15]="cosine pointing angle (#Lambda_{c})";
1408  //titles[16]="c#tauV0 (#mum)";
1409  //titles[17]="c#tau (#mum)";
1410  } else {
1411  //nvarToPlot = 12;
1412  titles = new TString[nvarToPlot];
1413  titles[0]="pT_D0 (GeV/c)";
1414  titles[1]="rapidity";
1415  titles[2]="cosThetaStar";
1416  titles[3]="pT_pi (GeV/c)";
1417  titles[4]="pT_K (Gev/c)";
1418  titles[5]="cT (#mum)";
1419  titles[6]="dca (#mum)";
1420  titles[7]="d0_pi (#mum)";
1421  titles[8]="d0_K (#mum)";
1422  titles[9]="d0xd0 (#mum^2)";
1423  titles[10]="cosPointingAngle";
1424  titles[11]="phi (rad)";
1425  }
1426  }
1427  else if(fConfiguration == kCheetah){
1428  //nvarToPlot = 8;
1429  titles = new TString[nvarToPlot];
1430  if (fDecayChannel==22) {
1431  titles[0]="p_{T}(#Lambda_{c}) [GeV/c]";
1432  titles[1]="y(#Lambda_{c})";
1433  titles[2]="#varphi(#Lambda_{c}) [rad]";
1434  titles[3]="onTheFlyStatusV0";
1435  titles[4]="z_{vtx} [cm]";
1436  titles[5]="centrality";
1437  titles[6]="fake";
1438  titles[7]="multiplicity";
1439  } else {
1440  titles[0]="pT_candidate (GeV/c)";
1441  titles[1]="rapidity";
1442  titles[2]="cT (#mum)";
1443  titles[3]="phi";
1444  titles[4]="z_{vtx}";
1445  titles[5]="centrality";
1446  titles[6]="fake";
1447  titles[7]="multiplicity";
1448  }
1449  }
1450  else if(fConfiguration == kFalcon){
1451  //nvarToPlot = 4;
1452  titles = new TString[nvarToPlot];
1453  if (fDecayChannel==22) {
1454  titles[0]="p_{T}(#Lambda_{c}) [GeV/c]";
1455  titles[1]="y(#Lambda_{c})";
1456  titles[2]="centrality";
1457  titles[3]="multiplicity";
1458  } else {
1459  titles[0]="pT_candidate (GeV/c)";
1460  titles[1]="rapidity";
1461  titles[2]="centrality";
1462  titles[3]="multiplicity";
1463  }
1464  }
1465 
1466  Int_t markers[16]={20,24,21,25,27,28,
1467  20,24,21,25,27,28,
1468  20,24,21,25};
1469  Int_t colors[3]={2,8,4};
1470  for(Int_t iC=0;iC<nvarToPlot; iC++){
1471  for(Int_t iStep=0;iStep<3;iStep++){
1472  h[iStep][iC].SetTitle(titles[iC].Data());
1473  h[iStep][iC].GetXaxis()->SetTitle(titles[iC].Data());
1474  Double_t maxh=h[iStep][iC].GetMaximum();
1475  h[iStep][iC].GetYaxis()->SetRangeUser(0,maxh*1.2);
1476  h[iStep][iC].SetMarkerStyle(markers[iC]);
1477  h[iStep][iC].SetMarkerColor(colors[iStep]);
1478  }
1479  }
1480 
1481  gStyle->SetCanvasColor(0);
1482  gStyle->SetFrameFillColor(0);
1483  gStyle->SetTitleFillColor(0);
1484  gStyle->SetStatColor(0);
1485 
1486  // drawing in 2 separate canvas for a matter of clearity
1487  TCanvas * c1 =new TCanvas(Form("c1New_%d",fDecayChannel),"Vars 0, 1, 2, 3",1100,1200);
1488  c1->Divide(3,4);
1489  Int_t iPad=1;
1490  for(Int_t iVar=0; iVar<4; iVar++){
1491  if(iVar>=fNvar) continue;
1492  c1->cd(iPad++);
1493  h[0][iVar].DrawCopy("p");
1494  c1->cd(iPad++);
1495  h[1][iVar].DrawCopy("p");
1496  c1->cd(iPad++);
1497  h[2][iVar].DrawCopy("p");
1498  }
1499 
1501  TCanvas * c2 =new TCanvas(Form("c2New_%d",fDecayChannel),"Vars 4, 5, 6, 7",1100,1200);
1502  c2->Divide(3,4);
1503  iPad=1;
1504  for(Int_t iVar=4; iVar<8; iVar++){
1505  c2->cd(iPad++);
1506  h[0][iVar].DrawCopy("p");
1507  c2->cd(iPad++);
1508  h[1][iVar].DrawCopy("p");
1509  c2->cd(iPad++);
1510  h[2][iVar].DrawCopy("p");
1511  }
1512  }
1513 
1514  if (fConfiguration == kSnail){
1515  TCanvas * c3 =new TCanvas(Form("c3New_%d",fDecayChannel),"Vars 8, 9, 10, 11",1100,1200);
1516  c3->Divide(3,4);
1517  iPad=1;
1518  for(Int_t iVar=8; iVar<12; iVar++){
1519  c3->cd(iPad++);
1520  h[0][iVar].DrawCopy("p");
1521  c3->cd(iPad++);
1522  h[1][iVar].DrawCopy("p");
1523  c3->cd(iPad++);
1524  h[2][iVar].DrawCopy("p");
1525  }
1526  if (fDecayChannel==22) {
1527  TCanvas * c4 =new TCanvas(Form("c4New_%d",fDecayChannel),"Vars 12, 13, 14, 15",1100,1200);
1528  c4->Divide(3,4);
1529  iPad=1;
1530  for(Int_t iVar=12; iVar<16; iVar++){
1531  c4->cd(iPad++);
1532  h[0][iVar].DrawCopy("p");
1533  c4->cd(iPad++);
1534  h[1][iVar].DrawCopy("p");
1535  c4->cd(iPad++);
1536  h[2][iVar].DrawCopy("p");
1537  }
1538  }
1539  }
1540 
1541  /*
1542  THnSparseD* hcorr = dynamic_cast<THnSparseD*> (GetOutputData(3));
1543 
1544  TH2D* corr1 = hcorr->Projection(0,2);
1545  TH2D* corr2 = hcorr->Projection(1,3);
1546 
1547  TCanvas * c7 =new TCanvas(Form("c7New_%d",fDecayChannel),"",800,400);
1548  c7->Divide(2,1);
1549  c7->cd(1);
1550  corr1->DrawCopy("text");
1551  c7->cd(2);
1552  corr2->DrawCopy("text");
1553  */
1554  TFile* file_projection = new TFile("CFtaskHFprojectionNew.root","RECREATE");
1555 
1556  // corr1->Write();
1557  // corr2->Write();
1558 
1559  for(Int_t iC=0;iC<nvarToPlot; iC++){
1560  for(Int_t iStep=0;iStep<3;iStep++){
1561  h[iStep][iC].Write(Form("Step%d_%s",iStep,titles[iC].Data()));
1562  }
1563  }
1564  file_projection->Close();
1565  for (Int_t ih = 0; ih<3; ih++) delete [] h[ih];
1566  delete [] h;
1567  delete [] titles;
1568 
1569 }
1570 
1571 //___________________________________________________________________________
1573 {
1574  //HERE ONE CAN CREATE OUTPUT OBJECTS, IN PARTICULAR IF THE OBJECT PARAMETERS DON'T NEED
1575  //TO BE SET BEFORE THE EXECUTION OF THE TASK
1576  //
1577  Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
1578 
1579  //slot #1
1580  OpenFile(1);
1581  const char* nameoutput=GetOutputSlot(1)->GetContainer()->GetName();
1582  fHistEventsProcessed = new TH1I(nameoutput,"",6,0,6) ;
1583  fHistEventsProcessed->GetXaxis()->SetBinLabel(1,"Events processed (all)");
1584  fHistEventsProcessed->GetXaxis()->SetBinLabel(2,"Events analyzed (after selection)");
1585  fHistEventsProcessed->GetXaxis()->SetBinLabel(3,"Candidates processed (all)");
1586  fHistEventsProcessed->GetXaxis()->SetBinLabel(4,"Candidates already filled");
1587  fHistEventsProcessed->GetXaxis()->SetBinLabel(5,"Candidates OK in FillRecoCand");
1588  fHistEventsProcessed->GetXaxis()->SetBinLabel(6,"Candidates failing in FillRecoCand");
1589 
1590  PostData(1,fHistEventsProcessed) ;
1591  PostData(2,fCFManager->GetParticleContainer()) ;
1592  PostData(3,fCorrelation) ;
1593 
1594 }
1595 
1596 
1597 //_________________________________________________________________________
1599  // ad-hoc weight function from ratio of
1600  // pt spectra from FONLL 2.76 TeV and
1601  // pt spectra from MC production LHC12a17a (PYTHIA Perugia0 with pthard bins)
1602  if(fFuncWeight) delete fFuncWeight;
1603  fFuncWeight=new TF1("funcWeight","[0]+[1]*TMath::Exp(-[2]*x)",0.,50.);
1604  fFuncWeight->SetParameter(0,4.63891e-02);
1605  fFuncWeight->SetParameter(1,1.51674e+01);
1606  fFuncWeight->SetParameter(2,4.09941e-01);
1607  fUseWeight=kTRUE;
1608 }
1609 //_________________________________________________________________________
1611  // ad-hoc weight function from ratio of
1612  // D0 pt spectra in PbPb 2011 0-10% centrality and
1613  // pt spectra from MC production LHC12a17a (PYTHIA Perugia0 with pthard bins)
1614  if(fFuncWeight) delete fFuncWeight;
1615  fFuncWeight=new TF1("funcWeight","[0]+[1]/TMath::Power(x,[2])",0.05,50.);
1616  fFuncWeight->SetParameter(0,1.43116e-02);
1617  fFuncWeight->SetParameter(1,4.37758e+02);
1618  fFuncWeight->SetParameter(2,3.08583);
1619  fUseWeight=kTRUE;
1620 }
1621 
1622 //_________________________________________________________________________
1624  // weight function from the ratio of the LHC12a17b MC
1625  // and FONLL calculations for pp data
1626  if(fFuncWeight) delete fFuncWeight;
1627  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,50.);
1628  fFuncWeight->SetParameters(1.92381e+01, 5.05055e+00, 1.05314e+01, 2.5, 1.88214e-03, 3.44871e+00, -9.74325e-02, 1.97671e+00, -3.21278e-01);
1629  fUseWeight=kTRUE;
1630 }
1631 
1632 //_________________________________________________________________________
1634  // weight function from the ratio of the LHC12a17b MC
1635  // and FONLL calculations for pp data
1636  // corrected by the BAMPS Raa calculation for 30-50% CC
1637  if(fFuncWeight) delete fFuncWeight;
1638  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,50.);
1639  fFuncWeight->SetParameters(6.10443e+00, 1.53487e+00, 1.99474e+00, 2.5, 5.51172e-03, 5.86590e+00, -5.46963e-01, 9.41201e-02, -1.64323e-01);
1640  fUseWeight=kTRUE;
1641 }
1642 
1643 //_________________________________________________________________________
1645  // weight function from the ratio of the LHC16i2a MC
1646  // 1.5-14 GeV/c using data and 1-1.5, 14-50 GeV/c using FONLL calculations
1647 
1648  if(fHistoPtWeight) delete fHistoPtWeight;
1649  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1650  Float_t binc[500]={ 1.695705, 1.743693, 1.790289, 1.835410, 1.878981, 1.920938, 1.961223, 1.999787, 2.036589, 2.071597, 2.104784, 2.136132, 2.165629, 2.193270, 2.219057, 2.174545, 2.064698, 1.959489, 1.858770, 1.762396, 1.670224, 1.582115, 1.497931, 1.417541, 1.340814, 1.267622, 1.197842, 1.131352, 1.068033, 1.007770, 0.950450, 0.895963, 0.844202, 0.795062, 0.748441, 0.704241, 0.662363, 0.622715, 0.585204, 0.549742, 0.516242, 0.484620, 0.454795, 0.426686, 0.400217, 0.375314, 0.351903, 0.329915, 0.309281, 0.289936, 0.271816, 0.254860, 0.239007, 0.224201, 0.210386, 0.197508, 0.185516, 0.174360, 0.163992, 0.154366, 0.145438, 0.137166, 0.129508, 0.122426, 0.115882, 0.109840, 0.104266, 0.099128, 0.094395, 0.090036, 0.086023, 0.082331, 0.078933, 0.075805, 0.072925, 0.070271, 0.067823, 0.065562, 0.063471, 0.061532, 0.059730, 0.058051, 0.056481, 0.055007, 0.053619, 0.052306, 0.051059, 0.049867, 0.048725, 0.047624, 0.046558, 0.045522, 0.044511, 0.043521, 0.042548, 0.041590, 0.040643, 0.039706, 0.038778, 0.037857, 0.036944, 0.036039, 0.035141, 0.034251, 0.033370, 0.032500, 0.031641, 0.030796, 0.029966, 0.029153, 0.028359, 0.027587, 0.026837, 0.026113, 0.025416, 0.024748, 0.024111, 0.023507, 0.022937, 0.022402, 0.021904, 0.021443, 0.021020, 0.020634, 0.020286, 0.019974, 0.019698, 0.019455, 0.019244, 0.019062, 0.018905, 0.018770, 0.018652, 0.018545, 0.018444, 0.018342, 0.018231, 0.018102, 0.017947, 0.017755, 0.017536, 0.017327, 0.017120, 0.016915, 0.016713, 0.016514, 0.016317, 0.016122, 0.015929, 0.015739, 0.015551, 0.015366, 0.015182, 0.015001, 0.014822, 0.014645, 0.014470, 0.014297, 0.014127, 0.013958, 0.013791, 0.013627, 0.013464, 0.013303, 0.013145, 0.012988, 0.012833, 0.012679, 0.012528, 0.012378, 0.012231, 0.012085, 0.011940, 0.011798, 0.011657, 0.011518, 0.011380, 0.011244, 0.011110, 0.010978, 0.010846, 0.010717, 0.010589, 0.010463, 0.010338, 0.010214, 0.010092, 0.009972, 0.009853, 0.009735, 0.009619, 0.009504, 0.009391, 0.009279, 0.009168, 0.009058, 0.008950, 0.008843, 0.008738, 0.008633, 0.008530, 0.008429, 0.008328, 0.008229, 0.008130, 0.008033, 0.007937, 0.007843, 0.007749, 0.007656, 0.007565, 0.007475, 0.007385, 0.007297, 0.007210, 0.007124, 0.007039, 0.006955, 0.006872, 0.006790, 0.006709, 0.006629, 0.006550, 0.006471, 0.006394, 0.006318, 0.006242, 0.006168, 0.006094, 0.006022, 0.005950, 0.005879, 0.005808, 0.005739, 0.005671, 0.005603, 0.005536, 0.005470, 0.005405, 0.005340, 0.005276, 0.005213, 0.005151, 0.005090, 0.005029, 0.004969, 0.004909, 0.004851, 0.004793, 0.004736, 0.004679, 0.004623, 0.004568, 0.004514, 0.004460, 0.004406, 0.004354, 0.004302, 0.004251, 0.004200, 0.004150, 0.004100, 0.004051, 0.004003, 0.003955, 0.003908, 0.003861, 0.003815, 0.003770, 0.003725, 0.003680, 0.003636, 0.003593, 0.003550, 0.003507, 0.003466, 0.003424, 0.003383, 0.003343, 0.003303, 0.003264, 0.003225, 0.003186, 0.003148, 0.003110, 0.003073, 0.003037, 0.003000, 0.002965, 0.002929, 0.002894, 0.002860, 0.002826, 0.002792, 0.002758, 0.002726, 0.002693, 0.002661, 0.002629, 0.002598, 0.002567, 0.002536, 0.002506, 0.002476, 0.002446, 0.002417, 0.002388, 0.002360, 0.002332, 0.002304, 0.002276, 0.002249, 0.002222, 0.002196, 0.002169, 0.002144, 0.002118, 0.002093, 0.002068, 0.002043, 0.002019, 0.001995, 0.001971, 0.001947, 0.001924, 0.001901, 0.001878, 0.001856, 0.001834, 0.001812, 0.001790, 0.001769, 0.001748, 0.001727, 0.001706, 0.001686, 0.001666, 0.001646, 0.001626, 0.001607, 0.001588, 0.001569, 0.001550, 0.001531, 0.001513, 0.001495, 0.001477, 0.001460, 0.001442, 0.001425, 0.001408, 0.001391, 0.001374, 0.001358, 0.001342, 0.001326, 0.001310, 0.001294, 0.001279, 0.001264, 0.001249, 0.001234, 0.001219, 0.001204, 0.001190, 0.001176, 0.001162, 0.001148, 0.001134, 0.001121, 0.001107, 0.001094, 0.001081, 0.001068, 0.001055, 0.001043, 0.001030, 0.001018, 0.001006, 0.000994, 0.000982, 0.000970, 0.000959, 0.000947, 0.000936, 0.000925, 0.000914, 0.000903, 0.000892, 0.000881, 0.000871, 0.000860, 0.000850, 0.000840, 0.000830, 0.000820, 0.000810, 0.000801, 0.000791, 0.000782, 0.000772, 0.000763, 0.000754, 0.000745, 0.000736, 0.000727, 0.000719, 0.000710, 0.000702, 0.000693, 0.000685, 0.000677, 0.000669, 0.000661, 0.000653, 0.000645, 0.000637, 0.000630, 0.000622, 0.000615, 0.000607, 0.000600, 0.000593, 0.000586, 0.000579, 0.000572, 0.000565, 0.000558, 0.000552, 0.000545, 0.000539, 0.000532, 0.000526, 0.000520, 0.000513, 0.000507, 0.000501, 0.000495, 0.000489, 0.000483, 0.000478, 0.000472, 0.000466, 0.000461, 0.000455, 0.000450, 0.000444, 0.000439, 0.000434, 0.000429, 0.000424, 0.000419, 0.000414, 0.000409, 0.000404, 0.000399, 0.000394, 0.000389, 0.000385, 0.000380, 0.000376, 0.000371, 0.000367, 0.000362, 0.000358, 0.000354, 0.000350, 0.000345, 0.000341, 0.000337, 0.000333, 0.000329, 0.000325, 0.000321, 0.000318, 0.000314, 0.000310, 0.000306, 0.000303, 0.000299, 0.000295, 0.000292, 0.000288, 0.000285, 0.000282, 0.000278, 0.000275, 0.000272, 0.000268, 0.000265, 0.000262, 0.000259, 0.000256, 0.000253, 0.000250, 0.000247, 0.000244, 0.000241, 0.000238, 0.000235};
1651  for(Int_t i=0; i<500; i++){
1652  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1653  }
1654  //SetWeightHistogram();
1655  fUseWeight=kTRUE;
1656 }
1657 //_________________________________________________________________________
1659  // weight function from the ratio of the LHC16i2a MC
1660  // using FONLL*Raa from Xu.Cao.Bass(LBT model)
1661 
1662  if(fHistoPtWeight) delete fHistoPtWeight;
1663  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1664  Float_t binc[500]={ -3.491009, -2.151267, -1.169817, -0.462113, 0.038852, 0.385901, 0.620406, 0.774498, 0.872869, 0.934235, 0.972536, 0.997905, 1.017465, 1.035981, 1.056389, 1.080233, 1.108019, 1.139503, 1.173928, 1.210210, 1.247090, 1.283254, 1.317421, 1.348413, 1.375204, 1.396948, 1.413000, 1.422920, 1.426469, 1.423596, 1.414424, 1.399224, 1.378394, 1.352429, 1.321897, 1.287417, 1.249627, 1.209171, 1.166675, 1.122735, 1.077901, 1.032675, 0.987496, 0.942748, 0.898751, 0.855766, 0.813999, 0.773607, 0.734700, 0.697350, 0.661596, 0.627448, 0.594895, 0.563911, 0.534455, 0.506477, 0.479923, 0.454732, 0.430845, 0.408201, 0.386738, 0.366399, 0.347127, 0.328866, 0.311564, 0.295172, 0.279641, 0.264928, 0.250988, 0.237781, 0.248506, 0.240198, 0.232287, 0.224750, 0.217563, 0.210707, 0.204160, 0.197906, 0.191927, 0.186209, 0.180735, 0.175494, 0.170472, 0.165657, 0.161039, 0.156606, 0.152350, 0.148261, 0.144331, 0.140552, 0.136916, 0.133416, 0.130046, 0.126800, 0.123671, 0.120654, 0.117744, 0.114937, 0.112226, 0.109608, 0.107080, 0.104636, 0.102273, 0.099988, 0.097778, 0.095638, 0.093567, 0.091561, 0.089618, 0.087735, 0.085910, 0.084141, 0.082424, 0.080759, 0.079143, 0.077574, 0.076051, 0.074571, 0.073134, 0.071737, 0.070379, 0.069059, 0.067775, 0.066526, 0.065311, 0.064128, 0.062977, 0.061856, 0.060764, 0.059700, 0.058664, 0.057654, 0.056670, 0.055710, 0.054775, 0.053862, 0.052972, 0.052103, 0.051255, 0.050428, 0.049620, 0.048831, 0.048061, 0.047308, 0.046573, 0.045855, 0.045152, 0.044466, 0.043795, 0.043139, 0.042498, 0.041870, 0.041256, 0.040656, 0.040068, 0.039493, 0.038930, 0.038379, 0.037839, 0.037310, 0.036793, 0.036286, 0.035789, 0.035302, 0.034825, 0.034358, 0.033900, 0.033451, 0.033010, 0.032578, 0.032155, 0.031740, 0.031332, 0.030932, 0.030540, 0.030155, 0.029778, 0.029407, 0.029043, 0.028686, 0.028335, 0.027991, 0.027653, 0.027320, 0.026994, 0.026674, 0.026359, 0.026049, 0.025745, 0.025447, 0.025153, 0.024864, 0.024581, 0.024302, 0.024027, 0.023758, 0.023492, 0.023232, 0.022975, 0.022723, 0.022474, 0.022230, 0.021990, 0.021754, 0.021521, 0.021292, 0.021066, 0.020845, 0.020626, 0.020411, 0.020199, 0.019991, 0.019786, 0.019584, 0.019385, 0.019189, 0.018995, 0.018805, 0.018618, 0.018433, 0.018251, 0.018072, 0.017895, 0.017721, 0.017549, 0.017380, 0.017214, 0.017049, 0.016887, 0.016727, 0.016570, 0.016415, 0.016262, 0.016111, 0.015962, 0.015815, 0.015670, 0.015527, 0.015386, 0.015247, 0.015110, 0.014974, 0.014841, 0.014709, 0.014579, 0.014450, 0.014324, 0.014199, 0.014075, 0.013953, 0.013833, 0.013714, 0.013597, 0.013481, 0.013367, 0.013254, 0.013143, 0.013033, 0.012924, 0.012817, 0.012711, 0.012606, 0.012503, 0.012401, 0.012300, 0.012200, 0.012102, 0.012004, 0.011908, 0.011813, 0.011719, 0.011626, 0.011535, 0.011444, 0.011355, 0.011266, 0.011179, 0.011092, 0.011007, 0.010922, 0.010839, 0.010756, 0.010675, 0.010594, 0.010514, 0.010435, 0.010357, 0.010280, 0.010204, 0.010128, 0.010053, 0.009980, 0.009907, 0.009834, 0.009763, 0.009692, 0.009622, 0.009553, 0.009485, 0.009417, 0.009350, 0.009284, 0.009218, 0.009153, 0.009089, 0.009026, 0.008963, 0.008901, 0.008839, 0.008778, 0.008718, 0.008658, 0.008599, 0.008540, 0.008483, 0.008425, 0.008368, 0.008312, 0.008257, 0.008202, 0.008147, 0.008093, 0.008040, 0.007987, 0.007934, 0.007883, 0.007831, 0.007780, 0.007730, 0.007680, 0.007631, 0.007582, 0.007533, 0.007485, 0.007438, 0.007390, 0.007344, 0.007298, 0.007252, 0.007206, 0.007161, 0.007117, 0.007073, 0.007029, 0.006986, 0.006943, 0.006900, 0.006858, 0.006817, 0.006775, 0.006734, 0.006694, 0.006653, 0.006613, 0.006574, 0.006535, 0.006496, 0.006457, 0.006419, 0.006381, 0.006344, 0.006307, 0.006270, 0.006233, 0.006197, 0.006161, 0.006126, 0.006090, 0.006055, 0.006021, 0.005986, 0.005952, 0.005918, 0.005885, 0.005852, 0.005819, 0.005786, 0.005754, 0.005722, 0.005690, 0.005658, 0.005627, 0.005596, 0.005565, 0.005534, 0.005504, 0.005474, 0.005444, 0.005415, 0.005385, 0.005356, 0.005327, 0.005299, 0.005270, 0.005242, 0.005214, 0.005186, 0.005159, 0.005132, 0.005104, 0.005078, 0.005051, 0.005025, 0.004998, 0.004972, 0.004946, 0.004921, 0.004895, 0.004870, 0.004845, 0.004820, 0.004796, 0.004771, 0.004747, 0.004723, 0.004699, 0.004675, 0.004651, 0.004628, 0.004605, 0.004582, 0.004559, 0.004536, 0.004514, 0.004491, 0.004469, 0.004447, 0.004425, 0.004404, 0.004382, 0.004361, 0.004339, 0.004318, 0.004297, 0.004277, 0.004256, 0.004235, 0.004215, 0.004195, 0.004175, 0.004155, 0.004135, 0.004116, 0.004096, 0.004077, 0.004058, 0.004039, 0.004020, 0.004001, 0.003982, 0.003964, 0.003945, 0.003927, 0.003909, 0.003891, 0.003873, 0.003855, 0.003837, 0.003820, 0.003802, 0.003785, 0.003768, 0.003751, 0.003734, 0.003717, 0.003700, 0.003684, 0.003667, 0.003651, 0.003634, 0.003618, 0.003602, 0.003586, 0.003570, 0.003555, 0.003539, 0.003523, 0.003508, 0.003493, 0.003477, 0.003462, 0.003447, 0.003432, 0.003417, 0.003403, 0.003388, 0.003373, 0.003359, 0.003345, 0.003330, 0.003316, 0.003302, 0.003288, 0.003274, 0.003260, 0.003246, 0.003233, 0.003219, 0.003206, 0.003192};
1665  for(Int_t i=0; i<500; i++){
1666  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1667  }
1668  //SetWeightHistogram();
1669  fUseWeight=kTRUE;
1670 }
1671 //_________________________________________________________________________
1673  // weight function from the ratio of the LHC16i2a+b+c MC
1674  // and FONLL calculations for pp data
1675 
1676  if(fHistoPtWeight) delete fHistoPtWeight;
1677  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1678  Float_t binc[400]={1.118416, 1.003458, 0.935514, 0.907222, 0.904359, 0.913668, 0.933906, 0.963898, 0.996388, 1.031708, 1.066404, 1.099683, 1.125805, 1.145181, 1.165910, 1.181905, 1.193425, 1.203891, 1.204726, 1.209411, 1.209943, 1.204763, 1.205291, 1.198912, 1.197390, 1.182005, 1.184194, 1.175994, 1.167881, 1.158348, 1.147190, 1.139833, 1.126940, 1.123322, 1.108389, 1.102199, 1.089464, 1.075874, 1.061964, 1.051429, 1.038113, 1.026668, 1.011441, 0.998567, 0.987658, 0.972434, 0.950068, 0.940758, 0.916880, 0.911931, 0.894512, 0.878691, 0.860589, 0.848025, 0.830774, 0.819399, 0.801134, 0.775276, 0.766382, 0.750495, 0.736935, 0.717529, 0.702637, 0.689152, 0.671334, 0.652030, 0.635696, 0.621365, 0.608362, 0.599019, 0.576024, 0.562136, 0.550938, 0.533587, 0.516410, 0.509744, 0.501655, 0.487402, 0.476469, 0.463762, 0.445979, 0.438088, 0.422214, 0.417467, 0.404357, 0.391450, 0.379996, 0.371201, 0.361497, 0.352912, 0.343189, 0.329183, 0.327662, 0.310783, 0.304525, 0.301007, 0.293306, 0.278332, 0.274419, 0.267361, 0.261459, 0.255514, 0.249293, 0.241129, 0.237600, 0.231343, 0.221982, 0.216872, 0.211094, 0.206954, 0.202333, 0.196572, 0.193274, 0.188240, 0.181817, 0.178364, 0.173614, 0.167135, 0.166055, 0.163423, 0.156557, 0.155821, 0.151985, 0.144909, 0.145062, 0.139720, 0.138873, 0.131892, 0.129969, 0.126509, 0.126978, 0.120451, 0.117661, 0.116300, 0.115604, 0.112215, 0.109237, 0.107720, 0.106419, 0.102050, 0.102777, 0.097406, 0.098447, 0.095964, 0.093868, 0.092430, 0.089329, 0.088249, 0.085881, 0.084417, 0.085498, 0.082444, 0.079151, 0.079565, 0.077811, 0.077293, 0.075218, 0.072445, 0.073054, 0.071545, 0.070279, 0.068046, 0.067854, 0.068092, 0.065378, 0.064405, 0.062060, 0.063391, 0.061718, 0.059616, 0.058913, 0.058895, 0.058311, 0.056320, 0.056527, 0.055349, 0.053701, 0.054735, 0.052264, 0.051277, 0.051554, 0.050545, 0.048995, 0.049507, 0.048466, 0.048156, 0.046809, 0.047600, 0.046078, 0.044801, 0.044113, 0.043700, 0.043530, 0.043396, 0.042556, 0.041048, 0.041657, 0.040394, 0.041314, 0.040720, 0.039656, 0.038478, 0.039276, 0.038777, 0.037730, 0.036918, 0.036466, 0.035827, 0.035285, 0.035963, 0.034371, 0.034757, 0.033205, 0.033666, 0.033266, 0.032583, 0.033570, 0.032102, 0.032107, 0.031464, 0.032160, 0.030091, 0.030564, 0.029464, 0.029613, 0.029626, 0.029512, 0.029324, 0.028607, 0.027628, 0.027251, 0.027072, 0.027077, 0.026724, 0.026961, 0.026303, 0.026237, 0.025454, 0.025133, 0.025365, 0.026014, 0.024807, 0.023901, 0.023459, 0.023405, 0.023654, 0.023981, 0.023675, 0.022493, 0.022781, 0.021801, 0.021704, 0.022372, 0.021189, 0.020681, 0.020779, 0.021324, 0.020558, 0.020901, 0.020586, 0.020808, 0.019276, 0.019516, 0.019706, 0.018935, 0.018632, 0.018516, 0.019187, 0.018916, 0.018039, 0.018208, 0.018045, 0.017628, 0.017916, 0.017711, 0.017838, 0.017222, 0.016565, 0.015733, 0.016264, 0.015826, 0.016090, 0.016622, 0.015802, 0.016621, 0.015441, 0.015309, 0.014860, 0.014935, 0.014968, 0.014443, 0.014485, 0.015136, 0.014078, 0.014414, 0.013908, 0.014071, 0.014078, 0.013766, 0.013436, 0.013507, 0.013480, 0.013224, 0.013041, 0.013935, 0.012885, 0.012453, 0.012528, 0.012492, 0.012225, 0.012542, 0.012706, 0.012136, 0.011902, 0.011560, 0.011448, 0.011861, 0.011271, 0.011831, 0.011159, 0.011171, 0.010966, 0.011311, 0.011002, 0.011130, 0.010995, 0.010450, 0.010663, 0.010678, 0.010492, 0.009861, 0.010507, 0.009916, 0.010121, 0.010029, 0.010046, 0.009370, 0.009647, 0.010104, 0.009282, 0.009830, 0.009403, 0.009148, 0.009172, 0.008893, 0.009158, 0.009019, 0.008780, 0.008579, 0.009063, 0.008634, 0.008988, 0.008265, 0.008581, 0.008575, 0.008690, 0.008181, 0.008352, 0.008150, 0.008430, 0.008256, 0.008119, 0.008453, 0.008447, 0.008021, 0.007938, 0.008025, 0.007718, 0.008127, 0.007651, 0.007590, 0.007316, 0.007839, 0.007504, 0.007341, 0.007527, 0.007263, 0.007668, 0.007306, 0.007271, 0.006910, 0.007257, 0.007260, 0.006810, 0.006967, 0.006887, 0.006867, 0.007202, 0.006829, 0.006370, 0.006710, 0.006417, 0.006361, 0.006800, 0.006410, 0.006323, 0.006790, 0.006322, 0.006673, 0.006547};
1679  for(Int_t i=0; i<400; i++){
1680  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1681  }
1682  //SetWeightHistogram();
1683  fUseWeight=kTRUE;
1684 }
1685 
1686 //_________________________________________________________________________
1688  // weight function from the ratio of the LHC16i2a+b+c MC
1689  // and FONLL calculations for pp data
1690  // corrected by the BAMPS Raa calculation for 30-50% CC
1691  if(fHistoPtWeight) delete fHistoPtWeight;
1692  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1693  Float_t binc[400]={2.166180, 1.866117, 1.667595, 1.547176, 1.486661, 1.457891, 1.426949, 1.399055, 1.383278, 1.349383, 1.317009, 1.282321, 1.234257, 1.181136, 1.136655, 1.087523, 1.037912, 0.993256, 0.944746, 0.900948, 0.865869, 0.827193, 0.794424, 0.757723, 0.733020, 0.700164, 0.682189, 0.659872, 0.637918, 0.615749, 0.593020, 0.574402, 0.556158, 0.542663, 0.525494, 0.516038, 0.503629, 0.490980, 0.479143, 0.469005, 0.457749, 0.447668, 0.436803, 0.427073, 0.418282, 0.407867, 0.395093, 0.387861, 0.374742, 0.369462, 0.360146, 0.351991, 0.342990, 0.336259, 0.327730, 0.322382, 0.314602, 0.303874, 0.299820, 0.293049, 0.287539, 0.280329, 0.274866, 0.269939, 0.263299, 0.256057, 0.249215, 0.242170, 0.235704, 0.230709, 0.220529, 0.213921, 0.208394, 0.202424, 0.196700, 0.194943, 0.192620, 0.187894, 0.184411, 0.180204, 0.172915, 0.169077, 0.162201, 0.159636, 0.153904, 0.148296, 0.143282, 0.139306, 0.135561, 0.132342, 0.128696, 0.123444, 0.122873, 0.116544, 0.114197, 0.112878, 0.110018, 0.104547, 0.103222, 0.100707, 0.098622, 0.096513, 0.094295, 0.091334, 0.090122, 0.087870, 0.084894, 0.083729, 0.082265, 0.081404, 0.080323, 0.078750, 0.078132, 0.076781, 0.074823, 0.074050, 0.072614, 0.070093, 0.069828, 0.068907, 0.066189, 0.066054, 0.064600, 0.061757, 0.061986, 0.059862, 0.059656, 0.056807, 0.055956, 0.054386, 0.054507, 0.051629, 0.050358, 0.049702, 0.049331, 0.047814, 0.046476, 0.045762, 0.045142, 0.043224, 0.043484, 0.041282, 0.041794, 0.040809, 0.039985, 0.039439, 0.038181, 0.037782, 0.036831, 0.036264, 0.036790, 0.035535, 0.034173, 0.034409, 0.033659, 0.033308, 0.032290, 0.030981, 0.031121, 0.030361, 0.029708, 0.028653, 0.028461, 0.028449, 0.027208, 0.026697, 0.025623, 0.026069, 0.025279, 0.024332, 0.024341, 0.024629, 0.024677, 0.024117, 0.024490, 0.024257, 0.023804, 0.024537, 0.023692, 0.023502, 0.023888, 0.023673, 0.023193, 0.023684, 0.023429, 0.023521, 0.023014, 0.023346, 0.022544, 0.021866, 0.021477, 0.021224, 0.021089, 0.020972, 0.020515, 0.019739, 0.019982, 0.019328, 0.019719, 0.019387, 0.018833, 0.018227, 0.018558, 0.018276, 0.017738, 0.017460, 0.017365, 0.017178, 0.017033, 0.017478, 0.016817, 0.017119, 0.016463, 0.016802, 0.016711, 0.016475, 0.017083, 0.016441, 0.016548, 0.016320, 0.016786, 0.015804, 0.016153, 0.015668, 0.015843, 0.015810, 0.015651, 0.015454, 0.014981, 0.014376, 0.014089, 0.013906, 0.013818, 0.013549, 0.013580, 0.013160, 0.013040, 0.012566, 0.012324, 0.012353, 0.012582, 0.011915, 0.011401, 0.011112, 0.011008, 0.011046, 0.011119, 0.010954, 0.010439, 0.010604, 0.010179, 0.010163, 0.010507, 0.009981, 0.009771, 0.009846, 0.010134, 0.009798, 0.009991, 0.009869, 0.010005, 0.009295, 0.009438, 0.009557, 0.009210, 0.009088, 0.009057, 0.009412, 0.009306, 0.008899, 0.009009, 0.008952, 0.008764, 0.008926, 0.008842, 0.008924, 0.008634, 0.008322, 0.007920, 0.008205, 0.008000, 0.008151, 0.008438, 0.008037, 0.008472, 0.007886, 0.007835, 0.007621, 0.007675, 0.007707, 0.007452, 0.007489, 0.007841, 0.007308, 0.007497, 0.007248, 0.007348, 0.007367, 0.007227, 0.007097, 0.007179, 0.007209, 0.007115, 0.007059, 0.007588, 0.007058, 0.006862, 0.006945, 0.006965, 0.006856, 0.007075, 0.007209, 0.006925, 0.006830, 0.006672, 0.006645, 0.006923, 0.006615, 0.006982, 0.006622, 0.006666, 0.006579, 0.006823, 0.006673, 0.006786, 0.006740, 0.006440, 0.006606, 0.006650, 0.006568, 0.006206, 0.006646, 0.006305, 0.006468, 0.006442, 0.006486, 0.006080, 0.006291, 0.006622, 0.006113, 0.006506, 0.006254, 0.006114, 0.006161, 0.006002, 0.006211, 0.006146, 0.006012, 0.005902, 0.006264, 0.005996, 0.006271, 0.005793, 0.006043, 0.006067, 0.006177, 0.005842, 0.005991, 0.005872, 0.006102, 0.006003, 0.005930, 0.006201, 0.006224, 0.005937, 0.005901, 0.005992, 0.005788, 0.006121, 0.005787, 0.005766, 0.005582, 0.006006, 0.005774, 0.005672, 0.005841, 0.005660, 0.006000, 0.005741, 0.005737, 0.005475, 0.005773, 0.005799, 0.005462, 0.005610, 0.005569, 0.005574, 0.005871, 0.005589, 0.005234, 0.005535, 0.005314, 0.005288, 0.005676, 0.005371, 0.005319, 0.005734, 0.005360, 0.005679, 0.005593};
1694  for(Int_t i=0; i<400; i++){
1695  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1696  }
1697  fUseWeight=kTRUE;
1698 }
1699 
1700 //_________________________________________________________________________
1702  // weight function from the ratio of the LHC16i2a+b+c MC
1703  // and FONLL calculations for pp data
1704  // corrected by the TAMU Raa calculation for 0-10% CC (not available in 30-50% CC)
1705  if(fHistoPtWeight) delete fHistoPtWeight;
1706  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1707  Float_t binc[400]={1.179906, 1.091249, 1.047774, 1.045579, 1.071679, 1.112413, 1.167414, 1.236240, 1.310301, 1.390289, 1.471711, 1.553389, 1.626886, 1.692115, 1.760647, 1.813658, 1.850817, 1.886699, 1.907671, 1.934832, 1.955433, 1.966727, 1.987262, 1.996316, 2.013326, 1.973926, 1.931144, 1.871654, 1.812942, 1.752718, 1.690846, 1.635303, 1.572611, 1.523510, 1.459790, 1.402510, 1.331908, 1.261575, 1.192241, 1.127915, 1.061798, 0.998830, 0.933514, 0.871774, 0.812936, 0.762844, 0.719340, 0.686587, 0.644108, 0.615714, 0.579512, 0.545254, 0.510508, 0.479884, 0.447423, 0.426154, 0.408934, 0.388264, 0.376424, 0.361389, 0.347757, 0.331685, 0.318029, 0.305285, 0.290922, 0.278523, 0.269807, 0.262025, 0.254878, 0.249325, 0.238179, 0.230899, 0.224792, 0.216253, 0.207879, 0.204465, 0.201153, 0.195373, 0.190926, 0.185773, 0.178589, 0.175371, 0.168959, 0.167004, 0.161705, 0.156809, 0.152788, 0.149806, 0.146429, 0.143478, 0.140037, 0.134813, 0.134679, 0.128205, 0.126078, 0.125038, 0.122214, 0.116329, 0.115044, 0.112427, 0.110279, 0.108098, 0.105784, 0.102628, 0.101429, 0.099101, 0.095464, 0.093631, 0.091491, 0.090045, 0.088374, 0.086188, 0.085067, 0.083168, 0.080636, 0.079414, 0.077610, 0.075013, 0.074825, 0.073932, 0.071106, 0.071050, 0.069574, 0.066593, 0.066924, 0.064876, 0.065064, 0.062345, 0.061980, 0.060859, 0.061616, 0.058952, 0.058079, 0.057894, 0.058031, 0.056604, 0.055180, 0.054490, 0.053909, 0.051768, 0.052210, 0.049552, 0.050152, 0.048955, 0.047953, 0.047224, 0.045588, 0.044985, 0.043728, 0.042934, 0.043434, 0.041834, 0.040118, 0.040281, 0.039348, 0.038987, 0.037793, 0.036258, 0.036420, 0.035528, 0.034761, 0.033524, 0.033296, 0.033280, 0.031825, 0.031351, 0.030329, 0.031103, 0.030401, 0.029481, 0.029247, 0.029352, 0.029174, 0.028286, 0.028500, 0.028017, 0.027293, 0.027932, 0.026779, 0.026379, 0.026628, 0.026211, 0.025508, 0.025877, 0.025433, 0.025328, 0.024636, 0.025069, 0.024282, 0.023625, 0.023278, 0.023074, 0.023000, 0.022943, 0.022514, 0.021767, 0.022180, 0.021594, 0.022175, 0.021944, 0.021456, 0.020901, 0.021419, 0.021230, 0.020738, 0.020322, 0.020055, 0.019686, 0.019371, 0.019725, 0.018835, 0.019029, 0.018163, 0.018398, 0.018163, 0.017719, 0.018126, 0.017208, 0.017086, 0.016622, 0.016865, 0.015663, 0.015791, 0.015108, 0.015069, 0.015033, 0.015006, 0.014940, 0.014604, 0.014133, 0.013968, 0.013904, 0.013934, 0.013780, 0.013930, 0.013727, 0.013940, 0.013763, 0.013826, 0.014192, 0.014801, 0.014347, 0.014048, 0.014009, 0.014197, 0.014571, 0.014999, 0.015030, 0.014491, 0.014891, 0.014456, 0.014596, 0.015256, 0.014648, 0.014492, 0.014756, 0.015344, 0.014986, 0.015433, 0.015394, 0.015756, 0.014778, 0.015145, 0.015478, 0.015051, 0.014986, 0.015067, 0.015793, 0.015748, 0.015188, 0.015502, 0.015533, 0.015340, 0.015759, 0.015745, 0.016026, 0.015635, 0.015194, 0.014579, 0.015225, 0.014963, 0.015365, 0.016030, 0.015387, 0.016341, 0.015327, 0.015340, 0.015030, 0.015246, 0.015420, 0.015015, 0.015195, 0.016021, 0.015034, 0.015528, 0.015114, 0.015423, 0.015564, 0.015348, 0.015107, 0.015314, 0.015411, 0.015243, 0.015154, 0.016324, 0.015215, 0.014823, 0.015030, 0.015104, 0.014896, 0.015400, 0.015721, 0.015131, 0.014951, 0.014630, 0.014597, 0.015235, 0.014583, 0.015418, 0.014648, 0.014769, 0.014601, 0.015167, 0.014857, 0.015134, 0.015053, 0.014405, 0.014800, 0.014921, 0.014760, 0.013966, 0.014979, 0.014230, 0.014620, 0.014581, 0.014701, 0.013799, 0.014299, 0.015071, 0.013931, 0.014846, 0.014290, 0.013988, 0.014113, 0.013767, 0.014263, 0.014131, 0.013840, 0.013604, 0.014456, 0.013853, 0.014505, 0.013416, 0.014010, 0.014081, 0.014352, 0.013589, 0.013952, 0.013690, 0.014241, 0.014024, 0.013868, 0.014517, 0.014587, 0.013927, 0.013857, 0.014084, 0.013619, 0.014417, 0.013644, 0.013607, 0.013185, 0.014200, 0.013665, 0.013437, 0.013849, 0.013431, 0.014252, 0.013648, 0.013652, 0.013039, 0.013761, 0.013836, 0.013043, 0.013408, 0.013319, 0.013344, 0.014065, 0.013400, 0.012560, 0.013294, 0.012773, 0.012721, 0.013663, 0.012939, 0.012823, 0.013835, 0.012942, 0.013723, 0.013525};
1708  for(Int_t i=0; i<400; i++){
1709  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1710  }
1711  fUseWeight=kTRUE;
1712 }
1713 
1714 //_________________________________________________________________________
1716  // weight function from the ratio of the LHC16i2a MC
1717  // 2.5-14 GeV/c using data and 0-2.5, 14-50 GeV/c using FONLL calculations
1718 
1719  if(fHistoPtWeight) delete fHistoPtWeight;
1720  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1721  Float_t binc[500]={ 1.977386, 1.092380, 0.982069, 0.990772, 1.031869, 1.075578, 1.121814, 1.160738, 1.194926, 1.223790, 1.248790, 1.265487,
1722  1.280118, 1.292664, 1.302578, 1.308750, 1.316914, 1.321336, 1.325862, 1.335865, 1.330973, 1.338854, 1.347197, 1.355202,
1723  1.345868, 1.306835, 1.217713, 1.150661, 1.082328, 1.016336, 0.961361, 0.909377, 0.859229, 0.808615, 0.770923, 0.726400,
1724  0.690444, 0.656639, 0.626977, 0.601282, 0.565640, 0.541549, 0.517613, 0.492610, 0.467891, 0.450866, 0.427611, 0.405115,
1725  0.393432, 0.367097, 0.355256, 0.344176, 0.327230, 0.308159, 0.299667, 0.288000, 0.278949, 0.263341, 0.250445, 0.243064,
1726  0.232859, 0.221800, 0.214465, 0.207126, 0.197129, 0.188575, 0.186439, 0.179715, 0.170882, 0.164423, 0.158682, 0.154019,
1727  0.150277, 0.144272, 0.137206, 0.135669, 0.128931, 0.125974, 0.121932, 0.119566, 0.113806, 0.112343, 0.107325, 0.106804,
1728  0.104220, 0.098339, 0.095757, 0.095992, 0.092098, 0.089896, 0.087719, 0.086209, 0.085378, 0.082050, 0.078781, 0.078904,
1729  0.077688, 0.077198, 0.075539, 0.071257, 0.071342, 0.070415, 0.069445, 0.067272, 0.064635, 0.065670, 0.063817, 0.062011,
1730  0.060226, 0.058354, 0.058203, 0.057580, 0.055477, 0.055900, 0.054993, 0.053452, 0.052578, 0.051701, 0.050199, 0.049844,
1731  0.047829, 0.047402, 0.046873, 0.044984, 0.045633, 0.044068, 0.043317, 0.042371, 0.042091, 0.042391, 0.041007, 0.039471,
1732  0.038575, 0.038065, 0.039097, 0.037241, 0.035288, 0.035440, 0.035264, 0.033790, 0.033902, 0.033853, 0.032486, 0.031943,
1733  0.031140, 0.030939, 0.030288, 0.029462, 0.029969, 0.028097, 0.028703, 0.028627, 0.027646, 0.027564, 0.026505, 0.026356,
1734  0.025599, 0.026124, 0.025300, 0.024600, 0.024092, 0.024186, 0.023315, 0.023520, 0.023087, 0.022226, 0.022345, 0.021455,
1735  0.020492, 0.021519, 0.020416, 0.020084, 0.020114, 0.019717, 0.019508, 0.018334, 0.018877, 0.018658, 0.018210, 0.017702,
1736  0.018155, 0.017342, 0.016846, 0.017155, 0.016306, 0.016247, 0.016075, 0.015419, 0.015835, 0.016264, 0.015473, 0.015212,
1737  0.014994, 0.014338, 0.015062, 0.014039, 0.014740, 0.014412, 0.014111, 0.013556, 0.013372, 0.012951, 0.012977, 0.013086,
1738  0.012727, 0.012118, 0.012176, 0.012056, 0.012350, 0.011744, 0.011840, 0.011740, 0.012028, 0.011028, 0.010922, 0.011132,
1739  0.011492, 0.010939, 0.011151, 0.010446, 0.010507, 0.009898, 0.010788, 0.010553, 0.010305, 0.010137, 0.009395, 0.009406,
1740  0.009338, 0.009635, 0.009477, 0.009497, 0.008915, 0.009116, 0.009080, 0.009294, 0.008765, 0.008222, 0.008483, 0.008666,
1741  0.008659, 0.008378, 0.008100, 0.008121, 0.008041, 0.007868, 0.008032, 0.008100, 0.008079, 0.007581, 0.007421, 0.007118,
1742  0.007416, 0.007828, 0.007152, 0.007088, 0.007122, 0.007133, 0.006934, 0.007103, 0.006555, 0.007113, 0.006829, 0.006883,
1743  0.006288, 0.006291, 0.006312, 0.006090, 0.006457, 0.006410, 0.006449, 0.005728, 0.006082, 0.006032, 0.005872, 0.005989,
1744  0.005934, 0.005962, 0.005698, 0.005851, 0.005615, 0.005442, 0.005838, 0.005589, 0.005422, 0.005286, 0.005219, 0.005153,
1745  0.005222, 0.005520, 0.004971, 0.005049, 0.005134, 0.004912, 0.004870, 0.004990, 0.005039, 0.004782, 0.004498, 0.004962,
1746  0.004755, 0.004995, 0.004437, 0.004686, 0.004753, 0.004703, 0.004486, 0.004614, 0.004152, 0.004107, 0.004131, 0.004349,
1747  0.004254, 0.004112, 0.004103, 0.004045, 0.004095, 0.004148, 0.004417, 0.004104, 0.003765, 0.003868, 0.004080, 0.003937,
1748  0.004091, 0.003892, 0.003849, 0.003681, 0.003834, 0.003530, 0.003934, 0.003552, 0.003714, 0.003282, 0.003898, 0.003909,
1749  0.003685, 0.003800, 0.003469, 0.003311, 0.003483, 0.003242, 0.003083, 0.003145, 0.003158, 0.003073, 0.003331, 0.003388,
1750  0.003156, 0.002935, 0.003256, 0.003261, 0.002972, 0.002966, 0.003312, 0.003253, 0.003122, 0.003075, 0.002978, 0.003029,
1751  0.002883, 0.002793, 0.003039, 0.002905, 0.002511, 0.002779, 0.002964, 0.002755, 0.002747, 0.002863, 0.002777, 0.002514,
1752  0.002775, 0.002845, 0.002427, 0.002540, 0.002406, 0.002490, 0.002592, 0.002457, 0.002560, 0.002223, 0.002582, 0.002725,
1753  0.002456, 0.002258, 0.002419, 0.002630, 0.002263, 0.002158, 0.002518, 0.002364, 0.002034, 0.002077, 0.002132, 0.002602,
1754  0.002309, 0.002357, 0.002333, 0.002194, 0.002213, 0.002270, 0.002202, 0.002308, 0.002042, 0.002417, 0.002220, 0.002359,
1755  0.002305, 0.002082, 0.002036, 0.002075, 0.002176, 0.002291, 0.002174, 0.002057, 0.001983, 0.001972, 0.001997, 0.001875,
1756  0.001958, 0.001838, 0.001895, 0.001868, 0.001996, 0.001807, 0.001765, 0.002055, 0.001933, 0.001797, 0.001908, 0.001816,
1757  0.001790, 0.001774, 0.001731, 0.002141, 0.001511, 0.001603, 0.002065, 0.001799, 0.001736, 0.001954, 0.001836, 0.001729,
1758  0.001817, 0.001671, 0.001766, 0.001652, 0.001706, 0.001519, 0.001649, 0.001518, 0.001505, 0.001552, 0.001531, 0.001730,
1759  0.001717, 0.001442, 0.001626, 0.001668, 0.001591, 0.001509, 0.001313, 0.001555, 0.001393, 0.001587, 0.001363, 0.001360,
1760  0.001785, 0.001410, 0.001363, 0.001278, 0.001427, 0.001407, 0.001102, 0.001358, 0.001408, 0.001509, 0.001399, 0.001411,
1761  0.001391, 0.001284, 0.001641, 0.001205, 0.001172, 0.001277, 0.001163, 0.001321, 0.001243, 0.001284, 0.001353, 0.001219,
1762  0.001338, 0.001204, 0.001206, 0.001250, 0.001127, 0.001366, 0.001240, 0.001124 };
1763 
1764  for(Int_t i=0; i<500; i++){
1765  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1766  }
1767  fUseWeight=kTRUE;
1768 }
1769 
1770 //_________________________________________________________________________
1772  // weight function from the ratio of the LHC13d3 MC
1773  // and FONLL calculations for pp data
1774  if(fFuncWeight) delete fFuncWeight;
1775  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,30.);
1776  fFuncWeight->SetParameters(2.94999e+00,3.47032e+00,2.81278e+00,2.5,1.93370e-02,3.86865e+00,-1.54113e-01,8.86944e-02,2.56267e-02);
1777  fUseWeight=kTRUE;
1778 }
1779 
1780 //_________________________________________________________________________
1782  // weight function from the ratio of the LHC10f6a MC
1783  // and FONLL calculations for pp data
1784  if(fFuncWeight) delete fFuncWeight;
1785  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,40.);
1786  fFuncWeight->SetParameters(2.41522e+01,4.92146e+00,6.72495e+00,2.5,6.15361e-03,4.78995e+00,-4.29135e-01,3.99421e-01,-1.57220e-02);
1787  fUseWeight=kTRUE;
1788 }
1789 
1790 //_________________________________________________________________________
1792  // weight function from the ratio of the LHC12a12 MC
1793  // and FONLL calculations for pp data
1794  if(fFuncWeight) delete fFuncWeight;
1795  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
1796  fFuncWeight->SetParameters(1.31497e+01,3.30503e+00,3.45594e+00,2.5,2.28642e-02,1.42372e+00,2.32892e-04,5.21986e-02,-2.14236e-01,3.86200e+00);
1797  fUseWeight=kTRUE;
1798 }
1799 
1800 //_________________________________________________________________________
1802  // weight function from the ratio of the LHC12a12bis MC
1803  // and FONLL calculations for pp data
1804  if(fFuncWeight) delete fFuncWeight;
1805  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
1806  fFuncWeight->SetParameters(6.54519e+00,2.74007e+00,2.48325e+00,2.5,1.61113e-01,-5.32546e-01,-3.75916e-04,2.38189e-01,-2.17561e-01,2.35975e+00);
1807  fUseWeight=kTRUE;
1808 }
1809 
1810 //_________________________________________________________________________
1812  // weight function from the ratio of the LHC13e2fix MC
1813  // and FONLL calculations for pp data
1814  if(fFuncWeight) delete fFuncWeight;
1815  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,50.);
1816  fFuncWeight->SetParameters(1.85862e+01,2.48171e+00,3.39356e+00,2.5,1.70426e-02,2.28453e+00,-4.57749e-02,5.84585e-02,-3.19719e-01,4.16789e+00);
1817  fUseWeight=kTRUE;
1818 }
1819 
1820 //________________________________________________________________
1822  // weight function from the ratio of the LHC10f6a MC
1823  // and FONLL calculations for pp data
1824  if(fFuncWeight) delete fFuncWeight;
1825  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,40.);
1826  fFuncWeight->SetParameters(2.77730e+01,4.78942e+00,7.45378e+00,2.5,9.86255e-02,2.30120e+00,-4.16435e-01,3.43770e-01,-2.29380e-02);
1827  fUseWeight=kTRUE;
1828 }
1829 
1830 //________________________________________________________________
1832  // weight function from the ratio of the LHC10f6a MC
1833  // and FONLL calculations for pp data
1834  if(fFuncWeight) delete fFuncWeight;
1835  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x+[9])",0.15,40.);
1836  fFuncWeight->SetParameters(1.34412e+01,3.20068e+00,5.14481e+00,2.5,7.59405e-04,7.51821e+00,-3.93811e-01,2.16849e-02,-3.37768e-02,2.40308e+00);
1837  fUseWeight=kTRUE;
1838 }
1839 
1840 //_________________________________________________________________________
1842  // weight function from the ratio of the LHC13d3 MC
1843  // and FONLL calculations for pPb data
1844  // using Lc simulated pt distribution
1845  if(fFuncWeight) delete fFuncWeight;
1846  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.15,20.);
1847  fFuncWeight->SetParameters(5.94428e+01,1.63585e+01,9.65555e+00,6.71944e+00,8.88338e-02,2.40477e+00,-4.88649e-02,-6.78599e-01,-2.10951e-01);
1848  fUseWeight=kTRUE;
1849 }
1850 //_________________________________________________________________________
1852  // weight function from the ratio of the LHC16i6a MC
1853  // and FONLL calculations for pp data
1854  // using D0 simulated pt distribution
1855  if(fFuncWeight) delete fFuncWeight;
1856  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",0.2,20.);
1857  fFuncWeight->SetParameters(2.70821e+03,2.98122e+00,8.67776e+01,1.16611e+00,1.17276e-02,5.41670e+00,6.01099e-02,-2.04524e+00,6.69208e-02);
1858  fUseWeight=kTRUE;
1859 }
1860 
1861 //_________________________________________________________________________
1863  // weight function from the ratio of the LHC11b2 MC
1864  // and FONLL calculations for pp data
1865  // using Lc simulated pt distribution
1866  if(fFuncWeight) delete fFuncWeight;
1867  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",1.,20.);
1868  fFuncWeight->SetParameters(2.11879e+02,3.73290e+00,2.01235e+01,1.41508e+00,1.06268e-01,1.86285e+00,-4.52956e-02,-9.90631e-01,-1.31615e+00);
1869  fUseWeight=kTRUE;
1870 }
1871 
1872 //_________________________________________________________________________
1874  // weight function from the ratio of the LHC10f7a MC
1875  // and FONLL calculations for pp data
1876  // using Lc simulated pt distribution
1877  if(fFuncWeight) delete fFuncWeight;
1878  fFuncWeight=new TF1("funcWeight","([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x)",1.,20.);
1879  fFuncWeight->SetParameters(2.84268e+02,2.18850e+01,2.36298e+01,7.46144e+00,1.69747e-01,1.66993e+00,-5.54726e-02,-1.53869e+00,-1.18404e+00);
1880  fUseWeight=kTRUE;
1881 }
1882 
1883 
1884 //_________________________________________________________________________
1886  // weight function from the ratio of the LHC15l2a2 MC
1887  // and FONLL calculations for pp data
1888  // using D0 simulated pt distribution
1889  if(fFuncWeight) delete fFuncWeight;
1890  fFuncWeight=new TF1("funcWeight","(x<28.5)*(([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x))+(x>=28.5)*0.140023",0.15,40);
1891  fFuncWeight->SetParameters(4.66092e+01, 4.27321e+01, 4.46858e+01, 1.67788e+00, -2.88457e-02, 4.40656e+00, -7.31064e-01, 2.96431e+00, -2.79976e-01);
1892  fUseWeight=kTRUE;
1893 }
1894 
1895 
1896 //_________________________________________________________________________
1898  // weight function from the ratio of the LHC17c3a1-LHC17c3a2 MC
1899  // and FONLL calculations for pp data
1900  // using D0 simulated pt distribution
1901  if(fFuncWeight) delete fFuncWeight;
1902  fFuncWeight=new TF1("funcWeight","(x<10.71)*(([0]*x)/TMath::Power([2],(1+TMath::Power([3],x/[1])))+[4]*TMath::Exp([5]+[6]*x)+[7]*TMath::Exp([8]*x))+(x>=10.71)*2.192",0.15,40);
1903  fFuncWeight->SetParameters(-8.28294e+04,1.04367e+00,1.43041e+02,1.40041e+00,-7.23198e-03,4.71629e+00,-3.15545e+00,2.36495e+00,-7.08928e-03);
1904  fUseWeight=kTRUE;
1905 }
1906 
1907 
1908 //_________________________________________________________________________
1910 {
1911  //
1912  // calculating the weight to fill the container
1913  //
1914 
1915  // FNOLL central:
1916  // p0 = 1.63297e-01 --> 0.322643
1917  // p1 = 2.96275e+00
1918  // p2 = 2.30301e+00
1919  // p3 = 2.50000e+00
1920 
1921  // PYTHIA
1922  // p0 = 1.85906e-01 --> 0.36609
1923  // p1 = 1.94635e+00
1924  // p2 = 1.40463e+00
1925  // p3 = 2.50000e+00
1926 
1927  Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
1928  Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
1929 
1930  Double_t dndpt_func1 = dNdptFit(pt,func1);
1931  if(fUseFlatPtWeight) dndpt_func1 = 1./30.;
1932  Double_t dndpt_func2 = dNdptFit(pt,func2);
1933  AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
1934  return dndpt_func1/dndpt_func2;
1935 }
1936 
1937 //__________________________________________________________________________________________________
1939 {
1940  //
1941  // calculating dNdpt
1942  //
1943 
1944  Double_t denom = TMath::Power((pt/par[1]), par[3] );
1945  Double_t dNdpt = par[0]*pt/TMath::Power(1.+denom, par[2]);
1946 
1947  return dNdpt;
1948 }
1949 
1950 //_________________________________________________________________________
1952 {
1953  //
1954  // Using an histogram as weight function
1955  // weight = 0 in the range outside the function
1956  //
1957  Double_t weight = 0.0;
1958  Int_t histoNbins = fHistoPtWeight->GetNbinsX();
1959  Int_t bin2 = fHistoPtWeight->FindBin(pt);
1960  if( (bin2>0) && (bin2<=histoNbins) ) {
1961  Int_t bin1=bin2-1;
1962  Int_t bin3=bin2+1;
1963  if(bin2==1) bin1=bin2+2;
1964  if(bin2==histoNbins) bin3=bin2-2;
1965  Float_t x_1=fHistoPtWeight->GetXaxis()->GetBinCenter(bin1);
1966  Float_t x_2=fHistoPtWeight->GetXaxis()->GetBinCenter(bin2);
1967  Float_t x_3=fHistoPtWeight->GetXaxis()->GetBinCenter(bin3);
1968  Float_t y_1=fHistoPtWeight->GetBinContent(bin1);
1969  Float_t y_2=fHistoPtWeight->GetBinContent(bin2);
1970  Float_t y_3=fHistoPtWeight->GetBinContent(bin3);
1971  Double_t a=( (y_3-y_2)*(x_1-x_2) - (y_1-y_2)*(x_3-x_2) )/( (x_3*x_3-x_2*x_2)*(x_1-x_2) - (x_1*x_1-x_2*x_2)*(x_3-x_2) );
1972  Double_t b=((y_1-y_2)-a*(x_1*x_1-x_2*x_2))/(x_1-x_2);
1973  Double_t c=y_3-a*(x_3*x_3)-b*x_3;
1974  weight = a*pt*pt+b*pt+c;
1975  }
1976  return weight;
1977 }
1978 
1979 //__________________________________________________________________________________________________
1981  //
1982  // calculating the z-vtx weight for the given run range
1983  //
1984 
1985  if(runnumber>146824 || runnumber<146803) return 1.0;
1986 
1987  Double_t func1[3] = {1.0, -0.5, 6.5 };
1988  Double_t func2[3] = {1.0, -0.5, 5.5 };
1989 
1990  Double_t dzFunc1 = DodzFit(z,func1);
1991  Double_t dzFunc2 = DodzFit(z,func2);
1992 
1993  return dzFunc1/dzFunc2;
1994 }
1995 
1996 //__________________________________________________________________________________________________
1998 
1999  //
2000  // Gaussian z-vtx shape
2001  //
2002  //gaussian = [0]/TMath::Sqrt(2.*TMath::Pi())/[2]*exp[-(x-[1])*(x-[1])/(2*[2]*[2])]
2003 
2004  Double_t value = par[0]/TMath::Sqrt(2.*TMath::Pi())/par[2]*TMath::Exp(-(z-par[1])*(z-par[1])/2./par[2]/par[2]);
2005 
2006  return value;
2007 }
2008 //__________________________________________________________________________________________________
2010  //
2011  // calculates the Nch weight using the measured and generateed Nch distributions
2012  //
2013  if(nch<=0) return 0.;
2014  if(!fHistoMeasNch || !fHistoMCNch) { AliError("Input histos to evaluate Nch weights missing"); return 0.; }
2015  Double_t pMeas=fHistoMeasNch->GetBinContent(fHistoMeasNch->FindBin(nch));
2016  Double_t pMC=fHistoMCNch->GetBinContent(fHistoMCNch->FindBin(nch));
2017  Double_t weight = pMC>0 ? pMeas/pMC : 0.;
2018  if(fUseMultRatioAsWeight) weight = pMC;
2019  return weight;
2020 }
2021 //__________________________________________________________________________________________________
2023  // creates historgam with measured multiplcity distribution in pp 7 TeV collisions (from Eur. Phys. J. C (2010) 68: 345–354)
2024  //
2025  // for Nch > 70 the points were obtained with a double NBD distribution fit
2026  // TF1 *fit1 = new TF1("fit1","[0]*(TMath::Gamma(x+[1])/(TMath::Gamma(x+1)*TMath::Gamma([1])))*(TMath::Power(([2]/[1]),x))*(TMath::Power((1+([2]/[1])),-x-[1]))"); fit1->SetParameter(0,1.);// normalization constant
2027  // fit1->SetParameter(1,1.63); // k parameter
2028  // fit1->SetParameter(2,12.8); // mean multiplicity
2029  //
2030  Double_t nchbins[82]={0.50,1.50,2.50,3.50,4.50,5.50,6.50,7.50,8.50,9.50,
2031  10.50,11.50,12.50,13.50,14.50,15.50,16.50,17.50,18.50,19.50,
2032  20.50,21.50,22.50,23.50,24.50,25.50,26.50,27.50,28.50,29.50,
2033  30.50,31.50,32.50,33.50,34.50,35.50,36.50,37.50,38.50,39.50,
2034  40.50,41.50,42.50,43.50,44.50,45.50,46.50,47.50,48.50,49.50,
2035  50.50,51.50,52.50,53.50,54.50,55.50,56.50,57.50,58.50,59.50,
2036  60.50,62.50,64.50,66.50,68.50,70.50,72.50,74.50,76.50,78.50,
2037  80.50,82.50,84.50,86.50,88.50,90.50,92.50,94.50,96.50,98.50,
2038  100.50,102.50};
2039  Double_t pch[81]={0.062011,0.072943,0.070771,0.067245,0.062834,0.057383,0.051499,0.04591,0.041109,0.036954,
2040  0.03359,0.030729,0.028539,0.026575,0.024653,0.0229,0.021325,0.019768,0.018561,0.017187,
2041  0.01604,0.014836,0.013726,0.012576,0.011481,0.010393,0.009502,0.008776,0.008024,0.007452,
2042  0.006851,0.006428,0.00594,0.005515,0.005102,0.00469,0.004162,0.003811,0.003389,0.003071,
2043  0.002708,0.002422,0.002184,0.001968,0.00186,0.00165,0.001577,0.001387,0.001254,0.001118,
2044  0.001037,0.000942,0.000823,0.000736,0.000654,0.000579,0.000512,0.00049,0.00045,0.000355,
2045  0.000296,0.000265,0.000193,0.00016,0.000126,0.0000851, 0.0000676,0.0000537,0.0000426, 0.0000338,
2046  0.0000268,0.0000213,0.0000166,0.0000133,0.0000106,0.00000837,0.00000662, 0.00000524,0.00000414, 0.00000327,
2047  0.00000258};
2048 
2049  if(fHistoMeasNch) delete fHistoMeasNch;
2050  fHistoMeasNch=new TH1F("hMeaseNch","",81,nchbins);
2051  for(Int_t i=0; i<81; i++){
2052  fHistoMeasNch->SetBinContent(i+1,pch[i]);
2053  fHistoMeasNch->SetBinError(i+1,0.);
2054  }
2055 }
2056 
2057 //__________________________________________________________________________________________________
2059  // processes output of Ds is selected
2060  Bool_t keep=kFALSE;
2061  if(recoAnalysisCuts > 0){
2062  Int_t isKKpi=recoAnalysisCuts&1;
2063  Int_t ispiKK=recoAnalysisCuts&2;
2064  Int_t isPhiKKpi=recoAnalysisCuts&4;
2065  Int_t isPhipiKK=recoAnalysisCuts&8;
2066  Int_t isK0starKKpi=recoAnalysisCuts&16;
2067  Int_t isK0starpiKK=recoAnalysisCuts&32;
2068  if(fDsOption==1){
2069  if(isKKpi && isPhiKKpi) keep=kTRUE;
2070  if(ispiKK && isPhipiKK) keep=kTRUE;
2071  }
2072  else if(fDsOption==2){
2073  if(isKKpi && isK0starKKpi) keep=kTRUE;
2074  if(ispiKK && isK0starpiKK) keep=kTRUE;
2075  }
2076  else if(fDsOption==3)keep=kTRUE;
2077  }
2078  return keep;
2079 }
2080 //__________________________________________________________________________________________________
2082 
2083  // processes output of Lc->V0+bnachelor is selected
2084 
2085  Bool_t keep=kFALSE;
2086 
2087  if (recoAnalysisCuts > 0){
2088 
2089  Int_t isK0Sp = recoAnalysisCuts&1;
2090  Int_t isLambdaBarpi = recoAnalysisCuts&2;
2091  Int_t isLambdapi = recoAnalysisCuts&4;
2092 
2093  if(fLctoV0bachelorOption == 1){
2094  if(isK0Sp) keep=kTRUE;
2095  }
2096  else if(fLctoV0bachelorOption == 2){
2097  if(isLambdaBarpi) keep=kTRUE;
2098  }
2099  else if(fLctoV0bachelorOption == 4){
2100  if(isLambdapi) keep=kTRUE;
2101  }
2102  else if(fLctoV0bachelorOption == 7) {
2103  if (isK0Sp || isLambdaBarpi || isLambdapi) keep=kTRUE;
2104  }
2105  }
2106  return keep;
2107 }
2108 
2109 //____________________________________________________________________________
2110 TProfile* AliCFTaskVertexingHF::GetEstimatorHistogram(const AliVEvent* event){
2111  // Get Estimator Histogram from period event->GetRunNumber();
2112  //
2113  // If you select SPD tracklets in |eta|<1 you should use type == 1
2114  //
2115 
2116  Int_t runNo = event->GetRunNumber();
2117  Int_t period = -1; // pp: 0-LHC10b, 1-LHC10c, 2-LHC10d, 3-LHC10e
2118  // pPb: 0-LHC13b, 1-LHC13c
2119 
2120  if (fIsPPbData) { // setting run numbers for LHC13 if pPb
2121  if (runNo>195343 && runNo<195484) period = 0;
2122  if (runNo>195528 && runNo<195678) period = 1;
2123  if (period<0 || period>1) return 0;
2124  } else { //else assume pp 2010
2125  if(runNo>114930 && runNo<117223) period = 0;
2126  if(runNo>119158 && runNo<120830) period = 1;
2127  if(runNo>122373 && runNo<126438) period = 2;
2128  if(runNo>127711 && runNo<130841) period = 3;
2129  if(period<0 || period>3) return 0;
2130  }
2131 
2132  return fMultEstimatorAvg[period];
2133 }
void SetCentralityValue(Float_t centValue)
virtual AliESDtrackCuts * GetTrackCutsV0daughters() const
Definition: AliRDHFCuts.h:254
void SetFillFromGenerated(Bool_t flag)
Double_t GetPtWeightFromHistogram(Float_t pt)
Bool_t fUseAdditionalCuts
flag for pPb data (used for multiplicity corrections)
Bool_t fUseZWeight
flag to decide to use a flat pt shape
AliCFTaskVertexingHF & operator=(const AliCFTaskVertexingHF &c)
Bool_t fFillFromGenerated
decay channel to configure the task
Double_t GetWeight(Float_t pt)
double Double_t
Definition: External.C:58
virtual AliESDtrackCuts * GetTrackCutsSoftPi() const
Definition: AliRDHFCuts.h:253
Int_t fCountAcc
MC particle found in limited acceptance that doesn't satisfy acceptance cuts.
void SetUseMCVertex()
Definition: AliRDHFCuts.h:353
Int_t fCountRefit
Reco particle found that satisfy vertex constrained.
Int_t MCcquarkCounting(AliAODMCParticle *mcPart) const
Class for HF corrections as a function of many variables and steps For D* and other cascades...
Int_t IsEventSelectedInCentrality(AliVEvent *event)
Int_t fCountReco
Reco particle found that satisfy kTPCrefit and kITSrefit.
Bool_t HasSelectionBit(Int_t i) const
UInt_t fPDGcode
flag to use selection bit
Class for HF corrections as a function of many variables and step.
Bool_t FillRecoContainer(Double_t *containerInput)
Int_t fCountGenLimAcc
MC particle found.
Bool_t fIsPPbData
flag for pp data (not checking centrality)
TH1F * fHistoPtWeight
user-defined function to be used to calculate weights
Bool_t fUseSelectionBit
Lc->V0+bachelor decay option (generation level)
char Char_t
Definition: External.C:18
AliCFTaskVertexingHF()
multiplicity estimators
Int_t fCountRecoITSClusters
Reco particle found that satisfy cuts in requested acceptance.
Int_t fNvar
flag to use directly the ratio of the distributions (fHistoMCNch) instead of computing it ...
void SetNVar(Int_t nVar)
void SetRejectCandidateIfNotFromQuark(Bool_t opt)
TCanvas * c
Definition: TestFitELoss.C:172
virtual Bool_t SetLabelArray()
Int_t fGenLctoV0bachelorOption
Lc->V0+bachelor decay option (selection level)
Double_t GetZWeight(Float_t z, Int_t runnumber)
void SetPtWeightsFromFONLL276andBAMPSoverLHC12a17b()
Bool_t FillRecoCand(AliVEvent *event, AliAODRecoDecayHF3Prong *rd3)
Int_t fCountGenLimAccNoAcc
MC particle found in limited acceptance.
Double_t dNdptFit(Float_t pt, Double_t *par)
Int_t GetNProngs() const
TString fPartName
number of variables for the container
Double_t GetMaxVtxZ() const
Definition: AliRDHFCuts.h:247
Bool_t FillRecoCasc(AliVEvent *event, AliAODRecoCascadeHF *rc, Bool_t isDStar, Bool_t recoSecVtx=kFALSE)
Double_t fRefMult
TProfile with mult vas. Z per period.
Bool_t ProcessDs(Int_t returnCodeDs) const
Float_t fCutOnMomConservation
Skip filling the unneed steps for most of the analyses to save disk space.
Bool_t fZvtxCorrectedNtrkEstimator
refrence multiplcity (period b)
TList * fListProfiles
response matrix for unfolding
Class for cuts on AOD reconstructed D+->Kpipi.
Bool_t fAcceptanceUnf
flag to select D0 origins. 0 Only from charm 1 only from beauty 2 both from charm and beauty ...
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
Bool_t fUseTrackletsWeight
flag to decide whether to use Ncharged weights != 1 when filling the container or not ...
int Int_t
Definition: External.C:63
Int_t fCountVertex
MC particle found that satisfy acceptance cuts.
Definition: External.C:204
void SetMinCentrality(Float_t minCentrality=0.)
Definition: AliRDHFCuts.h:51
Int_t GetIsFilled() const
fast configuration, only a subset of variables
float Float_t
Definition: External.C:68
Double_t DodzFit(Float_t z, Double_t *par)
Bool_t fUseCascadeTaskForLctoV0bachelor
these are the pre-selection cuts for the TMVA
Double_t GetNchWeight(Int_t nch)
UShort_t fOriginDselection
flag to indicate whether data container should be filled with generated values also for reconstructed...
Bool_t fUseFlatPtWeight
weight used to fill the container
Definition: External.C:212
AliAODVertex * GetOwnPrimaryVtx() const
Char_t fSign
daughter in fin state
slow configuration, all variables
AliESDtrackCuts * GetTrackCuts() const
Definition: AliRDHFCuts.h:252
Float_t GetCentrality(AliAODEvent *aodEvent)
Definition: AliRDHFCuts.h:248
AliRDHFCuts * fCuts
flag for unfolding before or after cuts.
Int_t fFakeSelection
flag to switch off the centrality selection
void SetFakeSelection(Int_t fakeSel)
TF1 * fFuncWeight
configuration (slow / fast) of the CF –> different variables will be allocated (all / reduced number)...
UInt_t fResonantDecay
histogram with Nch distribution from MC production
Bool_t fCentralitySelection
flag to decide wheter to keep D0 only (0), D0bar only (1), or both D0 and D0bar (2) ...
Int_t fCountRecoAcc
Reco particle found that satisfy cuts.
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
Int_t fGenDsOption
Ds decay option (selection level)
void SetMaxCentrality(Float_t maxCentrality=100.)
Definition: AliRDHFCuts.h:52
Int_t colors[nPtBins]
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
void SetRecoPrimVertex(Double_t zPrimVertex)
Bool_t fIsPPData
flag to use the z-vtx corrected (if not use uncorrected) multiplicity estimator
void SetMCCandidateParam(Int_t label)
Bool_t CheckMCPartFamily(AliAODMCParticle *, TClonesArray *) const
virtual Bool_t SetRecoCandidateParam(AliAODRecoDecayHF *)
static Double_t GetCorrectedNtracklets(TProfile *estimatorAvg, Double_t uncorrectedNacc, Double_t vtxZ, Double_t refMult)
Int_t fConfiguration
Ds decay option (generation level)
void SetPtWeightsFromFONLL5andDplusdataoverLHC16i2a()
Int_t CheckReflexion(Char_t isSign)
Bool_t IsEventSelected(AliVEvent *event)
Int_t fLctoV0bachelorOption
resonant deacy channel to be used if the CF should be run on resonant channels only ...
Bool_t fRejectIfNoQuark
selection flag for fakes tracks
void SetUsePID(Bool_t flag=kTRUE)
Definition: AliRDHFCuts.h:206
TH1I * fHistEventsProcessed
pointer to the CF manager
Bool_t fFillMinimumSteps
flag to define which task to use for Lc –> K0S+p
virtual void PrintAll() const
TString fDauNames
D meson name.
Bool_t RecoAcceptStep(AliESDtrackCuts **trackCuts) const
Int_t fCountRecoPID
Reco particle found that satisfy cuts in PPR.
Bool_t fUseMultRatioAsWeight
flag to decide whether to use Ncharged weights != 1 when filling the container or not ...
static Int_t GetGeneratedPhysicalPrimariesInEtaRange(TClonesArray *arrayMC, Double_t mineta, Double_t maxeta)
Bool_t IsSelected(TObject *obj)
Definition: AliRDHFCuts.h:281
Int_t fEvents
Reco PID step.
Bool_t MCRefitStep(AliAODEvent *aodEvent, AliESDtrackCuts **trackCuts) const
Bool_t fUseCutsForTMVA
flag to use additional cuts needed for Lc –> K0S + p, TMVA
Int_t fDecayChannel
n. of events
Bool_t GetIsUsePID() const
Definition: AliRDHFCuts.h:260
const char Option_t
Definition: External.C:48
void UserExec(Option_t *option)
Int_t fCountRecoPPR
Reco particle found that satisfy cuts in n. of ITS clusters.
Bool_t fUseMCVertex
flag to remove events not geenrated with PYTHIA
bool Bool_t
Definition: External.C:53
void SetTriggerClass(TString trclass0, TString trclass1="")
Definition: AliRDHFCuts.h:194
Int_t fDsOption
flag to use MC vertex (useful when runnign in pp)
Bool_t fUseNchWeight
flag to decide whether to use z-vtx weights != 1 when filling the container or not ...
Class to compute variables for correction framework // for 3-body decays of D mesons (D+...
virtual Bool_t IsInFiducialAcceptance(Double_t, Double_t) const
Definition: AliRDHFCuts.h:301
TProfile * GetEstimatorHistogram(const AliVEvent *event)
void SetConfiguration(Int_t configuration)
void SetMultiplicity(Double_t multiplicity)
void SetMCPrimaryVertex(Double_t zMCVertex)
Int_t fMultiplicityEstimator
PDG code.
void UserCreateOutputObjects()
ANALYSIS FRAMEWORK STUFF to loop on data and fill output objects.
TH1F * fHistoMCNch
histogram with measured Nch distribution (pp 7 TeV)
TProfile * fMultEstimatorAvg[4]
Definition of the multiplicity estimator: kNtrk10=0, kNtrk10to16=1, kVZERO=2.
Double_t fWeight
flag to decide whether to use pt-weights != 1 when filling the container or not
TH1F * fHistoMeasNch
user-defined histogram to calculate the Pt weights
Bool_t ProcessLctoV0Bachelor(Int_t returnCodeDs) const
Class for HF corrections as a function of many variables and step.
TList * OpenFile(const char *fname)
Definition: DrawAnaELoss.C:65