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),
77 fAnalysisCuts->SetTriggerMask(AliVEvent::kMB | AliVEvent::kINT7);
78 fAnalysisCuts->SetTriggerClass(
"");
90 fHistNEventsVsCent(0x0),
91 fHistNEventsVsCL1(0x0),
92 fHistNEventsVsWhyRej(0x0),
93 fHistNTrackletsBeforePileup(0x0),
94 fHistNTrackletsAfterPileup(0x0),
95 fHistNCL1BeforePileup(0x0),
96 fHistNCL1AfterPileup(0x0),
98 fHistNTracksTPCoutVsV0Cent(0x0),
99 fHistNTracksFB4VsV0Cent(0x0),
100 fHistNTracksBC0VsV0Cent(0x0),
101 fHistNTrackletsVsV0Cent(0x0),
102 fHistNTracksTPCoutVsNTracklets(0x0),
103 fHistNTracksFB4VsNTracklets(0x0),
104 fHistNTracksBC0VsNTracksFB4(0x0),
105 fHistZVertexSPDBeforeCuts(0x0),
106 fHistZVertexSPDBeforeSPDCut(0x0),
107 fHistZVertexSPDAfterCuts(0x0),
108 fHistZVertexSPDBadTrackVert(0x0),
114 DefineOutput(1,TList::Class());
115 DefineOutput(2,AliNormalizationCounter::Class());
155 if(fDebug > 1) printf(
"AnalysisTaskCheckEvSel::UserCreateOutputObjects() \n");
159 else if(
fSystem==2) maxMult=500.;
163 fOutput->SetName(
"OutputHistos");
165 fHistNEvents =
new TH1F(
"hNEvents",
"number of events ",18,-0.5,17.5);
191 fHistCentrality =
new TH1F(
"hCentrality",
" ; Centrality ; ",105,0.,105.);
200 fHistNTracksBC0VsNTracksFB4 =
new TH2F(
"hNTracksBC0VsNTracksFB4",
" ; N_{tracks, FiltBit4}; N_{tracks, TOFBC=0}",200,-0.5,maxMult-0.5,200,-0.5,maxMult-0.5);
218 TString normName=
"NormalizationCounter";
219 AliAnalysisDataContainer *cont = GetOutputSlot(2)->GetContainer();
220 if(cont)normName=(
TString)cont->GetName();
231 ax->SetBinLabel(1,
"nEvents read");
232 ax->SetBinLabel(2,
"Rejected due to mismatch in trees");
233 ax->SetBinLabel(3,
"nEvents with good AOD");
234 ax->SetBinLabel(4,
"Rejected due to trigger");
235 ax->SetBinLabel(5,
"Rejected due to phys sel");
236 ax->SetBinLabel(6,
"Rejected due to bad centrality estimator");
237 ax->SetBinLabel(7,
"Rejected due to centrality flattening");
238 ax->SetBinLabel(8,
"Rejected due to centrality out of range");
239 ax->SetBinLabel(9,
"Rejected due to not reco vertex");
240 ax->SetBinLabel(10,
"Rejected for contr vertex");
241 ax->SetBinLabel(11,
"Rejected for bad track vertex");
242 ax->SetBinLabel(12,
"Rejected for vertex out of accept");
243 ax->SetBinLabel(13,
"Rejected for pileup events");
244 ax->SetBinLabel(14,
"Passing Phys sel + trigger");
245 ax->SetBinLabel(15,
"Passing Phys sel + trigger + Pileup");
246 ax->SetBinLabel(16,
"Passing Phys sel + trigger + Pileup + zVertex");
247 ax->SetBinLabel(17,
"Passing Phys sel + trigger + Pileup + zVertex + Centrality");
248 ax->SetBinLabel(18,
"Passing IsEventSelected");
249 ax->SetNdivisions(1,kFALSE);
255 if(fDebug > 1) printf(
"AnalysisTaskCheckEvSel::UserExec() \n");
264 if (matchingAODdeltaAODlevel<0 || (matchingAODdeltaAODlevel==0 &&
fAODProtection==1)) {
271 if(!aod && AODEvent() && IsStandardAOD()) {
277 printf(
"AliAnalysisTaskCheckEvSel::UserExec: AOD not found!\n");
283 if(!aod->GetPrimaryVertex() || TMath::Abs(aod->GetMagneticField())<0.001)
return;
291 const AliVVertex *vertex = aod->GetPrimaryVertex();
292 const AliVVertex *vertexSPD = aod->GetPrimaryVertexSPD();
294 Double_t ncl1 = aod->GetNumberOfITSClusters(1);
313 vertexSPD->GetNContributors()>=1){
315 Double_t dz = vertexSPD->GetZ()-vertex->GetZ();
319 double covTrc[6],covSPD[6];
320 vertex->GetCovarianceMatrix(covTrc);
321 vertexSPD->GetCovarianceMatrix(covSPD);
322 double errTot = TMath::Sqrt(covTrc[5]+covSPD[5]);
323 double errTrc = TMath::Sqrt(covTrc[5]);
324 double nsigTot = TMath::Abs(dz)/errTot, nsigTrc = TMath::Abs(dz)/errTrc;
325 if (TMath::Abs(dz)>0.2 || nsigTot>10 || nsigTrc>20) okSpdTrk=kFALSE;
341 if(wrej==3) binToFill=5;
342 else if(wrej==4) binToFill=6;
384 if(isEvSel || (!isEvSel && wrej==1)){
403 Int_t ntracksTPCout=0;
407 Double_t magField = aod->GetMagneticField();
409 for(
Int_t iTr=0; iTr<aod->GetNumberOfTracks(); iTr++){
410 AliAODTrack* track=
dynamic_cast<AliAODTrack*
>(aod->GetTrack(iTr));
412 if(track->GetStatus() & AliESDtrack::kTPCout) ntracksTPCout++;
413 if(track->TestFilterMask(AliAODTrack::kTrkGlobalNoDCA)){
415 Int_t tofBC=track->GetTOFBunchCrossing(magField);
416 if(tofBC==0) ntracksBC0++;
440 if(fDebug > 1) printf(
"AliAnalysisTaskCheckEvSel: Terminate() \n");
443 printf(
"ERROR: fOutput not available\n");
448 printf(
"Number of analyzed events = %d\n",(
Int_t)
fHistNEvents->GetBinContent(2));
450 printf(
"ERROR: fHistNEvents not available\n");
Bool_t IsEventRejectedDueToCentrality() const
Bool_t IsEventRejectedDueToZVertexOutsideFiducialRegion() const
Bool_t IsEventRejectedDueToNotRecoVertex() const
TH2F * fHistNTracksTPCoutVsV0Cent
! Centrality-multiplicity correl
TH1F * fHistCentrality
! hist. of centrality distribution
AliNormalizationCounter * fCounter
!Counter for normalization
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)
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
TH2F * fHistZVertexSPDBeforeCuts
! z-vertex distr.