1 #include "AliFMDCorrections.h"
6 #include "AliFMDAnaParameters.h"
10 ClassImp(AliFMDCorrections)
15 //____________________________________________________________________
16 AliFMDCorrections::AliFMDCorrections()
23 //____________________________________________________________________
24 AliFMDCorrections::AliFMDCorrections(const char* title)
25 : TNamed("fmdCorrections", title),
30 fRingHistos.SetName(GetName());
31 fRingHistos.Add(new RingHistos(1, 'I'));
32 fRingHistos.Add(new RingHistos(2, 'I'));
33 fRingHistos.Add(new RingHistos(2, 'O'));
34 fRingHistos.Add(new RingHistos(3, 'I'));
35 fRingHistos.Add(new RingHistos(3, 'O'));
38 //____________________________________________________________________
39 AliFMDCorrections::AliFMDCorrections(const AliFMDCorrections& o)
45 TIter next(&o.fRingHistos);
47 while ((obj = next())) fRingHistos.Add(obj);
50 //____________________________________________________________________
51 AliFMDCorrections::~AliFMDCorrections()
56 //____________________________________________________________________
58 AliFMDCorrections::operator=(const AliFMDCorrections& o)
62 fMultCut = o.fMultCut;
65 TIter next(&o.fRingHistos);
67 while ((obj = next())) fRingHistos.Add(obj);
72 //____________________________________________________________________
73 AliFMDCorrections::RingHistos*
74 AliFMDCorrections::GetRingHistos(UShort_t d, Char_t r) const
78 case 1: idx = 0; break;
79 case 2: idx = 1 + (r == 'I' || r == 'i' ? 0 : 1); break;
80 case 3: idx = 3 + (r == 'I' || r == 'i' ? 0 : 1); break;
82 if (idx < 0 || idx >= fRingHistos.GetEntries()) return 0;
84 return static_cast<RingHistos*>(fRingHistos.At(idx));
87 //____________________________________________________________________
89 AliFMDCorrections::Correct(AliForwardUtil::Histos& hists,
92 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
94 for (UShort_t d=1; d<=3; d++) {
95 UShort_t nr = (d == 1 ? 1 : 2);
96 for (UShort_t q=0; q<nr; q++) {
97 Char_t r = (q == 0 ? 'I' : 'O');
98 TH2D* h = hists.Get(d,r);
99 RingHistos* rh= GetRingHistos(d,r);
100 TH2F* bg= pars->GetBackgroundCorrection(d, r, vtxbin);
101 TH2F* ef= pars->GetEventSelectionEfficiency("INEL",vtxbin,r);
103 AliWarning(Form("No secondary correction for FMDM%d%c in vertex bin %d",
108 AliWarning(Form("No event %s selection efficiency in vertex bin %d",
113 // Divide by primary/total ratio
116 // Divide by the event selection efficiency
119 if(!pars->SharingEffPresent()) {
120 AliWarning("No sharing efficiencies");
124 TH1F* sf = pars->GetSharingEfficiencyTrVtx(d,r,vtxbin);
126 for (Int_t ieta = 1; ieta <= h->GetNbinsX(); ieta++) {
127 Float_t c = sf->GetBinContent(ieta);
128 Float_t ec = sf->GetBinError(ieta);
130 if (c == 0) continue;
132 for (Int_t iphi = 1; iphi <= h->GetNbinsY(); iphi++) {
133 Double_t m = h->GetBinContent(ieta, iphi) / c;
134 Double_t em = h->GetBinError(ieta, iphi);
136 Double_t e = TMath::Sqrt(em * em + (m * ec) * (m * ec));
138 h->SetBinContent(ieta,iphi,m);
139 h->SetBinError(ieta,iphi,e);
143 rh->fDensity->Add(h);
150 //____________________________________________________________________
152 AliFMDCorrections::ScaleHistograms(TList* dir, Int_t nEvents)
154 if (nEvents <= 0) return;
155 TList* d = static_cast<TList*>(dir->FindObject(GetName()));
158 TIter next(&fRingHistos);
160 while ((o = static_cast<RingHistos*>(next())))
161 o->ScaleHistograms(d, nEvents);
163 //____________________________________________________________________
165 AliFMDCorrections::DefineOutput(TList* dir)
167 TList* d = new TList;
168 d->SetName(GetName());
170 TIter next(&fRingHistos);
172 while ((o = static_cast<RingHistos*>(next()))) {
177 //====================================================================
178 AliFMDCorrections::RingHistos::RingHistos()
179 : AliForwardUtil::RingHistos(),
183 //____________________________________________________________________
184 AliFMDCorrections::RingHistos::RingHistos(UShort_t d, Char_t r)
185 : AliForwardUtil::RingHistos(d,r),
188 fDensity = new TH2D(Form("FMD%d%c_Primary_Density", d, r),
189 Form("in FMD%d%c", d, r),
190 200, -4, 6, (r == 'I' || r == 'i' ? 20 : 40),
192 fDensity->SetDirectory(0);
193 fDensity->SetXTitle("#eta");
194 fDensity->SetYTitle("#phi [radians]");
195 fDensity->SetZTitle("Primary N_{ch} density");
197 //____________________________________________________________________
198 AliFMDCorrections::RingHistos::RingHistos(const RingHistos& o)
199 : AliForwardUtil::RingHistos(o),
203 //____________________________________________________________________
204 AliFMDCorrections::RingHistos&
205 AliFMDCorrections::RingHistos::operator=(const RingHistos& o)
207 AliForwardUtil::RingHistos::operator=(o);
209 if (fDensity) delete fDensity;
211 fDensity = static_cast<TH2D*>(o.fDensity->Clone());
215 //____________________________________________________________________
216 AliFMDCorrections::RingHistos::~RingHistos()
218 if (fDensity) delete fDensity;
221 //____________________________________________________________________
223 AliFMDCorrections::RingHistos::Output(TList* dir)
225 TList* d = DefineOutputList(dir);
229 //____________________________________________________________________
231 AliFMDCorrections::RingHistos::ScaleHistograms(TList* dir, Int_t nEvents)
233 TList* l = GetOutputList(dir);
236 TH1* density = GetOutputHist(l,Form("%s_Primary_Density", fName.Data()));
237 if (density) density->Scale(1./nEvents);
240 //____________________________________________________________________