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)
140 AliAnalysisCuts(source),
212 cout<<
"Copy constructor"<<endl;
233 if(&source ==
this)
return *
this;
235 AliAnalysisCuts::operator=(source);
346 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
347 AliWarning(
"Centrality estimator not valid");
351 if (centvalue<-998.){
378 if(maxCentr<minCentr){
379 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
384 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
388 Double_t ref=0.,bincont=0.,binrefwidth=1.;
390 if(TMath::Abs(centrRef)<0.0001){
395 else if(centrRef>0.){
396 binref=h->FindBin(centrRef);
397 if(binref<1||binref>h->GetNbinsX()){
398 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
404 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
410 for(
Int_t j=1;j<=h->GetNbinsX();j++){
411 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
412 bincont=h->GetBinContent(j);
417 h->SetBinContent(j,1.1);
446 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
450 if(centDigits*100.<bincont)
return kTRUE;
462 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
463 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
470 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
474 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
477 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
482 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
485 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
510 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
519 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
530 for(
Int_t itr=0; itr<nTracks; itr++){
531 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
547 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
554 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
561 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
562 Int_t tv0a=v0data->GetV0ADecision();
563 Int_t tv0c=v0data->GetV0CDecision();
564 if(!(tv0a==1 && tv0c==1)){
577 if(rejection==0) okCent=kTRUE;
589 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
593 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
594 if(ntracklets<1000. && v0cent<cutval){
613 const AliVVertex *vertex =
event->GetPrimaryVertex();
632 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
640 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){
682 isPileup=
event->IsPileupFromSPDInMultBins();
686 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
695 AliAnalysisUtils utils;
700 Bool_t isPUMV = utils.IsPileUpMV(event);
721 Int_t ndaughters = d->GetNDaughters();
725 vAOD->GetCovarianceMatrix(cov);
726 const AliESDVertex vESD(pos,cov,100.,100);
730 for(
Int_t idg=0; idg<ndaughters; idg++) {
731 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
732 if(!dgTrack) {retval = kFALSE;
continue;}
734 if(dgTrack->Charge()==0)
continue;
737 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
760 Bool_t okTProcessNames = kTRUE;
761 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
762 TTree *treeAOD = aodHandler->GetTree();
763 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
764 if(!treeDeltaAOD || !treeAOD)
return -1;
765 if(treeDeltaAOD && treeAOD){
766 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
767 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
770 TFile *mfile = treeAOD->GetCurrentFile();
771 TFile *dfile = treeDeltaAOD->GetCurrentFile();
772 TList* lm=mfile->GetListOfKeys();
773 TList* ld=dfile->GetListOfKeys();
774 Int_t nentm=lm->GetEntries();
775 for(
Int_t jm=0; jm<nentm; jm++){
776 TKey* o=(TKey*)lm->At(jm);
777 TString clnam=o->GetClassName();
778 if(clnam==
"TProcessID"){
781 if(pname.Contains(
"ProcessID")){
786 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
787 okTProcessNames = kFALSE;
795 if (okTProcessNames)
return 1;
805 if(!rows.Contains(
"pt")) {
806 if(print) AliError(
"string must contain \"pt\"");
830 tmp.ReplaceAll(
"pt",
"x");
840 if(!cuts)
return kTRUE;
842 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
846 AliESDtrack esdTrack(track);
848 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
849 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
850 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
852 esdTrack.RelateToVertex(primary,0.,3.);
855 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
859 AliAODVertex *maybeKink=track->GetProdVertex();
860 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
865 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
866 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
871 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
872 Float_t nClustersTPC = esdTrack.GetTPCNcls();
873 if(nCrossedRowsTPC!=0){
874 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
882 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
883 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
884 if(nCrossedRowsTPC!=0){
885 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
893 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
894 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
897 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
900 if(!isOK)
return kFALSE;
911 Bool_t deadSPDLay1PbPb2011[20][4]={
912 {kTRUE,kTRUE,kTRUE,kTRUE},
913 {kTRUE,kTRUE,kTRUE,kTRUE},
914 {kTRUE,kTRUE,kTRUE,kTRUE},
915 {kTRUE,kTRUE,kTRUE,kTRUE},
916 {kTRUE,kTRUE,kTRUE,kTRUE},
917 {kFALSE,kFALSE,kTRUE,kTRUE},
918 {kTRUE,kTRUE,kFALSE,kFALSE},
919 {kTRUE,kTRUE,kTRUE,kTRUE},
920 {kFALSE,kFALSE,kTRUE,kTRUE},
921 {kTRUE,kTRUE,kTRUE,kTRUE},
922 {kTRUE,kTRUE,kFALSE,kFALSE},
923 {kTRUE,kTRUE,kTRUE,kTRUE},
924 {kFALSE,kFALSE,kFALSE,kFALSE},
925 {kFALSE,kFALSE,kTRUE,kTRUE},
926 {kFALSE,kFALSE,kFALSE,kFALSE},
927 {kFALSE,kFALSE,kFALSE,kFALSE},
928 {kTRUE,kTRUE,kTRUE,kTRUE},
929 {kTRUE,kTRUE,kFALSE,kFALSE},
930 {kFALSE,kFALSE,kFALSE,kFALSE},
931 {kFALSE,kFALSE,kFALSE,kFALSE}
933 Bool_t deadSPDLay2PbPb2011[40][4]={
934 {kTRUE,kTRUE,kTRUE,kTRUE},
935 {kTRUE,kTRUE,kTRUE,kTRUE},
936 {kTRUE,kTRUE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kTRUE,kTRUE},
938 {kTRUE,kTRUE,kTRUE,kTRUE},
939 {kTRUE,kTRUE,kTRUE,kTRUE},
940 {kTRUE,kTRUE,kTRUE,kTRUE},
941 {kTRUE,kTRUE,kTRUE,kTRUE},
942 {kTRUE,kTRUE,kTRUE,kTRUE},
943 {kTRUE,kTRUE,kTRUE,kTRUE},
944 {kTRUE,kTRUE,kTRUE,kTRUE},
945 {kTRUE,kTRUE,kTRUE,kTRUE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kFALSE,kFALSE,kTRUE,kTRUE},
948 {kTRUE,kTRUE,kTRUE,kTRUE},
949 {kTRUE,kTRUE,kTRUE,kTRUE},
950 {kTRUE,kTRUE,kFALSE,kFALSE},
951 {kTRUE,kTRUE,kTRUE,kTRUE},
952 {kTRUE,kTRUE,kTRUE,kTRUE},
953 {kTRUE,kTRUE,kTRUE,kTRUE},
954 {kFALSE,kFALSE,kFALSE,kFALSE},
955 {kFALSE,kFALSE,kFALSE,kFALSE},
956 {kTRUE,kTRUE,kTRUE,kTRUE},
957 {kTRUE,kTRUE,kTRUE,kTRUE},
958 {kFALSE,kFALSE,kFALSE,kFALSE},
959 {kFALSE,kFALSE,kFALSE,kFALSE},
960 {kTRUE,kTRUE,kTRUE,kTRUE},
961 {kTRUE,kTRUE,kTRUE,kTRUE},
962 {kFALSE,kFALSE,kFALSE,kFALSE},
963 {kFALSE,kFALSE,kFALSE,kFALSE},
964 {kFALSE,kFALSE,kFALSE,kFALSE},
965 {kFALSE,kFALSE,kFALSE,kFALSE},
966 {kTRUE,kTRUE,kTRUE,kTRUE},
967 {kTRUE,kTRUE,kTRUE,kTRUE},
968 {kTRUE,kTRUE,kFALSE,kFALSE},
969 {kTRUE,kTRUE,kTRUE,kTRUE},
970 {kFALSE,kFALSE,kFALSE,kFALSE},
971 {kFALSE,kFALSE,kFALSE,kFALSE},
972 {kFALSE,kFALSE,kFALSE,kFALSE},
973 {kFALSE,kFALSE,kFALSE,kFALSE}
976 esdTrack.GetXYZAt(3.9,0.,xyz1);
977 esdTrack.GetXYZAt(7.6,0.,xyz2);
978 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
979 if(phi1<0) phi1+=2*TMath::Pi();
980 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
981 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
982 if(phi2<0) phi2+=2*TMath::Pi();
983 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
987 if(mod1>=0 && mod1<4 && lad1<20){
988 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
991 if(mod2>=0 && mod2<4 && lad2<40){
992 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
994 if(!lay1ok && !lay2ok)
return kFALSE;
1000 esdTrack.GetXYZAt(3.9,0.,xyz1);
1001 esdTrack.GetXYZAt(7.6,0.,xyz2);
1002 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
1003 if(phi1<0) phi1+=2*TMath::Pi();
1004 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
1005 if(phi2<0) phi2+=2*TMath::Pi();
1007 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
1009 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
1010 if(!lay1ok || !lay2ok)
return kFALSE;
1022 printf(
"Changing the pt bins\n");
1026 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1048 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1054 for(
Int_t iv=0; iv<nVars; iv++) {
1072 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1092 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1104 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1105 AliFatal(
"exiting");
1108 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1109 AliFatal(
"exiting");
1121 cout<<
"Overflow, exit..."<<endl;
1137 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1138 AliFatal(
"exiting");
1143 fCutsRD[iGl] = cutsRDGlob[iGl];
1160 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1161 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1162 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1182 cout<<
"Array of variables"<<endl;
1189 cout<<
"Array of optimization"<<endl;
1196 cout<<
"Array of upper/lower cut"<<endl;
1203 cout<<
"Array of ptbin limits"<<endl;
1210 cout<<
"Matrix of cuts"<<endl;
1229 cout<<
" Trigger selection pattern: ";
1231 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1234 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1235 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1236 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1237 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1238 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1239 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1240 cout << endl<< endl;
1257 for(iv=0; iv<
fnVars; iv++) {
1264 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1275 return iPtBin*
fnVars+iVar;
1310 cout<<
"Cuts not iniziaisez yet"<<endl;
1322 if(estimator==
kCentOff)
return -999;
1326 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1332 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1333 if(!defaultmultSelection){
1334 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1337 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1338 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1344 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1346 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1348 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1350 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1352 cent=multSelection->GetMultiplicityPercentile(
"CL0");
1354 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1357 Int_t qual = multSelection->GetEvSelCode();
1358 if(qual == 199 ) cent=-999;
1367 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1370 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1371 if(!header) AliFatal(
"Not a standard AOD");
1372 AliCentrality *
centrality=header->GetCentralityP();
1375 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1376 if(!centrality)
return cent;
1379 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1381 Int_t quality = centrality->GetQuality();
1383 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1385 Int_t runnum=aodEvent->GetRunNumber();
1386 for(
Int_t ir=0;ir<5;ir++){
1387 if(runnum==selRun[ir]){
1392 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1399 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1400 v0+=aodV0->GetMTotV0A();
1401 v0+=aodV0->GetMTotV0C();
1402 if(cent==0&&v0<19500)
return -1;
1403 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1404 Float_t val= 1.30552 + 0.147931 * v0;
1405 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};
1406 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1411 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1413 Int_t quality = centrality->GetQuality();
1415 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1417 Int_t runnum=aodEvent->GetRunNumber();
1418 for(
Int_t ir=0;ir<5;ir++){
1419 if(runnum==selRun[ir]){
1424 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1430 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1432 Int_t quality = centrality->GetQuality();
1434 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1436 Int_t runnum=aodEvent->GetRunNumber();
1437 for(
Int_t ir=0;ir<5;ir++){
1438 if(runnum==selRun[ir]){
1443 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1449 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1451 Int_t quality = centrality->GetQuality();
1453 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1455 Int_t runnum=aodEvent->GetRunNumber();
1456 for(
Int_t ir=0;ir<5;ir++){
1457 if(runnum==selRun[ir]){
1462 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1468 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1470 Int_t quality = centrality->GetQuality();
1472 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1474 Int_t runnum=aodEvent->GetRunNumber();
1475 for(
Int_t ir=0;ir<5;ir++){
1476 if(runnum==selRun[ir]){
1481 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1487 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1489 Int_t quality = centrality->GetQuality();
1491 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1493 Int_t runnum=aodEvent->GetRunNumber();
1494 for(
Int_t ir=0;ir<5;ir++){
1495 if(runnum==selRun[ir]){
1500 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1506 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1508 Int_t quality = centrality->GetQuality();
1510 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1512 Int_t runnum=aodEvent->GetRunNumber();
1513 for(
Int_t ir=0;ir<5;ir++){
1514 if(runnum==selRun[ir]){
1519 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1524 AliWarning(
"Centrality estimator not valid");
1558 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1560 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1562 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;}
1584 TString ptString =
"pT range";
1586 TString firstLine(Form(
"* %-15s",ptString.Data()));
1589 if (ivar == fnVars){
1593 Printf(
"%s",firstLine.Data());
1597 if (ipt==fnPtBins-1){
1606 Printf(
"%s",line.Data());
1623 AliError(
"Can not remove daughters from vertex without AOD event");
1629 AliDebug(2,
"Removal of daughter tracks failed");
1648 AliError(
"Can not get MC vertex without AOD event");
1653 AliAODMCHeader *mcHeader =
1654 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1656 AliError(
"Can not get MC vertex without AODMCHeader event");
1660 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1661 mcHeader->GetVertex(pos);
1662 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1665 AliDebug(2,
"Removal of daughter tracks failed");
1681 AliAODVertex *origownvtx)
const 1691 delete origownvtx; origownvtx=NULL;
1696 delete origownvtx; origownvtx=NULL;
1708 if(!aod)
return kFALSE;
1711 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1713 if(!mcArray)
return kFALSE;
1716 Int_t label = d->MatchToMC(pdg,mcArray);
1731 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1732 vertexer->SetITSMode();
1733 vertexer->SetMinClusters(3);
1735 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1736 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1738 event->GetDiamondCovXY(diamondcovxy);
1739 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1740 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1741 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1742 vertexer->SetVtxStart(diamond);
1743 delete diamond; diamond=NULL;
1746 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1747 if(!vertexESD)
return kFALSE;
1748 if(vertexESD->GetNContributors()<=0) {
1750 delete vertexESD; vertexESD=NULL;
1753 delete vertexer; vertexer=NULL;
1757 vertexESD->GetXYZ(pos);
1758 vertexESD->GetCovMatrix(cov);
1759 chi2perNDF = vertexESD->GetChi2toNDF();
1760 delete vertexESD; vertexESD=NULL;
1762 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1763 pvtx->SetChi2perNDF(chi2perNDF);
1764 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 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