#include <SiPixelTemplate.h>
Public Member Functions | |
float | chi2xavg (int i) |
averaage x chi^2 in 4 charge bins | |
float | chi2xavgc2m (int i) |
1st pass chi2 min search: average x-chisq for merged clusters | |
float | chi2xavgone () |
//!< average x chi^2 for 1 pixel clusters | |
float | chi2xmin (int i) |
minimum y chi^2 in 4 charge bins | |
float | chi2xminc2m (int i) |
1st pass chi2 min search: minimum x-chisq for merged clusters | |
float | chi2xminone () |
//!< minimum of x chi^2 for 1 pixel clusters | |
float | chi2yavg (int i) |
average y chi^2 in 4 charge bins | |
float | chi2yavgc2m (int i) |
1st pass chi2 min search: average y-chisq for merged clusters | |
float | chi2yavgone () |
//!< average y chi^2 for 1 pixel clusters | |
float | chi2ymin (int i) |
minimum y chi^2 in 4 charge bins | |
float | chi2yminc2m (int i) |
1st pass chi2 min search: minimum y-chisq for merged clusters | |
float | chi2yminone () |
//!< minimum of y chi^2 for 1 pixel clusters | |
float | clslenx () |
x-size of smaller interpolated template in pixels | |
float | clsleny () |
y-size of smaller interpolated template in pixels | |
int | cxtemp () |
Return central pixel of x-template pixels above readout threshold. | |
int | cytemp () |
Return central pixel of y template pixels above readout threshold. | |
float | dxone () |
mean offset/correction for one pixel x-clusters | |
float | dxtwo () |
mean offset/correction for one double-pixel x-clusters | |
float | dyone () |
mean offset/correction for one pixel y-clusters | |
float | dytwo () |
mean offset/correction for one double-pixel y-clusters | |
bool | interpolate (int id, float cotalpha, float cotbeta, float locBz) |
bool | interpolate (int id, float cotalpha, float cotbeta) |
float | kappavav () |
kappa parameter for Vavilov distribution | |
float | kappavav2 () |
kappa parameter for 2-cluster Vavilov distribution | |
float | lorxwidth () |
signed lorentz x-width (microns) | |
float | lorywidth () |
signed lorentz y-width (microns) | |
float | mpvvav () |
most probable charge in Vavilov distribution (not actually for larger kappa) | |
float | mpvvav2 () |
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa) | |
float | pixmax () |
maximum pixel charge | |
bool | pushfile (int filenum) |
bool | pushfile (const SiPixelTemplateDBObject &dbobject) |
float | qavg () |
average cluster charge for this set of track angles | |
int | qbin (int id, float cotalpha, float cotbeta, float locBz, float qclus, float &pixmx, float &sigmay, float &deltay, float &sigmax, float &deltax, float &sy1, float &dy1, float &sy2, float &dy2, float &sx1, float &dx1, float &sx2, float &dx2) |
int | qbin (int id, float cotalpha, float cotbeta, float qclus) |
int | qbin (int id, float cotbeta, float qclus) |
int | qbin (int id, float cotalpha, float cotbeta, float locBz, float qclus, float &pixmx, float &sigmay, float &deltay, float &sigmax, float &deltax, float &sy1, float &dy1, float &sy2, float &dy2, float &sx1, float &dx1, float &sx2, float &dx2, float &lorywidth, float &lorxwidth) |
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) |
float | qmin () |
minimum cluster charge for valid hit (keeps 99.9% of simulated hits) | |
float | qmin (int i) |
minimum cluster charge for valid hit (keeps 99.9% or 99.8% of simulated hits) | |
float | qscale () |
charge scaling factor | |
float | s50 () |
1/2 of the pixel threshold signal in electrons | |
float | sigmavav () |
"sigma" scale fctor for Vavilov distribution | |
float | sigmavav2 () |
"sigma" scale fctor for 2-cluster Vavilov distribution | |
bool | simpletemplate2D (float xhitp, float yhitp, std::vector< bool > &ydouble, std::vector< bool > &xdouble, float template2d[BXM2][BYM2]) |
Make simple 2-D templates from track angles set in interpolate and hit position. | |
SiPixelTemplate () | |
Default constructor. | |
float | sxmax () |
average pixel signal for x-projection of cluster | |
float | sxone () |
rms for one pixel x-clusters | |
float | sxtwo () |
rms for one double-pixel x-clusters | |
float | symax () |
average pixel signal for y-projection of cluster | |
float | syone () |
rms for one pixel y-clusters | |
float | sytwo () |
rms for one double-pixel y-clusters | |
void | temperrors (int id, float cotalpha, float cotbeta, int qBin, float &sigmay, float &sigmax, float &sy1, float &sy2, float &sx1, float &sx2) |
void | vavilov2_pars (double &mpv, double &sigma, double &kappa) |
void | vavilov_pars (double &mpv, double &sigma, double &kappa) |
float | xavg (int i) |
average x-bias of reconstruction binned in 4 charge bins | |
float | xavgc2m (int i) |
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins | |
float | xflcorr (int binq, float qflx) |
float | xgsig (int i) |
average sigma_x from Gaussian fit binned in 4 charge bins | |
float | xgx0 (int i) |
average x0 from Gaussian fit binned in 4 charge bins | |
float | xrms (int i) |
average x-rms of reconstruction binned in 4 charge bins | |
float | xrmsc2m (int i) |
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins | |
void | xsigma2 (int fxpix, int lxpix, float sxthr, float xsum[BXSIZE], float xsig2[BXSIZE]) |
float | xsize () |
pixel x-size (microns) | |
void | xtemp (int fxbin, int lxbin, float xtemplate[41][BXSIZE]) |
void | xtemp3d (int j, int k, std::vector< float > &xtemplate) |
void | xtemp3d_int (int nxpix, int &nxbins) |
float | xxratio () |
fractional distance in x between cotalpha templates | |
float | yavg (int i) |
average y-bias of reconstruction binned in 4 charge bins | |
float | yavgc2m (int i) |
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins | |
float | yflcorr (int binq, float qfly) |
float | ygsig (int i) |
average sigma_y from Gaussian fit binned in 4 charge bins | |
float | ygx0 (int i) |
average y0 from Gaussian fit binned in 4 charge bins | |
float | yratio () |
fractional distance in y between cotbeta templates | |
float | yrms (int i) |
average y-rms of reconstruction binned in 4 charge bins | |
float | yrmsc2m (int i) |
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins | |
void | ysigma2 (int fypix, int lypix, float sythr, float ysum[BYSIZE], float ysig2[BYSIZE]) |
void | ysigma2 (float qpixel, int index, float &ysig2) |
float | ysize () |
pixel y-size (microns) | |
void | ytemp (int fybin, int lybin, float ytemplate[41][BYSIZE]) |
void | ytemp3d (int j, int k, std::vector< float > &ytemplate) |
void | ytemp3d_int (int nypix, int &nybins) |
float | yxratio () |
fractional distance in y between cotalpha templates slices | |
float | zsize () |
pixel z-size or thickness (microns) | |
Private Attributes | |
float | abs_cotb_ |
absolute value of cot beta | |
float | chi2xavg_ [4] |
average x chi^2 in 4 charge bins | |
float | chi2xavgc2m_ [4] |
1st pass chi2 min search: average x-chisq for merged clusters | |
float | chi2xavgone_ |
average x chi^2 for 1 pixel clusters | |
float | chi2xmin_ [4] |
minimum of x chi^2 in 4 charge bins | |
float | chi2xminc2m_ [4] |
1st pass chi2 min search: minimum x-chisq for merged clusters | |
float | chi2xminone_ |
minimum of x chi^2 for 1 pixel clusters | |
float | chi2yavg_ [4] |
average y chi^2 in 4 charge bins | |
float | chi2yavgc2m_ [4] |
1st pass chi2 min search: average y-chisq for merged clusters | |
float | chi2yavgone_ |
average y chi^2 for 1 pixel clusters | |
float | chi2ymin_ [4] |
minimum of y chi^2 in 4 charge bins | |
float | chi2yminc2m_ [4] |
1st pass chi2 min search: minimum y-chisq for merged clusters | |
float | chi2yminone_ |
minimum of y chi^2 for 1 pixel clusters | |
float | clslenx_ |
x-cluster length of smaller interpolated template in pixels | |
float | clsleny_ |
y-cluster length of smaller interpolated template in pixels | |
float | cota_current_ |
current cot alpha | |
float | cotb_current_ |
current cot beta | |
float | dxone_ |
mean offset/correction for one pixel x-clusters | |
float | dxtwo_ |
mean offset/correction for one double-pixel x-clusters | |
float | dyone_ |
mean offset/correction for one pixel y-clusters | |
float | dytwo_ |
mean offset/correction for one double-pixel y-clusters | |
int | id_current_ |
current id | |
int | index_id_ |
current index | |
float | kappavav2_ |
kappa parameter for 2-cluster Vavilov distribution | |
float | kappavav_ |
kappa parameter for Vavilov distribution | |
float | lorxwidth_ |
Lorentz x-width. | |
float | lorywidth_ |
Lorentz y-width (sign corrected for fpix frame) | |
float | mpvvav2_ |
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa) | |
float | mpvvav_ |
most probable charge in Vavilov distribution (not actually for larger kappa) | |
float | nxbins_ |
number of bins in each dimension of the x-splitting template | |
float | nybins_ |
number of bins in each dimension of the y-splitting template | |
float | pixmax_ |
maximum pixel charge | |
float | qavg_ |
average cluster charge for this set of track angles | |
float | qavg_avg_ |
average of cluster charge less than qavg | |
float | qmin2_ |
tighter minimum cluster charge for valid hit (keeps 99.8% of simulated hits) | |
float | qmin_ |
minimum cluster charge for valid hit (keeps 99.9% of simulated hits) | |
float | qscale_ |
charge scaling factor | |
float | s50_ |
1/2 of the pixel threshold signal in adc units | |
float | sigmavav2_ |
"sigma" scale fctor for 2-cluster Vavilov distribution | |
float | sigmavav_ |
"sigma" scale fctor for Vavilov distribution | |
bool | success_ |
true if cotalpha, cotbeta are inside of the acceptance (dynamically loaded) | |
float | sxmax_ |
average pixel signal for x-projection of cluster | |
float | sxone_ |
rms for one pixel x-clusters | |
float | sxparmax_ |
maximum pixel signal for parameterization of x uncertainties | |
float | sxtwo_ |
rms for one double-pixel x-clusters | |
float | symax_ |
average pixel signal for y-projection of cluster | |
float | syone_ |
rms for one pixel y-clusters | |
float | syparmax_ |
maximum pixel signal for parameterization of y uncertainties | |
float | sytwo_ |
rms for one double-pixel y-clusters | |
boost::multi_array< float, 2 > | temp2dx_ |
2d-primitive for spltting 3-d template | |
boost::multi_array< float, 2 > | temp2dy_ |
2d-primitive for spltting 3-d template | |
std::vector< SiPixelTemplateStore > | thePixelTemp_ |
float | xavg_ [4] |
average x-bias of reconstruction binned in 4 charge bins | |
float | xavgc2m_ [4] |
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins | |
float | xflparhh_ [4][6] |
Aqfl-parameterized x-correction in 4 charge bins for larger cotbeta, cotalpha. | |
float | xflparhl_ [4][6] |
Aqfl-parameterized x-correction in 4 charge bins for larger cotbeta, smaller cotalpha. | |
float | xflparlh_ [4][6] |
Aqfl-parameterized x-correction in 4 charge bins for smaller cotbeta, larger cotalpha. | |
float | xflparll_ [4][6] |
Aqfl-parameterized x-correction in 4 charge bins for smaller cotbeta, cotalpha. | |
float | xgsig_ [4] |
sigma from Gaussian fit binned in 4 charge bins | |
float | xgx0_ [4] |
average x0 from Gaussian fit binned in 4 charge bins | |
float | xpar0_ [2][5] |
projected x-pixel uncertainty parameterization for central cotalpha | |
float | xparh_ [2][5] |
projected x-pixel uncertainty parameterization for larger cotalpha | |
float | xparhy0_ [2][5] |
projected x-pixel uncertainty parameterization for larger cotbeta (central alpha) | |
float | xparl_ [2][5] |
projected x-pixel uncertainty parameterization for smaller cotalpha | |
float | xparly0_ [2][5] |
projected x-pixel uncertainty parameterization for smaller cotbeta (central alpha) | |
float | xrms_ [4] |
average x-rms of reconstruction binned in 4 charge bins | |
float | xrmsc2m_ [4] |
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins | |
float | xsize_ |
Pixel x-size. | |
float | xtemp_ [9][BXSIZE] |
templates for x-reconstruction (binned over 5 central pixels) | |
float | xxratio_ |
fractional distance in x between cotalpha templates | |
float | yavg_ [4] |
average y-bias of reconstruction binned in 4 charge bins | |
float | yavgc2m_ [4] |
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins | |
float | yflparh_ [4][6] |
Aqfl-parameterized y-correction in 4 charge bins for larger cotbeta. | |
float | yflparl_ [4][6] |
Aqfl-parameterized y-correction in 4 charge bins for smaller cotbeta. | |
float | ygsig_ [4] |
average sigma_y from Gaussian fit binned in 4 charge bins | |
float | ygx0_ [4] |
average y0 from Gaussian fit binned in 4 charge bins | |
float | yparh_ [2][5] |
projected y-pixel uncertainty parameterization for larger cotbeta | |
float | yparl_ [2][5] |
projected y-pixel uncertainty parameterization for smaller cotbeta | |
float | yratio_ |
fractional distance in y between cotbeta templates | |
float | yrms_ [4] |
average y-rms of reconstruction binned in 4 charge bins | |
float | yrmsc2m_ [4] |
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins | |
float | ysize_ |
Pixel y-size. | |
float | ytemp_ [9][BYSIZE] |
templates for y-reconstruction (binned over 5 central pixels) | |
float | yxratio_ |
fractional distance in y between x-slices of cotalpha templates | |
float | zsize_ |
Pixel z-size (thickness) |
A template management class. SiPixelTemplate contains thePixelTemp (a std::vector of SiPixelTemplateStore, each of which is a collection of many SiPixelTemplateEntries). Each SiPixelTemplateStore corresponds to a given detector condition, and is valid for a range of runs. We allow more than one Store since the may change over time.
This class reads templates from files via pushfile() method.
The main functionality of SiPixelTemplate is interpolate(), which produces a template on the fly, given a specific track's alpha and beta. The results are kept in data members and accessed via inline getters.
The resulting template is then used by PixelTempReco2D() (a global function) which get the reference for SiPixelTemplate & templ and uses the current template to reconstruct the SiPixelRecHit.
Definition at line 221 of file SiPixelTemplate.h.
SiPixelTemplate::SiPixelTemplate | ( | ) | [inline] |
Default constructor.
Definition at line 223 of file SiPixelTemplate.h.
References cota_current_, cotb_current_, id_current_, and index_id_.
float SiPixelTemplate::chi2xavg | ( | int | i | ) | [inline] |
averaage x chi^2 in 4 charge bins
Definition at line 398 of file SiPixelTemplate.h.
References chi2xavg_, Exception, and i.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::chi2xavgc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average x-chisq for merged clusters
Definition at line 454 of file SiPixelTemplate.h.
References chi2xavgc2m_, Exception, and i.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::chi2xavgone | ( | ) | [inline] |
//!< average x chi^2 for 1 pixel clusters
Definition at line 470 of file SiPixelTemplate.h.
References chi2xavgone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::chi2xmin | ( | int | i | ) | [inline] |
minimum y chi^2 in 4 charge bins
Definition at line 405 of file SiPixelTemplate.h.
References chi2xmin_, Exception, and i.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::chi2xminc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: minimum x-chisq for merged clusters
Definition at line 461 of file SiPixelTemplate.h.
References chi2xminc2m_, Exception, and i.
float SiPixelTemplate::chi2xminone | ( | ) | [inline] |
//!< minimum of x chi^2 for 1 pixel clusters
Definition at line 471 of file SiPixelTemplate.h.
References chi2xminone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::chi2yavg | ( | int | i | ) | [inline] |
average y chi^2 in 4 charge bins
Definition at line 384 of file SiPixelTemplate.h.
References chi2yavg_, Exception, and i.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::chi2yavgc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average y-chisq for merged clusters
Definition at line 426 of file SiPixelTemplate.h.
References chi2yavgc2m_, Exception, and i.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::chi2yavgone | ( | ) | [inline] |
//!< average y chi^2 for 1 pixel clusters
Definition at line 468 of file SiPixelTemplate.h.
References chi2yavgone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::chi2ymin | ( | int | i | ) | [inline] |
minimum y chi^2 in 4 charge bins
Definition at line 391 of file SiPixelTemplate.h.
References chi2ymin_, Exception, and i.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::chi2yminc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: minimum y-chisq for merged clusters
Definition at line 433 of file SiPixelTemplate.h.
References chi2yminc2m_, Exception, and i.
float SiPixelTemplate::chi2yminone | ( | ) | [inline] |
//!< minimum of y chi^2 for 1 pixel clusters
Definition at line 469 of file SiPixelTemplate.h.
References chi2yminone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::clslenx | ( | ) | [inline] |
x-size of smaller interpolated template in pixels
Definition at line 324 of file SiPixelTemplate.h.
References clslenx_.
float SiPixelTemplate::clsleny | ( | ) | [inline] |
y-size of smaller interpolated template in pixels
Definition at line 323 of file SiPixelTemplate.h.
References clsleny_.
int SiPixelTemplate::cxtemp | ( | ) |
Return central pixel of x-template pixels above readout threshold.
Definition at line 1874 of file SiPixelTemplate.cc.
References BXM1, BXM2, BXSIZE, and j.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
{ // Retrieve already interpolated quantities // Local variables int j; // Analyze only pixels along the central entry // First, find the maximum signal and then work out to the edges float sigmax = 0.f; float qedge = 2.*s50_; int jmax = -1; for(j=0; j<BXSIZE; ++j) { if(xtemp_[4][j] > sigmax) { sigmax = xtemp_[4][j]; jmax = j; } } if(sigmax < qedge) {qedge = s50_;} if(sigmax < qedge || jmax<1 || jmax>BXM2) {return -1;} // Now search forward and backward int jend = jmax; for(j=jmax+1; j<BXM1; ++j) { if(xtemp_[4][j] < qedge) break; jend = j; } int jbeg = jmax; for(j=jmax-1; j>0; --j) { if(xtemp_[4][j] < qedge) break; jbeg = j; } return (jbeg+jend)/2; } // End cxtemp
int SiPixelTemplate::cytemp | ( | ) |
Return central pixel of y template pixels above readout threshold.
Definition at line 1825 of file SiPixelTemplate.cc.
References BYM1, BYM2, BYSIZE, and j.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
{ // Retrieve already interpolated quantities // Local variables int j; // Analyze only pixels along the central entry // First, find the maximum signal and then work out to the edges float sigmax = 0.f; float qedge = 2.*s50_; int jmax = -1; for(j=0; j<BYSIZE; ++j) { if(ytemp_[4][j] > sigmax) { sigmax = ytemp_[4][j]; jmax = j; } } if(sigmax < qedge) {qedge = s50_;} if(sigmax < qedge || jmax<1 || jmax>BYM2) {return -1;} // Now search forward and backward int jend = jmax; for(j=jmax+1; j<BYM1; ++j) { if(ytemp_[4][j] < qedge) break; jend = j; } int jbeg = jmax; for(j=jmax-1; j>0; --j) { if(ytemp_[4][j] < qedge) break; jbeg = j; } return (jbeg+jend)/2; } // End cytemp
float SiPixelTemplate::dxone | ( | ) | [inline] |
mean offset/correction for one pixel x-clusters
Definition at line 311 of file SiPixelTemplate.h.
References dxone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::dxtwo | ( | ) | [inline] |
mean offset/correction for one double-pixel x-clusters
Definition at line 313 of file SiPixelTemplate.h.
References dxtwo_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::dyone | ( | ) | [inline] |
mean offset/correction for one pixel y-clusters
Definition at line 306 of file SiPixelTemplate.h.
References dyone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::dytwo | ( | ) | [inline] |
mean offset/correction for one double-pixel y-clusters
Definition at line 308 of file SiPixelTemplate.h.
References dytwo_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
bool SiPixelTemplate::interpolate | ( | int | id, |
float | cotalpha, | ||
float | cotbeta | ||
) |
Interpolate input alpha and beta angles to produce a working template for each individual hit.
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
Definition at line 1294 of file SiPixelTemplate.cc.
References f, and interpolate().
{ // Interpolate for a new set of track angles // Local variables float locBz; locBz = -1.f; if(cotbeta < 0.f) {locBz = -locBz;} return SiPixelTemplate::interpolate(id, cotalpha, cotbeta, locBz); }
bool SiPixelTemplate::interpolate | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
float | locBz | ||
) |
Interpolate input alpha and beta angles to produce a working template for each individual hit.
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
locBz | - (input) the sign of this quantity is used to determine whether to flip cot(beta)<0 quantities from cot(beta)>0 (FPix only) for FPix IP-related tracks, locBz < 0 for cot(beta) > 0 and locBz > 0 for cot(beta) < 0 |
Definition at line 877 of file SiPixelTemplate.cc.
References abs, BXM1, BXM2, BYM1, BYM2, BYM3, Exception, f, i, j, mathSSE::sqrt(), TXSIZE, and TYSIZE.
Referenced by interpolate(), SiPixelTemplateReco::PixelTempReco2D(), SiPixelTemplateSplit::PixelTempSplit(), and SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit().
{ // Interpolate for a new set of track angles // Local variables int i, j; int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, imidy, imaxx; float yratio, yxratio, xxratio, sxmax, qcorrect, qxtempcor, symax, chi2xavgone, chi2xminone, cotb, cotalpha0, cotbeta0; bool flip_y; // std::vector <float> xrms(4), xgsig(4), xrmsc2m(4); float chi2xavg[4], chi2xmin[4], chi2xavgc2m[4], chi2xminc2m[4]; // Check to see if interpolation is valid if(id != id_current_ || cotalpha != cota_current_ || cotbeta != cotb_current_) { cota_current_ = cotalpha; cotb_current_ = cotbeta; success_ = true; if(id != id_current_) { // Find the index corresponding to id index_id_ = -1; for(i=0; i<(int)thePixelTemp_.size(); ++i) { if(id == thePixelTemp_[i].head.ID) { index_id_ = i; id_current_ = id; // Copy the charge scaling factor to the private variable qscale_ = thePixelTemp_[index_id_].head.qscale; // Copy the pseudopixel signal size to the private variable s50_ = thePixelTemp_[index_id_].head.s50; // Pixel sizes to the private variables xsize_ = thePixelTemp_[index_id_].head.xsize; ysize_ = thePixelTemp_[index_id_].head.ysize; zsize_ = thePixelTemp_[index_id_].head.zsize; break; } } } #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(index_id_ < 0 || index_id_ >= (int)thePixelTemp_.size()) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::interpolate can't find needed template ID = " << id << std::endl; } #else assert(index_id_ >= 0 && index_id_ < (int)thePixelTemp_.size()); #endif // Interpolate the absolute value of cot(beta) abs_cotb_ = std::abs(cotbeta); // qcorrect corrects the cot(alpha)=0 cluster charge for non-zero cot(alpha) cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha; qcorrect=std::sqrt((1.f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.f+cotbeta*cotbeta+cotalpha0*cotalpha0)); // for some cosmics, the ususal gymnastics are incorrect if(thePixelTemp_[index_id_].head.Dtype == 0) { cotb = abs_cotb_; flip_y = false; if(cotbeta < 0.f) {flip_y = true;} } else { if(locBz < 0.f) { cotb = cotbeta; flip_y = false; } else { cotb = -cotbeta; flip_y = true; } } Ny = thePixelTemp_[index_id_].head.NTy; Nyx = thePixelTemp_[index_id_].head.NTyx; Nxx = thePixelTemp_[index_id_].head.NTxx; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2 || Nyx < 1 || Nxx < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny/Nyx/Nxx = " << Ny << "/" << Nyx << "/" << Nxx << std::endl; } #else assert(Ny > 1 && Nyx > 0 && Nxx > 1); #endif imaxx = Nyx - 1; imidy = Nxx/2; // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.; success_ = false; } else { if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index_id_].enty[i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta); break; } } } else { success_ = false; } } ihigh=ilow + 1; // Interpolate/store all y-related quantities (flip displacements when flip_y) yratio_ = yratio; qavg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg; qavg_ *= qcorrect; symax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].symax + yratio*thePixelTemp_[index_id_].enty[ihigh].symax; syparmax_ = symax; sxmax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sxmax + yratio*thePixelTemp_[index_id_].enty[ihigh].sxmax; dyone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dyone + yratio*thePixelTemp_[index_id_].enty[ihigh].dyone; if(flip_y) {dyone_ = -dyone_;} syone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].syone + yratio*thePixelTemp_[index_id_].enty[ihigh].syone; dytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].dytwo; if(flip_y) {dytwo_ = -dytwo_;} sytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].sytwo; qmin_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin; qmin_ *= qcorrect; qmin2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin2 + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin2; qmin2_ *= qcorrect; mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav; mpvvav_ *= qcorrect; sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav; kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav; mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2; mpvvav2_ *= qcorrect; sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2; kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2; clsleny_ = fminf(thePixelTemp_[index_id_].enty[ilow].clsleny, thePixelTemp_[index_id_].enty[ihigh].clsleny); qavg_avg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg_avg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg_avg; qavg_avg_ *= qcorrect; for(i=0; i<2 ; ++i) { for(j=0; j<5 ; ++j) { // Charge loss switches sides when cot(beta) changes sign if(flip_y) { yparl_[1-i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[i][j]; yparh_[1-i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[i][j]; } else { yparl_[i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[i][j]; yparh_[i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[i][j]; } xparly0_[i][j] = thePixelTemp_[index_id_].enty[ilow].xpar[i][j]; xparhy0_[i][j] = thePixelTemp_[index_id_].enty[ihigh].xpar[i][j]; } } for(i=0; i<4; ++i) { yavg_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavg[i]; if(flip_y) {yavg_[i] = -yavg_[i];} yrms_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrms[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrms[i]; // ygx0_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ygx0[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].ygx0[i]; // if(flip_y) {ygx0_[i] = -ygx0_[i];} // ygsig_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ygsig[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].ygsig[i]; // xrms[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].xrms[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].xrms[i]; // xgsig[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].xgsig[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].xgsig[i]; chi2yavg_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavg[i]; chi2ymin_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2ymin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2ymin[i]; chi2xavg[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavg[i]; chi2xmin[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xmin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xmin[i]; yavgc2m_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavgc2m[i]; if(flip_y) {yavgc2m_[i] = -yavgc2m_[i];} yrmsc2m_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrmsc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrmsc2m[i]; chi2yavgc2m_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgc2m[i]; // if(flip_y) {chi2yavgc2m_[i] = -chi2yavgc2m_[i];} chi2yminc2m_[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminc2m[i]; // xrmsc2m[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].xrmsc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].xrmsc2m[i]; chi2xavgc2m[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgc2m[i]; chi2xminc2m[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminc2m[i]; for(j=0; j<6 ; ++j) { yflparl_[i][j] = thePixelTemp_[index_id_].enty[ilow].yflpar[i][j]; yflparh_[i][j] = thePixelTemp_[index_id_].enty[ihigh].yflpar[i][j]; // Since Q_fl is odd under cotbeta, it flips qutomatically, change only even terms if(flip_y && (j == 0 || j == 2 || j == 4)) { yflparl_[i][j] = - yflparl_[i][j]; yflparh_[i][j] = - yflparh_[i][j]; } } } chi2yavgone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgone; chi2yminone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminone; chi2xavgone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgone; chi2xminone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminone; // for(i=0; i<10; ++i) { // pyspare[i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yspare[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yspare[i]; // } // Interpolate and build the y-template for(i=0; i<9; ++i) { ytemp_[i][0] = 0.f; ytemp_[i][1] = 0.f; ytemp_[i][BYM2] = 0.f; ytemp_[i][BYM1] = 0.f; for(j=0; j<TYSIZE; ++j) { // Flip the basic y-template when the cotbeta is negative if(flip_y) { ytemp_[8-i][BYM3-j]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ytemp[i][j] + yratio*thePixelTemp_[index_id_].enty[ihigh].ytemp[i][j]; } else { ytemp_[i][j+2]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ytemp[i][j] + yratio*thePixelTemp_[index_id_].enty[ihigh].ytemp[i][j]; } } } // next, loop over all x-angle entries, first, find relevant y-slices iylow = 0; yxratio = 0.f; if(abs_cotb_ >= thePixelTemp_[index_id_].entx[Nyx-1][0].cotbeta) { iylow = Nyx-2; yxratio = 1.f; } else if(abs_cotb_ >= thePixelTemp_[index_id_].entx[0][0].cotbeta) { for (i=0; i<Nyx-1; ++i) { if( thePixelTemp_[index_id_].entx[i][0].cotbeta <= abs_cotb_ && abs_cotb_ < thePixelTemp_[index_id_].entx[i+1][0].cotbeta) { iylow = i; yxratio = (abs_cotb_ - thePixelTemp_[index_id_].entx[i][0].cotbeta)/(thePixelTemp_[index_id_].entx[i+1][0].cotbeta - thePixelTemp_[index_id_].entx[i][0].cotbeta); break; } } } iyhigh=iylow + 1; ilow = 0; xxratio = 0.f; if(cotalpha >= thePixelTemp_[index_id_].entx[0][Nxx-1].cotalpha) { ilow = Nxx-2; xxratio = 1.f; success_ = false; } else { if(cotalpha >= thePixelTemp_[index_id_].entx[0][0].cotalpha) { for (i=0; i<Nxx-1; ++i) { if( thePixelTemp_[index_id_].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index_id_].entx[0][i+1].cotalpha) { ilow = i; xxratio = (cotalpha - thePixelTemp_[index_id_].entx[0][i].cotalpha)/(thePixelTemp_[index_id_].entx[0][i+1].cotalpha - thePixelTemp_[index_id_].entx[0][i].cotalpha); break; } } } else { success_ = false; } } ihigh=ilow + 1; // Interpolate/store all x-related quantities yxratio_ = yxratio; xxratio_ = xxratio; // sxparmax defines the maximum charge for which the parameters xpar are defined (not rescaled by cotbeta) sxparmax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].sxmax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].sxmax; sxmax_ = sxparmax_; if(thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax != 0.f) {sxmax_=sxmax_/thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax*sxmax;} symax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].symax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].symax; if(thePixelTemp_[index_id_].entx[imaxx][imidy].symax != 0.f) {symax_=symax_/thePixelTemp_[index_id_].entx[imaxx][imidy].symax*symax;} dxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxone; sxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxone; dxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxtwo; sxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxtwo; clslenx_ = fminf(thePixelTemp_[index_id_].entx[0][ilow].clslenx, thePixelTemp_[index_id_].entx[0][ihigh].clslenx); for(i=0; i<2 ; ++i) { for(j=0; j<5 ; ++j) { xpar0_[i][j] = thePixelTemp_[index_id_].entx[imaxx][imidy].xpar[i][j]; xparl_[i][j] = thePixelTemp_[index_id_].entx[imaxx][ilow].xpar[i][j]; xparh_[i][j] = thePixelTemp_[index_id_].entx[imaxx][ihigh].xpar[i][j]; } } // pixmax is the maximum allowed pixel charge (used for truncation) pixmax_=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].pixmax) +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].pixmax); for(i=0; i<4; ++i) { xavg_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xavg[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xavg[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavg[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavg[i]); xrms_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xrms[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xrms[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrms[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrms[i]); // xgx0_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xgx0[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xgx0[i]) // +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xgx0[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xgx0[i]); // xgsig_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xgsig[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xgsig[i]) // +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xgsig[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xgsig[i]); xavgc2m_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xavgc2m[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavgc2m[i]); xrmsc2m_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xrmsc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xrmsc2m[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrmsc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrmsc2m[i]); // chi2xavgc2m_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].chi2xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].chi2xavgc2m[i]) // +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgc2m[i]); // chi2xminc2m_[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].chi2xminc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].chi2xminc2m[i]) // +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminc2m[i]); // // Try new interpolation scheme // // chi2xavg_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].chi2xavg[i] + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].chi2xavg[i]); // if(thePixelTemp_[index_id_].entx[imaxx][imidy].chi2xavg[i] != 0.f) {chi2xavg_[i]=chi2xavg_[i]/thePixelTemp_[index_id_].entx[imaxx][imidy].chi2xavg[i]*chi2xavg[i];} // // chi2xmin_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].chi2xmin[i] + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].chi2xmin[i]); // if(thePixelTemp_[index_id_].entx[imaxx][imidy].chi2xmin[i] != 0.f) {chi2xmin_[i]=chi2xmin_[i]/thePixelTemp_[index_id_].entx[imaxx][imidy].chi2xmin[i]*chi2xmin[i];} // chi2xavg_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavg[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavg[i]); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavg[i] != 0.f) {chi2xavg_[i]=chi2xavg_[i]/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavg[i]*chi2xavg[i];} chi2xmin_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xmin[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xmin[i]); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xmin[i] != 0.f) {chi2xmin_[i]=chi2xmin_[i]/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xmin[i]*chi2xmin[i];} chi2xavgc2m_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgc2m[i]); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgc2m[i] != 0.f) {chi2xavgc2m_[i]=chi2xavgc2m_[i]/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgc2m[i]*chi2xavgc2m[i];} chi2xminc2m_[i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminc2m[i]); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminc2m[i] != 0.f) {chi2xminc2m_[i]=chi2xminc2m_[i]/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminc2m[i]*chi2xminc2m[i];} for(j=0; j<6 ; ++j) { xflparll_[i][j] = thePixelTemp_[index_id_].entx[iylow][ilow].xflpar[i][j]; xflparlh_[i][j] = thePixelTemp_[index_id_].entx[iylow][ihigh].xflpar[i][j]; xflparhl_[i][j] = thePixelTemp_[index_id_].entx[iyhigh][ilow].xflpar[i][j]; xflparhh_[i][j] = thePixelTemp_[index_id_].entx[iyhigh][ihigh].xflpar[i][j]; } } // Do the spares next chi2xavgone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgone); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone != 0.f) {chi2xavgone_=chi2xavgone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone*chi2xavgone;} chi2xminone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminone); if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone != 0.f) {chi2xminone_=chi2xminone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone*chi2xminone;} // for(i=0; i<10; ++i) { // pxspare[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].xspare[i] + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].xspare[i]) // +yxratio*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xspare[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xspare[i]); // } // Interpolate and build the x-template // qxtempcor corrects the total charge to the actual track angles (not actually needed for the template fits, but useful for Guofan) cotbeta0 = thePixelTemp_[index_id_].entx[iyhigh][0].cotbeta; qxtempcor=std::sqrt((1.f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.f+cotbeta0*cotbeta0+cotalpha*cotalpha)); for(i=0; i<9; ++i) { xtemp_[i][0] = 0.f; xtemp_[i][1] = 0.f; xtemp_[i][BXM2] = 0.f; xtemp_[i][BXM1] = 0.f; for(j=0; j<TXSIZE; ++j) { // Take next largest x-slice for the x-template (it reduces bias in the forward direction after irradiation) // xtemp_[i][j+2]=(1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].xtemp[i][j] + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].xtemp[i][j]; // xtemp_[i][j+2]=(1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xtemp[i][j] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xtemp[i][j]; xtemp_[i][j+2]=qxtempcor*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xtemp[i][j] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xtemp[i][j]); } } lorywidth_ = thePixelTemp_[index_id_].head.lorywidth; if(locBz > 0.f) {lorywidth_ = -lorywidth_;} lorxwidth_ = thePixelTemp_[index_id_].head.lorxwidth; } return success_; } // interpolate
float SiPixelTemplate::kappavav | ( | ) | [inline] |
kappa parameter for Vavilov distribution
Definition at line 476 of file SiPixelTemplate.h.
References kappavav_.
float SiPixelTemplate::kappavav2 | ( | ) | [inline] |
kappa parameter for 2-cluster Vavilov distribution
Definition at line 479 of file SiPixelTemplate.h.
References kappavav2_.
float SiPixelTemplate::lorxwidth | ( | ) | [inline] |
signed lorentz x-width (microns)
Definition at line 473 of file SiPixelTemplate.h.
References lorxwidth_.
float SiPixelTemplate::lorywidth | ( | ) | [inline] |
signed lorentz y-width (microns)
Definition at line 472 of file SiPixelTemplate.h.
References lorywidth_.
float SiPixelTemplate::mpvvav | ( | ) | [inline] |
most probable charge in Vavilov distribution (not actually for larger kappa)
Definition at line 474 of file SiPixelTemplate.h.
References mpvvav_.
float SiPixelTemplate::mpvvav2 | ( | ) | [inline] |
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa)
Definition at line 477 of file SiPixelTemplate.h.
References mpvvav2_.
float SiPixelTemplate::pixmax | ( | ) | [inline] |
maximum pixel charge
Definition at line 302 of file SiPixelTemplate.h.
References pixmax_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
bool SiPixelTemplate::pushfile | ( | const SiPixelTemplateDBObject & | dbobject | ) |
This routine initializes the global template structures from an external file template_summary_zpNNNN where NNNN are four digits
dbobject | - db storing multiple template calibrations |
Definition at line 506 of file SiPixelTemplate.cc.
References SiPixelTemplateEntry::alpha, SiPixelTemplateEntry::beta, SiPixelTemplateHeader::Bfield, SiPixelTemplateDBObject::char2float::c, SiPixelTemplateEntry::chi2xavg, SiPixelTemplateEntry::chi2xavgc2m, SiPixelTemplateEntry::chi2xavgone, SiPixelTemplateEntry::chi2xmin, SiPixelTemplateEntry::chi2xminc2m, SiPixelTemplateEntry::chi2xminone, SiPixelTemplateEntry::chi2yavg, SiPixelTemplateEntry::chi2yavgc2m, SiPixelTemplateEntry::chi2yavgone, SiPixelTemplateEntry::chi2ymin, SiPixelTemplateEntry::chi2yminc2m, SiPixelTemplateEntry::chi2yminone, SiPixelTemplateEntry::clslenx, SiPixelTemplateEntry::clsleny, SiPixelTemplateEntry::costrk, SiPixelTemplateEntry::cotalpha, SiPixelTemplateEntry::cotbeta, EcalCondDB::db, SiPixelTemplateHeader::Dtype, SiPixelTemplateEntry::dxone, SiPixelTemplateEntry::dxtwo, SiPixelTemplateEntry::dyone, SiPixelTemplateEntry::dytwo, ENDL, SiPixelTemplateStore::entx, SiPixelTemplateStore::enty, SiPixelTemplateDBObject::char2float::f, SiPixelTemplateDBObject::fail(), SiPixelTemplateHeader::fluence, SiPixelTemplateEntry::fracxone, SiPixelTemplateEntry::fracxtwo, SiPixelTemplateEntry::fracyone, SiPixelTemplateEntry::fracytwo, SiPixelTemplateStore::head, i, SiPixelTemplateHeader::ID, SiPixelTemplateDBObject::incrementIndex(), SiPixelTemplateDBObject::index(), j, gen::k, SiPixelTemplateEntry::kappavav, SiPixelTemplateEntry::kappavav2, prof2calltree::l, LOGERROR, LOGINFO, SiPixelTemplateHeader::lorxwidth, SiPixelTemplateHeader::lorywidth, m, SiPixelTemplateEntry::mpvvav, SiPixelTemplateEntry::mpvvav2, SiPixelTemplateHeader::NTxx, SiPixelTemplateHeader::NTy, SiPixelTemplateHeader::NTyx, SiPixelTemplateDBObject::numOfTempl(), SiPixelTemplateEntry::pixmax, SiPixelTemplateEntry::qavg, SiPixelTemplateEntry::qavg_avg, SiPixelTemplateEntry::qavg_spare, SiPixelTemplateEntry::qbfrac, SiPixelTemplateEntry::qmin, SiPixelTemplateEntry::qmin2, SiPixelTemplateHeader::qscale, SiPixelTemplateEntry::runnum, SiPixelTemplateHeader::s50, SiPixelTemplateEntry::sigmavav, SiPixelTemplateEntry::sigmavav2, SiPixelTemplateEntry::spare, SiPixelTemplateDBObject::sVector(), SiPixelTemplateEntry::sxmax, SiPixelTemplateEntry::sxone, SiPixelTemplateEntry::sxtwo, SiPixelTemplateEntry::symax, SiPixelTemplateEntry::syone, SiPixelTemplateEntry::sytwo, groupFilesInBlocks::temp, SiPixelTemplateHeader::temperature, SiPixelTemplateHeader::templ_version, SiPixelTemplateHeader::title, TXSIZE, TYSIZE, SiPixelTemplateHeader::Vbias, SiPixelTemplateEntry::xavg, SiPixelTemplateEntry::xavgc2m, SiPixelTemplateEntry::xavggen, SiPixelTemplateEntry::xflpar, SiPixelTemplateEntry::xgsig, SiPixelTemplateEntry::xgsiggen, SiPixelTemplateEntry::xgx0, SiPixelTemplateEntry::xgx0gen, SiPixelTemplateEntry::xpar, SiPixelTemplateEntry::xrms, SiPixelTemplateEntry::xrmsc2m, SiPixelTemplateEntry::xrmsgen, SiPixelTemplateHeader::xsize, SiPixelTemplateEntry::xtemp, SiPixelTemplateEntry::yavg, SiPixelTemplateEntry::yavgc2m, SiPixelTemplateEntry::yavggen, SiPixelTemplateEntry::yflpar, SiPixelTemplateEntry::ygsig, SiPixelTemplateEntry::ygsiggen, SiPixelTemplateEntry::ygx0, SiPixelTemplateEntry::ygx0gen, SiPixelTemplateEntry::ypar, SiPixelTemplateEntry::yrms, SiPixelTemplateEntry::yrmsc2m, SiPixelTemplateEntry::yrmsgen, SiPixelTemplateHeader::ysize, SiPixelTemplateEntry::ytemp, and SiPixelTemplateHeader::zsize.
{ // Add template stored in external dbobject to theTemplateStore // Local variables int i, j, k, l; float qavg_avg; // const char *tempfile; const int code_version={16}; // We must create a new object because dbobject must be a const and our stream must not be SiPixelTemplateDBObject db = dbobject; // Create a local template storage entry SiPixelTemplateStore theCurrentTemp; // Fill the template storage for each template calibration stored in the db for(int m=0; m<db.numOfTempl(); ++m) { // Read-in a header string first and print it SiPixelTemplateDBObject::char2float temp; for (i=0; i<20; ++i) { temp.f = db.sVector()[db.index()]; theCurrentTemp.head.title[4*i] = temp.c[0]; theCurrentTemp.head.title[4*i+1] = temp.c[1]; theCurrentTemp.head.title[4*i+2] = temp.c[2]; theCurrentTemp.head.title[4*i+3] = temp.c[3]; db.incrementIndex(1); } theCurrentTemp.head.title[79] = '\0'; LOGINFO("SiPixelTemplate") << "Loading Pixel Template File - " << theCurrentTemp.head.title << ENDL; // next, the header information db >> theCurrentTemp.head.ID >> theCurrentTemp.head.templ_version >> theCurrentTemp.head.Bfield >> theCurrentTemp.head.NTy >> theCurrentTemp.head.NTyx >> theCurrentTemp.head.NTxx >> theCurrentTemp.head.Dtype >> theCurrentTemp.head.Vbias >> theCurrentTemp.head.temperature >> theCurrentTemp.head.fluence >> theCurrentTemp.head.qscale >> theCurrentTemp.head.s50 >> theCurrentTemp.head.lorywidth >> theCurrentTemp.head.lorxwidth >> theCurrentTemp.head.ysize >> theCurrentTemp.head.xsize >> theCurrentTemp.head.zsize; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file, no template load" << ENDL; return false;} LOGINFO("SiPixelTemplate") << "Template ID = " << theCurrentTemp.head.ID << ", Template Version " << theCurrentTemp.head.templ_version << ", Bfield = " << theCurrentTemp.head.Bfield << ", NTy = " << theCurrentTemp.head.NTy << ", NTyx = " << theCurrentTemp.head.NTyx<< ", NTxx = " << theCurrentTemp.head.NTxx << ", Dtype = " << theCurrentTemp.head.Dtype << ", Bias voltage " << theCurrentTemp.head.Vbias << ", temperature " << theCurrentTemp.head.temperature << ", fluence " << theCurrentTemp.head.fluence << ", Q-scaling factor " << theCurrentTemp.head.qscale << ", 1/2 threshold " << theCurrentTemp.head.s50 << ", y Lorentz Width " << theCurrentTemp.head.lorywidth << ", x Lorentz width " << theCurrentTemp.head.lorxwidth << ", pixel x-size " << theCurrentTemp.head.xsize << ", y-size " << theCurrentTemp.head.ysize << ", zsize " << theCurrentTemp.head.zsize << ENDL; if(theCurrentTemp.head.templ_version < code_version) {LOGERROR("SiPixelTemplate") << "code expects version " << code_version << ", no template load" << ENDL; return false;} #ifdef SI_PIXEL_TEMPLATE_USE_BOOST // next, layout the 1-d/2-d structures needed to store template theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]); theCurrentTemp.entx.resize(boost::extents[theCurrentTemp.head.NTyx][theCurrentTemp.head.NTxx]); #endif // next, loop over all barrel y-angle entries for (i=0; i < theCurrentTemp.head.NTy; ++i) { db >> theCurrentTemp.enty[i].runnum >> theCurrentTemp.enty[i].costrk[0] >> theCurrentTemp.enty[i].costrk[1] >> theCurrentTemp.enty[i].costrk[2]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 1, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} // Calculate the alpha, beta, and cot(beta) for this entry theCurrentTemp.enty[i].alpha = static_cast<float>(atan2((double)theCurrentTemp.enty[i].costrk[2], (double)theCurrentTemp.enty[i].costrk[0])); theCurrentTemp.enty[i].cotalpha = theCurrentTemp.enty[i].costrk[0]/theCurrentTemp.enty[i].costrk[2]; theCurrentTemp.enty[i].beta = static_cast<float>(atan2((double)theCurrentTemp.enty[i].costrk[2], (double)theCurrentTemp.enty[i].costrk[1])); theCurrentTemp.enty[i].cotbeta = theCurrentTemp.enty[i].costrk[1]/theCurrentTemp.enty[i].costrk[2]; db >> theCurrentTemp.enty[i].qavg >> theCurrentTemp.enty[i].pixmax >> theCurrentTemp.enty[i].symax >> theCurrentTemp.enty[i].dyone >> theCurrentTemp.enty[i].syone >> theCurrentTemp.enty[i].sxmax >> theCurrentTemp.enty[i].dxone >> theCurrentTemp.enty[i].sxone; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 2, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} db >> theCurrentTemp.enty[i].dytwo >> theCurrentTemp.enty[i].sytwo >> theCurrentTemp.enty[i].dxtwo >> theCurrentTemp.enty[i].sxtwo >> theCurrentTemp.enty[i].qmin >> theCurrentTemp.enty[i].clsleny >> theCurrentTemp.enty[i].clslenx; // >> theCurrentTemp.enty[i].mpvvav >> theCurrentTemp.enty[i].sigmavav >> theCurrentTemp.enty[i].kappavav; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 3, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} for (j=0; j<2; ++j) { db >> theCurrentTemp.enty[i].ypar[j][0] >> theCurrentTemp.enty[i].ypar[j][1] >> theCurrentTemp.enty[i].ypar[j][2] >> theCurrentTemp.enty[i].ypar[j][3] >> theCurrentTemp.enty[i].ypar[j][4]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 4, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<9; ++j) { for (k=0; k<TYSIZE; ++k) {db >> theCurrentTemp.enty[i].ytemp[j][k];} if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 5, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<2; ++j) { db >> theCurrentTemp.enty[i].xpar[j][0] >> theCurrentTemp.enty[i].xpar[j][1] >> theCurrentTemp.enty[i].xpar[j][2] >> theCurrentTemp.enty[i].xpar[j][3] >> theCurrentTemp.enty[i].xpar[j][4]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 6, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } qavg_avg = 0.f; for (j=0; j<9; ++j) { for (k=0; k<TXSIZE; ++k) {db >> theCurrentTemp.enty[i].xtemp[j][k]; qavg_avg += theCurrentTemp.enty[i].xtemp[j][k];} if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 7, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } theCurrentTemp.enty[i].qavg_avg = qavg_avg/9.; for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].yavg[j] >> theCurrentTemp.enty[i].yrms[j] >> theCurrentTemp.enty[i].ygx0[j] >> theCurrentTemp.enty[i].ygsig[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 8, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].yflpar[j][0] >> theCurrentTemp.enty[i].yflpar[j][1] >> theCurrentTemp.enty[i].yflpar[j][2] >> theCurrentTemp.enty[i].yflpar[j][3] >> theCurrentTemp.enty[i].yflpar[j][4] >> theCurrentTemp.enty[i].yflpar[j][5]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 9, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].xavg[j] >> theCurrentTemp.enty[i].xrms[j] >> theCurrentTemp.enty[i].xgx0[j] >> theCurrentTemp.enty[i].xgsig[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 10, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].xflpar[j][0] >> theCurrentTemp.enty[i].xflpar[j][1] >> theCurrentTemp.enty[i].xflpar[j][2] >> theCurrentTemp.enty[i].xflpar[j][3] >> theCurrentTemp.enty[i].xflpar[j][4] >> theCurrentTemp.enty[i].xflpar[j][5]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 11, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].chi2yavg[j] >> theCurrentTemp.enty[i].chi2ymin[j] >> theCurrentTemp.enty[i].chi2xavg[j] >> theCurrentTemp.enty[i].chi2xmin[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 12, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].yavgc2m[j] >> theCurrentTemp.enty[i].yrmsc2m[j] >> theCurrentTemp.enty[i].chi2yavgc2m[j] >> theCurrentTemp.enty[i].chi2yminc2m[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 13, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].xavgc2m[j] >> theCurrentTemp.enty[i].xrmsc2m[j] >> theCurrentTemp.enty[i].chi2xavgc2m[j] >> theCurrentTemp.enty[i].chi2xminc2m[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].yavggen[j] >> theCurrentTemp.enty[i].yrmsgen[j] >> theCurrentTemp.enty[i].ygx0gen[j] >> theCurrentTemp.enty[i].ygsiggen[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14a, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.enty[i].xavggen[j] >> theCurrentTemp.enty[i].xrmsgen[j] >> theCurrentTemp.enty[i].xgx0gen[j] >> theCurrentTemp.enty[i].xgsiggen[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14b, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } db >> theCurrentTemp.enty[i].chi2yavgone >> theCurrentTemp.enty[i].chi2yminone >> theCurrentTemp.enty[i].chi2xavgone >> theCurrentTemp.enty[i].chi2xminone >> theCurrentTemp.enty[i].qmin2 >> theCurrentTemp.enty[i].mpvvav >> theCurrentTemp.enty[i].sigmavav >> theCurrentTemp.enty[i].kappavav >> theCurrentTemp.enty[i].qavg_spare >> theCurrentTemp.enty[i].spare[0]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 15, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} db >> theCurrentTemp.enty[i].mpvvav2 >> theCurrentTemp.enty[i].sigmavav2 >> theCurrentTemp.enty[i].kappavav2 >> theCurrentTemp.enty[i].qbfrac[0] >> theCurrentTemp.enty[i].qbfrac[1] >> theCurrentTemp.enty[i].qbfrac[2] >> theCurrentTemp.enty[i].fracyone >> theCurrentTemp.enty[i].fracxone >> theCurrentTemp.enty[i].fracytwo >> theCurrentTemp.enty[i].fracxtwo; // theCurrentTemp.enty[i].qbfrac[3] = 1. - theCurrentTemp.enty[i].qbfrac[0] - theCurrentTemp.enty[i].qbfrac[1] - theCurrentTemp.enty[i].qbfrac[2]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 16, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } // next, loop over all barrel x-angle entries for (k=0; k < theCurrentTemp.head.NTyx; ++k) { for (i=0; i < theCurrentTemp.head.NTxx; ++i) { db >> theCurrentTemp.entx[k][i].runnum >> theCurrentTemp.entx[k][i].costrk[0] >> theCurrentTemp.entx[k][i].costrk[1] >> theCurrentTemp.entx[k][i].costrk[2]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 17, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} // Calculate the alpha, beta, and cot(beta) for this entry theCurrentTemp.entx[k][i].alpha = static_cast<float>(atan2((double)theCurrentTemp.entx[k][i].costrk[2], (double)theCurrentTemp.entx[k][i].costrk[0])); theCurrentTemp.entx[k][i].cotalpha = theCurrentTemp.entx[k][i].costrk[0]/theCurrentTemp.entx[k][i].costrk[2]; theCurrentTemp.entx[k][i].beta = static_cast<float>(atan2((double)theCurrentTemp.entx[k][i].costrk[2], (double)theCurrentTemp.entx[k][i].costrk[1])); theCurrentTemp.entx[k][i].cotbeta = theCurrentTemp.entx[k][i].costrk[1]/theCurrentTemp.entx[k][i].costrk[2]; db >> theCurrentTemp.entx[k][i].qavg >> theCurrentTemp.entx[k][i].pixmax >> theCurrentTemp.entx[k][i].symax >> theCurrentTemp.entx[k][i].dyone >> theCurrentTemp.entx[k][i].syone >> theCurrentTemp.entx[k][i].sxmax >> theCurrentTemp.entx[k][i].dxone >> theCurrentTemp.entx[k][i].sxone; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 18, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} db >> theCurrentTemp.entx[k][i].dytwo >> theCurrentTemp.entx[k][i].sytwo >> theCurrentTemp.entx[k][i].dxtwo >> theCurrentTemp.entx[k][i].sxtwo >> theCurrentTemp.entx[k][i].qmin >> theCurrentTemp.entx[k][i].clsleny >> theCurrentTemp.entx[k][i].clslenx; // >> theCurrentTemp.entx[k][i].mpvvav >> theCurrentTemp.entx[k][i].sigmavav >> theCurrentTemp.entx[k][i].kappavav; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 19, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} for (j=0; j<2; ++j) { db >> theCurrentTemp.entx[k][i].ypar[j][0] >> theCurrentTemp.entx[k][i].ypar[j][1] >> theCurrentTemp.entx[k][i].ypar[j][2] >> theCurrentTemp.entx[k][i].ypar[j][3] >> theCurrentTemp.entx[k][i].ypar[j][4]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 20, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<9; ++j) { for (l=0; l<TYSIZE; ++l) {db >> theCurrentTemp.entx[k][i].ytemp[j][l];} if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 21, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<2; ++j) { db >> theCurrentTemp.entx[k][i].xpar[j][0] >> theCurrentTemp.entx[k][i].xpar[j][1] >> theCurrentTemp.entx[k][i].xpar[j][2] >> theCurrentTemp.entx[k][i].xpar[j][3] >> theCurrentTemp.entx[k][i].xpar[j][4]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 22, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } qavg_avg = 0.f; for (j=0; j<9; ++j) { for (l=0; l<TXSIZE; ++l) {db >> theCurrentTemp.entx[k][i].xtemp[j][l]; qavg_avg += theCurrentTemp.entx[k][i].xtemp[j][l];} if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 23, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } theCurrentTemp.entx[k][i].qavg_avg = qavg_avg/9.; for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].yavg[j] >> theCurrentTemp.entx[k][i].yrms[j] >> theCurrentTemp.entx[k][i].ygx0[j] >> theCurrentTemp.entx[k][i].ygsig[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 24, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].yflpar[j][0] >> theCurrentTemp.entx[k][i].yflpar[j][1] >> theCurrentTemp.entx[k][i].yflpar[j][2] >> theCurrentTemp.entx[k][i].yflpar[j][3] >> theCurrentTemp.entx[k][i].yflpar[j][4] >> theCurrentTemp.entx[k][i].yflpar[j][5]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 25, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].xavg[j] >> theCurrentTemp.entx[k][i].xrms[j] >> theCurrentTemp.entx[k][i].xgx0[j] >> theCurrentTemp.entx[k][i].xgsig[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 26, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].xflpar[j][0] >> theCurrentTemp.entx[k][i].xflpar[j][1] >> theCurrentTemp.entx[k][i].xflpar[j][2] >> theCurrentTemp.entx[k][i].xflpar[j][3] >> theCurrentTemp.entx[k][i].xflpar[j][4] >> theCurrentTemp.entx[k][i].xflpar[j][5]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 27, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].chi2yavg[j] >> theCurrentTemp.entx[k][i].chi2ymin[j] >> theCurrentTemp.entx[k][i].chi2xavg[j] >> theCurrentTemp.entx[k][i].chi2xmin[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 28, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].yavgc2m[j] >> theCurrentTemp.entx[k][i].yrmsc2m[j] >> theCurrentTemp.entx[k][i].chi2yavgc2m[j] >> theCurrentTemp.entx[k][i].chi2yminc2m[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 29, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].xavgc2m[j] >> theCurrentTemp.entx[k][i].xrmsc2m[j] >> theCurrentTemp.entx[k][i].chi2xavgc2m[j] >> theCurrentTemp.entx[k][i].chi2xminc2m[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].yavggen[j] >> theCurrentTemp.entx[k][i].yrmsgen[j] >> theCurrentTemp.entx[k][i].ygx0gen[j] >> theCurrentTemp.entx[k][i].ygsiggen[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30a, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { db >> theCurrentTemp.entx[k][i].xavggen[j] >> theCurrentTemp.entx[k][i].xrmsgen[j] >> theCurrentTemp.entx[k][i].xgx0gen[j] >> theCurrentTemp.entx[k][i].xgsiggen[j]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30b, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } db >> theCurrentTemp.entx[k][i].chi2yavgone >> theCurrentTemp.entx[k][i].chi2yminone >> theCurrentTemp.entx[k][i].chi2xavgone >> theCurrentTemp.entx[k][i].chi2xminone >> theCurrentTemp.entx[k][i].qmin2 >> theCurrentTemp.entx[k][i].mpvvav >> theCurrentTemp.entx[k][i].sigmavav >> theCurrentTemp.entx[k][i].kappavav >> theCurrentTemp.entx[k][i].qavg_spare >> theCurrentTemp.entx[k][i].spare[0]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 31, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} db >> theCurrentTemp.entx[k][i].mpvvav2 >> theCurrentTemp.entx[k][i].sigmavav2 >> theCurrentTemp.entx[k][i].kappavav2 >> theCurrentTemp.entx[k][i].qbfrac[0] >> theCurrentTemp.entx[k][i].qbfrac[1] >> theCurrentTemp.entx[k][i].qbfrac[2] >> theCurrentTemp.entx[k][i].fracyone >> theCurrentTemp.entx[k][i].fracxone >> theCurrentTemp.entx[k][i].fracytwo >> theCurrentTemp.entx[k][i].fracxtwo; // theCurrentTemp.entx[k][i].qbfrac[3] = 1. - theCurrentTemp.entx[k][i].qbfrac[0] - theCurrentTemp.entx[k][i].qbfrac[1] - theCurrentTemp.entx[k][i].qbfrac[2]; if(db.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 32, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } } // Add this template to the store thePixelTemp_.push_back(theCurrentTemp); } return true; } // TempInit
bool SiPixelTemplate::pushfile | ( | int | filenum | ) |
This routine initializes the global template structures from an external file template_summary_zpNNNN where NNNN are four digits of filenum.
filenum | - an integer NNNN used in the filename template_summary_zpNNNN |
Definition at line 115 of file SiPixelTemplate.cc.
References SiPixelTemplateEntry::alpha, SiPixelTemplateEntry::beta, SiPixelTemplateHeader::Bfield, trackerHits::c, SiPixelTemplateEntry::chi2xavg, SiPixelTemplateEntry::chi2xavgc2m, SiPixelTemplateEntry::chi2xavgone, SiPixelTemplateEntry::chi2xmin, SiPixelTemplateEntry::chi2xminc2m, SiPixelTemplateEntry::chi2xminone, SiPixelTemplateEntry::chi2yavg, SiPixelTemplateEntry::chi2yavgc2m, SiPixelTemplateEntry::chi2yavgone, SiPixelTemplateEntry::chi2ymin, SiPixelTemplateEntry::chi2yminc2m, SiPixelTemplateEntry::chi2yminone, SiPixelTemplateEntry::clslenx, SiPixelTemplateEntry::clsleny, SiPixelTemplateEntry::costrk, SiPixelTemplateEntry::cotalpha, SiPixelTemplateEntry::cotbeta, SiPixelTemplateHeader::Dtype, SiPixelTemplateEntry::dxone, SiPixelTemplateEntry::dxtwo, SiPixelTemplateEntry::dyone, SiPixelTemplateEntry::dytwo, ENDL, SiPixelTemplateStore::entx, SiPixelTemplateStore::enty, mergeVDriftHistosByStation::file, SiPixelTemplateHeader::fluence, SiPixelTemplateEntry::fracxone, SiPixelTemplateEntry::fracxtwo, SiPixelTemplateEntry::fracyone, SiPixelTemplateEntry::fracytwo, SiPixelTemplateStore::head, i, SiPixelTemplateHeader::ID, recoMuon::in, create_public_lumi_plots::in_file, j, gen::k, SiPixelTemplateEntry::kappavav, SiPixelTemplateEntry::kappavav2, prof2calltree::l, LOGERROR, LOGINFO, SiPixelTemplateHeader::lorxwidth, SiPixelTemplateHeader::lorywidth, SiPixelTemplateEntry::mpvvav, SiPixelTemplateEntry::mpvvav2, SiPixelTemplateHeader::NTxx, SiPixelTemplateHeader::NTy, SiPixelTemplateHeader::NTyx, SiPixelTemplateEntry::pixmax, SiPixelTemplateEntry::qavg, SiPixelTemplateEntry::qavg_avg, SiPixelTemplateEntry::qavg_spare, SiPixelTemplateEntry::qbfrac, SiPixelTemplateEntry::qmin, SiPixelTemplateEntry::qmin2, SiPixelTemplateHeader::qscale, SiPixelTemplateEntry::runnum, SiPixelTemplateHeader::s50, SiPixelTemplateEntry::sigmavav, SiPixelTemplateEntry::sigmavav2, SiPixelTemplateEntry::spare, AlCaHLTBitMon_QueryRunRegistry::string, SiPixelTemplateEntry::sxmax, SiPixelTemplateEntry::sxone, SiPixelTemplateEntry::sxtwo, SiPixelTemplateEntry::symax, SiPixelTemplateEntry::syone, SiPixelTemplateEntry::sytwo, SiPixelTemplateHeader::temperature, SiPixelTemplateHeader::templ_version, SiPixelTemplateHeader::title, TXSIZE, TYSIZE, SiPixelTemplateHeader::Vbias, SiPixelTemplateEntry::xavg, SiPixelTemplateEntry::xavgc2m, SiPixelTemplateEntry::xavggen, SiPixelTemplateEntry::xflpar, SiPixelTemplateEntry::xgsig, SiPixelTemplateEntry::xgsiggen, SiPixelTemplateEntry::xgx0, SiPixelTemplateEntry::xgx0gen, SiPixelTemplateEntry::xpar, SiPixelTemplateEntry::xrms, SiPixelTemplateEntry::xrmsc2m, SiPixelTemplateEntry::xrmsgen, SiPixelTemplateHeader::xsize, SiPixelTemplateEntry::xtemp, SiPixelTemplateEntry::yavg, SiPixelTemplateEntry::yavgc2m, SiPixelTemplateEntry::yavggen, SiPixelTemplateEntry::yflpar, SiPixelTemplateEntry::ygsig, SiPixelTemplateEntry::ygsiggen, SiPixelTemplateEntry::ygx0, SiPixelTemplateEntry::ygx0gen, SiPixelTemplateEntry::ypar, SiPixelTemplateEntry::yrms, SiPixelTemplateEntry::yrmsc2m, SiPixelTemplateEntry::yrmsgen, SiPixelTemplateHeader::ysize, SiPixelTemplateEntry::ytemp, and SiPixelTemplateHeader::zsize.
Referenced by PixelCPEGeneric::PixelCPEGeneric(), PixelCPETemplateReco::PixelCPETemplateReco(), SiPixelGaussianSmearingRecHitConverterAlgorithm::SiPixelGaussianSmearingRecHitConverterAlgorithm(), and TrackClusterSplitter::TrackClusterSplitter().
{ // Add template stored in external file numbered filenum to theTemplateStore // Local variables int i, j, k, l; float qavg_avg; const char *tempfile; // char title[80]; remove this char c; const int code_version={17}; // Create a filename for this run std::ostringstream tout; // Create different path in CMSSW than standalone #ifndef SI_PIXEL_TEMPLATE_STANDALONE tout << "CalibTracker/SiPixelESProducers/data/template_summary_zp" << std::setw(4) << std::setfill('0') << std::right << filenum << ".out" << std::ends; std::string tempf = tout.str(); edm::FileInPath file( tempf.c_str() ); tempfile = (file.fullPath()).c_str(); #else tout << "template_summary_zp" << std::setw(4) << std::setfill('0') << std::right << filenum << ".out" << std::ends; std::string tempf = tout.str(); tempfile = tempf.c_str(); #endif // open the template file std::ifstream in_file(tempfile, std::ios::in); if(in_file.is_open()) { // Create a local template storage entry SiPixelTemplateStore theCurrentTemp; // Read-in a header string first and print it for (i=0; (c=in_file.get()) != '\n'; ++i) { if(i < 79) {theCurrentTemp.head.title[i] = c;} } if(i > 78) {i=78;} theCurrentTemp.head.title[i+1] ='\0'; LOGINFO("SiPixelTemplate") << "Loading Pixel Template File - " << theCurrentTemp.head.title << ENDL; // next, the header information in_file >> theCurrentTemp.head.ID >> theCurrentTemp.head.templ_version >> theCurrentTemp.head.Bfield >> theCurrentTemp.head.NTy >> theCurrentTemp.head.NTyx >> theCurrentTemp.head.NTxx >> theCurrentTemp.head.Dtype >> theCurrentTemp.head.Vbias >> theCurrentTemp.head.temperature >> theCurrentTemp.head.fluence >> theCurrentTemp.head.qscale >> theCurrentTemp.head.s50 >> theCurrentTemp.head.lorywidth >> theCurrentTemp.head.lorxwidth >> theCurrentTemp.head.ysize >> theCurrentTemp.head.xsize >> theCurrentTemp.head.zsize; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file, no template load" << ENDL; return false;} LOGINFO("SiPixelTemplate") << "Template ID = " << theCurrentTemp.head.ID << ", Template Version " << theCurrentTemp.head.templ_version << ", Bfield = " << theCurrentTemp.head.Bfield << ", NTy = " << theCurrentTemp.head.NTy << ", NTyx = " << theCurrentTemp.head.NTyx<< ", NTxx = " << theCurrentTemp.head.NTxx << ", Dtype = " << theCurrentTemp.head.Dtype << ", Bias voltage " << theCurrentTemp.head.Vbias << ", temperature " << theCurrentTemp.head.temperature << ", fluence " << theCurrentTemp.head.fluence << ", Q-scaling factor " << theCurrentTemp.head.qscale << ", 1/2 threshold " << theCurrentTemp.head.s50 << ", y Lorentz Width " << theCurrentTemp.head.lorywidth << ", x Lorentz width " << theCurrentTemp.head.lorxwidth << ", pixel x-size " << theCurrentTemp.head.xsize << ", y-size " << theCurrentTemp.head.ysize << ", zsize " << theCurrentTemp.head.zsize << ENDL; if(theCurrentTemp.head.templ_version < code_version) {LOGERROR("SiPixelTemplate") << "code expects version " << code_version << ", no template load" << ENDL; return false;} #ifdef SI_PIXEL_TEMPLATE_USE_BOOST // next, layout the 1-d/2-d structures needed to store template theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]); theCurrentTemp.entx.resize(boost::extents[theCurrentTemp.head.NTyx][theCurrentTemp.head.NTxx]); #endif // next, loop over all y-angle entries for (i=0; i < theCurrentTemp.head.NTy; ++i) { in_file >> theCurrentTemp.enty[i].runnum >> theCurrentTemp.enty[i].costrk[0] >> theCurrentTemp.enty[i].costrk[1] >> theCurrentTemp.enty[i].costrk[2]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 1, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} // Calculate the alpha, beta, and cot(beta) for this entry theCurrentTemp.enty[i].alpha = static_cast<float>(atan2((double)theCurrentTemp.enty[i].costrk[2], (double)theCurrentTemp.enty[i].costrk[0])); theCurrentTemp.enty[i].cotalpha = theCurrentTemp.enty[i].costrk[0]/theCurrentTemp.enty[i].costrk[2]; theCurrentTemp.enty[i].beta = static_cast<float>(atan2((double)theCurrentTemp.enty[i].costrk[2], (double)theCurrentTemp.enty[i].costrk[1])); theCurrentTemp.enty[i].cotbeta = theCurrentTemp.enty[i].costrk[1]/theCurrentTemp.enty[i].costrk[2]; in_file >> theCurrentTemp.enty[i].qavg >> theCurrentTemp.enty[i].pixmax >> theCurrentTemp.enty[i].symax >> theCurrentTemp.enty[i].dyone >> theCurrentTemp.enty[i].syone >> theCurrentTemp.enty[i].sxmax >> theCurrentTemp.enty[i].dxone >> theCurrentTemp.enty[i].sxone; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 2, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} in_file >> theCurrentTemp.enty[i].dytwo >> theCurrentTemp.enty[i].sytwo >> theCurrentTemp.enty[i].dxtwo >> theCurrentTemp.enty[i].sxtwo >> theCurrentTemp.enty[i].qmin >> theCurrentTemp.enty[i].clsleny >> theCurrentTemp.enty[i].clslenx; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 3, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} for (j=0; j<2; ++j) { in_file >> theCurrentTemp.enty[i].ypar[j][0] >> theCurrentTemp.enty[i].ypar[j][1] >> theCurrentTemp.enty[i].ypar[j][2] >> theCurrentTemp.enty[i].ypar[j][3] >> theCurrentTemp.enty[i].ypar[j][4]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 4, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<9; ++j) { for (k=0; k<TYSIZE; ++k) {in_file >> theCurrentTemp.enty[i].ytemp[j][k];} if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 5, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<2; ++j) { in_file >> theCurrentTemp.enty[i].xpar[j][0] >> theCurrentTemp.enty[i].xpar[j][1] >> theCurrentTemp.enty[i].xpar[j][2] >> theCurrentTemp.enty[i].xpar[j][3] >> theCurrentTemp.enty[i].xpar[j][4]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 6, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } qavg_avg = 0.f; for (j=0; j<9; ++j) { for (k=0; k<TXSIZE; ++k) {in_file >> theCurrentTemp.enty[i].xtemp[j][k]; qavg_avg += theCurrentTemp.enty[i].xtemp[j][k];} if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 7, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } theCurrentTemp.enty[i].qavg_avg = qavg_avg/9.; for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].yavg[j] >> theCurrentTemp.enty[i].yrms[j] >> theCurrentTemp.enty[i].ygx0[j] >> theCurrentTemp.enty[i].ygsig[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 8, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].yflpar[j][0] >> theCurrentTemp.enty[i].yflpar[j][1] >> theCurrentTemp.enty[i].yflpar[j][2] >> theCurrentTemp.enty[i].yflpar[j][3] >> theCurrentTemp.enty[i].yflpar[j][4] >> theCurrentTemp.enty[i].yflpar[j][5]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 9, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].xavg[j] >> theCurrentTemp.enty[i].xrms[j] >> theCurrentTemp.enty[i].xgx0[j] >> theCurrentTemp.enty[i].xgsig[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 10, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].xflpar[j][0] >> theCurrentTemp.enty[i].xflpar[j][1] >> theCurrentTemp.enty[i].xflpar[j][2] >> theCurrentTemp.enty[i].xflpar[j][3] >> theCurrentTemp.enty[i].xflpar[j][4] >> theCurrentTemp.enty[i].xflpar[j][5]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 11, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].chi2yavg[j] >> theCurrentTemp.enty[i].chi2ymin[j] >> theCurrentTemp.enty[i].chi2xavg[j] >> theCurrentTemp.enty[i].chi2xmin[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 12, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].yavgc2m[j] >> theCurrentTemp.enty[i].yrmsc2m[j] >> theCurrentTemp.enty[i].chi2yavgc2m[j] >> theCurrentTemp.enty[i].chi2yminc2m[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 13, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].xavgc2m[j] >> theCurrentTemp.enty[i].xrmsc2m[j] >> theCurrentTemp.enty[i].chi2xavgc2m[j] >> theCurrentTemp.enty[i].chi2xminc2m[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].yavggen[j] >> theCurrentTemp.enty[i].yrmsgen[j] >> theCurrentTemp.enty[i].ygx0gen[j] >> theCurrentTemp.enty[i].ygsiggen[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14a, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.enty[i].xavggen[j] >> theCurrentTemp.enty[i].xrmsgen[j] >> theCurrentTemp.enty[i].xgx0gen[j] >> theCurrentTemp.enty[i].xgsiggen[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 14b, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } in_file >> theCurrentTemp.enty[i].chi2yavgone >> theCurrentTemp.enty[i].chi2yminone >> theCurrentTemp.enty[i].chi2xavgone >> theCurrentTemp.enty[i].chi2xminone >> theCurrentTemp.enty[i].qmin2 >> theCurrentTemp.enty[i].mpvvav >> theCurrentTemp.enty[i].sigmavav >> theCurrentTemp.enty[i].kappavav >> theCurrentTemp.enty[i].qavg_spare >> theCurrentTemp.enty[i].spare[0]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 15, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} in_file >> theCurrentTemp.enty[i].mpvvav2 >> theCurrentTemp.enty[i].sigmavav2 >> theCurrentTemp.enty[i].kappavav2 >> theCurrentTemp.enty[i].qbfrac[0] >> theCurrentTemp.enty[i].qbfrac[1] >> theCurrentTemp.enty[i].qbfrac[2] >> theCurrentTemp.enty[i].fracyone >> theCurrentTemp.enty[i].fracxone >> theCurrentTemp.enty[i].fracytwo >> theCurrentTemp.enty[i].fracxtwo; // theCurrentTemp.enty[i].qbfrac[3] = 1. - theCurrentTemp.enty[i].qbfrac[0] - theCurrentTemp.enty[i].qbfrac[1] - theCurrentTemp.enty[i].qbfrac[2]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 16, no template load, run # " << theCurrentTemp.enty[i].runnum << ENDL; return false;} } // next, loop over all barrel x-angle entries for (k=0; k < theCurrentTemp.head.NTyx; ++k) { for (i=0; i < theCurrentTemp.head.NTxx; ++i) { in_file >> theCurrentTemp.entx[k][i].runnum >> theCurrentTemp.entx[k][i].costrk[0] >> theCurrentTemp.entx[k][i].costrk[1] >> theCurrentTemp.entx[k][i].costrk[2]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 17, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} // Calculate the alpha, beta, and cot(beta) for this entry theCurrentTemp.entx[k][i].alpha = static_cast<float>(atan2((double)theCurrentTemp.entx[k][i].costrk[2], (double)theCurrentTemp.entx[k][i].costrk[0])); theCurrentTemp.entx[k][i].cotalpha = theCurrentTemp.entx[k][i].costrk[0]/theCurrentTemp.entx[k][i].costrk[2]; theCurrentTemp.entx[k][i].beta = static_cast<float>(atan2((double)theCurrentTemp.entx[k][i].costrk[2], (double)theCurrentTemp.entx[k][i].costrk[1])); theCurrentTemp.entx[k][i].cotbeta = theCurrentTemp.entx[k][i].costrk[1]/theCurrentTemp.entx[k][i].costrk[2]; in_file >> theCurrentTemp.entx[k][i].qavg >> theCurrentTemp.entx[k][i].pixmax >> theCurrentTemp.entx[k][i].symax >> theCurrentTemp.entx[k][i].dyone >> theCurrentTemp.entx[k][i].syone >> theCurrentTemp.entx[k][i].sxmax >> theCurrentTemp.entx[k][i].dxone >> theCurrentTemp.entx[k][i].sxone; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 18, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} in_file >> theCurrentTemp.entx[k][i].dytwo >> theCurrentTemp.entx[k][i].sytwo >> theCurrentTemp.entx[k][i].dxtwo >> theCurrentTemp.entx[k][i].sxtwo >> theCurrentTemp.entx[k][i].qmin >> theCurrentTemp.entx[k][i].clsleny >> theCurrentTemp.entx[k][i].clslenx; // >> theCurrentTemp.entx[k][i].mpvvav >> theCurrentTemp.entx[k][i].sigmavav >> theCurrentTemp.entx[k][i].kappavav; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 19, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} for (j=0; j<2; ++j) { in_file >> theCurrentTemp.entx[k][i].ypar[j][0] >> theCurrentTemp.entx[k][i].ypar[j][1] >> theCurrentTemp.entx[k][i].ypar[j][2] >> theCurrentTemp.entx[k][i].ypar[j][3] >> theCurrentTemp.entx[k][i].ypar[j][4]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 20, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<9; ++j) { for (l=0; l<TYSIZE; ++l) {in_file >> theCurrentTemp.entx[k][i].ytemp[j][l];} if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 21, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<2; ++j) { in_file >> theCurrentTemp.entx[k][i].xpar[j][0] >> theCurrentTemp.entx[k][i].xpar[j][1] >> theCurrentTemp.entx[k][i].xpar[j][2] >> theCurrentTemp.entx[k][i].xpar[j][3] >> theCurrentTemp.entx[k][i].xpar[j][4]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 22, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } qavg_avg = 0.f; for (j=0; j<9; ++j) { for (l=0; l<TXSIZE; ++l) {in_file >> theCurrentTemp.entx[k][i].xtemp[j][l]; qavg_avg += theCurrentTemp.entx[k][i].xtemp[j][l];} if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 23, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } theCurrentTemp.entx[k][i].qavg_avg = qavg_avg/9.; for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].yavg[j] >> theCurrentTemp.entx[k][i].yrms[j] >> theCurrentTemp.entx[k][i].ygx0[j] >> theCurrentTemp.entx[k][i].ygsig[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 24, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].yflpar[j][0] >> theCurrentTemp.entx[k][i].yflpar[j][1] >> theCurrentTemp.entx[k][i].yflpar[j][2] >> theCurrentTemp.entx[k][i].yflpar[j][3] >> theCurrentTemp.entx[k][i].yflpar[j][4] >> theCurrentTemp.entx[k][i].yflpar[j][5]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 25, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].xavg[j] >> theCurrentTemp.entx[k][i].xrms[j] >> theCurrentTemp.entx[k][i].xgx0[j] >> theCurrentTemp.entx[k][i].xgsig[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 26, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].xflpar[j][0] >> theCurrentTemp.entx[k][i].xflpar[j][1] >> theCurrentTemp.entx[k][i].xflpar[j][2] >> theCurrentTemp.entx[k][i].xflpar[j][3] >> theCurrentTemp.entx[k][i].xflpar[j][4] >> theCurrentTemp.entx[k][i].xflpar[j][5]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 27, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].chi2yavg[j] >> theCurrentTemp.entx[k][i].chi2ymin[j] >> theCurrentTemp.entx[k][i].chi2xavg[j] >> theCurrentTemp.entx[k][i].chi2xmin[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 28, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].yavgc2m[j] >> theCurrentTemp.entx[k][i].yrmsc2m[j] >> theCurrentTemp.entx[k][i].chi2yavgc2m[j] >> theCurrentTemp.entx[k][i].chi2yminc2m[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 29, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].xavgc2m[j] >> theCurrentTemp.entx[k][i].xrmsc2m[j] >> theCurrentTemp.entx[k][i].chi2xavgc2m[j] >> theCurrentTemp.entx[k][i].chi2xminc2m[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].yavggen[j] >> theCurrentTemp.entx[k][i].yrmsgen[j] >> theCurrentTemp.entx[k][i].ygx0gen[j] >> theCurrentTemp.entx[k][i].ygsiggen[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30a, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } for (j=0; j<4; ++j) { in_file >> theCurrentTemp.entx[k][i].xavggen[j] >> theCurrentTemp.entx[k][i].xrmsgen[j] >> theCurrentTemp.entx[k][i].xgx0gen[j] >> theCurrentTemp.entx[k][i].xgsiggen[j]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 30b, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } in_file >> theCurrentTemp.entx[k][i].chi2yavgone >> theCurrentTemp.entx[k][i].chi2yminone >> theCurrentTemp.entx[k][i].chi2xavgone >> theCurrentTemp.entx[k][i].chi2xminone >> theCurrentTemp.entx[k][i].qmin2 >> theCurrentTemp.entx[k][i].mpvvav >> theCurrentTemp.entx[k][i].sigmavav >> theCurrentTemp.entx[k][i].kappavav >> theCurrentTemp.entx[k][i].qavg_spare >> theCurrentTemp.entx[k][i].spare[0]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 31, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} in_file >> theCurrentTemp.entx[k][i].mpvvav2 >> theCurrentTemp.entx[k][i].sigmavav2 >> theCurrentTemp.entx[k][i].kappavav2 >> theCurrentTemp.entx[k][i].qbfrac[0] >> theCurrentTemp.entx[k][i].qbfrac[1] >> theCurrentTemp.entx[k][i].qbfrac[2] >> theCurrentTemp.entx[k][i].fracyone >> theCurrentTemp.entx[k][i].fracxone >> theCurrentTemp.entx[k][i].fracytwo >> theCurrentTemp.entx[k][i].fracxtwo; // theCurrentTemp.entx[k][i].qbfrac[3] = 1. - theCurrentTemp.entx[k][i].qbfrac[0] - theCurrentTemp.entx[k][i].qbfrac[1] - theCurrentTemp.entx[k][i].qbfrac[2]; if(in_file.fail()) {LOGERROR("SiPixelTemplate") << "Error reading file 32, no template load, run # " << theCurrentTemp.entx[k][i].runnum << ENDL; return false;} } } in_file.close(); // Add this template to the store thePixelTemp_.push_back(theCurrentTemp); return true; } else { // If file didn't open, report this LOGERROR("SiPixelTemplate") << "Error opening File" << tempfile << ENDL; return false; } } // TempInit
float SiPixelTemplate::qavg | ( | ) | [inline] |
average cluster charge for this set of track angles
Definition at line 301 of file SiPixelTemplate.h.
References qavg_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
int SiPixelTemplate::qbin | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
float | locBz, | ||
float | qclus, | ||
float & | pixmx, | ||
float & | sigmay, | ||
float & | deltay, | ||
float & | sigmax, | ||
float & | deltax, | ||
float & | sy1, | ||
float & | dy1, | ||
float & | sy2, | ||
float & | dy2, | ||
float & | sx1, | ||
float & | dx1, | ||
float & | sx2, | ||
float & | dx2 | ||
) |
Interpolate beta/alpha angles to produce an expected average charge. Return int (0-4) describing the charge of the cluster [0: 1.5<Q/Qavg, 1: 1<Q/Qavg<1.5, 2: 0.85<Q/Qavg<1, 3: 0.95Qmin<Q<0.85Qavg, 4: Q<0.95Qmin].
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
locBz | - (input) the sign of this quantity is used to determine whether to flip cot(beta)<0 quantities from cot(beta)>0 (FPix only) for FPix IP-related tracks, locBz < 0 for cot(beta) > 0 and locBz > 0 for cot(beta) < 0 |
qclus | - (input) the cluster charge in electrons |
pixmax | - (output) the maximum pixel charge in electrons (truncation value) |
sigmay | - (output) the estimated y-error for CPEGeneric in microns |
deltay | - (output) the estimated y-bias for CPEGeneric in microns |
sigmax | - (output) the estimated x-error for CPEGeneric in microns |
deltax | - (output) the estimated x-bias for CPEGeneric in microns |
sy1 | - (output) the estimated y-error for 1 single-pixel clusters in microns |
dy1 | - (output) the estimated y-bias for 1 single-pixel clusters in microns |
sy2 | - (output) the estimated y-error for 1 double-pixel clusters in microns |
dy2 | - (output) the estimated y-bias for 1 double-pixel clusters in microns |
sx1 | - (output) the estimated x-error for 1 single-pixel clusters in microns |
dx1 | - (output) the estimated x-bias for 1 single-pixel clusters in microns |
sx2 | - (output) the estimated x-error for 1 double-pixel clusters in microns |
dx2 | - (output) the estimated x-bias for 1 double-pixel clusters in microns |
Definition at line 2421 of file SiPixelTemplate.cc.
References qbin().
{ float lorywidth, lorxwidth; return SiPixelTemplate::qbin(id, cotalpha, cotbeta, locBz, qclus, pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, lorywidth, lorxwidth); } // qbin
int SiPixelTemplate::qbin | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
float | qclus | ||
) |
Interpolate beta/alpha angles to produce an expected average charge. Return int (0-4) describing the charge of the cluster [0: 1.5<Q/Qavg, 1: 1<Q/Qavg<1.5, 2: 0.85<Q/Qavg<1, 3: 0.95Qmin<Q<0.85Qavg, 4: Q<0.95Qmin].
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
qclus | - (input) the cluster charge in electrons |
Definition at line 2439 of file SiPixelTemplate.cc.
{ // Interpolate for a new set of track angles // Local variables float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz, lorywidth, lorxwidth; locBz = -1.f; if(cotbeta < 0.f) {locBz = -locBz;} return SiPixelTemplate::qbin(id, cotalpha, cotbeta, locBz, qclus, pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, lorywidth, lorxwidth); } // qbin
int SiPixelTemplate::qbin | ( | int | id, |
float | cotbeta, | ||
float | qclus | ||
) |
Interpolate beta/alpha angles to produce an expected average charge. Return int (0-4) describing the charge of the cluster [0: 1.5<Q/Qavg, 1: 1<Q/Qavg<1.5, 2: 0.85<Q/Qavg<1, 3: 0.95Qmin<Q<0.85Qavg, 4: Q<0.95Qmin].
id | - (input) index of the template to use |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
qclus | - (input) the cluster charge in electrons |
Definition at line 2459 of file SiPixelTemplate.cc.
{ // Interpolate for a new set of track angles // Local variables float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz, lorywidth, lorxwidth; const float cotalpha = 0.f; locBz = -1.f; if(cotbeta < 0.f) {locBz = -locBz;} return SiPixelTemplate::qbin(id, cotalpha, cotbeta, locBz, qclus, pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, lorywidth, lorxwidth); } // qbin
int SiPixelTemplate::qbin | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
float | locBz, | ||
float | qclus, | ||
float & | pixmx, | ||
float & | sigmay, | ||
float & | deltay, | ||
float & | sigmax, | ||
float & | deltax, | ||
float & | sy1, | ||
float & | dy1, | ||
float & | sy2, | ||
float & | dy2, | ||
float & | sx1, | ||
float & | dx1, | ||
float & | sx2, | ||
float & | dx2, | ||
float & | lorywidth, | ||
float & | lorxwidth | ||
) |
Interpolate beta/alpha angles to produce an expected average charge. Return int (0-4) describing the charge of the cluster [0: 1.5<Q/Qavg, 1: 1<Q/Qavg<1.5, 2: 0.85<Q/Qavg<1, 3: 0.95Qmin<Q<0.85Qavg, 4: Q<0.95Qmin].
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
locBz | - (input) the sign of this quantity is used to determine whether to flip cot(beta)<0 quantities from cot(beta)>0 (FPix only) for FPix IP-related tracks, locBz < 0 for cot(beta) > 0 and locBz > 0 for cot(beta) < 0 |
qclus | - (input) the cluster charge in electrons |
pixmax | - (output) the maximum pixel charge in electrons (truncation value) |
sigmay | - (output) the estimated y-error for CPEGeneric in microns |
deltay | - (output) the estimated y-bias for CPEGeneric in microns |
sigmax | - (output) the estimated x-error for CPEGeneric in microns |
deltax | - (output) the estimated x-bias for CPEGeneric in microns |
sy1 | - (output) the estimated y-error for 1 single-pixel clusters in microns |
dy1 | - (output) the estimated y-bias for 1 single-pixel clusters in microns |
sy2 | - (output) the estimated y-error for 1 double-pixel clusters in microns |
dy2 | - (output) the estimated y-bias for 1 double-pixel clusters in microns |
sx1 | - (output) the estimated x-error for 1 single-pixel clusters in microns |
dx1 | - (output) the estimated x-bias for 1 single-pixel clusters in microns |
sx2 | - (output) the estimated x-error for 1 double-pixel clusters in microns |
dx2 | - (output) the estimated x-bias for 1 double-pixel clusters in microns |
lorywidth | - (output) the estimated y Lorentz width |
lorxwidth | - (output) the estimated x Lorentz width |
Definition at line 2149 of file SiPixelTemplate.cc.
References Exception, f, i, getHLTprescales::index, and mathSSE::sqrt().
Referenced by PixelCPEGeneric::localPosition(), qbin(), and TrackClusterSplitter::splitCluster().
{ // Interpolate for a new set of track angles // Local variables int i, binq; int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, index; float yratio, yxratio, xxratio; float acotb, qscale, qavg, qmin, qmin2, fq, qtotal, qcorrect, cotb, cotalpha0; float yavggen[4], yrmsgen[4], xavggen[4], xrmsgen[4]; bool flip_y; // Find the index corresponding to id index = -1; for(i=0; i<(int)thePixelTemp_.size(); ++i) { if(id == thePixelTemp_[i].head.ID) { index = i; break; } } #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(index < 0 || index >= (int)thePixelTemp_.size()) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::qbin can't find needed template ID = " << id << std::endl; } #else assert(index >= 0 && index < (int)thePixelTemp_.size()); #endif // // Interpolate the absolute value of cot(beta) acotb = fabs((double)cotbeta); // qcorrect corrects the cot(alpha)=0 cluster charge for non-zero cot(alpha) // qcorrect corrects the cot(alpha)=0 cluster charge for non-zero cot(alpha) cotalpha0 = thePixelTemp_[index].enty[0].cotalpha; qcorrect=std::sqrt((1.f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.f+cotbeta*cotbeta+cotalpha0*cotalpha0)); // for some cosmics, the ususal gymnastics are incorrect if(thePixelTemp_[index].head.Dtype == 0) { cotb = acotb; flip_y = false; if(cotbeta < 0.f) {flip_y = true;} } else { if(locBz < 0.f) { cotb = cotbeta; flip_y = false; } else { cotb = -cotbeta; flip_y = true; } } // Copy the charge scaling factor to the private variable qscale = thePixelTemp_[index].head.qscale; Ny = thePixelTemp_[index].head.NTy; Nyx = thePixelTemp_[index].head.NTyx; Nxx = thePixelTemp_[index].head.NTxx; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2 || Nyx < 1 || Nxx < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny/Nyx/Nxx = " << Ny << "/" << Nyx << "/" << Nxx << std::endl; } #else assert(Ny > 1 && Nyx > 0 && Nxx > 1); #endif // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.f; } else { if(cotb >= thePixelTemp_[index].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index].enty[i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta); break; } } } } ihigh=ilow + 1; // Interpolate/store all y-related quantities (flip displacements when flip_y) qavg = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qavg + yratio*thePixelTemp_[index].enty[ihigh].qavg; qavg *= qcorrect; dy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dyone + yratio*thePixelTemp_[index].enty[ihigh].dyone; if(flip_y) {dy1 = -dy1;} sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone; dy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dytwo + yratio*thePixelTemp_[index].enty[ihigh].dytwo; if(flip_y) {dy2 = -dy2;} sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo; qmin = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin + yratio*thePixelTemp_[index].enty[ihigh].qmin; qmin *= qcorrect; qmin2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin2 + yratio*thePixelTemp_[index].enty[ihigh].qmin2; qmin2 *= qcorrect; for(i=0; i<4; ++i) { yavggen[i]=(1.f - yratio)*thePixelTemp_[index].enty[ilow].yavggen[i] + yratio*thePixelTemp_[index].enty[ihigh].yavggen[i]; if(flip_y) {yavggen[i] = -yavggen[i];} yrmsgen[i]=(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrmsgen[i] + yratio*thePixelTemp_[index].enty[ihigh].yrmsgen[i]; } // next, loop over all x-angle entries, first, find relevant y-slices iylow = 0; yxratio = 0.f; if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) { iylow = Nyx-2; yxratio = 1.f; } else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) { for (i=0; i<Nyx-1; ++i) { if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) { iylow = i; yxratio = (acotb - thePixelTemp_[index].entx[i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta); break; } } } iyhigh=iylow + 1; ilow = 0; xxratio = 0.f; if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) { ilow = Nxx-2; xxratio = 1.f; } else { if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) { for (i=0; i<Nxx-1; ++i) { if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) { ilow = i; xxratio = (cotalpha - thePixelTemp_[index].entx[0][i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha); break; } } } } ihigh=ilow + 1; dx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxone + xxratio*thePixelTemp_[index].entx[0][ihigh].dxone; sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone; dx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].dxtwo; sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo; // pixmax is the maximum allowed pixel charge (used for truncation) pixmx=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[index].entx[iylow][ihigh].pixmax) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].pixmax); for(i=0; i<4; ++i) { xavggen[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].xavggen[i] + xxratio*thePixelTemp_[index].entx[iylow][ihigh].xavggen[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].xavggen[i] + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].xavggen[i]); xrmsgen[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].xrmsgen[i] + xxratio*thePixelTemp_[index].entx[iylow][ihigh].xrmsgen[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].xrmsgen[i] + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].xrmsgen[i]); } lorywidth = thePixelTemp_[index].head.lorywidth; if(locBz > 0.f) {lorywidth = -lorywidth;} lorxwidth = thePixelTemp_[index].head.lorxwidth; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(qavg <= 0.f || qmin <= 0.f) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::qbin, qavg or qmin <= 0," << " Probably someone called the generic pixel reconstruction with an illegal trajectory state" << std::endl; } #else assert(qavg > 0.f && qmin > 0.f); #endif // Scale the input charge to account for differences between pixelav and CMSSW simulation or data qtotal = qscale*qclus; // uncertainty and final corrections depend upon total charge bin fq = qtotal/qavg; if(fq > 1.5f) { binq=0; } else { if(fq > 1.0f) { binq=1; } else { if(fq > 0.85f) { binq=2; } else { binq=3; } } } // Take the errors and bias from the correct charge bin sigmay = yrmsgen[binq]; deltay = yavggen[binq]; sigmax = xrmsgen[binq]; deltax = xavggen[binq]; // If the charge is too small (then flag it) if(qtotal < 0.95f*qmin) {binq = 5;} else {if(qtotal < 0.95f*qmin2) {binq = 4;}} return binq; } // qbin
void SiPixelTemplate::qbin_dist | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
float | qbin_frac[4], | ||
float & | ny1_frac, | ||
float & | ny2_frac, | ||
float & | nx1_frac, | ||
float & | nx2_frac | ||
) |
Interpolate beta/alpha angles to produce estimated errors for fastsim
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
qbin_frac[4] | - (output) the integrated probability for qbin=0, 0+1, 0+1+2, 0+1+2+3 (1.) |
ny1_frac | - (output) the probability for ysize = 1 for a single-size pixel |
ny2_frac | - (output) the probability for ysize = 1 for a double-size pixel |
nx1_frac | - (output) the probability for xsize = 1 for a single-size pixel |
nx2_frac | - (output) the probability for xsize = 1 for a double-size pixel |
Definition at line 2687 of file SiPixelTemplate.cc.
References Exception, f, i, and getHLTprescales::index.
Referenced by SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit().
{ // Interpolate for a new set of track angles // Local variables int i; int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, index; float yratio, yxratio, xxratio; float acotb, cotb; float qfrac[4]; //bool flip_y; // Find the index corresponding to id index = -1; for(i=0; i<(int)thePixelTemp_.size(); ++i) { if(id == thePixelTemp_[i].head.ID) { index = i; // id_current_ = id; break; } } #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(index < 0 || index >= (int)thePixelTemp_.size()) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::temperrors can't find needed template ID = " << id << std::endl; } #else assert(index >= 0 && index < (int)thePixelTemp_.size()); #endif // // Interpolate the absolute value of cot(beta) acotb = fabs((double)cotbeta); cotb = cotbeta; // for some cosmics, the ususal gymnastics are incorrect // if(thePixelTemp_[index].head.Dtype == 0) { cotb = acotb; //flip_y = false; //if(cotbeta < 0.f) {flip_y = true;} // } else { // if(locBz < 0.f) { // cotb = cotbeta; // flip_y = false; // } else { // cotb = -cotbeta; // flip_y = true; // } // } // Copy the charge scaling factor to the private variable Ny = thePixelTemp_[index].head.NTy; Nyx = thePixelTemp_[index].head.NTyx; Nxx = thePixelTemp_[index].head.NTxx; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2 || Nyx < 1 || Nxx < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny/Nyx/Nxx = " << Ny << "/" << Nyx << "/" << Nxx << std::endl; } #else assert(Ny > 1 && Nyx > 0 && Nxx > 1); #endif // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.f; } else { if(cotb >= thePixelTemp_[index].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index].enty[i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta); break; } } } } ihigh=ilow + 1; // Interpolate/store all y-related quantities (flip displacements when flip_y) ny1_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracyone + yratio*thePixelTemp_[index].enty[ihigh].fracyone; ny2_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracytwo + yratio*thePixelTemp_[index].enty[ihigh].fracytwo; // next, loop over all x-angle entries, first, find relevant y-slices iylow = 0; yxratio = 0.f; if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) { iylow = Nyx-2; yxratio = 1.f; } else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) { for (i=0; i<Nyx-1; ++i) { if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) { iylow = i; yxratio = (acotb - thePixelTemp_[index].entx[i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta); break; } } } iyhigh=iylow + 1; ilow = 0; xxratio = 0.f; if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) { ilow = Nxx-2; xxratio = 1.f; } else { if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) { for (i=0; i<Nxx-1; ++i) { if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) { ilow = i; xxratio = (cotalpha - thePixelTemp_[index].entx[0][i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha); break; } } } } ihigh=ilow + 1; for(i=0; i<3; ++i) { qfrac[i]=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].qbfrac[i] + xxratio*thePixelTemp_[index].entx[iylow][ihigh].qbfrac[i]) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].qbfrac[i] + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].qbfrac[i]); } nx1_frac = (1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].fracxone + xxratio*thePixelTemp_[index].entx[iylow][ihigh].fracxone) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].fracxone + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].fracxone); nx2_frac = (1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].fracxtwo + xxratio*thePixelTemp_[index].entx[iylow][ihigh].fracxtwo) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].fracxtwo + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].fracxtwo); qbin_frac[0] = qfrac[0]; qbin_frac[1] = qbin_frac[0] + qfrac[1]; qbin_frac[2] = qbin_frac[1] + qfrac[2]; qbin_frac[3] = 1.f; return; } // qbin
float SiPixelTemplate::qmin | ( | ) | [inline] |
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
Definition at line 315 of file SiPixelTemplate.h.
References qmin_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::qmin | ( | int | i | ) | [inline] |
minimum cluster charge for valid hit (keeps 99.9% or 99.8% of simulated hits)
Definition at line 316 of file SiPixelTemplate.h.
float SiPixelTemplate::qscale | ( | ) | [inline] |
charge scaling factor
Definition at line 303 of file SiPixelTemplate.h.
References qscale_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::s50 | ( | ) | [inline] |
1/2 of the pixel threshold signal in electrons
Definition at line 304 of file SiPixelTemplate.h.
References s50_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), SiPixelTemplateSplit::PixelTempSplit(), SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit(), and TrackClusterSplitter::splitCluster().
float SiPixelTemplate::sigmavav | ( | ) | [inline] |
"sigma" scale fctor for Vavilov distribution
Definition at line 475 of file SiPixelTemplate.h.
References sigmavav_.
float SiPixelTemplate::sigmavav2 | ( | ) | [inline] |
"sigma" scale fctor for 2-cluster Vavilov distribution
Definition at line 478 of file SiPixelTemplate.h.
References sigmavav2_.
bool SiPixelTemplate::simpletemplate2D | ( | float | xhit, |
float | yhit, | ||
std::vector< bool > & | ydouble, | ||
std::vector< bool > & | xdouble, | ||
float | template2d[BXM2][BYM2] | ||
) |
Make simple 2-D templates from track angles set in interpolate and hit position.
xhit | - (input) x-position of hit relative to the lower left corner of pixel[1][1] (to allow for the "padding" of the two-d clusters in the splitter) |
yhit | - (input) y-position of hit relative to the lower left corner of pixel[1][1] |
ydouble | - (input) STL vector of 21 element array to flag a double-pixel starting at cluster[1][1] |
xdouble | - (input) STL vector of 11 element array to flag a double-pixel starting at cluster[1][1] |
template2d | - (output) 2d template of size matched to the cluster. Input must be zeroed since charge is added only. |
Definition at line 2871 of file SiPixelTemplate.cc.
References abs, any, SimplePixel::btype, BXM3, BYM3, f, SimplePixel::i, i, SimplePixel::j, j, list(), edm::max(), SimplePixel::s, mathSSE::sqrt(), SimplePixel::x, and SimplePixel::y.
Referenced by SiPixelTemplateSplit::PixelTempSplit(), and TrackClusterSplitter::splitCluster().
{ // Local variables float x0, y0, xf, yf, xi, yi, sf, si, s0, qpix, slopey, slopex, ds; int i, j, jpix0, ipix0, jpixf, ipixf, jpix, ipix, nx, ny, anx, any, jmax, imax; float qtotal; // double path; std::list<SimplePixel> list; std::list<SimplePixel>::iterator listIter, listEnd; // Calculate the entry and exit points for the line charge from the track x0 = xhit - 0.5*zsize_*cota_current_; y0 = yhit - 0.5*zsize_*cotb_current_; jpix0 = floor(x0/xsize_)+1; ipix0 = floor(y0/ysize_)+1; if(jpix0 < 0 || jpix0 > BXM3) {return false;} if(ipix0 < 0 || ipix0 > BYM3) {return false;} xf = xhit + 0.5*zsize_*cota_current_ + lorxwidth_; yf = yhit + 0.5*zsize_*cotb_current_ + lorywidth_; jpixf = floor(xf/xsize_)+1; ipixf = floor(yf/ysize_)+1; if(jpixf < 0 || jpixf > BXM3) {return false;} if(ipixf < 0 || ipixf > BYM3) {return false;} // total charge length sf = std::sqrt((xf-x0)*(xf-x0) + (yf-y0)*(yf-y0)); if((xf-x0) != 0.f) {slopey = (yf-y0)/(xf-x0);} else { slopey = 1.e10;} if((yf-y0) != 0.f) {slopex = (xf-x0)/(yf-y0);} else { slopex = 1.e10;} // use average charge in this direction qtotal = qavg_avg_; SimplePixel element; element.s = sf; element.x = xf; element.y = yf; element.i = ipixf; element.j = jpixf; element.btype = 0; list.push_back(element); // nx is the number of x interfaces crossed by the line charge nx = jpixf - jpix0; anx = abs(nx); if(anx > 0) { if(nx > 0) { for(j=jpix0; j<jpixf; ++j) { xi = xsize_*j; yi = slopey*(xi-x0) + y0; ipix = (int)(yi/ysize_)+1; si = std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0)); element.s = si; element.x = xi; element.y = yi; element.i = ipix; element.j = j; element.btype = 1; list.push_back(element); } } else { for(j=jpix0; j>jpixf; --j) { xi = xsize_*(j-1); yi = slopey*(xi-x0) + y0; ipix = (int)(yi/ysize_)+1; si = std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0)); element.s = si; element.x = xi; element.y = yi; element.i = ipix; element.j = j; element.btype = 1; list.push_back(element); } } } ny = ipixf - ipix0; any = abs(ny); if(any > 0) { if(ny > 0) { for(i=ipix0; i<ipixf; ++i) { yi = ysize_*i; xi = slopex*(yi-y0) + x0; jpix = (int)(xi/xsize_)+1; si = std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0)); element.s = si; element.x = xi; element.y = yi; element.i = i; element.j = jpix; element.btype = 2; list.push_back(element); } } else { for(i=ipix0; i>ipixf; --i) { yi = ysize_*(i-1); xi = slopex*(yi-y0) + x0; jpix = (int)(xi/xsize_)+1; si = std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0)); element.s = si; element.x = xi; element.y = yi; element.i = i; element.j = jpix; element.btype = 2; list.push_back(element); } } } imax = std::max(ipix0, ipixf); jmax = std::max(jpix0, jpixf); // Sort the list according to the distance from the initial point list.sort(); // Look for double pixels and adjust the list appropriately for(i=1; i<imax; ++i) { if(ydouble[i-1]) { listIter = list.begin(); if(ny > 0) { while(listIter != list.end()) { if(listIter->i == i && listIter->btype == 2) { listIter = list.erase(listIter); continue; } if(listIter->i > i) { --(listIter->i); } ++listIter; } } else { while(listIter != list.end()) { if(listIter->i == i+1 && listIter->btype == 2) { listIter = list.erase(listIter); continue; } if(listIter->i > i+1) { --(listIter->i); } ++listIter; } } } } for(j=1; j<jmax; ++j) { if(xdouble[j-1]) { listIter = list.begin(); if(nx > 0) { while(listIter != list.end()) { if(listIter->j == j && listIter->btype == 1) { listIter = list.erase(listIter); continue; } if(listIter->j > j) { --(listIter->j); } ++listIter; } } else { while(listIter != list.end()) { if(listIter->j == j+1 && listIter->btype == 1) { listIter = list.erase(listIter); continue; } if(listIter->j > j+1) { --(listIter->j); } ++listIter; } } } } // The list now contains the path lengths of the line charge in each pixel from (x0,y0). Cacluate the lengths of the segments and the charge. s0 = 0.f; listIter = list.begin(); listEnd = list.end(); for( ;listIter != listEnd; ++listIter) { si = listIter->s; ds = si - s0; s0 = si; j = listIter->j; i = listIter->i; if(sf > 0.f) { qpix = qtotal*ds/sf;} else {qpix = qtotal;} template2d[j][i] += qpix; } return true; } // simpletemplate2D
float SiPixelTemplate::sxmax | ( | ) | [inline] |
average pixel signal for x-projection of cluster
Definition at line 310 of file SiPixelTemplate.h.
References sxmax_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::sxone | ( | ) | [inline] |
rms for one pixel x-clusters
Definition at line 312 of file SiPixelTemplate.h.
References sxone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::sxtwo | ( | ) | [inline] |
rms for one double-pixel x-clusters
Definition at line 314 of file SiPixelTemplate.h.
References sxtwo_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::symax | ( | ) | [inline] |
average pixel signal for y-projection of cluster
Definition at line 305 of file SiPixelTemplate.h.
References symax_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::syone | ( | ) | [inline] |
rms for one pixel y-clusters
Definition at line 307 of file SiPixelTemplate.h.
References syone_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::sytwo | ( | ) | [inline] |
rms for one double-pixel y-clusters
Definition at line 309 of file SiPixelTemplate.h.
References sytwo_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
void SiPixelTemplate::temperrors | ( | int | id, |
float | cotalpha, | ||
float | cotbeta, | ||
int | qBin, | ||
float & | sigmay, | ||
float & | sigmax, | ||
float & | sy1, | ||
float & | sy2, | ||
float & | sx1, | ||
float & | sx2 | ||
) |
Interpolate beta/alpha angles to produce estimated errors for fastsim
id | - (input) index of the template to use |
cotalpha | - (input) the cotangent of the alpha track angle (see CMS IN 2004/014) |
cotbeta | - (input) the cotangent of the beta track angle (see CMS IN 2004/014) |
qBin | - (input) charge bin from 0-3 |
sigmay | - (output) the estimated y-error for CPETemplate in microns |
sigmax | - (output) the estimated x-error for CPETemplate in microns |
sy1 | - (output) the estimated y-error for 1 single-pixel clusters in microns |
sy2 | - (output) the estimated y-error for 1 double-pixel clusters in microns |
sx1 | - (output) the estimated x-error for 1 single-pixel clusters in microns |
sx2 | - (output) the estimated x-error for 1 double-pixel clusters in microns |
Definition at line 2488 of file SiPixelTemplate.cc.
References Exception, f, i, and getHLTprescales::index.
Referenced by SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit().
{ // Interpolate for a new set of track angles // Local variables int i; int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, index; float yratio, yxratio, xxratio; float acotb, cotb; float yrms, xrms; //bool flip_y; // Find the index corresponding to id index = -1; for(i=0; i<(int)thePixelTemp_.size(); ++i) { if(id == thePixelTemp_[i].head.ID) { index = i; break; } } #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(index < 0 || index >= (int)thePixelTemp_.size()) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::temperrors can't find needed template ID = " << id << std::endl; } #else assert(index >= 0 && index < (int)thePixelTemp_.size()); #endif #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(qBin < 0 || qBin > 5) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::temperrors called with illegal qBin = " << qBin << std::endl; } #else assert(qBin >= 0 && qBin < 6); #endif // The error information for qBin > 3 is taken to be the same as qBin=3 if(qBin > 3) {qBin = 3;} // // Interpolate the absolute value of cot(beta) acotb = fabs((double)cotbeta); cotb = cotbeta; // for some cosmics, the ususal gymnastics are incorrect // if(thePixelTemp_[index].head.Dtype == 0) { cotb = acotb; //flip_y = false; //if(cotbeta < 0.f) {flip_y = true;} // } else { // if(locBz < 0.f) { // cotb = cotbeta; // flip_y = false; // } else { // cotb = -cotbeta; // flip_y = true; // } // } // Copy the charge scaling factor to the private variable Ny = thePixelTemp_[index].head.NTy; Nyx = thePixelTemp_[index].head.NTyx; Nxx = thePixelTemp_[index].head.NTxx; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2 || Nyx < 1 || Nxx < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny/Nyx/Nxx = " << Ny << "/" << Nyx << "/" << Nxx << std::endl; } #else assert(Ny > 1 && Nyx > 0 && Nxx > 1); #endif // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.f; } else { if(cotb >= thePixelTemp_[index].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index].enty[i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta); break; } } } } ihigh=ilow + 1; // Interpolate/store all y-related quantities (flip displacements when flip_y) sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone; sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo; yrms=(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrms[qBin] + yratio*thePixelTemp_[index].enty[ihigh].yrms[qBin]; // next, loop over all x-angle entries, first, find relevant y-slices iylow = 0; yxratio = 0.f; if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) { iylow = Nyx-2; yxratio = 1.f; } else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) { for (i=0; i<Nyx-1; ++i) { if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) { iylow = i; yxratio = (acotb - thePixelTemp_[index].entx[i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta); break; } } } iyhigh=iylow + 1; ilow = 0; xxratio = 0.f; if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) { ilow = Nxx-2; xxratio = 1.f; } else { if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) { for (i=0; i<Nxx-1; ++i) { if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) { ilow = i; xxratio = (cotalpha - thePixelTemp_[index].entx[0][i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha); break; } } } } ihigh=ilow + 1; sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone; sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo; xrms=(1.f - yxratio)*((1.f - xxratio)*thePixelTemp_[index].entx[iylow][ilow].xrms[qBin] + xxratio*thePixelTemp_[index].entx[iylow][ihigh].xrms[qBin]) +yxratio*((1.f - xxratio)*thePixelTemp_[index].entx[iyhigh][ilow].xrms[qBin] + xxratio*thePixelTemp_[index].entx[iyhigh][ihigh].xrms[qBin]); // Take the errors and bias from the correct charge bin sigmay = yrms; sigmax = xrms; return; } // temperrors
void SiPixelTemplate::vavilov2_pars | ( | double & | mpv, |
double & | sigma, | ||
double & | kappa | ||
) |
Interpolate beta/alpha angles to produce Vavilov parameters for the 2-cluster charge distribution
mpv | - (output) the Vavilov most probable charge (well, not really the most probable esp at large kappa) |
sigma | - (output) the Vavilov sigma parameter |
kappa | - (output) the Vavilov kappa parameter [0.01 (Landau-like) < kappa < 10 (Gaussian-like) |
Definition at line 3163 of file SiPixelTemplate.cc.
References cmsCodeRulesChecker::arg, Exception, f, i, and mathSSE::sqrt().
Referenced by SiPixelTemplateSplit::PixelTempSplit().
{ // Local variables int i; int ilow, ihigh, Ny; float yratio, cotb, cotalpha0, arg; // Interpolate in cotbeta only for the correct total path length (converts cotalpha, cotbeta into an effective cotbeta) cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha; arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0; if(arg < 0.f) arg = 0.f; cotb = std::sqrt(arg); // Copy the charge scaling factor to the private variable Ny = thePixelTemp_[index_id_].head.NTy; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny = " << Ny << std::endl; } #else assert(Ny > 1); #endif // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.f; } else { if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index_id_].enty[i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta); break; } } } } ihigh=ilow + 1; // Interpolate Vavilov parameters mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2; sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2; kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2; // Copy to parameter list mpv = (double)mpvvav2_; sigma = (double)sigmavav2_; kappa = (double)kappavav2_; return; } // vavilov2_pars
void SiPixelTemplate::vavilov_pars | ( | double & | mpv, |
double & | sigma, | ||
double & | kappa | ||
) |
Interpolate beta/alpha angles to produce Vavilov parameters for the charge distribution
mpv | - (output) the Vavilov most probable charge (well, not really the most probable esp at large kappa) |
sigma | - (output) the Vavilov sigma parameter |
kappa | - (output) the Vavilov kappa parameter [0.01 (Landau-like) < kappa < 10 (Gaussian-like) |
Definition at line 3085 of file SiPixelTemplate.cc.
References cmsCodeRulesChecker::arg, Exception, f, i, and mathSSE::sqrt().
Referenced by SiPixelTemplateReco::PixelTempReco2D().
{ // Local variables int i; int ilow, ihigh, Ny; float yratio, cotb, cotalpha0, arg; // Interpolate in cotbeta only for the correct total path length (converts cotalpha, cotbeta into an effective cotbeta) cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha; arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0; if(arg < 0.f) arg = 0.f; cotb = std::sqrt(arg); // Copy the charge scaling factor to the private variable Ny = thePixelTemp_[index_id_].head.NTy; #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(Ny < 2) { throw cms::Exception("DataCorrupt") << "template ID = " << id_current_ << "has too few entries: Ny = " << Ny << std::endl; } #else assert(Ny > 1); #endif // next, loop over all y-angle entries ilow = 0; yratio = 0.f; if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) { ilow = Ny-2; yratio = 1.f; } else { if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) { for (i=0; i<Ny-1; ++i) { if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) { ilow = i; yratio = (cotb - thePixelTemp_[index_id_].enty[i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta); break; } } } } ihigh=ilow + 1; // Interpolate Vavilov parameters mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav; sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav; kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav; // Copy to parameter list mpv = (double)mpvvav_; sigma = (double)sigmavav_; kappa = (double)kappavav_; return; } // vavilov_pars
float SiPixelTemplate::xavg | ( | int | i | ) | [inline] |
average x-bias of reconstruction binned in 4 charge bins
Definition at line 356 of file SiPixelTemplate.h.
References Exception, i, and xavg_.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::xavgc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins
Definition at line 440 of file SiPixelTemplate.h.
References Exception, i, and xavgc2m_.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::xflcorr | ( | int | binq, |
float | qflx | ||
) |
Return interpolated x-correction for input charge bin and qflx
binq | - (input) charge bin [0-3] |
qflx | - (input) (Q_f-Q_l)/(Q_f+Q_l) for this cluster |
Definition at line 1621 of file SiPixelTemplate.cc.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
{ // Interpolate using quantities already stored in the private variables // Local variables float qfl, qfl2, qfl3, qfl4, qfl5, dx; // Make sure that input is OK #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(binq < 0 || binq > 3) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xflcorr called with binq = " << binq << std::endl; } #else assert(binq >= 0 && binq < 4); #endif #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(fabs((double)qflx) > 1.) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xflcorr called with qflx = " << qflx << std::endl; } #else assert(fabs((double)qflx) <= 1.); #endif // Define the maximum signal to allow before de-weighting a pixel qfl = qflx; if(qfl < -0.9f) {qfl = -0.9f;} if(qfl > 0.9f) {qfl = 0.9f;} // Interpolate between the two polynomials qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl; dx = (1.f - yxratio_)*((1.f-xxratio_)*(xflparll_[binq][0]+xflparll_[binq][1]*qfl+xflparll_[binq][2]*qfl2+xflparll_[binq][3]*qfl3+xflparll_[binq][4]*qfl4+xflparll_[binq][5]*qfl5) + xxratio_*(xflparlh_[binq][0]+xflparlh_[binq][1]*qfl+xflparlh_[binq][2]*qfl2+xflparlh_[binq][3]*qfl3+xflparlh_[binq][4]*qfl4+xflparlh_[binq][5]*qfl5)) + yxratio_*((1.f-xxratio_)*(xflparhl_[binq][0]+xflparhl_[binq][1]*qfl+xflparhl_[binq][2]*qfl2+xflparhl_[binq][3]*qfl3+xflparhl_[binq][4]*qfl4+xflparhl_[binq][5]*qfl5) + xxratio_*(xflparhh_[binq][0]+xflparhh_[binq][1]*qfl+xflparhh_[binq][2]*qfl2+xflparhh_[binq][3]*qfl3+xflparhh_[binq][4]*qfl4+xflparhh_[binq][5]*qfl5)); return dx; } // End xflcorr
float SiPixelTemplate::xgsig | ( | int | i | ) | [inline] |
average sigma_x from Gaussian fit binned in 4 charge bins
Definition at line 377 of file SiPixelTemplate.h.
float SiPixelTemplate::xgx0 | ( | int | i | ) | [inline] |
average x0 from Gaussian fit binned in 4 charge bins
Definition at line 370 of file SiPixelTemplate.h.
float SiPixelTemplate::xrms | ( | int | i | ) | [inline] |
average x-rms of reconstruction binned in 4 charge bins
Definition at line 363 of file SiPixelTemplate.h.
References Exception, i, and xrms_.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::xrmsc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins
Definition at line 447 of file SiPixelTemplate.h.
References Exception, i, and xrmsc2m_.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
void SiPixelTemplate::xsigma2 | ( | int | fxpix, |
int | lxpix, | ||
float | sxthr, | ||
float | xsum[BXSIZE], | ||
float | xsig2[BXSIZE] | ||
) |
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::xsize | ( | ) | [inline] |
pixel x-size (microns)
Definition at line 480 of file SiPixelTemplate.h.
References xsize_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), SiPixelTemplateSplit::PixelTempSplit(), and TrackClusterSplitter::splitCluster().
void SiPixelTemplate::xtemp | ( | int | fxbin, |
int | lxbin, | ||
float | xtemplate[41][BXSIZE] | ||
) |
Return interpolated y-template in single call
fxbin | - (input) index of first bin (0-40) to fill |
fxbin | - (input) index of last bin (0-40) to fill |
xtemplate | - (output) a 41x11 output buffer |
Definition at line 1751 of file SiPixelTemplate.cc.
References BXM1, BXM2, BXSIZE, Exception, i, and j.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit().
{ // Retrieve already interpolated quantities // Local variables int i, j; // Verify that input parameters are in valid range #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(fxbin < 0 || fxbin > 40) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xtemp called with fxbin = " << fxbin << std::endl; } #else assert(fxbin >= 0 && fxbin < 41); #endif #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(lxbin < 0 || lxbin > 40) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xtemp called with lxbin = " << lxbin << std::endl; } #else assert(lxbin >= 0 && lxbin < 41); #endif // Build the x-template, the central 25 bins are here in all cases for(i=0; i<9; ++i) { for(j=0; j<BXSIZE; ++j) { xtemplate[i+16][j]=xtemp_[i][j]; } } for(i=0; i<8; ++i) { xtemplate[i+8][BXM1] = 0.f; for(j=0; j<BXM1; ++j) { xtemplate[i+8][j]=xtemp_[i][j+1]; } } for(i=1; i<9; ++i) { xtemplate[i+24][0] = 0.f; for(j=0; j<BXM1; ++j) { xtemplate[i+24][j+1]=xtemp_[i][j]; } } // Add more bins if needed if(fxbin < 8) { for(i=0; i<8; ++i) { xtemplate[i][BXM2] = 0.f; xtemplate[i][BXM1] = 0.f; for(j=0; j<BXM2; ++j) { xtemplate[i][j]=xtemp_[i][j+2]; } } } if(lxbin > 32) { for(i=1; i<9; ++i) { xtemplate[i+32][0] = 0.f; xtemplate[i+32][1] = 0.f; for(j=0; j<BXM2; ++j) { xtemplate[i+32][j+2]=xtemp_[i][j]; } } } return; } // End xtemp
void SiPixelTemplate::xtemp3d | ( | int | i, |
int | j, | ||
std::vector< float > & | xtemplate | ||
) |
Return interpolated 3d x-template in single call
i,j | - (input) template indices |
xtemplate | - (output) a boost 3d array containing two sets of temlate indices and the combined pixel signals |
Definition at line 2105 of file SiPixelTemplate.cc.
References BXSIZE, i, j, and gen::k.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
void SiPixelTemplate::xtemp3d_int | ( | int | nxpix, |
int & | nxbins | ||
) |
Make interpolated 3d x-template (stored as class variables)
nxpix | - (input) number of pixels in cluster (needed to size template) |
nxbins | - (output) number of bins needed for each template projection |
Definition at line 2026 of file SiPixelTemplate.cc.
References BXM1, BXM3, BXSIZE, diffTreeTool::diff, Exception, i, j, and gen::k.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
{ // Retrieve already interpolated quantities // Local variables int i, j, k; int ioff0, ioffp, ioffm; // Verify that input parameters are in valid range #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(nxpix < 1 || nxpix >= BXM3) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::xtemp3d called with nxpix = " << nxpix << std::endl; } #else assert(nxpix > 0 && nxpix < BXM3); #endif // Calculate the size of the shift in pixels needed to span the entire cluster float diff = fabsf(nxpix - clslenx_)/2. + 1.f; int nshift = (int)diff; if((diff - nshift) > 0.5f) {++nshift;} // Calculate the number of bins needed to specify each hit range nxbins_ = 9 + 16*nshift; // Create a 2-d working template with the correct size temp2dx_.resize(boost::extents[nxbins_][BXSIZE]); // The 9 central bins are copied from the interpolated private store ioff0 = 8*nshift; for(i=0; i<9; ++i) { for(j=0; j<BXSIZE; ++j) { temp2dx_[i+ioff0][j]=xtemp_[i][j]; } } // Add the +- shifted templates for(k=1; k<=nshift; ++k) { ioffm=ioff0-k*8; for(i=0; i<8; ++i) { for(j=0; j<k; ++j) { temp2dx_[i+ioffm][BXM1-j] = 0.f; } for(j=0; j<BXSIZE-k; ++j) { temp2dx_[i+ioffm][j]=xtemp_[i][j+k]; } } ioffp=ioff0+k*8; for(i=1; i<9; ++i) { for(j=0; j<k; ++j) { temp2dx_[i+ioffp][j] = 0.f; } for(j=0; j<BXSIZE-k; ++j) { temp2dx_[i+ioffp][j+k]=xtemp_[i][j]; } } } nxbins = nxbins_; return; } // End xtemp3d_int
float SiPixelTemplate::xxratio | ( | ) | [inline] |
fractional distance in x between cotalpha templates
Definition at line 327 of file SiPixelTemplate.h.
References xxratio_.
float SiPixelTemplate::yavg | ( | int | i | ) | [inline] |
average y-bias of reconstruction binned in 4 charge bins
Definition at line 328 of file SiPixelTemplate.h.
References Exception, i, and yavg_.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::yavgc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins
Definition at line 412 of file SiPixelTemplate.h.
References Exception, i, and yavgc2m_.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::yflcorr | ( | int | binq, |
float | qfly | ||
) |
Return interpolated y-correction for input charge bin and qfly
binq | - (input) charge bin [0-3] |
qfly | - (input) (Q_f-Q_l)/(Q_f+Q_l) for this cluster |
Definition at line 1569 of file SiPixelTemplate.cc.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
{ // Interpolate using quantities already stored in the private variables // Local variables float qfl, qfl2, qfl3, qfl4, qfl5, dy; // Make sure that input is OK #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(binq < 0 || binq > 3) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yflcorr called with binq = " << binq << std::endl; } #else assert(binq >= 0 && binq < 4); #endif #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(fabs((double)qfly) > 1.) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::yflcorr called with qfly = " << qfly << std::endl; } #else assert(fabs((double)qfly) <= 1.); #endif // Define the maximum signal to allow before de-weighting a pixel qfl = qfly; if(qfl < -0.9f) {qfl = -0.9f;} if(qfl > 0.9f) {qfl = 0.9f;} // Interpolate between the two polynomials qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl; dy = (1.f-yratio_)*(yflparl_[binq][0]+yflparl_[binq][1]*qfl+yflparl_[binq][2]*qfl2+yflparl_[binq][3]*qfl3+yflparl_[binq][4]*qfl4+yflparl_[binq][5]*qfl5) + yratio_*(yflparh_[binq][0]+yflparh_[binq][1]*qfl+yflparh_[binq][2]*qfl2+yflparh_[binq][3]*qfl3+yflparh_[binq][4]*qfl4+yflparh_[binq][5]*qfl5); return dy; } // End yflcorr
float SiPixelTemplate::ygsig | ( | int | i | ) | [inline] |
average sigma_y from Gaussian fit binned in 4 charge bins
Definition at line 349 of file SiPixelTemplate.h.
float SiPixelTemplate::ygx0 | ( | int | i | ) | [inline] |
average y0 from Gaussian fit binned in 4 charge bins
Definition at line 342 of file SiPixelTemplate.h.
float SiPixelTemplate::yratio | ( | ) | [inline] |
fractional distance in y between cotbeta templates
Definition at line 325 of file SiPixelTemplate.h.
References yratio_.
float SiPixelTemplate::yrms | ( | int | i | ) | [inline] |
average y-rms of reconstruction binned in 4 charge bins
Definition at line 335 of file SiPixelTemplate.h.
References Exception, i, and yrms_.
Referenced by SiPixelTemplateReco::PixelTempReco2D().
float SiPixelTemplate::yrmsc2m | ( | int | i | ) | [inline] |
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins
Definition at line 419 of file SiPixelTemplate.h.
References Exception, i, and yrmsc2m_.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
void SiPixelTemplate::ysigma2 | ( | float | qpixel, |
int | index, | ||
float & | ysig2 | ||
) |
Return y error (squared) for an input signal and yindex Add large Q scaling for use in cluster splitting.
qpixel | - (input) pixel charge |
index | - (input) y-index index of pixel |
ysig2 | - (output) square error |
Definition at line 1395 of file SiPixelTemplate.cc.
References BHY, BYM2, ENDL, Exception, f, and LOGERROR.
{ // Interpolate using quantities already stored in the private variables // Local variables float sigi, sigi2, sigi3, sigi4, symax, qscale, err2; // Make sure that input is OK #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(index < 2 || index >= BYM2) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ysigma2 called with index = " << index << std::endl; } #else assert(index > 1 && index < BYM2); #endif // Define the maximum signal to use in the parameterization symax = symax_; if(symax_ > syparmax_) {symax = syparmax_;} // Evaluate pixel-by-pixel uncertainties (weights) for the templ analysis if(qpixel < symax) { sigi = qpixel; qscale = 1.f; } else { sigi = symax; qscale = qpixel/symax; } sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi; if(index <= BHY) { err2 = (1.f-yratio_)* (yparl_[0][0]+yparl_[0][1]*sigi+yparl_[0][2]*sigi2+yparl_[0][3]*sigi3+yparl_[0][4]*sigi4) + yratio_* (yparh_[0][0]+yparh_[0][1]*sigi+yparh_[0][2]*sigi2+yparh_[0][3]*sigi3+yparh_[0][4]*sigi4); } else { err2 = (1.f-yratio_)* (yparl_[1][0]+yparl_[1][1]*sigi+yparl_[1][2]*sigi2+yparl_[1][3]*sigi3+yparl_[1][4]*sigi4) + yratio_* (yparh_[1][0]+yparh_[1][1]*sigi+yparh_[1][2]*sigi2+yparh_[1][3]*sigi3+yparh_[1][4]*sigi4); } ysig2 =qscale*err2; if(ysig2 <= 0.f) {LOGERROR("SiPixelTemplate") << "neg y-error-squared, id = " << id_current_ << ", index = " << index_id_ << ", cot(alpha) = " << cota_current_ << ", cot(beta) = " << cotb_current_ << ", sigi = " << sigi << ENDL;} return; } // End ysigma2
void SiPixelTemplate::ysigma2 | ( | int | fypix, |
int | lypix, | ||
float | sythr, | ||
float | ysum[BYSIZE], | ||
float | ysig2[BYSIZE] | ||
) |
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelTemplateSplit::PixelTempSplit().
float SiPixelTemplate::ysize | ( | ) | [inline] |
pixel y-size (microns)
Definition at line 481 of file SiPixelTemplate.h.
References ysize_.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), SiPixelTemplateSplit::PixelTempSplit(), and TrackClusterSplitter::splitCluster().
void SiPixelTemplate::ytemp | ( | int | fybin, |
int | lybin, | ||
float | ytemplate[41][BYSIZE] | ||
) |
Return interpolated y-template in single call
fybin | - (input) index of first bin (0-40) to fill |
fybin | - (input) index of last bin (0-40) to fill |
ytemplate | - (output) a 41x25 output buffer |
Definition at line 1673 of file SiPixelTemplate.cc.
References BYM1, BYM2, BYSIZE, Exception, i, and j.
Referenced by SiPixelTemplateReco::PixelTempReco2D(), and SiPixelGaussianSmearingRecHitConverterAlgorithm::smearHit().
{ // Retrieve already interpolated quantities // Local variables int i, j; // Verify that input parameters are in valid range #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(fybin < 0 || fybin > 40) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ytemp called with fybin = " << fybin << std::endl; } #else assert(fybin >= 0 && fybin < 41); #endif #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(lybin < 0 || lybin > 40) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ytemp called with lybin = " << lybin << std::endl; } #else assert(lybin >= 0 && lybin < 41); #endif // Build the y-template, the central 25 bins are here in all cases for(i=0; i<9; ++i) { for(j=0; j<BYSIZE; ++j) { ytemplate[i+16][j]=ytemp_[i][j]; } } for(i=0; i<8; ++i) { ytemplate[i+8][BYM1] = 0.f; for(j=0; j<BYM1; ++j) { ytemplate[i+8][j]=ytemp_[i][j+1]; } } for(i=1; i<9; ++i) { ytemplate[i+24][0] = 0.f; for(j=0; j<BYM1; ++j) { ytemplate[i+24][j+1]=ytemp_[i][j]; } } // Add more bins if needed if(fybin < 8) { for(i=0; i<8; ++i) { ytemplate[i][BYM2] = 0.f; ytemplate[i][BYM1] = 0.f; for(j=0; j<BYM2; ++j) { ytemplate[i][j]=ytemp_[i][j+2]; } } } if(lybin > 32) { for(i=1; i<9; ++i) { ytemplate[i+32][0] = 0.f; ytemplate[i+32][1] = 0.f; for(j=0; j<BYM2; ++j) { ytemplate[i+32][j+2]=ytemp_[i][j]; } } } return; } // End ytemp
void SiPixelTemplate::ytemp3d | ( | int | i, |
int | j, | ||
std::vector< float > & | ytemplate | ||
) |
Return interpolated 3d y-template in single call
i,j | - (input) template indices |
ytemplate | - (output) a boost 3d array containing two sets of temlate indices and the combined pixel signals |
Definition at line 2002 of file SiPixelTemplate.cc.
References BYSIZE, i, j, and gen::k.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
void SiPixelTemplate::ytemp3d_int | ( | int | nypix, |
int & | nybins | ||
) |
Make interpolated 3d y-template (stored as class variables)
nypix | - (input) number of pixels in cluster (needed to size template) |
nybins | - (output) number of bins needed for each template projection |
Definition at line 1924 of file SiPixelTemplate.cc.
References BYM1, BYM3, BYSIZE, diffTreeTool::diff, Exception, i, j, and gen::k.
Referenced by SiPixelTemplateSplit::PixelTempSplit().
{ // Retrieve already interpolated quantities // Local variables int i, j, k; int ioff0, ioffp, ioffm; // Verify that input parameters are in valid range #ifndef SI_PIXEL_TEMPLATE_STANDALONE if(nypix < 1 || nypix >= BYM3) { throw cms::Exception("DataCorrupt") << "SiPixelTemplate::ytemp3d called with nypix = " << nypix << std::endl; } #else assert(nypix > 0 && nypix < BYM3); #endif // Calculate the size of the shift in pixels needed to span the entire cluster float diff = fabsf(nypix - clsleny_)/2. + 1.f; int nshift = (int)diff; if((diff - nshift) > 0.5f) {++nshift;} // Calculate the number of bins needed to specify each hit range nybins_ = 9 + 16*nshift; // Create a 2-d working template with the correct size temp2dy_.resize(boost::extents[nybins_][BYSIZE]); // The 9 central bins are copied from the interpolated private store ioff0 = 8*nshift; for(i=0; i<9; ++i) { for(j=0; j<BYSIZE; ++j) { temp2dy_[i+ioff0][j]=ytemp_[i][j]; } } // Add the +- shifted templates for(k=1; k<=nshift; ++k) { ioffm=ioff0-k*8; for(i=0; i<8; ++i) { for(j=0; j<k; ++j) { temp2dy_[i+ioffm][BYM1-j] = 0.f; } for(j=0; j<BYSIZE-k; ++j) { temp2dy_[i+ioffm][j]=ytemp_[i][j+k]; } } ioffp=ioff0+k*8; for(i=1; i<9; ++i) { for(j=0; j<k; ++j) { temp2dy_[i+ioffp][j] = 0.f; } for(j=0; j<BYSIZE-k; ++j) { temp2dy_[i+ioffp][j+k]=ytemp_[i][j]; } } } nybins = nybins_; return; } // End ytemp3d_int
float SiPixelTemplate::yxratio | ( | ) | [inline] |
fractional distance in y between cotalpha templates slices
Definition at line 326 of file SiPixelTemplate.h.
References yxratio_.
float SiPixelTemplate::zsize | ( | ) | [inline] |
pixel z-size or thickness (microns)
Definition at line 482 of file SiPixelTemplate.h.
References zsize_.
float SiPixelTemplate::abs_cotb_ [private] |
absolute value of cot beta
Definition at line 495 of file SiPixelTemplate.h.
float SiPixelTemplate::chi2xavg_[4] [private] |
average x chi^2 in 4 charge bins
Definition at line 548 of file SiPixelTemplate.h.
Referenced by chi2xavg().
float SiPixelTemplate::chi2xavgc2m_[4] [private] |
1st pass chi2 min search: average x-chisq for merged clusters
Definition at line 556 of file SiPixelTemplate.h.
Referenced by chi2xavgc2m().
float SiPixelTemplate::chi2xavgone_ [private] |
average x chi^2 for 1 pixel clusters
Definition at line 560 of file SiPixelTemplate.h.
Referenced by chi2xavgone().
float SiPixelTemplate::chi2xmin_[4] [private] |
minimum of x chi^2 in 4 charge bins
Definition at line 549 of file SiPixelTemplate.h.
Referenced by chi2xmin().
float SiPixelTemplate::chi2xminc2m_[4] [private] |
1st pass chi2 min search: minimum x-chisq for merged clusters
Definition at line 557 of file SiPixelTemplate.h.
Referenced by chi2xminc2m().
float SiPixelTemplate::chi2xminone_ [private] |
minimum of x chi^2 for 1 pixel clusters
Definition at line 561 of file SiPixelTemplate.h.
Referenced by chi2xminone().
float SiPixelTemplate::chi2yavg_[4] [private] |
average y chi^2 in 4 charge bins
Definition at line 546 of file SiPixelTemplate.h.
Referenced by chi2yavg().
float SiPixelTemplate::chi2yavgc2m_[4] [private] |
1st pass chi2 min search: average y-chisq for merged clusters
Definition at line 552 of file SiPixelTemplate.h.
Referenced by chi2yavgc2m().
float SiPixelTemplate::chi2yavgone_ [private] |
average y chi^2 for 1 pixel clusters
Definition at line 558 of file SiPixelTemplate.h.
Referenced by chi2yavgone().
float SiPixelTemplate::chi2ymin_[4] [private] |
minimum of y chi^2 in 4 charge bins
Definition at line 547 of file SiPixelTemplate.h.
Referenced by chi2ymin().
float SiPixelTemplate::chi2yminc2m_[4] [private] |
1st pass chi2 min search: minimum y-chisq for merged clusters
Definition at line 553 of file SiPixelTemplate.h.
Referenced by chi2yminc2m().
float SiPixelTemplate::chi2yminone_ [private] |
minimum of y chi^2 for 1 pixel clusters
Definition at line 559 of file SiPixelTemplate.h.
Referenced by chi2yminone().
float SiPixelTemplate::clslenx_ [private] |
x-cluster length of smaller interpolated template in pixels
Definition at line 519 of file SiPixelTemplate.h.
Referenced by clslenx().
float SiPixelTemplate::clsleny_ [private] |
y-cluster length of smaller interpolated template in pixels
Definition at line 518 of file SiPixelTemplate.h.
Referenced by clsleny().
float SiPixelTemplate::cota_current_ [private] |
current cot alpha
Definition at line 493 of file SiPixelTemplate.h.
Referenced by SiPixelTemplate().
float SiPixelTemplate::cotb_current_ [private] |
float SiPixelTemplate::dxone_ [private] |
mean offset/correction for one pixel x-clusters
Definition at line 513 of file SiPixelTemplate.h.
Referenced by dxone().
float SiPixelTemplate::dxtwo_ [private] |
mean offset/correction for one double-pixel x-clusters
Definition at line 515 of file SiPixelTemplate.h.
Referenced by dxtwo().
float SiPixelTemplate::dyone_ [private] |
mean offset/correction for one pixel y-clusters
Definition at line 507 of file SiPixelTemplate.h.
Referenced by dyone().
float SiPixelTemplate::dytwo_ [private] |
mean offset/correction for one double-pixel y-clusters
Definition at line 509 of file SiPixelTemplate.h.
Referenced by dytwo().
int SiPixelTemplate::id_current_ [private] |
int SiPixelTemplate::index_id_ [private] |
float SiPixelTemplate::kappavav2_ [private] |
kappa parameter for 2-cluster Vavilov distribution
Definition at line 568 of file SiPixelTemplate.h.
Referenced by kappavav2().
float SiPixelTemplate::kappavav_ [private] |
kappa parameter for Vavilov distribution
Definition at line 565 of file SiPixelTemplate.h.
Referenced by kappavav().
float SiPixelTemplate::lorxwidth_ [private] |
float SiPixelTemplate::lorywidth_ [private] |
Lorentz y-width (sign corrected for fpix frame)
Definition at line 569 of file SiPixelTemplate.h.
Referenced by lorywidth().
float SiPixelTemplate::mpvvav2_ [private] |
most probable charge in 2-cluster Vavilov distribution (not actually for larger kappa)
Definition at line 566 of file SiPixelTemplate.h.
Referenced by mpvvav2().
float SiPixelTemplate::mpvvav_ [private] |
most probable charge in Vavilov distribution (not actually for larger kappa)
Definition at line 563 of file SiPixelTemplate.h.
Referenced by mpvvav().
float SiPixelTemplate::nxbins_ [private] |
number of bins in each dimension of the x-splitting template
Definition at line 576 of file SiPixelTemplate.h.
float SiPixelTemplate::nybins_ [private] |
number of bins in each dimension of the y-splitting template
Definition at line 575 of file SiPixelTemplate.h.
float SiPixelTemplate::pixmax_ [private] |
float SiPixelTemplate::qavg_ [private] |
average cluster charge for this set of track angles
Definition at line 501 of file SiPixelTemplate.h.
Referenced by qavg().
float SiPixelTemplate::qavg_avg_ [private] |
average of cluster charge less than qavg
Definition at line 574 of file SiPixelTemplate.h.
float SiPixelTemplate::qmin2_ [private] |
tighter minimum cluster charge for valid hit (keeps 99.8% of simulated hits)
Definition at line 562 of file SiPixelTemplate.h.
Referenced by qmin().
float SiPixelTemplate::qmin_ [private] |
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
Definition at line 517 of file SiPixelTemplate.h.
Referenced by qmin().
float SiPixelTemplate::qscale_ [private] |
float SiPixelTemplate::s50_ [private] |
1/2 of the pixel threshold signal in adc units
Definition at line 504 of file SiPixelTemplate.h.
Referenced by s50().
float SiPixelTemplate::sigmavav2_ [private] |
"sigma" scale fctor for 2-cluster Vavilov distribution
Definition at line 567 of file SiPixelTemplate.h.
Referenced by sigmavav2().
float SiPixelTemplate::sigmavav_ [private] |
"sigma" scale fctor for Vavilov distribution
Definition at line 564 of file SiPixelTemplate.h.
Referenced by sigmavav().
bool SiPixelTemplate::success_ [private] |
true if cotalpha, cotbeta are inside of the acceptance (dynamically loaded)
Definition at line 496 of file SiPixelTemplate.h.
float SiPixelTemplate::sxmax_ [private] |
average pixel signal for x-projection of cluster
Definition at line 511 of file SiPixelTemplate.h.
Referenced by sxmax().
float SiPixelTemplate::sxone_ [private] |
rms for one pixel x-clusters
Definition at line 514 of file SiPixelTemplate.h.
Referenced by sxone().
float SiPixelTemplate::sxparmax_ [private] |
maximum pixel signal for parameterization of x uncertainties
Definition at line 512 of file SiPixelTemplate.h.
float SiPixelTemplate::sxtwo_ [private] |
rms for one double-pixel x-clusters
Definition at line 516 of file SiPixelTemplate.h.
Referenced by sxtwo().
float SiPixelTemplate::symax_ [private] |
average pixel signal for y-projection of cluster
Definition at line 505 of file SiPixelTemplate.h.
Referenced by symax().
float SiPixelTemplate::syone_ [private] |
rms for one pixel y-clusters
Definition at line 508 of file SiPixelTemplate.h.
Referenced by syone().
float SiPixelTemplate::syparmax_ [private] |
maximum pixel signal for parameterization of y uncertainties
Definition at line 506 of file SiPixelTemplate.h.
float SiPixelTemplate::sytwo_ [private] |
rms for one double-pixel y-clusters
Definition at line 510 of file SiPixelTemplate.h.
Referenced by sytwo().
boost::multi_array<float,2> SiPixelTemplate::temp2dx_ [private] |
2d-primitive for spltting 3-d template
Definition at line 578 of file SiPixelTemplate.h.
boost::multi_array<float,2> SiPixelTemplate::temp2dy_ [private] |
2d-primitive for spltting 3-d template
Definition at line 577 of file SiPixelTemplate.h.
std::vector< SiPixelTemplateStore > SiPixelTemplate::thePixelTemp_ [private] |
Definition at line 583 of file SiPixelTemplate.h.
float SiPixelTemplate::xavg_[4] [private] |
average x-bias of reconstruction binned in 4 charge bins
Definition at line 538 of file SiPixelTemplate.h.
Referenced by xavg().
float SiPixelTemplate::xavgc2m_[4] [private] |
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins
Definition at line 554 of file SiPixelTemplate.h.
Referenced by xavgc2m().
float SiPixelTemplate::xflparhh_[4][6] [private] |
Aqfl-parameterized x-correction in 4 charge bins for larger cotbeta, cotalpha.
Definition at line 545 of file SiPixelTemplate.h.
float SiPixelTemplate::xflparhl_[4][6] [private] |
Aqfl-parameterized x-correction in 4 charge bins for larger cotbeta, smaller cotalpha.
Definition at line 544 of file SiPixelTemplate.h.
float SiPixelTemplate::xflparlh_[4][6] [private] |
Aqfl-parameterized x-correction in 4 charge bins for smaller cotbeta, larger cotalpha.
Definition at line 543 of file SiPixelTemplate.h.
float SiPixelTemplate::xflparll_[4][6] [private] |
Aqfl-parameterized x-correction in 4 charge bins for smaller cotbeta, cotalpha.
Definition at line 542 of file SiPixelTemplate.h.
float SiPixelTemplate::xgsig_[4] [private] |
sigma from Gaussian fit binned in 4 charge bins
Definition at line 541 of file SiPixelTemplate.h.
Referenced by xgsig().
float SiPixelTemplate::xgx0_[4] [private] |
average x0 from Gaussian fit binned in 4 charge bins
Definition at line 540 of file SiPixelTemplate.h.
Referenced by xgx0().
float SiPixelTemplate::xpar0_[2][5] [private] |
projected x-pixel uncertainty parameterization for central cotalpha
Definition at line 528 of file SiPixelTemplate.h.
float SiPixelTemplate::xparh_[2][5] [private] |
projected x-pixel uncertainty parameterization for larger cotalpha
Definition at line 530 of file SiPixelTemplate.h.
float SiPixelTemplate::xparhy0_[2][5] [private] |
projected x-pixel uncertainty parameterization for larger cotbeta (central alpha)
Definition at line 524 of file SiPixelTemplate.h.
float SiPixelTemplate::xparl_[2][5] [private] |
projected x-pixel uncertainty parameterization for smaller cotalpha
Definition at line 529 of file SiPixelTemplate.h.
float SiPixelTemplate::xparly0_[2][5] [private] |
projected x-pixel uncertainty parameterization for smaller cotbeta (central alpha)
Definition at line 523 of file SiPixelTemplate.h.
float SiPixelTemplate::xrms_[4] [private] |
average x-rms of reconstruction binned in 4 charge bins
Definition at line 539 of file SiPixelTemplate.h.
Referenced by xrms().
float SiPixelTemplate::xrmsc2m_[4] [private] |
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins
Definition at line 555 of file SiPixelTemplate.h.
Referenced by xrmsc2m().
float SiPixelTemplate::xsize_ [private] |
float SiPixelTemplate::xtemp_[9][BXSIZE] [private] |
templates for x-reconstruction (binned over 5 central pixels)
Definition at line 531 of file SiPixelTemplate.h.
float SiPixelTemplate::xxratio_ [private] |
fractional distance in x between cotalpha templates
Definition at line 527 of file SiPixelTemplate.h.
Referenced by xxratio().
float SiPixelTemplate::yavg_[4] [private] |
average y-bias of reconstruction binned in 4 charge bins
Definition at line 532 of file SiPixelTemplate.h.
Referenced by yavg().
float SiPixelTemplate::yavgc2m_[4] [private] |
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins
Definition at line 550 of file SiPixelTemplate.h.
Referenced by yavgc2m().
float SiPixelTemplate::yflparh_[4][6] [private] |
Aqfl-parameterized y-correction in 4 charge bins for larger cotbeta.
Definition at line 537 of file SiPixelTemplate.h.
float SiPixelTemplate::yflparl_[4][6] [private] |
Aqfl-parameterized y-correction in 4 charge bins for smaller cotbeta.
Definition at line 536 of file SiPixelTemplate.h.
float SiPixelTemplate::ygsig_[4] [private] |
average sigma_y from Gaussian fit binned in 4 charge bins
Definition at line 535 of file SiPixelTemplate.h.
Referenced by ygsig().
float SiPixelTemplate::ygx0_[4] [private] |
average y0 from Gaussian fit binned in 4 charge bins
Definition at line 534 of file SiPixelTemplate.h.
Referenced by ygx0().
float SiPixelTemplate::yparh_[2][5] [private] |
projected y-pixel uncertainty parameterization for larger cotbeta
Definition at line 522 of file SiPixelTemplate.h.
float SiPixelTemplate::yparl_[2][5] [private] |
projected y-pixel uncertainty parameterization for smaller cotbeta
Definition at line 521 of file SiPixelTemplate.h.
float SiPixelTemplate::yratio_ [private] |
fractional distance in y between cotbeta templates
Definition at line 520 of file SiPixelTemplate.h.
Referenced by yratio().
float SiPixelTemplate::yrms_[4] [private] |
average y-rms of reconstruction binned in 4 charge bins
Definition at line 533 of file SiPixelTemplate.h.
Referenced by yrms().
float SiPixelTemplate::yrmsc2m_[4] [private] |
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins
Definition at line 551 of file SiPixelTemplate.h.
Referenced by yrmsc2m().
float SiPixelTemplate::ysize_ [private] |
float SiPixelTemplate::ytemp_[9][BYSIZE] [private] |
templates for y-reconstruction (binned over 5 central pixels)
Definition at line 525 of file SiPixelTemplate.h.
float SiPixelTemplate::yxratio_ [private] |
fractional distance in y between x-slices of cotalpha templates
Definition at line 526 of file SiPixelTemplate.h.
Referenced by yxratio().
float SiPixelTemplate::zsize_ [private] |