31 fUseSecondaryMap(true),
32 fUseVertexBias(false),
33 fUseAcceptance(false),
34 fUseMergingEfficiency(false),
43 :
TNamed(
"fmdCorrector", title),
55 DGUARD(
fDebug, 3,
"Named CTOR of AliFMDCorrector: %s", title);
98 if (&o ==
this)
return *
this;
126 AliWarning(
"Secondary maps not used - BE CAREFUL");
128 AliWarning(
"Vertex bias not used");
130 AliWarning(
"Acceptance from dead-channels not used");
148 case 1: idx = 0;
break;
149 case 2: idx = 1 + (r ==
'I' || r ==
'i' ? 0 : 1);
break;
150 case 3: idx = 3 + (r ==
'I' || r ==
'i' ? 0 : 1);
break;
152 if (idx < 0 || idx >=
fRingHistos.GetEntries())
return 0;
160 Bool_t alsoUnderOver)
const 167 if (!num || !denom)
return;
169 Int_t first = (alsoUnderOver ? 0 : 1);
170 Int_t lastX = num->GetNbinsX() + (alsoUnderOver ? 1 : 0);
171 Int_t lastY = num->GetNbinsY() + (alsoUnderOver ? 1 : 0);
173 for (
Int_t ix = first; ix <= lastX; ix++) {
174 for (
Int_t iy = first; iy <= lastY; iy++) {
175 Int_t bin = num->GetBin(ix,iy);
176 Double_t c0 = num->GetBinContent(bin);
177 Double_t c1 = denom->GetBinContent(bin);
179 num->SetBinContent(bin,0);
180 num->SetBinError(bin, 0);
184 Double_t e0 = num->GetBinError(bin);
185 Double_t e1 = denom->GetBinError(bin);
187 Double_t e2 = (e0*e0*c1*c1 + e1*e1*c0*c0)/(c12*c12);
189 num->SetBinContent(bin, w);
190 num->SetBinError(bin, TMath::Sqrt(e2));
208 DGUARD(
fDebug, 1,
"Correct histograms of AliFMDCorrector");
215 Char_t r = (q == 0 ?
'I' :
'O');
222 AliWarning(Form(
"No secondary correction for FMDM%d%c " 223 "in vertex bin %d", d, r, uvb));
232 AliWarning(Form(
"No event %s vertex bias correction in vertex bin %d",
233 (r ==
'I' || r ==
'i' ?
"inner" :
"outer"), uvb));
242 AliWarning(Form(
"No acceptance correction for FMD%d%c in " 243 "vertex bin %d", d, r, uvb));
247 for (
Int_t i = 1; i <= h->GetNbinsX(); i++)
248 h->SetBinContent(i, h->GetNbinsY()+1, 1);
256 AliWarning(
"No merging efficiencies");
261 AliWarning(Form(
"No merging efficiency for FMD%d%c at vertex bin %d",
267 for (
Int_t ieta = 1; ieta <= h->GetNbinsX(); ieta++) {
268 Float_t c = sf->GetBinContent(ieta);
269 Float_t ec = sf->GetBinError(ieta);
271 for (
Int_t iphi = 1; iphi <= h->GetNbinsY(); iphi++) {
273 h->SetBinContent(ieta,iphi,0);
274 h->SetBinError(ieta,iphi,0);
278 Double_t m = h->GetBinContent(ieta, iphi) /
c;
279 Double_t em = h->GetBinError(ieta, iphi);
281 Double_t e = TMath::Sqrt(em * em + (m * ec) * (m * ec));
283 h->SetBinContent(ieta,iphi,m);
284 h->SetBinError(ieta,iphi,e);
306 DGUARD(
fDebug, 1,
"Scale histograms of AliFMDCorrector");
307 if (nEvents <= 0)
return;
308 TList* d =
static_cast<TList*
>(dir->FindObject(GetName()));
312 out->SetName(d->GetName());
322 THStack* sums =
new THStack(
"sums",
"Sums of ring results");
323 while ((o = static_cast<RingHistos*>(next()))) {
326 Warning(
"Terminate",
"No density from %s", o->
GetName());
331 sum->Scale(1.,
"width");
333 sum->SetDirectory(0);
334 sum->SetYTitle(
"#sum N_{ch,primary}");
353 d->SetName(GetName());
369 while ((o = static_cast<RingHistos*>(next()))) {
374 #define PF(N,V,...) \ 375 AliForwardUtil::PrintField(N,V, ## __VA_ARGS__) 376 #define PFB(N,FLAG) \ 378 AliForwardUtil::PrintName(N); \ 379 std::cout << std::boolalpha << (FLAG) << std::noboolalpha << std::endl; \ 381 #define PFV(N,VALUE) \ 383 AliForwardUtil::PrintName(N); \ 384 std::cout << (VALUE) << std::endl; } while(false) 396 gROOT->IncreaseDirLevel();
401 gROOT->DecreaseDirLevel();
426 "#sum N_{ch,primary}/(#Delta#eta#Delta#phi)",
427 200, -4, 6, (r ==
'I' || r ==
'i' ? 20 : 40),
433 fDensity->SetYTitle(
"#phi [radians]");
434 fDensity->SetZTitle(
"Primary N_{ch} density");
460 if (&o ==
this)
return *
this;
505 if (density) density->Scale(1./nEvents);
TH2D * GetCorrection(UShort_t d, Char_t r, Double_t v) const
RingHistos & operator=(const RingHistos &o)
TH2D * GetCorrection(Char_t r, Double_t v) const
RingHistos * GetRingHistos(UShort_t d, Char_t r) const
virtual ~AliFMDCorrector()
TH2D * GetCorrection(UShort_t d, Char_t r, Double_t v) const
virtual void CreateOutputObjects(TList *dir)
virtual void Print(Option_t *option="") const
const char * GetName() const
virtual void Terminate(const TList *dir, TList *output, Int_t nEvents)
void Terminate(TList *dir, Int_t nEvents)
virtual Bool_t Correct(AliForwardUtil::Histos &hists, UShort_t vtxBin)
void CreateOutputObjects(TList *dir)
TH1D * GetCorrection(UShort_t d, Char_t r, Double_t v) const
Bool_t HasOverflow() const
const AliFMDCorrMergingEfficiency * GetMergingEfficiency() const
AliFMDCorrector & operator=(const AliFMDCorrector &)
Double_t nEvents
plot quality messages
#define DGUARD(L, N, F,...)
static void PrintTask(const TObject &o)
TH2D * Get(UShort_t d, Char_t r) const
static TObject * MakeParameter(const char *name, UShort_t value)
TH1 * GetOutputHist(const TList *d, const char *name) const
RingHistos & operator=(const RingHistos &o)
void DivideMap(TH2 *num, const TH2 *denom, Bool_t alsoUnderOver=false) const
const AliFMDCorrAcceptance * GetAcceptance() const
const AliFMDCorrVertexBias * GetVertexBias() const
virtual void SetupForData(const TAxis &etaAxis)
TList * DefineOutputList(TList *d) const
const AliFMDCorrSecondaryMap * GetSecondaryMap() const
Bool_t fUseMergingEfficiency
static AliForwardCorrectionManager & Instance()
TList * GetOutputList(const TList *d) const