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)
37 UShort_t n = fXAxis.N();
38 fBins = new AliFMDFlowBin*[n];
39 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(*(o.fBins[i]));
41 //____________________________________________________________________
43 AliFMDFlowBinned1D::operator=(const AliFMDFlowBinned1D& o)
46 for (UInt_t i = 0; i < fXAxis.N(); i++) delete fBins[i];
50 UShort_t n = fXAxis.N();
51 fBins = new AliFMDFlowBin*[n];
52 for (UInt_t i = 0; i < n; i++) fBins[i]= new AliFMDFlowBin(*(o.fBins[i]));
56 //____________________________________________________________________
57 AliFMDFlowBinned1D::~AliFMDFlowBinned1D()
60 for (UInt_t i = 0; i < fXAxis.N(); i++) delete fBins[i];
65 //____________________________________________________________________
67 AliFMDFlowBinned1D::GetBin(UShort_t i) const
69 if (i >= fXAxis.N()) return 0;
72 //____________________________________________________________________
74 AliFMDFlowBinned1D::GetBin(Double_t x) const
76 Int_t i = fXAxis.FindBin(x);
82 //____________________________________________________________________
84 AliFMDFlowBinned1D::Begin()
86 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->Begin();
88 //____________________________________________________________________
90 AliFMDFlowBinned1D::End()
92 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->End();
94 //____________________________________________________________________
96 AliFMDFlowBinned1D::Finish()
98 for (UInt_t i = 0; i < fXAxis.N(); i++) fBins[i]->Finish();
100 //____________________________________________________________________
102 AliFMDFlowBinned1D::AddToEventPlane(Double_t x, Double_t phi, Double_t w, Bool_t a)
104 AliFMDFlowBin* bin = GetBin(x);
105 if (!bin) return kFALSE;
106 bin->AddToEventPlane(phi, w, a);
110 //____________________________________________________________________
112 AliFMDFlowBinned1D::AddToHarmonic(Double_t x, Double_t phi)
114 AliFMDFlowBin* bin = GetBin(x);
115 if (!bin) return kFALSE;
116 bin->AddToHarmonic(phi);
120 //____________________________________________________________________
122 AliFMDFlowBinned1D::Event(Double_t* phis, Double_t* xs, Double_t* ws, ULong_t n)
125 for (UInt_t i = 0; i < n; i++)
126 AddToEventPlane(xs[i], phis[i], (ws ? ws[i] : 1),
127 Float_t(rand()) / RAND_MAX > 0.5);
128 for (UInt_t i = 0; i < n; i++)
129 AddToHarmonic(xs[i], phis[i]);
133 //____________________________________________________________________
135 AliFMDFlowBinned1D::Browse(TBrowser* b)
137 b->Add(&fXAxis, "xaxis");
138 for (UInt_t i = 0; i < fXAxis.N(); i++)
139 b->Add(fBins[i], Form("bin_%03d", i));
142 //____________________________________________________________________
144 AliFMDFlowBinned1D::Print(Option_t* option) const
148 Bool_t det = opt.Contains("d");
149 Bool_t sum = opt.Contains("s");
151 for (UShort_t i = 0; i < fXAxis.N(); i++) {
152 Double_t x = fXAxis.BinCenter(i);
153 std::streamsize old_p = std::cout.precision(3);
154 std::ios_base::fmtflags old_f = std::cout.setf(std::ios_base::fixed,
155 std::ios_base::floatfield);
156 std::cout << "x=" << std::setw(5) << x << std::endl;
158 std::cout.precision(old_p);
159 std::cout.setf(old_f, std::ios_base::floatfield);
165 const char* names[] = { "Bare", "Naive", "STAR", "TDR" };
166 AliFMDFlowBin::CorType types[] = { AliFMDFlowBin::none,
167 AliFMDFlowBin::naive,
169 AliFMDFlowBin::tdr };
171 for (UInt_t i = 0; i < nType; i++)
172 std::cout << " | " << std::setw(6+6+5) << names[i];
173 std::cout << "\n-----" << std::setfill('-');
174 for (UInt_t i = 0; i < nType; i++)
175 std::cout << "-+-" << std::setw(6+6+5) << "-";
176 std::cout << std::setfill(' ') << std::endl;
178 std::streamsize old_p = std::cout.precision(2);
179 std::ios_base::fmtflags old_f = std::cout.setf(std::ios_base::fixed,
180 std::ios_base::floatfield);
181 for (UShort_t i = 0; i < fXAxis.N(); i++) {
182 Double_t x = fXAxis.BinCenter(i);
183 std::cout << std::setprecision(2) << std::setw(5) << x << std::flush;
184 for (UShort_t j = 0; j < nType; j++) {
186 Double_t v = fBins[i]->Value(e2v, types[j]);
187 std::cout << std::setprecision(3) << " | "
188 << std::setw(6) << 100 * v << " +/- "
189 << std::setw(6) << 100 * sqrt(e2v);
191 std::cout << std::endl;
193 std::cout.precision(old_p);
194 std::cout.setf(old_f, std::ios_base::floatfield);
199 //____________________________________________________________________