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 Int_t nentd=ld->GetEntries();
763 for(
Int_t jm=0; jm<nentm; jm++){
764 TKey* o=(TKey*)lm->At(jm);
765 TString clnam=o->GetClassName();
766 if(clnam==
"TProcessID"){
769 if(pname.Contains(
"ProcessID")){
774 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
775 okTProcessNames = kFALSE;
783 if (okTProcessNames)
return 1;
793 if(!rows.Contains(
"pt")) {
794 if(print) AliError(
"string must contain \"pt\"");
818 tmp.ReplaceAll(
"pt",
"x");
828 if(!cuts)
return kTRUE;
830 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
834 AliESDtrack esdTrack(track);
836 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
837 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
838 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
840 esdTrack.RelateToVertex(primary,0.,3.);
843 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
847 AliAODVertex *maybeKink=track->GetProdVertex();
848 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
853 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
854 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
859 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
860 Float_t nClustersTPC = esdTrack.GetTPCNcls();
861 if(nCrossedRowsTPC!=0){
862 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
870 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
871 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
872 if(nCrossedRowsTPC!=0){
873 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
881 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
882 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
885 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
888 if(!isOK)
return kFALSE;
899 Bool_t deadSPDLay1PbPb2011[20][4]={
900 {kTRUE,kTRUE,kTRUE,kTRUE},
901 {kTRUE,kTRUE,kTRUE,kTRUE},
902 {kTRUE,kTRUE,kTRUE,kTRUE},
903 {kTRUE,kTRUE,kTRUE,kTRUE},
904 {kTRUE,kTRUE,kTRUE,kTRUE},
905 {kFALSE,kFALSE,kTRUE,kTRUE},
906 {kTRUE,kTRUE,kFALSE,kFALSE},
907 {kTRUE,kTRUE,kTRUE,kTRUE},
908 {kFALSE,kFALSE,kTRUE,kTRUE},
909 {kTRUE,kTRUE,kTRUE,kTRUE},
910 {kTRUE,kTRUE,kFALSE,kFALSE},
911 {kTRUE,kTRUE,kTRUE,kTRUE},
912 {kFALSE,kFALSE,kFALSE,kFALSE},
913 {kFALSE,kFALSE,kTRUE,kTRUE},
914 {kFALSE,kFALSE,kFALSE,kFALSE},
915 {kFALSE,kFALSE,kFALSE,kFALSE},
916 {kTRUE,kTRUE,kTRUE,kTRUE},
917 {kTRUE,kTRUE,kFALSE,kFALSE},
918 {kFALSE,kFALSE,kFALSE,kFALSE},
919 {kFALSE,kFALSE,kFALSE,kFALSE}
921 Bool_t deadSPDLay2PbPb2011[40][4]={
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 {kTRUE,kTRUE,kTRUE,kTRUE},
934 {kFALSE,kFALSE,kFALSE,kFALSE},
935 {kFALSE,kFALSE,kTRUE,kTRUE},
936 {kTRUE,kTRUE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kTRUE,kTRUE},
938 {kTRUE,kTRUE,kFALSE,kFALSE},
939 {kTRUE,kTRUE,kTRUE,kTRUE},
940 {kTRUE,kTRUE,kTRUE,kTRUE},
941 {kTRUE,kTRUE,kTRUE,kTRUE},
942 {kFALSE,kFALSE,kFALSE,kFALSE},
943 {kFALSE,kFALSE,kFALSE,kFALSE},
944 {kTRUE,kTRUE,kTRUE,kTRUE},
945 {kTRUE,kTRUE,kTRUE,kTRUE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kFALSE,kFALSE,kFALSE,kFALSE},
948 {kTRUE,kTRUE,kTRUE,kTRUE},
949 {kTRUE,kTRUE,kTRUE,kTRUE},
950 {kFALSE,kFALSE,kFALSE,kFALSE},
951 {kFALSE,kFALSE,kFALSE,kFALSE},
952 {kFALSE,kFALSE,kFALSE,kFALSE},
953 {kFALSE,kFALSE,kFALSE,kFALSE},
954 {kTRUE,kTRUE,kTRUE,kTRUE},
955 {kTRUE,kTRUE,kTRUE,kTRUE},
956 {kTRUE,kTRUE,kFALSE,kFALSE},
957 {kTRUE,kTRUE,kTRUE,kTRUE},
958 {kFALSE,kFALSE,kFALSE,kFALSE},
959 {kFALSE,kFALSE,kFALSE,kFALSE},
960 {kFALSE,kFALSE,kFALSE,kFALSE},
961 {kFALSE,kFALSE,kFALSE,kFALSE}
964 esdTrack.GetXYZAt(3.9,0.,xyz1);
965 esdTrack.GetXYZAt(7.6,0.,xyz2);
966 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
967 if(phi1<0) phi1+=2*TMath::Pi();
968 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
969 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
970 if(phi2<0) phi2+=2*TMath::Pi();
971 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
975 if(mod1>=0 && mod1<4 && lad1<20){
976 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
979 if(mod2>=0 && mod2<4 && lad2<40){
980 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
982 if(!lay1ok && !lay2ok)
return kFALSE;
988 esdTrack.GetXYZAt(3.9,0.,xyz1);
989 esdTrack.GetXYZAt(7.6,0.,xyz2);
990 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
991 if(phi1<0) phi1+=2*TMath::Pi();
992 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
993 if(phi2<0) phi2+=2*TMath::Pi();
995 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
997 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
998 if(!lay1ok || !lay2ok)
return kFALSE;
1010 printf(
"Changing the pt bins\n");
1014 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1036 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1042 for(
Int_t iv=0; iv<nVars; iv++) {
1060 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1080 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1092 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1093 AliFatal(
"exiting");
1096 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1097 AliFatal(
"exiting");
1109 cout<<
"Overflow, exit..."<<endl;
1125 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1126 AliFatal(
"exiting");
1131 fCutsRD[iGl] = cutsRDGlob[iGl];
1148 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1149 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1150 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1169 cout<<
"Array of variables"<<endl;
1176 cout<<
"Array of optimization"<<endl;
1183 cout<<
"Array of upper/lower cut"<<endl;
1190 cout<<
"Array of ptbin limits"<<endl;
1197 cout<<
"Matrix of cuts"<<endl;
1216 cout<<
" Trigger selection pattern: ";
1218 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1221 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1222 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1223 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1224 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1225 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1226 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1227 cout << endl<< endl;
1244 for(iv=0; iv<
fnVars; iv++) {
1251 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1262 return iPtBin*
fnVars+iVar;
1297 cout<<
"Cuts not iniziaisez yet"<<endl;
1311 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1317 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1318 if(!defaultmultSelection){
1319 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1322 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1323 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1329 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1331 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1333 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1335 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1337 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1340 Int_t qual = multSelection->GetEvSelCode();
1341 if(qual == 199 ) cent=-999;
1350 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1353 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1354 if(!header) AliFatal(
"Not a standard AOD");
1355 AliCentrality *
centrality=header->GetCentralityP();
1358 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1359 if(!centrality)
return cent;
1362 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1364 Int_t quality = centrality->GetQuality();
1366 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1368 Int_t runnum=aodEvent->GetRunNumber();
1369 for(
Int_t ir=0;ir<5;ir++){
1370 if(runnum==selRun[ir]){
1375 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1382 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1383 v0+=aodV0->GetMTotV0A();
1384 v0+=aodV0->GetMTotV0C();
1385 if(cent==0&&v0<19500)
return -1;
1386 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1387 Float_t val= 1.30552 + 0.147931 * v0;
1388 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};
1389 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1394 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1396 Int_t quality = centrality->GetQuality();
1398 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1400 Int_t runnum=aodEvent->GetRunNumber();
1401 for(
Int_t ir=0;ir<5;ir++){
1402 if(runnum==selRun[ir]){
1407 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1413 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1415 Int_t quality = centrality->GetQuality();
1417 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1419 Int_t runnum=aodEvent->GetRunNumber();
1420 for(
Int_t ir=0;ir<5;ir++){
1421 if(runnum==selRun[ir]){
1426 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1432 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1434 Int_t quality = centrality->GetQuality();
1436 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1438 Int_t runnum=aodEvent->GetRunNumber();
1439 for(
Int_t ir=0;ir<5;ir++){
1440 if(runnum==selRun[ir]){
1445 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1451 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1453 Int_t quality = centrality->GetQuality();
1455 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1457 Int_t runnum=aodEvent->GetRunNumber();
1458 for(
Int_t ir=0;ir<5;ir++){
1459 if(runnum==selRun[ir]){
1464 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1470 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1472 Int_t quality = centrality->GetQuality();
1474 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1476 Int_t runnum=aodEvent->GetRunNumber();
1477 for(
Int_t ir=0;ir<5;ir++){
1478 if(runnum==selRun[ir]){
1483 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1489 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1491 Int_t quality = centrality->GetQuality();
1493 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1495 Int_t runnum=aodEvent->GetRunNumber();
1496 for(
Int_t ir=0;ir<5;ir++){
1497 if(runnum==selRun[ir]){
1502 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1507 AliWarning(
"Centrality estimator not valid");
1541 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1543 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1545 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;}
1567 TString ptString =
"pT range";
1569 TString firstLine(Form(
"* %-15s",ptString.Data()));
1572 if (ivar == fnVars){
1576 Printf(
"%s",firstLine.Data());
1580 if (ipt==fnPtBins-1){
1589 Printf(
"%s",line.Data());
1606 AliError(
"Can not remove daughters from vertex without AOD event");
1612 AliDebug(2,
"Removal of daughter tracks failed");
1631 AliError(
"Can not get MC vertex without AOD event");
1636 AliAODMCHeader *mcHeader =
1637 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1639 AliError(
"Can not get MC vertex without AODMCHeader event");
1643 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1644 mcHeader->GetVertex(pos);
1645 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1648 AliDebug(2,
"Removal of daughter tracks failed");
1664 AliAODVertex *origownvtx)
const
1674 delete origownvtx; origownvtx=NULL;
1679 delete origownvtx; origownvtx=NULL;
1691 if(!aod)
return kFALSE;
1694 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1696 if(!mcArray)
return kFALSE;
1699 Int_t label = d->MatchToMC(pdg,mcArray);
1714 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1715 vertexer->SetITSMode();
1716 vertexer->SetMinClusters(3);
1718 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1719 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1721 event->GetDiamondCovXY(diamondcovxy);
1722 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1723 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1724 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1725 vertexer->SetVtxStart(diamond);
1726 delete diamond; diamond=NULL;
1729 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1730 if(!vertexESD)
return kFALSE;
1731 if(vertexESD->GetNContributors()<=0) {
1733 delete vertexESD; vertexESD=NULL;
1736 delete vertexer; vertexer=NULL;
1740 vertexESD->GetXYZ(pos);
1741 vertexESD->GetCovMatrix(cov);
1742 chi2perNDF = vertexESD->GetChi2toNDF();
1743 delete vertexESD; vertexESD=NULL;
1745 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1746 pvtx->SetChi2perNDF(chi2perNDF);
1747 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)
ClassImp(AliAnalysisTaskDeltaPt) AliAnalysisTaskDeltaPt
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