]> git.uio.no Git - u/mrichter/AliRoot.git/blame - PWG2/FORWARD/analysis2/AliFMDCorrSecondaryMap.cxx
Made member functions virtual
[u/mrichter/AliRoot.git] / PWG2 / FORWARD / analysis2 / AliFMDCorrSecondaryMap.cxx
CommitLineData
0bd4b00f 1#include "AliFMDCorrSecondaryMap.h"
2#include <TBrowser.h>
3#include <TH2D.h>
4#include <AliLog.h>
5#include <iostream>
6
7//____________________________________________________________________
8AliFMDCorrSecondaryMap::AliFMDCorrSecondaryMap()
9 : fRingArray(),
10 fVertexAxis(0,0,0),
11 fEtaAxis(0,0,0)
12{
13 fRingArray.SetOwner(kTRUE);
14 fRingArray.SetName("rings");
15 fVertexAxis.SetName("vertexAxis");
16 fVertexAxis.SetTitle("v_{z} [cm]");
17 fEtaAxis.SetName("etaAxis");
18 fEtaAxis.SetTitle("#eta");
19
20}
21//____________________________________________________________________
22AliFMDCorrSecondaryMap::AliFMDCorrSecondaryMap(const
23 AliFMDCorrSecondaryMap& o)
24 : TObject(o),
25 fRingArray(o.fRingArray),
26 fVertexAxis(o.fVertexAxis.GetNbins(), o.fVertexAxis.GetXmin(),
27 o.fVertexAxis.GetXmax()),
28 fEtaAxis(o.fEtaAxis.GetNbins(), o.fEtaAxis.GetXmin(),
29 o.fEtaAxis.GetXmax())
30{
31 fVertexAxis.SetName("vertexAxis");
32 fVertexAxis.SetTitle("v_{z} [cm]");
33 fEtaAxis.SetName("etaAxis");
34 fEtaAxis.SetTitle("v_{z} [cm]");
35}
36//____________________________________________________________________
37AliFMDCorrSecondaryMap::~AliFMDCorrSecondaryMap()
38{
39 fRingArray.Clear();
40}
41//____________________________________________________________________
42AliFMDCorrSecondaryMap&
43AliFMDCorrSecondaryMap::operator=(const AliFMDCorrSecondaryMap& o)
44{
45 fRingArray = o.fRingArray;
46 SetVertexAxis(o.fVertexAxis);
47 SetEtaAxis(o.fEtaAxis);
48
49 return *this;
50}
51//____________________________________________________________________
52TH2D*
53AliFMDCorrSecondaryMap::GetCorrection(UShort_t d, Char_t r, Double_t v) const
54{
55 Int_t b = FindVertexBin(v);
56 if (b <= 0) return 0;
57 return GetCorrection(d, r, UShort_t(b));
58}
59//____________________________________________________________________
60TH2D*
61AliFMDCorrSecondaryMap::GetCorrection(UShort_t d, Char_t r, UShort_t b) const
62{
63 TObjArray* ringArray = GetRingArray(d, r);
64 if (!ringArray) return 0;
65
66 if (b <= 0 || b > ringArray->GetEntriesFast()) {
67 AliWarning(Form("vertex bin %d out of range [1,%d]",
68 b, ringArray->GetEntriesFast()));
69 return 0;
70 }
71
72 TObject* o = ringArray->At(b-1);
73 if (!o) {
74 AliWarning(Form("No secondary map found for FMD%d%c in vertex bin %d",
75 d,r,b));
76 return 0;
77 }
78 return static_cast<TH2D*>(o);
79}
80
81//____________________________________________________________________
82Int_t
83AliFMDCorrSecondaryMap::FindVertexBin(Double_t v) const
84{
85 if (fVertexAxis.GetNbins() <= 0) {
86 AliWarning("No vertex array defined");
87 return 0;
88 }
89 Int_t bin = const_cast<TAxis&>(fVertexAxis).FindBin(v);
90 if (bin <= 0 || bin > fVertexAxis.GetNbins()) {
91 AliWarning(Form("vertex %+8.4f out of range [%+8.4f,%+8.4f]",
92 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
93 return 0;
94 }
95 return bin;
96}
97//____________________________________________________________________
98Int_t
99AliFMDCorrSecondaryMap::GetRingIndex(UShort_t d, Char_t r) const
100{
101 switch (d) {
102 case 1: return 0;
103 case 2: return (r == 'I' || r == 'i' ? 1 : 2); break;
104 case 3: return (r == 'I' || r == 'i' ? 3 : 4); break;
105 }
106 AliWarning(Form("Index for FMD%d%c not found", d, r));
107 return -1;
108}
109//____________________________________________________________________
110TObjArray*
111AliFMDCorrSecondaryMap::GetRingArray(UShort_t d, Char_t r) const
112{
113 Int_t idx = GetRingIndex(d,r);
114 if (idx < 0) return 0;
115
116 TObject* o = fRingArray.At(idx);
117 if (!o) {
118 AliWarning(Form("No array found for FMD%d%c", d, r));
119 return 0;
120 }
121
122 return static_cast<TObjArray*>(o);
123}
124//____________________________________________________________________
125TObjArray*
126AliFMDCorrSecondaryMap::GetOrMakeRingArray(UShort_t d, Char_t r)
127{
128 Int_t idx = GetRingIndex(d,r);
129 if (idx < 0) return 0;
130
131 TObject* o = fRingArray.At(idx);
132 if (!o) {
133 TObjArray* a = new TObjArray(fVertexAxis.GetNbins());
134 a->SetName(Form("FMD%d%c", d, r));
135 a->SetOwner(kTRUE);
136 fRingArray.AddAtAndExpand(a, idx);
137 return a;
138 }
139
140 return static_cast<TObjArray*>(fRingArray.At(idx));
141}
142
143//____________________________________________________________________
144Bool_t
145AliFMDCorrSecondaryMap::SetCorrection(UShort_t d, Char_t r,
146 UShort_t b, TH2D* h)
147{
148 TObjArray* ringArray = GetOrMakeRingArray(d, r);
149 if (!ringArray) return false;
150
151 if (b <= 0 || b > fVertexAxis.GetNbins()) {
152 AliWarning(Form("Vertex bin %3d out of range [1,%3d]",
153 b, fVertexAxis.GetNbins()));
154 return false;
155 }
156 h->SetName(Form("FMD%d%c_vtxbin%03d", d, r, b));
157 h->SetTitle(Form("Secondary map correction for FMD%d%c "
158 "in vertex bin %d [%+8.4f,%+8.4f]",
159 d, r, b, fVertexAxis.GetBinLowEdge(b),
160 fVertexAxis.GetBinUpEdge(b)));
161 h->SetXTitle("#eta");
162 h->SetYTitle("#phi [radians]");
163 h->SetZTitle("#sum_{i} N_{ch,i,primary} / #sum_{i} N_{ch,i,FMD}");
164 h->SetDirectory(0);
165 h->SetStats(0);
166 ringArray->AddAtAndExpand(h, b-1);
167 return kTRUE;
168}
169//____________________________________________________________________
170Bool_t
171AliFMDCorrSecondaryMap::SetCorrection(UShort_t d, Char_t r,
172 Double_t v, TH2D* h)
173{
174 Int_t b = FindVertexBin(v);
175 if (b <= 0 || b > fVertexAxis.GetNbins()) {
176 AliWarning(Form("Vertex %+8.4f out of range [%+8.4f,%+8.4f]",
177 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
178 return false;
179 }
180 return SetCorrection(d, r, UShort_t(b), h);
181}
182//____________________________________________________________________
183void
184AliFMDCorrSecondaryMap::Browse(TBrowser* b)
185{
186 b->Add(&fRingArray);
187 b->Add(&fVertexAxis);
188 b->Add(&fEtaAxis);
189}
190//____________________________________________________________________
191void
192AliFMDCorrSecondaryMap::Print(Option_t* option) const
193{
194 std::cout << "Secondary correction map" << std::endl;
195 fRingArray.Print(option);
196 fVertexAxis.Print(option);
197 fEtaAxis.Print(option);
198}
199
200//____________________________________________________________________
201//
202// EOF
203//