1 #include "AliFMDCorrMergingEfficiency.h"
7 //____________________________________________________________________
8 AliFMDCorrMergingEfficiency::AliFMDCorrMergingEfficiency()
12 fRingArray.SetOwner(kTRUE);
13 fRingArray.SetName("rings");
14 fVertexAxis.SetName("vtxAxis");
15 fVertexAxis.SetTitle("v_{z} [cm]");
18 //____________________________________________________________________
19 AliFMDCorrMergingEfficiency::AliFMDCorrMergingEfficiency(const
20 AliFMDCorrMergingEfficiency& o)
22 fRingArray(o.fRingArray),
23 fVertexAxis(o.fVertexAxis.GetNbins(), o.fVertexAxis.GetXmin(),
24 o.fVertexAxis.GetXmax())
26 fVertexAxis.SetName("vtxAxis");
27 fVertexAxis.SetTitle("v_{z} [cm]");
29 //____________________________________________________________________
30 AliFMDCorrMergingEfficiency::~AliFMDCorrMergingEfficiency()
34 //____________________________________________________________________
35 AliFMDCorrMergingEfficiency&
36 AliFMDCorrMergingEfficiency::operator=(const AliFMDCorrMergingEfficiency& o)
38 fRingArray = o.fRingArray;
39 SetVertexAxis(o.fVertexAxis);
43 //____________________________________________________________________
45 AliFMDCorrMergingEfficiency::GetCorrection(UShort_t d, Char_t r, Double_t v) const
47 Int_t b = FindVertexBin(v);
49 return GetCorrection(d, r, UShort_t(b));
51 //____________________________________________________________________
53 AliFMDCorrMergingEfficiency::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
55 TObjArray* ringArray = GetRingArray(d, r);
56 if (!ringArray) return 0;
58 if (b <= 0 || b > ringArray->GetEntriesFast()) {
59 AliWarning(Form("vertex bin %d out of range [1,%d]",
60 b, ringArray->GetEntriesFast()));
64 TObject* o = ringArray->At(b-1);
66 AliWarning(Form("No secondary map found for FMD%d%c in vertex bin %d",
70 return static_cast<TH1D*>(o);
73 //____________________________________________________________________
75 AliFMDCorrMergingEfficiency::FindVertexBin(Double_t v) const
77 if (fVertexAxis.GetNbins() <= 0) {
78 AliWarning("No vertex array defined");
81 Int_t bin = const_cast<TAxis&>(fVertexAxis).FindBin(v);
82 if (bin <= 0 || bin > fVertexAxis.GetNbins()) {
83 AliWarning(Form("vertex %+8.4f out of range [%+8.4f,%+8.4f]",
84 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
89 //____________________________________________________________________
91 AliFMDCorrMergingEfficiency::GetRingIndex(UShort_t d, Char_t r) const
95 case 2: return (r == 'I' || r == 'i' ? 1 : 2); break;
96 case 3: return (r == 'I' || r == 'i' ? 3 : 4); break;
98 AliWarning(Form("Index for FMD%d%c not found", d, r));
101 //____________________________________________________________________
103 AliFMDCorrMergingEfficiency::GetRingArray(UShort_t d, Char_t r) const
105 Int_t idx = GetRingIndex(d,r);
106 if (idx < 0) return 0;
108 TObject* o = fRingArray.At(idx);
110 AliWarning(Form("No array found for FMD%d%c", d, r));
114 return static_cast<TObjArray*>(o);
116 //____________________________________________________________________
118 AliFMDCorrMergingEfficiency::GetOrMakeRingArray(UShort_t d, Char_t r)
120 Int_t idx = GetRingIndex(d,r);
121 if (idx < 0) return 0;
123 TObject* o = fRingArray.At(idx);
125 TObjArray* a = new TObjArray(fVertexAxis.GetNbins());
126 a->SetName(Form("FMD%d%c", d, r));
128 fRingArray.AddAtAndExpand(a, idx);
132 return static_cast<TObjArray*>(fRingArray.At(idx));
135 //____________________________________________________________________
137 AliFMDCorrMergingEfficiency::SetCorrection(UShort_t d, Char_t r,
140 TObjArray* ringArray = GetOrMakeRingArray(d, r);
141 if (!ringArray) return false;
143 if (b <= 0 || b > fVertexAxis.GetNbins()) {
144 AliWarning(Form("Vertex bin %3d out of range [1,%3d]",
145 b, fVertexAxis.GetNbins()));
148 h->SetName(Form("FMD%d%c_vtxbin%03d", d, r, b));
149 h->SetTitle(Form("Secondary map correction for FMD%d%c "
150 "in vertex bin %d [%+8.4f,%+8.4f]",
151 d, r, b, fVertexAxis.GetBinLowEdge(b),
152 fVertexAxis.GetBinUpEdge(b)));
153 h->SetXTitle("#eta");
154 h->SetYTitle("dN_{ch}/d#eta / sum_i N_{ch,i}");
155 h->SetFillStyle(3001);
158 ringArray->AddAtAndExpand(h, b-1);
161 //____________________________________________________________________
163 AliFMDCorrMergingEfficiency::SetCorrection(UShort_t d, Char_t r,
166 Int_t b = FindVertexBin(v);
167 if (b <= 0 || b > fVertexAxis.GetNbins()) {
168 AliWarning(Form("Vertex %+8.4f out of range [%+8.4f,%+8.4f]",
169 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
172 return SetCorrection(d, r, UShort_t(b), h);
174 //____________________________________________________________________
176 AliFMDCorrMergingEfficiency::Browse(TBrowser* b)
179 b->Add(&fVertexAxis);
181 //____________________________________________________________________
183 AliFMDCorrMergingEfficiency::Print(Option_t* option) const
185 std::cout << "Merging efficiency correction" << std::endl;
186 fRingArray.Print(option);
187 fVertexAxis.Print(option);
190 //____________________________________________________________________