2 @brief Implementation of a 1-dimensional Flow "histogram" */
3 #include "flow/AliFMDFlowBinned1D.h"
4 #include "flow/AliFMDFlowBin.h"
12 //====================================================================
13 AliFMDFlowBinned1D::AliFMDFlowBinned1D(UShort_t order,
16 : fXAxis(nxbins, xbins),
19 UShort_t n = fXAxis.N();
20 fBins = new AliFMDFlowBin*[n];
21 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(order);
23 //____________________________________________________________________
24 AliFMDFlowBinned1D::AliFMDFlowBinned1D(UShort_t order,
25 const AliFMDFlowAxis& xaxis)
28 UShort_t n = fXAxis.N();
29 fBins = new AliFMDFlowBin*[n];
30 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(order);
32 //____________________________________________________________________
33 AliFMDFlowBinned1D::AliFMDFlowBinned1D(const AliFMDFlowBinned1D& o)
36 UShort_t n = fXAxis.N();
37 fBins = new AliFMDFlowBin*[n];
38 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(*(o.fBins[i]));
40 //____________________________________________________________________
42 AliFMDFlowBinned1D::operator=(const AliFMDFlowBinned1D& o)
45 for (UInt_t i = 0; i < fXAxis.N(); i++) delete fBins[i];
49 UShort_t n = fXAxis.N();
50 fBins = new AliFMDFlowBin*[n];
51 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(*(o.fBins[i]));
55 //____________________________________________________________________
56 AliFMDFlowBinned1D::~AliFMDFlowBinned1D()
59 for (UInt_t i = 0; i < fXAxis.N(); i++) delete fBins[i];
64 //____________________________________________________________________
66 AliFMDFlowBinned1D::GetBin(UShort_t i) const
68 if (i >= fXAxis.N()) return 0;
71 //____________________________________________________________________
73 AliFMDFlowBinned1D::GetBin(Double_t x) const
75 Int_t i = fXAxis.FindBin(x);
81 //____________________________________________________________________
83 AliFMDFlowBinned1D::Begin()
85 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->Begin();
87 //____________________________________________________________________
89 AliFMDFlowBinned1D::End()
91 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->End();
93 //____________________________________________________________________
95 AliFMDFlowBinned1D::Finish()
97 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->Finish();
99 //____________________________________________________________________
101 AliFMDFlowBinned1D::AddToEventPlane(Double_t x, Double_t phi, Double_t w, Bool_t a)
103 AliFMDFlowBin* bin = GetBin(x);
104 if (!bin) return kFALSE;
105 bin->AddToEventPlane(phi, w, a);
109 //____________________________________________________________________
111 AliFMDFlowBinned1D::AddToHarmonic(Double_t x, Double_t phi)
113 AliFMDFlowBin* bin = GetBin(x);
114 if (!bin) return kFALSE;
115 bin->AddToHarmonic(phi);
119 //____________________________________________________________________
121 AliFMDFlowBinned1D::Event(Double_t* phis, Double_t* xs, Double_t* ws, ULong_t n)
124 for (UInt_t i = 0; i < n; i++)
125 AddToEventPlane(xs[i], phis[i], (ws ? ws[i] : 1),
126 Float_t(rand()) / RAND_MAX > 0.5);
127 for (UInt_t i = 0; i < n; i++)
128 AddToHarmonic(xs[i], phis[i]);
132 //____________________________________________________________________
134 AliFMDFlowBinned1D::Browse(TBrowser* b)
136 b->Add(&fXAxis, "xaxis");
137 for (UInt_t i = 0; i < fXAxis.N(); i++)
138 b->Add(fBins[i], Form("bin_%03d", i));
141 //____________________________________________________________________
143 AliFMDFlowBinned1D::Print(Option_t* option) const
147 Bool_t det = opt.Contains("d");
148 Bool_t sum = opt.Contains("s");
150 for (UShort_t i = 0; i < fXAxis.N(); i++) {
151 Double_t x = fXAxis.BinCenter(i);
152 std::streamsize old_p = std::cout.precision(3);
153 std::ios_base::fmtflags old_f = std::cout.setf(std::ios_base::fixed,
154 std::ios_base::floatfield);
155 std::cout << "x=" << std::setw(5) << x << std::endl;
157 std::cout.precision(old_p);
158 std::cout.setf(old_f, std::ios_base::floatfield);
164 const char* names[] = { "Bare", "Naive", "STAR", "TDR" };
165 AliFMDFlowBin::CorType types[] = { AliFMDFlowBin::none,
166 AliFMDFlowBin::naive,
168 AliFMDFlowBin::tdr };
170 for (UInt_t i = 0; i < nType; i++)
171 std::cout << " | " << std::setw(6+6+5) << names[i];
172 std::cout << "\n-----" << std::setfill('-');
173 for (UInt_t i = 0; i < nType; i++)
174 std::cout << "-+-" << std::setw(6+6+5) << "-";
175 std::cout << std::setfill(' ') << std::endl;
177 std::streamsize old_p = std::cout.precision(2);
178 std::ios_base::fmtflags old_f = std::cout.setf(std::ios_base::fixed,
179 std::ios_base::floatfield);
180 for (UShort_t i = 0; i < fXAxis.N(); i++) {
181 Double_t x = fXAxis.BinCenter(i);
182 std::cout << std::setprecision(2) << std::setw(5) << x << std::flush;
183 for (UShort_t j = 0; j < nType; j++) {
185 Double_t v = fBins[i]->Value(e2v, types[j]);
186 std::cout << std::setprecision(3) << " | "
187 << std::setw(6) << 100 * v << " +/- "
188 << std::setw(6) << 100 * sqrt(e2v);
190 std::cout << std::endl;
192 std::cout.precision(old_p);
193 std::cout.setf(old_f, std::ios_base::floatfield);
198 //____________________________________________________________________