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),
143 AliAnalysisCuts(source),
218 cout<<
"Copy constructor"<<endl;
239 if(&source ==
this)
return *
this;
241 AliAnalysisCuts::operator=(source);
354 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
355 AliWarning(
"Centrality estimator not valid");
359 if (centvalue<-998.){
386 if(maxCentr<minCentr){
387 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
392 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
396 Double_t ref=0.,bincont=0.,binrefwidth=1.;
398 if(TMath::Abs(centrRef)<0.0001){
403 else if(centrRef>0.){
404 binref=h->FindBin(centrRef);
405 if(binref<1||binref>h->GetNbinsX()){
406 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
412 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
418 for(
Int_t j=1;j<=h->GetNbinsX();j++){
419 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
420 bincont=h->GetBinContent(j);
425 h->SetBinContent(j,1.1);
454 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
458 if(centDigits*100.<bincont)
return kTRUE;
470 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
471 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
478 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
482 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
485 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
490 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
493 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
518 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
527 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
538 for(
Int_t itr=0; itr<nTracks; itr++){
539 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
555 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
562 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
569 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
570 Int_t tv0a=v0data->GetV0ADecision();
571 Int_t tv0c=v0data->GetV0CDecision();
572 if(!(tv0a==1 && tv0c==1)){
585 if(rejection==0) okCent=kTRUE;
597 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
601 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
602 if(ntracklets<1000. && v0cent<cutval){
621 const AliVVertex *vertex =
event->GetPrimaryVertex();
642 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
644 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
655 Double_t dz = vSPD->GetZ()-vertex->GetZ();
657 if(TMath::Abs(dz)>0.5) {
664 double covTrc[6],covSPD[6];
665 vertex->GetCovarianceMatrix(covTrc);
666 vSPD->GetCovarianceMatrix(covSPD);
667 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
668 double errTrc = TMath::Sqrt(covTrc[5]);
669 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
670 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20){
684 if(!vSPD || (vSPD && vSPD->GetNContributors()<1)){
688 else zvert = vSPD->GetZ();
701 isPileup=
event->IsPileupFromSPDInMultBins();
705 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
714 AliAnalysisUtils utils;
719 Bool_t isPUMV = utils.IsPileUpMV(event);
740 Int_t ndaughters = d->GetNDaughters();
744 vAOD->GetCovarianceMatrix(cov);
745 const AliESDVertex vESD(pos,cov,100.,100);
749 for(
Int_t idg=0; idg<ndaughters; idg++) {
750 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
751 if(!dgTrack) {retval = kFALSE;
continue;}
753 if(dgTrack->Charge()==0)
continue;
756 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
779 Bool_t okTProcessNames = kTRUE;
780 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
781 TTree *treeAOD = aodHandler->GetTree();
782 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
783 if(!treeDeltaAOD || !treeAOD)
return -1;
784 if(treeDeltaAOD && treeAOD){
785 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
786 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
789 TFile *mfile = treeAOD->GetCurrentFile();
790 TFile *dfile = treeDeltaAOD->GetCurrentFile();
791 TList* lm=mfile->GetListOfKeys();
792 TList* ld=dfile->GetListOfKeys();
793 Int_t nentm=lm->GetEntries();
794 for(
Int_t jm=0; jm<nentm; jm++){
795 TKey* o=(TKey*)lm->At(jm);
796 TString clnam=o->GetClassName();
797 if(clnam==
"TProcessID"){
800 if(pname.Contains(
"ProcessID")){
805 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
806 okTProcessNames = kFALSE;
814 if (okTProcessNames)
return 1;
824 if(!rows.Contains(
"pt")) {
825 if(print) AliError(
"string must contain \"pt\"");
849 tmp.ReplaceAll(
"pt",
"x");
859 if(!cuts)
return kTRUE;
861 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
865 AliESDtrack esdTrack(track);
867 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
868 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
869 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
871 esdTrack.RelateToVertex(primary,0.,3.);
874 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
878 AliAODVertex *maybeKink=track->GetProdVertex();
879 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
884 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
885 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
890 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
891 Float_t nClustersTPC = esdTrack.GetTPCNcls();
892 if(nCrossedRowsTPC!=0){
893 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
901 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
902 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
903 if(nCrossedRowsTPC!=0){
904 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
912 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
913 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
916 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
919 if(!isOK)
return kFALSE;
930 Bool_t deadSPDLay1PbPb2011[20][4]={
931 {kTRUE,kTRUE,kTRUE,kTRUE},
932 {kTRUE,kTRUE,kTRUE,kTRUE},
933 {kTRUE,kTRUE,kTRUE,kTRUE},
934 {kTRUE,kTRUE,kTRUE,kTRUE},
935 {kTRUE,kTRUE,kTRUE,kTRUE},
936 {kFALSE,kFALSE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kFALSE,kFALSE},
938 {kTRUE,kTRUE,kTRUE,kTRUE},
939 {kFALSE,kFALSE,kTRUE,kTRUE},
940 {kTRUE,kTRUE,kTRUE,kTRUE},
941 {kTRUE,kTRUE,kFALSE,kFALSE},
942 {kTRUE,kTRUE,kTRUE,kTRUE},
943 {kFALSE,kFALSE,kFALSE,kFALSE},
944 {kFALSE,kFALSE,kTRUE,kTRUE},
945 {kFALSE,kFALSE,kFALSE,kFALSE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kTRUE,kTRUE,kTRUE,kTRUE},
948 {kTRUE,kTRUE,kFALSE,kFALSE},
949 {kFALSE,kFALSE,kFALSE,kFALSE},
950 {kFALSE,kFALSE,kFALSE,kFALSE}
952 Bool_t deadSPDLay2PbPb2011[40][4]={
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 {kTRUE,kTRUE,kTRUE,kTRUE},
963 {kTRUE,kTRUE,kTRUE,kTRUE},
964 {kTRUE,kTRUE,kTRUE,kTRUE},
965 {kFALSE,kFALSE,kFALSE,kFALSE},
966 {kFALSE,kFALSE,kTRUE,kTRUE},
967 {kTRUE,kTRUE,kTRUE,kTRUE},
968 {kTRUE,kTRUE,kTRUE,kTRUE},
969 {kTRUE,kTRUE,kFALSE,kFALSE},
970 {kTRUE,kTRUE,kTRUE,kTRUE},
971 {kTRUE,kTRUE,kTRUE,kTRUE},
972 {kTRUE,kTRUE,kTRUE,kTRUE},
973 {kFALSE,kFALSE,kFALSE,kFALSE},
974 {kFALSE,kFALSE,kFALSE,kFALSE},
975 {kTRUE,kTRUE,kTRUE,kTRUE},
976 {kTRUE,kTRUE,kTRUE,kTRUE},
977 {kFALSE,kFALSE,kFALSE,kFALSE},
978 {kFALSE,kFALSE,kFALSE,kFALSE},
979 {kTRUE,kTRUE,kTRUE,kTRUE},
980 {kTRUE,kTRUE,kTRUE,kTRUE},
981 {kFALSE,kFALSE,kFALSE,kFALSE},
982 {kFALSE,kFALSE,kFALSE,kFALSE},
983 {kFALSE,kFALSE,kFALSE,kFALSE},
984 {kFALSE,kFALSE,kFALSE,kFALSE},
985 {kTRUE,kTRUE,kTRUE,kTRUE},
986 {kTRUE,kTRUE,kTRUE,kTRUE},
987 {kTRUE,kTRUE,kFALSE,kFALSE},
988 {kTRUE,kTRUE,kTRUE,kTRUE},
989 {kFALSE,kFALSE,kFALSE,kFALSE},
990 {kFALSE,kFALSE,kFALSE,kFALSE},
991 {kFALSE,kFALSE,kFALSE,kFALSE},
992 {kFALSE,kFALSE,kFALSE,kFALSE}
995 esdTrack.GetXYZAt(3.9,0.,xyz1);
996 esdTrack.GetXYZAt(7.6,0.,xyz2);
997 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
998 if(phi1<0) phi1+=2*TMath::Pi();
999 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
1000 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
1001 if(phi2<0) phi2+=2*TMath::Pi();
1002 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
1006 if(mod1>=0 && mod1<4 && lad1<20){
1007 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
1010 if(mod2>=0 && mod2<4 && lad2<40){
1011 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
1013 if(!lay1ok && !lay2ok)
return kFALSE;
1019 esdTrack.GetXYZAt(3.9,0.,xyz1);
1020 esdTrack.GetXYZAt(7.6,0.,xyz2);
1021 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
1022 if(phi1<0) phi1+=2*TMath::Pi();
1023 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
1024 if(phi2<0) phi2+=2*TMath::Pi();
1026 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
1028 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
1029 if(!lay1ok || !lay2ok)
return kFALSE;
1041 printf(
"Changing the pt bins\n");
1045 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1067 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1073 for(
Int_t iv=0; iv<nVars; iv++) {
1091 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1111 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1123 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1124 AliFatal(
"exiting");
1127 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1128 AliFatal(
"exiting");
1140 cout<<
"Overflow, exit..."<<endl;
1156 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1157 AliFatal(
"exiting");
1162 fCutsRD[iGl] = cutsRDGlob[iGl];
1179 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1180 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1181 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1201 cout<<
"Array of variables"<<endl;
1208 cout<<
"Array of optimization"<<endl;
1215 cout<<
"Array of upper/lower cut"<<endl;
1222 cout<<
"Array of ptbin limits"<<endl;
1229 cout<<
"Matrix of cuts"<<endl;
1249 cout<<
" Trigger selection pattern: ";
1251 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1254 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1255 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1256 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1257 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1258 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1259 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1260 cout << endl<< endl;
1277 for(iv=0; iv<
fnVars; iv++) {
1284 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1295 return iPtBin*
fnVars+iVar;
1330 cout<<
"Cuts not iniziaisez yet"<<endl;
1342 if(estimator==
kCentOff)
return -999;
1346 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1352 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1353 if(!defaultmultSelection){
1354 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1357 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1358 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1364 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1366 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1368 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1370 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1372 cent=multSelection->GetMultiplicityPercentile(
"CL0");
1374 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1377 Int_t qual = multSelection->GetEvSelCode();
1378 if(qual == 199 ) cent=-999;
1387 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1390 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1391 if(!header) AliFatal(
"Not a standard AOD");
1392 AliCentrality *
centrality=header->GetCentralityP();
1395 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1396 if(!centrality)
return cent;
1399 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1401 Int_t quality = centrality->GetQuality();
1403 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1405 Int_t runnum=aodEvent->GetRunNumber();
1406 for(
Int_t ir=0;ir<5;ir++){
1407 if(runnum==selRun[ir]){
1412 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1419 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1420 v0+=aodV0->GetMTotV0A();
1421 v0+=aodV0->GetMTotV0C();
1422 if(cent==0&&v0<19500)
return -1;
1423 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1424 Float_t val= 1.30552 + 0.147931 * v0;
1425 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};
1426 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1431 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1433 Int_t quality = centrality->GetQuality();
1435 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1437 Int_t runnum=aodEvent->GetRunNumber();
1438 for(
Int_t ir=0;ir<5;ir++){
1439 if(runnum==selRun[ir]){
1444 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1450 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1452 Int_t quality = centrality->GetQuality();
1454 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1456 Int_t runnum=aodEvent->GetRunNumber();
1457 for(
Int_t ir=0;ir<5;ir++){
1458 if(runnum==selRun[ir]){
1463 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1469 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1471 Int_t quality = centrality->GetQuality();
1473 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1475 Int_t runnum=aodEvent->GetRunNumber();
1476 for(
Int_t ir=0;ir<5;ir++){
1477 if(runnum==selRun[ir]){
1482 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1488 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1490 Int_t quality = centrality->GetQuality();
1492 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1494 Int_t runnum=aodEvent->GetRunNumber();
1495 for(
Int_t ir=0;ir<5;ir++){
1496 if(runnum==selRun[ir]){
1501 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1507 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1509 Int_t quality = centrality->GetQuality();
1511 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1513 Int_t runnum=aodEvent->GetRunNumber();
1514 for(
Int_t ir=0;ir<5;ir++){
1515 if(runnum==selRun[ir]){
1520 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1526 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1528 Int_t quality = centrality->GetQuality();
1530 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1532 Int_t runnum=aodEvent->GetRunNumber();
1533 for(
Int_t ir=0;ir<5;ir++){
1534 if(runnum==selRun[ir]){
1539 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1544 AliWarning(
"Centrality estimator not valid");
1578 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1580 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1582 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;}
1606 TString ptString =
"pT range";
1608 TString firstLine(Form(
"* %-15s",ptString.Data()));
1611 if (ivar == fnVars){
1615 Printf(
"%s",firstLine.Data());
1619 if (ipt==fnPtBins-1){
1628 Printf(
"%s",line.Data());
1645 AliError(
"Can not remove daughters from vertex without AOD event");
1651 AliDebug(2,
"Removal of daughter tracks failed");
1670 AliError(
"Can not get MC vertex without AOD event");
1675 AliAODMCHeader *mcHeader =
1676 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1678 AliError(
"Can not get MC vertex without AODMCHeader event");
1682 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1683 mcHeader->GetVertex(pos);
1684 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1687 AliDebug(2,
"Removal of daughter tracks failed");
1703 AliAODVertex *origownvtx)
const 1713 delete origownvtx; origownvtx=NULL;
1718 delete origownvtx; origownvtx=NULL;
1730 if(!aod)
return kFALSE;
1733 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1735 if(!mcArray)
return kFALSE;
1738 Int_t label = d->MatchToMC(pdg,mcArray);
1753 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1754 vertexer->SetITSMode();
1755 vertexer->SetMinClusters(3);
1757 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1758 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1760 event->GetDiamondCovXY(diamondcovxy);
1761 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1762 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1763 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1764 vertexer->SetVtxStart(diamond);
1765 delete diamond; diamond=NULL;
1768 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1769 if(!vertexESD)
return kFALSE;
1770 if(vertexESD->GetNContributors()<=0) {
1772 delete vertexESD; vertexESD=NULL;
1775 delete vertexer; vertexer=NULL;
1779 vertexESD->GetXYZ(pos);
1780 vertexESD->GetCovMatrix(cov);
1781 chi2perNDF = vertexESD->GetChi2toNDF();
1782 delete vertexESD; vertexESD=NULL;
1784 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1785 pvtx->SetChi2perNDF(chi2perNDF);
1786 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