29 #include <AliESDEvent.h> 30 #include <AliESDtrack.h> 31 #include <AliAODEvent.h> 32 #include <AliAODMCHeader.h> 33 #include <AliAODVZERO.h> 34 #include <AliVParticle.h> 35 #include <AliTriggerAnalysis.h> 39 #include <TObjArray.h> 42 #include <AliPhysicsSelection.h> 43 #include <AliMultiplicity.h> 54 fMultiplicity(kFALSE),
55 fMultiplicityEtaRange(1.0),
57 fSpherocitySteps(100.),
58 fHistTrackFilterEvMult(0),
59 fHistTrackAnaEvMult(0),
60 fHistTrackFilterSpdMult(0),
61 fHistTrackAnaSpdMult(0),
63 fHistGenVertexZRecoPV(0),
118 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)");
135 fHistGenVertexZ=
new TH1F(
"hGenVertexZ",
"generated z vertex ; z_{vertex}^{MC} (cm) ; counts",600,-30,30);
136 fHistGenVertexZRecoPV=
new TH1F(
"hGenVertexZRecoPV",
"generated z vertex (events with reconstructed vertex); z_{vertex}^{MC} (cm) ; counts",600,-30,30);
137 fHistRecoVertexZ=
new TH1F(
"hRecoVertexZ",
"reconstructed z vertex; z_{vertex}^{rec} (cm) ; counts",600,-30,30);
143 if (list->IsEmpty())
return 0;
147 while ((obj = next())) {
152 AliError(Form(
"object named %s is not AliNormalizationCounter! Skipping it.", counter->GetName()));
193 Int_t runNumber =
event->GetRunNumber();
200 if(!eventESD){AliError(
"ESD event not available");
return;}
201 if(mc&&event->GetEventType() != 0)
return;
203 if(!(event->GetEventType() == 7||
event->GetEventType() == 0))
return;
205 FillCounters(
"triggered",runNumber,multiplicity,spherocity);
208 AliTriggerAnalysis trAn;
209 AliAODVZERO* aodV0 = (AliAODVZERO*)event->GetVZEROData();
211 if(runNumber>=176326 && runNumber<=193766) isPP2012=kTRUE;
212 if(aodV0 && !isPP2012){
213 v0B = trAn.IsOfflineTriggerFired(eventESD , AliTriggerAnalysis::kV0C);
216 if(v0A&&v0B)
FillCounters(
"V0AND",runNumber,multiplicity,spherocity);
227 TString trigclass=eventAOD->GetFiredTriggerClasses();
228 if(trigclass.Contains(
"C0SMH-B-NOPF-ALLNOTRD")||trigclass.Contains(
"C0SMH-B-NOPF-ALL")){
229 FillCounters(
"PbPbC0SMH-B-NOPF-ALLNOTRD",runNumber,multiplicity,spherocity);
234 FillCounters(
"PrimaryV",runNumber,multiplicity,spherocity);
238 FillCounters(
"noPrimaryV",runNumber,multiplicity,spherocity);
242 FillCounters(
"zvtxGT10",runNumber,multiplicity,spherocity);
243 FillCounters(
"PrimaryV",runNumber,multiplicity,spherocity);
247 FillCounters(
"PileUp",runNumber,multiplicity,spherocity);
252 FillCounters(
"countForNorm",runNumber,multiplicity,spherocity);
256 AliAODMCHeader *mcHeader =
dynamic_cast<AliAODMCHeader*
>(eventAOD->GetList()->FindObject(AliAODMCHeader::StdBranchName()));
258 Double_t zMCVertex=mcHeader->GetVtxZ();
264 AliVVertex *vtrc = (AliVVertex*)event->GetPrimaryVertex();
265 if(vtrc && vtrc->GetNContributors()>0)
fHistRecoVertexZ->Fill(vtrc->GetZ());
269 Int_t trkEntries = (
Int_t)event->GetNumberOfTracks();
270 for(
Int_t i=0;i<trkEntries&&!flag03;i++){
271 AliAODTrack *track=(AliAODTrack*)event->GetTrack(i);
272 if((track->Pt()>0.3)&&(!flag03)){
273 FillCounters(
"Candles0.3",runNumber,multiplicity,spherocity);
279 if(!(v0A&&v0B)&&(flag03)){
280 FillCounters(
"!V0A&Candle03",runNumber,multiplicity,spherocity);
282 if(!(v0A&&v0B)&&flagPV){
283 FillCounters(
"!V0A&PrimaryV",runNumber,multiplicity,spherocity);
291 Int_t ntracks=
event->GetNumberOfTracks();
297 const AliMultiplicity *alimult = ESDevent->GetMultiplicity();
298 nSPD = alimult->GetNumberOfTracklets();
302 AliAODTracklets *trklets=aodEvent->GetTracklets();
303 nSPD = trklets->GetNumberOfTracklets();
308 Int_t runNumber =
event->GetRunNumber();
313 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
315 fCounters.Count(Form(
"Event:Candid(Filter)/Run:%d",runNumber));
316 for(
Int_t i=0;i<nCand;i++){
318 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
320 fCounters.Count(Form(
"Event:NCandid(Filter)/Run:%d",runNumber));
324 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
326 fCounters.Count(Form(
"Event:Candid(Analysis)/Run:%d",runNumber));
327 for(
Int_t i=0;i<nCand;i++){
329 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d/Multiplicity:%d",runNumber,multiplicity));
331 fCounters.Count(Form(
"Event:NCandid(Analysis)/Run:%d",runNumber));
341 selection.Form(
"event:%s",candle.Data());
345 if(drawHist)histoneD->DrawClone();
354 name.Form(
"%s/%s",candle1.Data(),candle2.Data());
358 den->SetTitle(candle2.Data());
359 den->SetName(candle2.Data());
360 num->Divide(num,den,1,1,
"B");
361 num->SetTitle(name.Data());
362 num->SetName(name.Data());
373 selection.Append(candle);
374 return fCounters.GetSum(selection.Data());
399 return GetSum(
"countForNorm")-noVtxzGT10;
404 if(!listofruns.Contains(Form(
"%d",runnumber))){
405 printf(
"WARNING: %d is not a valid run number\n",runnumber);
410 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
411 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
412 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
413 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
415 return GetSum(tbc.Data())-noVtxzGT10;
422 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
428 Int_t nmultbins = maxmultiplicity - minmultiplicity;
429 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
430 for (
Int_t ibin=0; ibin<=nmultbins; ibin++) {
432 if(!listofruns.Contains(Form(
"%d",ibin+minmultiplicity))){
436 TString suffix;suffix.Form(
"/Multiplicity:%d",ibin+minmultiplicity);
437 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
438 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
439 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
440 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
441 sumnoPV +=
GetSum(noPV.Data());
442 sumZvtx +=
GetSum(zvtx.Data());
443 sumPv +=
GetSum(pV.Data());
444 sumEvtNorm +=
GetSum(tbc.Data());
446 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
447 return sumEvtNorm - noVtxzGT10;
453 AliInfo(
"You must activate both multiplicity and spherocity in the counters to use this method!");
459 TObjArray* arr=listofruns2.Tokenize(
",");
460 Int_t nSphVals=arr->GetEntries();
462 Int_t nmultbins = maxmultiplicity - minmultiplicity;
465 Int_t nstbins = maxSphToInteger - minSphToInteger;
466 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
467 for (
Int_t ibin=0; ibin<=nmultbins; ibin++) {
468 if(!listofruns.Contains(Form(
"%d",ibin+minmultiplicity)))
continue;
469 for (
Int_t ibins=0; ibins<nstbins; ibins++) {
471 for(
Int_t j=0; j<nSphVals; j++)
if((((TObjString*)arr->At(j))->String()).Atoi()==(ibins+minSphToInteger)) analyze=kTRUE;
472 if(!analyze)
continue;
473 if(listofruns2.Contains(
",") && !listofruns2.Contains(Form(
"%d",ibins+minSphToInteger)))
continue;
474 TString suffix;suffix.Form(
"/Multiplicity:%d/Spherocity:%d",ibin+minmultiplicity,ibins+minSphToInteger);
475 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
476 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
477 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
478 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
479 sumnoPV +=
GetSum(noPV.Data());
480 sumZvtx +=
GetSum(zvtx.Data());
481 sumPv +=
GetSum(pV.Data());
482 sumEvtNorm +=
GetSum(tbc.Data());
486 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
487 return sumEvtNorm - noVtxzGT10;
494 AliInfo(
"Sorry, you didn't activate the sphericity in the counter!");
500 Int_t nSphVals=arr->GetEntries();
504 Int_t nstbins = maxSphToInteger - minSphToInteger;
505 Double_t sumnoPV=0., sumZvtx=0., sumPv=0., sumEvtNorm=0.;
506 for (
Int_t ibin=0; ibin<nstbins; ibin++) {
508 for(
Int_t j=0; j<nSphVals; j++)
if((((TObjString*)arr->At(j))->String()).Atoi()==(ibin+minSphToInteger)) analyze=kTRUE;
509 if(!analyze)
continue;
511 TString suffix;suffix.Form(
"/Spherocity:%d",ibin+minSphToInteger);
512 TString zvtx;zvtx.Form(
"zvtxGT10%s",suffix.Data());
513 TString noPV;noPV.Form(
"noPrimaryV%s",suffix.Data());
514 TString pV;pV.Form(
"PrimaryV%s",suffix.Data());
515 TString tbc;tbc.Form(
"countForNorm%s",suffix.Data());
516 sumnoPV +=
GetSum(noPV.Data());
517 sumZvtx +=
GetSum(zvtx.Data());
518 sumPv +=
GetSum(pV.Data());
519 sumEvtNorm +=
GetSum(tbc.Data());
522 Double_t noVtxzGT10 = sumPv>0. ? sumnoPV * sumZvtx / sumPv : 0.;
523 return sumEvtNorm - noVtxzGT10;
530 AliInfo(
"Sorry, you didn't activate the multiplicity in the counter!");
536 for (
Int_t ibin=minmultiplicity; ibin<=maxmultiplicity; ibin++) {
538 if(!listofruns.Contains(Form(
"%d",ibin))){
543 TString name=Form(
"%s%s",candle.Data(),suffix.Data());
544 sum +=
GetSum(name.Data());
555 selection.Form(
"event:noPrimaryV");
559 selection.Form(
"event:zvtxGT10");
563 selection.Form(
"event:PrimaryV");
567 hzvtx->Multiply(hnoPrimV);
568 hzvtx->Divide(hPrimV);
570 selection.Form(
"event:countForNorm");
572 hCountForNorm->Sumw2();
574 hCountForNorm->Add(hzvtx,-1.);
577 selection.Form(
"event:triggered");
580 hCountForNorm->Divide(htriggered);
583 hCountForNorm->DrawClone();
584 return hCountForNorm;
590 Int_t multiplicity = 0;
592 AliAODTracklets * aodTracklets = (AliAODTracklets*)eventAOD->GetTracklets();
593 Int_t ntracklets = (
Int_t)aodTracklets->GetNumberOfTracklets();
594 for(
Int_t i=0;i<ntracklets; i++){
595 Double_t theta = aodTracklets->GetTheta(i);
596 Double_t eta = -TMath::Log( TMath::Tan(theta/2.) );
611 fCounters.Count(Form(
"Event:%s/Run:%d/Multiplicity:%d",name.Data(),runNumber,multiplicity));
613 fCounters.Count(Form(
"Event:%s/Run:%d/Multiplicity:%d/Spherocity:%d",name.Data(),runNumber,multiplicity,sphToInteger));
615 fCounters.Count(Form(
"Event:%s/Run:%d/Spherocity:%d",name.Data(),runNumber,sphToInteger));
617 fCounters.Count(Form(
"Event:%s/Run:%d",name.Data(),runNumber));
TH1F * fHistRecoVertexZ
histo of generated z vertex for events with reco vert
TH2F * fHistTrackFilterSpdMult
hist to store no of analysis candidates vs no of tracks in the event
TH1F * fHistGenVertexZ
hist to store no of analysis candidates vs SPD multiplicity
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")
TH1F * fHistGenVertexZRecoPV
histo of generated z vertex
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.)
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)