CMS 3D CMS Logo

SiPixelCPEGenericDBErrorParametrization.cc
Go to the documentation of this file.
3 #include <iostream>
4 #include <cmath>
5 
6 const float math_pi = 3.14159265;
7 
8 //These are the bin parameters -- they determine the width of the bins
9 //998, 999 refer to bins where the 0 should always be returned
10 const float SiPixelCPEGenericDBErrorParametrization::bx_a_min[3] = {1.525, 1.475, 1.425};
11 const float SiPixelCPEGenericDBErrorParametrization::bx_a_max[3] = {1.725, 1.675, 1.625};
12 
13 const float SiPixelCPEGenericDBErrorParametrization::fx_a_min[2] = {0.165, 0.185};
14 const float SiPixelCPEGenericDBErrorParametrization::fx_a_max[2] = {0.285, 0.465};
15 const float SiPixelCPEGenericDBErrorParametrization::fx_b_min[2] = {998, 998};
16 const float SiPixelCPEGenericDBErrorParametrization::fx_b_max[2] = {999, 999};
17 
18 const float SiPixelCPEGenericDBErrorParametrization::by_a_min[6] = {1.47078, 1.47078, 1.47078, 1.47078, 1.47078, 1.47078};
19 const float SiPixelCPEGenericDBErrorParametrization::by_a_max[6] = {1.67078, 1.67078, 1.67078, 1.67078, 1.67078, 1.67078};
20 const float SiPixelCPEGenericDBErrorParametrization::by_b_min[6] = {0.05, 0.15, 0.70, 0.95, 1.15, 1.20};
21 const float SiPixelCPEGenericDBErrorParametrization::by_b_max[6] = {0.50, 0.90, 1.05, 1.15, 1.20, 1.40};
22 
23 const float SiPixelCPEGenericDBErrorParametrization::fy_a_min[2] = {998, 998};
24 const float SiPixelCPEGenericDBErrorParametrization::fy_a_max[2] = {999, 999};
25 const float SiPixelCPEGenericDBErrorParametrization::fy_b_min[2] = {0.31, 0.31};
26 const float SiPixelCPEGenericDBErrorParametrization::fy_b_max[2] = {0.39, 0.39};
27 
28 //Constants based on subpart
29 const float SiPixelCPEGenericDBErrorParametrization::errors_big_pix[4] = {0.0070, 0.0030, 0.0068, 0.0040};
30 const int SiPixelCPEGenericDBErrorParametrization::size_max[4] = {5, 2, 0, 0};
31 
32 //Garbage is set to hold a place for bx_b, though we don't parametrize it the same way
33 const float garbage[1] = {-9999.99};
34 
35 const float* SiPixelCPEGenericDBErrorParametrization::a_min[4] = {by_a_min, bx_a_min, fy_a_min, fx_a_min};
36 const float* SiPixelCPEGenericDBErrorParametrization::a_max[4] = {by_a_max, bx_a_max, fy_a_max, fx_a_max};
37 const float* SiPixelCPEGenericDBErrorParametrization::b_min[4] = {by_b_min, garbage, fy_b_min, fx_b_min};
38 const float* SiPixelCPEGenericDBErrorParametrization::b_max[4] = {by_b_max, garbage, fy_b_max, fx_b_max};
39 
40 //Bin Sizes
41 const int SiPixelCPEGenericDBErrorParametrization::part_bin_size[4] = { 0, 240, 360, 380};
42 const int SiPixelCPEGenericDBErrorParametrization::size_bin_size[4] = {40, 40, 40, 40};
44 const int SiPixelCPEGenericDBErrorParametrization::beta_bin_size[4] = { 1, 10, 1, 10};
45 
47 
49 
51 {
53 }
54 
55 //The function which is called to return errX and errY. Used in CPEs.
57  GeomDetType::SubDetector pixelPart,
58  int sizex, int sizey,
59  float alpha, float beta,
60  bool bigInX, bool bigInY)
61 {
62  std::pair<float,float> element;
63  std::pair<float,float> errors;
64 
66  throw cms::Exception("PixelCPEGenericDBErrorParametrization::getError")
67  << "Non-pixel detector type !!!" ;
68  if(GeomDetEnumerators::isBarrel(pixelPart)) {
69  element = std::pair<float,float>(index(1, sizex, alpha, beta, bigInX), //1 -- Bx
70  index(0, sizey, alpha, beta, bigInY)); //0 -- By
71  }
72  else {
73  element = std::pair<float,float>(index(3, sizex, alpha, beta, bigInX), //3 -- Fx
74  index(2, sizey, alpha, beta, bigInY)); //2 -- Fy
75  }
76 
77  if (bigInX && sizex == 1) errors.first = element.first;
78  else errors.first = parmErrors->errors()[(int)element.first].sigma;
79  if (bigInY && sizey == 1) errors.second = element.second;
80  else errors.second = parmErrors->errors()[(int)element.second].sigma;
81 
82  return errors;
83 }
84 
85 //The function which is called to return errX and errY. Used outside CPEs with access to ES.
87  int sizex, int sizey,
88  float alpha, float beta,
89  bool bigInX, bool bigInY)
90 {
91  std::pair<float,float> element;
92  std::pair<float,float> errors;
93 
95  throw cms::Exception("PixelCPEGenericDBErrorParametrization::getError")
96  << "Non-pixel detector type !!!" ;
97  if(GeomDetEnumerators::isBarrel(pixelPart)) {
98  element = std::pair<float,float>(index(1, sizex, alpha, beta, bigInX), //1 -- Bx
99  index(0, sizey, alpha, beta, bigInY)); //0 -- By
100  }
101  else {
102  element = std::pair<float,float>(index(3, sizex, alpha, beta, bigInX), //3 -- Fx
103  index(2, sizey, alpha, beta, bigInY)); //2 -- Fy
104  }
105 
106  if (bigInX && sizex == 1) errors.first = element.first;
107  else errors.first = errorsH->errors()[(int)element.first].sigma;
108  if (bigInY && sizey == 1) errors.second = element.second;
109  else errors.second = errorsH->errors()[(int)element.second].sigma;
110 
111  return errors;
112 }
113 
114 
115 
116 float SiPixelCPEGenericDBErrorParametrization::index(int ind_subpart, int size, float alpha, float beta, bool big)
117 {
118  //This is a check for big pixels. If it passes, the code returns a given error and the function ends.
119  if ( big && size == 1) return errors_big_pix[ind_subpart];
120 
121  int ind_size = std::min(size - 1, size_max[ind_subpart]);
122 
123  float alpha_rad = -999.9;
124  float betap_rad = -999.9;
125 
126  int ind_alpha = -99;
127  int ind_beta = -99;
128 
129  float binw_a = -999.9;
130  float binw_b = -999.9;
131  int maxbin_a = -99;
132  int maxbin_b = -99;
133 
134  betap_rad = fabs(math_pi/2.0 - beta);
135  //We must take into account that Fx(subpart=3) has different alpha parametrization
136  if(ind_subpart == 3) alpha_rad = fabs(math_pi/2.0 - alpha);
137  else alpha_rad = fabs(alpha);
138 
139  //Sets the correct binning for alpha and beta based on whether in x or y
140  if(ind_subpart == 0||ind_subpart == 2)
141  {
142  binw_a = (a_max[ind_subpart][ind_size] - a_min[ind_subpart][ind_size])/2.0;
143  binw_b = (b_max[ind_subpart][ind_size] - b_min[ind_subpart][ind_size])/8.0;
144  maxbin_a = 3;
145  maxbin_b = 9;
146  }
147  else
148  {
149  binw_a = (a_max[ind_subpart][ind_size] - a_min[ind_subpart][ind_size])/8.0;
150  binw_b = (b_max[ind_subpart][ind_size] - b_min[ind_subpart][ind_size])/2.0;
151  maxbin_a = 3;
152  maxbin_b = 9;
153  }
154 
155  //Binning for alpha
156  if ( alpha_rad < a_min[ind_subpart][ind_size]) ind_alpha = 0;
157  else if ( alpha_rad >= a_max[ind_subpart][ind_size]) ind_alpha = maxbin_a;
158  else ind_alpha = 1 + (int)((alpha_rad - a_min[ind_subpart][ind_size])/binw_a);
159 
160  //Binning for beta -- we need to account for Bx(subpart=1) having uneven binning
161  if(ind_subpart == 1)
162  {
163  if ( betap_rad <= 0.7 ) ind_beta = 0;
164  else if ( 0.7 < betap_rad && betap_rad <= 1.0 ) ind_beta = 1;
165  else if ( 1.0 < betap_rad && betap_rad <= 1.2 ) ind_beta = 2;
166  else if ( 1.2 <= betap_rad ) ind_beta = 3;
167  }
168  else if ( betap_rad < b_min[ind_subpart][ind_size]) ind_beta = 0;
169  else if ( betap_rad >= b_max[ind_subpart][ind_size]) ind_beta = maxbin_b;
170  else ind_beta = 1 + (int)((betap_rad - b_min[ind_subpart][ind_size])/binw_b);
171 
172  //Index to be used to find error in database
173  int index = part_bin_size[ind_subpart] + size_bin_size[ind_subpart] * ind_size + alpha_bin_size[ind_subpart] * ind_alpha + beta_bin_size[ind_subpart] * ind_beta;
174 
175  return index;
176 }
size
Write out results.
float alpha
Definition: AMPTWrapper.h:95
bool isBarrel(GeomDetEnumerators::SubDetector m)
std::pair< float, float > getError(const SiPixelCPEGenericErrorParm *parmErrors, GeomDetType::SubDetector pixelPart, int sizex, int sizey, float alpha, float beta, bool bigInX=false, bool bigInY=false)
T min(T a, T b)
Definition: MathUtil.h:58
float index(int ind_subpart, int size, float alpha, float beta, bool big)
DbVector & errors()
Accessors for the vectors – non-const version.
Definition: big.h:8
T get() const
Definition: EventSetup.h:62
edm::ESHandle< SiPixelCPEGenericErrorParm > errorsH
bool isTrackerPixel(GeomDetEnumerators::SubDetector m)