24 #include <Riostream.h>
26 #include "AliVEvent.h"
27 #include "AliESDEvent.h"
28 #include "AliAODEvent.h"
29 #include "AliVVertex.h"
30 #include "AliESDVertex.h"
32 #include "AliAODVertex.h"
33 #include "AliESDtrack.h"
34 #include "AliAODTrack.h"
35 #include "AliESDtrackCuts.h"
36 #include "AliCentrality.h"
39 #include "AliAODMCHeader.h"
40 #include "AliAODMCParticle.h"
41 #include "AliVertexerTracks.h"
43 #include "AliAnalysisManager.h"
44 #include "AliAODHandler.h"
45 #include "AliInputEventHandler.h"
46 #include "AliPIDResponse.h"
47 #include "AliAnalysisUtils.h"
48 #include "AliMultSelection.h"
64 AliAnalysisCuts(name,title),
69 fMinSPDMultiplicity(0),
70 fTriggerMask(AliVEvent::kAnyINT),
71 fUseOnlyOneTrigger(kFALSE),
88 fRemoveDaughtersFromPrimary(kFALSE),
90 fUsePhysicsSelection(kTRUE),
102 fMaxRapidityCand(-999.),
103 fKeepSignalMC(kFALSE),
104 fIsCandTrackSPDFirst(kFALSE),
105 fMaxPtCandTrackSPDFirst(0.),
106 fApplySPDDeadPbPb2011(kFALSE),
107 fApplySPDMisalignedPP2012(kFALSE),
108 fMaxDiffTRKV0Centr(-1.),
109 fRemoveTrackletOutliers(kFALSE),
112 fUseTrackSelectionWithFilterBits(kTRUE),
113 fUseCentrFlatteningInMC(kFALSE),
114 fHistCentrDistr(0x0),
115 fCutRatioClsOverCrossRowsTPC(0),
116 fCutRatioSignalNOverCrossRowsTPC(0),
117 fCutMinCrossedRowsTPCPtDep(
""),
118 f1CutMinNCrossedRowsTPCPtDep(0x0),
119 fUseCutGeoNcrNcl(kFALSE),
121 fCutGeoNcrNclLength(130.),
122 fCutGeoNcrNclGeom1Pt(1.5),
123 fCutGeoNcrNclFractionNcr(0.85),
124 fCutGeoNcrNclFractionNcl(0.7)
133 AliAnalysisCuts(source),
134 fMinVtxType(source.fMinVtxType),
135 fMinVtxContr(source.fMinVtxContr),
136 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
137 fMaxVtxZ(source.fMaxVtxZ),
138 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
139 fTriggerMask(source.fTriggerMask),
140 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
143 fnPtBins(source.fnPtBins),
144 fnPtBinLimits(source.fnPtBinLimits),
146 fnVars(source.fnVars),
148 fnVarsForOpt(source.fnVarsForOpt),
150 fGlobalIndex(source.fGlobalIndex),
153 fUsePID(source.fUsePID),
154 fUseAOD049(source.fUseAOD049),
156 fWhyRejection(source.fWhyRejection),
157 fEvRejectionBits(source.fEvRejectionBits),
158 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
159 fUseMCVertex(source.fUseMCVertex),
160 fUsePhysicsSelection(source.fUsePhysicsSelection),
161 fOptPileup(source.fOptPileup),
162 fMinContrPileup(source.fMinContrPileup),
163 fMinDzPileup(source.fMinDzPileup),
164 fUseCentrality(source.fUseCentrality),
165 fMinCentrality(source.fMinCentrality),
166 fMaxCentrality(source.fMaxCentrality),
167 fFixRefs(source.fFixRefs),
168 fIsSelectedCuts(source.fIsSelectedCuts),
169 fIsSelectedPID(source.fIsSelectedPID),
170 fMinPtCand(source.fMinPtCand),
171 fMaxPtCand(source.fMaxPtCand),
172 fMaxRapidityCand(source.fMaxRapidityCand),
173 fKeepSignalMC(source.fKeepSignalMC),
174 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
175 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
176 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
177 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
178 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
179 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
180 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
181 fKinkReject(source.fKinkReject),
182 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
183 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
184 fHistCentrDistr(0x0),
185 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
186 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
187 fCutMinCrossedRowsTPCPtDep(
""),
188 f1CutMinNCrossedRowsTPCPtDep(0x0),
189 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
190 fDeadZoneWidth(source.fDeadZoneWidth),
191 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
192 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
193 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
194 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl)
199 cout<<
"Copy constructor"<<endl;
220 if(&source ==
this)
return *
this;
222 AliAnalysisCuts::operator=(source);
327 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
328 AliWarning(
"Centrality estimator not valid");
332 if (centvalue<-998.){
357 if(maxCentr<minCentr){
358 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
363 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
367 Double_t ref=0.,bincont=0.,binrefwidth=1.;
369 if(TMath::Abs(centrRef)<0.0001){
374 else if(centrRef>0.){
375 binref=h->FindBin(centrRef);
376 if(binref<1||binref>h->GetNbinsX()){
377 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
383 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
389 for(
Int_t j=1;j<=h->GetNbinsX();j++){
390 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
391 bincont=h->GetBinContent(j);
396 h->SetBinContent(j,1.1);
425 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
429 if(centDigits*100.<bincont)
return kTRUE;
441 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
442 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
449 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
453 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
456 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
461 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
464 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
489 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
498 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
509 for(
Int_t itr=0; itr<nTracks; itr++){
510 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
526 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
533 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
544 const AliVVertex *vertex =
event->GetPrimaryVertex();
563 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
571 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
572 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
582 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
595 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
602 AliAnalysisUtils utils;
603 Bool_t isPUMV = utils.IsPileUpMV(event);
615 if(rejection==0) okCent=kTRUE;
627 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
631 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
632 if(ntracklets<1000. && v0cent<cutval){
661 Int_t ndaughters = d->GetNDaughters();
665 vAOD->GetCovarianceMatrix(cov);
666 const AliESDVertex vESD(pos,cov,100.,100);
670 for(
Int_t idg=0; idg<ndaughters; idg++) {
671 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
672 if(!dgTrack) {retval = kFALSE;
continue;}
674 if(dgTrack->Charge()==0)
continue;
677 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
700 Bool_t okTProcessNames = kTRUE;
701 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
702 TTree *treeAOD = aodHandler->GetTree();
703 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
704 if(treeDeltaAOD && treeAOD){
705 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
706 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
709 TFile *mfile = treeAOD->GetCurrentFile();
710 TFile *dfile = treeDeltaAOD->GetCurrentFile();
711 TList* lm=mfile->GetListOfKeys();
712 TList* ld=dfile->GetListOfKeys();
713 Int_t nentm=lm->GetEntries();
714 Int_t nentd=ld->GetEntries();
715 for(
Int_t jm=0; jm<nentm; jm++){
716 TKey* o=(TKey*)lm->At(jm);
717 TString clnam=o->GetClassName();
718 if(clnam==
"TProcessID"){
721 if(pname.Contains(
"ProcessID")){
726 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
727 okTProcessNames = kFALSE;
735 if (okTProcessNames)
return 1;
745 if(!rows.Contains(
"pt")) {
746 if(print) AliError(
"string must contain \"pt\"");
770 tmp.ReplaceAll(
"pt",
"x");
780 if(!cuts)
return kTRUE;
782 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
786 AliESDtrack esdTrack(track);
788 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
789 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
790 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
792 esdTrack.RelateToVertex(primary,0.,3.);
795 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
799 AliAODVertex *maybeKink=track->GetProdVertex();
800 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
805 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
806 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
811 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
812 Float_t nClustersTPC = esdTrack.GetTPCNcls();
813 if(nCrossedRowsTPC!=0){
814 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
822 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
823 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
824 if(nCrossedRowsTPC!=0){
825 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
833 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
834 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
837 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
840 if(!isOK)
return kFALSE;
851 Bool_t deadSPDLay1PbPb2011[20][4]={
852 {kTRUE,kTRUE,kTRUE,kTRUE},
853 {kTRUE,kTRUE,kTRUE,kTRUE},
854 {kTRUE,kTRUE,kTRUE,kTRUE},
855 {kTRUE,kTRUE,kTRUE,kTRUE},
856 {kTRUE,kTRUE,kTRUE,kTRUE},
857 {kFALSE,kFALSE,kTRUE,kTRUE},
858 {kTRUE,kTRUE,kFALSE,kFALSE},
859 {kTRUE,kTRUE,kTRUE,kTRUE},
860 {kFALSE,kFALSE,kTRUE,kTRUE},
861 {kTRUE,kTRUE,kTRUE,kTRUE},
862 {kTRUE,kTRUE,kFALSE,kFALSE},
863 {kTRUE,kTRUE,kTRUE,kTRUE},
864 {kFALSE,kFALSE,kFALSE,kFALSE},
865 {kFALSE,kFALSE,kTRUE,kTRUE},
866 {kFALSE,kFALSE,kFALSE,kFALSE},
867 {kFALSE,kFALSE,kFALSE,kFALSE},
868 {kTRUE,kTRUE,kTRUE,kTRUE},
869 {kTRUE,kTRUE,kFALSE,kFALSE},
870 {kFALSE,kFALSE,kFALSE,kFALSE},
871 {kFALSE,kFALSE,kFALSE,kFALSE}
873 Bool_t deadSPDLay2PbPb2011[40][4]={
874 {kTRUE,kTRUE,kTRUE,kTRUE},
875 {kTRUE,kTRUE,kTRUE,kTRUE},
876 {kTRUE,kTRUE,kTRUE,kTRUE},
877 {kTRUE,kTRUE,kTRUE,kTRUE},
878 {kTRUE,kTRUE,kTRUE,kTRUE},
879 {kTRUE,kTRUE,kTRUE,kTRUE},
880 {kTRUE,kTRUE,kTRUE,kTRUE},
881 {kTRUE,kTRUE,kTRUE,kTRUE},
882 {kTRUE,kTRUE,kTRUE,kTRUE},
883 {kTRUE,kTRUE,kTRUE,kTRUE},
884 {kTRUE,kTRUE,kTRUE,kTRUE},
885 {kTRUE,kTRUE,kTRUE,kTRUE},
886 {kFALSE,kFALSE,kFALSE,kFALSE},
887 {kFALSE,kFALSE,kTRUE,kTRUE},
888 {kTRUE,kTRUE,kTRUE,kTRUE},
889 {kTRUE,kTRUE,kTRUE,kTRUE},
890 {kTRUE,kTRUE,kFALSE,kFALSE},
891 {kTRUE,kTRUE,kTRUE,kTRUE},
892 {kTRUE,kTRUE,kTRUE,kTRUE},
893 {kTRUE,kTRUE,kTRUE,kTRUE},
894 {kFALSE,kFALSE,kFALSE,kFALSE},
895 {kFALSE,kFALSE,kFALSE,kFALSE},
896 {kTRUE,kTRUE,kTRUE,kTRUE},
897 {kTRUE,kTRUE,kTRUE,kTRUE},
898 {kFALSE,kFALSE,kFALSE,kFALSE},
899 {kFALSE,kFALSE,kFALSE,kFALSE},
900 {kTRUE,kTRUE,kTRUE,kTRUE},
901 {kTRUE,kTRUE,kTRUE,kTRUE},
902 {kFALSE,kFALSE,kFALSE,kFALSE},
903 {kFALSE,kFALSE,kFALSE,kFALSE},
904 {kFALSE,kFALSE,kFALSE,kFALSE},
905 {kFALSE,kFALSE,kFALSE,kFALSE},
906 {kTRUE,kTRUE,kTRUE,kTRUE},
907 {kTRUE,kTRUE,kTRUE,kTRUE},
908 {kTRUE,kTRUE,kFALSE,kFALSE},
909 {kTRUE,kTRUE,kTRUE,kTRUE},
910 {kFALSE,kFALSE,kFALSE,kFALSE},
911 {kFALSE,kFALSE,kFALSE,kFALSE},
912 {kFALSE,kFALSE,kFALSE,kFALSE},
913 {kFALSE,kFALSE,kFALSE,kFALSE}
916 esdTrack.GetXYZAt(3.9,0.,xyz1);
917 esdTrack.GetXYZAt(7.6,0.,xyz2);
918 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
919 if(phi1<0) phi1+=2*TMath::Pi();
920 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
921 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
922 if(phi2<0) phi2+=2*TMath::Pi();
923 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
927 if(mod1>=0 && mod1<4 && lad1<20){
928 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
931 if(mod2>=0 && mod2<4 && lad2<40){
932 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
934 if(!lay1ok && !lay2ok)
return kFALSE;
940 esdTrack.GetXYZAt(3.9,0.,xyz1);
941 esdTrack.GetXYZAt(7.6,0.,xyz2);
942 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
943 if(phi1<0) phi1+=2*TMath::Pi();
944 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
945 if(phi2<0) phi2+=2*TMath::Pi();
947 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
949 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
950 if(!lay1ok || !lay2ok)
return kFALSE;
962 printf(
"Changing the pt bins\n");
966 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
988 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
994 for(
Int_t iv=0; iv<nVars; iv++) {
1012 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1032 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1044 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1045 AliFatal(
"exiting");
1048 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1049 AliFatal(
"exiting");
1061 cout<<
"Overflow, exit..."<<endl;
1077 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1078 AliFatal(
"exiting");
1083 fCutsRD[iGl] = cutsRDGlob[iGl];
1100 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1101 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1102 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1121 cout<<
"Array of variables"<<endl;
1128 cout<<
"Array of optimization"<<endl;
1135 cout<<
"Array of upper/lower cut"<<endl;
1142 cout<<
"Array of ptbin limits"<<endl;
1149 cout<<
"Matrix of cuts"<<endl;
1168 cout<<
" Trigger selection pattern: ";
1170 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1173 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1174 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1175 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1176 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1177 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1178 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1179 cout << endl<< endl;
1196 for(iv=0; iv<
fnVars; iv++) {
1203 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1214 return iPtBin*
fnVars+iVar;
1249 cout<<
"Cuts not iniziaisez yet"<<endl;
1260 AliMultSelection *multSelection = (AliMultSelection * ) aodEvent->FindListObject(
"MultSelection");
1262 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1266 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1267 Int_t qual = multSelection->GetEvSelCode();
1268 if(qual == 199 ) cent=-999;
1272 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1283 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1286 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1287 if(!header) AliFatal(
"Not a standard AOD");
1288 AliCentrality *
centrality=header->GetCentralityP();
1291 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1292 if(!centrality)
return cent;
1295 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1297 Int_t quality = centrality->GetQuality();
1299 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1301 Int_t runnum=aodEvent->GetRunNumber();
1302 for(
Int_t ir=0;ir<5;ir++){
1303 if(runnum==selRun[ir]){
1308 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1315 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1316 v0+=aodV0->GetMTotV0A();
1317 v0+=aodV0->GetMTotV0C();
1318 if(cent==0&&v0<19500)
return -1;
1319 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1320 Float_t val= 1.30552 + 0.147931 * v0;
1321 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};
1322 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1327 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1329 Int_t quality = centrality->GetQuality();
1331 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1333 Int_t runnum=aodEvent->GetRunNumber();
1334 for(
Int_t ir=0;ir<5;ir++){
1335 if(runnum==selRun[ir]){
1340 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1346 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1348 Int_t quality = centrality->GetQuality();
1350 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1352 Int_t runnum=aodEvent->GetRunNumber();
1353 for(
Int_t ir=0;ir<5;ir++){
1354 if(runnum==selRun[ir]){
1359 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1365 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1367 Int_t quality = centrality->GetQuality();
1369 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1371 Int_t runnum=aodEvent->GetRunNumber();
1372 for(
Int_t ir=0;ir<5;ir++){
1373 if(runnum==selRun[ir]){
1378 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1384 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1386 Int_t quality = centrality->GetQuality();
1388 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1390 Int_t runnum=aodEvent->GetRunNumber();
1391 for(
Int_t ir=0;ir<5;ir++){
1392 if(runnum==selRun[ir]){
1397 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1403 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1405 Int_t quality = centrality->GetQuality();
1407 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1409 Int_t runnum=aodEvent->GetRunNumber();
1410 for(
Int_t ir=0;ir<5;ir++){
1411 if(runnum==selRun[ir]){
1416 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1422 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1424 Int_t quality = centrality->GetQuality();
1426 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1428 Int_t runnum=aodEvent->GetRunNumber();
1429 for(
Int_t ir=0;ir<5;ir++){
1430 if(runnum==selRun[ir]){
1435 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1440 AliWarning(
"Centrality estimator not valid");
1474 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1476 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1478 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;}
1500 TString ptString =
"pT range";
1502 TString firstLine(Form(
"* %-15s",ptString.Data()));
1505 if (ivar == fnVars){
1509 Printf(
"%s",firstLine.Data());
1513 if (ipt==fnPtBins-1){
1522 Printf(
"%s",line.Data());
1539 AliError(
"Can not remove daughters from vertex without AOD event");
1545 AliDebug(2,
"Removal of daughter tracks failed");
1564 AliError(
"Can not get MC vertex without AOD event");
1569 AliAODMCHeader *mcHeader =
1570 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1572 AliError(
"Can not get MC vertex without AODMCHeader event");
1576 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1577 mcHeader->GetVertex(pos);
1578 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1581 AliDebug(2,
"Removal of daughter tracks failed");
1597 AliAODVertex *origownvtx)
const
1607 delete origownvtx; origownvtx=NULL;
1612 delete origownvtx; origownvtx=NULL;
1624 if(!aod)
return kFALSE;
1627 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1629 if(!mcArray)
return kFALSE;
1632 Int_t label = d->MatchToMC(pdg,mcArray);
1647 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1648 vertexer->SetITSMode();
1649 vertexer->SetMinClusters(3);
1651 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1652 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1654 event->GetDiamondCovXY(diamondcovxy);
1655 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1656 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1657 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1658 vertexer->SetVtxStart(diamond);
1659 delete diamond; diamond=NULL;
1662 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1663 if(!vertexESD)
return kFALSE;
1664 if(vertexESD->GetNContributors()<=0) {
1666 delete vertexESD; vertexESD=NULL;
1669 delete vertexer; vertexer=NULL;
1673 vertexESD->GetXYZ(pos);
1674 vertexESD->GetCovMatrix(cov);
1675 chi2perNDF = vertexESD->GetChi2toNDF();
1676 delete vertexESD; vertexESD=NULL;
1678 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1679 pvtx->SetChi2perNDF(chi2perNDF);
1680 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)
AliRDHFCuts(const Char_t *name="RDHFCuts", const Char_t *title="")
ULong64_t fTriggerMask
SPD multiplicity.
Bool_t fUseCutGeoNcrNcl
pT-dep cut in TPC minimum n crossed rows
Bool_t fUseTrackSelectionWithFilterBits
flag to reject kink daughters
void SetCuts(Int_t nVars, Int_t nPtBins, Float_t **cutsRD)
Double_t fCutGeoNcrNclLength
1st parameter of GeoNcrNcl cut
void SetPbPb(Bool_t pbpb)
TString * fVarNames
number of cut vars for candidates
Double_t fMaxPtCand
minimum pt of the candidate
AliESDtrackCuts * fTrackCuts
quality cuts on the daughter tracks
Bool_t fFixRefs
maximum centrality for selected events
Bool_t fKeepSignalMC
max rapidity of candidate (if !=-999 overrides IsInFiducialAcceptance)
Int_t fOptPileup
use Physics selection criteria
AliESDtrackCuts * GetTrackCuts() const
void PrintTrigger() const
Float_t fMaxVtxZ
maximum chi2/ndf
Float_t GetCentrality(AliAODEvent *aodEvent)
Int_t fIsSelectedPID
outcome of cuts selection
AliAODVertex * RemoveDaughtersFromPrimaryVtx(AliAODEvent *aod)
AliPIDResponse * GetPidResponse() const
UInt_t fEvRejectionBits
used to code the step at which candidate was rejected
Double_t fMaxDiffTRKV0Centr
flag to apply cut on tracks crossing SPD misaligned modules for PP2012 data
Float_t GetCentralityOldFramework(AliAODEvent *aodEvent, AliRDHFCuts::ECentrality estimator)
Int_t fnPtBinLimits
number of pt bins for cuts
Float_t * fCutsRD
fnVars*fnPtBins
Bool_t CheckPtDepCrossedRows(TString rows, Bool_t print=kFALSE) const
Bool_t Data(TH1F *h, Double_t *rangefit, Bool_t writefit, Double_t &sgn, Double_t &errsgn, Double_t &bkg, Double_t &errbkg, Double_t &sgnf, Double_t &errsgnf, Double_t &sigmafit, Int_t &status)
void SetOwnPrimaryVtx(const AliAODVertex *vtx)
Bool_t fUseCentrFlatteningInMC
flag to enable/disable the check on filter bits
void SetVarsForOpt(Int_t nVars, Bool_t *forOpt)
void SetVarNames(Int_t nVars, TString *varNames, Bool_t *isUpperCut)
void GetVarPtIndex(Int_t iGlob, Int_t &iVar, Int_t &iPtBin) const
Bool_t * fVarsForOpt
number of cut vars to be optimized for candidates
Bool_t CompareCuts(const AliRDHFCuts *obj) const
Bool_t AreDaughtersSelected(AliAODRecoDecayHF *rd, const AliAODEvent *aod=0x0) const
Bool_t fApplySPDMisalignedPP2012
flag to apply SPD dead module map of PbPb2011
Bool_t IsEventSelected(AliVEvent *event)
Int_t fMinSPDMultiplicity
maximum |z| of primary vertex
virtual void PrintAll() const
Bool_t fUseAOD049
enable PID usage (off by default)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
Bool_t fApplySPDDeadPbPb2011
maximum pt of the candidate for which to check if the daughters fulfill kFirst criteria ...
void CleanOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod, AliAODVertex *origownvtx) const
Bool_t fIsCandTrackSPDFirst
IsSelected returns always kTRUE for MC signal.
TH1F * fHistCentrDistr
flag for enabling/diabling centrality flattening in MC
void SetPtBins(Int_t nPtBinLimits, Float_t *ptBinLimits)
Bool_t fKinkReject
cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm...
Int_t fMinContrPileup
option for pielup selection
Bool_t fUsePhysicsSelection
use MC primary vertex
TFormula * f1CutMinNCrossedRowsTPCPtDep
pT-dep cut in TPC minimum n crossed rows
AliAODVertex * GetPrimaryVtx() const
void AddTrackCuts(const AliESDtrackCuts *cuts)
TString fTriggerClass[2]
flag to select one trigger only
Int_t fnPtBins
cuts on the candidate
Double_t fCutGeoNcrNclGeom1Pt
2nd parameter of GeoNcrNcl cut
AliAODPidHF * fPidHF
enable AOD049 centrality cleanup
Float_t fCutRatioSignalNOverCrossRowsTPC
min. value ratio NTPCClusters/NTPCCrossedRows, cut if !=0
Bool_t RecalcOwnPrimaryVtx(AliAODRecoDecayHF *d, AliAODEvent *aod) const
Int_t PtBin(Double_t pt) const
Int_t GetGlobalIndex(Int_t iVar, Int_t iPtBin) const
TString fCutMinCrossedRowsTPCPtDep
min. value ratio TPCPointsUsedForPID/NTPCCrossedRows, cut if !=0
Double_t fMinPtCand
outcome of PID selection
Bool_t IsDaughterSelected(AliAODTrack *track, const AliESDVertex *primary, AliESDtrackCuts *cuts, const AliAODEvent *aod=0x0) const
void SetOnePad(Bool_t onepad)
Float_t fMaxCentrality
minimum centrality for selected events
void SetPidResponse(AliPIDResponse *pidResp)
Bool_t RecomputePrimaryVertex(AliAODEvent *event) const