29 #include <AliESDEvent.h>
30 #include <AliESDtrack.h>
31 #include <AliAODEvent.h>
32 #include <AliAODVZERO.h>
33 #include <AliVParticle.h>
34 #include <AliTriggerAnalysis.h>
38 #include <TObjArray.h>
41 #include <AliPhysicsSelection.h>
42 #include <AliMultiplicity.h>
53 fMultiplicity(kFALSE),
54 fMultiplicityEtaRange(1.0),
56 fSpherocitySteps(100.),
57 fHistTrackFilterEvMult(0),
58 fHistTrackAnaEvMult(0),
59 fHistTrackFilterSpdMult(0),
60 fHistTrackAnaSpdMult(0)
70 fMultiplicity(kFALSE),
71 fMultiplicityEtaRange(1.0),
73 fSpherocitySteps(100.),
74 fHistTrackFilterEvMult(0),
75 fHistTrackAnaEvMult(0),
76 fHistTrackFilterSpdMult(0),
77 fHistTrackAnaSpdMult(0)
108 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)");
113 fHistTrackFilterEvMult=
new TH2F(
"FiltCandidvsTracksinEv",
"FiltCandidvsTracksinEv",10000,-0.5,9999.5,200,-0.5,199.5);
116 fHistTrackAnaEvMult=
new TH2F(
"AnaCandidvsTracksinEv",
"AnaCandidvsTracksinEv",10000,-0.5,9999.5,100,-0.5,99.5);
119 fHistTrackFilterSpdMult=
new TH2F(
"FilterCandidvsSpdMult",
"FilterCandidvsSpdMult",5000,-0.5,4999.5,200,-0.5,199.5);
122 fHistTrackAnaSpdMult=
new TH2F(
"AnaCandidvsSpdMult",
"AnaCandidvsSpdMult",5000,-0.5,4999.5,100,-0.5,99.5);
130 if (list->IsEmpty())
return 0;
133 const TObject* obj = 0x0;
134 while ((obj = next())) {
139 AliError(Form(
"object named %s is not AliNormalizationCounter! Skipping it.", counter->GetName()));
173 Bool_t flag03=kFALSE;
174 Bool_t flagPV=kFALSE;
177 Int_t runNumber =
event->GetRunNumber();
183 AliESDEvent *eventESD = (AliESDEvent*)event;
184 if(!eventESD){AliError(
"ESD event not available");
return;}
185 if(mc&&event->GetEventType() != 0)
return;
187 if(!(event->GetEventType() == 7||
event->GetEventType() == 0))
return;
189 FillCounters(
"triggered",runNumber,multiplicity,spherocity);
192 AliTriggerAnalysis trAn;
193 AliAODVZERO* aodV0 = (AliAODVZERO*)event->GetVZEROData();
194 Bool_t isPP2012 = kFALSE;
195 if(runNumber>=176326 && runNumber<=193766) isPP2012=kTRUE;
196 if(aodV0 && !isPP2012){
197 v0B = trAn.IsOfflineTriggerFired(eventESD , AliTriggerAnalysis::kV0C);
200 if(v0A&&v0B)
FillCounters(
"V0AND",runNumber,multiplicity,spherocity);
210 AliAODEvent *eventAOD = (AliAODEvent*)event;
211 TString trigclass=eventAOD->GetFiredTriggerClasses();
212 if(trigclass.Contains(
"C0SMH-B-NOPF-ALLNOTRD")||trigclass.Contains(
"C0SMH-B-NOPF-ALL")){
213 FillCounters(
"PbPbC0SMH-B-NOPF-ALLNOTRD",runNumber,multiplicity,spherocity);
218 FillCounters(
"PrimaryV",runNumber,multiplicity,spherocity);
222 FillCounters(
"noPrimaryV",runNumber,multiplicity,spherocity);
226 FillCounters(
"zvtxGT10",runNumber,multiplicity,spherocity);
227 FillCounters(
"PrimaryV",runNumber,multiplicity,spherocity);
231 FillCounters(
"PileUp",runNumber,multiplicity,spherocity);
236 FillCounters(
"countForNorm",runNumber,multiplicity,spherocity);
241 Int_t trkEntries = (Int_t)event->GetNumberOfTracks();
242 for(Int_t i=0;i<trkEntries&&!flag03;i++){
243 AliAODTrack *track=(AliAODTrack*)event->GetTrack(i);
244 if((track->Pt()>0.3)&&(!flag03)){
245 FillCounters(
"Candles0.3",runNumber,multiplicity,spherocity);
251 if(!(v0A&&v0B)&&(flag03)){
252 FillCounters(
"!V0A&Candle03",runNumber,multiplicity,spherocity);
254 if(!(v0A&&v0B)&&flagPV){
255 FillCounters(
"!V0A&PrimaryV",runNumber,multiplicity,spherocity);
263 Int_t ntracks=
event->GetNumberOfTracks();
268 AliESDEvent *ESDevent=(AliESDEvent*)event;
269 const AliMultiplicity *alimult = ESDevent->GetMultiplicity();
270 nSPD = alimult->GetNumberOfTracklets();
273 AliAODEvent *aodEvent =(AliAODEvent*)event;
274 AliAODTracklets *trklets=aodEvent->GetTracklets();
275 nSPD = trklets->GetNumberOfTracklets();
280 Int_t runNumber =
event->GetRunNumber();
285 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
287 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d",runNumber));
288 for(Int_t i=0;i<nCand;i++){
290 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
292 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d",runNumber));
296 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
298 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d",runNumber));
299 for(Int_t i=0;i<nCand;i++){
301 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
303 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d",runNumber));
313 selection.Form(
"event:%s",candle.Data());
314 TH1D* histoneD =
fCounters.Get(
"run",selection.Data());
317 if(drawHist)histoneD->DrawClone();
326 name.Form(
"%s/%s",candle1.Data(),candle2.Data());
330 den->SetTitle(candle2.Data());
331 den->SetName(candle2.Data());
332 num->Divide(num,den,1,1,
"B");
333 num->SetTitle(name.Data());
334 num->SetName(name.Data());
344 TString selection=
"event:";
345 selection.Append(candle);
346 return fCounters.GetSum(selection.Data());
371 return GetSum(
"countForNorm")-noVtxzGT10;
375 TString listofruns =
fCounters.GetKeyWords(
"RUN");
376 if(!listofruns.Contains(Form(
"%d",runnumber))){
377 printf(
"WARNING: %d is not a valid run number\n",runnumber);
381 TString
suffix;suffix.Form(
"/RUN:%d",runnumber);
382 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
383 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
384 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
385 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
387 return GetSum(tbc.Data())-noVtxzGT10;
394 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
398 TString listofruns =
fCounters.GetKeyWords(
"Multiplicity");
400 Int_t nmultbins = maxmultiplicity - minmultiplicity;
401 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
402 for (Int_t ibin=0; ibin<=nmultbins; ibin++) {
404 if(!listofruns.Contains(Form(
"%d",ibin+minmultiplicity))){
408 TString
suffix;suffix.Form(
"/Multiplicity:%d",ibin+minmultiplicity);
409 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
410 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
411 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
412 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
413 sumnoPV +=
GetSum(noPV.Data());
414 sumZvtx +=
GetSum(zvtx.Data());
415 sumPv +=
GetSum(pV.Data());
416 sumEvtNorm +=
GetSum(tbc.Data());
418 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
419 return sumEvtNorm - noVtxzGT10;
425 AliInfo(
"You must activate both multiplicity and spherocity in the counters to use this method!");
429 TString listofruns =
fCounters.GetKeyWords(
"Multiplicity");
430 TString listofruns2 =
fCounters.GetKeyWords(
"Spherocity");
431 TObjArray* arr=listofruns2.Tokenize(
",");
432 Int_t nSphVals=arr->GetEntries();
434 Int_t nmultbins = maxmultiplicity - minmultiplicity;
437 Int_t nstbins = maxSphToInteger - minSphToInteger;
438 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
439 for (Int_t ibin=0; ibin<=nmultbins; ibin++) {
440 if(!listofruns.Contains(Form(
"%d",ibin+minmultiplicity)))
continue;
441 for (Int_t ibins=0; ibins<nstbins; ibins++) {
442 Bool_t analyze=kFALSE;
443 for(Int_t j=0; j<nSphVals; j++)
if((((TObjString*)arr->At(j))->String()).Atoi()==(ibins+minSphToInteger)) analyze=kTRUE;
444 if(!analyze)
continue;
445 if(listofruns2.Contains(
",") && !listofruns2.Contains(Form(
"%d",ibins+minSphToInteger)))
continue;
446 TString
suffix;suffix.Form(
"/Multiplicity:%d/Spherocity:%d",ibin+minmultiplicity,ibins+minSphToInteger);
447 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
448 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
449 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
450 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
451 sumnoPV +=
GetSum(noPV.Data());
452 sumZvtx +=
GetSum(zvtx.Data());
453 sumPv +=
GetSum(pV.Data());
454 sumEvtNorm +=
GetSum(tbc.Data());
458 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
459 return sumEvtNorm - noVtxzGT10;
466 AliInfo(
"Sorry, you didn't activate the sphericity in the counter!");
470 TString listofruns =
fCounters.GetKeyWords(
"Spherocity");
471 TObjArray* arr=listofruns.Tokenize(
",");
472 Int_t nSphVals=arr->GetEntries();
476 Int_t nstbins = maxSphToInteger - minSphToInteger;
477 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
478 for (Int_t ibin=0; ibin<nstbins; ibin++) {
479 Bool_t analyze=kFALSE;
480 for(Int_t j=0; j<nSphVals; j++)
if((((TObjString*)arr->At(j))->String()).Atoi()==(ibin+minSphToInteger)) analyze=kTRUE;
481 if(!analyze)
continue;
483 TString
suffix;suffix.Form(
"/Spherocity:%d",ibin+minSphToInteger);
484 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
485 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
486 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
487 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
488 sumnoPV +=
GetSum(noPV.Data());
489 sumZvtx +=
GetSum(zvtx.Data());
490 sumPv +=
GetSum(pV.Data());
491 sumEvtNorm +=
GetSum(tbc.Data());
494 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
495 return sumEvtNorm - noVtxzGT10;
502 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
506 TString listofruns =
fCounters.GetKeyWords(
"Multiplicity");
508 for (Int_t ibin=minmultiplicity; ibin<=maxmultiplicity; ibin++) {
510 if(!listofruns.Contains(Form(
"%d",ibin))){
514 TString
suffix=Form(
"/Multiplicity:%d",ibin);
515 TString name=Form(
"%s%s",candle.Data(),suffix.Data());
516 sum +=
GetSum(name.Data());
527 selection.Form(
"event:noPrimaryV");
528 TH1D* hnoPrimV =
fCounters.Get(
"run",selection.Data());
531 selection.Form(
"event:zvtxGT10");
532 TH1D* hzvtx=
fCounters.Get(
"run",selection.Data());
535 selection.Form(
"event:PrimaryV");
536 TH1D* hPrimV =
fCounters.Get(
"run",selection.Data());
539 hzvtx->Multiply(hnoPrimV);
540 hzvtx->Divide(hPrimV);
542 selection.Form(
"event:countForNorm");
543 TH1D* hCountForNorm =
fCounters.Get(
"run",selection.Data());
544 hCountForNorm->Sumw2();
546 hCountForNorm->Add(hzvtx,-1.);
549 selection.Form(
"event:triggered");
550 TH1D* htriggered =
fCounters.Get(
"run",selection.Data());
552 hCountForNorm->Divide(htriggered);
555 hCountForNorm->DrawClone();
556 return hCountForNorm;
562 Int_t multiplicity = 0;
563 AliAODEvent *eventAOD = (AliAODEvent*)event;
564 AliAODTracklets * aodTracklets = (AliAODTracklets*)eventAOD->GetTracklets();
565 Int_t ntracklets = (Int_t)aodTracklets->GetNumberOfTracklets();
566 for(Int_t i=0;i<ntracklets; i++){
567 Double_t theta = aodTracklets->GetTheta(i);
568 Double_t eta = -TMath::Log( TMath::Tan(theta/2.) );
583 fCounters.Count(Form(
"Event:%s/Run:%d/Multiplicity:%d",name.Data(),runNumber,multiplicity));
585 fCounters.Count(Form(
"Event:%s/Run:%d/Multiplicity:%d/Spherocity:%d",name.Data(),runNumber,multiplicity,sphToInteger));
587 fCounters.Count(Form(
"Event:%s/Run:%d/Spherocity:%d",name.Data(),runNumber,sphToInteger));
589 fCounters.Count(Form(
"Event:%s/Run:%d",name.Data(),runNumber));
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
Double_t fSpherocitySteps
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")
void StoreEvent(AliVEvent *, AliRDHFCuts *, Bool_t mc=kFALSE, Int_t multiplicity=-9999, Double_t spherocity=-99.)
ClassImp(AliAnalysisTaskCRC) AliAnalysisTaskCRC
TH2F * GetHist(Bool_t filtercuts=kTRUE, Bool_t spdtracklets=kTRUE, Bool_t drawHist=kFALSE)
Double_t GetNEventsForNormSpheroOnly(Double_t minspherocity, Double_t maxspherocity)
void FillCounters(TString name, Int_t runNumber, Int_t multiplicity, Double_t spherocity)