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),
97 fMultSelectionObjectName(
"MultSelection"),
103 fMaxRapidityCand(-999.),
104 fKeepSignalMC(kFALSE),
105 fIsCandTrackSPDFirst(kFALSE),
106 fMaxPtCandTrackSPDFirst(0.),
107 fApplySPDDeadPbPb2011(kFALSE),
108 fApplySPDMisalignedPP2012(kFALSE),
109 fMaxDiffTRKV0Centr(-1.),
110 fRemoveTrackletOutliers(kFALSE),
113 fUseTrackSelectionWithFilterBits(kTRUE),
114 fUseCentrFlatteningInMC(kFALSE),
115 fHistCentrDistr(0x0),
116 fCutRatioClsOverCrossRowsTPC(0),
117 fCutRatioSignalNOverCrossRowsTPC(0),
118 fCutMinCrossedRowsTPCPtDep(
""),
119 f1CutMinNCrossedRowsTPCPtDep(0x0),
120 fUseCutGeoNcrNcl(kFALSE),
122 fCutGeoNcrNclLength(130.),
123 fCutGeoNcrNclGeom1Pt(1.5),
124 fCutGeoNcrNclFractionNcr(0.85),
125 fCutGeoNcrNclFractionNcl(0.7)
134 AliAnalysisCuts(source),
135 fMinVtxType(source.fMinVtxType),
136 fMinVtxContr(source.fMinVtxContr),
137 fMaxVtxRedChi2(source.fMaxVtxRedChi2),
138 fMaxVtxZ(source.fMaxVtxZ),
139 fMinSPDMultiplicity(source.fMinSPDMultiplicity),
140 fTriggerMask(source.fTriggerMask),
141 fUseOnlyOneTrigger(source.fUseOnlyOneTrigger),
144 fnPtBins(source.fnPtBins),
145 fnPtBinLimits(source.fnPtBinLimits),
147 fnVars(source.fnVars),
149 fnVarsForOpt(source.fnVarsForOpt),
151 fGlobalIndex(source.fGlobalIndex),
154 fUsePID(source.fUsePID),
155 fUseAOD049(source.fUseAOD049),
157 fWhyRejection(source.fWhyRejection),
158 fEvRejectionBits(source.fEvRejectionBits),
159 fRemoveDaughtersFromPrimary(source.fRemoveDaughtersFromPrimary),
160 fUseMCVertex(source.fUseMCVertex),
161 fUsePhysicsSelection(source.fUsePhysicsSelection),
162 fOptPileup(source.fOptPileup),
163 fMinContrPileup(source.fMinContrPileup),
164 fMinDzPileup(source.fMinDzPileup),
165 fUseCentrality(source.fUseCentrality),
166 fMinCentrality(source.fMinCentrality),
167 fMaxCentrality(source.fMaxCentrality),
168 fMultSelectionObjectName(source.fMultSelectionObjectName),
169 fFixRefs(source.fFixRefs),
170 fIsSelectedCuts(source.fIsSelectedCuts),
171 fIsSelectedPID(source.fIsSelectedPID),
172 fMinPtCand(source.fMinPtCand),
173 fMaxPtCand(source.fMaxPtCand),
174 fMaxRapidityCand(source.fMaxRapidityCand),
175 fKeepSignalMC(source.fKeepSignalMC),
176 fIsCandTrackSPDFirst(source.fIsCandTrackSPDFirst),
177 fMaxPtCandTrackSPDFirst(source.fMaxPtCandTrackSPDFirst),
178 fApplySPDDeadPbPb2011(source.fApplySPDDeadPbPb2011),
179 fApplySPDMisalignedPP2012(source.fApplySPDMisalignedPP2012),
180 fMaxDiffTRKV0Centr(source.fMaxDiffTRKV0Centr),
181 fRemoveTrackletOutliers(source.fRemoveTrackletOutliers),
182 fCutOnzVertexSPD(source.fCutOnzVertexSPD),
183 fKinkReject(source.fKinkReject),
184 fUseTrackSelectionWithFilterBits(source.fUseTrackSelectionWithFilterBits),
185 fUseCentrFlatteningInMC(source.fUseCentrFlatteningInMC),
186 fHistCentrDistr(0x0),
187 fCutRatioClsOverCrossRowsTPC(source.fCutRatioClsOverCrossRowsTPC),
188 fCutRatioSignalNOverCrossRowsTPC(source.fCutRatioSignalNOverCrossRowsTPC),
189 fCutMinCrossedRowsTPCPtDep(
""),
190 f1CutMinNCrossedRowsTPCPtDep(0x0),
191 fUseCutGeoNcrNcl(source.fUseCutGeoNcrNcl),
192 fDeadZoneWidth(source.fDeadZoneWidth),
193 fCutGeoNcrNclLength(source.fCutGeoNcrNclLength),
194 fCutGeoNcrNclGeom1Pt(source.fCutGeoNcrNclGeom1Pt),
195 fCutGeoNcrNclFractionNcr(source.fCutGeoNcrNclFractionNcr),
196 fCutGeoNcrNclFractionNcl(source.fCutGeoNcrNclFractionNcl)
201 cout<<
"Copy constructor"<<endl;
222 if(&source ==
this)
return *
this;
224 AliAnalysisCuts::operator=(source);
330 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
331 AliWarning(
"Centrality estimator not valid");
335 if (centvalue<-998.){
362 if(maxCentr<minCentr){
363 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
368 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
372 Double_t ref=0.,bincont=0.,binrefwidth=1.;
374 if(TMath::Abs(centrRef)<0.0001){
379 else if(centrRef>0.){
380 binref=h->FindBin(centrRef);
381 if(binref<1||binref>h->GetNbinsX()){
382 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
388 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
394 for(
Int_t j=1;j<=h->GetNbinsX();j++){
395 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
396 bincont=h->GetBinContent(j);
401 h->SetBinContent(j,1.1);
430 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
434 if(centDigits*100.<bincont)
return kTRUE;
446 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
447 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
454 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
458 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
461 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
466 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
469 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
494 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
503 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
514 for(
Int_t itr=0; itr<nTracks; itr++){
515 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
531 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
538 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
549 const AliVVertex *vertex =
event->GetPrimaryVertex();
568 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
576 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
577 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
587 if(TMath::Abs(vSPD->GetZ()-vertex->GetZ())>0.5) {
600 if(event->IsPileupFromSPD(cutc,cutz,3.,2.,10.)) {
607 AliAnalysisUtils utils;
608 Bool_t isPUMV = utils.IsPileUpMV(event);
620 if(rejection==0) okCent=kTRUE;
632 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
636 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
637 if(ntracklets<1000. && v0cent<cutval){
666 Int_t ndaughters = d->GetNDaughters();
670 vAOD->GetCovarianceMatrix(cov);
671 const AliESDVertex vESD(pos,cov,100.,100);
675 for(
Int_t idg=0; idg<ndaughters; idg++) {
676 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
677 if(!dgTrack) {retval = kFALSE;
continue;}
679 if(dgTrack->Charge()==0)
continue;
682 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
705 Bool_t okTProcessNames = kTRUE;
706 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
707 TTree *treeAOD = aodHandler->GetTree();
708 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
709 if(!treeDeltaAOD || !treeAOD)
return -1;
710 if(treeDeltaAOD && treeAOD){
711 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
712 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
715 TFile *mfile = treeAOD->GetCurrentFile();
716 TFile *dfile = treeDeltaAOD->GetCurrentFile();
717 TList* lm=mfile->GetListOfKeys();
718 TList* ld=dfile->GetListOfKeys();
719 Int_t nentm=lm->GetEntries();
720 Int_t nentd=ld->GetEntries();
721 for(
Int_t jm=0; jm<nentm; jm++){
722 TKey* o=(TKey*)lm->At(jm);
723 TString clnam=o->GetClassName();
724 if(clnam==
"TProcessID"){
727 if(pname.Contains(
"ProcessID")){
732 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
733 okTProcessNames = kFALSE;
741 if (okTProcessNames)
return 1;
751 if(!rows.Contains(
"pt")) {
752 if(print) AliError(
"string must contain \"pt\"");
776 tmp.ReplaceAll(
"pt",
"x");
786 if(!cuts)
return kTRUE;
788 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
792 AliESDtrack esdTrack(track);
794 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
795 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
796 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
798 esdTrack.RelateToVertex(primary,0.,3.);
801 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
805 AliAODVertex *maybeKink=track->GetProdVertex();
806 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
811 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
812 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
817 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
818 Float_t nClustersTPC = esdTrack.GetTPCNcls();
819 if(nCrossedRowsTPC!=0){
820 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
828 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
829 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
830 if(nCrossedRowsTPC!=0){
831 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
839 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
840 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
843 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
846 if(!isOK)
return kFALSE;
857 Bool_t deadSPDLay1PbPb2011[20][4]={
858 {kTRUE,kTRUE,kTRUE,kTRUE},
859 {kTRUE,kTRUE,kTRUE,kTRUE},
860 {kTRUE,kTRUE,kTRUE,kTRUE},
861 {kTRUE,kTRUE,kTRUE,kTRUE},
862 {kTRUE,kTRUE,kTRUE,kTRUE},
863 {kFALSE,kFALSE,kTRUE,kTRUE},
864 {kTRUE,kTRUE,kFALSE,kFALSE},
865 {kTRUE,kTRUE,kTRUE,kTRUE},
866 {kFALSE,kFALSE,kTRUE,kTRUE},
867 {kTRUE,kTRUE,kTRUE,kTRUE},
868 {kTRUE,kTRUE,kFALSE,kFALSE},
869 {kTRUE,kTRUE,kTRUE,kTRUE},
870 {kFALSE,kFALSE,kFALSE,kFALSE},
871 {kFALSE,kFALSE,kTRUE,kTRUE},
872 {kFALSE,kFALSE,kFALSE,kFALSE},
873 {kFALSE,kFALSE,kFALSE,kFALSE},
874 {kTRUE,kTRUE,kTRUE,kTRUE},
875 {kTRUE,kTRUE,kFALSE,kFALSE},
876 {kFALSE,kFALSE,kFALSE,kFALSE},
877 {kFALSE,kFALSE,kFALSE,kFALSE}
879 Bool_t deadSPDLay2PbPb2011[40][4]={
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 {kTRUE,kTRUE,kTRUE,kTRUE},
887 {kTRUE,kTRUE,kTRUE,kTRUE},
888 {kTRUE,kTRUE,kTRUE,kTRUE},
889 {kTRUE,kTRUE,kTRUE,kTRUE},
890 {kTRUE,kTRUE,kTRUE,kTRUE},
891 {kTRUE,kTRUE,kTRUE,kTRUE},
892 {kFALSE,kFALSE,kFALSE,kFALSE},
893 {kFALSE,kFALSE,kTRUE,kTRUE},
894 {kTRUE,kTRUE,kTRUE,kTRUE},
895 {kTRUE,kTRUE,kTRUE,kTRUE},
896 {kTRUE,kTRUE,kFALSE,kFALSE},
897 {kTRUE,kTRUE,kTRUE,kTRUE},
898 {kTRUE,kTRUE,kTRUE,kTRUE},
899 {kTRUE,kTRUE,kTRUE,kTRUE},
900 {kFALSE,kFALSE,kFALSE,kFALSE},
901 {kFALSE,kFALSE,kFALSE,kFALSE},
902 {kTRUE,kTRUE,kTRUE,kTRUE},
903 {kTRUE,kTRUE,kTRUE,kTRUE},
904 {kFALSE,kFALSE,kFALSE,kFALSE},
905 {kFALSE,kFALSE,kFALSE,kFALSE},
906 {kTRUE,kTRUE,kTRUE,kTRUE},
907 {kTRUE,kTRUE,kTRUE,kTRUE},
908 {kFALSE,kFALSE,kFALSE,kFALSE},
909 {kFALSE,kFALSE,kFALSE,kFALSE},
910 {kFALSE,kFALSE,kFALSE,kFALSE},
911 {kFALSE,kFALSE,kFALSE,kFALSE},
912 {kTRUE,kTRUE,kTRUE,kTRUE},
913 {kTRUE,kTRUE,kTRUE,kTRUE},
914 {kTRUE,kTRUE,kFALSE,kFALSE},
915 {kTRUE,kTRUE,kTRUE,kTRUE},
916 {kFALSE,kFALSE,kFALSE,kFALSE},
917 {kFALSE,kFALSE,kFALSE,kFALSE},
918 {kFALSE,kFALSE,kFALSE,kFALSE},
919 {kFALSE,kFALSE,kFALSE,kFALSE}
922 esdTrack.GetXYZAt(3.9,0.,xyz1);
923 esdTrack.GetXYZAt(7.6,0.,xyz2);
924 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
925 if(phi1<0) phi1+=2*TMath::Pi();
926 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
927 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
928 if(phi2<0) phi2+=2*TMath::Pi();
929 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
933 if(mod1>=0 && mod1<4 && lad1<20){
934 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
937 if(mod2>=0 && mod2<4 && lad2<40){
938 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
940 if(!lay1ok && !lay2ok)
return 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 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
951 if(phi2<0) phi2+=2*TMath::Pi();
953 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
955 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
956 if(!lay1ok || !lay2ok)
return kFALSE;
968 printf(
"Changing the pt bins\n");
972 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
994 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1000 for(
Int_t iv=0; iv<nVars; iv++) {
1018 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1038 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1050 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1051 AliFatal(
"exiting");
1054 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1055 AliFatal(
"exiting");
1067 cout<<
"Overflow, exit..."<<endl;
1083 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1084 AliFatal(
"exiting");
1089 fCutsRD[iGl] = cutsRDGlob[iGl];
1106 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1107 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1108 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1127 cout<<
"Array of variables"<<endl;
1134 cout<<
"Array of optimization"<<endl;
1141 cout<<
"Array of upper/lower cut"<<endl;
1148 cout<<
"Array of ptbin limits"<<endl;
1155 cout<<
"Matrix of cuts"<<endl;
1174 cout<<
" Trigger selection pattern: ";
1176 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1179 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1180 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1181 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1182 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1183 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1184 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1185 cout << endl<< endl;
1202 for(iv=0; iv<
fnVars; iv++) {
1209 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1220 return iPtBin*
fnVars+iVar;
1255 cout<<
"Cuts not iniziaisez yet"<<endl;
1269 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1275 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1276 if(!defaultmultSelection){
1277 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1280 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1281 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1287 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1288 Int_t qual = multSelection->GetEvSelCode();
1289 if(qual == 199 ) cent=-999;
1293 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATEOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1304 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1307 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1308 if(!header) AliFatal(
"Not a standard AOD");
1309 AliCentrality *
centrality=header->GetCentralityP();
1312 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1313 if(!centrality)
return cent;
1316 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1318 Int_t quality = centrality->GetQuality();
1320 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1322 Int_t runnum=aodEvent->GetRunNumber();
1323 for(
Int_t ir=0;ir<5;ir++){
1324 if(runnum==selRun[ir]){
1329 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1336 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1337 v0+=aodV0->GetMTotV0A();
1338 v0+=aodV0->GetMTotV0C();
1339 if(cent==0&&v0<19500)
return -1;
1340 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1341 Float_t val= 1.30552 + 0.147931 * v0;
1342 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};
1343 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1348 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1350 Int_t quality = centrality->GetQuality();
1352 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1354 Int_t runnum=aodEvent->GetRunNumber();
1355 for(
Int_t ir=0;ir<5;ir++){
1356 if(runnum==selRun[ir]){
1361 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1367 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1369 Int_t quality = centrality->GetQuality();
1371 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1373 Int_t runnum=aodEvent->GetRunNumber();
1374 for(
Int_t ir=0;ir<5;ir++){
1375 if(runnum==selRun[ir]){
1380 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1386 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1388 Int_t quality = centrality->GetQuality();
1390 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1392 Int_t runnum=aodEvent->GetRunNumber();
1393 for(
Int_t ir=0;ir<5;ir++){
1394 if(runnum==selRun[ir]){
1399 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1405 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1407 Int_t quality = centrality->GetQuality();
1409 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1411 Int_t runnum=aodEvent->GetRunNumber();
1412 for(
Int_t ir=0;ir<5;ir++){
1413 if(runnum==selRun[ir]){
1418 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1424 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1426 Int_t quality = centrality->GetQuality();
1428 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1430 Int_t runnum=aodEvent->GetRunNumber();
1431 for(
Int_t ir=0;ir<5;ir++){
1432 if(runnum==selRun[ir]){
1437 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1443 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1445 Int_t quality = centrality->GetQuality();
1447 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1449 Int_t runnum=aodEvent->GetRunNumber();
1450 for(
Int_t ir=0;ir<5;ir++){
1451 if(runnum==selRun[ir]){
1456 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1461 AliWarning(
"Centrality estimator not valid");
1495 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1497 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1499 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;}
1521 TString ptString =
"pT range";
1523 TString firstLine(Form(
"* %-15s",ptString.Data()));
1526 if (ivar == fnVars){
1530 Printf(
"%s",firstLine.Data());
1534 if (ipt==fnPtBins-1){
1543 Printf(
"%s",line.Data());
1560 AliError(
"Can not remove daughters from vertex without AOD event");
1566 AliDebug(2,
"Removal of daughter tracks failed");
1585 AliError(
"Can not get MC vertex without AOD event");
1590 AliAODMCHeader *mcHeader =
1591 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1593 AliError(
"Can not get MC vertex without AODMCHeader event");
1597 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1598 mcHeader->GetVertex(pos);
1599 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1602 AliDebug(2,
"Removal of daughter tracks failed");
1618 AliAODVertex *origownvtx)
const
1628 delete origownvtx; origownvtx=NULL;
1633 delete origownvtx; origownvtx=NULL;
1645 if(!aod)
return kFALSE;
1648 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1650 if(!mcArray)
return kFALSE;
1653 Int_t label = d->MatchToMC(pdg,mcArray);
1668 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1669 vertexer->SetITSMode();
1670 vertexer->SetMinClusters(3);
1672 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1673 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1675 event->GetDiamondCovXY(diamondcovxy);
1676 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1677 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1678 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1679 vertexer->SetVtxStart(diamond);
1680 delete diamond; diamond=NULL;
1683 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1684 if(!vertexESD)
return kFALSE;
1685 if(vertexESD->GetNContributors()<=0) {
1687 delete vertexESD; vertexESD=NULL;
1690 delete vertexer; vertexer=NULL;
1694 vertexESD->GetXYZ(pos);
1695 vertexESD->GetCovMatrix(cov);
1696 chi2perNDF = vertexESD->GetChi2toNDF();
1697 delete vertexESD; vertexESD=NULL;
1699 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1700 pvtx->SetChi2perNDF(chi2perNDF);
1701 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
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