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)){
642 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
655 isPileup=
event->IsPileupFromSPDInMultBins();
659 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
668 AliAnalysisUtils utils;
669 Bool_t isPUMV = utils.IsPileUpMV(event);
690 Int_t ndaughters = d->GetNDaughters();
694 vAOD->GetCovarianceMatrix(cov);
695 const AliESDVertex vESD(pos,cov,100.,100);
699 for(
Int_t idg=0; idg<ndaughters; idg++) {
700 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
701 if(!dgTrack) {retval = kFALSE;
continue;}
703 if(dgTrack->Charge()==0)
continue;
706 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
729 Bool_t okTProcessNames = kTRUE;
730 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
731 TTree *treeAOD = aodHandler->GetTree();
732 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
733 if(!treeDeltaAOD || !treeAOD)
return -1;
734 if(treeDeltaAOD && treeAOD){
735 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
736 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
739 TFile *mfile = treeAOD->GetCurrentFile();
740 TFile *dfile = treeDeltaAOD->GetCurrentFile();
741 TList* lm=mfile->GetListOfKeys();
742 TList* ld=dfile->GetListOfKeys();
743 Int_t nentm=lm->GetEntries();
744 Int_t nentd=ld->GetEntries();
745 for(
Int_t jm=0; jm<nentm; jm++){
746 TKey* o=(TKey*)lm->At(jm);
747 TString clnam=o->GetClassName();
748 if(clnam==
"TProcessID"){
751 if(pname.Contains(
"ProcessID")){
756 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
757 okTProcessNames = kFALSE;
765 if (okTProcessNames)
return 1;
775 if(!rows.Contains(
"pt")) {
776 if(print) AliError(
"string must contain \"pt\"");
800 tmp.ReplaceAll(
"pt",
"x");
810 if(!cuts)
return kTRUE;
812 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
816 AliESDtrack esdTrack(track);
818 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
819 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
820 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
822 esdTrack.RelateToVertex(primary,0.,3.);
825 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
829 AliAODVertex *maybeKink=track->GetProdVertex();
830 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
835 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
836 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
841 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
842 Float_t nClustersTPC = esdTrack.GetTPCNcls();
843 if(nCrossedRowsTPC!=0){
844 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
852 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
853 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
854 if(nCrossedRowsTPC!=0){
855 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
863 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
864 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
867 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
870 if(!isOK)
return kFALSE;
881 Bool_t deadSPDLay1PbPb2011[20][4]={
882 {kTRUE,kTRUE,kTRUE,kTRUE},
883 {kTRUE,kTRUE,kTRUE,kTRUE},
884 {kTRUE,kTRUE,kTRUE,kTRUE},
885 {kTRUE,kTRUE,kTRUE,kTRUE},
886 {kTRUE,kTRUE,kTRUE,kTRUE},
887 {kFALSE,kFALSE,kTRUE,kTRUE},
888 {kTRUE,kTRUE,kFALSE,kFALSE},
889 {kTRUE,kTRUE,kTRUE,kTRUE},
890 {kFALSE,kFALSE,kTRUE,kTRUE},
891 {kTRUE,kTRUE,kTRUE,kTRUE},
892 {kTRUE,kTRUE,kFALSE,kFALSE},
893 {kTRUE,kTRUE,kTRUE,kTRUE},
894 {kFALSE,kFALSE,kFALSE,kFALSE},
895 {kFALSE,kFALSE,kTRUE,kTRUE},
896 {kFALSE,kFALSE,kFALSE,kFALSE},
897 {kFALSE,kFALSE,kFALSE,kFALSE},
898 {kTRUE,kTRUE,kTRUE,kTRUE},
899 {kTRUE,kTRUE,kFALSE,kFALSE},
900 {kFALSE,kFALSE,kFALSE,kFALSE},
901 {kFALSE,kFALSE,kFALSE,kFALSE}
903 Bool_t deadSPDLay2PbPb2011[40][4]={
904 {kTRUE,kTRUE,kTRUE,kTRUE},
905 {kTRUE,kTRUE,kTRUE,kTRUE},
906 {kTRUE,kTRUE,kTRUE,kTRUE},
907 {kTRUE,kTRUE,kTRUE,kTRUE},
908 {kTRUE,kTRUE,kTRUE,kTRUE},
909 {kTRUE,kTRUE,kTRUE,kTRUE},
910 {kTRUE,kTRUE,kTRUE,kTRUE},
911 {kTRUE,kTRUE,kTRUE,kTRUE},
912 {kTRUE,kTRUE,kTRUE,kTRUE},
913 {kTRUE,kTRUE,kTRUE,kTRUE},
914 {kTRUE,kTRUE,kTRUE,kTRUE},
915 {kTRUE,kTRUE,kTRUE,kTRUE},
916 {kFALSE,kFALSE,kFALSE,kFALSE},
917 {kFALSE,kFALSE,kTRUE,kTRUE},
918 {kTRUE,kTRUE,kTRUE,kTRUE},
919 {kTRUE,kTRUE,kTRUE,kTRUE},
920 {kTRUE,kTRUE,kFALSE,kFALSE},
921 {kTRUE,kTRUE,kTRUE,kTRUE},
922 {kTRUE,kTRUE,kTRUE,kTRUE},
923 {kTRUE,kTRUE,kTRUE,kTRUE},
924 {kFALSE,kFALSE,kFALSE,kFALSE},
925 {kFALSE,kFALSE,kFALSE,kFALSE},
926 {kTRUE,kTRUE,kTRUE,kTRUE},
927 {kTRUE,kTRUE,kTRUE,kTRUE},
928 {kFALSE,kFALSE,kFALSE,kFALSE},
929 {kFALSE,kFALSE,kFALSE,kFALSE},
930 {kTRUE,kTRUE,kTRUE,kTRUE},
931 {kTRUE,kTRUE,kTRUE,kTRUE},
932 {kFALSE,kFALSE,kFALSE,kFALSE},
933 {kFALSE,kFALSE,kFALSE,kFALSE},
934 {kFALSE,kFALSE,kFALSE,kFALSE},
935 {kFALSE,kFALSE,kFALSE,kFALSE},
936 {kTRUE,kTRUE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kTRUE,kTRUE},
938 {kTRUE,kTRUE,kFALSE,kFALSE},
939 {kTRUE,kTRUE,kTRUE,kTRUE},
940 {kFALSE,kFALSE,kFALSE,kFALSE},
941 {kFALSE,kFALSE,kFALSE,kFALSE},
942 {kFALSE,kFALSE,kFALSE,kFALSE},
943 {kFALSE,kFALSE,kFALSE,kFALSE}
946 esdTrack.GetXYZAt(3.9,0.,xyz1);
947 esdTrack.GetXYZAt(7.6,0.,xyz2);
948 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
949 if(phi1<0) phi1+=2*TMath::Pi();
950 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
951 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
952 if(phi2<0) phi2+=2*TMath::Pi();
953 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
957 if(mod1>=0 && mod1<4 && lad1<20){
958 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
961 if(mod2>=0 && mod2<4 && lad2<40){
962 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
964 if(!lay1ok && !lay2ok)
return kFALSE;
970 esdTrack.GetXYZAt(3.9,0.,xyz1);
971 esdTrack.GetXYZAt(7.6,0.,xyz2);
972 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
973 if(phi1<0) phi1+=2*TMath::Pi();
974 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
975 if(phi2<0) phi2+=2*TMath::Pi();
977 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
979 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
980 if(!lay1ok || !lay2ok)
return kFALSE;
992 printf(
"Changing the pt bins\n");
996 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1018 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1024 for(
Int_t iv=0; iv<nVars; iv++) {
1042 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1062 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1074 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1075 AliFatal(
"exiting");
1078 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1079 AliFatal(
"exiting");
1091 cout<<
"Overflow, exit..."<<endl;
1107 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1108 AliFatal(
"exiting");
1113 fCutsRD[iGl] = cutsRDGlob[iGl];
1130 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1131 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1132 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1151 cout<<
"Array of variables"<<endl;
1158 cout<<
"Array of optimization"<<endl;
1165 cout<<
"Array of upper/lower cut"<<endl;
1172 cout<<
"Array of ptbin limits"<<endl;
1179 cout<<
"Matrix of cuts"<<endl;
1198 cout<<
" Trigger selection pattern: ";
1200 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1203 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1204 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1205 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1206 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1207 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1208 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1209 cout << endl<< endl;
1226 for(iv=0; iv<
fnVars; iv++) {
1233 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1244 return iPtBin*
fnVars+iVar;
1279 cout<<
"Cuts not iniziaisez yet"<<endl;
1293 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1299 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1300 if(!defaultmultSelection){
1301 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1304 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1305 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1311 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1313 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1315 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1317 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1319 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1322 Int_t qual = multSelection->GetEvSelCode();
1323 if(qual == 199 ) cent=-999;
1332 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1335 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1336 if(!header) AliFatal(
"Not a standard AOD");
1337 AliCentrality *
centrality=header->GetCentralityP();
1340 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1341 if(!centrality)
return cent;
1344 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1346 Int_t quality = centrality->GetQuality();
1348 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1350 Int_t runnum=aodEvent->GetRunNumber();
1351 for(
Int_t ir=0;ir<5;ir++){
1352 if(runnum==selRun[ir]){
1357 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1364 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1365 v0+=aodV0->GetMTotV0A();
1366 v0+=aodV0->GetMTotV0C();
1367 if(cent==0&&v0<19500)
return -1;
1368 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1369 Float_t val= 1.30552 + 0.147931 * v0;
1370 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};
1371 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1376 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1378 Int_t quality = centrality->GetQuality();
1380 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1382 Int_t runnum=aodEvent->GetRunNumber();
1383 for(
Int_t ir=0;ir<5;ir++){
1384 if(runnum==selRun[ir]){
1389 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1395 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1397 Int_t quality = centrality->GetQuality();
1399 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
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(
"TKL");
1414 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1416 Int_t quality = centrality->GetQuality();
1418 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
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(
"CL1");
1433 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1435 Int_t quality = centrality->GetQuality();
1437 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
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(
"ZNA");
1452 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1454 Int_t quality = centrality->GetQuality();
1456 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
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(
"ZPA");
1471 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1473 Int_t quality = centrality->GetQuality();
1475 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
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(
"V0A");
1489 AliWarning(
"Centrality estimator not valid");
1523 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1525 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1527 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;}
1549 TString ptString =
"pT range";
1551 TString firstLine(Form(
"* %-15s",ptString.Data()));
1554 if (ivar == fnVars){
1558 Printf(
"%s",firstLine.Data());
1562 if (ipt==fnPtBins-1){
1571 Printf(
"%s",line.Data());
1588 AliError(
"Can not remove daughters from vertex without AOD event");
1594 AliDebug(2,
"Removal of daughter tracks failed");
1613 AliError(
"Can not get MC vertex without AOD event");
1618 AliAODMCHeader *mcHeader =
1619 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1621 AliError(
"Can not get MC vertex without AODMCHeader event");
1625 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1626 mcHeader->GetVertex(pos);
1627 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1630 AliDebug(2,
"Removal of daughter tracks failed");
1646 AliAODVertex *origownvtx)
const
1656 delete origownvtx; origownvtx=NULL;
1661 delete origownvtx; origownvtx=NULL;
1673 if(!aod)
return kFALSE;
1676 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1678 if(!mcArray)
return kFALSE;
1681 Int_t label = d->MatchToMC(pdg,mcArray);
1696 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1697 vertexer->SetITSMode();
1698 vertexer->SetMinClusters(3);
1700 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1701 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1703 event->GetDiamondCovXY(diamondcovxy);
1704 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1705 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1706 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1707 vertexer->SetVtxStart(diamond);
1708 delete diamond; diamond=NULL;
1711 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1712 if(!vertexESD)
return kFALSE;
1713 if(vertexESD->GetNContributors()<=0) {
1715 delete vertexESD; vertexESD=NULL;
1718 delete vertexer; vertexer=NULL;
1722 vertexESD->GetXYZ(pos);
1723 vertexESD->GetCovMatrix(cov);
1724 chi2perNDF = vertexESD->GetChi2toNDF();
1725 delete vertexESD; vertexESD=NULL;
1727 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1728 pvtx->SetChi2perNDF(chi2perNDF);
1729 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)
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