24 #include <Riostream.h>
26 #include "AliVEvent.h"
27 #include "AliESDEvent.h"
28 #include "AliAODEvent.h"
29 #include "AliVVertex.h"
30 #include "AliESDVertex.h"
32 #include "AliAODVertex.h"
33 #include "AliESDtrack.h"
34 #include "AliAODTrack.h"
35 #include "AliESDtrackCuts.h"
36 #include "AliCentrality.h"
39 #include "AliAODMCHeader.h"
40 #include "AliAODMCParticle.h"
41 #include "AliVertexerTracks.h"
43 #include "AliAnalysisManager.h"
44 #include "AliInputEventHandler.h"
45 #include "AliPIDResponse.h"
46 #include "AliAnalysisUtils.h"
47 #include "AliMultSelection.h"
61 AliAnalysisCuts(name,title),
66 fMinSPDMultiplicity(0),
67 fTriggerMask(AliVEvent::kAnyINT),
68 fUseOnlyOneTrigger(kFALSE),
85 fRemoveDaughtersFromPrimary(kFALSE),
87 fUsePhysicsSelection(kTRUE),
99 fMaxRapidityCand(-999.),
100 fKeepSignalMC(kFALSE),
101 fIsCandTrackSPDFirst(kFALSE),
102 fMaxPtCandTrackSPDFirst(0.),
103 fApplySPDDeadPbPb2011(kFALSE),
104 fApplySPDMisalignedPP2012(kFALSE),
105 fMaxDiffTRKV0Centr(-1.),
106 fRemoveTrackletOutliers(kFALSE),
109 fUseTrackSelectionWithFilterBits(kTRUE),
110 fUseCentrFlatteningInMC(kFALSE),
111 fHistCentrDistr(0x0),
112 fCutRatioClsOverCrossRowsTPC(0),
113 fCutRatioSignalNOverCrossRowsTPC(0),
114 fCutMinCrossedRowsTPCPtDep(
""),
115 f1CutMinNCrossedRowsTPCPtDep(0x0)
124 AliAnalysisCuts(source),
125 fMinVtxType(source.fMinVtxType),
126 fMinVtxContr(source.fMinVtxContr),
127 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
128 fMaxVtxZ(source.fMaxVtxZ),
129 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
130 fTriggerMask(source.fTriggerMask),
131 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
134 fnPtBins(source.fnPtBins),
135 fnPtBinLimits(source.fnPtBinLimits),
137 fnVars(source.fnVars),
139 fnVarsForOpt(source.fnVarsForOpt),
141 fGlobalIndex(source.fGlobalIndex),
144 fUsePID(source.fUsePID),
145 fUseAOD049(source.fUseAOD049),
147 fWhyRejection(source.fWhyRejection),
148 fEvRejectionBits(source.fEvRejectionBits),
149 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
150 fUseMCVertex(source.fUseMCVertex),
151 fUsePhysicsSelection(source.fUsePhysicsSelection),
152 fOptPileup(source.fOptPileup),
153 fMinContrPileup(source.fMinContrPileup),
154 fMinDzPileup(source.fMinDzPileup),
155 fUseCentrality(source.fUseCentrality),
156 fMinCentrality(source.fMinCentrality),
157 fMaxCentrality(source.fMaxCentrality),
158 fFixRefs(source.fFixRefs),
159 fIsSelectedCuts(source.fIsSelectedCuts),
160 fIsSelectedPID(source.fIsSelectedPID),
161 fMinPtCand(source.fMinPtCand),
162 fMaxPtCand(source.fMaxPtCand),
163 fMaxRapidityCand(source.fMaxRapidityCand),
164 fKeepSignalMC(source.fKeepSignalMC),
165 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
166 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
167 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
168 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
169 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
170 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
171 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
172 fKinkReject(source.fKinkReject),
173 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
174 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
175 fHistCentrDistr(0x0),
176 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
177 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
178 fCutMinCrossedRowsTPCPtDep(
""),
179 f1CutMinNCrossedRowsTPCPtDep(0x0)
184 cout<<
"Copy constructor"<<endl;
205 if(&source ==
this)
return *
this;
207 AliAnalysisCuts::operator=(source);
304 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
305 AliWarning(
"Centrality estimator not valid");
309 if (centvalue<-998.){
334 if(maxCentr<minCentr){
335 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
340 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
344 Double_t ref=0.,bincont=0.,binrefwidth=1.;
346 if(TMath::Abs(centrRef)<0.0001){
351 else if(centrRef>0.){
352 binref=h->FindBin(centrRef);
353 if(binref<1||binref>h->GetNbinsX()){
354 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
360 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
366 for(Int_t j=1;j<=h->GetNbinsX();j++){
367 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
368 bincont=h->GetBinContent(j);
373 h->SetBinContent(j,1.1);
399 Double_t centDigits=centvalue-(Int_t)(centvalue*100.)/100.;
402 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
406 if(centDigits*100.<bincont)
return kTRUE;
417 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
418 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
419 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
426 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
430 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
433 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
438 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
441 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
466 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
473 TString firedTriggerClasses=((AliAODEvent*)event)->GetFiredTriggerClasses();
475 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
485 Int_t nTracks=((AliAODEvent*)event)->GetNumberOfTracks();
486 for(Int_t itr=0; itr<nTracks; itr++){
487 AliAODTrack* tr=(AliAODTrack*)((AliAODEvent*)event)->GetTrack(itr);
488 tr->SetAODEvent((AliAODEvent*)event);
503 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
510 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
521 const AliVVertex *vertex =
event->GetPrimaryVertex();
527 TString
title=vertex->GetTitle();
540 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
548 const AliVVertex *vSPD = ((AliAODEvent*)event)->GetPrimaryVertexSPD();
549 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
559 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
572 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
579 AliAnalysisUtils utils;
580 Bool_t isPUMV = utils.IsPileUpMV(event);
591 Bool_t okCent=kFALSE;
592 if(rejection==0) okCent=kTRUE;
604 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
607 Double_t ntracklets=((AliAODEvent*)event)->GetTracklets()->GetNumberOfTracklets();
608 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
609 if(ntracklets<1000. && v0cent<cutval){
638 Int_t ndaughters = d->GetNDaughters();
640 Double_t pos[3],cov[6];
642 vAOD->GetCovarianceMatrix(cov);
643 const AliESDVertex vESD(pos,cov,100.,100);
647 for(Int_t idg=0; idg<ndaughters; idg++) {
648 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
649 if(!dgTrack) {retval = kFALSE;
continue;}
651 if(dgTrack->Charge()==0)
continue;
654 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
668 if(!rows.Contains(
"pt")) {
669 if(print) AliError(
"string must contain \"pt\"");
693 tmp.ReplaceAll(
"pt",
"x");
703 if(!cuts)
return kTRUE;
705 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
709 AliESDtrack esdTrack(track);
711 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
712 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
713 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
715 esdTrack.RelateToVertex(primary,0.,3.);
718 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
722 AliAODVertex *maybeKink=track->GetProdVertex();
723 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
728 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
729 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
734 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
735 Float_t nClustersTPC = esdTrack.GetTPCNcls();
736 if(nCrossedRowsTPC!=0){
737 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
745 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
746 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
747 if(nCrossedRowsTPC!=0){
748 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
762 Bool_t deadSPDLay1PbPb2011[20][4]={
763 {kTRUE,kTRUE,kTRUE,kTRUE},
764 {kTRUE,kTRUE,kTRUE,kTRUE},
765 {kTRUE,kTRUE,kTRUE,kTRUE},
766 {kTRUE,kTRUE,kTRUE,kTRUE},
767 {kTRUE,kTRUE,kTRUE,kTRUE},
768 {kFALSE,kFALSE,kTRUE,kTRUE},
769 {kTRUE,kTRUE,kFALSE,kFALSE},
770 {kTRUE,kTRUE,kTRUE,kTRUE},
771 {kFALSE,kFALSE,kTRUE,kTRUE},
772 {kTRUE,kTRUE,kTRUE,kTRUE},
773 {kTRUE,kTRUE,kFALSE,kFALSE},
774 {kTRUE,kTRUE,kTRUE,kTRUE},
775 {kFALSE,kFALSE,kFALSE,kFALSE},
776 {kFALSE,kFALSE,kTRUE,kTRUE},
777 {kFALSE,kFALSE,kFALSE,kFALSE},
778 {kFALSE,kFALSE,kFALSE,kFALSE},
779 {kTRUE,kTRUE,kTRUE,kTRUE},
780 {kTRUE,kTRUE,kFALSE,kFALSE},
781 {kFALSE,kFALSE,kFALSE,kFALSE},
782 {kFALSE,kFALSE,kFALSE,kFALSE}
784 Bool_t deadSPDLay2PbPb2011[40][4]={
785 {kTRUE,kTRUE,kTRUE,kTRUE},
786 {kTRUE,kTRUE,kTRUE,kTRUE},
787 {kTRUE,kTRUE,kTRUE,kTRUE},
788 {kTRUE,kTRUE,kTRUE,kTRUE},
789 {kTRUE,kTRUE,kTRUE,kTRUE},
790 {kTRUE,kTRUE,kTRUE,kTRUE},
791 {kTRUE,kTRUE,kTRUE,kTRUE},
792 {kTRUE,kTRUE,kTRUE,kTRUE},
793 {kTRUE,kTRUE,kTRUE,kTRUE},
794 {kTRUE,kTRUE,kTRUE,kTRUE},
795 {kTRUE,kTRUE,kTRUE,kTRUE},
796 {kTRUE,kTRUE,kTRUE,kTRUE},
797 {kFALSE,kFALSE,kFALSE,kFALSE},
798 {kFALSE,kFALSE,kTRUE,kTRUE},
799 {kTRUE,kTRUE,kTRUE,kTRUE},
800 {kTRUE,kTRUE,kTRUE,kTRUE},
801 {kTRUE,kTRUE,kFALSE,kFALSE},
802 {kTRUE,kTRUE,kTRUE,kTRUE},
803 {kTRUE,kTRUE,kTRUE,kTRUE},
804 {kTRUE,kTRUE,kTRUE,kTRUE},
805 {kFALSE,kFALSE,kFALSE,kFALSE},
806 {kFALSE,kFALSE,kFALSE,kFALSE},
807 {kTRUE,kTRUE,kTRUE,kTRUE},
808 {kTRUE,kTRUE,kTRUE,kTRUE},
809 {kFALSE,kFALSE,kFALSE,kFALSE},
810 {kFALSE,kFALSE,kFALSE,kFALSE},
811 {kTRUE,kTRUE,kTRUE,kTRUE},
812 {kTRUE,kTRUE,kTRUE,kTRUE},
813 {kFALSE,kFALSE,kFALSE,kFALSE},
814 {kFALSE,kFALSE,kFALSE,kFALSE},
815 {kFALSE,kFALSE,kFALSE,kFALSE},
816 {kFALSE,kFALSE,kFALSE,kFALSE},
817 {kTRUE,kTRUE,kTRUE,kTRUE},
818 {kTRUE,kTRUE,kTRUE,kTRUE},
819 {kTRUE,kTRUE,kFALSE,kFALSE},
820 {kTRUE,kTRUE,kTRUE,kTRUE},
821 {kFALSE,kFALSE,kFALSE,kFALSE},
822 {kFALSE,kFALSE,kFALSE,kFALSE},
823 {kFALSE,kFALSE,kFALSE,kFALSE},
824 {kFALSE,kFALSE,kFALSE,kFALSE}
826 Double_t xyz1[3],xyz2[3];
827 esdTrack.GetXYZAt(3.9,0.,xyz1);
828 esdTrack.GetXYZAt(7.6,0.,xyz2);
829 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
830 if(phi1<0) phi1+=2*TMath::Pi();
831 Int_t lad1=(Int_t)(phi1/(2.*TMath::Pi()/20.));
832 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
833 if(phi2<0) phi2+=2*TMath::Pi();
834 Int_t lad2=(Int_t)(phi2/(2.*TMath::Pi()/40.));
835 Int_t mod1=(Int_t)((xyz1[2]+14)/7.);
836 Int_t mod2=(Int_t)((xyz2[2]+14)/7.);
837 Bool_t lay1ok=kFALSE;
838 if(mod1>=0 && mod1<4 && lad1<20){
839 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
841 Bool_t lay2ok=kFALSE;
842 if(mod2>=0 && mod2<4 && lad2<40){
843 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
845 if(!lay1ok && !lay2ok)
return kFALSE;
850 Double_t xyz1[3],xyz2[3];
851 esdTrack.GetXYZAt(3.9,0.,xyz1);
852 esdTrack.GetXYZAt(7.6,0.,xyz2);
853 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
854 if(phi1<0) phi1+=2*TMath::Pi();
855 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
856 if(phi2<0) phi2+=2*TMath::Pi();
858 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
860 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
861 if(!lay1ok || !lay2ok)
return kFALSE;
873 printf(
"Changing the pt bins\n");
877 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
885 for(Int_t ib=0; ib<nPtBinLimits; ib++)
fPtBinLimits[ib]=ptBinLimits[ib];
899 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
905 for(Int_t iv=0; iv<nVars; iv++) {
923 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
929 for(Int_t iv=0; iv<
fnVars; iv++) {
943 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
955 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
959 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
966 for(Int_t iv=0; iv<
fnVars; iv++) {
968 for(Int_t ib=0; ib<
fnPtBins; ib++) {
972 cout<<
"Overflow, exit..."<<endl;
988 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
994 fCutsRD[iGl] = cutsRDGlob[iGl];
1011 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1012 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1013 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1015 TString estimator=
"";
1032 cout<<
"Array of variables"<<endl;
1033 for(Int_t iv=0;iv<
fnVars;iv++){
1039 cout<<
"Array of optimization"<<endl;
1040 for(Int_t iv=0;iv<
fnVars;iv++){
1046 cout<<
"Array of upper/lower cut"<<endl;
1047 for(Int_t iv=0;iv<
fnVars;iv++){
1053 cout<<
"Array of ptbin limits"<<endl;
1060 cout<<
"Matrix of cuts"<<endl;
1061 for(Int_t iv=0;iv<
fnVars;iv++){
1079 cout<<
" Trigger selection pattern: ";
1081 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1084 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1085 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1086 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1087 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1088 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1089 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1090 cout << endl<< endl;
1106 cutsRD=
new Float_t*[
fnVars];
1107 for(iv=0; iv<
fnVars; iv++) {
1108 cutsRD[iv] =
new Float_t[
fnPtBins];
1112 for(Int_t iGlobal=0; iGlobal<
fGlobalIndex; iGlobal++) {
1114 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1125 return iPtBin*
fnVars+iVar;
1133 iPtBin=(Int_t)iGlob/
fnVars;
1160 cout<<
"Cuts not iniziaisez yet"<<endl;
1171 AliMultSelection *multSelection = (AliMultSelection * ) aodEvent->FindListObject(
"MultSelection");
1173 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1177 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1178 Int_t qual = multSelection->GetEvSelCode();
1179 if(qual == 199 ) cent=-999;
1183 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(Int_t)estimator));
1194 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aodEvent)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1197 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1198 if(!header) AliFatal(
"Not a standard AOD");
1199 AliCentrality *
centrality=header->GetCentralityP();
1201 Bool_t isSelRun=kFALSE;
1202 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1203 if(!centrality)
return cent;
1206 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1208 Int_t quality = centrality->GetQuality();
1210 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1212 Int_t runnum=aodEvent->GetRunNumber();
1213 for(Int_t ir=0;ir<5;ir++){
1214 if(runnum==selRun[ir]){
1219 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1226 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1227 v0+=aodV0->GetMTotV0A();
1228 v0+=aodV0->GetMTotV0C();
1229 if(cent==0&&v0<19500)
return -1;
1230 Float_t tkl = (Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1231 Float_t val= 1.30552 + 0.147931 * v0;
1232 Float_t tklSigma[101]={176.644, 156.401, 153.789, 153.015, 142.476, 137.951, 136.127, 129.852, 127.436, 124.86, 120.788, 115.611, 113.172, 110.496, 109.127, 104.421, 102.479, 99.9766, 97.5152, 94.0654, 92.4602, 89.3364, 87.1342, 83.3497, 82.6216, 81.1084, 78.0793, 76.1234, 72.9434, 72.1334, 68.0056, 68.2755, 66.0376, 62.9666, 62.4274, 59.65, 58.3776, 56.6361, 54.5184, 53.4224, 51.932, 50.8922, 48.2848, 47.912, 46.5717, 43.4114, 43.2083, 41.3065, 40.1863, 38.5255, 37.2851, 37.5396, 34.4949, 33.8366, 31.8043, 31.7412, 30.8392, 30.0274, 28.8793, 27.6398, 26.6488, 25.0183, 25.1489, 24.4185, 22.9107, 21.2002, 21.6977, 20.1242, 20.4963, 19.0235, 19.298, 17.4103, 16.868, 15.2939, 15.2939, 16.0295, 14.186, 14.186, 15.2173, 12.9504, 12.9504, 12.9504, 15.264, 12.3674, 12.3674, 12.3674, 12.3674, 12.3674, 18.3811, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544, 13.7544};
1233 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(Int_t)cent] )
return -1;
1238 cent=(Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1240 Int_t quality = centrality->GetQuality();
1242 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1244 Int_t runnum=aodEvent->GetRunNumber();
1245 for(Int_t ir=0;ir<5;ir++){
1246 if(runnum==selRun[ir]){
1251 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1257 cent=(Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1259 Int_t quality = centrality->GetQuality();
1261 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1263 Int_t runnum=aodEvent->GetRunNumber();
1264 for(Int_t ir=0;ir<5;ir++){
1265 if(runnum==selRun[ir]){
1270 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1276 cent=(Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1278 Int_t quality = centrality->GetQuality();
1280 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1282 Int_t runnum=aodEvent->GetRunNumber();
1283 for(Int_t ir=0;ir<5;ir++){
1284 if(runnum==selRun[ir]){
1289 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1295 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1297 Int_t quality = centrality->GetQuality();
1299 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1301 Int_t runnum=aodEvent->GetRunNumber();
1302 for(Int_t ir=0;ir<5;ir++){
1303 if(runnum==selRun[ir]){
1308 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1314 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1316 Int_t quality = centrality->GetQuality();
1318 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1320 Int_t runnum=aodEvent->GetRunNumber();
1321 for(Int_t ir=0;ir<5;ir++){
1322 if(runnum==selRun[ir]){
1327 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1333 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1335 Int_t quality = centrality->GetQuality();
1337 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1339 Int_t runnum=aodEvent->GetRunNumber();
1340 for(Int_t ir=0;ir<5;ir++){
1341 if(runnum==selRun[ir]){
1346 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1351 AliWarning(
"Centrality estimator not valid");
1369 Bool_t areEqual=kTRUE;
1385 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1387 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1389 if(
fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)!=obj->
fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)) {printf(
"ClusterReq SPD %d %d\n",
fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD),obj->
fTrackCuts->GetClusterRequirementITS(AliESDtrackCuts::kSPD)); areEqual=kFALSE;}
1393 for(Int_t iv=0;iv<
fnVars;iv++) {
1411 TString ptString =
"pT range";
1413 TString firstLine(Form(
"* %-15s",ptString.Data()));
1414 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1416 if (ivar == fnVars){
1420 Printf(
"%s",firstLine.Data());
1422 for (Int_t ipt=0; ipt<
fnPtBins; ipt++){
1424 if (ipt==fnPtBins-1){
1430 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1433 Printf(
"%s",line.Data());
1443 AliAODEvent *aod)
const
1450 AliError(
"Can not remove daughters from vertex without AOD event");
1456 AliDebug(2,
"Removal of daughter tracks failed");
1475 AliError(
"Can not get MC vertex without AOD event");
1480 AliAODMCHeader *mcHeader =
1481 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1483 AliError(
"Can not get MC vertex without AODMCHeader event");
1487 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1488 mcHeader->GetVertex(pos);
1489 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1492 AliDebug(2,
"Removal of daughter tracks failed");
1508 AliAODVertex *origownvtx)
const
1518 delete origownvtx; origownvtx=NULL;
1523 delete origownvtx; origownvtx=NULL;
1535 if(!aod)
return kFALSE;
1538 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aod)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1540 if(!mcArray)
return kFALSE;
1543 Int_t label = d->MatchToMC(pdg,mcArray);
1558 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1559 vertexer->SetITSMode();
1560 vertexer->SetMinClusters(3);
1562 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1563 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1564 Float_t diamondcovxy[3];
1565 event->GetDiamondCovXY(diamondcovxy);
1566 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1567 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1568 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1569 vertexer->SetVtxStart(diamond);
1570 delete diamond; diamond=NULL;
1573 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1574 if(!vertexESD)
return kFALSE;
1575 if(vertexESD->GetNContributors()<=0) {
1577 delete vertexESD; vertexESD=NULL;
1580 delete vertexer; vertexer=NULL;
1583 Double_t pos[3],cov[6],chi2perNDF;
1584 vertexESD->GetXYZ(pos);
1585 vertexESD->GetCovMatrix(cov);
1586 chi2perNDF = vertexESD->GetChi2toNDF();
1587 delete vertexESD; vertexESD=NULL;
1589 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1590 pvtx->SetChi2perNDF(chi2perNDF);
1591 pvtx->SetCovMatrix(cov);
void SetNPtBins(Int_t nptBins)
Int_t fIsSelectedCuts
fix the daughter track references
Bool_t IsEventSelectedForCentrFlattening(Float_t centvalue)
Float_t fMinDzPileup
min. n. of tracklets in pileup vertex
Double_t fMaxPtCandTrackSPDFirst
flag to select the track kFirst criteria for pt < ptlimit
Int_t fWhyRejection
PID for heavy flavours manager.
Int_t fCutOnzVertexSPD
flag to apply cut on tracklets vs. centrality for 2011 data
void SetupPID(AliVEvent *event)
Bool_t IsSignalMC(AliAODRecoDecay *d, AliAODEvent *aod, Int_t pdg) const
Bool_t fUseMCVertex
flag to switch on the removal of duaghters from the primary vertex computation
Bool_t fUseOnlyOneTrigger
trigger mask
Int_t IsEventSelectedInCentrality(AliVEvent *event)
Bool_t SetMCPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Bool_t fRemoveDaughtersFromPrimary
void SetHistoForCentralityFlattening(TH1F *h, Double_t minCentr, Double_t maxCentr, Double_t centrRef=0., Int_t switchTRand=0)
void UnsetOwnPrimaryVtx()
void SetUseCentrality(Int_t flag=1)
Float_t * fPtBinLimits
"number of limits", that is fnPtBins+1
Int_t fMinVtxContr
0: not cut; 1: SPDZ; 2: SPD3D; 3: Tracks
Float_t fMaxVtxRedChi2
minimum vertex contributors
void SetMClowenpp2011(Bool_t mc)
const Float_t * GetCuts() const
void SetMinCrossedRowsTPCPtDep(const char *rows="")
Float_t fCutRatioClsOverCrossRowsTPC
histogram with reference centrality distribution for centrality distribution flattening ...
Int_t fMinVtxType
cuts on the event
void SetppLowEn2011(Bool_t opt)
Double_t fMaxRapidityCand
minimum pt of the candidate
AliRDHFCuts & operator=(const AliRDHFCuts &source)
Float_t GetCutValue(Int_t iVar, Int_t iPtBin) const
Int_t fUseCentrality
min deltaz between main and pileup vertices
void SetPidHF(AliAODPidHF *pidObj)
see enum below
AliAODPidHF * GetPidHF() const
void RecalculateImpPars(AliAODVertex *vtxAODNew, AliAODEvent *aod)
Bool_t fRemoveTrackletOutliers
Max. difference between TRK and V0 centrality (remove TPC pileup for PbPb 2011)
AliRDHFCuts(const Char_t *name="RDHFCuts", const Char_t *title="")
ULong64_t fTriggerMask
SPD multiplicity.
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
void SetPbPb(Bool_t pbpb)
TString * fVarNames
number of cut vars for candidates
Double_t fMaxPtCand
minimum pt of the candidate
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts) const
Bool_t fFixRefs
maximum centrality for selected events
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd) const
Int_t fOptPileup
use Physics selection criteria
AliESDtrackCuts * GetTrackCuts() const
void PrintTrigger() const
Float_t fMaxVtxZ
maximum chi2/ndf
Float_t GetCentrality(AliAODEvent *aodEvent)
Int_t fIsSelectedPID
outcome of cuts selection
AliAODVertex * RemoveDaughtersFromPrimaryVtx(AliAODEvent *aod)
AliPIDResponse * GetPidResponse() const
UInt_t fEvRejectionBits
used to code the step at which candidate was rejected
Double_t fMaxDiffTRKV0Centr
flag to apply cut on tracks crossing SPD misaligned modules for PP2012 data
Float_t GetCentralityOldFramework(AliAODEvent *aodEvent, AliRDHFCuts::ECentrality estimator)
Int_t fnPtBinLimits
number of pt bins for cuts
Float_t * fCutsRD
fnVars*fnPtBins
Bool_t CheckPtDepCrossedRows(TString rows, Bool_t print=kFALSE) const
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)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Bool_t fUseCentrFlatteningInMC
flag to enable/disable the check on filter bits
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
void GetVarPtIndex(Int_t iGlob, Int_t &iVar, Int_t &iPtBin) const
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t CompareCuts(const AliRDHFCuts *obj) const
Bool_t fApplySPDMisalignedPP2012
flag to apply SPD dead module map of PbPb2011
Bool_t IsEventSelected(AliVEvent *event)
Int_t fMinSPDMultiplicity
maximum |z| of primary vertex
virtual void PrintAll() const
Bool_t fUseAOD049
enable PID usage (off by default)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Bool_t fApplySPDDeadPbPb2011
maximum pt of the candidate for which to check if the daughters fulfill kFirst criteria ...
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
Bool_t fIsCandTrackSPDFirst
IsSelected returns always kTRUE for MC signal.
TH1F * fHistCentrDistr
flag for enabling/diabling centrality flattening in MC
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t fKinkReject
cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm...
Int_t fMinContrPileup
option for pielup selection
Bool_t fUsePhysicsSelection
use MC primary vertex
TFormula * f1CutMinNCrossedRowsTPCPtDep
pT-dep cut in TPC minimum n crossed rows
AliAODVertex * GetPrimaryVtx() const
void AddTrackCuts(const AliESDtrackCuts *cuts)
TString fTriggerClass[2]
flag to select one trigger only
Int_t fnPtBins
cuts on the candidate
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Float_t fCutRatioSignalNOverCrossRowsTPC
min. value ratio NTPCClusters/NTPCCrossedRows, cut if !=0
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
TString fCutMinCrossedRowsTPCPtDep
min. value ratio TPCPointsUsedForPID/NTPCCrossedRows, cut if !=0
Double_t fMinPtCand
outcome of PID selection
void SetOnePad(Bool_t onepad)
Float_t fMaxCentrality
minimum centrality for selected events
void SetPidResponse(AliPIDResponse *pidResp)
Bool_t RecomputePrimaryVertex(AliAODEvent *event) const