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),
98 fMultSelectionObjectName(
"MultSelection"),
104 fMaxRapidityCand(-999.),
105 fKeepSignalMC(kFALSE),
106 fIsCandTrackSPDFirst(kFALSE),
107 fMaxPtCandTrackSPDFirst(0.),
108 fApplySPDDeadPbPb2011(kFALSE),
109 fApplySPDMisalignedPP2012(kFALSE),
110 fMaxDiffTRKV0Centr(-1.),
111 fRemoveTrackletOutliers(kFALSE),
114 fUseTrackSelectionWithFilterBits(kTRUE),
115 fUseCentrFlatteningInMC(kFALSE),
116 fHistCentrDistr(0x0),
117 fCutRatioClsOverCrossRowsTPC(0),
118 fCutRatioSignalNOverCrossRowsTPC(0),
119 fCutMinCrossedRowsTPCPtDep(
""),
120 f1CutMinNCrossedRowsTPCPtDep(0x0),
121 fUseCutGeoNcrNcl(kFALSE),
123 fCutGeoNcrNclLength(130.),
124 fCutGeoNcrNclGeom1Pt(1.5),
125 fCutGeoNcrNclFractionNcr(0.85),
126 fCutGeoNcrNclFractionNcl(0.7),
127 fUseV0ANDSelectionOffline(kFALSE)
136 AliAnalysisCuts(source),
137 fMinVtxType(source.fMinVtxType),
138 fMinVtxContr(source.fMinVtxContr),
139 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
140 fMaxVtxZ(source.fMaxVtxZ),
141 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
142 fTriggerMask(source.fTriggerMask),
143 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
146 fnPtBins(source.fnPtBins),
147 fnPtBinLimits(source.fnPtBinLimits),
149 fnVars(source.fnVars),
151 fnVarsForOpt(source.fnVarsForOpt),
153 fGlobalIndex(source.fGlobalIndex),
156 fUsePID(source.fUsePID),
157 fUseAOD049(source.fUseAOD049),
159 fWhyRejection(source.fWhyRejection),
160 fEvRejectionBits(source.fEvRejectionBits),
161 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
162 fUseMCVertex(source.fUseMCVertex),
163 fUsePhysicsSelection(source.fUsePhysicsSelection),
164 fOptPileup(source.fOptPileup),
165 fMinContrPileup(source.fMinContrPileup),
166 fMinDzPileup(source.fMinDzPileup),
167 fUseCentrality(source.fUseCentrality),
168 fMinCentrality(source.fMinCentrality),
169 fMaxCentrality(source.fMaxCentrality),
170 fMultSelectionObjectName(source.fMultSelectionObjectName),
171 fFixRefs(source.fFixRefs),
172 fIsSelectedCuts(source.fIsSelectedCuts),
173 fIsSelectedPID(source.fIsSelectedPID),
174 fMinPtCand(source.fMinPtCand),
175 fMaxPtCand(source.fMaxPtCand),
176 fMaxRapidityCand(source.fMaxRapidityCand),
177 fKeepSignalMC(source.fKeepSignalMC),
178 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
179 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
180 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
181 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
182 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
183 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
184 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
185 fKinkReject(source.fKinkReject),
186 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
187 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
188 fHistCentrDistr(0x0),
189 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
190 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
191 fCutMinCrossedRowsTPCPtDep(
""),
192 f1CutMinNCrossedRowsTPCPtDep(0x0),
193 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
194 fDeadZoneWidth(source.fDeadZoneWidth),
195 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
196 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
197 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
198 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl),
199 fUseV0ANDSelectionOffline(source.fUseV0ANDSelectionOffline)
204 cout<<
"Copy constructor"<<endl;
225 if(&source ==
this)
return *
this;
227 AliAnalysisCuts::operator=(source);
334 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
335 AliWarning(
"Centrality estimator not valid");
339 if (centvalue<-998.){
366 if(maxCentr<minCentr){
367 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
372 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
376 Double_t ref=0.,bincont=0.,binrefwidth=1.;
378 if(TMath::Abs(centrRef)<0.0001){
383 else if(centrRef>0.){
384 binref=h->FindBin(centrRef);
385 if(binref<1||binref>h->GetNbinsX()){
386 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
392 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
398 for(
Int_t j=1;j<=h->GetNbinsX();j++){
399 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
400 bincont=h->GetBinContent(j);
405 h->SetBinContent(j,1.1);
434 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
438 if(centDigits*100.<bincont)
return kTRUE;
450 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
451 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
458 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
462 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
465 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
470 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
473 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
498 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
507 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
518 for(
Int_t itr=0; itr<nTracks; itr++){
519 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
535 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
542 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
549 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
550 Int_t tv0a=v0data->GetV0ADecision();
551 Int_t tv0c=v0data->GetV0CDecision();
552 if(!(tv0a==1 && tv0c==1)){
563 const AliVVertex *vertex =
event->GetPrimaryVertex();
582 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
590 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
591 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
601 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
614 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
621 AliAnalysisUtils utils;
622 Bool_t isPUMV = utils.IsPileUpMV(event);
634 if(rejection==0) okCent=kTRUE;
646 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
650 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
651 if(ntracklets<1000. && v0cent<cutval){
680 Int_t ndaughters = d->GetNDaughters();
684 vAOD->GetCovarianceMatrix(cov);
685 const AliESDVertex vESD(pos,cov,100.,100);
689 for(
Int_t idg=0; idg<ndaughters; idg++) {
690 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
691 if(!dgTrack) {retval = kFALSE;
continue;}
693 if(dgTrack->Charge()==0)
continue;
696 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
719 Bool_t okTProcessNames = kTRUE;
720 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
721 TTree *treeAOD = aodHandler->GetTree();
722 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
723 if(!treeDeltaAOD || !treeAOD)
return -1;
724 if(treeDeltaAOD && treeAOD){
725 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
726 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
729 TFile *mfile = treeAOD->GetCurrentFile();
730 TFile *dfile = treeDeltaAOD->GetCurrentFile();
731 TList* lm=mfile->GetListOfKeys();
732 TList* ld=dfile->GetListOfKeys();
733 Int_t nentm=lm->GetEntries();
734 Int_t nentd=ld->GetEntries();
735 for(
Int_t jm=0; jm<nentm; jm++){
736 TKey* o=(TKey*)lm->At(jm);
737 TString clnam=o->GetClassName();
738 if(clnam==
"TProcessID"){
741 if(pname.Contains(
"ProcessID")){
746 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
747 okTProcessNames = kFALSE;
755 if (okTProcessNames)
return 1;
765 if(!rows.Contains(
"pt")) {
766 if(print) AliError(
"string must contain \"pt\"");
790 tmp.ReplaceAll(
"pt",
"x");
800 if(!cuts)
return kTRUE;
802 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
806 AliESDtrack esdTrack(track);
808 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
809 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
810 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
812 esdTrack.RelateToVertex(primary,0.,3.);
815 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
819 AliAODVertex *maybeKink=track->GetProdVertex();
820 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
825 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
826 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
831 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
832 Float_t nClustersTPC = esdTrack.GetTPCNcls();
833 if(nCrossedRowsTPC!=0){
834 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
842 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
843 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
844 if(nCrossedRowsTPC!=0){
845 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
853 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
854 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
857 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
860 if(!isOK)
return kFALSE;
871 Bool_t deadSPDLay1PbPb2011[20][4]={
872 {kTRUE,kTRUE,kTRUE,kTRUE},
873 {kTRUE,kTRUE,kTRUE,kTRUE},
874 {kTRUE,kTRUE,kTRUE,kTRUE},
875 {kTRUE,kTRUE,kTRUE,kTRUE},
876 {kTRUE,kTRUE,kTRUE,kTRUE},
877 {kFALSE,kFALSE,kTRUE,kTRUE},
878 {kTRUE,kTRUE,kFALSE,kFALSE},
879 {kTRUE,kTRUE,kTRUE,kTRUE},
880 {kFALSE,kFALSE,kTRUE,kTRUE},
881 {kTRUE,kTRUE,kTRUE,kTRUE},
882 {kTRUE,kTRUE,kFALSE,kFALSE},
883 {kTRUE,kTRUE,kTRUE,kTRUE},
884 {kFALSE,kFALSE,kFALSE,kFALSE},
885 {kFALSE,kFALSE,kTRUE,kTRUE},
886 {kFALSE,kFALSE,kFALSE,kFALSE},
887 {kFALSE,kFALSE,kFALSE,kFALSE},
888 {kTRUE,kTRUE,kTRUE,kTRUE},
889 {kTRUE,kTRUE,kFALSE,kFALSE},
890 {kFALSE,kFALSE,kFALSE,kFALSE},
891 {kFALSE,kFALSE,kFALSE,kFALSE}
893 Bool_t deadSPDLay2PbPb2011[40][4]={
894 {kTRUE,kTRUE,kTRUE,kTRUE},
895 {kTRUE,kTRUE,kTRUE,kTRUE},
896 {kTRUE,kTRUE,kTRUE,kTRUE},
897 {kTRUE,kTRUE,kTRUE,kTRUE},
898 {kTRUE,kTRUE,kTRUE,kTRUE},
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 {kTRUE,kTRUE,kTRUE,kTRUE},
905 {kTRUE,kTRUE,kTRUE,kTRUE},
906 {kFALSE,kFALSE,kFALSE,kFALSE},
907 {kFALSE,kFALSE,kTRUE,kTRUE},
908 {kTRUE,kTRUE,kTRUE,kTRUE},
909 {kTRUE,kTRUE,kTRUE,kTRUE},
910 {kTRUE,kTRUE,kFALSE,kFALSE},
911 {kTRUE,kTRUE,kTRUE,kTRUE},
912 {kTRUE,kTRUE,kTRUE,kTRUE},
913 {kTRUE,kTRUE,kTRUE,kTRUE},
914 {kFALSE,kFALSE,kFALSE,kFALSE},
915 {kFALSE,kFALSE,kFALSE,kFALSE},
916 {kTRUE,kTRUE,kTRUE,kTRUE},
917 {kTRUE,kTRUE,kTRUE,kTRUE},
918 {kFALSE,kFALSE,kFALSE,kFALSE},
919 {kFALSE,kFALSE,kFALSE,kFALSE},
920 {kTRUE,kTRUE,kTRUE,kTRUE},
921 {kTRUE,kTRUE,kTRUE,kTRUE},
922 {kFALSE,kFALSE,kFALSE,kFALSE},
923 {kFALSE,kFALSE,kFALSE,kFALSE},
924 {kFALSE,kFALSE,kFALSE,kFALSE},
925 {kFALSE,kFALSE,kFALSE,kFALSE},
926 {kTRUE,kTRUE,kTRUE,kTRUE},
927 {kTRUE,kTRUE,kTRUE,kTRUE},
928 {kTRUE,kTRUE,kFALSE,kFALSE},
929 {kTRUE,kTRUE,kTRUE,kTRUE},
930 {kFALSE,kFALSE,kFALSE,kFALSE},
931 {kFALSE,kFALSE,kFALSE,kFALSE},
932 {kFALSE,kFALSE,kFALSE,kFALSE},
933 {kFALSE,kFALSE,kFALSE,kFALSE}
936 esdTrack.GetXYZAt(3.9,0.,xyz1);
937 esdTrack.GetXYZAt(7.6,0.,xyz2);
938 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
939 if(phi1<0) phi1+=2*TMath::Pi();
940 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
941 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
942 if(phi2<0) phi2+=2*TMath::Pi();
943 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
947 if(mod1>=0 && mod1<4 && lad1<20){
948 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
951 if(mod2>=0 && mod2<4 && lad2<40){
952 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
954 if(!lay1ok && !lay2ok)
return kFALSE;
960 esdTrack.GetXYZAt(3.9,0.,xyz1);
961 esdTrack.GetXYZAt(7.6,0.,xyz2);
962 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
963 if(phi1<0) phi1+=2*TMath::Pi();
964 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
965 if(phi2<0) phi2+=2*TMath::Pi();
967 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
969 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
970 if(!lay1ok || !lay2ok)
return kFALSE;
982 printf(
"Changing the pt bins\n");
986 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1008 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1014 for(
Int_t iv=0; iv<nVars; iv++) {
1032 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1052 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1064 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1065 AliFatal(
"exiting");
1068 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1069 AliFatal(
"exiting");
1081 cout<<
"Overflow, exit..."<<endl;
1097 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1098 AliFatal(
"exiting");
1103 fCutsRD[iGl] = cutsRDGlob[iGl];
1120 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1121 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1122 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1141 cout<<
"Array of variables"<<endl;
1148 cout<<
"Array of optimization"<<endl;
1155 cout<<
"Array of upper/lower cut"<<endl;
1162 cout<<
"Array of ptbin limits"<<endl;
1169 cout<<
"Matrix of cuts"<<endl;
1188 cout<<
" Trigger selection pattern: ";
1190 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1193 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1194 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1195 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1196 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1197 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1198 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1199 cout << endl<< endl;
1216 for(iv=0; iv<
fnVars; iv++) {
1223 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1234 return iPtBin*
fnVars+iVar;
1269 cout<<
"Cuts not iniziaisez yet"<<endl;
1283 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1289 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1290 if(!defaultmultSelection){
1291 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1294 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1295 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1301 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1302 Int_t qual = multSelection->GetEvSelCode();
1303 if(qual == 199 ) cent=-999;
1307 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1318 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1321 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1322 if(!header) AliFatal(
"Not a standard AOD");
1323 AliCentrality *
centrality=header->GetCentralityP();
1326 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1327 if(!centrality)
return cent;
1330 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1332 Int_t quality = centrality->GetQuality();
1334 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1336 Int_t runnum=aodEvent->GetRunNumber();
1337 for(
Int_t ir=0;ir<5;ir++){
1338 if(runnum==selRun[ir]){
1343 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1350 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1351 v0+=aodV0->GetMTotV0A();
1352 v0+=aodV0->GetMTotV0C();
1353 if(cent==0&&v0<19500)
return -1;
1354 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1355 Float_t val= 1.30552 + 0.147931 * v0;
1356 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};
1357 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1362 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1364 Int_t quality = centrality->GetQuality();
1366 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
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(
"TRK");
1381 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1383 Int_t quality = centrality->GetQuality();
1385 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1387 Int_t runnum=aodEvent->GetRunNumber();
1388 for(
Int_t ir=0;ir<5;ir++){
1389 if(runnum==selRun[ir]){
1394 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1400 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1402 Int_t quality = centrality->GetQuality();
1404 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1406 Int_t runnum=aodEvent->GetRunNumber();
1407 for(
Int_t ir=0;ir<5;ir++){
1408 if(runnum==selRun[ir]){
1413 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1419 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1421 Int_t quality = centrality->GetQuality();
1423 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1425 Int_t runnum=aodEvent->GetRunNumber();
1426 for(
Int_t ir=0;ir<5;ir++){
1427 if(runnum==selRun[ir]){
1432 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1438 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1440 Int_t quality = centrality->GetQuality();
1442 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1444 Int_t runnum=aodEvent->GetRunNumber();
1445 for(
Int_t ir=0;ir<5;ir++){
1446 if(runnum==selRun[ir]){
1451 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1457 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1459 Int_t quality = centrality->GetQuality();
1461 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1463 Int_t runnum=aodEvent->GetRunNumber();
1464 for(
Int_t ir=0;ir<5;ir++){
1465 if(runnum==selRun[ir]){
1470 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1475 AliWarning(
"Centrality estimator not valid");
1509 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1511 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1513 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;}
1535 TString ptString =
"pT range";
1537 TString firstLine(Form(
"* %-15s",ptString.Data()));
1540 if (ivar == fnVars){
1544 Printf(
"%s",firstLine.Data());
1548 if (ipt==fnPtBins-1){
1557 Printf(
"%s",line.Data());
1574 AliError(
"Can not remove daughters from vertex without AOD event");
1580 AliDebug(2,
"Removal of daughter tracks failed");
1599 AliError(
"Can not get MC vertex without AOD event");
1604 AliAODMCHeader *mcHeader =
1605 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1607 AliError(
"Can not get MC vertex without AODMCHeader event");
1611 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1612 mcHeader->GetVertex(pos);
1613 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1616 AliDebug(2,
"Removal of daughter tracks failed");
1632 AliAODVertex *origownvtx)
const
1642 delete origownvtx; origownvtx=NULL;
1647 delete origownvtx; origownvtx=NULL;
1659 if(!aod)
return kFALSE;
1662 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1664 if(!mcArray)
return kFALSE;
1667 Int_t label = d->MatchToMC(pdg,mcArray);
1682 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1683 vertexer->SetITSMode();
1684 vertexer->SetMinClusters(3);
1686 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1687 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1689 event->GetDiamondCovXY(diamondcovxy);
1690 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1691 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1692 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1693 vertexer->SetVtxStart(diamond);
1694 delete diamond; diamond=NULL;
1697 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1698 if(!vertexESD)
return kFALSE;
1699 if(vertexESD->GetNContributors()<=0) {
1701 delete vertexESD; vertexESD=NULL;
1704 delete vertexer; vertexer=NULL;
1708 vertexESD->GetXYZ(pos);
1709 vertexESD->GetCovMatrix(cov);
1710 chi2perNDF = vertexESD->GetChi2toNDF();
1711 delete vertexESD; vertexESD=NULL;
1713 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1714 pvtx->SetChi2perNDF(chi2perNDF);
1715 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
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
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)
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)
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...
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