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 fTriggerMask(AliVEvent::kAnyINT),
72 fUseOnlyOneTrigger(kFALSE),
89 fRemoveDaughtersFromPrimary(kFALSE),
91 fUsePhysicsSelection(kTRUE),
95 fUseMultDepPileupCut(kFALSE),
99 fMultSelectionObjectName(
"MultSelection"),
105 fMaxRapidityCand(-999.),
106 fKeepSignalMC(kFALSE),
107 fIsCandTrackSPDFirst(kFALSE),
108 fMaxPtCandTrackSPDFirst(0.),
109 fApplySPDDeadPbPb2011(kFALSE),
110 fApplySPDMisalignedPP2012(kFALSE),
111 fMaxDiffTRKV0Centr(-1.),
112 fRemoveTrackletOutliers(kFALSE),
115 fUseTrackSelectionWithFilterBits(kTRUE),
116 fUseCentrFlatteningInMC(kFALSE),
117 fHistCentrDistr(0x0),
118 fCutRatioClsOverCrossRowsTPC(0),
119 fCutRatioSignalNOverCrossRowsTPC(0),
120 fCutMinCrossedRowsTPCPtDep(
""),
121 f1CutMinNCrossedRowsTPCPtDep(0x0),
122 fUseCutGeoNcrNcl(kFALSE),
124 fCutGeoNcrNclLength(130.),
125 fCutGeoNcrNclGeom1Pt(1.5),
126 fCutGeoNcrNclFractionNcr(0.85),
127 fCutGeoNcrNclFractionNcl(0.7),
128 fUseV0ANDSelectionOffline(kFALSE)
137 AliAnalysisCuts(source),
206 cout<<
"Copy constructor"<<endl;
227 if(&source ==
this)
return *
this;
229 AliAnalysisCuts::operator=(source);
337 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid){
338 AliWarning(
"Centrality estimator not valid");
342 if (centvalue<-998.){
369 if(maxCentr<minCentr){
370 AliWarning(
"AliRDHFCuts::Wrong centralities values while setting the histogram for centrality flattening");
375 fHistCentrDistr->SetTitle(
"Reference histo for centrality flattening");
379 Double_t ref=0.,bincont=0.,binrefwidth=1.;
381 if(TMath::Abs(centrRef)<0.0001){
386 else if(centrRef>0.){
387 binref=h->FindBin(centrRef);
388 if(binref<1||binref>h->GetNbinsX()){
389 AliWarning(
"AliRDHFCuts::Wrong centrality reference value while setting the histogram for centrality flattening");
395 if(centrRef<-1) AliWarning(
"AliRDHFCuts: with this centrality reference no flattening will be applied");
401 for(
Int_t j=1;j<=h->GetNbinsX();j++){
402 if(h->GetBinLowEdge(j)*1.0001>=minCentr&&h->GetBinLowEdge(j+1)*0.9999<=maxCentr){
403 bincont=h->GetBinContent(j);
408 h->SetBinContent(j,1.1);
437 if(
gRandom->Uniform(1.)<bincont)
return kTRUE;
441 if(centDigits*100.<bincont)
return kTRUE;
453 AliInputEventHandler *inputHandler=(AliInputEventHandler*)mgr->GetInputEventHandler();
454 AliPIDResponse *pidResp=inputHandler->GetPIDResponse();
461 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
465 if((event->GetRunNumber()>121693 &&
event->GetRunNumber()<136851) ||
468 if((event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860)){
473 if(event->GetRunNumber()>=136851 &&
event->GetRunNumber()<=139517)
fPidHF->
SetPbPb(kTRUE);
476 if(isMC && (event->GetRunNumber()>=146686 &&
event->GetRunNumber()<=146860))
501 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)event)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
510 if(!isMC && (event->GetRunNumber()<136851 ||
event->GetRunNumber()>139517)) {
521 for(
Int_t itr=0; itr<nTracks; itr++){
522 AliAODTrack* tr=(AliAODTrack*)((
AliAODEvent*)event)->GetTrack(itr);
538 Bool_t isSelected = (((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected() &
fTriggerMask);
545 if(((AliInputEventHandler*)(AliAnalysisManager::GetAnalysisManager()->GetInputEventHandler()))->IsEventSelected()!=
fTriggerMask){
552 AliAODVZERO* v0data=(AliAODVZERO*)((
AliAODEvent*)event)->GetVZEROData();
553 Int_t tv0a=v0data->GetV0ADecision();
554 Int_t tv0c=v0data->GetV0CDecision();
555 if(!(tv0a==1 && tv0c==1)){
568 if(rejection==0) okCent=kTRUE;
580 if(event->GetRunNumber()>=167693 &&
event->GetRunNumber()<=170593){
584 Double_t cutval=60.-0.08*ntracklets+1./50000.*ntracklets*ntracklets;
585 if(ntracklets<1000. && v0cent<cutval){
604 const AliVVertex *vertex =
event->GetPrimaryVertex();
623 if(TMath::Abs(vertex->GetZ())>
fMaxVtxZ) {
631 const AliVVertex *vSPD = ((
AliAODEvent*)event)->GetPrimaryVertexSPD();
632 if(!vSPD || (vSPD && vSPD->GetNContributors()<
fMinVtxContr)){
643 Double_t dz = vSPD->GetZ()-vertex->GetZ();
645 if(TMath::Abs(dz)>0.5) {
652 double covTrc[6],covSPD[6];
653 vertex->GetCovarianceMatrix(covTrc);
654 vSPD->GetCovarianceMatrix(covSPD);
655 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
656 double errTrc = TMath::Sqrt(covTrc[5]);
657 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
658 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20){
673 isPileup=
event->IsPileupFromSPDInMultBins();
677 isPileup=
event->IsPileupFromSPD(cutc,cutz,3.,2.,10.);
686 AliAnalysisUtils utils;
687 Bool_t isPUMV = utils.IsPileUpMV(event);
708 Int_t ndaughters = d->GetNDaughters();
712 vAOD->GetCovarianceMatrix(cov);
713 const AliESDVertex vESD(pos,cov,100.,100);
717 for(
Int_t idg=0; idg<ndaughters; idg++) {
718 AliAODTrack *dgTrack = (AliAODTrack*)d->GetDaughter(idg);
719 if(!dgTrack) {retval = kFALSE;
continue;}
721 if(dgTrack->Charge()==0)
continue;
724 {
if(!dgTrack->HasPointOnITSLayer(0)) { retval = kFALSE;
continue; } }
747 Bool_t okTProcessNames = kTRUE;
748 AliAODHandler* aodHandler = (AliAODHandler*)((AliAnalysisManager::GetAnalysisManager())->GetInputEventHandler());
749 TTree *treeAOD = aodHandler->GetTree();
750 TTree *treeDeltaAOD = treeAOD->GetFriend(
"aodTree");
751 if(!treeDeltaAOD || !treeAOD)
return -1;
752 if(treeDeltaAOD && treeAOD){
753 if(treeAOD->GetEntries()!=treeDeltaAOD->GetEntries()){
754 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: Difference in number of entries in main and friend tree, skipping event\n");
757 TFile *mfile = treeAOD->GetCurrentFile();
758 TFile *dfile = treeDeltaAOD->GetCurrentFile();
759 TList* lm=mfile->GetListOfKeys();
760 TList* ld=dfile->GetListOfKeys();
761 Int_t nentm=lm->GetEntries();
762 for(
Int_t jm=0; jm<nentm; jm++){
763 TKey* o=(TKey*)lm->At(jm);
764 TString clnam=o->GetClassName();
765 if(clnam==
"TProcessID"){
768 if(pname.Contains(
"ProcessID")){
773 printf(
"AliRDHFCuts::CheckMatchingAODdeltaAODevents: mismatch in %s: AOD: %s -- deltaAOD: %s\n",pname.Data(),ptit.Data(),ptit2.Data());
774 okTProcessNames = kFALSE;
782 if (okTProcessNames)
return 1;
792 if(!rows.Contains(
"pt")) {
793 if(print) AliError(
"string must contain \"pt\"");
817 tmp.ReplaceAll(
"pt",
"x");
827 if(!cuts)
return kTRUE;
829 if(cuts->GetFlagCutTOFdistance()) cuts->SetFlagCutTOFdistance(kFALSE);
833 AliESDtrack esdTrack(track);
835 esdTrack.SetTPCClusterMap(track->GetTPCClusterMap());
836 esdTrack.SetTPCSharedMap(track->GetTPCSharedMap());
837 esdTrack.SetTPCPointsF(track->GetTPCNclsF());
839 esdTrack.RelateToVertex(primary,0.,3.);
842 if(!cuts->IsSelected(&esdTrack))
return kFALSE;
846 AliAODVertex *maybeKink=track->GetProdVertex();
847 if(maybeKink->GetType()==AliAODVertex::kKink)
return kFALSE;
852 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
853 if(nCrossedRowsTPC<f1CutMinNCrossedRowsTPCPtDep->Eval(esdTrack.Pt()))
return kFALSE;
858 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
859 Float_t nClustersTPC = esdTrack.GetTPCNcls();
860 if(nCrossedRowsTPC!=0){
861 Float_t ratio = nClustersTPC/nCrossedRowsTPC;
869 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
870 Float_t nTPCsignal = esdTrack.GetTPCsignalN();
871 if(nCrossedRowsTPC!=0){
872 Float_t ratio = nTPCsignal/nCrossedRowsTPC;
880 Float_t nCrossedRowsTPC = esdTrack.GetTPCCrossedRows();
881 Float_t lengthInActiveZoneTPC=esdTrack.GetLengthInActiveZone(0,
fDeadZoneWidth,220.,aod->GetMagneticField());
884 if (lengthInActiveZoneTPC<cutGeoNcrNclLength) isOK=kFALSE;
887 if(!isOK)
return kFALSE;
898 Bool_t deadSPDLay1PbPb2011[20][4]={
899 {kTRUE,kTRUE,kTRUE,kTRUE},
900 {kTRUE,kTRUE,kTRUE,kTRUE},
901 {kTRUE,kTRUE,kTRUE,kTRUE},
902 {kTRUE,kTRUE,kTRUE,kTRUE},
903 {kTRUE,kTRUE,kTRUE,kTRUE},
904 {kFALSE,kFALSE,kTRUE,kTRUE},
905 {kTRUE,kTRUE,kFALSE,kFALSE},
906 {kTRUE,kTRUE,kTRUE,kTRUE},
907 {kFALSE,kFALSE,kTRUE,kTRUE},
908 {kTRUE,kTRUE,kTRUE,kTRUE},
909 {kTRUE,kTRUE,kFALSE,kFALSE},
910 {kTRUE,kTRUE,kTRUE,kTRUE},
911 {kFALSE,kFALSE,kFALSE,kFALSE},
912 {kFALSE,kFALSE,kTRUE,kTRUE},
913 {kFALSE,kFALSE,kFALSE,kFALSE},
914 {kFALSE,kFALSE,kFALSE,kFALSE},
915 {kTRUE,kTRUE,kTRUE,kTRUE},
916 {kTRUE,kTRUE,kFALSE,kFALSE},
917 {kFALSE,kFALSE,kFALSE,kFALSE},
918 {kFALSE,kFALSE,kFALSE,kFALSE}
920 Bool_t deadSPDLay2PbPb2011[40][4]={
921 {kTRUE,kTRUE,kTRUE,kTRUE},
922 {kTRUE,kTRUE,kTRUE,kTRUE},
923 {kTRUE,kTRUE,kTRUE,kTRUE},
924 {kTRUE,kTRUE,kTRUE,kTRUE},
925 {kTRUE,kTRUE,kTRUE,kTRUE},
926 {kTRUE,kTRUE,kTRUE,kTRUE},
927 {kTRUE,kTRUE,kTRUE,kTRUE},
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,kFALSE,kFALSE},
934 {kFALSE,kFALSE,kTRUE,kTRUE},
935 {kTRUE,kTRUE,kTRUE,kTRUE},
936 {kTRUE,kTRUE,kTRUE,kTRUE},
937 {kTRUE,kTRUE,kFALSE,kFALSE},
938 {kTRUE,kTRUE,kTRUE,kTRUE},
939 {kTRUE,kTRUE,kTRUE,kTRUE},
940 {kTRUE,kTRUE,kTRUE,kTRUE},
941 {kFALSE,kFALSE,kFALSE,kFALSE},
942 {kFALSE,kFALSE,kFALSE,kFALSE},
943 {kTRUE,kTRUE,kTRUE,kTRUE},
944 {kTRUE,kTRUE,kTRUE,kTRUE},
945 {kFALSE,kFALSE,kFALSE,kFALSE},
946 {kFALSE,kFALSE,kFALSE,kFALSE},
947 {kTRUE,kTRUE,kTRUE,kTRUE},
948 {kTRUE,kTRUE,kTRUE,kTRUE},
949 {kFALSE,kFALSE,kFALSE,kFALSE},
950 {kFALSE,kFALSE,kFALSE,kFALSE},
951 {kFALSE,kFALSE,kFALSE,kFALSE},
952 {kFALSE,kFALSE,kFALSE,kFALSE},
953 {kTRUE,kTRUE,kTRUE,kTRUE},
954 {kTRUE,kTRUE,kTRUE,kTRUE},
955 {kTRUE,kTRUE,kFALSE,kFALSE},
956 {kTRUE,kTRUE,kTRUE,kTRUE},
957 {kFALSE,kFALSE,kFALSE,kFALSE},
958 {kFALSE,kFALSE,kFALSE,kFALSE},
959 {kFALSE,kFALSE,kFALSE,kFALSE},
960 {kFALSE,kFALSE,kFALSE,kFALSE}
963 esdTrack.GetXYZAt(3.9,0.,xyz1);
964 esdTrack.GetXYZAt(7.6,0.,xyz2);
965 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
966 if(phi1<0) phi1+=2*TMath::Pi();
967 Int_t lad1=(
Int_t)(phi1/(2.*TMath::Pi()/20.));
968 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
969 if(phi2<0) phi2+=2*TMath::Pi();
970 Int_t lad2=(
Int_t)(phi2/(2.*TMath::Pi()/40.));
974 if(mod1>=0 && mod1<4 && lad1<20){
975 lay1ok=deadSPDLay1PbPb2011[lad1][mod1];
978 if(mod2>=0 && mod2<4 && lad2<40){
979 lay2ok=deadSPDLay2PbPb2011[lad2][mod2];
981 if(!lay1ok && !lay2ok)
return kFALSE;
987 esdTrack.GetXYZAt(3.9,0.,xyz1);
988 esdTrack.GetXYZAt(7.6,0.,xyz2);
989 Double_t phi1=TMath::ATan2(xyz1[1],xyz1[0]);
990 if(phi1<0) phi1+=2*TMath::Pi();
991 Double_t phi2=TMath::ATan2(xyz2[1],xyz2[0]);
992 if(phi2<0) phi2+=2*TMath::Pi();
994 if(phi1>5.6 && phi1<2.*TMath::Pi()) lay1ok=kFALSE;
996 if(phi2>5.6 && phi2<2.*TMath::Pi()) lay2ok=kFALSE;
997 if(!lay1ok || !lay2ok)
return kFALSE;
1009 printf(
"Changing the pt bins\n");
1013 cout<<
"Warning: ptBinLimits dimention "<<nPtBinLimits<<
" != nPtBins+1 ("<<
fnPtBins+1<<
")\nSetting nPtBins to "<<nPtBinLimits-1<<endl;
1035 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1041 for(
Int_t iv=0; iv<nVars; iv++) {
1059 printf(
"%d not accepted as number of variables: it has to be %d\n",nVars,
fnVars);
1079 if(fUseCentrality<kCentOff||fUseCentrality>=
kCentInvalid) AliWarning(
"Centrality estimator not valid");
1091 printf(
"Wrong number of variables: it has to be %d\n",
fnVars);
1092 AliFatal(
"exiting");
1095 printf(
"Wrong number of pt bins: it has to be %d\n",
fnPtBins);
1096 AliFatal(
"exiting");
1108 cout<<
"Overflow, exit..."<<endl;
1124 cout<<
"Wrong array size: it has to be "<<
fGlobalIndex<<endl;
1125 AliFatal(
"exiting");
1130 fCutsRD[iGl] = cutsRDGlob[iGl];
1147 printf(
"Pileup rejection: %s\n",(
fOptPileup > 0) ?
"Yes" :
"No");
1148 if(
fOptPileup==1) printf(
" -- Reject pileup event");
1149 if(
fOptPileup==2) printf(
" -- Reject tracks from pileup vtx");
1168 cout<<
"Array of variables"<<endl;
1175 cout<<
"Array of optimization"<<endl;
1182 cout<<
"Array of upper/lower cut"<<endl;
1189 cout<<
"Array of ptbin limits"<<endl;
1196 cout<<
"Matrix of cuts"<<endl;
1215 cout<<
" Trigger selection pattern: ";
1217 if(
fTriggerMask & AliVEvent::kAnyINT ) cout<<
" kAnyINT ";
1220 if(
fTriggerMask & AliVEvent::kCINT5 ) cout<<
" kCINT5 ";
1221 if(
fTriggerMask & AliVEvent::kCentral ) cout<<
" kCentral ";
1222 if(
fTriggerMask & AliVEvent::kSemiCentral ) cout<<
" kSemiCentral ";
1223 if(
fTriggerMask & AliVEvent::kEMCEGA ) cout<<
" kEMCEGA ";
1224 if(
fTriggerMask & AliVEvent::kHighMult ) cout<<
" kHighMult ";
1225 if(
fTriggerMask & AliVEvent::kFastOnly ) cout<<
" kFastOnly ";
1226 cout << endl<< endl;
1243 for(iv=0; iv<
fnVars; iv++) {
1250 cutsRD[iv][ib] =
fCutsRD[iGlobal];
1261 return iPtBin*
fnVars+iVar;
1296 cout<<
"Cuts not iniziaisez yet"<<endl;
1308 if(estimator==
kCentOff)
return -999;
1312 AliWarning(
"AliMultSelection could not be found in the aod event list of objects");
1318 AliMultSelection *defaultmultSelection = (AliMultSelection*)aodEvent->FindListObject(
"MultSelection");
1319 if(!defaultmultSelection){
1320 AliWarning(
"AliMultSelection default method could not be found in the aod event list of objects");
1323 Float_t defaultCent = defaultmultSelection->GetMultiplicityPercentile(
"V0M");
1324 Float_t newCent = multSelection->GetMultiplicityPercentile(
"V0M");
1330 cent=multSelection->GetMultiplicityPercentile(
"V0M");
1332 cent=multSelection->GetMultiplicityPercentile(
"V0A");
1334 cent=multSelection->GetMultiplicityPercentile(
"ZNA");
1336 cent=multSelection->GetMultiplicityPercentile(
"CL1");
1338 cent=multSelection->GetMultiplicityPercentile(
"CL0");
1340 AliWarning(Form(
"CENTRALITY ESTIMATE WITH ESTIMATOR %d NOT YET IMPLEMENTED FOR NEW FRAMEWORK",(
Int_t)estimator));
1343 Int_t qual = multSelection->GetEvSelCode();
1344 if(qual == 199 ) cent=-999;
1353 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aodEvent)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1356 AliAODHeader *header=
dynamic_cast<AliAODHeader*
>(aodEvent->GetHeader());
1357 if(!header) AliFatal(
"Not a standard AOD");
1358 AliCentrality *
centrality=header->GetCentralityP();
1361 Int_t selRun[5]={138364, 138826, 138828, 138836, 138871};
1362 if(!centrality)
return cent;
1365 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0M"));
1367 Int_t quality = centrality->GetQuality();
1369 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1371 Int_t runnum=aodEvent->GetRunNumber();
1372 for(
Int_t ir=0;ir<5;ir++){
1373 if(runnum==selRun[ir]){
1378 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0M");
1385 AliAODVZERO* aodV0 = aodEvent->GetVZEROData();
1386 v0+=aodV0->GetMTotV0A();
1387 v0+=aodV0->GetMTotV0C();
1388 if(cent==0&&v0<19500)
return -1;
1389 Float_t tkl = (
Float_t)(aodEvent->GetTracklets()->GetNumberOfTracklets());
1390 Float_t val= 1.30552 + 0.147931 * v0;
1391 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};
1392 if ( TMath::Abs(tkl-val) > 6.*tklSigma[(
Int_t)cent] )
return -1;
1397 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TRK"));
1399 Int_t quality = centrality->GetQuality();
1401 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1403 Int_t runnum=aodEvent->GetRunNumber();
1404 for(
Int_t ir=0;ir<5;ir++){
1405 if(runnum==selRun[ir]){
1410 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TRK");
1416 cent=(
Float_t)(centrality->GetCentralityPercentile(
"TKL"));
1418 Int_t quality = centrality->GetQuality();
1420 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1422 Int_t runnum=aodEvent->GetRunNumber();
1423 for(
Int_t ir=0;ir<5;ir++){
1424 if(runnum==selRun[ir]){
1429 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"TKL");
1435 cent=(
Float_t)(centrality->GetCentralityPercentile(
"CL1"));
1437 Int_t quality = centrality->GetQuality();
1439 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1441 Int_t runnum=aodEvent->GetRunNumber();
1442 for(
Int_t ir=0;ir<5;ir++){
1443 if(runnum==selRun[ir]){
1448 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"CL1");
1454 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZNA"));
1456 Int_t quality = centrality->GetQuality();
1458 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1460 Int_t runnum=aodEvent->GetRunNumber();
1461 for(
Int_t ir=0;ir<5;ir++){
1462 if(runnum==selRun[ir]){
1467 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZNA");
1473 cent=(
Float_t)(centrality->GetCentralityPercentile(
"ZPA"));
1475 Int_t quality = centrality->GetQuality();
1477 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1479 Int_t runnum=aodEvent->GetRunNumber();
1480 for(
Int_t ir=0;ir<5;ir++){
1481 if(runnum==selRun[ir]){
1486 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"ZPA");
1492 cent=(
Float_t)(centrality->GetCentralityPercentile(
"V0A"));
1494 Int_t quality = centrality->GetQuality();
1496 cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1498 Int_t runnum=aodEvent->GetRunNumber();
1499 for(
Int_t ir=0;ir<5;ir++){
1500 if(runnum==selRun[ir]){
1505 if((quality==8||quality==9)&&isSelRun)cent=(
Float_t)centrality->GetCentralityPercentileUnchecked(
"V0A");
1510 AliWarning(
"Centrality estimator not valid");
1544 if(
fTrackCuts->GetMinNClustersITS()!=obj->
fTrackCuts->GetMinNClustersITS()) {printf(
"MinNClsITS %d %d\n",
fTrackCuts->GetMinNClustersITS(),obj->
fTrackCuts->GetMinNClustersITS()); areEqual=kFALSE;}
1546 if(TMath::Abs(
fTrackCuts->GetMaxChi2PerClusterTPC()-obj->
fTrackCuts->GetMaxChi2PerClusterTPC())>1.e-10) {printf(
"MaxChi2ClsTPC %f %f\n",
fTrackCuts->GetMaxChi2PerClusterTPC(),obj->
fTrackCuts->GetMaxChi2PerClusterTPC()); areEqual=kFALSE;}
1548 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;}
1570 TString ptString =
"pT range";
1572 TString firstLine(Form(
"* %-15s",ptString.Data()));
1575 if (ivar == fnVars){
1579 Printf(
"%s",firstLine.Data());
1583 if (ipt==fnPtBins-1){
1592 Printf(
"%s",line.Data());
1609 AliError(
"Can not remove daughters from vertex without AOD event");
1615 AliDebug(2,
"Removal of daughter tracks failed");
1634 AliError(
"Can not get MC vertex without AOD event");
1639 AliAODMCHeader *mcHeader =
1640 (AliAODMCHeader*)aod->GetList()->FindObject(AliAODMCHeader::StdBranchName());
1642 AliError(
"Can not get MC vertex without AODMCHeader event");
1646 Double_t covmatrix[6]={0.,0.,0.,0.,0.,0.};
1647 mcHeader->GetVertex(pos);
1648 AliAODVertex *recvtx=
new AliAODVertex(pos,covmatrix);
1651 AliDebug(2,
"Removal of daughter tracks failed");
1667 AliAODVertex *origownvtx)
const 1677 delete origownvtx; origownvtx=NULL;
1682 delete origownvtx; origownvtx=NULL;
1694 if(!aod)
return kFALSE;
1697 TClonesArray *mcArray = (TClonesArray*)((
AliAODEvent*)aod)->
GetList()->FindObject(AliAODMCParticle::StdBranchName());
1699 if(!mcArray)
return kFALSE;
1702 Int_t label = d->MatchToMC(pdg,mcArray);
1717 AliVertexerTracks *vertexer =
new AliVertexerTracks(event->GetMagneticField());
1718 vertexer->SetITSMode();
1719 vertexer->SetMinClusters(3);
1721 AliAODVertex* pvtx=
event->GetPrimaryVertex();
1722 if(strstr(pvtx->GetTitle(),
"VertexerTracksWithConstraint")) {
1724 event->GetDiamondCovXY(diamondcovxy);
1725 Double_t pos[3]={
event->GetDiamondX(),
event->GetDiamondY(),0.};
1726 Double_t cov[6]={diamondcovxy[0],diamondcovxy[1],diamondcovxy[2],0.,0.,10.*10.};
1727 AliESDVertex *diamond =
new AliESDVertex(pos,cov,1.,1);
1728 vertexer->SetVtxStart(diamond);
1729 delete diamond; diamond=NULL;
1732 AliESDVertex* vertexESD = (AliESDVertex*)vertexer->FindPrimaryVertex(event);
1733 if(!vertexESD)
return kFALSE;
1734 if(vertexESD->GetNContributors()<=0) {
1736 delete vertexESD; vertexESD=NULL;
1739 delete vertexer; vertexer=NULL;
1743 vertexESD->GetXYZ(pos);
1744 vertexESD->GetCovMatrix(cov);
1745 chi2perNDF = vertexESD->GetChi2toNDF();
1746 delete vertexESD; vertexESD=NULL;
1748 pvtx->SetPosition(pos[0],pos[1],pos[2]);
1749 pvtx->SetChi2perNDF(chi2perNDF);
1750 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
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
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)
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