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 "AliAODHandler.h"
45 #include "AliInputEventHandler.h"
46 #include "AliPIDResponse.h"
47 #include "AliAnalysisUtils.h"
48 #include "AliMultSelection.h"
64 AliAnalysisCuts(name,title),
69 fMinSPDMultiplicity(0),
70 fTriggerMask(AliVEvent::kAnyINT),
71 fUseOnlyOneTrigger(kFALSE),
88 fRemoveDaughtersFromPrimary(kFALSE),
90 fUsePhysicsSelection(kTRUE),
102 fMaxRapidityCand(-999.),
103 fKeepSignalMC(kFALSE),
104 fIsCandTrackSPDFirst(kFALSE),
105 fMaxPtCandTrackSPDFirst(0.),
106 fApplySPDDeadPbPb2011(kFALSE),
107 fApplySPDMisalignedPP2012(kFALSE),
108 fMaxDiffTRKV0Centr(-1.),
109 fRemoveTrackletOutliers(kFALSE),
112 fUseTrackSelectionWithFilterBits(kTRUE),
113 fUseCentrFlatteningInMC(kFALSE),
114 fHistCentrDistr(0x0),
115 fCutRatioClsOverCrossRowsTPC(0),
116 fCutRatioSignalNOverCrossRowsTPC(0),
117 fCutMinCrossedRowsTPCPtDep(
""),
118 f1CutMinNCrossedRowsTPCPtDep(0x0),
119 fUseCutGeoNcrNcl(kFALSE),
121 fCutGeoNcrNclLength(130.),
122 fCutGeoNcrNclGeom1Pt(1.5),
123 fCutGeoNcrNclFractionNcr(0.85),
124 fCutGeoNcrNclFractionNcl(0.7)
133 AliAnalysisCuts(source),
134 fMinVtxType(source.fMinVtxType),
135 fMinVtxContr(source.fMinVtxContr),
136 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
137 fMaxVtxZ(source.fMaxVtxZ),
138 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
139 fTriggerMask(source.fTriggerMask),
140 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
143 fnPtBins(source.fnPtBins),
144 fnPtBinLimits(source.fnPtBinLimits),
146 fnVars(source.fnVars),
148 fnVarsForOpt(source.fnVarsForOpt),
150 fGlobalIndex(source.fGlobalIndex),
153 fUsePID(source.fUsePID),
154 fUseAOD049(source.fUseAOD049),
156 fWhyRejection(source.fWhyRejection),
157 fEvRejectionBits(source.fEvRejectionBits),
158 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
159 fUseMCVertex(source.fUseMCVertex),
160 fUsePhysicsSelection(source.fUsePhysicsSelection),
161 fOptPileup(source.fOptPileup),
162 fMinContrPileup(source.fMinContrPileup),
163 fMinDzPileup(source.fMinDzPileup),
164 fUseCentrality(source.fUseCentrality),
165 fMinCentrality(source.fMinCentrality),
166 fMaxCentrality(source.fMaxCentrality),
167 fFixRefs(source.fFixRefs),
168 fIsSelectedCuts(source.fIsSelectedCuts),
169 fIsSelectedPID(source.fIsSelectedPID),
170 fMinPtCand(source.fMinPtCand),
171 fMaxPtCand(source.fMaxPtCand),
172 fMaxRapidityCand(source.fMaxRapidityCand),
173 fKeepSignalMC(source.fKeepSignalMC),
174 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
175 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
176 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
177 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
178 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
179 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
180 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
181 fKinkReject(source.fKinkReject),
182 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
183 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
184 fHistCentrDistr(0x0),
185 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
186 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
187 fCutMinCrossedRowsTPCPtDep(
""),
188 f1CutMinNCrossedRowsTPCPtDep(0x0),
189 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
190 fDeadZoneWidth(source.fDeadZoneWidth),
191 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
192 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
193 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
194 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl)
199 cout<<
"Copy constructor"<<endl;
220 if(&source ==
this)
return *
this;
222 AliAnalysisCuts::operator=(source);
327 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
328 AliWarning(
"Centrality estimator not valid");
332 if (centvalue<-998.){
357 if(maxCentr<minCentr){
358 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
363 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
367 Double_t ref=0.,bincont=0.,binrefwidth=1.;
369 if(TMath::Abs(centrRef)<0.0001){
374 else if(centrRef>0.){
375 binref=h->FindBin(centrRef);
376 if(binref<1||binref>h->GetNbinsX()){
377 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
383 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
389 for(
Int_t j=1;j<=h->GetNbinsX();j++){
390 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
391 bincont=h->GetBinContent(j);
396 h->SetBinContent(j,1.1);
425 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
429 if(centDigits*100.<bincont)
return kTRUE;
441 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
442 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
449 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
453 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
456 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
461 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
464 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
489 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
498 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
509 for(
Int_t itr=0; itr<nTracks; itr++){
510 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
526 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
533 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
544 const AliVVertex *vertex =
event->GetPrimaryVertex();
563 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
571 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
572 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
582 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
595 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
602 AliAnalysisUtils utils;
603 Bool_t isPUMV = utils.IsPileUpMV(event);
615 if(rejection==0) okCent=kTRUE;
627 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
631 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
632 if(ntracklets<1000. && v0cent<cutval){
661 Int_t ndaughters = d->GetNDaughters();
665 vAOD->GetCovarianceMatrix(cov);
666 const AliESDVertex vESD(pos,cov,100.,100);
670 for(
Int_t idg=0; idg<ndaughters; idg++) {
671 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
672 if(!dgTrack) {retval = kFALSE;
continue;}
674 if(dgTrack->Charge()==0)
continue;
677 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
692 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
693 TTree *treeAOD = aodHandler->GetTree();
694 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
695 if(treeDeltaAOD && treeAOD){
696 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
697 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
700 TFile *mfile = treeAOD->GetCurrentFile();
701 TFile *dfile = treeDeltaAOD->GetCurrentFile();
702 TList* lm=mfile->GetListOfKeys();
703 TList* ld=dfile->GetListOfKeys();
704 Int_t nentm=lm->GetEntries();
705 Int_t nentd=ld->GetEntries();
706 for(
Int_t jm=0; jm<nentm; jm++){
707 TKey* o=(TKey*)lm->At(jm);
708 TString clnam=o->GetClassName();
709 if(clnam==
"TProcessID"){
712 if(pname.Contains(
"ProcessID")){
717 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
734 if(!rows.Contains(
"pt")) {
735 if(print) AliError(
"string must contain \"pt\"");
759 tmp.ReplaceAll(
"pt",
"x");
769 if(!cuts)
return kTRUE;
771 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
775 AliESDtrack esdTrack(track);
777 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
778 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
779 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
781 esdTrack.RelateToVertex(primary,0.,3.);
784 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
788 AliAODVertex *maybeKink=track->GetProdVertex();
789 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
794 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
795 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
800 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
801 Float_t nClustersTPC = esdTrack.GetTPCNcls();
802 if(nCrossedRowsTPC!=0){
803 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
811 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
812 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
813 if(nCrossedRowsTPC!=0){
814 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
822 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
823 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
826 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
829 if(!isOK)
return kFALSE;
840 Bool_t deadSPDLay1PbPb2011[20][4]={
841 {kTRUE,kTRUE,kTRUE,kTRUE},
842 {kTRUE,kTRUE,kTRUE,kTRUE},
843 {kTRUE,kTRUE,kTRUE,kTRUE},
844 {kTRUE,kTRUE,kTRUE,kTRUE},
845 {kTRUE,kTRUE,kTRUE,kTRUE},
846 {kFALSE,kFALSE,kTRUE,kTRUE},
847 {kTRUE,kTRUE,kFALSE,kFALSE},
848 {kTRUE,kTRUE,kTRUE,kTRUE},
849 {kFALSE,kFALSE,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,kTRUE,kTRUE},
855 {kFALSE,kFALSE,kFALSE,kFALSE},
856 {kFALSE,kFALSE,kFALSE,kFALSE},
857 {kTRUE,kTRUE,kTRUE,kTRUE},
858 {kTRUE,kTRUE,kFALSE,kFALSE},
859 {kFALSE,kFALSE,kFALSE,kFALSE},
860 {kFALSE,kFALSE,kFALSE,kFALSE}
862 Bool_t deadSPDLay2PbPb2011[40][4]={
863 {kTRUE,kTRUE,kTRUE,kTRUE},
864 {kTRUE,kTRUE,kTRUE,kTRUE},
865 {kTRUE,kTRUE,kTRUE,kTRUE},
866 {kTRUE,kTRUE,kTRUE,kTRUE},
867 {kTRUE,kTRUE,kTRUE,kTRUE},
868 {kTRUE,kTRUE,kTRUE,kTRUE},
869 {kTRUE,kTRUE,kTRUE,kTRUE},
870 {kTRUE,kTRUE,kTRUE,kTRUE},
871 {kTRUE,kTRUE,kTRUE,kTRUE},
872 {kTRUE,kTRUE,kTRUE,kTRUE},
873 {kTRUE,kTRUE,kTRUE,kTRUE},
874 {kTRUE,kTRUE,kTRUE,kTRUE},
875 {kFALSE,kFALSE,kFALSE,kFALSE},
876 {kFALSE,kFALSE,kTRUE,kTRUE},
877 {kTRUE,kTRUE,kTRUE,kTRUE},
878 {kTRUE,kTRUE,kTRUE,kTRUE},
879 {kTRUE,kTRUE,kFALSE,kFALSE},
880 {kTRUE,kTRUE,kTRUE,kTRUE},
881 {kTRUE,kTRUE,kTRUE,kTRUE},
882 {kTRUE,kTRUE,kTRUE,kTRUE},
883 {kFALSE,kFALSE,kFALSE,kFALSE},
884 {kFALSE,kFALSE,kFALSE,kFALSE},
885 {kTRUE,kTRUE,kTRUE,kTRUE},
886 {kTRUE,kTRUE,kTRUE,kTRUE},
887 {kFALSE,kFALSE,kFALSE,kFALSE},
888 {kFALSE,kFALSE,kFALSE,kFALSE},
889 {kTRUE,kTRUE,kTRUE,kTRUE},
890 {kTRUE,kTRUE,kTRUE,kTRUE},
891 {kFALSE,kFALSE,kFALSE,kFALSE},
892 {kFALSE,kFALSE,kFALSE,kFALSE},
893 {kFALSE,kFALSE,kFALSE,kFALSE},
894 {kFALSE,kFALSE,kFALSE,kFALSE},
895 {kTRUE,kTRUE,kTRUE,kTRUE},
896 {kTRUE,kTRUE,kTRUE,kTRUE},
897 {kTRUE,kTRUE,kFALSE,kFALSE},
898 {kTRUE,kTRUE,kTRUE,kTRUE},
899 {kFALSE,kFALSE,kFALSE,kFALSE},
900 {kFALSE,kFALSE,kFALSE,kFALSE},
901 {kFALSE,kFALSE,kFALSE,kFALSE},
902 {kFALSE,kFALSE,kFALSE,kFALSE}
905 esdTrack.GetXYZAt(3.9,0.,xyz1);
906 esdTrack.GetXYZAt(7.6,0.,xyz2);
907 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
908 if(phi1<0) phi1+=2*TMath::Pi();
909 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
910 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
911 if(phi2<0) phi2+=2*TMath::Pi();
912 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
916 if(mod1>=0 && mod1<4 && lad1<20){
917 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
920 if(mod2>=0 && mod2<4 && lad2<40){
921 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
923 if(!lay1ok && !lay2ok)
return kFALSE;
929 esdTrack.GetXYZAt(3.9,0.,xyz1);
930 esdTrack.GetXYZAt(7.6,0.,xyz2);
931 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
932 if(phi1<0) phi1+=2*TMath::Pi();
933 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
934 if(phi2<0) phi2+=2*TMath::Pi();
936 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
938 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
939 if(!lay1ok || !lay2ok)
return kFALSE;
951 printf(
"Changing the pt bins\n");
955 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
977 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
983 for(
Int_t iv=0; iv<nVars; iv++) {
1001 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1021 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1033 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1034 AliFatal(
"exiting");
1037 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1038 AliFatal(
"exiting");
1050 cout<<
"Overflow, exit..."<<endl;
1066 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1067 AliFatal(
"exiting");
1072 fCutsRD[iGl] = cutsRDGlob[iGl];
1089 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1090 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1091 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1110 cout<<
"Array of variables"<<endl;
1117 cout<<
"Array of optimization"<<endl;
1124 cout<<
"Array of upper/lower cut"<<endl;
1131 cout<<
"Array of ptbin limits"<<endl;
1138 cout<<
"Matrix of cuts"<<endl;
1157 cout<<
" Trigger selection pattern: ";
1159 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1162 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1163 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1164 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1165 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1166 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1167 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1168 cout << endl<< endl;
1185 for(iv=0; iv<
fnVars; iv++) {
1192 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1203 return iPtBin*
fnVars+iVar;
1238 cout<<
"Cuts not iniziaisez yet"<<endl;
1249 AliMultSelection *multSelection = (AliMultSelection * ) aodEvent->FindListObject(
"MultSelection");
1251 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1255 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1256 Int_t qual = multSelection->GetEvSelCode();
1257 if(qual == 199 ) cent=-999;
1261 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1272 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1275 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1276 if(!header) AliFatal(
"Not a standard AOD");
1277 AliCentrality *
centrality=header->GetCentralityP();
1280 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1281 if(!centrality)
return cent;
1284 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1286 Int_t quality = centrality->GetQuality();
1288 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1290 Int_t runnum=aodEvent->GetRunNumber();
1291 for(
Int_t ir=0;ir<5;ir++){
1292 if(runnum==selRun[ir]){
1297 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1304 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1305 v0+=aodV0->GetMTotV0A();
1306 v0+=aodV0->GetMTotV0C();
1307 if(cent==0&&v0<19500)
return -1;
1308 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1309 Float_t val= 1.30552 + 0.147931 * v0;
1310 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};
1311 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1316 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1318 Int_t quality = centrality->GetQuality();
1320 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1322 Int_t runnum=aodEvent->GetRunNumber();
1323 for(
Int_t ir=0;ir<5;ir++){
1324 if(runnum==selRun[ir]){
1329 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1335 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1337 Int_t quality = centrality->GetQuality();
1339 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1341 Int_t runnum=aodEvent->GetRunNumber();
1342 for(
Int_t ir=0;ir<5;ir++){
1343 if(runnum==selRun[ir]){
1348 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1354 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1356 Int_t quality = centrality->GetQuality();
1358 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1360 Int_t runnum=aodEvent->GetRunNumber();
1361 for(
Int_t ir=0;ir<5;ir++){
1362 if(runnum==selRun[ir]){
1367 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1373 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1375 Int_t quality = centrality->GetQuality();
1377 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1379 Int_t runnum=aodEvent->GetRunNumber();
1380 for(
Int_t ir=0;ir<5;ir++){
1381 if(runnum==selRun[ir]){
1386 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1392 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1394 Int_t quality = centrality->GetQuality();
1396 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1398 Int_t runnum=aodEvent->GetRunNumber();
1399 for(
Int_t ir=0;ir<5;ir++){
1400 if(runnum==selRun[ir]){
1405 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1411 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1413 Int_t quality = centrality->GetQuality();
1415 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1417 Int_t runnum=aodEvent->GetRunNumber();
1418 for(
Int_t ir=0;ir<5;ir++){
1419 if(runnum==selRun[ir]){
1424 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1429 AliWarning(
"Centrality estimator not valid");
1463 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1465 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1467 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;}
1489 TString ptString =
"pT range";
1491 TString firstLine(Form(
"* %-15s",ptString.Data()));
1494 if (ivar == fnVars){
1498 Printf(
"%s",firstLine.Data());
1502 if (ipt==fnPtBins-1){
1511 Printf(
"%s",line.Data());
1528 AliError(
"Can not remove daughters from vertex without AOD event");
1534 AliDebug(2,
"Removal of daughter tracks failed");
1553 AliError(
"Can not get MC vertex without AOD event");
1558 AliAODMCHeader *mcHeader =
1559 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1561 AliError(
"Can not get MC vertex without AODMCHeader event");
1565 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1566 mcHeader->GetVertex(pos);
1567 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1570 AliDebug(2,
"Removal of daughter tracks failed");
1586 AliAODVertex *origownvtx)
const
1596 delete origownvtx; origownvtx=NULL;
1601 delete origownvtx; origownvtx=NULL;
1613 if(!aod)
return kFALSE;
1616 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1618 if(!mcArray)
return kFALSE;
1621 Int_t label = d->MatchToMC(pdg,mcArray);
1636 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1637 vertexer->SetITSMode();
1638 vertexer->SetMinClusters(3);
1640 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1641 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1643 event->GetDiamondCovXY(diamondcovxy);
1644 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1645 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1646 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1647 vertexer->SetVtxStart(diamond);
1648 delete diamond; diamond=NULL;
1651 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1652 if(!vertexESD)
return kFALSE;
1653 if(vertexESD->GetNContributors()<=0) {
1655 delete vertexESD; vertexESD=NULL;
1658 delete vertexer; vertexer=NULL;
1662 vertexESD->GetXYZ(pos);
1663 vertexESD->GetCovMatrix(cov);
1664 chi2perNDF = vertexESD->GetChi2toNDF();
1665 delete vertexESD; vertexESD=NULL;
1667 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1668 pvtx->SetChi2perNDF(chi2perNDF);
1669 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)
static Bool_t CheckMatchingAODdeltaAODevents()
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