2 #include "AliMCEvent.h"
3 #include "AliESDEvent.h"
6 #include "AliGenEventHeader.h"
13 #include <TClonesArray.h>
47 DGUARD(
fDebug, 2,
"Create output objects w/MC hits (%p)", dir);
53 while ((o = static_cast<RingHistos*>(next()))) {
71 DGUARD(
fDebug, 5,
"Reset for event w/MC hits (%p)", &mcInput);
72 AliMCEvent& mc =
const_cast<AliMCEvent&
>(mcInput);
73 AliHeader* header = mc.Header();
74 AliStack* stack = mc.Stack();
75 AliGenEventHeader* genHeader = header->GenEventHeader();
77 genHeader->PrimaryVertex(
fIp);
87 const AliMCEvent& mcInput,
90 DGUARD(
fDebug, 5,
"Process an event for MC hits (%p,%p)",
94 AliESDFMD* esdFMD = esdInput.GetFMDData();
95 if (!esdFMD)
return true;
115 Char_t r = (q == 0 ?
'I' :
'O');
126 if (totAll > 0) h->
FillMC(0, esdEta, totAll);
127 if (totPrim > 0) h->
FillMC(1, esdEta, totPrim);
128 if (totSec > 0) h->
FillMC(2, esdEta, totSec);
136 while ((hit = static_cast<AliFMDMCTrackELoss::Hit*>(next()))) {
202 fHist =
Make(
"eloss",
"#sum#Delta_{true} of all",
203 eAxis, maxDE, nDEbins, useIncrBin);
204 fPrimary =
Make(
"primary",
"#sum#Delta_{true} of primaries",
205 eAxis, maxDE, nDEbins, useIncrBin);
206 fPrimary->SetMarkerStyle(24);
207 fPrimary->SetMarkerSize(fPrimary->GetMarkerSize()*1.2);
208 fSecondary =
Make(
"secondary",
"#sum#Delta_{true} of secondaries",
209 eAxis, maxDE, nDEbins, useIncrBin);
210 fSecondary->SetMarkerStyle(25);
211 fSecondary->SetMarkerSize(fSecondary->GetMarkerSize()*1.2);
212 fHist->SetXTitle(
"#Delta_{true}");
213 fSecondary->SetXTitle(
"#Delta_{true}");
214 fPrimary->SetXTitle(
"#Delta_{true}");
217 fList->Add(fPrimary);
218 fList->Add(fSecondary);
228 case 0: fHist->Fill(eta, mult);
break;
229 case 1: fPrimary->Fill(eta, mult);
break;
230 case 2: fSecondary->Fill(eta, mult);
break;
257 TObjArray* all = FitSlices(dir,
"eloss", lowCut, nParticles, minEntries,
258 minusBins, relErrorCut, chi2nuCut, minWeight,
259 regCut, residuals,
false, 0);
260 TObjArray* prim = FitSlices(dir,
"primary", lowCut, nParticles, minEntries,
261 minusBins, relErrorCut, chi2nuCut, minWeight,
262 regCut, residuals,
false, 0);
263 TObjArray* sec = FitSlices(dir,
"secondary", lowCut, nParticles,
264 minEntries, minusBins, relErrorCut, chi2nuCut,
265 minWeight, regCut, residuals,
false, 0);
266 if (!all || !prim || !sec) {
267 AliWarningF(
"Failed to get results for all(%p), primary(%p), and/or "
268 "secondary(%p)", all, prim, sec);
276 Int_t nPrim = prim->GetEntriesFast();
278 for (
Int_t i = 0; i < nPrim; i++) {
279 TH1* h =
static_cast<TH1*
>(prim->At(i));
282 TAxis* xAxis = h->GetXaxis();
284 if (xAxis->GetXbins()->GetArray())
285 hh =
new TH2D(h->GetName(), h->GetTitle(),
286 xAxis->GetNbins(), xAxis->GetXbins()->GetArray(),
289 hh =
new TH2D(h->GetName(), h->GetTitle(),
290 xAxis->GetNbins(), xAxis->GetXmin(), xAxis->GetXmax(),
292 hh->GetYaxis()->SetBinLabel(1,
"Primary");
293 hh->GetYaxis()->SetBinLabel(2,
"Secondary");
294 hh->GetYaxis()->SetBinLabel(3,
"All");
295 hh->GetXaxis()->SetTitle(
"#eta");
298 for (
Int_t i = 0; i < nPrim; i++) {
299 TH2* h =
static_cast<TH2*
>(out->At(i));
302 TH1* hp =
static_cast<TH1*
>(prim->At(i));
303 TH1* hs =
static_cast<TH1*
>(sec->At(i));
304 TH1* ha =
static_cast<TH1*
>(all->At(i));
305 TH1* hh[] = { hp, hs, ha };
306 for (
Int_t j = 0; j < 3; j++) {
310 for (
Int_t k = 1; k <= ph->GetNbinsX(); k++) {
313 h->SetBinContent(k, j+1, c);
314 h->SetBinError(k, j+1, e);
318 TList* l = GetOutputList(dir);
321 out->SetName(
"comparative");
EResidualMethod fResidualMethod
Double_t BetaGamma() const
Bool_t fUseIncreasingBins
TH2 * GetBetaGammadEdx() const
virtual Bool_t PreEvent(const AliMCEvent &mcInput)
virtual void SetupForData(const TAxis &eAxis, const TAxis &cAxis, Double_t maxDE=10, Int_t nDEbins=300, Bool_t useIncrBin=true)
virtual void Scale(TH1 *dist) const
virtual void Scale(TH1 *dist) const
static const Spec & GetdEAxis()
AliFMDFloatMap & GetPrimaries()
TH2 * GetBetaGammaEta() const
virtual Bool_t Event(const AliESDEvent &esdInput, const AliMCEvent &mcInput, Double_t cent=-1)
virtual void CreateOutputObjects(TList *dir)
AliFMDFloatMap & GetEta()
AliFMDMCTrackELoss fTracker
virtual void FillMC(UShort_t flag, Double_t eta, Double_t mult)
void FillBinArray(TArrayD &a) const
TClonesArray * GetHits() const
Class to encode the energy loss and path length of a particle into track reference bits...
#define DGUARD(L, N, F,...)
TH1 * Make(UShort_t d, Char_t r)
Bool_t Calculate(const AliESDFMD &esd, const AliMCEvent &event, const TVector3 &ip, Double_t cent)
TArrayD MakeIncreasingAxis(Int_t nBins, Double_t low, Double_t high) const
AliFMDFloatMap & GetSecondaries()
virtual ~AliFMDMCTrackInspector()
RingHistos * GetRingHistos(UShort_t d, Char_t r) const
void CreateOutputObjects(TList *list)
AliFMDEnergyFitter::RingHistos * CreateRingHistos(UShort_t d, Char_t r) const
virtual Bool_t PostEvent()
TObjArray * Fit(TList *dir, Double_t lowCut, UShort_t nParticles, UShort_t minEntries, UShort_t minusBins, Double_t relErrorCut, Double_t chi2nuCut, Double_t minWeight, Double_t regCut, EResidualMethod residuals) const
virtual void CreateOutputObjects(TList *dir)
AliFMDFloatMap & GetAll()