51 Bool_t rejectIfNotFromQuark=kTRUE,
53 Bool_t isKeepDfromB = kFALSE,
Bool_t isKeepDfromBOnly = kFALSE,
57 TString usercomment =
"username",
59 Bool_t useFlatPtWeight = kFALSE,
60 Bool_t useZWeight = kFALSE,
61 Bool_t useNchWeight = kFALSE,
62 Bool_t useNtrkWeight = kFALSE,
68 Bool_t isFineNtrkBin = kFALSE)
71 if ( (isPPData && isPPbData) ||
72 (!isPPData && !isPPbData) ) {
73 printf(
"You have to choose the data kind; bad choise isPPData=%d isPPbData=%d\n",isPPData,isPPbData);
77 printf(
"Adding CF task using cuts from file %s\n",cutFile);
79 printf(
"The configuration is set to be SLOW --> all the variables will be used to fill the CF\n");
82 printf(
"The configuration is set to be FAST --> using only pt, y, ct, phi, zvtx, centrality, fake, multiplicity to fill the CF\n");
85 printf(
"The configuration is not defined! returning\n");
96 if (isSign == 0 && pdgCode < 0){
97 AliError(Form(
"Error setting PDG code (%d) and sign (0 --> Lc+ only): they are not compatible, returning",pdgCode));
100 else if (isSign == 1 && pdgCode > 0){
101 AliError(Form(
"Error setting PDG code (%d) and sign (1 --> Lc- only): they are not compatible, returning",pdgCode));
104 else if (isSign > 2 || isSign < 0){
105 AliError(Form(
"Sign not valid (%d, possible values are 0, 1, 2), returning",isSign));
109 TFile* fileCuts = TFile::Open(cutFile);
114 if (isKeepDfromBOnly) isKeepDfromB =
true;
118 if (lcToV0bachelorDecayMode==0) {
121 }
else if (lcToV0bachelorDecayMode==1) {
127 const Double_t phimax = 2.*TMath::Pi();
129 const Double_t phiV0max = 2.*TMath::Pi();
131 const Int_t nbinZvtx = 30;
132 const Int_t nbincent =18+1;
133 const Int_t nbinfake = 3;
135 const Int_t nbinmult = 49;
136 const Int_t nbinmult_0_20 = 20;
137 const Int_t nbinmult_20_50 = 15;
138 const Int_t nbinmult_50_80 = 10;
139 const Int_t nbinmult_80_100 = 4;
140 const Int_t nbinmult_100_400 = 3;
141 if(isPPbData) nbinmult += nbinmult_100_400;
144 const Int_t nbiny = 24;
145 const Int_t nbinphi = 18;
146 const Int_t nbinonFly = 2;
148 const Int_t nbinpBach = 300;
149 const Int_t nbinptV0 = 300;
150 const Int_t nbinyV0 = 24;
151 const Int_t nbinphiV0 = 18;
152 const Int_t nbindcaV0 = 150;
153 const Int_t nbininvMassV0 = 60;
154 const Int_t nbinpointingV0 = 42;
155 const Int_t nbinpointing = 42;
176 const UInt_t iinvMassV0= 12;
178 const UInt_t icosPAxV0 = 14;
188 const Int_t nvarTot = 16 ;
198 iBin[ionFly]=nbinonFly;
199 iBin[iZvtx]=nbinZvtx;
200 iBin[icent]=nbincent;
201 iBin[ifake]=nbinfake;
205 Int_t nbinmultTmp = nbinmult;
207 Int_t nbinLimmultFine = 100;
208 if (isPPbData) nbinLimmultFine = 200;
209 const UInt_t nbinMultFine = nbinLimmultFine;
210 binLimmultFine =
new Double_t[nbinMultFine+1];
211 for (
Int_t ibin0 = 0; ibin0 < nbinMultFine+1; ibin0++) {
212 binLimmultFine[ibin0] = ibin0;
214 nbinmultTmp = nbinLimmultFine;
216 const Int_t nbinmultTot = nbinmultTmp;
217 iBin[imult] = nbinmultTot;
220 iBin[ipbach]=nbinpBach;
221 iBin[ipTV0]=nbinptV0;
223 iBin[iphiV0]=nbinphiV0;
224 iBin[iinvMassV0]=nbininvMassV0;
225 iBin[idcaV0]=nbindcaV0;
226 iBin[icosPAxV0]=nbinpointingV0;
227 iBin[icosPA]=nbinpointing;
236 for (
Int_t ibinpT = 0 ; ibinpT<iBin[ipT]+1; ibinpT++){
237 binLimpT[ibinpT] = (
Double_t)floatbinLimpT[ibinpT];
238 printf(
"binLimpT[%d]=%f\n",ibinpT,binLimpT[ibinpT]);
271 Error(
"AliCFHeavyFlavourTaskMultiVarMultiStep",
"Calculated bin lim for mult - 1st range - differs from expected!\n");
274 if (binLimmult[nbinmult_0_20+nbinmult_20_50] !=
multmin_50_80) {
275 Error(
"AliCFHeavyFlavourTaskMultiVarMultiStep",
"Calculated bin lim for mult - 2nd range - differs from expected!\n");
278 if (binLimmult[nbinmult_0_20+nbinmult_20_50+nbinmult_50_80] !=
multmin_80_100) {
279 Error(
"AliCFHeavyFlavourTaskMultiVarMultiStep",
"Calculated bin lim for mult - 3rd range - differs from expected!\n");
282 if (binLimmult[nbinmult_0_20+nbinmult_20_50+nbinmult_50_80+nbinmult_80_100] !=
multmin_100_400) {
283 Error(
"AliCFHeavyFlavourTaskMultiVarMultiStep",
"Calculated bin lim for mult - 4th range - differs from expected!\n");
304 for(
Int_t i=0; i<=iBin[iphiV0]; i++) binLimphiV0[i]=(
Double_t)phiV0min + (phiV0max-phiV0min)/iBin[iphiV0]*(
Double_t)i ;
308 for(
Int_t i=0; i<=iBin[iinvMassV0]; i++) binLimInvMassV0[i]=(
Double_t)massV0min + (massV0max-massV0min)/iBin[iinvMassV0]*(
Double_t)i ;
336 nameContainer=
"CFHFccontainer0_CommonFramework_"+usercomment;
338 else if (isKeepDfromBOnly) {
339 nameContainer=
"CFHFccontainer0LcfromB_CommonFramework_"+usercomment;
342 nameContainer=
"CFHFccontainer0allLc_CommonFramework_"+usercomment;
348 Info(
"AliCFTaskVertexingHF",
"SETUP CONTAINER");
351 AliCFContainer* container;
353 container =
new AliCFContainer(nameContainer,
"container for tracks",nstep,nvarTot,iBin);
356 container =
new AliCFContainer(nameContainer,
"container for tracks",nstep,8,iBin);
360 container -> SetBinLimits(ipT,binLimpT);
361 container -> SetBinLimits(iy,binLimy);
362 container -> SetBinLimits(iphi,binLimphi);
363 container -> SetBinLimits(ionFly,binLimonFlyV0);
364 container -> SetBinLimits(iZvtx,binLimzvtx);
365 container -> SetBinLimits(icent,binLimcent);
366 container -> SetBinLimits(ifake,binLimfake);
367 if (isFineNtrkBin) container->SetBinLimits(imult, binLimmultFine);
368 else container->SetBinLimits(imult, binLimmult);
370 container -> SetVarTitle(ipT,
"p_{T}(#Lambda_{c}) [GeV/c]");
371 container -> SetVarTitle(iy,
"y(#Lambda_{c})");
372 container -> SetVarTitle(iphi,
"#phi(#Lambda_{c}) [rad]");
373 container -> SetVarTitle(ionFly,
"onTheFlyStatusV0");
374 container -> SetVarTitle(iZvtx,
"z_{vtx} [cm]");
375 container -> SetVarTitle(icent,
"centrality");
376 container -> SetVarTitle(ifake,
"fake");
377 container -> SetVarTitle(imult,
"multiplicity");
380 container -> SetBinLimits(ipbach,binLimpbach);
381 container -> SetBinLimits(ipTV0,binLimpTV0);
382 container -> SetBinLimits(iyV0,binLimyV0);
383 container -> SetBinLimits(iphiV0,binLimphiV0);
384 container -> SetBinLimits(iinvMassV0,binLimInvMassV0);
385 container -> SetBinLimits(idcaV0,binLimdcaV0);
386 container -> SetBinLimits(icosPAxV0,binLimcosPAV0);
387 container -> SetBinLimits(icosPA,binLimcosPA);
391 container -> SetVarTitle(ipbach,
"p(bachelor) [GeV/c]");
392 container -> SetVarTitle(ipTV0,
"p_{T}(V0) [GeV/c]");
393 container -> SetVarTitle(iyV0,
"y(V0)");
394 container -> SetVarTitle(iphiV0,
"#varphi(V0) [rad]");
395 container -> SetVarTitle(iinvMassV0,
"m_{inv}(#pi^{+},#pi^{-}) [GeV/c^{2}]");
396 container -> SetVarTitle(idcaV0,
"DCA(V0) [n#sigma]");
397 container -> SetVarTitle(icosPAxV0,
"cosine pointing angle(V0)");
398 container -> SetVarTitle(icosPA,
"cosine pointing angle (#Lambda_{c})");
403 container -> SetStepTitle(0,
"MCLimAcc");
404 container -> SetStepTitle(1,
"MC");
405 container -> SetStepTitle(2,
"MCAcc");
406 container -> SetStepTitle(3,
"RecoVertex");
407 container -> SetStepTitle(4,
"RecoRefit");
408 container -> SetStepTitle(5,
"Reco");
409 container -> SetStepTitle(6,
"RecoAcc");
410 container -> SetStepTitle(7,
"RecoITSCluster");
411 container -> SetStepTitle(8,
"RecoCuts");
412 container -> SetStepTitle(9,
"RecoPID");
419 AliCFTrackKineCuts *mcKineCuts =
new AliCFTrackKineCuts(
"mcKineCuts",
"MC-level kinematic cuts");
422 AliCFParticleGenCuts* mcGenCuts =
new AliCFParticleGenCuts(
"mcGenCuts",
"MC particle generation cuts");
423 Bool_t useAbsolute = kTRUE;
425 useAbsolute = kFALSE;
427 mcGenCuts->SetRequirePdgCode(pdgCode, useAbsolute);
428 mcGenCuts->SetAODMC(1);
431 AliCFAcceptanceCuts* accCuts =
new AliCFAcceptanceCuts(
"accCuts",
"Acceptance cuts");
432 AliCFTrackKineCuts * kineAccCuts =
new AliCFTrackKineCuts(
"kineAccCuts",
"Kine-Acceptance cuts");
437 AliCFTrackKineCuts *recKineCuts =
new AliCFTrackKineCuts(
"recKineCuts",
"rec-level kine cuts");
439 AliCFTrackQualityCuts *recQualityCuts =
new AliCFTrackQualityCuts(
"recQualityCuts",
"rec-level quality cuts");
441 AliCFTrackIsPrimaryCuts *recIsPrimaryCuts =
new AliCFTrackIsPrimaryCuts(
"recIsPrimaryCuts",
"rec-level isPrimary cuts");
443 printf(
"CREATE MC KINE CUTS\n");
445 mcList->AddLast(mcKineCuts);
446 mcList->AddLast(mcGenCuts);
448 printf(
"CREATE ACCEPTANCE CUTS\n");
450 accList->AddLast(kineAccCuts);
452 printf(
"CREATE RECONSTRUCTION CUTS\n");
454 recList->AddLast(recKineCuts);
455 recList->AddLast(recQualityCuts);
456 recList->AddLast(recIsPrimaryCuts);
461 printf(
"CREATE INTERFACE AND CUTS\n");
462 AliCFManager* man =
new AliCFManager() ;
463 man->SetParticleContainer(container);
464 man->SetParticleCutsList(0 , mcList);
465 man->SetParticleCutsList(1 , mcList);
466 man->SetParticleCutsList(2 , accList);
467 man->SetParticleCutsList(3 , emptyList);
468 man->SetParticleCutsList(4 , emptyList);
469 man->SetParticleCutsList(5 , emptyList);
470 man->SetParticleCutsList(6 , emptyList);
471 man->SetParticleCutsList(7 , emptyList);
472 man->SetParticleCutsList(8 , emptyList);
473 man->SetParticleCutsList(9 , emptyList);
479 ::Error(
"AddTaskCompareHF",
"No analysis manager to connect to.");
483 printf(
"CREATE TASK\n");
491 switch (lcToV0bachelorDecayMode) {
509 if (isKeepDfromB && !isKeepDfromBOnly) task->
SetDselection(2);
510 if (isKeepDfromB && isKeepDfromBOnly) task->
SetDselection(1);
512 TF1* funcWeight = 0x0;
514 funcWeight = (TF1*)fileCuts->Get(
"funcWeight");
515 if (funcWeight == 0x0){
516 Printf(
"FONLL Weights will be used");
520 Printf(
"User-defined Weights will be used. The function being:");
525 if (useNchWeight || useNtrkWeight){
528 if (isPPbData) hNchPrimaries = (TH1F*)fileCuts->Get(
"hNtrUnCorrEvWithCandWeight");
529 else hNchPrimaries = (TH1F*)fileCuts->Get(
"hGenPrimaryParticlesInelGt0");
530 hNchMeasured = (TH1F*)fileCuts->Get(
"hNchMeasured");
536 AliFatal(
"Histogram for multiplicity weights not found");
544 if(estimatorFilename.EqualTo(
"") ) {
545 printf(
"Estimator file not provided, multiplicity corrected histograms will not be filled\n");
548 TFile* fileEstimator=TFile::Open(estimatorFilename.Data());
550 AliFatal(
"File with multiplicity estimator not found");
561 const Char_t* periodNames[2] = {
"LHC13b",
"LHC13c"};
562 TProfile *multEstimatorAvg[2];
563 for (
Int_t ip=0; ip < 2; ip++) {
564 multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form(
"SPDmult10_%s",periodNames[ip]))->Clone(Form(
"SPDmult10_%s_clone",periodNames[ip])));
565 if (!multEstimatorAvg[ip]) {
566 AliFatal(Form(
"Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
574 const Char_t* periodNames[4] = {
"LHC10b",
"LHC10c",
"LHC10d",
"LHC10e"};
575 TProfile* multEstimatorAvg[4];
577 for(
Int_t ip=0; ip<4; ip++) {
578 multEstimatorAvg[ip] = (TProfile*)(fileEstimator->Get(Form(
"SPDmult10_%s",periodNames[ip]))->Clone(Form(
"SPDmult10_%s_clone",periodNames[ip])));
579 if (!multEstimatorAvg[ip]) {
580 AliFatal(Form(
"Multiplicity estimator for %s not found! Please check your estimator file",periodNames[ip]));
592 Printf(
"***************** CONTAINER SETTINGS *****************");
598 if(funcWeight) Printf(
"User-defined Weight function");
599 else Printf(
"FONLL will be used for the weights");
606 Printf(
"***************END CONTAINER SETTINGS *****************\n");
612 Bool_t AcceptanceUnf = kTRUE;
619 thnDim[0] = iBin[ipT];
620 thnDim[2] = iBin[ipT];
621 thnDim[1] = iBin[iy];
622 thnDim[3] = iBin[iy];
626 nameCorr=
"CFHFcorr0_CommonFramework_"+usercomment;
628 else if (isKeepDfromBOnly) {
629 nameCorr=
"CFHFcorr0KeepDfromBOnly_CommonFramework_"+usercomment;
632 nameCorr=
"CFHFcorr0allLc_CommonFramework_"+usercomment;
635 THnSparseD* correlation =
new THnSparseD(nameCorr,
"THnSparse with correlations",4,thnDim);
640 binEdges[0]= binLimpT;
641 binEdges[1]= binLimy;
643 correlation->SetBinEdges(0,binEdges[0]);
644 correlation->SetBinEdges(2,binEdges[0]);
646 correlation->SetBinEdges(1,binEdges[1]);
647 correlation->SetBinEdges(3,binEdges[1]);
649 correlation->Sumw2();
659 AliAnalysisDataContainer *cinput0 = mgr->GetCommonInputContainer();
663 TString outputfile = AliAnalysisManager::GetCommonFileName();
664 TString output1name=
"", output2name=
"", output3name=
"",output4name=
"";
665 output2name=nameContainer;
666 output3name=nameCorr;
668 outputfile +=
":PWG3_D2H_CFtaskLctoK0Sp_CommonFramework_"+usercomment;
669 output1name=
"CFHFchist0_CommonFramework_"+usercomment;
670 output4name=
"Cuts_CommonFramework_"+usercomment;
672 else if (isKeepDfromBOnly) {
673 outputfile +=
":PWG3_D2H_CFtaskLctoK0SpKeepDfromBOnly_CommonFramework_"+usercomment;
674 output1name=
"CFHFchist0DfromB_CommonFramework_"+usercomment;
675 output4name=
"Cuts_CommonFramework_DfromB_"+usercomment;
678 outputfile +=
":PWG3_D2H_CFtaskLctoK0SpKeepDfromB_CommonFramework_"+usercomment;
679 output1name=
"CFHFchist0allLc_CommonFramework_"+usercomment;
680 output4name=
"Cuts_CommonFramework_allLc_"+usercomment;
685 AliAnalysisDataContainer *coutput1 = mgr->CreateContainer(output1name, TH1I::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
687 AliAnalysisDataContainer *coutput2 = mgr->CreateContainer(output2name, AliCFContainer::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
689 AliAnalysisDataContainer *coutput3 = mgr->CreateContainer(output3name, THnSparseD::Class(),AliAnalysisManager::kOutputContainer,outputfile.Data());
691 AliAnalysisDataContainer *coutput4 = mgr->CreateContainer(output4name, AliRDHFCuts::Class(),AliAnalysisManager::kOutputContainer, outputfile.Data());
695 mgr->ConnectInput(task,0,mgr->GetCommonInputContainer());
696 mgr->ConnectOutput(task,1,coutput1);
697 mgr->ConnectOutput(task,2,coutput2);
698 mgr->ConnectOutput(task,3,coutput3);
699 mgr->ConnectOutput(task,4,coutput4);
Bool_t GetCentralitySelection()
const Double_t cosPAV0min
void SetWeightFunction(TF1 *func)
const Float_t multmax_20_50
void SetRejectCandidateIfNotFromQuark(Bool_t opt)
void SetMultiplVsZProfileLHC10e(TProfile *hprof)
void SetCFManager(AliCFManager *io)
CORRECTION FRAMEWORK RELATED FUNCTIONS.
void SetDecayChannel(Int_t decayChannel)
Bool_t GetRejectCandidateIfNotFromQuark()
void SetFillFromGenerated(Bool_t flag)
get corr manager
void SetUseNchTrackletsWeight(Bool_t useWeight=kTRUE)
void SetUseMCVertex(Bool_t opt)
void SetMCNchHisto(TH1F *h)
const Float_t multmin_0_20
AliCFTaskVertexingHF * AddTaskCFVertexingHFLctoV0bachelor(const char *cutFile="./LctoV0bachelorCuts.root", Bool_t rejectIfNotFromQuark=kTRUE, Bool_t isKeepDfromB=kFALSE, Bool_t isKeepDfromBOnly=kFALSE, Int_t configuration=AliCFTaskVertexingHF::kCheetah, Int_t pdgCode=4122, Char_t isSign=2, Char_t lcToV0bachelorDecayMode=0, TString usercomment="username", Bool_t useWeight=kFALSE, Bool_t useFlatPtWeight=kFALSE, Bool_t useZWeight=kFALSE, Bool_t useNchWeight=kFALSE, Bool_t useNtrkWeight=kFALSE, TString estimatorFilename="", Int_t multiplicityEstimator=AliCFTaskVertexingHF::kNtrk10, Bool_t isPPData=kTRUE, Bool_t isPPbData=kFALSE, Double_t refMult=9.26, Bool_t isFineNtrkBin=kFALSE)
const Float_t multmin_50_80
void SetMeasuredNchHisto(TH1F *h)
void SetIsPPData(Bool_t flag)
const Float_t multmax_50_80
void SetIsPPbData(Bool_t flag)
void SetCentralitySelection(Bool_t centSelec=kTRUE)
const Float_t multmin_80_100
const Float_t multmax_80_100
void SetReferenceMultiplcity(Double_t rmu)
void SetUseWeight(Bool_t useWeight)
void SetUseZvtxCorrectedNtrkEstimator(Bool_t flag)
const Float_t multmin_20_50
void SetConfiguration(Int_t configuration)
void SetDselection(UShort_t originDselection)
void SetCountLctoLambdapi()
Float_t * GetPtBinLimits() const
const Float_t multmax_100_400
const Float_t multmax_0_20
TF1 * GetWeightFunction() const
void SetUseNchWeight(Bool_t useWeight)
void SetUseFlatPtWeight(Bool_t useWeight)
void SetCorrelationMatrix(THnSparse *h)
UNFOLDING.
void SetMultiplVsZProfileLHC10b(TProfile *hprof)
void SetMultiplVsZProfileLHC10d(TProfile *hprof)
void SetSign(Char_t isSign)
Bool_t GetUseWeight() const
const Double_t cosPAV0max
slow configuration, all variables
void SetMultiplicityEstimator(Int_t value)
void SetMultiplVsZProfileLHC13b(TProfile *hprof)
Bool_t GetFillFromGenerated() const
void SetMultiplVsZProfileLHC13c(TProfile *hprof)
void SetFakeSelection(Int_t fakeSel=0)
void SetUseZWeight(Bool_t useWeight)
void SetMultiplVsZProfileLHC10c(TProfile *hprof)
const Float_t multmin_100_400