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),
116 fUseCutGeoNcrNcl(kFALSE),
118 fCutGeoNcrNclLength(130.),
119 fCutGeoNcrNclGeom1Pt(1.5),
120 fCutGeoNcrNclFractionNcr(0.85),
121 fCutGeoNcrNclFractionNcl(0.7)
130 AliAnalysisCuts(source),
131 fMinVtxType(source.fMinVtxType),
132 fMinVtxContr(source.fMinVtxContr),
133 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
134 fMaxVtxZ(source.fMaxVtxZ),
135 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
136 fTriggerMask(source.fTriggerMask),
137 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
140 fnPtBins(source.fnPtBins),
141 fnPtBinLimits(source.fnPtBinLimits),
143 fnVars(source.fnVars),
145 fnVarsForOpt(source.fnVarsForOpt),
147 fGlobalIndex(source.fGlobalIndex),
150 fUsePID(source.fUsePID),
151 fUseAOD049(source.fUseAOD049),
153 fWhyRejection(source.fWhyRejection),
154 fEvRejectionBits(source.fEvRejectionBits),
155 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
156 fUseMCVertex(source.fUseMCVertex),
157 fUsePhysicsSelection(source.fUsePhysicsSelection),
158 fOptPileup(source.fOptPileup),
159 fMinContrPileup(source.fMinContrPileup),
160 fMinDzPileup(source.fMinDzPileup),
161 fUseCentrality(source.fUseCentrality),
162 fMinCentrality(source.fMinCentrality),
163 fMaxCentrality(source.fMaxCentrality),
164 fFixRefs(source.fFixRefs),
165 fIsSelectedCuts(source.fIsSelectedCuts),
166 fIsSelectedPID(source.fIsSelectedPID),
167 fMinPtCand(source.fMinPtCand),
168 fMaxPtCand(source.fMaxPtCand),
169 fMaxRapidityCand(source.fMaxRapidityCand),
170 fKeepSignalMC(source.fKeepSignalMC),
171 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
172 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
173 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
174 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
175 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
176 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
177 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
178 fKinkReject(source.fKinkReject),
179 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
180 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
181 fHistCentrDistr(0x0),
182 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
183 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
184 fCutMinCrossedRowsTPCPtDep(
""),
185 f1CutMinNCrossedRowsTPCPtDep(0x0),
186 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
187 fDeadZoneWidth(source.fDeadZoneWidth),
188 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
189 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
190 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
191 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl)
196 cout<<
"Copy constructor"<<endl;
217 if(&source ==
this)
return *
this;
219 AliAnalysisCuts::operator=(source);
324 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
325 AliWarning(
"Centrality estimator not valid");
329 if (centvalue<-998.){
354 if(maxCentr<minCentr){
355 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
360 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
364 Double_t ref=0.,bincont=0.,binrefwidth=1.;
366 if(TMath::Abs(centrRef)<0.0001){
371 else if(centrRef>0.){
372 binref=h->FindBin(centrRef);
373 if(binref<1||binref>h->GetNbinsX()){
374 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
380 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
386 for(Int_t j=1;j<=h->GetNbinsX();j++){
387 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
388 bincont=h->GetBinContent(j);
393 h->SetBinContent(j,1.1);
419 Double_t centDigits=centvalue-(Int_t)(centvalue*100.)/100.;
422 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
426 if(centDigits*100.<bincont)
return kTRUE;
437 AliAnalysisManager *mgr = AliAnalysisManager::GetAnalysisManager();
438 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
439 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
446 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
450 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
453 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
458 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
461 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
486 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)event)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
493 TString firedTriggerClasses=((AliAODEvent*)event)->GetFiredTriggerClasses();
495 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
505 Int_t nTracks=((AliAODEvent*)event)->GetNumberOfTracks();
506 for(Int_t itr=0; itr<nTracks; itr++){
507 AliAODTrack* tr=(AliAODTrack*)((AliAODEvent*)event)->GetTrack(itr);
508 tr->SetAODEvent((AliAODEvent*)event);
523 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
530 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
541 const AliVVertex *vertex =
event->GetPrimaryVertex();
547 TString
title=vertex->GetTitle();
560 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
568 const AliVVertex *vSPD = ((AliAODEvent*)event)->GetPrimaryVertexSPD();
569 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
579 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
592 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
599 AliAnalysisUtils utils;
600 Bool_t isPUMV = utils.IsPileUpMV(event);
611 Bool_t okCent=kFALSE;
612 if(rejection==0) okCent=kTRUE;
624 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
627 Double_t ntracklets=((AliAODEvent*)event)->GetTracklets()->GetNumberOfTracklets();
628 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
629 if(ntracklets<1000. && v0cent<cutval){
658 Int_t ndaughters = d->GetNDaughters();
660 Double_t pos[3],cov[6];
662 vAOD->GetCovarianceMatrix(cov);
663 const AliESDVertex vESD(pos,cov,100.,100);
667 for(Int_t idg=0; idg<ndaughters; idg++) {
668 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
669 if(!dgTrack) {retval = kFALSE;
continue;}
671 if(dgTrack->Charge()==0)
continue;
674 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
688 if(!rows.Contains(
"pt")) {
689 if(print) AliError(
"string must contain \"pt\"");
713 tmp.ReplaceAll(
"pt",
"x");
723 if(!cuts)
return kTRUE;
725 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
729 AliESDtrack esdTrack(track);
731 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
732 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
733 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
735 esdTrack.RelateToVertex(primary,0.,3.);
738 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
742 AliAODVertex *maybeKink=track->GetProdVertex();
743 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
748 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
749 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
754 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
755 Float_t nClustersTPC = esdTrack.GetTPCNcls();
756 if(nCrossedRowsTPC!=0){
757 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
765 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
766 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
767 if(nCrossedRowsTPC!=0){
768 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
776 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
777 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
780 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
783 if(!isOK)
return kFALSE;
794 Bool_t deadSPDLay1PbPb2011[20][4]={
795 {kTRUE,kTRUE,kTRUE,kTRUE},
796 {kTRUE,kTRUE,kTRUE,kTRUE},
797 {kTRUE,kTRUE,kTRUE,kTRUE},
798 {kTRUE,kTRUE,kTRUE,kTRUE},
799 {kTRUE,kTRUE,kTRUE,kTRUE},
800 {kFALSE,kFALSE,kTRUE,kTRUE},
801 {kTRUE,kTRUE,kFALSE,kFALSE},
802 {kTRUE,kTRUE,kTRUE,kTRUE},
803 {kFALSE,kFALSE,kTRUE,kTRUE},
804 {kTRUE,kTRUE,kTRUE,kTRUE},
805 {kTRUE,kTRUE,kFALSE,kFALSE},
806 {kTRUE,kTRUE,kTRUE,kTRUE},
807 {kFALSE,kFALSE,kFALSE,kFALSE},
808 {kFALSE,kFALSE,kTRUE,kTRUE},
809 {kFALSE,kFALSE,kFALSE,kFALSE},
810 {kFALSE,kFALSE,kFALSE,kFALSE},
811 {kTRUE,kTRUE,kTRUE,kTRUE},
812 {kTRUE,kTRUE,kFALSE,kFALSE},
813 {kFALSE,kFALSE,kFALSE,kFALSE},
814 {kFALSE,kFALSE,kFALSE,kFALSE}
816 Bool_t deadSPDLay2PbPb2011[40][4]={
817 {kTRUE,kTRUE,kTRUE,kTRUE},
818 {kTRUE,kTRUE,kTRUE,kTRUE},
819 {kTRUE,kTRUE,kTRUE,kTRUE},
820 {kTRUE,kTRUE,kTRUE,kTRUE},
821 {kTRUE,kTRUE,kTRUE,kTRUE},
822 {kTRUE,kTRUE,kTRUE,kTRUE},
823 {kTRUE,kTRUE,kTRUE,kTRUE},
824 {kTRUE,kTRUE,kTRUE,kTRUE},
825 {kTRUE,kTRUE,kTRUE,kTRUE},
826 {kTRUE,kTRUE,kTRUE,kTRUE},
827 {kTRUE,kTRUE,kTRUE,kTRUE},
828 {kTRUE,kTRUE,kTRUE,kTRUE},
829 {kFALSE,kFALSE,kFALSE,kFALSE},
830 {kFALSE,kFALSE,kTRUE,kTRUE},
831 {kTRUE,kTRUE,kTRUE,kTRUE},
832 {kTRUE,kTRUE,kTRUE,kTRUE},
833 {kTRUE,kTRUE,kFALSE,kFALSE},
834 {kTRUE,kTRUE,kTRUE,kTRUE},
835 {kTRUE,kTRUE,kTRUE,kTRUE},
836 {kTRUE,kTRUE,kTRUE,kTRUE},
837 {kFALSE,kFALSE,kFALSE,kFALSE},
838 {kFALSE,kFALSE,kFALSE,kFALSE},
839 {kTRUE,kTRUE,kTRUE,kTRUE},
840 {kTRUE,kTRUE,kTRUE,kTRUE},
841 {kFALSE,kFALSE,kFALSE,kFALSE},
842 {kFALSE,kFALSE,kFALSE,kFALSE},
843 {kTRUE,kTRUE,kTRUE,kTRUE},
844 {kTRUE,kTRUE,kTRUE,kTRUE},
845 {kFALSE,kFALSE,kFALSE,kFALSE},
846 {kFALSE,kFALSE,kFALSE,kFALSE},
847 {kFALSE,kFALSE,kFALSE,kFALSE},
848 {kFALSE,kFALSE,kFALSE,kFALSE},
849 {kTRUE,kTRUE,kTRUE,kTRUE},
850 {kTRUE,kTRUE,kTRUE,kTRUE},
851 {kTRUE,kTRUE,kFALSE,kFALSE},
852 {kTRUE,kTRUE,kTRUE,kTRUE},
853 {kFALSE,kFALSE,kFALSE,kFALSE},
854 {kFALSE,kFALSE,kFALSE,kFALSE},
855 {kFALSE,kFALSE,kFALSE,kFALSE},
856 {kFALSE,kFALSE,kFALSE,kFALSE}
858 Double_t xyz1[3],xyz2[3];
859 esdTrack.GetXYZAt(3.9,0.,xyz1);
860 esdTrack.GetXYZAt(7.6,0.,xyz2);
861 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
862 if(phi1<0) phi1+=2*TMath::Pi();
863 Int_t lad1=(Int_t)(phi1/(2.*TMath::Pi()/20.));
864 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
865 if(phi2<0) phi2+=2*TMath::Pi();
866 Int_t lad2=(Int_t)(phi2/(2.*TMath::Pi()/40.));
867 Int_t mod1=(Int_t)((xyz1[2]+14)/7.);
868 Int_t mod2=(Int_t)((xyz2[2]+14)/7.);
869 Bool_t lay1ok=kFALSE;
870 if(mod1>=0 && mod1<4 && lad1<20){
871 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
873 Bool_t lay2ok=kFALSE;
874 if(mod2>=0 && mod2<4 && lad2<40){
875 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
877 if(!lay1ok && !lay2ok)
return kFALSE;
882 Double_t xyz1[3],xyz2[3];
883 esdTrack.GetXYZAt(3.9,0.,xyz1);
884 esdTrack.GetXYZAt(7.6,0.,xyz2);
885 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
886 if(phi1<0) phi1+=2*TMath::Pi();
887 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
888 if(phi2<0) phi2+=2*TMath::Pi();
890 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
892 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
893 if(!lay1ok || !lay2ok)
return kFALSE;
905 printf(
"Changing the pt bins\n");
909 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
917 for(Int_t ib=0; ib<nPtBinLimits; ib++)
fPtBinLimits[ib]=ptBinLimits[ib];
931 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
937 for(Int_t iv=0; iv<nVars; iv++) {
955 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
961 for(Int_t iv=0; iv<
fnVars; iv++) {
975 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
987 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
991 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
998 for(Int_t iv=0; iv<
fnVars; iv++) {
1000 for(Int_t ib=0; ib<
fnPtBins; ib++) {
1004 cout<<
"Overflow, exit..."<<endl;
1020 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1021 AliFatal(
"exiting");
1026 fCutsRD[iGl] = cutsRDGlob[iGl];
1043 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1044 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1045 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1047 TString estimator=
"";
1064 cout<<
"Array of variables"<<endl;
1065 for(Int_t iv=0;iv<
fnVars;iv++){
1071 cout<<
"Array of optimization"<<endl;
1072 for(Int_t iv=0;iv<
fnVars;iv++){
1078 cout<<
"Array of upper/lower cut"<<endl;
1079 for(Int_t iv=0;iv<
fnVars;iv++){
1085 cout<<
"Array of ptbin limits"<<endl;
1092 cout<<
"Matrix of cuts"<<endl;
1093 for(Int_t iv=0;iv<
fnVars;iv++){
1111 cout<<
" Trigger selection pattern: ";
1113 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1116 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1117 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1118 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1119 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1120 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1121 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1122 cout << endl<< endl;
1138 cutsRD=
new Float_t*[
fnVars];
1139 for(iv=0; iv<
fnVars; iv++) {
1140 cutsRD[iv] =
new Float_t[
fnPtBins];
1144 for(Int_t iGlobal=0; iGlobal<
fGlobalIndex; iGlobal++) {
1146 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1157 return iPtBin*
fnVars+iVar;
1165 iPtBin=(Int_t)iGlob/
fnVars;
1192 cout<<
"Cuts not iniziaisez yet"<<endl;
1203 AliMultSelection *multSelection = (AliMultSelection * ) aodEvent->FindListObject(
"MultSelection");
1205 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1209 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1210 Int_t qual = multSelection->GetEvSelCode();
1211 if(qual == 199 ) cent=-999;
1215 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(Int_t)estimator));
1226 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aodEvent)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1229 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1230 if(!header) AliFatal(
"Not a standard AOD");
1231 AliCentrality *
centrality=header->GetCentralityP();
1233 Bool_t isSelRun=kFALSE;
1234 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1235 if(!centrality)
return cent;
1238 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1240 Int_t quality = centrality->GetQuality();
1242 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
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(
"V0M");
1258 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1259 v0+=aodV0->GetMTotV0A();
1260 v0+=aodV0->GetMTotV0C();
1261 if(cent==0&&v0<19500)
return -1;
1262 Float_t tkl = (Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1263 Float_t val= 1.30552 + 0.147931 * v0;
1264 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};
1265 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(Int_t)cent] )
return -1;
1270 cent=(Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1272 Int_t quality = centrality->GetQuality();
1274 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1276 Int_t runnum=aodEvent->GetRunNumber();
1277 for(Int_t ir=0;ir<5;ir++){
1278 if(runnum==selRun[ir]){
1283 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1289 cent=(Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1291 Int_t quality = centrality->GetQuality();
1293 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1295 Int_t runnum=aodEvent->GetRunNumber();
1296 for(Int_t ir=0;ir<5;ir++){
1297 if(runnum==selRun[ir]){
1302 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1308 cent=(Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1310 Int_t quality = centrality->GetQuality();
1312 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1314 Int_t runnum=aodEvent->GetRunNumber();
1315 for(Int_t ir=0;ir<5;ir++){
1316 if(runnum==selRun[ir]){
1321 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1327 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1329 Int_t quality = centrality->GetQuality();
1331 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1333 Int_t runnum=aodEvent->GetRunNumber();
1334 for(Int_t ir=0;ir<5;ir++){
1335 if(runnum==selRun[ir]){
1340 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1346 cent=(Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1348 Int_t quality = centrality->GetQuality();
1350 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1352 Int_t runnum=aodEvent->GetRunNumber();
1353 for(Int_t ir=0;ir<5;ir++){
1354 if(runnum==selRun[ir]){
1359 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1365 cent=(Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1367 Int_t quality = centrality->GetQuality();
1369 cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1371 Int_t runnum=aodEvent->GetRunNumber();
1372 for(Int_t ir=0;ir<5;ir++){
1373 if(runnum==selRun[ir]){
1378 if((quality==8||quality==9)&&isSelRun)cent=(Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1383 AliWarning(
"Centrality estimator not valid");
1401 Bool_t areEqual=kTRUE;
1417 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1419 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1421 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;}
1425 for(Int_t iv=0;iv<
fnVars;iv++) {
1443 TString ptString =
"pT range";
1445 TString firstLine(Form(
"* %-15s",ptString.Data()));
1446 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1448 if (ivar == fnVars){
1452 Printf(
"%s",firstLine.Data());
1454 for (Int_t ipt=0; ipt<
fnPtBins; ipt++){
1456 if (ipt==fnPtBins-1){
1462 for (Int_t ivar=0; ivar<
fnVars; ivar++){
1465 Printf(
"%s",line.Data());
1475 AliAODEvent *aod)
const
1482 AliError(
"Can not remove daughters from vertex without AOD event");
1488 AliDebug(2,
"Removal of daughter tracks failed");
1507 AliError(
"Can not get MC vertex without AOD event");
1512 AliAODMCHeader *mcHeader =
1513 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1515 AliError(
"Can not get MC vertex without AODMCHeader event");
1519 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1520 mcHeader->GetVertex(pos);
1521 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1524 AliDebug(2,
"Removal of daughter tracks failed");
1540 AliAODVertex *origownvtx)
const
1550 delete origownvtx; origownvtx=NULL;
1555 delete origownvtx; origownvtx=NULL;
1567 if(!aod)
return kFALSE;
1570 TClonesArray *mcArray = (TClonesArray*)((AliAODEvent*)aod)->GetList()->FindObject(AliAODMCParticle::StdBranchName());
1572 if(!mcArray)
return kFALSE;
1575 Int_t label = d->MatchToMC(pdg,mcArray);
1590 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1591 vertexer->SetITSMode();
1592 vertexer->SetMinClusters(3);
1594 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1595 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1596 Float_t diamondcovxy[3];
1597 event->GetDiamondCovXY(diamondcovxy);
1598 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1599 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1600 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1601 vertexer->SetVtxStart(diamond);
1602 delete diamond; diamond=NULL;
1605 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1606 if(!vertexESD)
return kFALSE;
1607 if(vertexESD->GetNContributors()<=0) {
1609 delete vertexESD; vertexESD=NULL;
1612 delete vertexer; vertexer=NULL;
1615 Double_t pos[3],cov[6],chi2perNDF;
1616 vertexESD->GetXYZ(pos);
1617 vertexESD->GetCovMatrix(cov);
1618 chi2perNDF = vertexESD->GetChi2toNDF();
1619 delete vertexESD; vertexESD=NULL;
1621 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1622 pvtx->SetChi2perNDF(chi2perNDF);
1623 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
Double_t fCutGeoNcrNclFractionNcr
3rd parameter of GeoNcrNcl cut
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 ...
Double_t fDeadZoneWidth
flag for enabling/disabling geometrical cut on TPC track
Int_t fMinVtxType
cuts on the event
void SetppLowEn2011(Bool_t opt)
Double_t fMaxRapidityCand
minimum pt of the candidate
Double_t fCutGeoNcrNclFractionNcl
4th parameter of GeoNcrNcl cut
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 fUseCutGeoNcrNcl
pT-dep cut in TPC minimum n crossed rows
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
Double_t fCutGeoNcrNclLength
1st parameter of GeoNcrNcl cut
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 fFixRefs
maximum centrality for selected events
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
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 AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) 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
Double_t fCutGeoNcrNclGeom1Pt
2nd parameter of GeoNcrNcl cut
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
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
void SetOnePad(Bool_t onepad)
Float_t fMaxCentrality
minimum centrality for selected events
void SetPidResponse(AliPIDResponse *pidResp)
Bool_t RecomputePrimaryVertex(AliAODEvent *event) const