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 // -*- C++ -*-
4 //
5 // Package: HiEvtPlaneFlatten
6 // Class: HiEvtPlaneFlatten
7 //
8 
9 //
10 //
11 // Original Author: Stephen Sanders
12 // Created: Mon Jun 7 14:40:12 EDT 2010
13 //
14 //
15 
16 // system include files
17 #include <memory>
18 #include <iostream>
19 #include <string>
20 
21 // user include files
24 
27 
29 
32 
34 
35 #include "TMath.h"
36 #include <vector>
37 
38 #define MAXCUT 5000
39 
40 //
41 // class declaration
42 //
43 
45 public:
46 
47  explicit HiEvtPlaneFlatten()
48  {
49  pi = TMath::Pi();
50  hcentbins = 1;
51  hOrder = 20;
52  vorder = 2; //sets order of event plane
53  minvtx = -25;
54  delvtx = 5;
55  nvtxbins = 10;
56  }
57  void Init(int order, int ncentbins,const int centbinCompression, std::string tag, int vord)
58  {
59  hOrder = order; //order of flattening
60  vorder = vord; //1(v1), 2(v2), 3(v3), 4(v4)
61  hcentbins = ncentbins;
62  centbinComp = centbinCompression;
63  if(hcentbins<=0) hcentbins = 1;
65  if(hbins>MAXCUT) {
66  std::cout<<"Too many cuts for flattening calculation. RESET to deaults"<<std::endl;
67  hcentbins = 1;
68  hOrder = 21;
69  }
70  for(int i = 0; i<hbins; i++) {
71  flatX[i]=0;
72  flatY[i]=0;
73  flatCnt[i]=0;
74  }
75  }
76 
77  int GetCutIndx(int centbin, double vtx, int iord)
78  {
79  int cut;
80  int icent = centbin/centbinComp;
81  if(icent < 0 || icent > hcentbins) return -1;
82  int ivtx = (vtx-minvtx)/delvtx;
83  if(ivtx < 0 || ivtx > nvtxbins) return -1;
84  cut = hOrder*nvtxbins*icent + hOrder*ivtx + iord;
85  if(cut<0 || cut>hbins) return -1;
86  return cut;
87  }
88 
89  void Fill(double psi, double vtx, int centbin)
90  {
91  if(fabs(psi)>4 ) return;
92  for(int k = 0; k<hOrder; k++) {
93  double fsin = sin(vorder*(k+1)*psi);
94  double fcos = cos(vorder*(k+1)*psi);
95  int indx = GetCutIndx(centbin,vtx,k);
96  if(indx>=0) {
97  flatX[indx]+=fcos;
98  flatY[indx]+=fsin;
99  ++flatCnt[indx];
100  }
101  }
102  }
103 
104  double GetFlatPsi(double psi, double vtx, double cent)
105  {
106  double correction = 0;
107  for(int k = 0; k<hOrder; k++) {
108  int indx = GetCutIndx(cent,vtx,k);
109  correction+=(2./(double)((k+1)*vorder))*(flatXDB[indx]*sin(vorder*(k+1)*psi)-flatYDB[indx]*cos(vorder*(k+1)*psi));
110  }
111  psi+=correction;
112  psi=bounds(psi);
113  psi=bounds2(psi);
114  return psi;
115  }
116 
118  int GetHBins(){return hbins;}
119  double GetX(int bin){return flatX[bin];}
120  double GetY(int bin){return flatY[bin];}
121  double GetCnt(int bin) {return flatCnt[bin];}
122  void SetXDB(int indx, double val) {flatXDB[indx]=val;}
123  void SetYDB(int indx, double val) {flatYDB[indx]=val;}
124  Double_t bounds(Double_t ang) {
125  if(ang<-pi) ang+=2.*pi;
126  if(ang>pi) ang-=2.*pi;
127  return ang;
128  }
129  Double_t bounds2(Double_t ang) {
130  double range = pi/(double) vorder;
131  if(ang<-range) ang+=2*range;
132  if(ang>range) ang-=2*range;
133  return ang;
134  }
135 private:
136  double flatX[MAXCUT];
137  double flatY[MAXCUT];
138  double flatXDB[MAXCUT];
139  double flatYDB[MAXCUT];
140  double flatCnt[MAXCUT];
141  int hOrder; //flattening order
142  int hcentbins; //# of centrality bins
144  int hbins;
145  int vorder; //order of flattened event plane
146  double pi;
147 
148  int nvtxbins;
149  double minvtx;
150  double delvtx;
151 
152 };
153 
154 
155 
156 #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
int k[5][pyjets_maxn]
Double_t bounds(Double_t ang)
void Fill(double psi, double vtx, int centbin)
tuple cout
Definition: gather_cfg.py:121
#define MAXCUT