CMS 3D CMS Logo

SiPixelTemplate.h
Go to the documentation of this file.
1 //
2 // SiPixelTemplate.h (v10.20)
3 //
4 // Add goodness-of-fit info and spare entries to templates, version number in template header, more error checking
5 // Add correction for (Q_F-Q_L)/(Q_F+Q_L) bias
6 // Add cot(beta) reflection to reduce y-entries and more sophisticated x-interpolation
7 // Fix small index searching bug in interpolate method
8 // Change interpolation indexing to avoid complier complaining about possible un-initialized variables
9 // Replace containers with static arrays in calls to ysigma2 and xsigma2
10 // Add external threshold to calls to ysigma2 and xsigma2, fix parameter signal max for xsigma2
11 // Return to 5 pixel spanning but adjust boundaries to use only when needed
12 // Implement improved (faster) chi2min search that depends on pixel types
13 // Fill template arrays in single calls to this object
14 // Add qmin to the template
15 // Add qscale to match charge scales
16 // Small improvement to x-chisquare interpolation
17 // Enlarge SiPixelTemplateStore to accommodate larger templates and increased alpha acceptance (reduce PT threshold to ~200 MeV)
18 // Store x and y cluster sizes in fractional pixels to facilitate cluster splitting
19 // Keep interpolated central 9 template bins in private storage and expand/shift in the getter functions (faster for speed=2/3) and easier to build 3d templates
20 // Store error and bias information for the simple chi^2 min position analysis (no interpolation or Q_{FB} corrections) to use in cluster splitting
21 // To save time, the gaussian centers and sigma are not interpolated right now (they aren't currently used). They can be restored by un-commenting lines in the interpolate method.
22 // Add a new method to calculate qbin for input cotbeta and cluster charge. To be used for error estimation of merged clusters in PixelCPEGeneric.
23 // Add bias info for Barrel and FPix separately in the header
24 // Improve the charge estimation for larger cot(alpha) tracks
25 // Change interpolate method to return false boolean if track angles are outside of range
26 // Add template info and method for truncation information
27 // Change to allow template sizes to be changed at compile time
28 // Fix bug in track angle checking
29 // Accommodate Dave's new DB pushfile which overloads the old method (file input)
30 // Add CPEGeneric error information and expand qbin method to access useful info for PixelCPEGeneric
31 // Fix large cot(alpha) bug in qmin interpolation
32 // Add second qmin to allow a qbin=5 state
33 // Use interpolated chi^2 info for one-pixel clusters
34 // Separate BPix and FPix charge scales and thresholds
35 // Fix DB pushfile version number checking bug.
36 // Remove assert from qbin method
37 // Replace asserts with exceptions in CMSSW
38 // Change calling sequence to interpolate method to handle cot(beta)<0 for FPix cosmics
39 // Add getter for pixelav Lorentz width estimates to qbin method
40 // Add check on template size to interpolate and qbin methods
41 // Add qbin population information, charge distribution information
42 //
43 // V7.00 - Decouple BPix and FPix information into separate templates
44 // Add methods to facilitate improved cluster splitting
45 // Fix small charge scaling bug (affects FPix only)
46 // Change y-slice used for the x-template to be closer to the actual cotalpha-cotbeta point
47 // (there is some weak breakdown of x-y factorization in the FPix after irradiation)
48 //
49 // V8.00 - Add method to calculate a simple 2D template
50 // Reorganize the interpolate method to extract header info only once per ID
51 // V8.01 - Improve simple template normalization
52 // V8.05 - Change qbin normalization to work better after irradiation
53 // V8.10 - Add Vavilov distribution interpolation
54 // V8.11 - Renormalize the x-templates for Guofan's cluster size calculation
55 // V8.12 - Technical fix to qavg issue.
56 // V8.13 - Fix qbin and fastsim interpolaters to avoid changing class variables
57 // V8.20 - Add methods to identify the central pixels in the x- and y-templates (to help align templates with clusters in radiation damaged detectors)
58 // Rename class variables from pxxxx (private xxxx) to xxxx_ to follow standard convention.
59 // Add compiler option to store the template entries in BOOST multiarrays of structs instead of simple c arrays
60 // (allows dynamic resizing template storage and has bounds checking but costs ~10% in execution time).
61 // V8.21 - Add new qbin method to use in cluster splitting
62 // V8.23 - Replace chi-min position errors with merged cluster chi2 probability info
63 // V8.25 - Incorporate VI's speed changes into the current version
64 // V8.26 - Modify the Vavilov lookups to work better with the FPix (offset y-templates)
65 // V8.30 - Change the splitting template generation and access to improve speed and eliminate triple index boost::multiarray
66 // V8.31 - Add correction factor: measured/true charge
67 // V8.31 - Fix version number bug in db object I/O (pushfile)
68 // V8.32 - Check for illegal qmin during loading
69 // V8.33 - Fix small type conversion warnings
70 // V8.40 - Incorporate V.I. optimizations
71 // V9.00 - Expand header to include multi and single dcol thresholds, LA biases, and (variable) Qbin definitions
72 // V9.01 - Protect against negative error squared
73 // V10.00 - Update to work with Phase 1 FPix. Fix some code problems introduced by other maintainers.
74 // V10.01 - Fix initialization style as suggested by S. Krutelyov
75 // V10.10 - Add class variables and methods to correctly calculate the probabilities of single pixel clusters
76 // V10.11 - Allow subdetector ID=5 for FPix R2P2 [allows better internal labeling of templates]
77 // V10.12 - Enforce minimum signal size in pixel charge uncertainty calculation
78 // V10.13 - Update the variable size [SI_PIXEL_TEMPLATE_USE_BOOST] option so that it works with VI's enhancements
79 // V10.20 - Add directory path selection to the ascii pushfile method
80 // V10.21 - Address runtime issues in pushfile() for gcc 7.X due to using tempfile as char string + misc. cleanup [Petar]
81 // V10.22 - Move templateStore to the heap, fix variable name in pushfile() [Petar]
82 
83 
84 
85 
86 // Created by Morris Swartz on 10/27/06.
87 //
88 //
89 
90 // Build the template storage structure from several pieces
91 
92 #ifndef SiPixelTemplate_h
93 #define SiPixelTemplate_h 1
94 
95 #include "SiPixelTemplateDefs.h"
96 
97 #include<vector>
98 #include<cassert>
99 #include "boost/multi_array.hpp"
100 
101 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
104 #endif
105 
107  int runnum;
108  float alpha;
109  float cotalpha;
110  float beta;
111  float cotbeta;
112  float costrk[3];
113  float qavg;
114  float pixmax;
115  float symax;
116  float dyone;
117  float syone;
118  float sxmax;
119  float dxone;
120  float sxone;
121  float dytwo;
122  float sytwo;
123  float dxtwo;
124  float sxtwo;
125  float qmin;
126  float qmin2;
127  float yavggen[4];
128  float yrmsgen[4];
129  float xavggen[4];
130  float xrmsgen[4];
131 
132  float clsleny;
133  float clslenx;
134  float mpvvav;
135  float sigmavav;
136  float kappavav;
137  float mpvvav2;
138  float sigmavav2;
139  float kappavav2;
140  float ypar[2][5];
141  float ytemp[9][TYSIZE];
142  float xpar[2][5];
143  float xtemp[9][TXSIZE];
144  float yavg[4];
145  float yrms[4];
146  float ygx0[4];
147  float ygsig[4];
148  float yflpar[4][6];
149  float xavg[4];
150  float xrms[4];
151  float xgx0[4];
152  float xgsig[4];
153  float xflpar[4][6];
154  float chi2yavg[4];
155  float chi2ymin[4];
156  float chi2xavg[4];
157  float chi2xmin[4];
158  float chi2yavgone;
159  float chi2yminone;
160  float chi2xavgone;
161  float chi2xminone;
162  float yavgc2m[4];
163  float yrmsc2m[4];
164  float chi2yavgc2m[4];
165  float chi2yminc2m[4];
166  float xavgc2m[4];
167  float xrmsc2m[4];
168  float chi2xavgc2m[4];
169  float chi2xminc2m[4];
170  float ygx0gen[4];
171  float ygsiggen[4];
172  float xgx0gen[4];
173  float xgsiggen[4];
174  float qbfrac[3];
175  float fracyone;
176  float fracxone;
177  float fracytwo;
178  float fracxtwo;
179  float qavg_avg;
181  float spare[1];
182 } ;
183 
184 
185 
186 
188  int ID;
189  int NTy;
190  int NTyx;
191  int NTxx;
192  int Dtype;
193  float qscale;
194  float lorywidth;
195  float lorxwidth;
196  float lorybias;
197  float lorxbias;
198  float Vbias;
199  float temperature;
200  float fluence;
201  float s50;
202  float ss50;
203  char title[80];
205  float Bfield;
206  float fbin[3];
207  float xsize;
208  float ysize;
209  float zsize;
210 } ;
211 
212 
213 
216 #ifndef SI_PIXEL_TEMPLATE_USE_BOOST
217  float cotbetaY[60];
218  float cotbetaX[5];
219  float cotalphaX[29];
221  SiPixelTemplateEntry entx[5][29];
222  void destroy() {};
223 #else
224  float* cotbetaY = nullptr;
225  float* cotbetaX = nullptr;
226  float* cotalphaX = nullptr;
227  boost::multi_array<SiPixelTemplateEntry,1> enty;
228  boost::multi_array<SiPixelTemplateEntry,2> entx;
229  void destroy() { // deletes arrays created by pushfile method of SiPixelTemplate
230  if (cotbetaY!=nullptr) delete[] cotbetaY;
231  if (cotbetaX!=nullptr) delete[] cotbetaX;
232  if (cotalphaX!=nullptr) delete[] cotalphaX;
233  }
234 #endif
235 } ;
236 
237 
238 // ******************************************************************************************
256 // ******************************************************************************************
258 public:
259  SiPixelTemplate(const std::vector< SiPixelTemplateStore > & thePixelTemp) : thePixelTemp_(thePixelTemp) { id_current_ = -1; index_id_ = -1; cota_current_ = 0.; cotb_current_ = 0.; }
260 
261 
262 // Load the private store with info from the file with the index (int) filenum from directory dir:
263 // ${dir}template_summary_zp${filenum}.out
264 #ifdef SI_PIXEL_TEMPLATE_STANDALONE
265  static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > & pixelTemp , std::string dir = "");
266 #else
267  static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > & pixelTemp , std::string dir = "CalibTracker/SiPixelESProducers/data/"); // *&^%$#@! Different default dir -- remove once FastSim is updated.
268  static bool pushfile(const SiPixelTemplateDBObject& dbobject, std::vector< SiPixelTemplateStore > & pixelTemp); // load the private store with info from db
269 #endif
270 
271  // initialize the rest;
272  static void postInit(std::vector< SiPixelTemplateStore > & thePixelTemp_);
273 
274  // Interpolate input alpha and beta angles to produce a working template for each individual hit.
275  bool interpolate(int id, float cotalpha, float cotbeta, float locBz, float locBx);
276 
277  // Interpolate input alpha and beta angles to produce a working template for each individual hit.
278  bool interpolate(int id, float cotalpha, float cotbeta, float locBz);
279 
280  // overload for compatibility.
281  bool interpolate(int id, float cotalpha, float cotbeta);
282 
283  // retreive interpolated templates.
284  void ytemp(int fybin, int lybin, float ytemplate[41][BYSIZE]);
285 
286  void xtemp(int fxbin, int lxbin, float xtemplate[41][BXSIZE]);
287 
288  //Method to estimate the central pixel of the interpolated y-template
289  int cytemp();
290 
291  //Method to estimate the central pixel of the interpolated x-template
292  int cxtemp();
293 
294  // new methods to build templates from two interpolated clusters (for splitting)
295  void ytemp3d_int(int nypix, int& nybins);
296 
297  void ytemp3d(int j, int k, std::vector<float>& ytemplate);
298 
299  void xtemp3d_int(int nxpix, int& nxbins);
300 
301  void xtemp3d(int j, int k, std::vector<float>& xtemplate);
302 
303  // Convert vector of projected signals into uncertainties for fitting.
304  void ysigma2(int fypix, int lypix, float sythr, float ysum[BYSIZE], float ysig2[BYSIZE]);
305 
306  void ysigma2(float qpixel, int index, float& ysig2);
307 
308  void xsigma2(int fxpix, int lxpix, float sxthr, float xsum[BXSIZE], float xsig2[BXSIZE]);
309 
310  // Interpolate qfl correction in y.
311  float yflcorr(int binq, float qfly);
312 
313  // Interpolate qfl correction in x.
314  float xflcorr(int binq, float qflx);
315 
316  int qbin(int id, float cotalpha, float cotbeta, float locBz, float locBx, float qclus, float& pixmx, float& sigmay, float& deltay, float& sigmax, float& deltax,
317  float& sy1, float& dy1, float& sy2, float& dy2, float& sx1, float& dx1, float& sx2, float& dx2);
318 
319  int qbin(int id, float cotalpha, float cotbeta, float locBz, float qclus, float& pixmx, float& sigmay, float& deltay, float& sigmax, float& deltax,
320  float& sy1, float& dy1, float& sy2, float& dy2, float& sx1, float& dx1, float& sx2, float& dx2);
321 
322  // Overload to use for cluster splitting
323  int qbin(int id, float cotalpha, float cotbeta, float qclus);
324 
325  // Overload to keep legacy interface
326  int qbin(int id, float cotbeta, float qclus);
327 
328  // Method to return template errors for fastsim
329  void temperrors(int id, float cotalpha, float cotbeta, int qBin, float& sigmay, float& sigmax, float& sy1, float& sy2, float& sx1, float& sx2);
330 
331  //Method to return qbin and size probabilities for fastsim
332  void qbin_dist(int id, float cotalpha, float cotbeta, float qbin_frac[4], float& ny1_frac, float& ny2_frac, float& nx1_frac, float& nx2_frac);
333 
334  //Method to calculate simple 2D templates
335  bool simpletemplate2D(float xhitp, float yhitp, std::vector<bool>& ydouble, std::vector<bool>& xdouble, float template2d[BXM2][BYM2]);
336 
337  //Method to interpolate Vavilov distribution parameters
338  void vavilov_pars(double& mpv, double& sigma, double& kappa);
339 
340  //Method to interpolate 2-cluster Vavilov distribution parameters
341  void vavilov2_pars(double& mpv, double& sigma, double& kappa);
342 
343 
344  float qavg() {return qavg_;}
345  float pixmax() {return pixmax_;}
346  float qscale() {return qscale_;}
347  float s50() {return s50_;}
348  float ss50() {return ss50_;}
349  float symax() {return symax_;}
350  float dyone() {return dyone_;}
351  float syone() {return syone_;}
352  float dytwo() {return dytwo_;}
353  float sytwo() {return sytwo_;}
354  float sxmax() {return sxmax_;}
355  float dxone() {return dxone_;}
356  float sxone() {return sxone_;}
357  float dxtwo() {return dxtwo_;}
358  float sxtwo() {return sxtwo_;}
359  float qmin() {return qmin_;}
360  float qmin(int i) {
361 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
362  if(i < 0 || i > 1) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::qmin called with illegal index = " << i << std::endl;}
363 #else
364  assert(i>=0 && i<2);
365 #endif
366  if(i==0){return qmin_;}else{return qmin2_;}}
367  float clsleny() {return clsleny_;}
368  float clslenx() {return clslenx_;}
369  float yratio() {return yratio_;}
370  float yxratio() {return yxratio_;}
371  float xxratio() {return xxratio_;}
372  float yavg(int i) {
373 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
374  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yavg called with illegal index = " << i << std::endl;}
375 #else
376  assert(i>=0 && i<4);
377 #endif
378  return yavg_[i];}
379  float yrms(int i) {
380 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
381  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yrms called with illegal index = " << i << std::endl;}
382 #else
383  assert(i>=0 && i<4);
384 #endif
385  return yrms_[i];}
386  float ygx0(int i) {
387 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
388  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ygx0 called with illegal index = " << i << std::endl;}
389 #else
390  assert(i>=0 && i<4);
391 #endif
392  return ygx0_[i];}
393  float ygsig(int i) {
394 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
395  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ygsig called with illegal index = " << i << std::endl;}
396 #else
397  assert(i>=0 && i<4);
398 #endif
399  return ygsig_[i];}
400  float xavg(int i) {
401 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
402  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xavg called with illegal index = " << i << std::endl;}
403 #else
404  assert(i>=0 && i<4);
405 #endif
406  return xavg_[i];}
407  float xrms(int i) {
408 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
409  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xrms called with illegal index = " << i << std::endl;}
410 #else
411  assert(i>=0 && i<4);
412 #endif
413  return xrms_[i];}
414  float xgx0(int i) {
415 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
416  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xgx0 called with illegal index = " << i << std::endl;}
417 #else
418  assert(i>=0 && i<4);
419 #endif
420  return xgx0_[i];}
421  float xgsig(int i) {
422 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
423  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xgsig called with illegal index = " << i << std::endl;}
424 #else
425  assert(i>=0 && i<4);
426 #endif
427  return xgsig_[i];}
428  float chi2yavg(int i) {
429 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
430  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2yavg called with illegal index = " << i << std::endl;}
431 #else
432  assert(i>=0 && i<4);
433 #endif
434  return chi2yavg_[i];}
435  float chi2ymin(int i) {
436 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
437  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2ymin called with illegal index = " << i << std::endl;}
438 #else
439  assert(i>=0 && i<4);
440 #endif
441  return chi2ymin_[i];}
442  float chi2xavg(int i) {
443 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
444  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2xavg called with illegal index = " << i << std::endl;}
445 #else
446  assert(i>=0 && i<4);
447 #endif
448  return chi2xavg_[i];}
449  float chi2xmin(int i) {
450 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
451  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2xmin called with illegal index = " << i << std::endl;}
452 #else
453  assert(i>=0 && i<4);
454 #endif
455  return chi2xmin_[i];}
456  float yavgc2m(int i) {
457 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
458  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yavgc2m called with illegal index = " << i << std::endl;}
459 #else
460  assert(i>=0 && i<4);
461 #endif
462  return yavgc2m_[i];}
463  float yrmsc2m(int i) {
464 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
465  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yrmsc2m called with illegal index = " << i << std::endl;}
466 #else
467  assert(i>=0 && i<4);
468 #endif
469  return yrmsc2m_[i];}
470  float chi2yavgc2m(int i) {
471 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
472  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2yavgc2m called with illegal index = " << i << std::endl;}
473 #else
474  assert(i>=0 && i<4);
475 #endif
476  return chi2yavgc2m_[i];}
477  float chi2yminc2m(int i) {
478 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
479  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2yminc2m called with illegal index = " << i << std::endl;}
480 #else
481  assert(i>=0 && i<4);
482 #endif
483  return chi2yminc2m_[i];}
484  float xavgc2m(int i) {
485 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
486  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xavgc2m called with illegal index = " << i << std::endl;}
487 #else
488  assert(i>=0 && i<4);
489 #endif
490  return xavgc2m_[i];}
491  float xrmsc2m(int i) {
492 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
493  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xrmsc2m called with illegal index = " << i << std::endl;}
494 #else
495  assert(i>=0 && i<4);
496 #endif
497  return xrmsc2m_[i];}
498  float chi2xavgc2m(int i) {
499 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
500  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2xavgc2m called with illegal index = " << i << std::endl;}
501 #else
502  assert(i>=0 && i<4);
503 #endif
504  return chi2xavgc2m_[i];}
505  float chi2xminc2m(int i) {
506 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
507  if(i < 0 || i > 3) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::chi2xminc2m called with illegal index = " << i << std::endl;}
508 #else
509  assert(i>=0 && i<4);
510 #endif
511  return chi2xminc2m_[i];}
512  float fbin(int i) {
513 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
514  if(i < 0 || i > 2) {throw cms::Exception("DataCorrupt") << "SiPixelTemplate::fbin called with illegal index = " << i << std::endl;}
515 #else
516  assert(i>=0 && i<3);
517 #endif
518  return fbin_[i];}
519 
520  float chi2yavgone() {return chi2yavgone_;}
521  float chi2yminone() {return chi2yminone_;}
522  float chi2xavgone() {return chi2xavgone_;}
523  float chi2xminone() {return chi2xminone_;}
524  float lorywidth() {return lorywidth_;}
525  float lorxwidth() {return lorxwidth_;}
526  //float lorybias() {return lorywidth_;} //!< signed lorentz y-width (microns)
527  //float lorxbias() {return lorxwidth_;} //!< signed lorentz x-width (microns)
528  float lorybias() {return lorybias_;}
529  float lorxbias() {return lorxbias_;}
530  float mpvvav() {return mpvvav_;}
531  float sigmavav() {return sigmavav_;}
532  float kappavav() {return kappavav_;}
533  float mpvvav2() {return mpvvav2_;}
534  float sigmavav2() {return sigmavav2_;}
535  float kappavav2() {return kappavav2_;}
536  float xsize() {return xsize_;}
537  float ysize() {return ysize_;}
538  float zsize() {return zsize_;}
539  float r_qMeas_qTrue() {return r_qMeas_qTrue_;}
540  float fracyone() {return fracyone_;}
541  float fracxone() {return fracxone_;}
542  float fracytwo() {return fracytwo_;}
543  float fracxtwo() {return fracxtwo_;}
544  // float yspare(int i) {assert(i>=0 && i<5); return pyspare[i];} //!< vector of 5 spares interpolated in beta only
545  // float xspare(int i) {assert(i>=0 && i<10); return pxspare[i];} //!< vector of 10 spares interpolated in alpha and beta
546 
547 
548 private:
549 
550  // Keep current template interpolaion parameters
551 
553  int index_id_;
556  float abs_cotb_;
557  bool success_;
558 
559 
560  // Keep results of last interpolation to return through member functions
561 
562  float qavg_;
563  float pixmax_;
564  float qscale_;
565  float s50_;
566  float ss50_;
567  float symax_;
568  float syparmax_;
569  float dyone_;
570  float syone_;
571  float dytwo_;
572  float sytwo_;
573  float sxmax_;
574  float sxparmax_;
575  float dxone_;
576  float sxone_;
577  float dxtwo_;
578  float sxtwo_;
579  float qmin_;
580  float clsleny_;
581  float clslenx_;
582  float yratio_;
583  float yparl_[2][5];
584  float yparh_[2][5];
585  float xparly0_[2][5];
586  float xparhy0_[2][5];
587  float ytemp_[9][BYSIZE];
588  float yxratio_;
589  float xxratio_;
590  float xpar0_[2][5];
591  float xparl_[2][5];
592  float xparh_[2][5];
593  float xtemp_[9][BXSIZE];
594  float yavg_[4];
595  float yrms_[4];
596  float ygx0_[4];
597  float ygsig_[4];
598  float yflparl_[4][6];
599  float yflparh_[4][6];
600  float xavg_[4];
601  float xrms_[4];
602  float xgx0_[4];
603  float xgsig_[4];
604  float xflparll_[4][6];
605  float xflparlh_[4][6];
606  float xflparhl_[4][6];
607  float xflparhh_[4][6];
608  float chi2yavg_[4];
609  float chi2ymin_[4];
610  float chi2xavg_[4];
611  float chi2xmin_[4];
612  float yavgc2m_[4];
613  float yrmsc2m_[4];
614  float chi2yavgc2m_[4];
615  float chi2yminc2m_[4];
616  float xavgc2m_[4];
617  float xrmsc2m_[4];
618  float chi2xavgc2m_[4];
619  float chi2xminc2m_[4];
620  float chi2yavgone_;
621  float chi2yminone_;
622  float chi2xavgone_;
623  float chi2xminone_;
624  float qmin2_;
625  float mpvvav_;
626  float sigmavav_;
627  float kappavav_;
628  float mpvvav2_;
629  float sigmavav2_;
630  float kappavav2_;
631  float lorywidth_;
632  float lorxwidth_;
633  float lorybias_;
634  float lorxbias_;
635  float xsize_;
636  float ysize_;
637  float zsize_;
638  float qavg_avg_;
639  float nybins_;
640  float nxbins_;
642  float fbin_[3];
643  float fracyone_;
644  float fracxone_;
645  float fracytwo_;
646  float fracxtwo_;
647  boost::multi_array<float,2> temp2dy_;
648  boost::multi_array<float,2> temp2dx_;
649 
650 
651  // The actual template store is a std::vector container
652 
653  const std::vector< SiPixelTemplateStore > & thePixelTemp_;
654 } ;
655 
656 
657 #endif
float fracxone()
The simulated fraction of single pixel x-clusters.
float yrmsc2m(int i)
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins ...
SiPixelTemplate(const std::vector< SiPixelTemplateStore > &thePixelTemp)
Constructor for cases in which template store already exists.
float cota_current_
current cot alpha
float qavg_avg
average cluster charge of clusters that are less than qavg (normalize 2-D simple templates) ...
float mpvvav_
most probable charge in Vavilov distribution (not actually for larger kappa)
int runnum
< Basic template entry corresponding to a single set of track angles
float xflpar[4][6]
Aqfl-parameterized x-correction in 4 charge bins.
float fbin(int i)
Return lower bound of Qbin definition.
float xrms[4]
average x-rms of reconstruction binned in 4 charge bins
#define BXSIZE
float clslenx
cluster x-length in pixels at signal height sxmax/2
float chi2xminone()
//!< minimum of x chi^2 for 1 pixel clusters
float clsleny_
y-cluster length of smaller interpolated template in pixels
float qavg
average cluster charge for this set of track angles (now includes threshold effects) ...
float pixmax_
maximum pixel charge
float chi2yavgc2m(int i)
1st pass chi2 min search: average y-chisq for merged clusters
float syone
rms for one pixel y-clusters
float chi2yavgone
average y chi^2 for 1 pixel clusters
float symax()
average pixel signal for y-projection of cluster
float kappavav2()
kappa parameter for 2-cluster Vavilov distribution
float lorybias_
Lorentz y-bias.
float yavg(int i)
average y-bias of reconstruction binned in 4 charge bins
float abs_cotb_
absolute value of cot beta
float dyone
mean offset/correction for one pixel y-clusters
#define BYSIZE
float sigmavav
"sigma" scale fctor for Vavilov distribution
float fracxtwo
fraction of double pixel sample with xsize = 1
float yavggen[4]
generic algorithm: average y-bias of reconstruction binned in 4 charge bins
float sxmax
average pixel signal for x-projection of cluster
def destroy(e)
Definition: pyrootRender.py:13
float chi2yminc2m[4]
1st pass chi2 min search: minimum of y chi^2 in 4 charge bins (merged clusters)
float xavgc2m[4]
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins ...
#define TXSIZE
float chi2xavgone
average x chi^2 for 1 pixel clusters
float fracytwo
fraction of double pixel sample with ysize = 1
float yrms[4]
average y-rms of reconstruction binned in 4 charge bins
float ss50()
1/2 of the single pixel per double column threshold in electrons
float chi2xmin(int i)
minimum y chi^2 in 4 charge bins
int NTxx
number of Template x-entries in each slice
float ss50_
1/2 of the pixel double col threshold signal in electrons
float mpvvav()
most probable charge in Vavilov distribution (not actually for larger kappa)
float mpvvav2
most probable charge in Vavilov distribution for 2 merged clusters (not actually for larger kappa) ...
float clslenx()
x-size of smaller interpolated template in pixels
float sxmax_
average pixel signal for x-projection of cluster
boost::multi_array< float, 2 > temp2dx_
2d-primitive for spltting 3-d template
float ygx0gen[4]
generic algorithm: average y0 from Gaussian fit binned in 4 charge bins
float xavg[4]
average x-bias of reconstruction binned in 4 charge bins
float chi2yminone_
minimum of y chi^2 for 1 pixel clusters
float chi2ymin(int i)
minimum y chi^2 in 4 charge bins
float lorybias
estimate of y-lorentz bias
float yratio()
fractional distance in y between cotbeta templates
float fluence
radiation fluence in n_eq/cm^2
float fracxone_
The simulated fraction of single pixel x-clusters.
float ss50
1/2 of the single hit dcol threshold in electrons
float dytwo
mean offset/correction for one double-pixel y-clusters
float xrms(int i)
average x-rms of reconstruction binned in 4 charge bins
float ysize
pixel size (for future use in upgraded geometry)
float dxone
mean offset/correction for one pixel x-clusters
float chi2xavgone_
average x chi^2 for 1 pixel clusters
float qmin()
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
float pixmax
maximum charge for individual pixels in cluster
float zsize()
pixel z-size or thickness (microns)
float xavgc2m(int i)
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins ...
float qscale
Charge scaling to match cmssw and pixelav.
float chi2yavgc2m[4]
1st pass chi2 min search: average y chi^2 in 4 charge bins (merged clusters)
float qmin
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
float chi2xavgc2m[4]
1st pass chi2 min search: average x chi^2 in 4 charge bins (merged clusters)
float mpvvav2()
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa) ...
float r_qMeas_qTrue()
ratio of measured to true cluster charge
float sytwo()
rms for one double-pixel y-clusters
float xgsiggen[4]
generic algorithm: average sigma_x from Gaussian fit binned in 4 charge bins
float cotb_current_
current cot beta
float s50_
1/2 of the pixel single col threshold signal in electrons
float chi2xminc2m[4]
1st pass chi2 min search: minimum of x chi^2 in 4 charge bins (merged clusters)
int ID
< template header structure
float Bfield
Bfield in Tesla.
float cotalpha
cot(alpha) is proportional to cluster length in x and is basis of interpolation
float temperature
detector temperature in deg K
float chi2yminone()
//!< minimum of y chi^2 for 1 pixel clusters
float ytemp[9][21]
templates for y-reconstruction (binned over 1 central pixel)
float sxone()
rms for one pixel x-clusters
float yrmsc2m[4]
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins ...
float qavg_
average cluster charge for this set of track angles
float lorywidth
estimate of y-lorentz width for optimal resolution
float r_qMeas_qTrue_
ratio of measured to true cluster charges
#define BXM2
float lorxbias_
Lorentz x-bias.
int templ_version
Version number of the template to ensure code compatibility.
float qscale()
charge scaling factor
float xpar[2][5]
projected x-pixel uncertainty parameterization
float chi2xavgc2m(int i)
1st pass chi2 min search: average x-chisq for merged clusters
float ygx0[4]
average y0 from Gaussian fit binned in 4 charge bins
float xgx0gen[4]
generic algorithm: average x0 from Gaussian fit binned in 4 charge bins
float dxone()
mean offset/correction for one pixel x-clusters
float sxparmax_
maximum pixel signal for parameterization of x uncertainties
float kappavav2_
kappa parameter for 2-cluster Vavilov distribution
float symax
average pixel signal for y-projection of cluster
float sigmavav_
"sigma" scale fctor for Vavilov distribution
float kappavav2
kappa parameter for Vavilov distribution for 2 merged clusters
float xgsig[4]
average sigma_x from Gaussian fit binned in 4 charge bins
float kappavav()
kappa parameter for Vavilov distribution
float cotbeta
cot(beta) is proportional to cluster length in y and is basis of interpolation
float chi2yavg(int i)
average y chi^2 in 4 charge bins
float beta
beta track angle (defined in CMS CMS IN 2004/014)
float fracytwo()
The simulated fraction of single double-size pixel y-clusters.
float lorxwidth()
signed lorentz x-width (microns)
float lorywidth()
signed lorentz y-width (microns)
float ygsig(int i)
average sigma_y from Gaussian fit binned in 4 charge bins
float yrms(int i)
average y-rms of reconstruction binned in 4 charge bins
float lorywidth_
Lorentz y-width (sign corrected for fpix frame)
float clsleny()
y-size of smaller interpolated template in pixels
float fracxtwo()
The simulated fraction of single double-size pixel x-clusters.
float xrmsc2m[4]
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins ...
float lorxwidth
estimate of x-lorentz width for optimal resolution
float xgx0[4]
average x0 from Gaussian fit binned in 4 charge bins
float xsize()
pixel x-size (microns)
float sigmavav2_
"sigma" scale fctor for 2-cluster Vavilov distribution
#define BYM2
float sigmavav2()
"sigma" scale fctor for 2-cluster Vavilov distribution
float ygsiggen[4]
generic algorithm: average sigma_y from Gaussian fit binned in 4 charge bins
float fracxone
fraction of sample with xsize = 1
float sxtwo()
rms for one double-pixel x-clusters
float mpvvav
most probable charge in Vavilov distribution (not actually for larger kappa)
float ysize_
Pixel y-size.
float xsize_
Pixel x-size.
float dytwo()
mean offset/correction for one double-pixel y-clusters
float kappavav_
kappa parameter for Vavilov distribution
float sxtwo
rms for one double-pixel x-clusters
bool success_
true if cotalpha, cotbeta are inside of the acceptance (dynamically loaded)
float r_qMeas_qTrue
ratio of measured to true cluster charge
float syone_
rms for one pixel y-clusters
boost::multi_array< float, 2 > temp2dy_
2d-primitive for spltting 3-d template
int Dtype
detector type (0=BPix, 1=FPix)
float chi2yavg[4]
average y chi^2 in 4 charge bins
float alpha
alpha track angle (defined in CMS CMS IN 2004/014)
float xtemp[9][13]
templates for x-reconstruction (binned over 1 central pixel)
float chi2yminc2m(int i)
1st pass chi2 min search: minimum y-chisq for merged clusters
SiPixelTemplateHeader head
< template storage structure
float s50()
1/2 of the pixel threshold signal in electrons
float chi2xminone
minimum of x chi^2 for 1 pixel clusters
float ypar[2][5]
projected y-pixel uncertainty parameterization
float chi2yavgone_
average y chi^2 for 1 pixel clusters
int k[5][pyjets_maxn]
float dyone_
mean offset/correction for one pixel y-clusters
float yavgc2m(int i)
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins ...
float sxone_
rms for one pixel x-clusters
float dxtwo_
mean offset/correction for one double-pixel x-clusters
float chi2xminc2m(int i)
1st pass chi2 min search: minimum x-chisq for merged clusters
float ygx0(int i)
average y0 from Gaussian fit binned in 4 charge bins
const std::vector< SiPixelTemplateStore > & thePixelTemp_
float s50
1/2 of the multihit dcol threshold in electrons
#define TYSIZE
float qscale_
charge scaling factor
float qmin(int i)
minimum cluster charge for valid hit (keeps 99.9% or 99.8% of simulated hits)
float lorybias()
signed lorentz y-width (microns)
float zsize
pixel size (for future use in upgraded geometry)
float Vbias
detector bias potential in Volts
float qmin2_
tighter minimum cluster charge for valid hit (keeps 99.8% of simulated hits)
float qbfrac[3]
fraction of sample in qbin = 0-2 (>=3 is the complement)
float syone()
rms for one pixel y-clusters
float sytwo_
rms for one double-pixel y-clusters
float xsize
pixel size (for future use in upgraded geometry)
float qavg_avg_
average of cluster charge less than qavg
float fracyone
fraction of sample with ysize = 1
float fracyone()
The simulated fraction of single pixel y-clusters.
float chi2yavgone()
//!< average y chi^2 for 1 pixel clusters
float qmin2
tighter minimum cluster charge for valid hit (keeps 99.8% of simulated hits)
float yxratio()
fractional distance in y between cotalpha templates slices
float chi2xminone_
minimum of x chi^2 for 1 pixel clusters
float yavg[4]
average y-bias of reconstruction binned in 4 charge bins
float qavg()
average cluster charge for this set of track angles
float sxtwo_
rms for one double-pixel x-clusters
float sxmax()
average pixel signal for x-projection of cluster
float clslenx_
x-cluster length of smaller interpolated template in pixels
float chi2ymin[4]
minimum of y chi^2 in 4 charge bins
float fracyone_
The simulated fraction of single pixel y-clusters.
float yavgc2m[4]
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins ...
int NTy
number of Template y entries
float fracxtwo_
The simulated fraction of single double-size pixel x-clusters.
float symax_
average pixel signal for y-projection of cluster
float dxtwo
mean offset/correction for one double-pixel x-clusters
float lorxbias
estimate of x-lorentz bias
float chi2xavgone()
//!< average x chi^2 for 1 pixel clusters
float lorxbias()
signed lorentz x-width (microns)
float pixmax()
maximum pixel charge
float xxratio_
fractional distance in x between cotalpha templates
float sigmavav()
"sigma" scale fctor for Vavilov distribution
int NTyx
number of Template y-slices of x entries
float yflpar[4][6]
Aqfl-parameterized y-correction in 4 charge bins.
float yxratio_
fractional distance in y between x-slices of cotalpha templates
float sxone
rms for one pixel x-clusters
float xgx0(int i)
average x0 from Gaussian fit binned in 4 charge bins
float qmin_
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
float dxone_
mean offset/correction for one pixel x-clusters
float chi2xmin[4]
minimum of x chi^2 in 4 charge bins
static const G4double kappa
float lorxwidth_
Lorentz x-width.
float chi2xavg(int i)
averaage x chi^2 in 4 charge bins
int index_id_
current index
float chi2yminone
minimum of y chi^2 for 1 pixel clusters
float xgsig(int i)
average sigma_x from Gaussian fit binned in 4 charge bins
dbl *** dir
Definition: mlp_gen.cc:35
float costrk[3]
direction cosines of tracks used to generate this entry
float mpvvav2_
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa) ...
float syparmax_
maximum pixel signal for parameterization of y uncertainties
float ygsig[4]
average sigma_y from Gaussian fit binned in 4 charge bins
float nxbins_
number of bins in each dimension of the x-splitting template
float fracytwo_
The simulated fraction of single double-size pixel y-clusters.
float sigmavav2
"sigma" scale fctor for Vavilov distribution for 2 merged clusters
float sytwo
rms for one double-pixel y-clusters
float dyone()
mean offset/correction for one pixel y-clusters
float xavg(int i)
average x-bias of reconstruction binned in 4 charge bins
float xrmsgen[4]
generic algorithm: average x-rms of reconstruction binned in 4 charge bins
float dytwo_
mean offset/correction for one double-pixel y-clusters
float dxtwo()
mean offset/correction for one double-pixel x-clusters
int id_current_
current id
float ysize()
pixel y-size (microns)
float zsize_
Pixel z-size (thickness)
float chi2xavg[4]
average x chi^2 in 4 charge bins
float xrmsc2m(int i)
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins ...
float yratio_
fractional distance in y between cotbeta templates
float xxratio()
fractional distance in x between cotalpha templates
float kappavav
kappa parameter for Vavilov distribution
float xavggen[4]
generic algorithm: average x-bias of reconstruction binned in 4 charge bins
float yrmsgen[4]
generic algorithm: average y-rms of reconstruction binned in 4 charge bins
float nybins_
number of bins in each dimension of the y-splitting template
float clsleny
cluster y-length in pixels at signal height symax/2