29 #include <AliESDEvent.h>
30 #include <AliESDtrack.h>
31 #include <AliAODEvent.h>
32 #include <AliAODVZERO.h>
33 #include <AliVParticle.h>
34 #include <AliTriggerAnalysis.h>
40 #include <AliPhysicsSelection.h>
41 #include <AliMultiplicity.h>
52 fMultiplicity(kFALSE),
53 fMultiplicityEtaRange(1.0),
54 fHistTrackFilterEvMult(0),
55 fHistTrackAnaEvMult(0),
56 fHistTrackFilterSpdMult(0),
57 fHistTrackAnaSpdMult(0)
67 fMultiplicity(kFALSE),
68 fMultiplicityEtaRange(1.0),
69 fHistTrackFilterEvMult(0),
70 fHistTrackAnaEvMult(0),
71 fHistTrackFilterSpdMult(0),
72 fHistTrackAnaSpdMult(0)
103 fCounters.AddRubric(
"Event",
"triggered/V0AND/PileUp/PbPbC0SMH-B-NOPF-ALLNOTRD/Candles0.3/PrimaryV/countForNorm/noPrimaryV/zvtxGT10/!V0A&Candle03/!V0A&PrimaryV/Candid(Filter)/Candid(Analysis)/NCandid(Filter)/NCandid(Analysis)");
107 fHistTrackFilterEvMult=
new TH2F(
"FiltCandidvsTracksinEv",
"FiltCandidvsTracksinEv",10000,-0.5,9999.5,200,-0.5,199.5);
110 fHistTrackAnaEvMult=
new TH2F(
"AnaCandidvsTracksinEv",
"AnaCandidvsTracksinEv",10000,-0.5,9999.5,100,-0.5,99.5);
113 fHistTrackFilterSpdMult=
new TH2F(
"FilterCandidvsSpdMult",
"FilterCandidvsSpdMult",5000,-0.5,4999.5,200,-0.5,199.5);
116 fHistTrackAnaSpdMult=
new TH2F(
"AnaCandidvsSpdMult",
"AnaCandidvsSpdMult",5000,-0.5,4999.5,100,-0.5,99.5);
124 if (list->IsEmpty())
return 0;
127 const TObject* obj = 0x0;
128 while ((obj = next())) {
133 AliError(Form(
"object named %s is not AliNormalizationCounter! Skipping it.", counter->GetName()));
167 Bool_t flag03=kFALSE;
168 Bool_t flagPV=kFALSE;
171 Int_t runNumber =
event->GetRunNumber();
177 AliESDEvent *eventESD = (AliESDEvent*)event;
178 if(!eventESD){AliError(
"ESD event not available");
return;}
179 if(mc&&event->GetEventType() != 0)
return;
181 if(!(event->GetEventType() == 7||
event->GetEventType() == 0))
return;
184 fCounters.Count(Form(
"Event:triggered/Run:%d/Multiplicity:%d",runNumber,multiplicity));
186 fCounters.Count(Form(
"Event:triggered/Run:%d",runNumber));
189 AliTriggerAnalysis trAn;
190 AliAODVZERO* aodV0 = (AliAODVZERO*)event->GetVZEROData();
191 Bool_t isPP2012 = kFALSE;
192 if(runNumber>=176326 && runNumber<=193766) isPP2012=kTRUE;
193 if(aodV0 && !isPP2012){
194 v0B = trAn.IsOfflineTriggerFired(eventESD , AliTriggerAnalysis::kV0C);
199 fCounters.Count(Form(
"Event:V0AND/Run:%d/Multiplicity:%d",runNumber,multiplicity));
201 fCounters.Count(Form(
"Event:V0AND/Run:%d",runNumber));
212 AliAODEvent *eventAOD = (AliAODEvent*)event;
213 TString trigclass=eventAOD->GetFiredTriggerClasses();
214 if(trigclass.Contains(
"C0SMH-B-NOPF-ALLNOTRD")||trigclass.Contains(
"C0SMH-B-NOPF-ALL")){
216 fCounters.Count(Form(
"Event:PbPbC0SMH-B-NOPF-ALLNOTRD/Run:%d/Multiplicity:%d",runNumber,multiplicity));
218 fCounters.Count(Form(
"Event:PbPbC0SMH-B-NOPF-ALLNOTRD/Run:%d",runNumber));
224 fCounters.Count(Form(
"Event:PrimaryV/Run:%d/Multiplicity:%d",runNumber,multiplicity));
226 fCounters.Count(Form(
"Event:PrimaryV/Run:%d",runNumber));
231 fCounters.Count(Form(
"Event:noPrimaryV/Run:%d/Multiplicity:%d",runNumber,multiplicity));
233 fCounters.Count(Form(
"Event:noPrimaryV/Run:%d",runNumber));
238 fCounters.Count(Form(
"Event:zvtxGT10/Run:%d/Multiplicity:%d",runNumber,multiplicity));
239 fCounters.Count(Form(
"Event:PrimaryV/Run:%d/Multiplicity:%d",runNumber,multiplicity));
241 fCounters.Count(Form(
"Event:zvtxGT10/Run:%d",runNumber));
242 fCounters.Count(Form(
"Event:PrimaryV/Run:%d",runNumber));
248 fCounters.Count(Form(
"Event:PileUp/Run:%d/Multiplicity:%d",runNumber,multiplicity));
250 fCounters.Count(Form(
"Event:PileUp/Run:%d",runNumber));
256 fCounters.Count(Form(
"Event:countForNorm/Run:%d/Multiplicity:%d",runNumber,multiplicity));
258 fCounters.Count(Form(
"Event:countForNorm/Run:%d",runNumber));
263 Int_t trkEntries = (Int_t)event->GetNumberOfTracks();
264 for(Int_t i=0;i<trkEntries&&!flag03;i++){
265 AliAODTrack *track=(AliAODTrack*)event->GetTrack(i);
266 if((track->Pt()>0.3)&&(!flag03)){
268 fCounters.Count(Form(
"Event:Candles0.3/Run:%d/Multiplicity:%d",runNumber,multiplicity));
270 fCounters.Count(Form(
"Event:Candles0.3/Run:%d",runNumber));
276 if(!(v0A&&v0B)&&(flag03)){
278 fCounters.Count(Form(
"Event:!V0A&Candle03/Run:%d/Multiplicity:%d",runNumber,multiplicity));
280 fCounters.Count(Form(
"Event:!V0A&Candle03/Run:%d",runNumber));
282 if(!(v0A&&v0B)&&flagPV){
284 fCounters.Count(Form(
"Event:!V0A&PrimaryV/Run:%d/Multiplicity:%d",runNumber,multiplicity));
286 fCounters.Count(Form(
"Event:!V0A&PrimaryV/Run:%d",runNumber));
294 Int_t ntracks=
event->GetNumberOfTracks();
299 AliESDEvent *ESDevent=(AliESDEvent*)event;
300 const AliMultiplicity *alimult = ESDevent->GetMultiplicity();
301 nSPD = alimult->GetNumberOfTracklets();
304 AliAODEvent *aodEvent =(AliAODEvent*)event;
305 AliAODTracklets *trklets=aodEvent->GetTracklets();
306 nSPD = trklets->GetNumberOfTracklets();
311 Int_t runNumber =
event->GetRunNumber();
316 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
318 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d",runNumber));
319 for(Int_t i=0;i<nCand;i++){
321 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
323 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d",runNumber));
327 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
329 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d",runNumber));
330 for(Int_t i=0;i<nCand;i++){
332 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
334 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d",runNumber));
344 selection.Form(
"event:%s",candle.Data());
345 TH1D* histoneD =
fCounters.Get(
"run",selection.Data());
348 if(drawHist)histoneD->DrawClone();
357 name.Form(
"%s/%s",candle1.Data(),candle2.Data());
361 den->SetTitle(candle2.Data());
362 den->SetName(candle2.Data());
363 num->Divide(num,den,1,1,
"B");
364 num->SetTitle(name.Data());
365 num->SetName(name.Data());
375 TString selection=
"event:";
376 selection.Append(candle);
377 return fCounters.GetSum(selection.Data());
402 return GetSum(
"countForNorm")-noVtxzGT10;
406 TString listofruns =
fCounters.GetKeyWords(
"RUN");
407 if(!listofruns.Contains(Form(
"%d",runnumber))){
408 printf(
"WARNING: %d is not a valid run number\n",runnumber);
412 TString
suffix;suffix.Form(
"/RUN:%d",runnumber);
413 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
414 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
415 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
416 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
418 return GetSum(tbc.Data())-noVtxzGT10;
425 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
429 TString listofruns =
fCounters.GetKeyWords(
"Multiplicity");
431 Int_t nmultbins = maxmultiplicity - minmultiplicity;
432 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
433 for (Int_t ibin=0; ibin<=nmultbins; ibin++) {
435 if(!listofruns.Contains(Form(
"%d",ibin+minmultiplicity))){
439 TString
suffix;suffix.Form(
"/Multiplicity:%d",ibin+minmultiplicity);
440 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
441 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
442 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
443 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
444 sumnoPV +=
GetSum(noPV.Data());
445 sumZvtx +=
GetSum(zvtx.Data());
446 sumPv +=
GetSum(pV.Data());
447 sumEvtNorm +=
GetSum(tbc.Data());
449 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
450 return sumEvtNorm - noVtxzGT10;
458 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
462 TString listofruns =
fCounters.GetKeyWords(
"Multiplicity");
464 for (Int_t ibin=minmultiplicity; ibin<=maxmultiplicity; ibin++) {
466 if(!listofruns.Contains(Form(
"%d",ibin))){
470 TString
suffix=Form(
"/Multiplicity:%d",ibin);
471 TString name=Form(
"%s%s",candle.Data(),suffix.Data());
472 sum +=
GetSum(name.Data());
483 selection.Form(
"event:noPrimaryV");
484 TH1D* hnoPrimV =
fCounters.Get(
"run",selection.Data());
487 selection.Form(
"event:zvtxGT10");
488 TH1D* hzvtx=
fCounters.Get(
"run",selection.Data());
491 selection.Form(
"event:PrimaryV");
492 TH1D* hPrimV =
fCounters.Get(
"run",selection.Data());
495 hzvtx->Multiply(hnoPrimV);
496 hzvtx->Divide(hPrimV);
498 selection.Form(
"event:countForNorm");
499 TH1D* hCountForNorm =
fCounters.Get(
"run",selection.Data());
500 hCountForNorm->Sumw2();
502 hCountForNorm->Add(hzvtx,-1.);
505 selection.Form(
"event:triggered");
506 TH1D* htriggered =
fCounters.Get(
"run",selection.Data());
508 hCountForNorm->Divide(htriggered);
511 hCountForNorm->DrawClone();
512 return hCountForNorm;
518 Int_t multiplicity = 0;
519 AliAODEvent *eventAOD = (AliAODEvent*)event;
520 AliAODTracklets * aodTracklets = (AliAODTracklets*)eventAOD->GetTracklets();
521 Int_t ntracklets = (Int_t)aodTracklets->GetNumberOfTracklets();
522 for(Int_t i=0;i<ntracklets; i++){
523 Double_t theta = aodTracklets->GetTheta(i);
524 Double_t eta = -TMath::Log( TMath::Tan(theta/2.) );
ClassImp(AliAnalysisTaskTriggerRates) AliAnalysisTaskTriggerRates
TH2F * fHistTrackFilterSpdMult
hist to store no of analysis candidates vs no of tracks in the event
void StoreCandidates(AliVEvent *, Int_t nCand=0, Bool_t flagFilter=kTRUE)
Bool_t fESD
internal counter
TH2F * fHistTrackFilterEvMult
TH2F * fHistTrackAnaSpdMult
hist to store no of filter candidates vs SPD multiplicity
Bool_t fMultiplicity
flag for ESD vs AOD
Int_t GetWhyRejection() const
TH1D * DrawAgainstRuns(TString candle="candid(filter)", Bool_t drawHist=kTRUE)
AliCounterCollection fCounters
void Add(const AliNormalizationCounter *)
TH2F * fHistTrackAnaEvMult
hist to store no of filter candidates vs no of tracks in the event
Int_t Multiplicity(AliVEvent *event)
Bool_t CountEventForNormalization() const
Double_t GetNEventsForNorm()
TH1D * DrawNEventsForNorm(Bool_t drawRatio=kFALSE)
virtual ~AliNormalizationCounter()
TH1D * DrawRatio(TString candle1="candid(filter)", TString candle2="triggered")
Bool_t IsEventRejectedDuePhysicsSelection() const
AliNormalizationCounter()
Long64_t Merge(TCollection *list)
Float_t fMultiplicityEtaRange
flag for multiplicity
Bool_t IsEventSelected(AliVEvent *event)
Double_t GetSum(TString candle="triggered")
TH2F * GetHist(Bool_t filtercuts=kTRUE, Bool_t spdtracklets=kTRUE, Bool_t drawHist=kFALSE)
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999)