1 #include "AliFMDCorrVertexBias.h"
7 //____________________________________________________________________
8 AliFMDCorrVertexBias::AliFMDCorrVertexBias()
12 fVertexArray.SetOwner(kTRUE);
13 fVertexArray.SetName("rings");
14 fVertexAxis.SetName("vtxAxis");
15 fVertexAxis.SetTitle("v_{z} [cm]");
18 //____________________________________________________________________
19 AliFMDCorrVertexBias::AliFMDCorrVertexBias(const AliFMDCorrVertexBias& o)
21 fVertexArray(o.fVertexArray),
22 fVertexAxis(o.fVertexAxis.GetNbins(), o.fVertexAxis.GetXmin(),
23 o.fVertexAxis.GetXmax())
25 fVertexAxis.SetName("vtxAxis");
26 fVertexAxis.SetTitle("v_{z} [cm]");
28 //____________________________________________________________________
29 AliFMDCorrVertexBias::~AliFMDCorrVertexBias()
33 //____________________________________________________________________
35 AliFMDCorrVertexBias::operator=(const AliFMDCorrVertexBias& o)
37 fVertexArray = o.fVertexArray;
38 SetVertexAxis(o.fVertexAxis);
42 //____________________________________________________________________
44 AliFMDCorrVertexBias::GetCorrection(Char_t r, Double_t v) const
46 Int_t b = FindVertexBin(v);
48 return GetCorrection(r, UShort_t(b));
50 //____________________________________________________________________
52 AliFMDCorrVertexBias::GetCorrection(Char_t r, UShort_t b) const
54 TObjArray* vertexarray = GetVertexArray(b);
55 if (!vertexarray) return 0;
59 case 'i': case 'I': idx = 0; break;
60 case 'o': case 'O': idx = 1; break;
63 AliWarning(Form("Unknown ting type %c, not one of [iIoO]", r));
67 TObject* o = vertexarray->At(idx);
69 AliWarning(Form("No vertex bias found for ring type %c in vertex bin %d",
73 return static_cast<TH2D*>(o);
76 //____________________________________________________________________
78 AliFMDCorrVertexBias::FindVertexBin(Double_t v) const
80 if (fVertexAxis.GetNbins() <= 0) {
81 AliWarning("No vertex array defined");
84 Int_t bin = const_cast<TAxis&>(fVertexAxis).FindBin(v);
85 if (bin <= 0 || bin > fVertexAxis.GetNbins()) {
86 AliWarning(Form("vertex %+8.4f out of range [%+8.4f,%+8.4f]",
87 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
92 //____________________________________________________________________
94 AliFMDCorrVertexBias::GetVertexArray(UShort_t v) const
96 if (v <= 0 || v > fVertexAxis.GetNbins()) {
97 AliWarning(Form("vertex bin %d out of range [1,%d]",
98 v, fVertexAxis.GetNbins()));
102 TObject* o = fVertexArray.At(v-1);
104 AliWarning(Form("No array found for vertex bin %d", v));
108 return static_cast<TObjArray*>(o);
110 //____________________________________________________________________
112 AliFMDCorrVertexBias::GetOrMakeVertexArray(UShort_t v)
114 if (v <= 0 || v > fVertexAxis.GetNbins()) {
115 AliWarning(Form("vertex bin %d out of range [1,%d]",
116 v, fVertexAxis.GetNbins()));
120 TObject* o = fVertexArray.At(v-1);
122 TObjArray* a = new TObjArray(fVertexAxis.GetNbins());
123 a->SetName(Form("vertexbin%02d", v));
125 fVertexArray.AddAtAndExpand(a, v-1);
129 return static_cast<TObjArray*>(fVertexArray.At(v-1));
132 //____________________________________________________________________
134 AliFMDCorrVertexBias::SetCorrection(Char_t r, UShort_t b, TH2D* h)
136 TObjArray* vertexarray = GetOrMakeVertexArray(b);
137 if (!vertexarray) return false;
142 case 'i': case 'I': idx = 0; break;
143 case 'o': case 'O': idx = 1; break;
146 AliWarning(Form("Unknown ting type %c, not one of [iIoO]", r));
149 h->SetName(Form("FMDX%c", r));
150 h->SetTitle(Form("Vertex bias correction for %c rings "
151 "in vertex bin %d [%+8.4f,%+8.4f]",
152 r, b, fVertexAxis.GetBinLowEdge(b),
153 fVertexAxis.GetBinUpEdge(b)));
154 h->SetXTitle("#eta");
155 h->SetYTitle("#phi [radians]");
156 h->SetZTitle("1/N_{t}#sum_{i}^{N_{tv}} N_{ch,i,primary} / "
157 "1/N_{v}#sum_{i}^{N_{v}} N_{ch,i,primary}");
161 vertexarray->AddAtAndExpand(h, idx);
164 //____________________________________________________________________
166 AliFMDCorrVertexBias::SetCorrection(Char_t r, Double_t v, TH2D* h)
168 Int_t b = FindVertexBin(v);
169 if (b <= 0 || b > fVertexAxis.GetNbins()) {
170 AliWarning(Form("Vertex %+8.4f out of range [%+8.4f,%+8.4f]",
171 v, fVertexAxis.GetXmin(), fVertexAxis.GetXmax()));
174 return SetCorrection(r, UShort_t(b), h);
176 //____________________________________________________________________
178 AliFMDCorrVertexBias::Browse(TBrowser* b)
180 b->Add(&fVertexArray);
181 b->Add(&fVertexAxis);
183 //____________________________________________________________________
185 AliFMDCorrVertexBias::Print(Option_t* option) const
187 std::cout << "Vertex bias correction" << std::endl;
188 fVertexArray.Print(option);
189 fVertexAxis.Print(option);
192 //____________________________________________________________________