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"
49 #include "AliAODVZERO.h"
65 AliAnalysisCuts(name,title),
70 fMinSPDMultiplicity(0),
71 fTriggerMask(AliVEvent::kAnyINT),
72 fUseOnlyOneTrigger(kFALSE),
89 fRemoveDaughtersFromPrimary(kFALSE),
91 fUsePhysicsSelection(kTRUE),
95 fUseMultDepPileupCut(kFALSE),
99 fMultSelectionObjectName(
"MultSelection"),
105 fMaxRapidityCand(-999.),
106 fKeepSignalMC(kFALSE),
107 fIsCandTrackSPDFirst(kFALSE),
108 fMaxPtCandTrackSPDFirst(0.),
109 fApplySPDDeadPbPb2011(kFALSE),
110 fApplySPDMisalignedPP2012(kFALSE),
111 fMaxDiffTRKV0Centr(-1.),
112 fRemoveTrackletOutliers(kFALSE),
115 fUseTrackSelectionWithFilterBits(kTRUE),
116 fUseCentrFlatteningInMC(kFALSE),
117 fHistCentrDistr(0x0),
118 fCutRatioClsOverCrossRowsTPC(0),
119 fCutRatioSignalNOverCrossRowsTPC(0),
120 fCutMinCrossedRowsTPCPtDep(
""),
121 f1CutMinNCrossedRowsTPCPtDep(0x0),
122 fUseCutGeoNcrNcl(kFALSE),
124 fCutGeoNcrNclLength(130.),
125 fCutGeoNcrNclGeom1Pt(1.5),
126 fCutGeoNcrNclFractionNcr(0.85),
127 fCutGeoNcrNclFractionNcl(0.7),
128 fUseV0ANDSelectionOffline(kFALSE)
137 AliAnalysisCuts(source),
138 fMinVtxType(source.fMinVtxType),
139 fMinVtxContr(source.fMinVtxContr),
140 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
141 fMaxVtxZ(source.fMaxVtxZ),
142 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
143 fTriggerMask(source.fTriggerMask),
144 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
147 fnPtBins(source.fnPtBins),
148 fnPtBinLimits(source.fnPtBinLimits),
150 fnVars(source.fnVars),
152 fnVarsForOpt(source.fnVarsForOpt),
154 fGlobalIndex(source.fGlobalIndex),
157 fUsePID(source.fUsePID),
158 fUseAOD049(source.fUseAOD049),
160 fWhyRejection(source.fWhyRejection),
161 fEvRejectionBits(source.fEvRejectionBits),
162 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
163 fUseMCVertex(source.fUseMCVertex),
164 fUsePhysicsSelection(source.fUsePhysicsSelection),
165 fOptPileup(source.fOptPileup),
166 fMinContrPileup(source.fMinContrPileup),
167 fMinDzPileup(source.fMinDzPileup),
168 fUseMultDepPileupCut(source.fUseMultDepPileupCut),
169 fUseCentrality(source.fUseCentrality),
170 fMinCentrality(source.fMinCentrality),
171 fMaxCentrality(source.fMaxCentrality),
172 fMultSelectionObjectName(source.fMultSelectionObjectName),
173 fFixRefs(source.fFixRefs),
174 fIsSelectedCuts(source.fIsSelectedCuts),
175 fIsSelectedPID(source.fIsSelectedPID),
176 fMinPtCand(source.fMinPtCand),
177 fMaxPtCand(source.fMaxPtCand),
178 fMaxRapidityCand(source.fMaxRapidityCand),
179 fKeepSignalMC(source.fKeepSignalMC),
180 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
181 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
182 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
183 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
184 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
185 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
186 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
187 fKinkReject(source.fKinkReject),
188 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
189 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
190 fHistCentrDistr(0x0),
191 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
192 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
193 fCutMinCrossedRowsTPCPtDep(
""),
194 f1CutMinNCrossedRowsTPCPtDep(0x0),
195 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
196 fDeadZoneWidth(source.fDeadZoneWidth),
197 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
198 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
199 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
200 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl),
201 fUseV0ANDSelectionOffline(source.fUseV0ANDSelectionOffline)
206 cout<<
"Copy constructor"<<endl;
227 if(&source ==
this)
return *
this;
229 AliAnalysisCuts::operator=(source);
337 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
338 AliWarning(
"Centrality estimator not valid");
342 if (centvalue<-998.){
369 if(maxCentr<minCentr){
370 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
375 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
379 Double_t ref=0.,bincont=0.,binrefwidth=1.;
381 if(TMath::Abs(centrRef)<0.0001){
386 else if(centrRef>0.){
387 binref=h->FindBin(centrRef);
388 if(binref<1||binref>h->GetNbinsX()){
389 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
395 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
401 for(
Int_t j=1;j<=h->GetNbinsX();j++){
402 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
403 bincont=h->GetBinContent(j);
408 h->SetBinContent(j,1.1);
437 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
441 if(centDigits*100.<bincont)
return kTRUE;
453 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
454 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
461 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
465 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
468 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
473 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
476 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
501 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
510 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
521 for(
Int_t itr=0; itr<nTracks; itr++){
522 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
538 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
545 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
552 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
553 Int_t tv0a=v0data->GetV0ADecision();
554 Int_t tv0c=v0data->GetV0CDecision();
555 if(!(tv0a==1 && tv0c==1)){
568 if(rejection==0) okCent=kTRUE;
580 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
584 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
585 if(ntracklets<1000. && v0cent<cutval){
604 const AliVVertex *vertex =
event->GetPrimaryVertex();
623 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
631 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
632 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
643 Double_t dz = vSPD->GetZ()-vertex->GetZ();
645 if(TMath::Abs(dz)>0.5) {
652 double covTrc[6],covSPD[6];
653 vertex->GetCovarianceMatrix(covTrc);
654 vSPD->GetCovarianceMatrix(covSPD);
655 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
656 double errTrc = TMath::Sqrt(covTrc[5]);
657 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
658 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20){
673 isPileup=
event->IsPileupFromSPDInMultBins();
677 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
686 AliAnalysisUtils utils;
687 Bool_t isPUMV = utils.IsPileUpMV(event);
708 Int_t ndaughters = d->GetNDaughters();
712 vAOD->GetCovarianceMatrix(cov);
713 const AliESDVertex vESD(pos,cov,100.,100);
717 for(
Int_t idg=0; idg<ndaughters; idg++) {
718 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
719 if(!dgTrack) {retval = kFALSE;
continue;}
721 if(dgTrack->Charge()==0)
continue;
724 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
747 Bool_t okTProcessNames = kTRUE;
748 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
749 TTree *treeAOD = aodHandler->GetTree();
750 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
751 if(!treeDeltaAOD || !treeAOD)
return -1;
752 if(treeDeltaAOD && treeAOD){
753 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
754 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
757 TFile *mfile = treeAOD->GetCurrentFile();
758 TFile *dfile = treeDeltaAOD->GetCurrentFile();
759 TList* lm=mfile->GetListOfKeys();
760 TList* ld=dfile->GetListOfKeys();
761 Int_t nentm=lm->GetEntries();
762 for(
Int_t jm=0; jm<nentm; jm++){
763 TKey* o=(TKey*)lm->At(jm);
764 TString clnam=o->GetClassName();
765 if(clnam==
"TProcessID"){
768 if(pname.Contains(
"ProcessID")){
773 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
774 okTProcessNames = kFALSE;
782 if (okTProcessNames)
return 1;
792 if(!rows.Contains(
"pt")) {
793 if(print) AliError(
"string must contain \"pt\"");
817 tmp.ReplaceAll(
"pt",
"x");
827 if(!cuts)
return kTRUE;
829 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
833 AliESDtrack esdTrack(track);
835 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
836 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
837 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
839 esdTrack.RelateToVertex(primary,0.,3.);
842 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
846 AliAODVertex *maybeKink=track->GetProdVertex();
847 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
852 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
853 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
858 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
859 Float_t nClustersTPC = esdTrack.GetTPCNcls();
860 if(nCrossedRowsTPC!=0){
861 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
869 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
870 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
871 if(nCrossedRowsTPC!=0){
872 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
880 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
881 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
884 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
887 if(!isOK)
return kFALSE;
898 Bool_t deadSPDLay1PbPb2011[20][4]={
899 {kTRUE,kTRUE,kTRUE,kTRUE},
900 {kTRUE,kTRUE,kTRUE,kTRUE},
901 {kTRUE,kTRUE,kTRUE,kTRUE},
902 {kTRUE,kTRUE,kTRUE,kTRUE},
903 {kTRUE,kTRUE,kTRUE,kTRUE},
904 {kFALSE,kFALSE,kTRUE,kTRUE},
905 {kTRUE,kTRUE,kFALSE,kFALSE},
906 {kTRUE,kTRUE,kTRUE,kTRUE},
907 {kFALSE,kFALSE,kTRUE,kTRUE},
908 {kTRUE,kTRUE,kTRUE,kTRUE},
909 {kTRUE,kTRUE,kFALSE,kFALSE},
910 {kTRUE,kTRUE,kTRUE,kTRUE},
911 {kFALSE,kFALSE,kFALSE,kFALSE},
912 {kFALSE,kFALSE,kTRUE,kTRUE},
913 {kFALSE,kFALSE,kFALSE,kFALSE},
914 {kFALSE,kFALSE,kFALSE,kFALSE},
915 {kTRUE,kTRUE,kTRUE,kTRUE},
916 {kTRUE,kTRUE,kFALSE,kFALSE},
917 {kFALSE,kFALSE,kFALSE,kFALSE},
918 {kFALSE,kFALSE,kFALSE,kFALSE}
920 Bool_t deadSPDLay2PbPb2011[40][4]={
921 {kTRUE,kTRUE,kTRUE,kTRUE},
922 {kTRUE,kTRUE,kTRUE,kTRUE},
923 {kTRUE,kTRUE,kTRUE,kTRUE},
924 {kTRUE,kTRUE,kTRUE,kTRUE},
925 {kTRUE,kTRUE,kTRUE,kTRUE},
926 {kTRUE,kTRUE,kTRUE,kTRUE},
927 {kTRUE,kTRUE,kTRUE,kTRUE},
928 {kTRUE,kTRUE,kTRUE,kTRUE},
929 {kTRUE,kTRUE,kTRUE,kTRUE},
930 {kTRUE,kTRUE,kTRUE,kTRUE},
931 {kTRUE,kTRUE,kTRUE,kTRUE},
932 {kTRUE,kTRUE,kTRUE,kTRUE},
933 {kFALSE,kFALSE,kFALSE,kFALSE},
934 {kFALSE,kFALSE,kTRUE,kTRUE},
935 {kTRUE,kTRUE,kTRUE,kTRUE},
936 {kTRUE,kTRUE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kFALSE,kFALSE},
938 {kTRUE,kTRUE,kTRUE,kTRUE},
939 {kTRUE,kTRUE,kTRUE,kTRUE},
940 {kTRUE,kTRUE,kTRUE,kTRUE},
941 {kFALSE,kFALSE,kFALSE,kFALSE},
942 {kFALSE,kFALSE,kFALSE,kFALSE},
943 {kTRUE,kTRUE,kTRUE,kTRUE},
944 {kTRUE,kTRUE,kTRUE,kTRUE},
945 {kFALSE,kFALSE,kFALSE,kFALSE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kTRUE,kTRUE,kTRUE,kTRUE},
948 {kTRUE,kTRUE,kTRUE,kTRUE},
949 {kFALSE,kFALSE,kFALSE,kFALSE},
950 {kFALSE,kFALSE,kFALSE,kFALSE},
951 {kFALSE,kFALSE,kFALSE,kFALSE},
952 {kFALSE,kFALSE,kFALSE,kFALSE},
953 {kTRUE,kTRUE,kTRUE,kTRUE},
954 {kTRUE,kTRUE,kTRUE,kTRUE},
955 {kTRUE,kTRUE,kFALSE,kFALSE},
956 {kTRUE,kTRUE,kTRUE,kTRUE},
957 {kFALSE,kFALSE,kFALSE,kFALSE},
958 {kFALSE,kFALSE,kFALSE,kFALSE},
959 {kFALSE,kFALSE,kFALSE,kFALSE},
960 {kFALSE,kFALSE,kFALSE,kFALSE}
963 esdTrack.GetXYZAt(3.9,0.,xyz1);
964 esdTrack.GetXYZAt(7.6,0.,xyz2);
965 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
966 if(phi1<0) phi1+=2*TMath::Pi();
967 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
968 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
969 if(phi2<0) phi2+=2*TMath::Pi();
970 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
974 if(mod1>=0 && mod1<4 && lad1<20){
975 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
978 if(mod2>=0 && mod2<4 && lad2<40){
979 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
981 if(!lay1ok && !lay2ok)
return kFALSE;
987 esdTrack.GetXYZAt(3.9,0.,xyz1);
988 esdTrack.GetXYZAt(7.6,0.,xyz2);
989 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
990 if(phi1<0) phi1+=2*TMath::Pi();
991 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
992 if(phi2<0) phi2+=2*TMath::Pi();
994 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
996 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
997 if(!lay1ok || !lay2ok)
return kFALSE;
1009 printf(
"Changing the pt bins\n");
1013 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1035 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1041 for(
Int_t iv=0; iv<nVars; iv++) {
1059 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1079 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1091 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1092 AliFatal(
"exiting");
1095 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1096 AliFatal(
"exiting");
1108 cout<<
"Overflow, exit..."<<endl;
1124 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1125 AliFatal(
"exiting");
1130 fCutsRD[iGl] = cutsRDGlob[iGl];
1147 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1148 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1149 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1168 cout<<
"Array of variables"<<endl;
1175 cout<<
"Array of optimization"<<endl;
1182 cout<<
"Array of upper/lower cut"<<endl;
1189 cout<<
"Array of ptbin limits"<<endl;
1196 cout<<
"Matrix of cuts"<<endl;
1215 cout<<
" Trigger selection pattern: ";
1217 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1220 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1221 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1222 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1223 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1224 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1225 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1226 cout << endl<< endl;
1243 for(iv=0; iv<
fnVars; iv++) {
1250 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1261 return iPtBin*
fnVars+iVar;
1296 cout<<
"Cuts not iniziaisez yet"<<endl;
1308 if(estimator==
kCentOff)
return -999;
1312 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1318 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1319 if(!defaultmultSelection){
1320 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1323 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1324 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1330 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1332 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1334 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1336 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1338 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1341 Int_t qual = multSelection->GetEvSelCode();
1342 if(qual == 199 ) cent=-999;
1351 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1354 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1355 if(!header) AliFatal(
"Not a standard AOD");
1356 AliCentrality *
centrality=header->GetCentralityP();
1359 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1360 if(!centrality)
return cent;
1363 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1365 Int_t quality = centrality->GetQuality();
1367 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1369 Int_t runnum=aodEvent->GetRunNumber();
1370 for(
Int_t ir=0;ir<5;ir++){
1371 if(runnum==selRun[ir]){
1376 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1383 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1384 v0+=aodV0->GetMTotV0A();
1385 v0+=aodV0->GetMTotV0C();
1386 if(cent==0&&v0<19500)
return -1;
1387 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1388 Float_t val= 1.30552 + 0.147931 * v0;
1389 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};
1390 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1395 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1397 Int_t quality = centrality->GetQuality();
1399 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1401 Int_t runnum=aodEvent->GetRunNumber();
1402 for(
Int_t ir=0;ir<5;ir++){
1403 if(runnum==selRun[ir]){
1408 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1414 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1416 Int_t quality = centrality->GetQuality();
1418 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1420 Int_t runnum=aodEvent->GetRunNumber();
1421 for(
Int_t ir=0;ir<5;ir++){
1422 if(runnum==selRun[ir]){
1427 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1433 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1435 Int_t quality = centrality->GetQuality();
1437 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1439 Int_t runnum=aodEvent->GetRunNumber();
1440 for(
Int_t ir=0;ir<5;ir++){
1441 if(runnum==selRun[ir]){
1446 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1452 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1454 Int_t quality = centrality->GetQuality();
1456 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1458 Int_t runnum=aodEvent->GetRunNumber();
1459 for(
Int_t ir=0;ir<5;ir++){
1460 if(runnum==selRun[ir]){
1465 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1471 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1473 Int_t quality = centrality->GetQuality();
1475 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1477 Int_t runnum=aodEvent->GetRunNumber();
1478 for(
Int_t ir=0;ir<5;ir++){
1479 if(runnum==selRun[ir]){
1484 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1490 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1492 Int_t quality = centrality->GetQuality();
1494 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1496 Int_t runnum=aodEvent->GetRunNumber();
1497 for(
Int_t ir=0;ir<5;ir++){
1498 if(runnum==selRun[ir]){
1503 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1508 AliWarning(
"Centrality estimator not valid");
1542 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1544 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1546 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;}
1568 TString ptString =
"pT range";
1570 TString firstLine(Form(
"* %-15s",ptString.Data()));
1573 if (ivar == fnVars){
1577 Printf(
"%s",firstLine.Data());
1581 if (ipt==fnPtBins-1){
1590 Printf(
"%s",line.Data());
1607 AliError(
"Can not remove daughters from vertex without AOD event");
1613 AliDebug(2,
"Removal of daughter tracks failed");
1632 AliError(
"Can not get MC vertex without AOD event");
1637 AliAODMCHeader *mcHeader =
1638 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1640 AliError(
"Can not get MC vertex without AODMCHeader event");
1644 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1645 mcHeader->GetVertex(pos);
1646 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1649 AliDebug(2,
"Removal of daughter tracks failed");
1665 AliAODVertex *origownvtx)
const
1675 delete origownvtx; origownvtx=NULL;
1680 delete origownvtx; origownvtx=NULL;
1692 if(!aod)
return kFALSE;
1695 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1697 if(!mcArray)
return kFALSE;
1700 Int_t label = d->MatchToMC(pdg,mcArray);
1715 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1716 vertexer->SetITSMode();
1717 vertexer->SetMinClusters(3);
1719 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1720 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1722 event->GetDiamondCovXY(diamondcovxy);
1723 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1724 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1725 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1726 vertexer->SetVtxStart(diamond);
1727 delete diamond; diamond=NULL;
1730 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1731 if(!vertexESD)
return kFALSE;
1732 if(vertexESD->GetNContributors()<=0) {
1734 delete vertexESD; vertexESD=NULL;
1737 delete vertexer; vertexer=NULL;
1741 vertexESD->GetXYZ(pos);
1742 vertexESD->GetCovMatrix(cov);
1743 chi2perNDF = vertexESD->GetChi2toNDF();
1744 delete vertexESD; vertexESD=NULL;
1746 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1747 pvtx->SetChi2perNDF(chi2perNDF);
1748 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)
Bool_t fUseMultDepPileupCut
min deltaz between main and pileup vertices
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
static Int_t CheckMatchingAODdeltaAODevents()
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
flag to use a multiplicity dependent pileup selection
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)
Bool_t fUseV0ANDSelectionOffline
5th parameter of GeoNcrNcl cut
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
name of the AliMultSelection object to be considered
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)
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...
TString fMultSelectionObjectName
maximum centrality for selected events
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