CMS 3D CMS Logo

 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Properties Friends Macros Pages
HiEvtPlaneFlatten.h
Go to the documentation of this file.
1 #ifndef __HiEvtPlaneFlatten__
2 #define __HiEvtPlaneFlatten__
3 
4 // Original Author: Stephen Sanders
5 // Created: Mon Jun 7 14:40:12 EDT 2010
6 
7 // system include files
8 #include <memory>
9 #include <iostream>
10 #include <string>
11 
12 // user include files
15 
18 
20 
23 
25 
26 #include "TMath.h"
27 #include <vector>
28 
29 #define MAXCUT 5000
30 
31 //
32 // class declaration
33 //
34 
36 public:
37 
38  explicit HiEvtPlaneFlatten()
39  {
40  pi = TMath::Pi();
41  hcentbins = 1;
42  hOrder = 20;
43  vorder = 2; //sets order of event plane
44  minvtx = -25;
45  delvtx = 5;
46  nvtxbins = 10;
47  }
48  void Init(int order, int ncentbins,const int centbinCompression, std::string tag, int vord)
49  {
50  hOrder = order; //order of flattening
51  vorder = vord; //1(v1), 2(v2), 3(v3), 4(v4)
52  hcentbins = ncentbins;
53  centbinComp = centbinCompression;
54  if(hcentbins<=0) hcentbins = 1;
56  if(hbins>MAXCUT) {
57  std::cout<<"Too many cuts for flattening calculation. RESET to deaults"<<std::endl;
58  hcentbins = 1;
59  hOrder = 21;
60  }
61  for(int i = 0; i<hbins; i++) {
62  flatX[i]=0;
63  flatY[i]=0;
64  flatCnt[i]=0;
65  }
66  }
67 
68  int GetCutIndx(int centbin, double vtx, int iord)
69  {
70  int cut;
71  int icent = centbin/centbinComp;
72  if(icent < 0 || icent > hcentbins) return -1;
73  int ivtx = (vtx-minvtx)/delvtx;
74  if(ivtx < 0 || ivtx > nvtxbins) return -1;
75  cut = hOrder*nvtxbins*icent + hOrder*ivtx + iord;
76  if(cut<0 || cut>hbins) return -1;
77  return cut;
78  }
79 
80  void Fill(double psi, double vtx, int centbin)
81  {
82  if(fabs(psi)>4 ) return;
83  for(int k = 0; k<hOrder; k++) {
84  double fsin = sin(vorder*(k+1)*psi);
85  double fcos = cos(vorder*(k+1)*psi);
86  int indx = GetCutIndx(centbin,vtx,k);
87  if(indx>=0) {
88  flatX[indx]+=fcos;
89  flatY[indx]+=fsin;
90  ++flatCnt[indx];
91  }
92  }
93  }
94 
95  double GetFlatPsi(double psi, double vtx, double cent)
96  {
97  double correction = 0;
98  for(int k = 0; k<hOrder; k++) {
99  int indx = GetCutIndx(cent,vtx,k);
100  correction+=(2./(double)((k+1)*vorder))*(flatXDB[indx]*sin(vorder*(k+1)*psi)-flatYDB[indx]*cos(vorder*(k+1)*psi));
101  }
102  psi+=correction;
103  psi=bounds(psi);
104  psi=bounds2(psi);
105  return psi;
106  }
107 
109  int GetHBins(){return hbins;}
110  double GetX(int bin){return flatX[bin];}
111  double GetY(int bin){return flatY[bin];}
112  double GetCnt(int bin) {return flatCnt[bin];}
113  void SetXDB(int indx, double val) {flatXDB[indx]=val;}
114  void SetYDB(int indx, double val) {flatYDB[indx]=val;}
115  Double_t bounds(Double_t ang) {
116  if(ang<-pi) ang+=2.*pi;
117  if(ang>pi) ang-=2.*pi;
118  return ang;
119  }
120  Double_t bounds2(Double_t ang) {
121  double range = pi/(double) vorder;
122  if(ang<-range) ang+=2*range;
123  if(ang>range) ang-=2*range;
124  return ang;
125  }
126 private:
127  double flatX[MAXCUT];
128  double flatY[MAXCUT];
129  double flatXDB[MAXCUT];
130  double flatYDB[MAXCUT];
131  double flatCnt[MAXCUT];
132  int hOrder; //flattening order
133  int hcentbins; //# of centrality bins
135  int hbins;
136  int vorder; //order of flattened event plane
137  double pi;
138 
139  int nvtxbins;
140  double minvtx;
141  double delvtx;
142 
143 };
144 
145 
146 
147 #endif
const double Pi
int i
Definition: DBlmapReader.cc:9
double GetX(int bin)
double GetFlatPsi(double psi, double vtx, double cent)
Double_t bounds2(Double_t ang)
void Init(int order, int ncentbins, const int centbinCompression, std::string tag, int vord)
Sin< T >::type sin(const T &t)
Definition: Sin.h:22
double GetCnt(int bin)
int GetCutIndx(int centbin, double vtx, int iord)
std::map< std::string, int, std::less< std::string > > psi
void SetXDB(int indx, double val)
double GetY(int bin)
void SetYDB(int indx, double val)
Cos< T >::type cos(const T &t)
Definition: Cos.h:22
Double_t bounds(Double_t ang)
void Fill(double psi, double vtx, int centbin)
tuple cout
Definition: gather_cfg.py:121
#define MAXCUT