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 fMaxVtxChi2PileupMV(5.),
73 fRejectPlpFromDiffBCMV(kFALSE),
74 fTriggerMask(AliVEvent::kAnyINT),
75 fUseOnlyOneTrigger(kFALSE),
92 fRemoveDaughtersFromPrimary(kFALSE),
94 fUsePhysicsSelection(kTRUE),
98 fUseMultDepPileupCut(kFALSE),
101 fMaxCentrality(100.),
102 fMultSelectionObjectName(
"MultSelection"),
108 fMaxRapidityCand(-999.),
109 fKeepSignalMC(kFALSE),
110 fIsCandTrackSPDFirst(kFALSE),
111 fMaxPtCandTrackSPDFirst(0.),
112 fApplySPDDeadPbPb2011(kFALSE),
113 fApplySPDMisalignedPP2012(kFALSE),
114 fMaxDiffTRKV0Centr(-1.),
115 fRemoveTrackletOutliers(kFALSE),
118 fUseTrackSelectionWithFilterBits(kTRUE),
119 fUseCentrFlatteningInMC(kFALSE),
120 fHistCentrDistr(0x0),
121 fCutRatioClsOverCrossRowsTPC(0),
122 fCutRatioSignalNOverCrossRowsTPC(0),
123 fCutMinCrossedRowsTPCPtDep(
""),
124 f1CutMinNCrossedRowsTPCPtDep(0x0),
125 fUseCutGeoNcrNcl(kFALSE),
127 fCutGeoNcrNclLength(130.),
128 fCutGeoNcrNclGeom1Pt(1.5),
129 fCutGeoNcrNclFractionNcr(0.85),
130 fCutGeoNcrNclFractionNcl(0.7),
131 fUseV0ANDSelectionOffline(kFALSE),
132 fUseTPCtrackCutsOnThisDaughter(kTRUE),
133 fApplyZcutOnSPDvtx(kFALSE)
142 AliAnalysisCuts(source),
216 cout<<
"Copy constructor"<<endl;
237 if(&source ==
this)
return *
this;
239 AliAnalysisCuts::operator=(source);
351 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
352 AliWarning(
"Centrality estimator not valid");
356 if (centvalue<-998.){
383 if(maxCentr<minCentr){
384 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
389 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
393 Double_t ref=0.,bincont=0.,binrefwidth=1.;
395 if(TMath::Abs(centrRef)<0.0001){
400 else if(centrRef>0.){
401 binref=h->FindBin(centrRef);
402 if(binref<1||binref>h->GetNbinsX()){
403 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
409 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
415 for(
Int_t j=1;j<=h->GetNbinsX();j++){
416 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
417 bincont=h->GetBinContent(j);
422 h->SetBinContent(j,1.1);
451 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
455 if(centDigits*100.<bincont)
return kTRUE;
467 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
468 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
475 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
479 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
482 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
487 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
490 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
515 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
524 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
535 for(
Int_t itr=0; itr<nTracks; itr++){
536 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
552 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
559 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
566 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
567 Int_t tv0a=v0data->GetV0ADecision();
568 Int_t tv0c=v0data->GetV0CDecision();
569 if(!(tv0a==1 && tv0c==1)){
582 if(rejection==0) okCent=kTRUE;
594 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
598 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
599 if(ntracklets<1000. && v0cent<cutval){
618 const AliVVertex *vertex =
event->GetPrimaryVertex();
639 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
641 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
652 Double_t dz = vSPD->GetZ()-vertex->GetZ();
654 if(TMath::Abs(dz)>0.5) {
661 double covTrc[6],covSPD[6];
662 vertex->GetCovarianceMatrix(covTrc);
663 vSPD->GetCovarianceMatrix(covSPD);
664 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
665 double errTrc = TMath::Sqrt(covTrc[5]);
666 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
667 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20){
681 if(!vSPD || (vSPD && vSPD->GetNContributors()<1)){
685 else zvert = vSPD->GetZ();
698 isPileup=
event->IsPileupFromSPDInMultBins();
702 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
711 AliAnalysisUtils utils;
716 Bool_t isPUMV = utils.IsPileUpMV(event);
737 Int_t ndaughters = d->GetNDaughters();
741 vAOD->GetCovarianceMatrix(cov);
742 const AliESDVertex vESD(pos,cov,100.,100);
746 for(
Int_t idg=0; idg<ndaughters; idg++) {
747 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
748 if(!dgTrack) {retval = kFALSE;
continue;}
750 if(dgTrack->Charge()==0)
continue;
753 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
776 Bool_t okTProcessNames = kTRUE;
777 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
778 TTree *treeAOD = aodHandler->GetTree();
779 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
780 if(!treeDeltaAOD || !treeAOD)
return -1;
781 if(treeDeltaAOD && treeAOD){
782 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
783 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
786 TFile *mfile = treeAOD->GetCurrentFile();
787 TFile *dfile = treeDeltaAOD->GetCurrentFile();
788 TList* lm=mfile->GetListOfKeys();
789 TList* ld=dfile->GetListOfKeys();
790 Int_t nentm=lm->GetEntries();
791 for(
Int_t jm=0; jm<nentm; jm++){
792 TKey* o=(TKey*)lm->At(jm);
793 TString clnam=o->GetClassName();
794 if(clnam==
"TProcessID"){
797 if(pname.Contains(
"ProcessID")){
802 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
803 okTProcessNames = kFALSE;
811 if (okTProcessNames)
return 1;
821 if(!rows.Contains(
"pt")) {
822 if(print) AliError(
"string must contain \"pt\"");
846 tmp.ReplaceAll(
"pt",
"x");
856 if(!cuts)
return kTRUE;
858 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
862 AliESDtrack esdTrack(track);
864 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
865 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
866 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
868 esdTrack.RelateToVertex(primary,0.,3.);
871 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
875 AliAODVertex *maybeKink=track->GetProdVertex();
876 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
881 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
882 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
887 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
888 Float_t nClustersTPC = esdTrack.GetTPCNcls();
889 if(nCrossedRowsTPC!=0){
890 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
898 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
899 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
900 if(nCrossedRowsTPC!=0){
901 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
909 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
910 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
913 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
916 if(!isOK)
return kFALSE;
927 Bool_t deadSPDLay1PbPb2011[20][4]={
928 {kTRUE,kTRUE,kTRUE,kTRUE},
929 {kTRUE,kTRUE,kTRUE,kTRUE},
930 {kTRUE,kTRUE,kTRUE,kTRUE},
931 {kTRUE,kTRUE,kTRUE,kTRUE},
932 {kTRUE,kTRUE,kTRUE,kTRUE},
933 {kFALSE,kFALSE,kTRUE,kTRUE},
934 {kTRUE,kTRUE,kFALSE,kFALSE},
935 {kTRUE,kTRUE,kTRUE,kTRUE},
936 {kFALSE,kFALSE,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,kTRUE,kTRUE},
942 {kFALSE,kFALSE,kFALSE,kFALSE},
943 {kFALSE,kFALSE,kFALSE,kFALSE},
944 {kTRUE,kTRUE,kTRUE,kTRUE},
945 {kTRUE,kTRUE,kFALSE,kFALSE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kFALSE,kFALSE,kFALSE,kFALSE}
949 Bool_t deadSPDLay2PbPb2011[40][4]={
950 {kTRUE,kTRUE,kTRUE,kTRUE},
951 {kTRUE,kTRUE,kTRUE,kTRUE},
952 {kTRUE,kTRUE,kTRUE,kTRUE},
953 {kTRUE,kTRUE,kTRUE,kTRUE},
954 {kTRUE,kTRUE,kTRUE,kTRUE},
955 {kTRUE,kTRUE,kTRUE,kTRUE},
956 {kTRUE,kTRUE,kTRUE,kTRUE},
957 {kTRUE,kTRUE,kTRUE,kTRUE},
958 {kTRUE,kTRUE,kTRUE,kTRUE},
959 {kTRUE,kTRUE,kTRUE,kTRUE},
960 {kTRUE,kTRUE,kTRUE,kTRUE},
961 {kTRUE,kTRUE,kTRUE,kTRUE},
962 {kFALSE,kFALSE,kFALSE,kFALSE},
963 {kFALSE,kFALSE,kTRUE,kTRUE},
964 {kTRUE,kTRUE,kTRUE,kTRUE},
965 {kTRUE,kTRUE,kTRUE,kTRUE},
966 {kTRUE,kTRUE,kFALSE,kFALSE},
967 {kTRUE,kTRUE,kTRUE,kTRUE},
968 {kTRUE,kTRUE,kTRUE,kTRUE},
969 {kTRUE,kTRUE,kTRUE,kTRUE},
970 {kFALSE,kFALSE,kFALSE,kFALSE},
971 {kFALSE,kFALSE,kFALSE,kFALSE},
972 {kTRUE,kTRUE,kTRUE,kTRUE},
973 {kTRUE,kTRUE,kTRUE,kTRUE},
974 {kFALSE,kFALSE,kFALSE,kFALSE},
975 {kFALSE,kFALSE,kFALSE,kFALSE},
976 {kTRUE,kTRUE,kTRUE,kTRUE},
977 {kTRUE,kTRUE,kTRUE,kTRUE},
978 {kFALSE,kFALSE,kFALSE,kFALSE},
979 {kFALSE,kFALSE,kFALSE,kFALSE},
980 {kFALSE,kFALSE,kFALSE,kFALSE},
981 {kFALSE,kFALSE,kFALSE,kFALSE},
982 {kTRUE,kTRUE,kTRUE,kTRUE},
983 {kTRUE,kTRUE,kTRUE,kTRUE},
984 {kTRUE,kTRUE,kFALSE,kFALSE},
985 {kTRUE,kTRUE,kTRUE,kTRUE},
986 {kFALSE,kFALSE,kFALSE,kFALSE},
987 {kFALSE,kFALSE,kFALSE,kFALSE},
988 {kFALSE,kFALSE,kFALSE,kFALSE},
989 {kFALSE,kFALSE,kFALSE,kFALSE}
992 esdTrack.GetXYZAt(3.9,0.,xyz1);
993 esdTrack.GetXYZAt(7.6,0.,xyz2);
994 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
995 if(phi1<0) phi1+=2*TMath::Pi();
996 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
997 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
998 if(phi2<0) phi2+=2*TMath::Pi();
999 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
1003 if(mod1>=0 && mod1<4 && lad1<20){
1004 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
1007 if(mod2>=0 && mod2<4 && lad2<40){
1008 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
1010 if(!lay1ok && !lay2ok)
return kFALSE;
1016 esdTrack.GetXYZAt(3.9,0.,xyz1);
1017 esdTrack.GetXYZAt(7.6,0.,xyz2);
1018 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
1019 if(phi1<0) phi1+=2*TMath::Pi();
1020 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
1021 if(phi2<0) phi2+=2*TMath::Pi();
1023 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
1025 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
1026 if(!lay1ok || !lay2ok)
return kFALSE;
1038 printf(
"Changing the pt bins\n");
1042 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1064 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1070 for(
Int_t iv=0; iv<nVars; iv++) {
1088 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1108 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1120 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1121 AliFatal(
"exiting");
1124 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1125 AliFatal(
"exiting");
1137 cout<<
"Overflow, exit..."<<endl;
1153 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1154 AliFatal(
"exiting");
1159 fCutsRD[iGl] = cutsRDGlob[iGl];
1176 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1177 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1178 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1198 cout<<
"Array of variables"<<endl;
1205 cout<<
"Array of optimization"<<endl;
1212 cout<<
"Array of upper/lower cut"<<endl;
1219 cout<<
"Array of ptbin limits"<<endl;
1226 cout<<
"Matrix of cuts"<<endl;
1245 cout<<
" Trigger selection pattern: ";
1247 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1250 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1251 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1252 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1253 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1254 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1255 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1256 cout << endl<< endl;
1273 for(iv=0; iv<
fnVars; iv++) {
1280 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1291 return iPtBin*
fnVars+iVar;
1326 cout<<
"Cuts not iniziaisez yet"<<endl;
1338 if(estimator==
kCentOff)
return -999;
1342 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1348 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1349 if(!defaultmultSelection){
1350 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1353 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1354 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1360 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1362 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1364 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1366 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1368 cent=multSelection->GetMultiplicityPercentile(
"CL0");
1370 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1373 Int_t qual = multSelection->GetEvSelCode();
1374 if(qual == 199 ) cent=-999;
1383 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1386 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1387 if(!header) AliFatal(
"Not a standard AOD");
1388 AliCentrality *
centrality=header->GetCentralityP();
1391 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1392 if(!centrality)
return cent;
1395 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1397 Int_t quality = centrality->GetQuality();
1399 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
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(
"V0M");
1415 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1416 v0+=aodV0->GetMTotV0A();
1417 v0+=aodV0->GetMTotV0C();
1418 if(cent==0&&v0<19500)
return -1;
1419 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1420 Float_t val= 1.30552 + 0.147931 * v0;
1421 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};
1422 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1427 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1429 Int_t quality = centrality->GetQuality();
1431 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1433 Int_t runnum=aodEvent->GetRunNumber();
1434 for(
Int_t ir=0;ir<5;ir++){
1435 if(runnum==selRun[ir]){
1440 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1446 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1448 Int_t quality = centrality->GetQuality();
1450 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1452 Int_t runnum=aodEvent->GetRunNumber();
1453 for(
Int_t ir=0;ir<5;ir++){
1454 if(runnum==selRun[ir]){
1459 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1465 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1467 Int_t quality = centrality->GetQuality();
1469 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1471 Int_t runnum=aodEvent->GetRunNumber();
1472 for(
Int_t ir=0;ir<5;ir++){
1473 if(runnum==selRun[ir]){
1478 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1484 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1486 Int_t quality = centrality->GetQuality();
1488 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1490 Int_t runnum=aodEvent->GetRunNumber();
1491 for(
Int_t ir=0;ir<5;ir++){
1492 if(runnum==selRun[ir]){
1497 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1503 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1505 Int_t quality = centrality->GetQuality();
1507 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1509 Int_t runnum=aodEvent->GetRunNumber();
1510 for(
Int_t ir=0;ir<5;ir++){
1511 if(runnum==selRun[ir]){
1516 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1522 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1524 Int_t quality = centrality->GetQuality();
1526 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1528 Int_t runnum=aodEvent->GetRunNumber();
1529 for(
Int_t ir=0;ir<5;ir++){
1530 if(runnum==selRun[ir]){
1535 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1540 AliWarning(
"Centrality estimator not valid");
1574 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1576 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1578 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;}
1600 TString ptString =
"pT range";
1602 TString firstLine(Form(
"* %-15s",ptString.Data()));
1605 if (ivar == fnVars){
1609 Printf(
"%s",firstLine.Data());
1613 if (ipt==fnPtBins-1){
1622 Printf(
"%s",line.Data());
1639 AliError(
"Can not remove daughters from vertex without AOD event");
1645 AliDebug(2,
"Removal of daughter tracks failed");
1664 AliError(
"Can not get MC vertex without AOD event");
1669 AliAODMCHeader *mcHeader =
1670 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1672 AliError(
"Can not get MC vertex without AODMCHeader event");
1676 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1677 mcHeader->GetVertex(pos);
1678 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1681 AliDebug(2,
"Removal of daughter tracks failed");
1697 AliAODVertex *origownvtx)
const 1707 delete origownvtx; origownvtx=NULL;
1712 delete origownvtx; origownvtx=NULL;
1724 if(!aod)
return kFALSE;
1727 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1729 if(!mcArray)
return kFALSE;
1732 Int_t label = d->MatchToMC(pdg,mcArray);
1747 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1748 vertexer->SetITSMode();
1749 vertexer->SetMinClusters(3);
1751 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1752 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1754 event->GetDiamondCovXY(diamondcovxy);
1755 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1756 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1757 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1758 vertexer->SetVtxStart(diamond);
1759 delete diamond; diamond=NULL;
1762 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1763 if(!vertexESD)
return kFALSE;
1764 if(vertexESD->GetNContributors()<=0) {
1766 delete vertexESD; vertexESD=NULL;
1769 delete vertexer; vertexer=NULL;
1773 vertexESD->GetXYZ(pos);
1774 vertexESD->GetCovMatrix(cov);
1775 chi2perNDF = vertexESD->GetChi2toNDF();
1776 delete vertexESD; vertexESD=NULL;
1778 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1779 pvtx->SetChi2perNDF(chi2perNDF);
1780 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
Bool_t fRejectPlpFromDiffBCMV
minimum weighted distance in Z between 2 vertices (multi-vertexer)
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
flag to reject pileup from different BC (multi-vertexer)
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)
Float_t fMinWDzPileupMV
max chi2 per contributor of the pile-up vertex to consider (multi-vertexer).
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)
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
Float_t fMaxVtxChi2PileupMV
SPD multiplicity.
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 fUseTPCtrackCutsOnThisDaughter
flag to apply V0AND selection offline
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
Bool_t fApplyZcutOnSPDvtx
flag to apply TPC track quality cuts on specific D-meson daughter (used for different strategies for ...
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