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; } }
692 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
693 TTree *treeAOD = aodHandler->GetTree();
694 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
695 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
696 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
699 TFile *mfile = treeAOD->GetCurrentFile();
700 TFile *dfile = treeDeltaAOD->GetCurrentFile();
701 TList* lm=mfile->GetListOfKeys();
702 TList* ld=dfile->GetListOfKeys();
703 Int_t nentm=lm->GetEntries();
704 Int_t nentd=ld->GetEntries();
705 for(
Int_t jm=0; jm<nentm; jm++){
706 TKey* o=(TKey*)lm->At(jm);
707 TString clnam=o->GetClassName();
708 if(clnam==
"TProcessID"){
711 if(pname.Contains(
"ProcessID")){
716 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
732 if(!rows.Contains(
"pt")) {
733 if(print) AliError(
"string must contain \"pt\"");
757 tmp.ReplaceAll(
"pt",
"x");
767 if(!cuts)
return kTRUE;
769 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
773 AliESDtrack esdTrack(track);
775 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
776 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
777 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
779 esdTrack.RelateToVertex(primary,0.,3.);
782 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
786 AliAODVertex *maybeKink=track->GetProdVertex();
787 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
792 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
793 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
798 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
799 Float_t nClustersTPC = esdTrack.GetTPCNcls();
800 if(nCrossedRowsTPC!=0){
801 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
809 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
810 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
811 if(nCrossedRowsTPC!=0){
812 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
820 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
821 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
824 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
827 if(!isOK)
return kFALSE;
838 Bool_t deadSPDLay1PbPb2011[20][4]={
839 {kTRUE,kTRUE,kTRUE,kTRUE},
840 {kTRUE,kTRUE,kTRUE,kTRUE},
841 {kTRUE,kTRUE,kTRUE,kTRUE},
842 {kTRUE,kTRUE,kTRUE,kTRUE},
843 {kTRUE,kTRUE,kTRUE,kTRUE},
844 {kFALSE,kFALSE,kTRUE,kTRUE},
845 {kTRUE,kTRUE,kFALSE,kFALSE},
846 {kTRUE,kTRUE,kTRUE,kTRUE},
847 {kFALSE,kFALSE,kTRUE,kTRUE},
848 {kTRUE,kTRUE,kTRUE,kTRUE},
849 {kTRUE,kTRUE,kFALSE,kFALSE},
850 {kTRUE,kTRUE,kTRUE,kTRUE},
851 {kFALSE,kFALSE,kFALSE,kFALSE},
852 {kFALSE,kFALSE,kTRUE,kTRUE},
853 {kFALSE,kFALSE,kFALSE,kFALSE},
854 {kFALSE,kFALSE,kFALSE,kFALSE},
855 {kTRUE,kTRUE,kTRUE,kTRUE},
856 {kTRUE,kTRUE,kFALSE,kFALSE},
857 {kFALSE,kFALSE,kFALSE,kFALSE},
858 {kFALSE,kFALSE,kFALSE,kFALSE}
860 Bool_t deadSPDLay2PbPb2011[40][4]={
861 {kTRUE,kTRUE,kTRUE,kTRUE},
862 {kTRUE,kTRUE,kTRUE,kTRUE},
863 {kTRUE,kTRUE,kTRUE,kTRUE},
864 {kTRUE,kTRUE,kTRUE,kTRUE},
865 {kTRUE,kTRUE,kTRUE,kTRUE},
866 {kTRUE,kTRUE,kTRUE,kTRUE},
867 {kTRUE,kTRUE,kTRUE,kTRUE},
868 {kTRUE,kTRUE,kTRUE,kTRUE},
869 {kTRUE,kTRUE,kTRUE,kTRUE},
870 {kTRUE,kTRUE,kTRUE,kTRUE},
871 {kTRUE,kTRUE,kTRUE,kTRUE},
872 {kTRUE,kTRUE,kTRUE,kTRUE},
873 {kFALSE,kFALSE,kFALSE,kFALSE},
874 {kFALSE,kFALSE,kTRUE,kTRUE},
875 {kTRUE,kTRUE,kTRUE,kTRUE},
876 {kTRUE,kTRUE,kTRUE,kTRUE},
877 {kTRUE,kTRUE,kFALSE,kFALSE},
878 {kTRUE,kTRUE,kTRUE,kTRUE},
879 {kTRUE,kTRUE,kTRUE,kTRUE},
880 {kTRUE,kTRUE,kTRUE,kTRUE},
881 {kFALSE,kFALSE,kFALSE,kFALSE},
882 {kFALSE,kFALSE,kFALSE,kFALSE},
883 {kTRUE,kTRUE,kTRUE,kTRUE},
884 {kTRUE,kTRUE,kTRUE,kTRUE},
885 {kFALSE,kFALSE,kFALSE,kFALSE},
886 {kFALSE,kFALSE,kFALSE,kFALSE},
887 {kTRUE,kTRUE,kTRUE,kTRUE},
888 {kTRUE,kTRUE,kTRUE,kTRUE},
889 {kFALSE,kFALSE,kFALSE,kFALSE},
890 {kFALSE,kFALSE,kFALSE,kFALSE},
891 {kFALSE,kFALSE,kFALSE,kFALSE},
892 {kFALSE,kFALSE,kFALSE,kFALSE},
893 {kTRUE,kTRUE,kTRUE,kTRUE},
894 {kTRUE,kTRUE,kTRUE,kTRUE},
895 {kTRUE,kTRUE,kFALSE,kFALSE},
896 {kTRUE,kTRUE,kTRUE,kTRUE},
897 {kFALSE,kFALSE,kFALSE,kFALSE},
898 {kFALSE,kFALSE,kFALSE,kFALSE},
899 {kFALSE,kFALSE,kFALSE,kFALSE},
900 {kFALSE,kFALSE,kFALSE,kFALSE}
903 esdTrack.GetXYZAt(3.9,0.,xyz1);
904 esdTrack.GetXYZAt(7.6,0.,xyz2);
905 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
906 if(phi1<0) phi1+=2*TMath::Pi();
907 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
908 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
909 if(phi2<0) phi2+=2*TMath::Pi();
910 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
914 if(mod1>=0 && mod1<4 && lad1<20){
915 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
918 if(mod2>=0 && mod2<4 && lad2<40){
919 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
921 if(!lay1ok && !lay2ok)
return kFALSE;
927 esdTrack.GetXYZAt(3.9,0.,xyz1);
928 esdTrack.GetXYZAt(7.6,0.,xyz2);
929 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
930 if(phi1<0) phi1+=2*TMath::Pi();
931 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
932 if(phi2<0) phi2+=2*TMath::Pi();
934 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
936 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
937 if(!lay1ok || !lay2ok)
return kFALSE;
949 printf(
"Changing the pt bins\n");
953 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
975 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
981 for(
Int_t iv=0; iv<nVars; iv++) {
999 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1019 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1031 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1032 AliFatal(
"exiting");
1035 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1036 AliFatal(
"exiting");
1048 cout<<
"Overflow, exit..."<<endl;
1064 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1065 AliFatal(
"exiting");
1070 fCutsRD[iGl] = cutsRDGlob[iGl];
1087 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1088 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1089 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1108 cout<<
"Array of variables"<<endl;
1115 cout<<
"Array of optimization"<<endl;
1122 cout<<
"Array of upper/lower cut"<<endl;
1129 cout<<
"Array of ptbin limits"<<endl;
1136 cout<<
"Matrix of cuts"<<endl;
1155 cout<<
" Trigger selection pattern: ";
1157 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1160 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1161 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1162 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1163 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1164 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1165 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1166 cout << endl<< endl;
1183 for(iv=0; iv<
fnVars; iv++) {
1190 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1201 return iPtBin*
fnVars+iVar;
1236 cout<<
"Cuts not iniziaisez yet"<<endl;
1247 AliMultSelection *multSelection = (AliMultSelection * ) aodEvent->FindListObject(
"MultSelection");
1249 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1253 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1254 Int_t qual = multSelection->GetEvSelCode();
1255 if(qual == 199 ) cent=-999;
1259 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1270 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1273 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1274 if(!header) AliFatal(
"Not a standard AOD");
1275 AliCentrality *
centrality=header->GetCentralityP();
1278 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1279 if(!centrality)
return cent;
1282 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1284 Int_t quality = centrality->GetQuality();
1286 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1288 Int_t runnum=aodEvent->GetRunNumber();
1289 for(
Int_t ir=0;ir<5;ir++){
1290 if(runnum==selRun[ir]){
1295 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1302 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1303 v0+=aodV0->GetMTotV0A();
1304 v0+=aodV0->GetMTotV0C();
1305 if(cent==0&&v0<19500)
return -1;
1306 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1307 Float_t val= 1.30552 + 0.147931 * v0;
1308 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};
1309 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1314 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1316 Int_t quality = centrality->GetQuality();
1318 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1320 Int_t runnum=aodEvent->GetRunNumber();
1321 for(
Int_t ir=0;ir<5;ir++){
1322 if(runnum==selRun[ir]){
1327 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1333 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1335 Int_t quality = centrality->GetQuality();
1337 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1339 Int_t runnum=aodEvent->GetRunNumber();
1340 for(
Int_t ir=0;ir<5;ir++){
1341 if(runnum==selRun[ir]){
1346 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1352 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1354 Int_t quality = centrality->GetQuality();
1356 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1358 Int_t runnum=aodEvent->GetRunNumber();
1359 for(
Int_t ir=0;ir<5;ir++){
1360 if(runnum==selRun[ir]){
1365 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1371 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1373 Int_t quality = centrality->GetQuality();
1375 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1377 Int_t runnum=aodEvent->GetRunNumber();
1378 for(
Int_t ir=0;ir<5;ir++){
1379 if(runnum==selRun[ir]){
1384 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1390 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1392 Int_t quality = centrality->GetQuality();
1394 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1396 Int_t runnum=aodEvent->GetRunNumber();
1397 for(
Int_t ir=0;ir<5;ir++){
1398 if(runnum==selRun[ir]){
1403 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1409 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1411 Int_t quality = centrality->GetQuality();
1413 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1415 Int_t runnum=aodEvent->GetRunNumber();
1416 for(
Int_t ir=0;ir<5;ir++){
1417 if(runnum==selRun[ir]){
1422 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1427 AliWarning(
"Centrality estimator not valid");
1461 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1463 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1465 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;}
1487 TString ptString =
"pT range";
1489 TString firstLine(Form(
"* %-15s",ptString.Data()));
1492 if (ivar == fnVars){
1496 Printf(
"%s",firstLine.Data());
1500 if (ipt==fnPtBins-1){
1509 Printf(
"%s",line.Data());
1526 AliError(
"Can not remove daughters from vertex without AOD event");
1532 AliDebug(2,
"Removal of daughter tracks failed");
1551 AliError(
"Can not get MC vertex without AOD event");
1556 AliAODMCHeader *mcHeader =
1557 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1559 AliError(
"Can not get MC vertex without AODMCHeader event");
1563 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1564 mcHeader->GetVertex(pos);
1565 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1568 AliDebug(2,
"Removal of daughter tracks failed");
1584 AliAODVertex *origownvtx)
const
1594 delete origownvtx; origownvtx=NULL;
1599 delete origownvtx; origownvtx=NULL;
1611 if(!aod)
return kFALSE;
1614 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1616 if(!mcArray)
return kFALSE;
1619 Int_t label = d->MatchToMC(pdg,mcArray);
1634 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1635 vertexer->SetITSMode();
1636 vertexer->SetMinClusters(3);
1638 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1639 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1641 event->GetDiamondCovXY(diamondcovxy);
1642 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1643 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1644 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1645 vertexer->SetVtxStart(diamond);
1646 delete diamond; diamond=NULL;
1649 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1650 if(!vertexESD)
return kFALSE;
1651 if(vertexESD->GetNContributors()<=0) {
1653 delete vertexESD; vertexESD=NULL;
1656 delete vertexer; vertexer=NULL;
1660 vertexESD->GetXYZ(pos);
1661 vertexESD->GetCovMatrix(cov);
1662 chi2perNDF = vertexESD->GetChi2toNDF();
1663 delete vertexESD; vertexESD=NULL;
1665 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1666 pvtx->SetChi2perNDF(chi2perNDF);
1667 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
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)
static Bool_t CheckMatchingAODdeltaAODevents()
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