1 #include "AliFMDCorrections.h"
6 #include "AliFMDAnaParameters.h"
10 ClassImp(AliFMDCorrections)
15 //____________________________________________________________________
16 AliFMDCorrections::AliFMDCorrections()
22 //____________________________________________________________________
23 AliFMDCorrections::AliFMDCorrections(const char* title)
24 : TNamed("fmdCorrections", title),
28 fRingHistos.SetName(GetName());
29 fRingHistos.Add(new RingHistos(1, 'I'));
30 fRingHistos.Add(new RingHistos(2, 'I'));
31 fRingHistos.Add(new RingHistos(2, 'O'));
32 fRingHistos.Add(new RingHistos(3, 'I'));
33 fRingHistos.Add(new RingHistos(3, 'O'));
36 //____________________________________________________________________
37 AliFMDCorrections::AliFMDCorrections(const AliFMDCorrections& o)
42 TIter next(&o.fRingHistos);
44 while ((obj = next())) fRingHistos.Add(obj);
47 //____________________________________________________________________
48 AliFMDCorrections::~AliFMDCorrections()
53 //____________________________________________________________________
55 AliFMDCorrections::operator=(const AliFMDCorrections& o)
58 SetTitle(o.GetTitle());
60 fMultCut = o.fMultCut;
63 TIter next(&o.fRingHistos);
65 while ((obj = next())) fRingHistos.Add(obj);
70 //____________________________________________________________________
71 AliFMDCorrections::RingHistos*
72 AliFMDCorrections::GetRingHistos(UShort_t d, Char_t r) const
76 case 1: idx = 0; break;
77 case 2: idx = 1 + (r == 'I' || r == 'i' ? 0 : 1); break;
78 case 3: idx = 3 + (r == 'I' || r == 'i' ? 0 : 1); break;
80 if (idx < 0 || idx >= fRingHistos.GetEntries()) return 0;
82 return static_cast<RingHistos*>(fRingHistos.At(idx));
85 //____________________________________________________________________
87 AliFMDCorrections::Correct(AliForwardUtil::Histos& hists,
90 AliFMDAnaParameters* pars = AliFMDAnaParameters::Instance();
92 for (UShort_t d=1; d<=3; d++) {
93 UShort_t nr = (d == 1 ? 1 : 2);
94 for (UShort_t q=0; q<nr; q++) {
95 Char_t r = (q == 0 ? 'I' : 'O');
96 TH2D* h = hists.Get(d,r);
97 RingHistos* rh= GetRingHistos(d,r);
98 TH2F* bg= pars->GetBackgroundCorrection(d, r, vtxbin);
99 TH2F* ef= pars->GetEventSelectionEfficiency("INEL",vtxbin,r);
101 AliWarning(Form("No secondary correction for FMDM%d%c in vertex bin %d",
106 AliWarning(Form("No event %s selection efficiency in vertex bin %d",
111 // Divide by primary/total ratio
114 // Divide by the event selection efficiency
117 if(!pars->SharingEffPresent()) {
118 AliWarning("No sharing efficiencies");
122 TH1F* sf = pars->GetSharingEfficiencyTrVtx(d,r,vtxbin);
124 for (Int_t ieta = 1; ieta <= h->GetNbinsX(); ieta++) {
125 Float_t c = sf->GetBinContent(ieta);
126 Float_t ec = sf->GetBinError(ieta);
128 if (c == 0) continue;
130 for (Int_t iphi = 1; iphi <= h->GetNbinsY(); iphi++) {
131 Double_t m = h->GetBinContent(ieta, iphi) / c;
132 Double_t em = h->GetBinError(ieta, iphi);
134 Double_t e = TMath::Sqrt(em * em + (m * ec) * (m * ec));
136 h->SetBinContent(ieta,iphi,m);
137 h->SetBinError(ieta,iphi,e);
141 rh->fDensity->Add(h);
148 //____________________________________________________________________
150 AliFMDCorrections::ScaleHistograms(TList* dir, Int_t nEvents)
152 if (nEvents <= 0) return;
153 TList* d = static_cast<TList*>(dir->FindObject(GetName()));
156 TIter next(&fRingHistos);
158 while ((o = static_cast<RingHistos*>(next())))
159 o->ScaleHistograms(d, nEvents);
161 //____________________________________________________________________
163 AliFMDCorrections::DefineOutput(TList* dir)
165 TList* d = new TList;
166 d->SetName(GetName());
168 TIter next(&fRingHistos);
170 while ((o = static_cast<RingHistos*>(next()))) {
175 //====================================================================
176 AliFMDCorrections::RingHistos::RingHistos()
177 : AliForwardUtil::RingHistos(),
181 //____________________________________________________________________
182 AliFMDCorrections::RingHistos::RingHistos(UShort_t d, Char_t r)
183 : AliForwardUtil::RingHistos(d,r),
186 fDensity = new TH2D(Form("FMD%d%c_Primary_Density", d, r),
187 Form("in FMD%d%c", d, r),
188 200, -4, 6, (r == 'I' || r == 'i' ? 20 : 40),
190 fDensity->SetDirectory(0);
191 fDensity->SetXTitle("#eta");
192 fDensity->SetYTitle("#phi [radians]");
193 fDensity->SetZTitle("Primary N_{ch} density");
195 //____________________________________________________________________
196 AliFMDCorrections::RingHistos::RingHistos(const RingHistos& o)
197 : AliForwardUtil::RingHistos(o),
201 //____________________________________________________________________
202 AliFMDCorrections::RingHistos&
203 AliFMDCorrections::RingHistos::operator=(const RingHistos& o)
205 AliForwardUtil::RingHistos::operator=(o);
207 if (fDensity) delete fDensity;
209 fDensity = static_cast<TH2D*>(o.fDensity->Clone());
213 //____________________________________________________________________
214 AliFMDCorrections::RingHistos::~RingHistos()
216 if (fDensity) delete fDensity;
219 //____________________________________________________________________
221 AliFMDCorrections::RingHistos::Output(TList* dir)
223 TList* d = DefineOutputList(dir);
227 //____________________________________________________________________
229 AliFMDCorrections::RingHistos::ScaleHistograms(TList* dir, Int_t nEvents)
231 TList* l = GetOutputList(dir);
234 TH1* density = GetOutputHist(l,Form("%s_Primary_Density", fName.Data()));
235 if (density) density->Scale(1./nEvents);
238 //____________________________________________________________________