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"
60 AliAnalysisCuts(name,title),
65 fMinSPDMultiplicity(0),
66 fTriggerMask(AliVEvent::kAnyINT),
67 fUseOnlyOneTrigger(kFALSE),
84 fRemoveDaughtersFromPrimary(kFALSE),
86 fUsePhysicsSelection(kTRUE),
98 fMaxRapidityCand(-999.),
99 fKeepSignalMC(kFALSE),
100 fIsCandTrackSPDFirst(kFALSE),
101 fMaxPtCandTrackSPDFirst(0.),
102 fApplySPDDeadPbPb2011(kFALSE),
103 fApplySPDMisalignedPP2012(kFALSE),
104 fMaxDiffTRKV0Centr(-1.),
105 fRemoveTrackletOutliers(kFALSE),
108 fUseTrackSelectionWithFilterBits(kTRUE),
109 fUseCentrFlatteningInMC(kFALSE),
110 fHistCentrDistr(0x0),
111 fCutRatioClsOverCrossRowsTPC(0),
112 fCutRatioSignalNOverCrossRowsTPC(0),
113 fCutMinCrossedRowsTPCPtDep(
""),
114 f1CutMinNCrossedRowsTPCPtDep(0x0)
123 AliAnalysisCuts(source),
124 fMinVtxType(source.fMinVtxType),
125 fMinVtxContr(source.fMinVtxContr),
126 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
127 fMaxVtxZ(source.fMaxVtxZ),
128 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
129 fTriggerMask(source.fTriggerMask),
130 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
133 fnPtBins(source.fnPtBins),
134 fnPtBinLimits(source.fnPtBinLimits),
136 fnVars(source.fnVars),
138 fnVarsForOpt(source.fnVarsForOpt),
140 fGlobalIndex(source.fGlobalIndex),
143 fUsePID(source.fUsePID),
144 fUseAOD049(source.fUseAOD049),
146 fWhyRejection(source.fWhyRejection),
147 fEvRejectionBits(source.fEvRejectionBits),
148 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
149 fUseMCVertex(source.fUseMCVertex),
150 fUsePhysicsSelection(source.fUsePhysicsSelection),
151 fOptPileup(source.fOptPileup),
152 fMinContrPileup(source.fMinContrPileup),
153 fMinDzPileup(source.fMinDzPileup),
154 fUseCentrality(source.fUseCentrality),
155 fMinCentrality(source.fMinCentrality),
156 fMaxCentrality(source.fMaxCentrality),
157 fFixRefs(source.fFixRefs),
158 fIsSelectedCuts(source.fIsSelectedCuts),
159 fIsSelectedPID(source.fIsSelectedPID),
160 fMinPtCand(source.fMinPtCand),
161 fMaxPtCand(source.fMaxPtCand),
162 fMaxRapidityCand(source.fMaxRapidityCand),
163 fKeepSignalMC(source.fKeepSignalMC),
164 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
165 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
166 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
167 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
168 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
169 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
170 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
171 fKinkReject(source.fKinkReject),
172 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
173 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
174 fHistCentrDistr(0x0),
175 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
176 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
177 fCutMinCrossedRowsTPCPtDep(
""),
178 f1CutMinNCrossedRowsTPCPtDep(0x0)
183 cout<<
"Copy constructor"<<endl;
204 if(&source ==
this)
return *
this;
206 AliAnalysisCuts::operator=(source);
303 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
304 AliWarning(
"Centrality estimator not valid");
308 if (centvalue<-998.){
333 if(maxCentr<minCentr){
334 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
339 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
343 Double_t ref=0.,bincont=0.,binrefwidth=1.;
345 if(TMath::Abs(centrRef)<0.0001){
350 else if(centrRef>0.){
351 binref=h->FindBin(centrRef);
352 if(binref<1||binref>h->GetNbinsX()){
353 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
359 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
365 for(Int_t j=1;j<=h->GetNbinsX();j++){
366 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
367 bincont=h->GetBinContent(j);
372 h->SetBinContent(j,1.1);
398 Double_t centDigits=centvalue-(Int_t)(centvalue*100.)/100.;
401 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
405 if(centDigits*100.<bincont)
return kTRUE;
416 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
417 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
418 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
425 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
429 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
432 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
437 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
440 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
465 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
472 TString firedTriggerClasses=((AliAODEvent*)event)->GetFiredTriggerClasses();
474 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
484 Int_t nTracks=((AliAODEvent*)event)->GetNumberOfTracks();
485 for(Int_t itr=0; itr<nTracks; itr++){
486 AliAODTrack* tr=(AliAODTrack*)((AliAODEvent*)event)->GetTrack(itr);
487 tr->SetAODEvent((AliAODEvent*)event);
502 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
509 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
520 const AliVVertex *vertex =
event->GetPrimaryVertex();
526 TString
title=vertex->GetTitle();
539 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
547 const AliVVertex *vSPD = ((AliAODEvent*)event)->GetPrimaryVertexSPD();
548 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
558 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
571 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
578 AliAnalysisUtils utils;
579 Bool_t isPUMV = utils.IsPileUpMV(event);
590 Bool_t okCent=kFALSE;
591 if(rejection==0) okCent=kTRUE;
603 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
606 Double_t ntracklets=((AliAODEvent*)event)->GetTracklets()->GetNumberOfTracklets();
607 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
608 if(ntracklets<1000. && v0cent<cutval){
637 Int_t ndaughters = d->GetNDaughters();
639 Double_t pos[3],cov[6];
641 vAOD->GetCovarianceMatrix(cov);
642 const AliESDVertex vESD(pos,cov,100.,100);
646 for(Int_t idg=0; idg<ndaughters; idg++) {
647 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
648 if(!dgTrack) {retval = kFALSE;
continue;}
650 if(dgTrack->Charge()==0)
continue;
653 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
667 if(!rows.Contains(
"pt")) {
668 if(print) AliError(
"string must contain \"pt\"");
692 tmp.ReplaceAll(
"pt",
"x");
702 if(!cuts)
return kTRUE;
704 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
708 AliESDtrack esdTrack(track);
710 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
711 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
712 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
714 esdTrack.RelateToVertex(primary,0.,3.);
717 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
721 AliAODVertex *maybeKink=track->GetProdVertex();
722 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
727 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
728 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
733 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
734 Float_t nClustersTPC = esdTrack.GetTPCNcls();
735 if(nCrossedRowsTPC!=0){
736 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
744 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
745 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
746 if(nCrossedRowsTPC!=0){
747 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
761 Bool_t deadSPDLay1PbPb2011[20][4]={
762 {kTRUE,kTRUE,kTRUE,kTRUE},
763 {kTRUE,kTRUE,kTRUE,kTRUE},
764 {kTRUE,kTRUE,kTRUE,kTRUE},
765 {kTRUE,kTRUE,kTRUE,kTRUE},
766 {kTRUE,kTRUE,kTRUE,kTRUE},
767 {kFALSE,kFALSE,kTRUE,kTRUE},
768 {kTRUE,kTRUE,kFALSE,kFALSE},
769 {kTRUE,kTRUE,kTRUE,kTRUE},
770 {kFALSE,kFALSE,kTRUE,kTRUE},
771 {kTRUE,kTRUE,kTRUE,kTRUE},
772 {kTRUE,kTRUE,kFALSE,kFALSE},
773 {kTRUE,kTRUE,kTRUE,kTRUE},
774 {kFALSE,kFALSE,kFALSE,kFALSE},
775 {kFALSE,kFALSE,kTRUE,kTRUE},
776 {kFALSE,kFALSE,kFALSE,kFALSE},
777 {kFALSE,kFALSE,kFALSE,kFALSE},
778 {kTRUE,kTRUE,kTRUE,kTRUE},
779 {kTRUE,kTRUE,kFALSE,kFALSE},
780 {kFALSE,kFALSE,kFALSE,kFALSE},
781 {kFALSE,kFALSE,kFALSE,kFALSE}
783 Bool_t deadSPDLay2PbPb2011[40][4]={
784 {kTRUE,kTRUE,kTRUE,kTRUE},
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 {kFALSE,kFALSE,kFALSE,kFALSE},
797 {kFALSE,kFALSE,kTRUE,kTRUE},
798 {kTRUE,kTRUE,kTRUE,kTRUE},
799 {kTRUE,kTRUE,kTRUE,kTRUE},
800 {kTRUE,kTRUE,kFALSE,kFALSE},
801 {kTRUE,kTRUE,kTRUE,kTRUE},
802 {kTRUE,kTRUE,kTRUE,kTRUE},
803 {kTRUE,kTRUE,kTRUE,kTRUE},
804 {kFALSE,kFALSE,kFALSE,kFALSE},
805 {kFALSE,kFALSE,kFALSE,kFALSE},
806 {kTRUE,kTRUE,kTRUE,kTRUE},
807 {kTRUE,kTRUE,kTRUE,kTRUE},
808 {kFALSE,kFALSE,kFALSE,kFALSE},
809 {kFALSE,kFALSE,kFALSE,kFALSE},
810 {kTRUE,kTRUE,kTRUE,kTRUE},
811 {kTRUE,kTRUE,kTRUE,kTRUE},
812 {kFALSE,kFALSE,kFALSE,kFALSE},
813 {kFALSE,kFALSE,kFALSE,kFALSE},
814 {kFALSE,kFALSE,kFALSE,kFALSE},
815 {kFALSE,kFALSE,kFALSE,kFALSE},
816 {kTRUE,kTRUE,kTRUE,kTRUE},
817 {kTRUE,kTRUE,kTRUE,kTRUE},
818 {kTRUE,kTRUE,kFALSE,kFALSE},
819 {kTRUE,kTRUE,kTRUE,kTRUE},
820 {kFALSE,kFALSE,kFALSE,kFALSE},
821 {kFALSE,kFALSE,kFALSE,kFALSE},
822 {kFALSE,kFALSE,kFALSE,kFALSE},
823 {kFALSE,kFALSE,kFALSE,kFALSE}
825 Double_t xyz1[3],xyz2[3];
826 esdTrack.GetXYZAt(3.9,0.,xyz1);
827 esdTrack.GetXYZAt(7.6,0.,xyz2);
828 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
829 if(phi1<0) phi1+=2*TMath::Pi();
830 Int_t lad1=(Int_t)(phi1/(2.*TMath::Pi()/20.));
831 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
832 if(phi2<0) phi2+=2*TMath::Pi();
833 Int_t lad2=(Int_t)(phi2/(2.*TMath::Pi()/40.));
834 Int_t mod1=(Int_t)((xyz1[2]+14)/7.);
835 Int_t mod2=(Int_t)((xyz2[2]+14)/7.);
836 Bool_t lay1ok=kFALSE;
837 if(mod1>=0 && mod1<4 && lad1<20){
838 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
840 Bool_t lay2ok=kFALSE;
841 if(mod2>=0 && mod2<4 && lad2<40){
842 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
844 if(!lay1ok && !lay2ok)
return kFALSE;
849 Double_t xyz1[3],xyz2[3];
850 esdTrack.GetXYZAt(3.9,0.,xyz1);
851 esdTrack.GetXYZAt(7.6,0.,xyz2);
852 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
853 if(phi1<0) phi1+=2*TMath::Pi();
854 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
855 if(phi2<0) phi2+=2*TMath::Pi();
857 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
859 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
860 if(!lay1ok || !lay2ok)
return kFALSE;
872 printf(
"Changing the pt bins\n");
876 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
884 for(Int_t ib=0; ib<nPtBinLimits; ib++)
fPtBinLimits[ib]=ptBinLimits[ib];
898 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
904 for(Int_t iv=0; iv<nVars; iv++) {
922 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
928 for(Int_t iv=0; iv<
fnVars; iv++) {
942 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
954 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
958 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
965 for(Int_t iv=0; iv<
fnVars; iv++) {
967 for(Int_t ib=0; ib<
fnPtBins; ib++) {
971 cout<<
"Overflow, exit..."<<endl;
987 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
993 fCutsRD[iGl] = cutsRDGlob[iGl];
1010 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1011 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1012 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1014 TString estimator=
"";
1031 cout<<
"Array of variables"<<endl;
1032 for(Int_t iv=0;iv<
fnVars;iv++){
1038 cout<<
"Array of optimization"<<endl;
1039 for(Int_t iv=0;iv<
fnVars;iv++){
1045 cout<<
"Array of upper/lower cut"<<endl;
1046 for(Int_t iv=0;iv<
fnVars;iv++){
1052 cout<<
"Array of ptbin limits"<<endl;
1059 cout<<
"Matrix of cuts"<<endl;
1060 for(Int_t iv=0;iv<
fnVars;iv++){
1078 cout<<
" Trigger selection pattern: ";
1080 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1083 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1084 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1085 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1086 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1087 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1088 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1089 cout << endl<< endl;
1105 cutsRD=
new Float_t*[
fnVars];
1106 for(iv=0; iv<
fnVars; iv++) {
1107 cutsRD[iv] =
new Float_t[
fnPtBins];
1111 for(Int_t iGlobal=0; iGlobal<
fGlobalIndex; iGlobal++) {
1113 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1124 return iPtBin*
fnVars+iVar;
1132 iPtBin=(Int_t)iGlob/
fnVars;
1159 cout<<
"Cuts not iniziaisez yet"<<endl;
1170 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aodEvent)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1173 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1174 if(!header) AliFatal(
"Not a standard AOD");
1175 AliCentrality *
centrality=header->GetCentralityP();
1177 Bool_t isSelRun=kFALSE;
1178 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1179 if(!centrality)
return cent;
1182 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1184 Int_t quality = centrality->GetQuality();
1186 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1188 Int_t runnum=aodEvent->GetRunNumber();
1189 for(Int_t ir=0;ir<5;ir++){
1190 if(runnum==selRun[ir]){
1195 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1202 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1203 v0+=aodV0->GetMTotV0A();
1204 v0+=aodV0->GetMTotV0C();
1205 if(cent==0&&v0<19500)
return -1;
1206 Float_t tkl = (Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1207 Float_t val= 1.30552 + 0.147931 * v0;
1208 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};
1209 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(Int_t)cent] )
return -1;
1214 cent=(Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1216 Int_t quality = centrality->GetQuality();
1218 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1220 Int_t runnum=aodEvent->GetRunNumber();
1221 for(Int_t ir=0;ir<5;ir++){
1222 if(runnum==selRun[ir]){
1227 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1233 cent=(Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1235 Int_t quality = centrality->GetQuality();
1237 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1239 Int_t runnum=aodEvent->GetRunNumber();
1240 for(Int_t ir=0;ir<5;ir++){
1241 if(runnum==selRun[ir]){
1246 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1252 cent=(Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1254 Int_t quality = centrality->GetQuality();
1256 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1258 Int_t runnum=aodEvent->GetRunNumber();
1259 for(Int_t ir=0;ir<5;ir++){
1260 if(runnum==selRun[ir]){
1265 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1271 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1273 Int_t quality = centrality->GetQuality();
1275 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1277 Int_t runnum=aodEvent->GetRunNumber();
1278 for(Int_t ir=0;ir<5;ir++){
1279 if(runnum==selRun[ir]){
1284 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1290 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1292 Int_t quality = centrality->GetQuality();
1294 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1296 Int_t runnum=aodEvent->GetRunNumber();
1297 for(Int_t ir=0;ir<5;ir++){
1298 if(runnum==selRun[ir]){
1303 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1309 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1311 Int_t quality = centrality->GetQuality();
1313 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1315 Int_t runnum=aodEvent->GetRunNumber();
1316 for(Int_t ir=0;ir<5;ir++){
1317 if(runnum==selRun[ir]){
1322 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1327 AliWarning(
"Centrality estimator not valid");
1345 Bool_t areEqual=kTRUE;
1361 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1363 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1365 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;}
1369 for(Int_t iv=0;iv<
fnVars;iv++) {
1387 TString ptString =
"pT range";
1389 TString firstLine(Form(
"* %-15s",ptString.Data()));
1390 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1392 if (ivar == fnVars){
1396 Printf(
"%s",firstLine.Data());
1398 for (Int_t ipt=0; ipt<
fnPtBins; ipt++){
1400 if (ipt==fnPtBins-1){
1406 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1409 Printf(
"%s",line.Data());
1419 AliAODEvent *aod)
const
1426 AliError(
"Can not remove daughters from vertex without AOD event");
1432 AliDebug(2,
"Removal of daughter tracks failed");
1451 AliError(
"Can not get MC vertex without AOD event");
1456 AliAODMCHeader *mcHeader =
1457 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1459 AliError(
"Can not get MC vertex without AODMCHeader event");
1463 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1464 mcHeader->GetVertex(pos);
1465 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1468 AliDebug(2,
"Removal of daughter tracks failed");
1484 AliAODVertex *origownvtx)
const
1494 delete origownvtx; origownvtx=NULL;
1499 delete origownvtx; origownvtx=NULL;
1511 if(!aod)
return kFALSE;
1514 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aod)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1516 if(!mcArray)
return kFALSE;
1519 Int_t label = d->MatchToMC(pdg,mcArray);
1534 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1535 vertexer->SetITSMode();
1536 vertexer->SetMinClusters(3);
1538 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1539 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1540 Float_t diamondcovxy[3];
1541 event->GetDiamondCovXY(diamondcovxy);
1542 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1543 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1544 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1545 vertexer->SetVtxStart(diamond);
1546 delete diamond; diamond=NULL;
1549 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1550 if(!vertexESD)
return kFALSE;
1551 if(vertexESD->GetNContributors()<=0) {
1553 delete vertexESD; vertexESD=NULL;
1556 delete vertexer; vertexer=NULL;
1559 Double_t pos[3],cov[6],chi2perNDF;
1560 vertexESD->GetXYZ(pos);
1561 vertexESD->GetCovMatrix(cov);
1562 chi2perNDF = vertexESD->GetChi2toNDF();
1563 delete vertexESD; vertexESD=NULL;
1565 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1566 pvtx->SetChi2perNDF(chi2perNDF);
1567 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
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
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
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)
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