AliPhysics  6f1d526 (6f1d526)
 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  fCutOnMomConservation(0.00001)
142 {
143  //
144  //Default ctor
145  //
146  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
147 }
148 //___________________________________________________________________________
150  AliAnalysisTaskSE(name),
151  fCFManager(0x0),
152  fHistEventsProcessed(0x0),
153  fCorrelation(0x0),
154  fListProfiles(0),
155  fCountMC(0),
156  fCountGenLimAcc(0),
157  fCountGenLimAccNoAcc(0),
158  fCountAcc(0),
159  fCountVertex(0),
160  fCountRefit(0),
161  fCountReco(0),
162  fCountRecoAcc(0),
163  fCountRecoITSClusters(0),
164  fCountRecoPPR(0),
165  fCountRecoPID(0),
166  fEvents(0),
167  fDecayChannel(0),
168  fFillFromGenerated(kFALSE),
169  fOriginDselection(0),
170  fAcceptanceUnf(kTRUE),
171  fCuts(cuts),
172  fUseWeight(kFALSE),
173  fWeight(1.),
174  fUseFlatPtWeight(kFALSE),
175  fUseZWeight(kFALSE),
176  fUseNchWeight(kFALSE),
177  fUseTrackletsWeight(kFALSE),
178  fUseMultRatioAsWeight(kFALSE),
179  fNvar(0),
180  fPartName(""),
181  fDauNames(""),
182  fSign(2),
183  fCentralitySelection(kTRUE),
184  fFakeSelection(0),
185  fRejectIfNoQuark(kTRUE),
186  fUseMCVertex(kFALSE),
187  fDsOption(1),
188  fGenDsOption(3),
189  fConfiguration(kCheetah), // by default, setting the fast configuration
190  fFuncWeight(func),
191  fHistoPtWeight(0x0),
192  fHistoMeasNch(0x0),
193  fHistoMCNch(0x0),
194  fResonantDecay(0),
195  fLctoV0bachelorOption(1),
196  fGenLctoV0bachelorOption(0),
197  fUseSelectionBit(kTRUE),
198  fPDGcode(0),
199  fMultiplicityEstimator(kNtrk10),
200  fRefMult(9.26),
201  fZvtxCorrectedNtrkEstimator(kFALSE),
202  fIsPPData(kFALSE),
203  fIsPPbData(kFALSE),
204  fUseAdditionalCuts(kFALSE),
205  fUseCutsForTMVA(kFALSE),
206  fUseCascadeTaskForLctoV0bachelor(kFALSE),
207  fCutOnMomConservation(0.00001)
208 {
209  //
210  // Constructor. Initialization of Inputs and Outputs
211  //
212  /*
213  DefineInput(0) and DefineOutput(0)
214  are taken care of by AliAnalysisTaskSE constructor
215  */
216  DefineOutput(1,TH1I::Class());
217  DefineOutput(2,AliCFContainer::Class());
218  DefineOutput(3,THnSparseD::Class());
219  DefineOutput(4,AliRDHFCuts::Class());
220  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=0;
221  DefineOutput(5,TList::Class()); // slot #5 keeps the zvtx Ntrakclets correction profiles
222 
223  fCuts->PrintAll();
224 }
225 
226 //___________________________________________________________________________
228 {
229  //
230  // Assignment operator
231  //
232  if (this!=&c) {
233  AliAnalysisTaskSE::operator=(c) ;
236  fCuts = c.fCuts;
241  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=c.fMultEstimatorAvg[i];
242  }
243  return *this;
244 }
245 
246 //___________________________________________________________________________
249  fCFManager(c.fCFManager),
250  fHistEventsProcessed(c.fHistEventsProcessed),
251  fCorrelation(c.fCorrelation),
252  fListProfiles(c.fListProfiles),
253  fCountMC(c.fCountMC),
254  fCountGenLimAcc(c.fCountGenLimAcc),
255  fCountGenLimAccNoAcc(c.fCountGenLimAccNoAcc),
256  fCountAcc(c.fCountAcc),
257  fCountVertex(c.fCountVertex),
258  fCountRefit(c.fCountRefit),
259  fCountReco(c.fCountReco),
260  fCountRecoAcc(c.fCountRecoAcc),
261  fCountRecoITSClusters(c.fCountRecoITSClusters),
262  fCountRecoPPR(c.fCountRecoPPR),
263  fCountRecoPID(c.fCountRecoPID),
264  fEvents(c.fEvents),
265  fDecayChannel(c.fDecayChannel),
266  fFillFromGenerated(c.fFillFromGenerated),
267  fOriginDselection(c.fOriginDselection),
268  fAcceptanceUnf(c.fAcceptanceUnf),
269  fCuts(c.fCuts),
270  fUseWeight(c.fUseWeight),
271  fWeight(c.fWeight),
272  fUseFlatPtWeight(c.fUseFlatPtWeight),
273  fUseZWeight(c.fUseZWeight),
274  fUseNchWeight(c.fUseNchWeight),
275  fUseTrackletsWeight(c.fUseTrackletsWeight),
276  fUseMultRatioAsWeight(c.fUseMultRatioAsWeight),
277  fNvar(c.fNvar),
278  fPartName(c.fPartName),
279  fDauNames(c.fDauNames),
280  fSign(c.fSign),
281  fCentralitySelection(c.fCentralitySelection),
282  fFakeSelection(c.fFakeSelection),
283  fRejectIfNoQuark(c.fRejectIfNoQuark),
284  fUseMCVertex(c.fUseMCVertex),
285  fDsOption(c.fDsOption),
286  fGenDsOption(c.fGenDsOption),
287  fConfiguration(c.fConfiguration),
288  fFuncWeight(c.fFuncWeight),
289  fHistoPtWeight(c.fHistoPtWeight),
290  fHistoMeasNch(c.fHistoMeasNch),
291  fHistoMCNch(c.fHistoMCNch),
292  fResonantDecay(c.fResonantDecay),
293  fLctoV0bachelorOption(c.fLctoV0bachelorOption),
294  fGenLctoV0bachelorOption(c.fGenLctoV0bachelorOption),
295  fUseSelectionBit(c.fUseSelectionBit),
296  fPDGcode(c.fPDGcode),
297  fMultiplicityEstimator(c.fMultiplicityEstimator),
298  fRefMult(c.fRefMult),
299  fZvtxCorrectedNtrkEstimator(c.fZvtxCorrectedNtrkEstimator),
300  fIsPPData(c.fIsPPData),
301  fIsPPbData(c.fIsPPbData),
302  fUseAdditionalCuts(c.fUseAdditionalCuts),
303  fUseCutsForTMVA(c.fUseCutsForTMVA),
304  fUseCascadeTaskForLctoV0bachelor(c.fUseCascadeTaskForLctoV0bachelor),
305  fCutOnMomConservation(c.fCutOnMomConservation)
306 {
307  //
308  // Copy Constructor
309  //
310  for(Int_t i=0; i<4; i++) fMultEstimatorAvg[i]=c.fMultEstimatorAvg[i];
311 }
312 
313 //___________________________________________________________________________
315 {
316  //
317  //destructor
318  //
319  if (fCFManager) delete fCFManager ;
321  if (fCorrelation) delete fCorrelation ;
322  if (fListProfiles) delete fListProfiles;
323  if (fCuts) delete fCuts;
324  if (fFuncWeight) delete fFuncWeight;
325  if (fHistoPtWeight) delete fHistoPtWeight;
326  if (fHistoMeasNch) delete fHistoMeasNch;
327  if (fHistoMCNch) delete fHistoMCNch;
328  for(Int_t i=0; i<4; i++) { if(fMultEstimatorAvg[i]) delete fMultEstimatorAvg[i]; }
329 }
330 
331 //_________________________________________________________________________-
333 {
334  //
335  // Initialization
336  //
337 
338  if (fDebug>1) printf("AliCFTaskVertexingHF::Init()");
339  if(fUseWeight && fUseZWeight) { AliFatal("Can not use at the same time pt and z-vtx weights, please choose"); return; }
340  if(fUseWeight && fUseNchWeight) { AliInfo("Beware, using at the same time pt and Nch weights, please check"); }
341  if(fUseNchWeight && !fHistoMCNch) { AliFatal("Need to pass the MC Nch distribution to use Nch weights"); return; }
343 
344  AliRDHFCuts *copyfCuts = 0x0;
345  if (!fCuts){
346  AliFatal("No cuts defined - Exiting...");
347  return;
348  }
349 
350  switch (fDecayChannel){
351  case 2:{
352  fPDGcode = 421;
353  copyfCuts = new AliRDHFCutsD0toKpi(*(static_cast<AliRDHFCutsD0toKpi*>(fCuts)));
354  switch (fConfiguration) {
355  case kSnail: // slow configuration: all variables in
356  fNvar = 16;
357  break;
358  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
359  fNvar = 8;
360  break;
361  }
362  fPartName="D0";
363  fDauNames="K+pi";
364  break;
365  }
366  case 21:{
367  fPDGcode = 413;
368  copyfCuts = new AliRDHFCutsDStartoKpipi(*(static_cast<AliRDHFCutsDStartoKpipi*>(fCuts)));
369  switch (fConfiguration) {
370  case kSnail: // slow configuration: all variables in
371  fNvar = 16;
372  break;
373  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
374  fNvar = 8;
375  break;
376  }
377  fPartName="Dstar";
378  fDauNames="K+pi+pi";
379  break;
380  }
381  case 22:{
382  fPDGcode = 4122;
383  copyfCuts = new AliRDHFCutsLctoV0(*(static_cast<AliRDHFCutsLctoV0*>(fCuts)));
384  switch (fConfiguration) {
385  case kSnail: // slow configuration: all variables in
386  fNvar = 16;
387  break;
388  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
389  fNvar = 8;
390  break;
391  }
392  fPartName="Lambdac";
393  fDauNames="V0+bachelor";
394  break;
395  }
396  case 31:{
397  fPDGcode = 411;
398  copyfCuts = new AliRDHFCutsDplustoKpipi(*(static_cast<AliRDHFCutsDplustoKpipi*>(fCuts)));
399  switch (fConfiguration) {
400  case kSnail: // slow configuration: all variables in
401  fNvar = 14;
402  break;
403  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
404  fNvar = 8;
405  break;
406  }
407  fPartName="Dplus";
408  fDauNames="K+pi+pi";
409  break;
410  }
411  case 32:{
412  fPDGcode = 4122;
413  copyfCuts = new AliRDHFCutsLctopKpi(*(static_cast<AliRDHFCutsLctopKpi*>(fCuts)));
414  switch (fConfiguration) {
415  case kSnail: // slow configuration: all variables in
416  fNvar = 18;
417  break;
418  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
419  fNvar = 8;
420  break;
421  }
422  fPartName="Lambdac";
423  fDauNames="p+K+pi";
424  break;
425  }
426  case 33:{
427  fPDGcode = 431;
428  copyfCuts = new AliRDHFCutsDstoKKpi(*(static_cast<AliRDHFCutsDstoKKpi*>(fCuts)));
429  switch (fConfiguration) {
430  case kSnail: // slow configuration: all variables in
431  fNvar = 14;
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  }
437  fPartName="Ds";
438  fDauNames="K+K+pi";
439  break;
440  }
441  case 4:{
442  fPDGcode = 421;
443  copyfCuts = new AliRDHFCutsD0toKpipipi(*(static_cast<AliRDHFCutsD0toKpipipi*>(fCuts)));
444  switch (fConfiguration) {
445  case kSnail: // slow configuration: all variables in
446  fNvar = 16;
447  break;
448  case kCheetah:// fast configuration: only pt_candidate, y, phi, ct, fake, z_vtx, centrality, multiplicity will be filled
449  fNvar = 8;
450  break;
451  }
452  fPartName="D0";
453  fDauNames="K+pi+pi+pi";
454  break;
455  }
456  default:
457  AliFatal("The decay channel MUST be defined according to AliCFVertexing::DecayChannel - Exiting...");
458  break;
459  }
460 
461  const char* nameoutput=GetOutputSlot(4)->GetContainer()->GetName();
462  if (copyfCuts){
463  copyfCuts->SetName(nameoutput);
464 
465  //Post the data
466  PostData(4, copyfCuts);
467  }
468  else{
469  AliFatal("Failing initializing AliRDHFCuts object - Exiting...");
470  }
471 
472  fListProfiles = new TList();
473  fListProfiles->SetOwner();
474  TString period[4];
475  Int_t nProfiles=4;
476 
477  if (fIsPPbData) { //if pPb, use only two estimator histos
478  period[0] = "LHC13b"; period[1] = "LHC13c";
479  nProfiles = 2;
480  } else { // else assume pp (four histos for LHC10)
481  period[0] = "LHC10b"; period[1] = "LHC10c"; period[2] = "LHC10d"; period[3] = "LHC10e";
482  nProfiles = 4;
483  }
484 
485  for(Int_t i=0; i<nProfiles; i++){
486  if(fMultEstimatorAvg[i]){
487  TProfile* hprof=new TProfile(*fMultEstimatorAvg[i]);
488  hprof->SetName(Form("ProfileTrkVsZvtx%s\n",period[i].Data()));
489  fListProfiles->Add(hprof);
490  }
491  }
492 
493  // Save also the weight functions or histograms
498 
499  PostData(5,fListProfiles);
500 
501  return;
502 }
503 
504 //_________________________________________________
506 {
507  //
508  // Main loop function
509  //
510 
511  PostData(1,fHistEventsProcessed) ;
512  PostData(2,fCFManager->GetParticleContainer()) ;
513  PostData(3,fCorrelation) ;
514 
515  AliDebug(3,Form("*** Processing event %d\n", fEvents));
516 
517  if (fFillFromGenerated){
518  AliWarning("Flag to fill container with generated value ON ---> dca, d0pi, d0K, d0xd0, cosPointingAngle will be set as dummy!");
519  }
520 
521  if (!fInputEvent) {
522  Error("UserExec","NO EVENT FOUND!");
523  return;
524  }
525 
526  AliAODEvent* aodEvent = dynamic_cast<AliAODEvent*>(fInputEvent);
527 
528  TClonesArray *arrayBranch=0;
529 
530  if(!aodEvent && AODEvent() && IsStandardAOD()) {
531  // In case there is an AOD handler writing a standard AOD, use the AOD
532  // event in memory rather than the input (ESD) event.
533  aodEvent = dynamic_cast<AliAODEvent*> (AODEvent());
534  // in this case the braches in the deltaAOD (AliAOD.VertexingHF.root)
535  // have to taken from the AOD event hold by the AliAODExtension
536  AliAODHandler* aodHandler = (AliAODHandler*)
537  ((AliAnalysisManager::GetAnalysisManager())->GetOutputEventHandler());
538  if(aodHandler->GetExtensions()) {
539  AliAODExtension *ext = (AliAODExtension*)aodHandler->GetExtensions()->FindObject("AliAOD.VertexingHF.root");
540  AliAODEvent *aodFromExt = ext->GetAOD();
541 
542  switch (fDecayChannel){
543  case 2:{
544  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("D0toKpi");
545  break;
546  }
547  case 21:{
548  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Dstar");
549  break;
550  }
551  case 22:{
552  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("CascadesHF");
553  break;
554  }
555  case 31:
556  case 32:
557  case 33:{
558  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm3Prong");
559  break;
560  }
561  case 4:{
562  arrayBranch=(TClonesArray*)aodFromExt->GetList()->FindObject("Charm4Prong");
563  break;
564  }
565  default:
566  break;
567  }
568  }
569  }
570  else {
571  switch (fDecayChannel){
572  case 2:{
573  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("D0toKpi");
574  break;
575  }
576  case 21:{
577  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Dstar");
578  break;
579  }
580  case 22:{
581  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("CascadesHF");
582  break;
583  }
584  case 31:
585  case 32:
586  case 33:{
587  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Charm3Prong");
588  break;
589  }
590  case 4:{
591  arrayBranch=(TClonesArray*)aodEvent->GetList()->FindObject("Charm4Prong");
592  break;
593  }
594  default:
595  break;
596  }
597  }
598 
599  AliAODVertex *aodVtx = (AliAODVertex*)aodEvent->GetPrimaryVertex();
600  if (!aodVtx) {
601  AliDebug(3, "The event was skipped due to missing vertex");
602  return;
603  }
604 
605  if (!arrayBranch) {
606  AliError("Could not find array of HF vertices");
607  return;
608  }
609 
610  fEvents++;
611 
612  fCFManager->SetRecEventInfo(aodEvent);
613  fCFManager->SetMCEventInfo(aodEvent);
614 
615  //******** DEFINE number of variables of the container***** for now set at 13, in the future in the config macro.
616 
617  //loop on the MC event
618 
619  TClonesArray* mcArray = dynamic_cast<TClonesArray*>(aodEvent->FindListObject(AliAODMCParticle::StdBranchName()));
620  if (!mcArray) {
621  AliError("Could not find Monte-Carlo in AOD");
622  return;
623  }
624  Int_t icountMC = 0;
625  Int_t icountGenLimAcc = 0;
626  Int_t icountGenLimAccNoAcc = 0;
627  Int_t icountAcc = 0;
628  Int_t icountReco = 0;
629  Int_t icountVertex = 0;
630  Int_t icountRefit = 0;
631  Int_t icountRecoAcc = 0;
632  Int_t icountRecoITSClusters = 0;
633  Int_t icountRecoPPR = 0;
634  Int_t icountRecoPID = 0;
635  Int_t cquarks = 0;
636 
637  AliAODMCHeader *mcHeader = dynamic_cast<AliAODMCHeader*>(aodEvent->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
638  if (!mcHeader) {
639  AliError("Could not find MC Header in AOD");
640  return;
641  }
642 
643  fHistEventsProcessed->Fill(0.5);
644 
645  Double_t* containerInput = new Double_t[fNvar];
646  Double_t* containerInputMC = new Double_t[fNvar];
647 
648 
649  AliCFVertexingHF* cfVtxHF=0x0;
650  switch (fDecayChannel){
651  case 2:{
652  cfVtxHF = new AliCFVertexingHF2Prong(mcArray, fOriginDselection);
653  break;
654  }
655  case 21:{
656  cfVtxHF = new AliCFVertexingHFCascade(mcArray, fOriginDselection);
657  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGcascade(413);
658  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGbachelor(211);
659  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaugh(421);
660  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughForMC(421);
661  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughPositive(211);
662  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughNegative(321);
663  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPrimaryVertex(aodVtx);
664  break;
665  }
666  case 22:{
667  // Lc -> K0S+proton
669  cfVtxHF = new AliCFVertexingHFCascade(mcArray, fOriginDselection);
670  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGcascade(4122);
671  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGbachelor(2212);
672  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaugh(310);
673  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughForMC(311);
674  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughPositive(211);
675  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPDGneutrDaughNegative(211);
676  ((AliCFVertexingHFCascade*)cfVtxHF)->SetPrimaryVertex(aodVtx);
677  ((AliCFVertexingHFCascade*)cfVtxHF)->SetCutOnMomConservation(fCutOnMomConservation);
678  if (fUseAdditionalCuts) ((AliCFVertexingHFCascade*)cfVtxHF)->SetUseCutsForTMVA(fUseCutsForTMVA);
679  }
680  else {
682  }
683  break;
684  }
685  case 31:
686  // case 32:
687  case 33:{
688  cfVtxHF = new AliCFVertexingHF3Prong(mcArray, fOriginDselection, fDecayChannel);
689  if(fDecayChannel==33){
690  ((AliCFVertexingHF3Prong*)cfVtxHF)->SetGeneratedDsOption(fGenDsOption);
691  }
692  break;
693  }
694  case 32:{
696  }
697  case 4:{
698  //cfVtxHF = new AliCFVertexingHF4Prong(mcArray, originDselection); // not there yet
699  break;
700  }
701  default:
702  break;
703  }
704  if (!cfVtxHF){
705  AliError("No AliCFVertexingHF initialized");
706  delete[] containerInput;
707  delete[] containerInputMC;
708  return;
709  }
710 
711  Double_t zPrimVertex = aodVtx ->GetZ();
712  Double_t zMCVertex = mcHeader->GetVtxZ();
713  Int_t runnumber = aodEvent->GetRunNumber();
714 
715  // Multiplicity definition with tracklets
716  Double_t nTracklets = 0;
717  Int_t nTrackletsEta10 = static_cast<Int_t>(AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.,1.));
718  Int_t nTrackletsEta16 = static_cast<Int_t>(AliVertexingHFUtils::GetNumberOfTrackletsInEtaRange(aodEvent,-1.6,1.6));
719  nTracklets = (Double_t)nTrackletsEta10;
720  if(fMultiplicityEstimator==kNtrk10to16) { nTracklets = (Double_t)(nTrackletsEta16 - nTrackletsEta10); }
721 
722  // Apply the Ntracklets z-vtx data driven correction
724  TProfile* estimatorAvg = GetEstimatorHistogram(aodEvent);
725  if(estimatorAvg) {
726  Int_t nTrackletsEta10Corr = static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,nTrackletsEta10,zPrimVertex,fRefMult));
727  Int_t nTrackletsEta16Corr = static_cast<Int_t>(AliVertexingHFUtils::GetCorrectedNtracklets(estimatorAvg,nTrackletsEta16,zPrimVertex,fRefMult));
728  nTracklets = (Double_t)nTrackletsEta10Corr;
729  if(fMultiplicityEstimator==kNtrk10to16) { nTracklets = (Double_t)(nTrackletsEta16Corr - nTrackletsEta10Corr); }
730  }
731  }
732 
733 
734  fWeight=1.;
735  if(fUseZWeight) fWeight *= GetZWeight(zMCVertex,runnumber);
736  if(fUseNchWeight){
737  Int_t nChargedMCPhysicalPrimary=AliVertexingHFUtils::GetGeneratedPhysicalPrimariesInEtaRange(mcArray,-1.0,1.0);
738  if(!fUseTrackletsWeight) fWeight *= GetNchWeight(nChargedMCPhysicalPrimary);
739  else fWeight *= GetNchWeight(static_cast<Int_t>(nTracklets));
740  AliDebug(2,Form("Using Nch weights, Mult=%d Weight=%f\n",nChargedMCPhysicalPrimary,fWeight));
741  }
742  Double_t eventWeight=fWeight;
743 
744  if (TMath::Abs(zMCVertex) > fCuts->GetMaxVtxZ()){
745  AliDebug(3,Form("z coordinate of MC vertex = %f, it was required to be within [-%f, +%f], skipping event", zMCVertex, fCuts->GetMaxVtxZ(), fCuts->GetMaxVtxZ()));
746  delete[] containerInput;
747  delete[] containerInputMC;
748  delete cfVtxHF;
749  return;
750  }
751 
752  if(aodEvent->GetTriggerMask()==0 &&
753  (runnumber>=195344 && runnumber<=195677)){
754  AliDebug(3,"Event rejected because of null trigger mask");
755  delete[] containerInput;
756  delete[] containerInputMC;
757  delete cfVtxHF;
758  return;
759  }
760 
761  AliESDtrackCuts** trackCuts = new AliESDtrackCuts*[cfVtxHF->GetNProngs()];
762  if (fDecayChannel == 21){
763  // for the D*, setting the third element of the array of the track cuts to those for the soft pion
764  for (Int_t iProng = 0; iProng<cfVtxHF->GetNProngs()-1; iProng++){
765  trackCuts[iProng]=fCuts->GetTrackCuts();
766  }
767  trackCuts[2] = fCuts->GetTrackCutsSoftPi();
768  }
769  else if (fDecayChannel == 22) {
770  // for the Lc->V0+bachelor, setting the second and third elements of the array of the track cuts to those for the V0 daughters
771  trackCuts[0]=fCuts->GetTrackCuts();
772  trackCuts[1]=fCuts->GetTrackCutsV0daughters();
773  trackCuts[2]=fCuts->GetTrackCutsV0daughters();
774  }
775  else {
776  for (Int_t iProng = 0; iProng<cfVtxHF->GetNProngs(); iProng++){
777  trackCuts[iProng]=fCuts->GetTrackCuts();
778  }
779  }
780 
781  //General settings: vertex, feed down and fill reco container with generated values.
782  cfVtxHF->SetRecoPrimVertex(zPrimVertex);
783  cfVtxHF->SetMCPrimaryVertex(zMCVertex);
785  cfVtxHF->SetNVar(fNvar);
789 
790  // switch-off the trigger class selection (doesn't work for MC)
791  fCuts->SetTriggerClass("");
792 
793  // MC vertex, to be used, in case, for pp
795 
796  if (fCentralitySelection){ // keep only the requested centrality
797 
798  if(fCuts->IsEventSelectedInCentrality(aodEvent)!=0) {
799  delete[] containerInput;
800  delete[] containerInputMC;
801  delete [] trackCuts;
802  delete cfVtxHF;
803  return;
804  }
805  } else { // keep all centralities
806  fCuts->SetMinCentrality(0.);
807  fCuts->SetMaxCentrality(100.);
808  }
809 
810  Float_t centValue = 0.;
811  if(!fIsPPData) centValue = fCuts->GetCentrality(aodEvent);
812  cfVtxHF->SetCentralityValue(centValue);
813 
814  // multiplicity estimator with VZERO
815  Double_t vzeroMult=0;
816  AliAODVZERO *vzeroAOD = (AliAODVZERO*)aodEvent->GetVZEROData();
817  if(vzeroAOD) vzeroMult = vzeroAOD->GetMTotV0A() + vzeroAOD->GetMTotV0C();
818 
819  Double_t multiplicity = nTracklets; // set to the Ntracklet estimator
820  if(fMultiplicityEstimator==kVZERO) { multiplicity = vzeroMult; }
821 
822  cfVtxHF->SetMultiplicity(multiplicity);
823 
824  // printf("Multiplicity estimator %d, value %2.2f\n",fMultiplicityEstimator,multiplicity);
825 
826  for (Int_t iPart=0; iPart<mcArray->GetEntriesFast(); iPart++) {
827  AliAODMCParticle* mcPart = dynamic_cast<AliAODMCParticle*>(mcArray->At(iPart));
828  if (!mcPart){
829  AliError("Failed casting particle from MC array!, Skipping particle");
830  continue;
831  }
832 
833  //counting c quarks
834  cquarks += cfVtxHF->MCcquarkCounting(mcPart);
835 
836  // check the MC-level cuts, must be the desidered particle
837  if (!fCFManager->CheckParticleCuts(0, mcPart)) {
838  AliDebug(2,"Check the MC-level cuts - not desidered particle");
839  continue; // 0 stands for MC level
840  }
841  else {
842  AliDebug(3, Form("\n\n---> COOL! we found a particle (particle %d)!!! with PDG code = %d \n\n", iPart, mcPart->GetPdgCode()));
843  }
844  cfVtxHF->SetMCCandidateParam(iPart);
845 
846 
847  if (!(cfVtxHF->SetLabelArray())){
848  AliDebug(2,Form("Impossible to set the label array for particle %d (decaychannel = %d)", iPart, fDecayChannel));
849  continue;
850  }
851 
852  //check the candiate family at MC level
853  if (!(cfVtxHF->CheckMCPartFamily(mcPart, mcArray))) {
854  AliDebug(2,Form("Check on the family wrong for particle %d!!! (decaychannel = %d)", iPart, fDecayChannel));
855  continue;
856  }
857  else{
858  AliDebug(2,Form("Check on the family OK for particle %d!!! (decaychannel = %d)", iPart, fDecayChannel));
859  }
860 
861  //Fill the MC container
862  Bool_t mcContainerFilled = cfVtxHF -> FillMCContainer(containerInputMC);
863  AliDebug(2, Form("particle = %d mcContainerFilled = %d", iPart, mcContainerFilled));
864  if (mcContainerFilled) {
865  if (fUseWeight){
866  if (fHistoPtWeight) { // using an histogram as weight function
867  AliDebug(2,"Using Histogram as Pt weight function");
868  fWeight = eventWeight*GetPtWeightFromHistogram(containerInputMC[0]);
869  }
870  else if (fFuncWeight){ // using user-defined function
871  AliDebug(2,"Using function");
872  fWeight = eventWeight*fFuncWeight->Eval(containerInputMC[0]);
873  }
874  else{ // using FONLL
875  AliDebug(2,"Using FONLL");
876  fWeight = eventWeight*GetWeight(containerInputMC[0]);
877  }
878  AliDebug(2,Form("pt = %f, weight = %f",containerInputMC[0], fWeight));
879  }
880  if (!fCuts->IsInFiducialAcceptance(containerInputMC[0],containerInputMC[1])) {
881  AliDebug(3, Form("Not in limited acceptance, containerInputMC[0] = %f, containerInputMC[1] = %f", containerInputMC[0], containerInputMC[1]));
882  continue;
883  }
884  else{
885  AliDebug(3, Form("YES!! in limited acceptance, containerInputMC[0] = %f, containerInputMC[1] = %f", containerInputMC[0],containerInputMC[1]));
886  }
887 
888  //MC Limited Acceptance
889  if (TMath::Abs(containerInputMC[1]) < 0.5) {
890  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepGeneratedLimAcc, fWeight);
891  icountGenLimAcc++;
892  AliDebug(3,"MC Lim Acc container filled\n");
893  if (fCFManager->GetParticleContainer()->GetNStep() == kStepGenLimAccNoAcc+1) {
894  if (!(cfVtxHF-> MCAcceptanceStep())) {
895  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepGenLimAccNoAcc, fWeight);
896  icountGenLimAccNoAcc++;
897  AliDebug(3,"MC Lim Acc No Acc container filled\n");
898  }
899  }
900  }
901 
902  //MC
903  fCFManager->GetParticleContainer()->Fill(containerInputMC, kStepGenerated, fWeight);
904  icountMC++;
905  AliDebug(3,"MC container filled \n");
906 
907  // MC in acceptance
908  // check the MC-Acceptance level cuts
909  // since standard CF functions are not applicable, using Kine Cuts on daughters
910  Bool_t mcAccepStep = cfVtxHF-> MCAcceptanceStep();
911  if (mcAccepStep){
912  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepAcceptance, fWeight);
913  AliDebug(3,"MC acceptance cut passed\n");
914  icountAcc++;
915 
916  //MC Vertex step
917  if (fCuts->IsEventSelected(aodEvent)){
918  // filling the container if the vertex is ok
919  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepVertex, fWeight) ;
920  AliDebug(3,"Vertex cut passed and container filled\n");
921  icountVertex++;
922 
923  //mc Refit requirement
924  Bool_t mcRefitStep = cfVtxHF->MCRefitStep(aodEvent, &trackCuts[0]);
925  if (mcRefitStep){
926  fCFManager->GetParticleContainer()->Fill(containerInputMC,kStepRefit, fWeight);
927  AliDebug(3,"MC Refit cut passed and container filled\n");
928  icountRefit++;
929  }
930  else{
931  AliDebug(3,"MC Refit cut not passed\n");
932  continue;
933  }
934  }
935  else{
936  AliDebug (3, "MC vertex step not passed\n");
937  continue;
938  }
939  }
940  else{
941  AliDebug (3, "MC in acceptance step not passed\n");
942  continue;
943  }
944  }
945  else {
946  AliDebug (3, "MC container not filled\n");
947  }
948  }
949 
950  if (cquarks<2) AliDebug(2,Form("Event with %d c-quarks", cquarks));
951  AliDebug(2,Form("Found %i MC particles that are %s!!",icountMC,fPartName.Data()));
952  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Acc cuts!!",icountAcc,fPartName.Data()));
953  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Vertex cuts!!",icountVertex,fPartName.Data()));
954  AliDebug(2,Form("Found %i MC particles that are %s and satisfy Refit cuts!!",icountRefit,fPartName.Data()));
955 
956  // Now go to rec level
957  fCountMC += icountMC;
958  fCountGenLimAcc += icountGenLimAcc;
959  fCountGenLimAccNoAcc += icountGenLimAccNoAcc;
960  fCountAcc += icountAcc;
961  fCountVertex+= icountVertex;
962  fCountRefit+= icountRefit;
963 
964  AliDebug(2,Form("Found %d vertices for decay channel %d",arrayBranch->GetEntriesFast(),fDecayChannel));
966 
967  for(Int_t iCandid = 0; iCandid<arrayBranch->GetEntriesFast();iCandid++){
968  AliAODRecoDecayHF* charmCandidate=0x0;
969  switch (fDecayChannel){
970  case 2:{
971  charmCandidate = (AliAODRecoDecayHF2Prong*)arrayBranch->At(iCandid);
972  if(!vHF->FillRecoCand(aodEvent,(AliAODRecoDecayHF2Prong*)charmCandidate)) continue;
973  break;
974  }
975  case 21:{
976  charmCandidate = (AliAODRecoCascadeHF*)arrayBranch->At(iCandid);
977  if(!vHF->FillRecoCasc(aodEvent,((AliAODRecoCascadeHF*)charmCandidate),kTRUE)) continue; //DStar
978  break;
979  }
980  case 22:{
981  charmCandidate = (AliAODRecoCascadeHF*)arrayBranch->At(iCandid);
982  if(!vHF->FillRecoCasc(aodEvent,((AliAODRecoCascadeHF*)charmCandidate),kFALSE)) continue; //Cascade
983  break;
984  }
985  case 31:
986  case 32:
987  case 33:{
988  charmCandidate = (AliAODRecoDecayHF3Prong*)arrayBranch->At(iCandid);
989  if(!vHF->FillRecoCand(aodEvent,(AliAODRecoDecayHF3Prong*)charmCandidate)) continue;
990  break;
991  }
992  case 4:{
993  charmCandidate = (AliAODRecoDecayHF4Prong*)arrayBranch->At(iCandid);
994  break;
995  }
996  default:
997  break;
998  }
999 
1000  Bool_t unsetvtx=kFALSE;
1001  if(!charmCandidate->GetOwnPrimaryVtx()) {
1002  charmCandidate->SetOwnPrimaryVtx(aodVtx); // needed to compute all variables
1003  unsetvtx=kTRUE;
1004  }
1005 
1006  Bool_t signAssociation = cfVtxHF->SetRecoCandidateParam((AliAODRecoDecayHF*)charmCandidate);
1007  if (!signAssociation){
1008  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1009  continue;
1010  }
1011 
1012  Int_t isPartOrAntipart = cfVtxHF->CheckReflexion(fSign);
1013  if (isPartOrAntipart == 0){
1014  AliDebug(2, Form("The candidate pdg code doesn't match the requirement set in the task (fSign = %d)",fSign));
1015  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1016  continue;
1017  }
1018 
1019  AliDebug(3,Form("iCandid=%d - signAssociation=%d, isPartOrAntipart=%d",iCandid, signAssociation, isPartOrAntipart));
1020 
1021  Bool_t recoContFilled = cfVtxHF->FillRecoContainer(containerInput);
1022  AliDebug(3, Form("CF task: RecoContFilled for candidate %d is %d", iCandid, (Int_t)recoContFilled));
1023  if (recoContFilled){
1024 
1025  // weight according to pt
1026  if (fUseWeight){
1027  if (fHistoPtWeight) {
1028  AliDebug(2,"Using Histogram as Pt weight function");
1029  fWeight = eventWeight*GetPtWeightFromHistogram(containerInput[0]);
1030  }
1031  else if (fFuncWeight){ // using user-defined function
1032  AliDebug(2, "Using function");
1033  fWeight = eventWeight*fFuncWeight->Eval(containerInput[0]);
1034  }
1035  else{ // using FONLL
1036  AliDebug(2, "Using FONLL");
1037  fWeight = eventWeight*GetWeight(containerInput[0]);
1038  }
1039  AliDebug(2, Form("pt = %f, weight = %f",containerInput[0], fWeight));
1040  }
1041 
1042  if (!fCuts->IsInFiducialAcceptance(containerInput[0],containerInput[1])){
1043  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1044  continue;
1045  }
1046  //Reco Step
1047  Bool_t recoStep = cfVtxHF->RecoStep();
1048  if (recoStep) AliDebug(2, Form("particle = %d --> CF task: Reco step for candidate %d is %d", iCandid, iCandid, (Int_t)recoStep));
1049  Bool_t vtxCheck = fCuts->IsEventSelected(aodEvent);
1050 
1051 
1052  // Selection on the filtering bit
1053  Bool_t isBitSelected = kTRUE;
1054  if(fDecayChannel==2) {
1055  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kD0toKpiCuts)) isBitSelected = kFALSE;
1056  }else if(fDecayChannel==31){
1057  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kDplusCuts)) isBitSelected = kFALSE;
1058  }else if(fDecayChannel==33){
1059  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kDsCuts)) isBitSelected = kFALSE;
1060  }else if(fDecayChannel==32){
1061  if(fUseSelectionBit && !charmCandidate->HasSelectionBit(AliRDHFCuts::kLcCuts)) isBitSelected = kFALSE;
1062  }else if(fDecayChannel==22){
1063  if(!((dynamic_cast<AliAODRecoCascadeHF*>(charmCandidate))->CheckCascadeFlags())) isBitSelected = kFALSE; // select only Lc among cascade candidates
1064  }
1065  if(!isBitSelected){
1066  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1067  continue;
1068  }
1069 
1070 
1071  if (recoStep && recoContFilled && vtxCheck){
1072  fCFManager->GetParticleContainer()->Fill(containerInput,kStepReconstructed, fWeight) ;
1073  icountReco++;
1074  AliDebug(3,"Reco step passed and container filled\n");
1075 
1076  //Reco in the acceptance -- take care of UNFOLDING!!!!
1077  Bool_t recoAcceptanceStep = cfVtxHF->RecoAcceptStep(&trackCuts[0]);
1078  if (recoAcceptanceStep) {
1079  fCFManager->GetParticleContainer()->Fill(containerInput,kStepRecoAcceptance, fWeight) ;
1080  icountRecoAcc++;
1081  AliDebug(3,"Reco acceptance cut passed and container filled\n");
1082 
1083  if(fAcceptanceUnf){
1084  Double_t fill[4]; //fill response matrix
1085  Bool_t bUnfolding = cfVtxHF -> FillUnfoldingMatrix(fPDGcode,fill);
1086  if (bUnfolding) fCorrelation->Fill(fill);
1087  }
1088 
1089  //Number of ITS cluster requirements
1090  Int_t recoITSnCluster = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kTracks, aodEvent);
1091  if (recoITSnCluster){
1092  fCFManager->GetParticleContainer()->Fill(containerInput,kStepRecoITSClusters, fWeight) ;
1093  icountRecoITSClusters++;
1094  AliDebug(3,"Reco n ITS cluster cut passed and container filled\n");
1095 
1096  Bool_t iscutsusingpid = fCuts->GetIsUsePID();
1097  Int_t recoAnalysisCuts = -1, recoPidSelection = -1;
1098  fCuts->SetUsePID(kFALSE);
1099  recoAnalysisCuts = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kCandidate, aodEvent);
1100 
1101  if (fDecayChannel==33){ // Ds case, where more possibilities are considered
1102  Bool_t keepDs=ProcessDs(recoAnalysisCuts);
1103  if(keepDs) recoAnalysisCuts=3;
1104  }
1105  else if (fDecayChannel==22){ // Lc->V0+bachelor case, where more possibilities are considered
1106  Bool_t keepLctoV0bachelor = ProcessLctoV0Bachelor(recoAnalysisCuts);
1107  if (keepLctoV0bachelor) recoAnalysisCuts=3;
1108  AliAnalysisManager *man = AliAnalysisManager::GetAnalysisManager();
1109  AliInputEventHandler* inputHandler = (AliInputEventHandler*) (man->GetInputEventHandler());
1110  AliPIDResponse* pidResponse = inputHandler->GetPIDResponse();
1111  if (fUseAdditionalCuts){
1112  if (!((AliCFVertexingHFCascade*)cfVtxHF)->CheckAdditionalCuts(pidResponse)) recoAnalysisCuts = -1;
1113  }
1114  }
1115 
1116  fCuts->SetUsePID(iscutsusingpid); //restoring usage of the PID from the cuts object
1117  Bool_t tempAn=(recoAnalysisCuts == 3 || recoAnalysisCuts == isPartOrAntipart);
1118  if (fDecayChannel == 22) tempAn = (recoAnalysisCuts == 3);
1119  if (fDecayChannel == 32) tempAn=(recoAnalysisCuts >0 || recoAnalysisCuts == isPartOrAntipart);
1120 
1121  if (tempAn){
1122  fCFManager->GetParticleContainer()->Fill(containerInput, kStepRecoPPR, fWeight);
1123  icountRecoPPR++;
1124  AliDebug(3,"Reco Analysis cuts passed and container filled \n");
1125  //pid selection
1126  //recoPidSelection = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kPID);
1127  //if((fCuts->CombineSelectionLevels(3,recoAnalysisCuts,recoPidSelection)==isPartOrAntipart)||(fCuts->CombineSelectionLevels(3,recoAnalysisCuts,recoPidSelection)==3)){
1128  recoPidSelection = fCuts->IsSelected(charmCandidate, AliRDHFCuts::kCandidate, aodEvent);
1129 
1130  if (fDecayChannel==33){ // Ds case, where more possibilities are considered
1131  Bool_t keepDs=ProcessDs(recoPidSelection);
1132  if(keepDs) recoPidSelection=3;
1133  } else if (fDecayChannel==22){ // Lc->V0+bachelor case, where more possibilities are considered
1134  Bool_t keepLctoV0bachelor=ProcessLctoV0Bachelor(recoPidSelection);
1135  if (keepLctoV0bachelor) recoPidSelection=3;
1136  }
1137 
1138  Bool_t tempPid=(recoPidSelection == 3 || recoPidSelection == isPartOrAntipart);
1139  if (fDecayChannel == 22) tempPid = (recoPidSelection == 3);
1140  if (fDecayChannel == 32) tempPid=(recoPidSelection >0 || recoPidSelection == isPartOrAntipart);
1141 
1142  if (tempPid){
1143  Double_t weigPID = 1.;
1144  if (fDecayChannel == 2){ // D0 with Bayesian PID using weights
1145  if(((AliRDHFCutsD0toKpi*)fCuts)->GetCombPID() && (((AliRDHFCutsD0toKpi*)fCuts)->GetBayesianStrategy() == AliRDHFCutsD0toKpi::kBayesWeight || ((AliRDHFCutsD0toKpi*)fCuts)->GetBayesianStrategy() == AliRDHFCutsD0toKpi::kBayesWeightNoFilter)){
1146  if (isPartOrAntipart == 1){
1147  weigPID = ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsNegative()[AliPID::kKaon] * ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsPositive()[AliPID::kPion];
1148  }else if (isPartOrAntipart == 2){
1149  weigPID = ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsPositive()[AliPID::kKaon] * ((AliRDHFCutsD0toKpi*)fCuts)->GetWeightsNegative()[AliPID::kPion];
1150  }
1151  if ((weigPID < 0) || (weigPID > 1)) weigPID = 0.;
1152  }
1153  }else if (fDecayChannel == 33){ // Ds with Bayesian PID using weights
1155  Int_t labDau0=((AliAODTrack*)charmCandidate->GetDaughter(0))->GetLabel();
1156  AliAODMCParticle* firstDau=(AliAODMCParticle*)mcArray->UncheckedAt(TMath::Abs(labDau0));
1157  if(firstDau){
1158  Int_t pdgCode0=TMath::Abs(firstDau->GetPdgCode());
1159  if(pdgCode0==321){
1160  weigPID=((AliRDHFCutsDstoKKpi*)fCuts)->GetWeightForKKpi();
1161  }else if(pdgCode0==211){
1162  weigPID=((AliRDHFCutsDstoKKpi*)fCuts)->GetWeightForpiKK();
1163  }
1164  if ((weigPID < 0) || (weigPID > 1)) weigPID = 0.;
1165  }else{
1166  weigPID=0.;
1167  }
1168  }
1169  }
1170  fCFManager->GetParticleContainer()->Fill(containerInput, kStepRecoPID, fWeight*weigPID);
1171  icountRecoPID++;
1172  AliDebug(3,"Reco PID cuts passed and container filled \n");
1173  if(!fAcceptanceUnf){
1174  Double_t fill[4]; //fill response matrix
1175  Bool_t bUnfolding = cfVtxHF -> FillUnfoldingMatrix(fPDGcode,fill);
1176  if (bUnfolding) fCorrelation->Fill(fill);
1177  }
1178  }
1179  else {
1180  AliDebug(3, "Analysis Cuts step not passed \n");
1181  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1182  continue;
1183  }
1184  }
1185  else {
1186  AliDebug(3, "PID selection not passed \n");
1187  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1188  continue;
1189  }
1190  }
1191  else{
1192  AliDebug(3, "Number of ITS cluster step not passed\n");
1193  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1194  continue;
1195  }
1196  }
1197  else{
1198  AliDebug(3, "Reco acceptance step not passed\n");
1199  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1200  continue;
1201  }
1202  }
1203  else {
1204  AliDebug(3, "Reco step not passed\n");
1205  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1206  continue;
1207  }
1208  }
1209 
1210  if(unsetvtx) charmCandidate->UnsetOwnPrimaryVtx();
1211  } // end loop on candidate
1212  delete vHF;
1213  fCountReco+= icountReco;
1214  fCountRecoAcc+= icountRecoAcc;
1215  fCountRecoITSClusters+= icountRecoITSClusters;
1216  fCountRecoPPR+= icountRecoPPR;
1217  fCountRecoPID+= icountRecoPID;
1218 
1219  fHistEventsProcessed->Fill(1.5);
1220 
1221  delete[] containerInput;
1222  delete[] containerInputMC;
1223  delete cfVtxHF;
1224  if (trackCuts){
1225  // for (Int_t i=0; i<cfVtxHF->GetNProngs(); i++){
1226  // delete [] trackCuts[i];
1227  // }
1228  delete [] trackCuts;
1229  }
1230 
1231 
1232 }
1233 
1234 //___________________________________________________________________________
1236 {
1237  // The Terminate() function is the last function to be called during
1238  // a query. It always runs on the client, it can be used to present
1239  // the results graphically or save the results to file.
1240 
1241  AliAnalysisTaskSE::Terminate();
1242 
1243  AliInfo(Form("Found %i MC particles that are %s in MC, in %d events",fCountMC,fPartName.Data(),fEvents));
1244  AliInfo(Form("Found %i MC particles that are %s in MC in limited acceptance, in %d events",fCountGenLimAcc,fPartName.Data(),fEvents));
1245  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));
1246  AliInfo(Form("Found %i MC particles that are %s in MC and satisfy Acc cuts, in %d events",fCountAcc,fPartName.Data(),fEvents));
1247  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));
1248  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));
1249  AliInfo(Form("Found %i reco %s that are decaying in %s, in %d events",fCountReco,fPartName.Data(),fDauNames.Data(),fEvents));
1250  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));
1251  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));
1252  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));
1253  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));
1254 
1255  // draw some example plots....
1256  AliCFContainer *cont= dynamic_cast<AliCFContainer*> (GetOutputData(2));
1257  if(!cont) {
1258  printf("CONTAINER NOT FOUND\n");
1259  return;
1260  }
1261  // projecting the containers to obtain histograms
1262  // first argument = variable, second argument = step
1263 
1264  TH1D** h = new TH1D*[3];
1265  Int_t nvarToPlot = 0;
1266  if (fConfiguration == kSnail){
1267  //h = new TH1D[3][12];
1268  for (Int_t ih = 0; ih<3; ih++){
1269  if(fDecayChannel==22){
1270  nvarToPlot = 16;
1271  } else {
1272  nvarToPlot = 12;
1273  }
1274  h[ih] = new TH1D[nvarToPlot];
1275  }
1276  for(Int_t iC=1;iC<nvarToPlot; iC++){
1277  // MC-level
1278  h[0][iC] = *(cont->ShowProjection(iC,0));
1279  // MC-Acceptance level
1280  h[1][iC] = *(cont->ShowProjection(iC,1));
1281  // Reco-level
1282  h[2][iC] = *(cont->ShowProjection(iC,4));
1283  }
1284  }
1285  else {
1286  //h = new TH1D[3][12];
1287  nvarToPlot = 8;
1288  for (Int_t ih = 0; ih<3; ih++){
1289  h[ih] = new TH1D[nvarToPlot];
1290  }
1291  for(Int_t iC=0;iC<nvarToPlot; iC++){
1292  // MC-level
1293  h[0][iC] = *(cont->ShowProjection(iC,0));
1294  // MC-Acceptance level
1295  h[1][iC] = *(cont->ShowProjection(iC,1));
1296  // Reco-level
1297  h[2][iC] = *(cont->ShowProjection(iC,4));
1298  }
1299  }
1300  TString* titles;
1301  //Int_t nvarToPlot = 0;
1302  if (fConfiguration == kSnail){
1303  if(fDecayChannel==31){
1304  //nvarToPlot = 12;
1305  titles = new TString[nvarToPlot];
1306  titles[0]="pT_Dplus (GeV/c)";
1307  titles[1]="rapidity";
1308  titles[2]="phi (rad)";
1309  titles[3]="cT (#mum)";
1310  titles[4]="cosPointingAngle";
1311  titles[5]="pT_1 (GeV/c)";
1312  titles[6]="pT_2 (GeV/c)";
1313  titles[7]="pT_3 (GeV/c)";
1314  titles[8]="d0_1 (#mum)";
1315  titles[9]="d0_2 (#mum)";
1316  titles[10]="d0_3 (#mum)";
1317  titles[11]="zVertex (cm)";
1318  } else if (fDecayChannel==22) {
1319  //nvarToPlot = 16;
1320  titles = new TString[nvarToPlot];
1321  titles[0]="p_{T}(#Lambda_{c}) [GeV/c]";
1322  titles[1]="y(#Lambda_{c})";
1323  titles[2]="#varphi(#Lambda_{c}) [rad]";
1324  titles[3]="onTheFlyStatusV0";
1325  titles[4]="z_{vtx} [cm]";
1326  titles[5]="centrality";
1327  titles[6]="fake";
1328  titles[7]="multiplicity";
1329  //titles[8]="pT(bachelor) [GeV/c]";
1330  titles[8]="p(bachelor) [GeV/c]";
1331  titles[9]="p_{T}(V0) [GeV/c]";
1332  titles[10]="y(V0)";
1333  titles[11]="#varphi(V0) [rad]";
1334  titles[12]="m_{inv}(#pi^{+}#pi^{+}) [GeV/c^{2}]";
1335  titles[13]="dcaV0 (nSigma)";
1336  titles[14]="cosine pointing angle (V0)";
1337  titles[15]="cosine pointing angle (#Lambda_{c})";
1338  //titles[16]="c#tauV0 (#mum)";
1339  //titles[17]="c#tau (#mum)";
1340  } else {
1341  //nvarToPlot = 12;
1342  titles = new TString[nvarToPlot];
1343  titles[0]="pT_D0 (GeV/c)";
1344  titles[1]="rapidity";
1345  titles[2]="cosThetaStar";
1346  titles[3]="pT_pi (GeV/c)";
1347  titles[4]="pT_K (Gev/c)";
1348  titles[5]="cT (#mum)";
1349  titles[6]="dca (#mum)";
1350  titles[7]="d0_pi (#mum)";
1351  titles[8]="d0_K (#mum)";
1352  titles[9]="d0xd0 (#mum^2)";
1353  titles[10]="cosPointingAngle";
1354  titles[11]="phi (rad)";
1355  }
1356  }
1357  else {
1358  //nvarToPlot = 8;
1359  titles = new TString[nvarToPlot];
1360  if (fDecayChannel==22) {
1361  titles[0]="p_{T}(#Lambda_{c}) [GeV/c]";
1362  titles[1]="y(#Lambda_{c})";
1363  titles[2]="#varphi(#Lambda_{c}) [rad]";
1364  titles[3]="onTheFlyStatusV0";
1365  titles[4]="z_{vtx} [cm]";
1366  titles[5]="centrality";
1367  titles[6]="fake";
1368  titles[7]="multiplicity";
1369  } else {
1370  titles[0]="pT_candidate (GeV/c)";
1371  titles[1]="rapidity";
1372  titles[2]="cT (#mum)";
1373  titles[3]="phi";
1374  titles[4]="z_{vtx}";
1375  titles[5]="centrality";
1376  titles[6]="fake";
1377  titles[7]="multiplicity";
1378  }
1379  }
1380 
1381  Int_t markers[16]={20,24,21,25,27,28,
1382  20,24,21,25,27,28,
1383  20,24,21,25};
1384  Int_t colors[3]={2,8,4};
1385  for(Int_t iC=0;iC<nvarToPlot; iC++){
1386  for(Int_t iStep=0;iStep<3;iStep++){
1387  h[iStep][iC].SetTitle(titles[iC].Data());
1388  h[iStep][iC].GetXaxis()->SetTitle(titles[iC].Data());
1389  Double_t maxh=h[iStep][iC].GetMaximum();
1390  h[iStep][iC].GetYaxis()->SetRangeUser(0,maxh*1.2);
1391  h[iStep][iC].SetMarkerStyle(markers[iC]);
1392  h[iStep][iC].SetMarkerColor(colors[iStep]);
1393  }
1394  }
1395 
1396  gStyle->SetCanvasColor(0);
1397  gStyle->SetFrameFillColor(0);
1398  gStyle->SetTitleFillColor(0);
1399  gStyle->SetStatColor(0);
1400 
1401  // drawing in 2 separate canvas for a matter of clearity
1402  TCanvas * c1 =new TCanvas(Form("c1New_%d",fDecayChannel),"Vars 0, 1, 2, 3",1100,1200);
1403  c1->Divide(3,4);
1404  Int_t iPad=1;
1405  for(Int_t iVar=0; iVar<4; iVar++){
1406  c1->cd(iPad++);
1407  h[0][iVar].DrawCopy("p");
1408  c1->cd(iPad++);
1409  h[1][iVar].DrawCopy("p");
1410  c1->cd(iPad++);
1411  h[2][iVar].DrawCopy("p");
1412  }
1413 
1414  TCanvas * c2 =new TCanvas(Form("c2New_%d",fDecayChannel),"Vars 4, 5, 6, 7",1100,1200);
1415  c2->Divide(3,4);
1416  iPad=1;
1417  for(Int_t iVar=4; iVar<8; iVar++){
1418  c2->cd(iPad++);
1419  h[0][iVar].DrawCopy("p");
1420  c2->cd(iPad++);
1421  h[1][iVar].DrawCopy("p");
1422  c2->cd(iPad++);
1423  h[2][iVar].DrawCopy("p");
1424  }
1425 
1426  if (fConfiguration == kSnail){
1427  TCanvas * c3 =new TCanvas(Form("c3New_%d",fDecayChannel),"Vars 8, 9, 10, 11",1100,1200);
1428  c3->Divide(3,4);
1429  iPad=1;
1430  for(Int_t iVar=8; iVar<12; iVar++){
1431  c3->cd(iPad++);
1432  h[0][iVar].DrawCopy("p");
1433  c3->cd(iPad++);
1434  h[1][iVar].DrawCopy("p");
1435  c3->cd(iPad++);
1436  h[2][iVar].DrawCopy("p");
1437  }
1438  if (fDecayChannel==22) {
1439  TCanvas * c4 =new TCanvas(Form("c4New_%d",fDecayChannel),"Vars 12, 13, 14, 15",1100,1200);
1440  c4->Divide(3,4);
1441  iPad=1;
1442  for(Int_t iVar=12; iVar<16; iVar++){
1443  c4->cd(iPad++);
1444  h[0][iVar].DrawCopy("p");
1445  c4->cd(iPad++);
1446  h[1][iVar].DrawCopy("p");
1447  c4->cd(iPad++);
1448  h[2][iVar].DrawCopy("p");
1449  }
1450  }
1451  }
1452 
1453  /*
1454  THnSparseD* hcorr = dynamic_cast<THnSparseD*> (GetOutputData(3));
1455 
1456  TH2D* corr1 = hcorr->Projection(0,2);
1457  TH2D* corr2 = hcorr->Projection(1,3);
1458 
1459  TCanvas * c7 =new TCanvas(Form("c7New_%d",fDecayChannel),"",800,400);
1460  c7->Divide(2,1);
1461  c7->cd(1);
1462  corr1->DrawCopy("text");
1463  c7->cd(2);
1464  corr2->DrawCopy("text");
1465  */
1466  TFile* file_projection = new TFile("CFtaskHFprojectionNew.root","RECREATE");
1467 
1468  // corr1->Write();
1469  // corr2->Write();
1470 
1471  for(Int_t iC=0;iC<nvarToPlot; iC++){
1472  for(Int_t iStep=0;iStep<3;iStep++){
1473  h[iStep][iC].Write(Form("Step%d_%s",iStep,titles[iC].Data()));
1474  }
1475  }
1476  file_projection->Close();
1477  for (Int_t ih = 0; ih<3; ih++) delete [] h[ih];
1478  delete [] h;
1479  delete [] titles;
1480 
1481 }
1482 
1483 //___________________________________________________________________________
1485 {
1486  //HERE ONE CAN CREATE OUTPUT OBJECTS, IN PARTICULAR IF THE OBJECT PARAMETERS DON'T NEED
1487  //TO BE SET BEFORE THE EXECUTION OF THE TASK
1488  //
1489  Info("UserCreateOutputObjects","CreateOutputObjects of task %s\n", GetName());
1490 
1491  //slot #1
1492  OpenFile(1);
1493  const char* nameoutput=GetOutputSlot(1)->GetContainer()->GetName();
1494  fHistEventsProcessed = new TH1I(nameoutput,"",2,0,2) ;
1495  fHistEventsProcessed->GetXaxis()->SetBinLabel(1,"Events processed (all)");
1496  fHistEventsProcessed->GetXaxis()->SetBinLabel(2,"Events analyzed (after selection)");
1497 
1498  PostData(1,fHistEventsProcessed) ;
1499  PostData(2,fCFManager->GetParticleContainer()) ;
1500  PostData(3,fCorrelation) ;
1501 
1502 }
1503 
1504 
1505 //_________________________________________________________________________
1507  // ad-hoc weight function from ratio of
1508  // pt spectra from FONLL 2.76 TeV and
1509  // pt spectra from MC production LHC12a17a (PYTHIA Perugia0 with pthard bins)
1510  if(fFuncWeight) delete fFuncWeight;
1511  fFuncWeight=new TF1("funcWeight","[0]+[1]*TMath::Exp(-[2]*x)",0.,50.);
1512  fFuncWeight->SetParameter(0,4.63891e-02);
1513  fFuncWeight->SetParameter(1,1.51674e+01);
1514  fFuncWeight->SetParameter(2,4.09941e-01);
1515  fUseWeight=kTRUE;
1516 }
1517 //_________________________________________________________________________
1519  // ad-hoc weight function from ratio of
1520  // D0 pt spectra in PbPb 2011 0-10% centrality and
1521  // pt spectra from MC production LHC12a17a (PYTHIA Perugia0 with pthard bins)
1522  if(fFuncWeight) delete fFuncWeight;
1523  fFuncWeight=new TF1("funcWeight","[0]+[1]/TMath::Power(x,[2])",0.05,50.);
1524  fFuncWeight->SetParameter(0,1.43116e-02);
1525  fFuncWeight->SetParameter(1,4.37758e+02);
1526  fFuncWeight->SetParameter(2,3.08583);
1527  fUseWeight=kTRUE;
1528 }
1529 
1530 //_________________________________________________________________________
1532  // weight function from the ratio of the LHC12a17b MC
1533  // and FONLL calculations for pp data
1534  if(fFuncWeight) delete fFuncWeight;
1535  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.);
1536  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);
1537  fUseWeight=kTRUE;
1538 }
1539 
1540 //_________________________________________________________________________
1542  // weight function from the ratio of the LHC12a17b MC
1543  // and FONLL calculations for pp data
1544  // corrected by the BAMPS Raa calculation for 30-50% CC
1545  if(fFuncWeight) delete fFuncWeight;
1546  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.);
1547  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);
1548  fUseWeight=kTRUE;
1549 }
1550 
1551 //_________________________________________________________________________
1553  // weight function from the ratio of the LHC16i2a MC
1554  // 1.5-14 GeV/c using data and 1-1.5, 14-50 GeV/c using FONLL calculations
1555 
1556  if(fHistoPtWeight) delete fHistoPtWeight;
1557  fHistoPtWeight = new TH1F("histoWeight","histoWeight",500,0.,50.);
1558  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};
1559  for(Int_t i=0; i<500; i++){
1560  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1561  }
1562  //SetWeightHistogram();
1563  fUseWeight=kTRUE;
1564 }
1565 //_________________________________________________________________________
1567  // weight function from the ratio of the LHC16i2a+b+c MC
1568  // and FONLL calculations for pp data
1569 
1570  if(fHistoPtWeight) delete fHistoPtWeight;
1571  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1572  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};
1573  for(Int_t i=0; i<400; i++){
1574  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1575  }
1576  //SetWeightHistogram();
1577  fUseWeight=kTRUE;
1578 }
1579 
1580 //_________________________________________________________________________
1582  // weight function from the ratio of the LHC16i2a+b+c MC
1583  // and FONLL calculations for pp data
1584  // corrected by the BAMPS Raa calculation for 30-50% CC
1585  if(fHistoPtWeight) delete fHistoPtWeight;
1586  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1587  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};
1588  for(Int_t i=0; i<400; i++){
1589  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1590  }
1591  fUseWeight=kTRUE;
1592 }
1593 
1594 //_________________________________________________________________________
1596  // weight function from the ratio of the LHC16i2a+b+c MC
1597  // and FONLL calculations for pp data
1598  // corrected by the TAMU Raa calculation for 0-10% CC (not available in 30-50% CC)
1599  if(fHistoPtWeight) delete fHistoPtWeight;
1600  fHistoPtWeight = new TH1F("histoWeight","histoWeight",400,0.,40.);
1601  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};
1602  for(Int_t i=0; i<400; i++){
1603  fHistoPtWeight->SetBinContent(i+1,binc[i]);
1604  }
1605  fUseWeight=kTRUE;
1606 }
1607 
1608 //_________________________________________________________________________
1610  // weight function from the ratio of the LHC13d3 MC
1611  // and FONLL calculations for pp data
1612  if(fFuncWeight) delete fFuncWeight;
1613  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.);
1614  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);
1615  fUseWeight=kTRUE;
1616 }
1617 
1618 //_________________________________________________________________________
1620  // weight function from the ratio of the LHC10f6a MC
1621  // and FONLL calculations for pp data
1622  if(fFuncWeight) delete fFuncWeight;
1623  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.);
1624  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);
1625  fUseWeight=kTRUE;
1626 }
1627 
1628 //_________________________________________________________________________
1630  // weight function from the ratio of the LHC12a12 MC
1631  // and FONLL calculations for pp data
1632  if(fFuncWeight) delete fFuncWeight;
1633  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.);
1634  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);
1635  fUseWeight=kTRUE;
1636 }
1637 
1638 //_________________________________________________________________________
1640  // weight function from the ratio of the LHC12a12bis MC
1641  // and FONLL calculations for pp data
1642  if(fFuncWeight) delete fFuncWeight;
1643  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.);
1644  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);
1645  fUseWeight=kTRUE;
1646 }
1647 
1648 //_________________________________________________________________________
1650  // weight function from the ratio of the LHC13e2fix MC
1651  // and FONLL calculations for pp data
1652  if(fFuncWeight) delete fFuncWeight;
1653  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.);
1654  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);
1655  fUseWeight=kTRUE;
1656 }
1657 
1658 //________________________________________________________________
1660  // weight function from the ratio of the LHC10f6a MC
1661  // and FONLL calculations for pp data
1662  if(fFuncWeight) delete fFuncWeight;
1663  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.);
1664  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);
1665  fUseWeight=kTRUE;
1666 }
1667 
1668 //________________________________________________________________
1670  // weight function from the ratio of the LHC10f6a MC
1671  // and FONLL calculations for pp data
1672  if(fFuncWeight) delete fFuncWeight;
1673  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.);
1674  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);
1675  fUseWeight=kTRUE;
1676 }
1677 
1678 //_________________________________________________________________________
1680  // weight function from the ratio of the LHC13d3 MC
1681  // and FONLL calculations for pPb data
1682  // using Lc simulated pt distribution
1683  if(fFuncWeight) delete fFuncWeight;
1684  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.);
1685  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);
1686  fUseWeight=kTRUE;
1687 }
1688 //_________________________________________________________________________
1690  // weight function from the ratio of the LHC16i6a MC
1691  // and FONLL calculations for pp data
1692  // using D0 simulated pt distribution
1693  if(fFuncWeight) delete fFuncWeight;
1694  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.);
1695  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);
1696  fUseWeight=kTRUE;
1697 }
1698 
1699 //_________________________________________________________________________
1701  // weight function from the ratio of the LHC11b2 MC
1702  // and FONLL calculations for pp data
1703  // using Lc simulated pt distribution
1704  if(fFuncWeight) delete fFuncWeight;
1705  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.);
1706  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);
1707  fUseWeight=kTRUE;
1708 }
1709 
1710 //_________________________________________________________________________
1712  // weight function from the ratio of the LHC10f7a MC
1713  // and FONLL calculations for pp data
1714  // using Lc simulated pt distribution
1715  if(fFuncWeight) delete fFuncWeight;
1716  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.);
1717  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);
1718  fUseWeight=kTRUE;
1719 }
1720 
1721 
1722 //_________________________________________________________________________
1724  // weight function from the ratio of the LHC15l2a2 MC
1725  // and FONLL calculations for pp data
1726  // using D0 simulated pt distribution
1727  if(fFuncWeight) delete fFuncWeight;
1728  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);
1729  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);
1730  fUseWeight=kTRUE;
1731 }
1732 
1733 
1734 //_________________________________________________________________________
1736 {
1737  //
1738  // calculating the weight to fill the container
1739  //
1740 
1741  // FNOLL central:
1742  // p0 = 1.63297e-01 --> 0.322643
1743  // p1 = 2.96275e+00
1744  // p2 = 2.30301e+00
1745  // p3 = 2.50000e+00
1746 
1747  // PYTHIA
1748  // p0 = 1.85906e-01 --> 0.36609
1749  // p1 = 1.94635e+00
1750  // p2 = 1.40463e+00
1751  // p3 = 2.50000e+00
1752 
1753  Double_t func1[4] = {0.322643,2.96275,2.30301,2.5};
1754  Double_t func2[4] = {0.36609,1.94635,1.40463,2.5};
1755 
1756  Double_t dndpt_func1 = dNdptFit(pt,func1);
1757  if(fUseFlatPtWeight) dndpt_func1 = 1./30.;
1758  Double_t dndpt_func2 = dNdptFit(pt,func2);
1759  AliDebug(2,Form("pt = %f, FONLL = %f, Pythia = %f, ratio = %f",pt,dndpt_func1,dndpt_func2,dndpt_func1/dndpt_func2));
1760  return dndpt_func1/dndpt_func2;
1761 }
1762 
1763 //__________________________________________________________________________________________________
1765 {
1766  //
1767  // calculating dNdpt
1768  //
1769 
1770  Double_t denom = TMath::Power((pt/par[1]), par[3] );
1771  Double_t dNdpt = par[0]*pt/TMath::Power(1.+denom, par[2]);
1772 
1773  return dNdpt;
1774 }
1775 
1776 //_________________________________________________________________________
1778 {
1779  //
1780  // Using an histogram as weight function
1781  // weight = 0 in the range outside the function
1782  //
1783  Double_t weight = 0.0;
1784  Int_t histoNbins = fHistoPtWeight->GetNbinsX();
1785  Int_t bin2 = fHistoPtWeight->FindBin(pt);
1786  if( (bin2>0) && (bin2<=histoNbins) ) {
1787  Int_t bin1=bin2-1;
1788  Int_t bin3=bin2+1;
1789  if(bin2==1) bin1=bin2+2;
1790  if(bin2==histoNbins) bin3=bin2-2;
1791  Float_t x_1=fHistoPtWeight->GetXaxis()->GetBinCenter(bin1);
1792  Float_t x_2=fHistoPtWeight->GetXaxis()->GetBinCenter(bin2);
1793  Float_t x_3=fHistoPtWeight->GetXaxis()->GetBinCenter(bin3);
1794  Float_t y_1=fHistoPtWeight->GetBinContent(bin1);
1795  Float_t y_2=fHistoPtWeight->GetBinContent(bin2);
1796  Float_t y_3=fHistoPtWeight->GetBinContent(bin3);
1797  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) );
1798  Double_t b=((y_1-y_2)-a*(x_1*x_1-x_2*x_2))/(x_1-x_2);
1799  Double_t c=y_3-a*(x_3*x_3)-b*x_3;
1800  weight = a*pt*pt+b*pt+c;
1801  }
1802  return weight;
1803 }
1804 
1805 //__________________________________________________________________________________________________
1807  //
1808  // calculating the z-vtx weight for the given run range
1809  //
1810 
1811  if(runnumber>146824 || runnumber<146803) return 1.0;
1812 
1813  Double_t func1[3] = {1.0, -0.5, 6.5 };
1814  Double_t func2[3] = {1.0, -0.5, 5.5 };
1815 
1816  Double_t dzFunc1 = DodzFit(z,func1);
1817  Double_t dzFunc2 = DodzFit(z,func2);
1818 
1819  return dzFunc1/dzFunc2;
1820 }
1821 
1822 //__________________________________________________________________________________________________
1824 
1825  //
1826  // Gaussian z-vtx shape
1827  //
1828  //gaussian = [0]/TMath::Sqrt(2.*TMath::Pi())/[2]*exp[-(x-[1])*(x-[1])/(2*[2]*[2])]
1829 
1830  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]);
1831 
1832  return value;
1833 }
1834 //__________________________________________________________________________________________________
1836  //
1837  // calculates the Nch weight using the measured and generateed Nch distributions
1838  //
1839  if(nch<=0) return 0.;
1840  if(!fHistoMeasNch || !fHistoMCNch) { AliError("Input histos to evaluate Nch weights missing"); return 0.; }
1841  Double_t pMeas=fHistoMeasNch->GetBinContent(fHistoMeasNch->FindBin(nch));
1842  Double_t pMC=fHistoMCNch->GetBinContent(fHistoMCNch->FindBin(nch));
1843  Double_t weight = pMC>0 ? pMeas/pMC : 0.;
1844  if(fUseMultRatioAsWeight) weight = pMC;
1845  return weight;
1846 }
1847 //__________________________________________________________________________________________________
1849  // creates historgam with measured multiplcity distribution in pp 7 TeV collisions (from Eur. Phys. J. C (2010) 68: 345–354)
1850  //
1851  // for Nch > 70 the points were obtained with a double NBD distribution fit
1852  // 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
1853  // fit1->SetParameter(1,1.63); // k parameter
1854  // fit1->SetParameter(2,12.8); // mean multiplicity
1855  //
1856  Double_t nchbins[82]={0.50,1.50,2.50,3.50,4.50,5.50,6.50,7.50,8.50,9.50,
1857  10.50,11.50,12.50,13.50,14.50,15.50,16.50,17.50,18.50,19.50,
1858  20.50,21.50,22.50,23.50,24.50,25.50,26.50,27.50,28.50,29.50,
1859  30.50,31.50,32.50,33.50,34.50,35.50,36.50,37.50,38.50,39.50,
1860  40.50,41.50,42.50,43.50,44.50,45.50,46.50,47.50,48.50,49.50,
1861  50.50,51.50,52.50,53.50,54.50,55.50,56.50,57.50,58.50,59.50,
1862  60.50,62.50,64.50,66.50,68.50,70.50,72.50,74.50,76.50,78.50,
1863  80.50,82.50,84.50,86.50,88.50,90.50,92.50,94.50,96.50,98.50,
1864  100.50,102.50};
1865  Double_t pch[81]={0.062011,0.072943,0.070771,0.067245,0.062834,0.057383,0.051499,0.04591,0.041109,0.036954,
1866  0.03359,0.030729,0.028539,0.026575,0.024653,0.0229,0.021325,0.019768,0.018561,0.017187,
1867  0.01604,0.014836,0.013726,0.012576,0.011481,0.010393,0.009502,0.008776,0.008024,0.007452,
1868  0.006851,0.006428,0.00594,0.005515,0.005102,0.00469,0.004162,0.003811,0.003389,0.003071,
1869  0.002708,0.002422,0.002184,0.001968,0.00186,0.00165,0.001577,0.001387,0.001254,0.001118,
1870  0.001037,0.000942,0.000823,0.000736,0.000654,0.000579,0.000512,0.00049,0.00045,0.000355,
1871  0.000296,0.000265,0.000193,0.00016,0.000126,0.0000851, 0.0000676,0.0000537,0.0000426, 0.0000338,
1872  0.0000268,0.0000213,0.0000166,0.0000133,0.0000106,0.00000837,0.00000662, 0.00000524,0.00000414, 0.00000327,
1873  0.00000258};
1874 
1875  if(fHistoMeasNch) delete fHistoMeasNch;
1876  fHistoMeasNch=new TH1F("hMeaseNch","",81,nchbins);
1877  for(Int_t i=0; i<81; i++){
1878  fHistoMeasNch->SetBinContent(i+1,pch[i]);
1879  fHistoMeasNch->SetBinError(i+1,0.);
1880  }
1881 }
1882 
1883 //__________________________________________________________________________________________________
1885  // processes output of Ds is selected
1886  Bool_t keep=kFALSE;
1887  if(recoAnalysisCuts > 0){
1888  Int_t isKKpi=recoAnalysisCuts&1;
1889  Int_t ispiKK=recoAnalysisCuts&2;
1890  Int_t isPhiKKpi=recoAnalysisCuts&4;
1891  Int_t isPhipiKK=recoAnalysisCuts&8;
1892  Int_t isK0starKKpi=recoAnalysisCuts&16;
1893  Int_t isK0starpiKK=recoAnalysisCuts&32;
1894  if(fDsOption==1){
1895  if(isKKpi && isPhiKKpi) keep=kTRUE;
1896  if(ispiKK && isPhipiKK) keep=kTRUE;
1897  }
1898  else if(fDsOption==2){
1899  if(isKKpi && isK0starKKpi) keep=kTRUE;
1900  if(ispiKK && isK0starpiKK) keep=kTRUE;
1901  }
1902  else if(fDsOption==3)keep=kTRUE;
1903  }
1904  return keep;
1905 }
1906 //__________________________________________________________________________________________________
1908 
1909  // processes output of Lc->V0+bnachelor is selected
1910 
1911  Bool_t keep=kFALSE;
1912 
1913  if (recoAnalysisCuts > 0){
1914 
1915  Int_t isK0Sp = recoAnalysisCuts&1;
1916  Int_t isLambdaBarpi = recoAnalysisCuts&2;
1917  Int_t isLambdapi = recoAnalysisCuts&4;
1918 
1919  if(fLctoV0bachelorOption == 1){
1920  if(isK0Sp) keep=kTRUE;
1921  }
1922  else if(fLctoV0bachelorOption == 2){
1923  if(isLambdaBarpi) keep=kTRUE;
1924  }
1925  else if(fLctoV0bachelorOption == 4){
1926  if(isLambdapi) keep=kTRUE;
1927  }
1928  else if(fLctoV0bachelorOption == 7) {
1929  if (isK0Sp || isLambdaBarpi || isLambdapi) keep=kTRUE;
1930  }
1931  }
1932  return keep;
1933 }
1934 
1935 //____________________________________________________________________________
1936 TProfile* AliCFTaskVertexingHF::GetEstimatorHistogram(const AliVEvent* event){
1937  // Get Estimator Histogram from period event->GetRunNumber();
1938  //
1939  // If you select SPD tracklets in |eta|<1 you should use type == 1
1940  //
1941 
1942  Int_t runNo = event->GetRunNumber();
1943  Int_t period = -1; // pp: 0-LHC10b, 1-LHC10c, 2-LHC10d, 3-LHC10e
1944  // pPb: 0-LHC13b, 1-LHC13c
1945 
1946  if (fIsPPbData) { // setting run numbers for LHC13 if pPb
1947  if (runNo>195343 && runNo<195484) period = 0;
1948  if (runNo>195528 && runNo<195678) period = 1;
1949  if (period<0 || period>1) return 0;
1950  } else { //else assume pp 2010
1951  if(runNo>114930 && runNo<117223) period = 0;
1952  if(runNo>119158 && runNo<120830) period = 1;
1953  if(runNo>122373 && runNo<126438) period = 2;
1954  if(runNo>127711 && runNo<130841) period = 3;
1955  if(period<0 || period>3) return 0;
1956  }
1957 
1958  return fMultEstimatorAvg[period];
1959 }
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
flag to define which task to use for Lc –> K0S+p
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
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
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)
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
slow configuration, all variables
TH1I * fHistEventsProcessed
pointer to the CF manager
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