29 #include "AliAnalysisManager.h" 30 #include "AliInputEventHandler.h" 31 #include "AliPIDResponse.h" 32 #include "AliAODHandler.h" 33 #include "AliAODEvent.h" 34 #include "AliVVertex.h" 35 #include "AliAODTrack.h" 53 fHistNEventsVsCent(0x0),
54 fHistNEventsVsCL1(0x0),
55 fHistNEventsVsWhyRej(0x0),
56 fHistNTrackletsBeforePileup(0x0),
57 fHistNTrackletsAfterPileup(0x0),
58 fHistNCL1BeforePileup(0x0),
59 fHistNCL1AfterPileup(0x0),
61 fHistNTracksTPCoutVsV0Cent(0x0),
62 fHistNTracksFB4VsV0Cent(0x0),
63 fHistNTracksBC0VsV0Cent(0x0),
64 fHistNTrackletsVsV0Cent(0x0),
65 fHistNTracksTPCoutVsNTracklets(0x0),
66 fHistNTracksFB4VsNTracklets(0x0),
67 fHistNTracksBC0VsNTracksFB4(0x0),
68 fHistZVertexSPDBeforeCuts(0x0),
69 fHistZVertexSPDBeforeSPDCut(0x0),
70 fHistZVertexSPDAfterCuts(0x0),
71 fHistZVertexSPDBadTrackVert(0x0),
72 fNtupleZvtxDistVsWhyRej(0x0),
73 fEnableVertexNtuple(kFALSE),
79 fAnalysisCuts->SetTriggerMask(AliVEvent::kMB | AliVEvent::kINT7);
80 fAnalysisCuts->SetTriggerClass(
"");
92 fHistNEventsVsCent(0x0),
93 fHistNEventsVsCL1(0x0),
94 fHistNEventsVsWhyRej(0x0),
95 fHistNTrackletsBeforePileup(0x0),
96 fHistNTrackletsAfterPileup(0x0),
97 fHistNCL1BeforePileup(0x0),
98 fHistNCL1AfterPileup(0x0),
100 fHistNTracksTPCoutVsV0Cent(0x0),
101 fHistNTracksFB4VsV0Cent(0x0),
102 fHistNTracksBC0VsV0Cent(0x0),
103 fHistNTrackletsVsV0Cent(0x0),
104 fHistNTracksTPCoutVsNTracklets(0x0),
105 fHistNTracksFB4VsNTracklets(0x0),
106 fHistNTracksBC0VsNTracksFB4(0x0),
107 fHistZVertexSPDBeforeCuts(0x0),
108 fHistZVertexSPDBeforeSPDCut(0x0),
109 fHistZVertexSPDAfterCuts(0x0),
110 fHistZVertexSPDBadTrackVert(0x0),
111 fNtupleZvtxDistVsWhyRej(0x0),
112 fEnableVertexNtuple(kFALSE),
118 DefineOutput(1,TList::Class());
119 DefineOutput(2,AliNormalizationCounter::Class());
122 DefineOutput(3,TNtuple::Class());
164 if(fDebug > 1) printf(
"AnalysisTaskCheckEvSel::UserCreateOutputObjects() \n");
168 else if(
fSystem==2) maxMult=500.;
172 fOutput->SetName(
"OutputHistos");
174 fHistNEvents =
new TH1F(
"hNEvents",
"number of events ",18,-0.5,17.5);
200 fHistCentrality =
new TH1F(
"hCentrality",
" ; Centrality ; ",105,0.,105.);
209 fHistNTracksBC0VsNTracksFB4 =
new TH2F(
"hNTracksBC0VsNTracksFB4",
" ; N_{tracks, FiltBit4}; N_{tracks, TOFBC=0}",200,-0.5,maxMult-0.5,200,-0.5,maxMult-0.5);
227 TString normName=
"NormalizationCounter";
228 AliAnalysisDataContainer *cont = GetOutputSlot(2)->GetContainer();
229 if(cont)normName=(
TString)cont->GetName();
238 fNtupleZvtxDistVsWhyRej =
new TNtuple(
"fNtupleZvtxDistVsWhyRej",
"fNtupleZvtxDistVsWhyRej",
"zSPDvertex:zTRKvertex:NcontributorszSPD:NcontributorszTRK:whyrejection:vtxtype");
246 ax->SetBinLabel(1,
"nEvents read");
247 ax->SetBinLabel(2,
"Rejected due to mismatch in trees");
248 ax->SetBinLabel(3,
"nEvents with good AOD");
249 ax->SetBinLabel(4,
"Rejected due to trigger");
250 ax->SetBinLabel(5,
"Rejected due to phys sel");
251 ax->SetBinLabel(6,
"Rejected due to bad centrality estimator");
252 ax->SetBinLabel(7,
"Rejected due to centrality flattening");
253 ax->SetBinLabel(8,
"Rejected due to centrality out of range");
254 ax->SetBinLabel(9,
"Rejected due to not reco vertex");
255 ax->SetBinLabel(10,
"Rejected for contr vertex");
256 ax->SetBinLabel(11,
"Rejected for bad track vertex");
257 ax->SetBinLabel(12,
"Rejected for vertex out of accept");
258 ax->SetBinLabel(13,
"Rejected for pileup events");
259 ax->SetBinLabel(14,
"Passing Phys sel + trigger");
260 ax->SetBinLabel(15,
"Passing Phys sel + trigger + Pileup");
261 ax->SetBinLabel(16,
"Passing Phys sel + trigger + Pileup + zVertex");
262 ax->SetBinLabel(17,
"Passing Phys sel + trigger + Pileup + zVertex + Centrality");
263 ax->SetBinLabel(18,
"Passing IsEventSelected");
264 ax->SetNdivisions(1,kFALSE);
270 if(fDebug > 1) printf(
"AnalysisTaskCheckEvSel::UserExec() \n");
279 if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 &&
fAODProtection==1)) {
286 if(!aod && AODEvent() && IsStandardAOD()) {
292 printf(
"AliAnalysisTaskCheckEvSel::UserExec: AOD not found!\n");
298 if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001)
return;
306 const AliVVertex *vertex = aod->GetPrimaryVertex();
307 const AliVVertex *vertexSPD = aod->GetPrimaryVertexSPD();
309 Double_t ncl1 = aod->GetNumberOfITSClusters(1);
315 if(isEvSel) wrej4ntuple = -1;
318 TString vertextitle = vertex->GetTitle();
320 if(vertextitle.Contains(
"VertexerTracks")) vertextype=3;
322 else if(vertextitle.Contains(
"Z")) vertextype=1;
323 else if(vertextitle.Contains(
"3D")) vertextype=2;
346 vertexSPD->GetNContributors()>=1){
348 Double_t dz = vertexSPD->GetZ()-vertex->GetZ();
352 double covTrc[6],covSPD[6];
353 vertex->GetCovarianceMatrix(covTrc);
354 vertexSPD->GetCovarianceMatrix(covSPD);
355 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
356 double errTrc = TMath::Sqrt(covTrc[5]);
357 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
358 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20) okSpdTrk=kFALSE;
374 if(wrej==3) binToFill=5;
375 else if(wrej==4) binToFill=6;
417 if(isEvSel || (!isEvSel && wrej==1)){
436 Int_t ntracksTPCout=0;
440 Double_t magField = aod->GetMagneticField();
442 for(
Int_t iTr=0; iTr<aod->GetNumberOfTracks(); iTr++){
443 AliAODTrack* track=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(iTr));
445 if(track->GetStatus() & AliESDtrack::kTPCout) ntracksTPCout++;
446 if(track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){
448 Int_t tofBC=track->GetTOFBunchCrossing(magField);
449 if(tofBC==0) ntracksBC0++;
473 if(fDebug > 1) printf(
"AliAnalysisTaskCheckEvSel: Terminate() \n");
476 printf(
"ERROR: fOutput not available\n");
481 printf(
"Number of analyzed events = %d\n",(
Int_t)
fHistNEvents->GetBinContent(2));
483 printf(
"ERROR: fHistNEvents not available\n");
Bool_t IsEventRejectedDueToCentrality() const
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Bool_t fEnableVertexNtuple
Bool_t IsEventRejectedDueToNotRecoVertex() const
TH2F * fHistNTracksTPCoutVsV0Cent
! Centrality-multiplicity correl
TH1F * fHistCentrality
! hist. of centrality distribution
AliNormalizationCounter * fCounter
flag to enable ntuple for primary vertex studies
Int_t IsEventSelectedInCentrality(AliVEvent *event)
virtual void UserCreateOutputObjects()
TH2F * fHistNTracksBC0VsNTracksFB4
! Centrality-multiplicity correl
static Int_t CheckMatchingAODdeltaAODevents()
Bool_t IsEventRejectedDueToVertexContributors() const
Int_t GetWhyRejection() const
TH2F * fHistNTrackletsVsV0Cent
! Centrality-multiplicity correl
TH2F * fHistNEventsVsCent
! hist. for No. of events
virtual void Terminate(Option_t *option)
TList * fOutput
! list send on output slot 0
TH2F * fHistNTracksTPCoutVsNTracklets
! Centrality-multiplicity correl
static Int_t GetNumberOfTrackletsInEtaRange(AliAODEvent *ev, Double_t mineta, Double_t maxeta)
TH2F * fHistZVertexSPDBadTrackVert
! z-vertex distr.
TH1F * fHistNEvents
! hist. for No. of events
TH2F * fHistNEventsVsWhyRej
! hist. for No. of events
TH2F * fHistZVertexSPDAfterCuts
! z-vertex distr.
Bool_t IsEventRejectedDueToBadTrackVertex() const
TH2F * fHistNTracksFB4VsV0Cent
! Centrality-multiplicity correl
AliRDHFCutsD0toKpi * fAnalysisCuts
virtual void UserExec(Option_t *option)
TNtuple * fNtupleZvtxDistVsWhyRej
! ntuple of ZvtxTRK vs. ZvtxSPD vs. Ncontributors vs. whyrej flag
AliAnalysisTaskCheckEvSel()
Float_t GetCentrality(AliAODEvent *aodEvent)
Bool_t IsEventRejectedDueToPileup() const
TH1F * fHistNCL1BeforePileup
! hist. for No. of tracklets
TH2F * fHistNTracksBC0VsV0Cent
! Centrality-multiplicity correl
Bool_t IsEventRejectedDuePhysicsSelection() const
Int_t fAODProtection
cut on zSPD vertex to remove outliers in centrality vs. tracklets (0=no cut, 1= cut at 12 cm...
TH2F * fHistNTracksFB4VsNTracklets
! Centrality-multiplicity correl
Bool_t IsEventSelected(AliVEvent *event)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
TH1F * fHistNTrackletsBeforePileup
! hist. for No. of tracklets
TH2F * fHistZVertexSPDBeforeSPDCut
! z-vertex distr.
virtual ~AliAnalysisTaskCheckEvSel()
TH2F * fHistNEventsVsCL1
! hist. for No. of events
TH1F * fHistNTrackletsAfterPileup
! hist. for No. of tracklets
Bool_t IsEventRejectedDueToTrigger() const
TH1F * fHistNCL1AfterPileup
! hist. for No. of tracklets
void ConfigureEvSelAxis(TAxis *ax)
Int_t GetUseCentrality() const
Int_t fCutOnzVertexSPD
0=pp, 1=Pb-Pb, 2=p-Pb
Bool_t IsEventRejectedDueToCentralityFlattening() const
TList * OpenFile(const char *fname)
TH2F * fHistZVertexSPDBeforeCuts
! z-vertex distr.