90 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 97 #include "boost/multi_array.hpp" 106 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 111 #define LOGERROR(x) LogError(x) 112 #define LOGINFO(x) LogInfo(x) 113 #define LOGWARNING(x) LogWarning(x) 120 #define LOGERROR(x) std::cout << x << ": " 121 #define LOGINFO(x) std::cout << x << ": " 122 #define ENDL std::endl 139 const int code_version={17};
144 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 146 int nzeros = 4-tempfile.length();
151 tempfile = dir +
"template_summary_zp" + tempfile +
".out";
157 std::ostringstream tout;
158 tout <<
"template_summary_zp" << std::setw(4) << std::setfill(
'0') << std::right << filenum <<
".out" << std::ends;
159 tempfile = tout.str();
165 std::ifstream
in_file(tempfile);
166 if(in_file.is_open() && in_file.good()) {
175 for (i=0; (c=in_file.get()) !=
'\n'; ++
i) {
180 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.
head.
title <<
ENDL;
188 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0A, no template load" <<
ENDL;
return false;}
195 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0B, no template load" 196 <<
ENDL;
return false;}
202 theCurrentTemp.
head.
fbin[1] = 1.00f;
203 theCurrentTemp.
head.
fbin[2] = 0.85f;
207 <<
", NTy = " << theCurrentTemp.
head.
NTy <<
", NTyx = " << theCurrentTemp.
head.
NTyx<<
", NTxx = " << theCurrentTemp.
head.
NTxx <<
", Dtype = " << theCurrentTemp.
head.
Dtype 208 <<
", Bias voltage " << theCurrentTemp.
head.
Vbias <<
", temperature " 210 <<
", 1/2 multi dcol threshold " << theCurrentTemp.
head.
s50 <<
", 1/2 single dcol threshold " << theCurrentTemp.
head.
ss50 213 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.
head.
fbin[0] <<
", " << theCurrentTemp.
head.
fbin[1]
214 <<
", " << theCurrentTemp.
head.
fbin[2]
220 #ifdef SI_PIXEL_TEMPLATE_USE_BOOST 228 theCurrentTemp.
enty.resize(boost::extents[theCurrentTemp.
head.
NTy]);
236 for (i=0; i < theCurrentTemp.
head.
NTy; ++
i) {
241 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 1, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
256 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 2, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
261 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 3, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
264 if(theCurrentTemp.
enty[i].
qmin <= 0.) {
LOGERROR(
"SiPixelTemplate") <<
"Error in template ID " << theCurrentTemp.
head.
ID <<
" qmin = " << theCurrentTemp.
enty[
i].
qmin <<
", run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
267 for (j=0; j<2; ++j) {
272 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 4, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
276 for (j=0; j<9; ++j) {
280 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 5, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
283 for (j=0; j<2; ++j) {
288 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 6, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
293 for (j=0; j<9; ++j) {
297 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 7, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
301 for (j=0; j<4; ++j) {
305 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 8, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
308 for (j=0; j<4; ++j) {
313 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 9, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
316 for (j=0; j<4; ++j) {
320 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 10, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
323 for (j=0; j<4; ++j) {
328 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 11, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
331 for (j=0; j<4; ++j) {
335 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 12, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
338 for (j=0; j<4; ++j) {
342 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 13, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
345 for (j=0; j<4; ++j) {
349 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
352 for (j=0; j<4; ++j) {
356 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14a, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
359 for (j=0; j<4; ++j) {
363 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14b, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
369 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 15, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
375 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 16, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
381 for (k=0; k < theCurrentTemp.
head.
NTyx; ++
k) {
383 for (i=0; i < theCurrentTemp.
head.
NTxx; ++
i) {
388 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 17, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
396 theCurrentTemp.
entx[
k][
i].
beta =
static_cast<float>(atan2((
double)theCurrentTemp.
entx[k][i].
costrk[2], (
double)theCurrentTemp.
entx[k][i].
costrk[1]));
403 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 18, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
409 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 19, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
411 for (j=0; j<2; ++j) {
416 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 20, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
419 for (j=0; j<9; ++j) {
423 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 21, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
426 for (j=0; j<2; ++j) {
432 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 22, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
436 for (j=0; j<9; ++j) {
440 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 23, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
444 for (j=0; j<4; ++j) {
448 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 24, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
451 for (j=0; j<4; ++j) {
456 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 25, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
459 for (j=0; j<4; ++j) {
463 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 26, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
466 for (j=0; j<4; ++j) {
471 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 27, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
474 for (j=0; j<4; ++j) {
478 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 28, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
481 for (j=0; j<4; ++j) {
485 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 29, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
488 for (j=0; j<4; ++j) {
492 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
495 for (j=0; j<4; ++j) {
499 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30a, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
502 for (j=0; j<4; ++j) {
506 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30b, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
512 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 31, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
518 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 32, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
528 pixelTemp.push_back(theCurrentTemp);
537 LOGERROR(
"SiPixelTemplate") <<
"Error opening File" << tempfile <<
ENDL;
545 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 560 const int code_version={17};
563 auto db(dbobject.
reader());
567 auto tmpPtr = std::make_unique<SiPixelTemplateStore>();
568 auto & theCurrentTemp = *tmpPtr;
571 for(
int m=0;
m<db.numOfTempl(); ++
m) {
576 for (i=0; i<20; ++
i) {
577 temp.
f = db.sVector()[db.index()];
578 theCurrentTemp.head.title[4*
i] = temp.
c[0];
579 theCurrentTemp.head.title[4*i+1] = temp.
c[1];
580 theCurrentTemp.head.title[4*i+2] = temp.
c[2];
581 theCurrentTemp.head.title[4*i+3] = temp.
c[3];
582 db.incrementIndex(1);
584 theCurrentTemp.head.title[79] =
'\0';
585 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.head.title <<
ENDL;
589 db >> theCurrentTemp.head.ID >> theCurrentTemp.head.templ_version >> theCurrentTemp.head.Bfield >> theCurrentTemp.head.NTy >> theCurrentTemp.head.NTyx >> theCurrentTemp.head.NTxx
590 >> theCurrentTemp.head.Dtype >> theCurrentTemp.head.Vbias >> theCurrentTemp.head.temperature >> theCurrentTemp.head.fluence >> theCurrentTemp.head.qscale
591 >> theCurrentTemp.head.s50 >> theCurrentTemp.head.lorywidth >> theCurrentTemp.head.lorxwidth >> theCurrentTemp.head.ysize >> theCurrentTemp.head.xsize >> theCurrentTemp.head.zsize;
593 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0A, no template load" <<
ENDL;
return false;}
595 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.head.title
596 <<
" code version = "<<code_version
597 <<
" object version "<<theCurrentTemp.head.templ_version
600 if(theCurrentTemp.head.templ_version > 17) {
601 db >> theCurrentTemp.head.ss50 >> theCurrentTemp.head.lorybias >> theCurrentTemp.head.lorxbias >> theCurrentTemp.head.fbin[0] >> theCurrentTemp.head.fbin[1] >> theCurrentTemp.head.fbin[2];
603 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0B, no template load" 604 <<
ENDL;
return false;}
606 theCurrentTemp.head.ss50 = theCurrentTemp.head.s50;
607 theCurrentTemp.head.lorybias = theCurrentTemp.head.lorywidth/2.f;
608 theCurrentTemp.head.lorxbias = theCurrentTemp.head.lorxwidth/2.f;
609 theCurrentTemp.head.fbin[0] = 1.50f;
610 theCurrentTemp.head.fbin[1] = 1.00f;
611 theCurrentTemp.head.fbin[2] = 0.85f;
617 <<
"Template ID = " << theCurrentTemp.head.ID <<
", Template Version " 618 << theCurrentTemp.head.templ_version <<
", Bfield = " 619 << theCurrentTemp.head.Bfield<<
", NTy = " << theCurrentTemp.head.NTy <<
", NTyx = " 620 << theCurrentTemp.head.NTyx<<
", NTxx = " << theCurrentTemp.head.NTxx <<
", Dtype = " 621 << theCurrentTemp.head.Dtype<<
", Bias voltage " << theCurrentTemp.head.Vbias <<
", temperature " 622 << theCurrentTemp.head.temperature <<
", fluence " << theCurrentTemp.head.fluence
623 <<
", Q-scaling factor " << theCurrentTemp.head.qscale
624 <<
", 1/2 multi dcol threshold " << theCurrentTemp.head.s50 <<
", 1/2 single dcol threshold " 625 << theCurrentTemp.head.ss50<<
", y Lorentz Width " << theCurrentTemp.head.lorywidth
626 <<
", y Lorentz Bias " << theCurrentTemp.head.lorybias
627 <<
", x Lorentz width " << theCurrentTemp.head.lorxwidth
628 <<
", x Lorentz Bias " << theCurrentTemp.head.lorxbias
629 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.head.fbin[0]
630 <<
", " << theCurrentTemp.head.fbin[1]
631 <<
", " << theCurrentTemp.head.fbin[2]
632 <<
", pixel x-size " << theCurrentTemp.head.xsize
633 <<
", y-size " << theCurrentTemp.head.ysize <<
", zsize " << theCurrentTemp.head.zsize <<
ENDL;
635 if(theCurrentTemp.head.templ_version < code_version) {
636 LOGINFO(
"SiPixelTemplate") <<
"code expects version "<< code_version <<
" finds " 637 << theCurrentTemp.head.templ_version <<
", load anyway " <<
ENDL;
642 #ifdef SI_PIXEL_TEMPLATE_USE_BOOST 645 theCurrentTemp.cotbetaY =
new float[theCurrentTemp.head.NTy];
646 theCurrentTemp.cotbetaX =
new float[theCurrentTemp.head.NTyx];
647 theCurrentTemp.cotalphaX =
new float[theCurrentTemp.head.NTxx];
648 theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]);
649 theCurrentTemp.entx.resize(boost::extents[theCurrentTemp.head.NTyx][theCurrentTemp.head.NTxx]);
655 for (i=0; i < theCurrentTemp.head.NTy; ++
i) {
657 db >> theCurrentTemp.enty[
i].runnum >> theCurrentTemp.enty[
i].costrk[0]
658 >> theCurrentTemp.enty[
i].costrk[1] >> theCurrentTemp.enty[
i].costrk[2];
660 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 1, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
664 theCurrentTemp.enty[
i].alpha =
static_cast<float>(atan2((
double)theCurrentTemp.enty[i].costrk[2], (
double)theCurrentTemp.enty[i].costrk[0]));
666 theCurrentTemp.enty[
i].cotalpha = theCurrentTemp.enty[
i].costrk[0]/theCurrentTemp.enty[
i].costrk[2];
668 theCurrentTemp.enty[
i].beta =
static_cast<float>(atan2((
double)theCurrentTemp.enty[i].costrk[2], (
double)theCurrentTemp.enty[i].costrk[1]));
670 theCurrentTemp.enty[
i].cotbeta = theCurrentTemp.enty[
i].costrk[1]/theCurrentTemp.enty[
i].costrk[2];
672 db >> theCurrentTemp.enty[
i].qavg >> theCurrentTemp.enty[
i].pixmax >> theCurrentTemp.enty[
i].symax >> theCurrentTemp.enty[
i].dyone
673 >> theCurrentTemp.enty[
i].syone >> theCurrentTemp.enty[
i].sxmax >> theCurrentTemp.enty[
i].dxone >> theCurrentTemp.enty[
i].sxone;
675 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 2, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
677 db >> theCurrentTemp.enty[
i].dytwo >> theCurrentTemp.enty[
i].sytwo >> theCurrentTemp.enty[
i].dxtwo
678 >> theCurrentTemp.enty[
i].sxtwo >> theCurrentTemp.enty[
i].qmin >> theCurrentTemp.enty[
i].clsleny >> theCurrentTemp.enty[
i].clslenx;
681 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 3, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
683 if(theCurrentTemp.enty[i].qmin <= 0.) {
LOGERROR(
"SiPixelTemplate") <<
"Error in template ID " << theCurrentTemp.head.ID <<
" qmin = " << theCurrentTemp.enty[
i].qmin <<
", run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
685 for (j=0; j<2; ++j) {
687 db >> theCurrentTemp.enty[
i].ypar[j][0] >> theCurrentTemp.enty[
i].ypar[j][1]
688 >> theCurrentTemp.enty[
i].ypar[j][2] >> theCurrentTemp.enty[
i].ypar[j][3] >> theCurrentTemp.enty[
i].ypar[j][4];
690 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 4, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
694 for (j=0; j<9; ++j) {
696 for (k=0; k<
TYSIZE; ++
k) {db >> theCurrentTemp.enty[
i].ytemp[j][
k];}
698 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 5, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
701 for (j=0; j<2; ++j) {
703 db >> theCurrentTemp.enty[
i].xpar[j][0] >> theCurrentTemp.enty[
i].xpar[j][1]
704 >> theCurrentTemp.enty[
i].xpar[j][2] >> theCurrentTemp.enty[
i].xpar[j][3] >> theCurrentTemp.enty[
i].xpar[j][4];
706 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 6, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
711 for (j=0; j<9; ++j) {
713 for (k=0; k<
TXSIZE; ++
k) {db >> theCurrentTemp.enty[
i].xtemp[j][
k]; qavg_avg += theCurrentTemp.enty[
i].xtemp[j][
k];}
715 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 7, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
717 theCurrentTemp.enty[
i].qavg_avg = qavg_avg/9.;
719 for (j=0; j<4; ++j) {
721 db >> theCurrentTemp.enty[
i].yavg[j] >> theCurrentTemp.enty[
i].yrms[j] >> theCurrentTemp.enty[
i].ygx0[j] >> theCurrentTemp.enty[
i].ygsig[j];
723 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 8, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
726 for (j=0; j<4; ++j) {
728 db >> theCurrentTemp.enty[
i].yflpar[j][0] >> theCurrentTemp.enty[
i].yflpar[j][1] >> theCurrentTemp.enty[
i].yflpar[j][2]
729 >> theCurrentTemp.enty[
i].yflpar[j][3] >> theCurrentTemp.enty[
i].yflpar[j][4] >> theCurrentTemp.enty[
i].yflpar[j][5];
731 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 9, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
734 for (j=0; j<4; ++j) {
736 db >> theCurrentTemp.enty[
i].xavg[j] >> theCurrentTemp.enty[
i].xrms[j] >> theCurrentTemp.enty[
i].xgx0[j] >> theCurrentTemp.enty[
i].xgsig[j];
738 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 10, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
741 for (j=0; j<4; ++j) {
743 db >> theCurrentTemp.enty[
i].xflpar[j][0] >> theCurrentTemp.enty[
i].xflpar[j][1] >> theCurrentTemp.enty[
i].xflpar[j][2]
744 >> theCurrentTemp.enty[
i].xflpar[j][3] >> theCurrentTemp.enty[
i].xflpar[j][4] >> theCurrentTemp.enty[
i].xflpar[j][5];
746 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 11, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
749 for (j=0; j<4; ++j) {
751 db >> theCurrentTemp.enty[
i].chi2yavg[j] >> theCurrentTemp.enty[
i].chi2ymin[j] >> theCurrentTemp.enty[
i].chi2xavg[j] >> theCurrentTemp.enty[
i].chi2xmin[j];
753 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 12, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
756 for (j=0; j<4; ++j) {
758 db >> theCurrentTemp.enty[
i].yavgc2m[j] >> theCurrentTemp.enty[
i].yrmsc2m[j] >> theCurrentTemp.enty[
i].chi2yavgc2m[j] >> theCurrentTemp.enty[
i].chi2yminc2m[j];
760 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 13, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
763 for (j=0; j<4; ++j) {
765 db >> theCurrentTemp.enty[
i].xavgc2m[j] >> theCurrentTemp.enty[
i].xrmsc2m[j] >> theCurrentTemp.enty[
i].chi2xavgc2m[j] >> theCurrentTemp.enty[
i].chi2xminc2m[j];
767 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
770 for (j=0; j<4; ++j) {
772 db >> theCurrentTemp.enty[
i].yavggen[j] >> theCurrentTemp.enty[
i].yrmsgen[j] >> theCurrentTemp.enty[
i].ygx0gen[j] >> theCurrentTemp.enty[
i].ygsiggen[j];
774 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14a, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
777 for (j=0; j<4; ++j) {
779 db >> theCurrentTemp.enty[
i].xavggen[j] >> theCurrentTemp.enty[
i].xrmsgen[j] >> theCurrentTemp.enty[
i].xgx0gen[j] >> theCurrentTemp.enty[
i].xgsiggen[j];
781 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14b, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
785 db >> theCurrentTemp.enty[
i].chi2yavgone >> theCurrentTemp.enty[
i].chi2yminone >> theCurrentTemp.enty[
i].chi2xavgone >> theCurrentTemp.enty[
i].chi2xminone >> theCurrentTemp.enty[
i].qmin2
786 >> theCurrentTemp.enty[
i].mpvvav >> theCurrentTemp.enty[
i].sigmavav >> theCurrentTemp.enty[
i].kappavav >> theCurrentTemp.enty[
i].r_qMeas_qTrue >> theCurrentTemp.enty[
i].spare[0];
788 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 15, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
790 db >> theCurrentTemp.enty[
i].mpvvav2 >> theCurrentTemp.enty[
i].sigmavav2 >> theCurrentTemp.enty[
i].kappavav2 >> theCurrentTemp.enty[
i].qbfrac[0] >> theCurrentTemp.enty[
i].qbfrac[1]
791 >> theCurrentTemp.enty[
i].qbfrac[2] >> theCurrentTemp.enty[
i].fracyone >> theCurrentTemp.enty[
i].fracxone >> theCurrentTemp.enty[
i].fracytwo >> theCurrentTemp.enty[
i].fracxtwo;
794 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 16, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
800 for (k=0; k < theCurrentTemp.head.NTyx; ++
k) {
802 for (i=0; i < theCurrentTemp.head.NTxx; ++
i) {
804 db >> theCurrentTemp.entx[
k][
i].runnum >> theCurrentTemp.entx[
k][
i].costrk[0]
805 >> theCurrentTemp.entx[
k][
i].costrk[1] >> theCurrentTemp.entx[
k][
i].costrk[2];
807 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 17, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
811 theCurrentTemp.entx[
k][
i].alpha =
static_cast<float>(atan2((
double)theCurrentTemp.entx[k][i].costrk[2], (
double)theCurrentTemp.entx[k][i].costrk[0]));
813 theCurrentTemp.entx[
k][
i].cotalpha = theCurrentTemp.entx[
k][
i].costrk[0]/theCurrentTemp.entx[
k][
i].costrk[2];
815 theCurrentTemp.entx[
k][
i].beta =
static_cast<float>(atan2((
double)theCurrentTemp.entx[k][i].costrk[2], (
double)theCurrentTemp.entx[k][i].costrk[1]));
817 theCurrentTemp.entx[
k][
i].cotbeta = theCurrentTemp.entx[
k][
i].costrk[1]/theCurrentTemp.entx[
k][
i].costrk[2];
819 db >> theCurrentTemp.entx[
k][
i].qavg >> theCurrentTemp.entx[
k][
i].pixmax >> theCurrentTemp.entx[
k][
i].symax >> theCurrentTemp.entx[
k][
i].dyone
820 >> theCurrentTemp.entx[
k][
i].syone >> theCurrentTemp.entx[
k][
i].sxmax >> theCurrentTemp.entx[
k][
i].dxone >> theCurrentTemp.entx[
k][
i].sxone;
822 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 18, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
824 db >> theCurrentTemp.entx[
k][
i].dytwo >> theCurrentTemp.entx[
k][
i].sytwo >> theCurrentTemp.entx[
k][
i].dxtwo
825 >> theCurrentTemp.entx[
k][
i].sxtwo >> theCurrentTemp.entx[
k][
i].qmin >> theCurrentTemp.entx[
k][
i].clsleny >> theCurrentTemp.entx[
k][
i].clslenx;
828 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 19, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
830 for (j=0; j<2; ++j) {
832 db >> theCurrentTemp.entx[
k][
i].ypar[j][0] >> theCurrentTemp.entx[
k][
i].ypar[j][1]
833 >> theCurrentTemp.entx[
k][
i].ypar[j][2] >> theCurrentTemp.entx[
k][
i].ypar[j][3] >> theCurrentTemp.entx[
k][
i].ypar[j][4];
835 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 20, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
838 for (j=0; j<9; ++j) {
840 for (l=0; l<
TYSIZE; ++
l) {db >> theCurrentTemp.entx[
k][
i].ytemp[j][
l];}
842 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 21, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
847 for (j=0; j<2; ++j) {
849 db >> theCurrentTemp.entx[
k][
i].xpar[j][0] >> theCurrentTemp.entx[
k][
i].xpar[j][1]
850 >> theCurrentTemp.entx[
k][
i].xpar[j][2] >> theCurrentTemp.entx[
k][
i].xpar[j][3] >> theCurrentTemp.entx[
k][
i].xpar[j][4];
853 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 22, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
857 for (j=0; j<9; ++j) {
859 for (l=0; l<
TXSIZE; ++
l) {db >> theCurrentTemp.entx[
k][
i].xtemp[j][
l]; qavg_avg += theCurrentTemp.entx[
k][
i].xtemp[j][
l];}
861 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 23, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
863 theCurrentTemp.entx[
k][
i].qavg_avg = qavg_avg/9.;
865 for (j=0; j<4; ++j) {
867 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];
869 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 24, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
872 for (j=0; j<4; ++j) {
874 db >> theCurrentTemp.entx[
k][
i].yflpar[j][0] >> theCurrentTemp.entx[
k][
i].yflpar[j][1] >> theCurrentTemp.entx[
k][
i].yflpar[j][2]
875 >> theCurrentTemp.entx[
k][
i].yflpar[j][3] >> theCurrentTemp.entx[
k][
i].yflpar[j][4] >> theCurrentTemp.entx[
k][
i].yflpar[j][5];
877 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 25, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
880 for (j=0; j<4; ++j) {
882 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];
884 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 26, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
887 for (j=0; j<4; ++j) {
889 db >> theCurrentTemp.entx[
k][
i].xflpar[j][0] >> theCurrentTemp.entx[
k][
i].xflpar[j][1] >> theCurrentTemp.entx[
k][
i].xflpar[j][2]
890 >> theCurrentTemp.entx[
k][
i].xflpar[j][3] >> theCurrentTemp.entx[
k][
i].xflpar[j][4] >> theCurrentTemp.entx[
k][
i].xflpar[j][5];
892 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 27, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
895 for (j=0; j<4; ++j) {
897 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];
899 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 28, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
902 for (j=0; j<4; ++j) {
904 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];
906 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 29, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
909 for (j=0; j<4; ++j) {
911 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];
913 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
916 for (j=0; j<4; ++j) {
918 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];
920 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30a, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
923 for (j=0; j<4; ++j) {
925 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];
927 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30b, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
931 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
932 >> theCurrentTemp.entx[
k][
i].mpvvav >> theCurrentTemp.entx[
k][
i].sigmavav >> theCurrentTemp.entx[
k][
i].kappavav >> theCurrentTemp.entx[
k][
i].r_qMeas_qTrue >> theCurrentTemp.entx[
k][
i].spare[0];
934 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 31, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
936 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]
937 >> 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;
940 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 32, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
948 pixelTemp.push_back(theCurrentTemp);
977 for (
auto & templ : thePixelTemp_) {
978 for (
auto iy=0; iy<templ.head.NTy; ++iy ) templ.cotbetaY[iy]=templ.enty[iy].cotbeta;
979 for (
auto iy=0; iy<templ.head.NTyx; ++iy ) templ.cotbetaX[iy]= templ.entx[iy][0].cotbeta;
980 for (
auto ix=0; ix<templ.head.NTxx; ++ix ) templ.cotalphaX[ix]=templ.entx[0][ix].cotalpha;
1005 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, imidy, imaxx;
1006 float yratio, yxratio, xxratio, sxmax, qcorrect, qxtempcor, symax, chi2xavgone, chi2xminone, cota, cotb, cotalpha0, cotbeta0;
1007 bool flip_x, flip_y;
1009 float chi2xavg[4], chi2xmin[4], chi2xavgc2m[4], chi2xminc2m[4];
1013 if(
id != id_current_ || cotalpha != cota_current_ || cotbeta != cotb_current_) {
1015 cota_current_ = cotalpha; cotb_current_ = cotbeta; success_ =
true;
1017 if(
id != id_current_) {
1022 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
1026 if(
id == thePixelTemp_[i].head.ID) {
1033 qscale_ = thePixelTemp_[index_id_].head.qscale;
1037 s50_ = thePixelTemp_[index_id_].head.s50;
1041 for(j=0; j<3; ++j) {fbin_[j] = thePixelTemp_[index_id_].head.fbin[j];}
1046 xsize_ = thePixelTemp_[index_id_].head.xsize;
1047 ysize_ = thePixelTemp_[index_id_].head.ysize;
1048 zsize_ = thePixelTemp_[index_id_].head.zsize;
1055 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1056 if(index_id_ < 0 || index_id_ >= (
int)thePixelTemp_.size()) {
1057 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::interpolate can't find needed template ID = " <<
id << std::endl;
1060 assert(index_id_ >= 0 && index_id_ < (
int)thePixelTemp_.size());
1069 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
1070 qcorrect=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta*cotbeta+cotalpha0*cotalpha0));
1077 switch(thePixelTemp_[index_id_].head.Dtype) {
1079 if(cotbeta < 0.
f) {flip_y =
true;}
1093 if(locBx*locBz < 0.
f) {
1105 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1106 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
1108 std::cout <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
1112 Ny = thePixelTemp_[index_id_].head.NTy;
1113 Nyx = thePixelTemp_[index_id_].head.NTyx;
1114 Nxx = thePixelTemp_[index_id_].head.NTxx;
1116 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1117 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
1118 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
1121 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
1131 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
1139 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
1141 for (i=0; i<Ny-1; ++
i) {
1143 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
1146 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
1150 }
else { success_ =
false; }
1158 qavg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg;
1160 symax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].symax + yratio*thePixelTemp_[index_id_].enty[ihigh].symax;
1162 sxmax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sxmax + yratio*thePixelTemp_[index_id_].enty[ihigh].sxmax;
1163 dyone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dyone + yratio*thePixelTemp_[index_id_].enty[ihigh].dyone;
1164 if(flip_y) {dyone_ = -dyone_;}
1165 syone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].syone + yratio*thePixelTemp_[index_id_].enty[ihigh].syone;
1166 dytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].dytwo;
1167 if(flip_y) {dytwo_ = -dytwo_;}
1168 sytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].sytwo;
1169 qmin_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin;
1171 qmin2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin2 + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin2;
1173 mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav;
1174 mpvvav_ *= qcorrect;
1175 sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav;
1176 kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav;
1177 mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2;
1178 mpvvav2_ *= qcorrect;
1179 sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2;
1180 kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2;
1181 clsleny_ = fminf(thePixelTemp_[index_id_].enty[ilow].clsleny, thePixelTemp_[index_id_].enty[ihigh].clsleny);
1182 qavg_avg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg_avg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg_avg;
1183 qavg_avg_ *= qcorrect;
1184 for(i=0; i<2 ; ++
i) {
1185 for(j=0; j<5 ; ++j) {
1188 yparl_[1-
i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[
i][j];
1189 yparh_[1-
i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[
i][j];
1191 yparl_[
i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[
i][j];
1192 yparh_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[
i][j];
1195 xparly0_[1-
i][j] = thePixelTemp_[index_id_].enty[ilow].xpar[
i][j];
1196 xparhy0_[1-
i][j] = thePixelTemp_[index_id_].enty[ihigh].xpar[
i][j];
1198 xparly0_[
i][j] = thePixelTemp_[index_id_].enty[ilow].xpar[
i][j];
1199 xparhy0_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].xpar[
i][j];
1204 for(i=0; i<4; ++
i) {
1205 yavg_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavg[i];
1206 if(flip_y) {yavg_[
i] = -yavg_[
i];}
1207 yrms_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrms[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrms[i];
1213 chi2yavg_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavg[i];
1214 chi2ymin_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2ymin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2ymin[i];
1215 chi2xavg[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavg[i];
1216 chi2xmin[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xmin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xmin[i];
1217 yavgc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavgc2m[i];
1218 if(flip_y) {yavgc2m_[
i] = -yavgc2m_[
i];}
1219 yrmsc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrmsc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrmsc2m[i];
1220 chi2yavgc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgc2m[i];
1222 chi2yminc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminc2m[i];
1224 chi2xavgc2m[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgc2m[i];
1225 chi2xminc2m[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminc2m[i];
1226 for(j=0; j<6 ; ++j) {
1227 yflparl_[
i][j] = thePixelTemp_[index_id_].enty[ilow].yflpar[
i][j];
1228 yflparh_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].yflpar[
i][j];
1232 if(flip_y && (j == 0 || j == 2 || j == 4)) {
1233 yflparl_[
i][j] = - yflparl_[
i][j];
1234 yflparh_[
i][j] = - yflparh_[
i][j];
1241 chi2yavgone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgone;
1242 chi2yminone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminone;
1243 chi2xavgone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgone;
1244 chi2xminone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminone;
1246 fracyone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].fracyone + yratio*thePixelTemp_[index_id_].enty[ihigh].fracyone;
1247 fracytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].fracytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].fracytwo;
1254 for(i=0; i<9; ++
i) {
1257 ytemp_[
i][
BYM2] = 0.f;
1258 ytemp_[
i][
BYM1] = 0.f;
1259 for(j=0; j<
TYSIZE; ++j) {
1264 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];
1266 ytemp_[
i][j+2]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ytemp[i][j] + yratio*thePixelTemp_[index_id_].enty[ihigh].ytemp[i][j];
1276 if(abs_cotb_ >= thePixelTemp_[index_id_].entx[Nyx-1][0].cotbeta) {
1281 }
else if(abs_cotb_ >= thePixelTemp_[index_id_].entx[0][0].cotbeta) {
1283 for (i=0; i<Nyx-1; ++
i) {
1285 if( thePixelTemp_[index_id_].entx[i][0].cotbeta <= abs_cotb_ && abs_cotb_ < thePixelTemp_[index_id_].entx[i+1][0].cotbeta) {
1288 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);
1299 if(cota >= thePixelTemp_[index_id_].entx[0][Nxx-1].cotalpha) {
1307 if(cota >= thePixelTemp_[index_id_].entx[0][0].cotalpha) {
1309 for (i=0; i<Nxx-1; ++
i) {
1311 if( thePixelTemp_[index_id_].entx[0][i].cotalpha <= cota && cota < thePixelTemp_[index_id_].entx[0][i+1].cotalpha) {
1314 xxratio = (cota - thePixelTemp_[index_id_].entx[0][
i].cotalpha)/(thePixelTemp_[index_id_].entx[0][i+1].cotalpha - thePixelTemp_[index_id_].entx[0][i].cotalpha);
1318 }
else { success_ =
false; }
1330 sxparmax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].sxmax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].sxmax;
1332 if(thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax != 0.
f) {sxmax_=sxmax_/thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax*sxmax;}
1333 symax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].symax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].symax;
1334 if(thePixelTemp_[index_id_].entx[imaxx][imidy].symax != 0.
f) {symax_=symax_/thePixelTemp_[index_id_].entx[imaxx][imidy].symax*symax;}
1335 dxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxone;
1336 if(flip_x) {dxone_ = -dxone_;}
1337 sxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxone;
1338 dxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxtwo;
1339 if(flip_x) {dxtwo_ = -dxtwo_;}
1340 sxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxtwo;
1341 clslenx_ = fminf(thePixelTemp_[index_id_].entx[0][ilow].clslenx, thePixelTemp_[index_id_].entx[0][ihigh].clslenx);
1343 for(i=0; i<2 ; ++
i) {
1344 for(j=0; j<5 ; ++j) {
1347 xpar0_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][imidy].xpar[
i][j];
1348 xparl_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][ilow].xpar[
i][j];
1349 xparh_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][ihigh].xpar[
i][j];
1351 xpar0_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][imidy].xpar[
i][j];
1352 xparl_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][ilow].xpar[
i][j];
1353 xparh_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][ihigh].xpar[
i][j];
1360 pixmax_=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].pixmax)
1361 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].pixmax);
1364 r_qMeas_qTrue_=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].r_qMeas_qTrue + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].r_qMeas_qTrue)
1365 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].r_qMeas_qTrue + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].r_qMeas_qTrue);
1368 for(i=0; i<4; ++
i) {
1369 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])
1370 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavg[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavg[
i]);
1371 if(flip_x) {xavg_[
i] = -xavg_[
i];}
1373 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])
1374 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrms[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrms[
i]);
1382 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])
1383 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavgc2m[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavgc2m[
i]);
1384 if(flip_x) {xavgc2m_[
i] = -xavgc2m_[
i];}
1386 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])
1387 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrmsc2m[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrmsc2m[
i]);
1403 chi2xavg_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavg[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavg[i]);
1404 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];}
1406 chi2xmin_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xmin[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xmin[i]);
1407 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];}
1409 chi2xavgc2m_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgc2m[i]);
1410 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];}
1412 chi2xminc2m_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminc2m[i]);
1413 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];}
1415 for(j=0; j<6 ; ++j) {
1416 xflparll_[
i][j] = thePixelTemp_[index_id_].entx[iylow][ilow].xflpar[
i][j];
1417 xflparlh_[
i][j] = thePixelTemp_[index_id_].entx[iylow][ihigh].xflpar[
i][j];
1418 xflparhl_[
i][j] = thePixelTemp_[index_id_].entx[iyhigh][ilow].xflpar[
i][j];
1419 xflparhh_[
i][j] = thePixelTemp_[index_id_].entx[iyhigh][ihigh].xflpar[
i][j];
1421 if(flip_x && (j == 0 || j == 2 || j == 4)) {
1422 xflparll_[
i][j] = -xflparll_[
i][j];
1423 xflparlh_[
i][j] = -xflparlh_[
i][j];
1424 xflparhl_[
i][j] = -xflparhl_[
i][j];
1425 xflparhh_[
i][j] = -xflparhh_[
i][j];
1433 chi2xavgone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgone);
1434 if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone != 0.
f) {chi2xavgone_=chi2xavgone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone*chi2xavgone;}
1436 chi2xminone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminone);
1437 if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone != 0.
f) {chi2xminone_=chi2xminone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone*chi2xminone;}
1439 fracxone_ = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].fracxone + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].fracxone)
1440 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].fracxone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].fracxone);
1441 fracxtwo_ = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].fracxtwo + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].fracxtwo)
1442 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].fracxtwo + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].fracxtwo);
1453 cotbeta0 = thePixelTemp_[index_id_].entx[iyhigh][0].cotbeta;
1454 qxtempcor=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta0*cotbeta0+cotalpha*cotalpha));
1456 for(i=0; i<9; ++
i) {
1459 xtemp_[
i][
BXM2] = 0.f;
1460 xtemp_[
i][
BXM1] = 0.f;
1461 for(j=0; j<
TXSIZE; ++j) {
1466 xtemp_[8-
i][
BXM3-j]=qxtempcor*((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xtemp[i][j] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xtemp[i][j]);
1468 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]);
1473 lorywidth_ = thePixelTemp_[index_id_].head.lorywidth;
1474 lorxwidth_ = thePixelTemp_[index_id_].head.lorxwidth;
1475 lorybias_ = thePixelTemp_[index_id_].head.lorybias;
1476 lorxbias_ = thePixelTemp_[index_id_].head.lorxbias;
1477 if(flip_x) {lorxwidth_ = -lorxwidth_; lorxbias_ = -lorxbias_;}
1478 if(flip_y) {lorywidth_ = -lorywidth_; lorybias_ = -lorybias_;}
1503 if(cotbeta < 0.
f) {locBx = -1.f;}
1504 float locBz = locBx;
1505 if(cotalpha < 0.
f) {locBz = -locBx;}
1544 float sigi, sigi2, sigi3, sigi4, symax, qscale, s25;
1548 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1549 if(fypix < 2 || fypix >=
BYM2) {
1550 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with fypix = " << fypix << std::endl;
1553 assert(fypix > 1 && fypix <
BYM2);
1555 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1556 if(lypix < fypix || lypix >=
BYM2) {
1557 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with lypix/fypix = " << lypix <<
"/" << fypix << std::endl;
1560 assert(lypix >= fypix && lypix <
BYM2);
1567 if(symax_ > syparmax_) {symax = syparmax_;}
1571 for(i=fypix-2; i<=lypix+2; ++
i) {
1572 if(i < fypix || i > lypix) {
1576 ysig2[
i] = s50_*s50_;
1578 if(ysum[i] < symax) {
1581 if(sigi < s25) sigi = s25;
1584 qscale = ysum[
i]/symax;
1586 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1588 ysig2[
i] = (1.f-yratio_)*
1589 (yparl_[0][0]+yparl_[0][1]*sigi+yparl_[0][2]*sigi2+yparl_[0][3]*sigi3+yparl_[0][4]*sigi4)
1591 (yparh_[0][0]+yparh_[0][1]*sigi+yparh_[0][2]*sigi2+yparh_[0][3]*sigi3+yparh_[0][4]*sigi4);
1593 ysig2[
i] = (1.f-yratio_)*
1594 (yparl_[1][0]+yparl_[1][1]*sigi+yparl_[1][2]*sigi2+yparl_[1][3]*sigi3+yparl_[1][4]*sigi4)
1596 (yparh_[1][0]+yparh_[1][1]*sigi+yparh_[1][2]*sigi2+yparh_[1][3]*sigi3+yparh_[1][4]*sigi4);
1599 if(ysum[i] > sythr) {ysig2[
i] = 1.e8;}
1600 if(ysig2[i] <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg y-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1601 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1623 float sigi, sigi2, sigi3, sigi4, symax, qscale, err2, s25;
1627 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1628 if(index < 2 || index >=
BYM2) {
1629 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with index = " << index << std::endl;
1632 assert(index > 1 && index <
BYM2);
1639 if(symax_ > syparmax_) {symax = syparmax_;}
1643 if(qpixel < symax) {
1646 if(sigi < s25) sigi = s25;
1649 qscale = qpixel/symax;
1651 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1653 err2 = (1.f-yratio_)*
1654 (yparl_[0][0]+yparl_[0][1]*sigi+yparl_[0][2]*sigi2+yparl_[0][3]*sigi3+yparl_[0][4]*sigi4)
1656 (yparh_[0][0]+yparh_[0][1]*sigi+yparh_[0][2]*sigi2+yparh_[0][3]*sigi3+yparh_[0][4]*sigi4);
1658 err2 = (1.f-yratio_)*
1659 (yparl_[1][0]+yparl_[1][1]*sigi+yparl_[1][2]*sigi2+yparl_[1][3]*sigi3+yparl_[1][4]*sigi4)
1661 (yparh_[1][0]+yparh_[1][1]*sigi+yparh_[1][2]*sigi2+yparh_[1][3]*sigi3+yparh_[1][4]*sigi4);
1664 if(ysig2 <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg y-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1665 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1691 float sigi, sigi2, sigi3, sigi4, yint, sxmax, x0, qscale, s25;
1695 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1696 if(fxpix < 2 || fxpix >=
BXM2) {
1697 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xsigma2 called with fxpix = " << fxpix << std::endl;
1700 assert(fxpix > 1 && fxpix <
BXM2);
1702 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1703 if(lxpix < fxpix || lxpix >=
BXM2) {
1704 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xsigma2 called with lxpix/fxpix = " << lxpix <<
"/" << fxpix << std::endl;
1707 assert(lxpix >= fxpix && lxpix <
BXM2);
1714 if(sxmax_ > sxparmax_) {sxmax = sxparmax_;}
1718 for(i=fxpix-2; i<=lxpix+2; ++
i) {
1719 if(i < fxpix || i > lxpix) {
1723 xsig2[
i] = s50_*s50_;
1725 if(xsum[i] < sxmax) {
1728 if(sigi < s25) sigi = s25;
1731 qscale = xsum[
i]/sxmax;
1733 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1738 yint = (1.f-yratio_)*
1739 (xparly0_[0][0]+xparly0_[0][1]*sigi+xparly0_[0][2]*sigi2+xparly0_[0][3]*sigi3+xparly0_[0][4]*sigi4)
1741 (xparhy0_[0][0]+xparhy0_[0][1]*sigi+xparhy0_[0][2]*sigi2+xparhy0_[0][3]*sigi3+xparhy0_[0][4]*sigi4);
1743 yint = (1.f-yratio_)*
1744 (xparly0_[1][0]+xparly0_[1][1]*sigi+xparly0_[1][2]*sigi2+xparly0_[1][3]*sigi3+xparly0_[1][4]*sigi4)
1746 (xparhy0_[1][0]+xparhy0_[1][1]*sigi+xparhy0_[1][2]*sigi2+xparhy0_[1][3]*sigi3+xparhy0_[1][4]*sigi4);
1752 xsig2[
i] = (1.f-xxratio_)*
1753 (xparl_[0][0]+xparl_[0][1]*sigi+xparl_[0][2]*sigi2+xparl_[0][3]*sigi3+xparl_[0][4]*sigi4)
1755 (xparh_[0][0]+xparh_[0][1]*sigi+xparh_[0][2]*sigi2+xparh_[0][3]*sigi3+xparh_[0][4]*sigi4);
1757 xsig2[
i] = (1.f-xxratio_)*
1758 (xparl_[1][0]+xparl_[1][1]*sigi+xparl_[1][2]*sigi2+xparl_[1][3]*sigi3+xparl_[1][4]*sigi4)
1760 (xparh_[1][0]+xparh_[1][1]*sigi+xparh_[1][2]*sigi2+xparh_[1][3]*sigi3+xparh_[1][4]*sigi4);
1766 x0 = xpar0_[0][0]+xpar0_[0][1]*sigi+xpar0_[0][2]*sigi2+xpar0_[0][3]*sigi3+xpar0_[0][4]*sigi4;
1768 x0 = xpar0_[1][0]+xpar0_[1][1]*sigi+xpar0_[1][2]*sigi2+xpar0_[1][3]*sigi3+xpar0_[1][4]*sigi4;
1773 if(x0 != 0.
f) {xsig2[
i] = xsig2[
i]/x0 * yint;}
1775 if(xsum[i] > sxthr) {xsig2[
i] = 1.e8;}
1776 if(xsig2[i] <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg x-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1777 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1801 float qfl, qfl2, qfl3, qfl4, qfl5,
dy;
1805 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1806 if(binq < 0 || binq > 3) {
1807 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::yflcorr called with binq = " << binq << std::endl;
1810 assert(binq >= 0 && binq < 4);
1812 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1813 if(fabs((
double)qfly) > 1.) {
1814 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::yflcorr called with qfly = " << qfly << std::endl;
1817 assert(fabs((
double)qfly) <= 1.);
1824 if(qfl < -0.9
f) {qfl = -0.9f;}
1825 if(qfl > 0.9
f) {qfl = 0.9f;}
1829 qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl;
1830 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)
1831 + yratio_*(yflparh_[binq][0]+yflparh_[binq][1]*qfl+yflparh_[binq][2]*qfl2+yflparh_[binq][3]*qfl3+yflparh_[binq][4]*qfl4+yflparh_[binq][5]*qfl5);
1853 float qfl, qfl2, qfl3, qfl4, qfl5,
dx;
1857 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1858 if(binq < 0 || binq > 3) {
1859 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xflcorr called with binq = " << binq << std::endl;
1862 assert(binq >= 0 && binq < 4);
1864 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1865 if(fabs((
double)qflx) > 1.) {
1866 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xflcorr called with qflx = " << qflx << std::endl;
1869 assert(fabs((
double)qflx) <= 1.);
1876 if(qfl < -0.9
f) {qfl = -0.9f;}
1877 if(qfl > 0.9
f) {qfl = 0.9f;}
1881 qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl;
1882 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)
1883 + xxratio_*(xflparlh_[binq][0]+xflparlh_[binq][1]*qfl+xflparlh_[binq][2]*qfl2+xflparlh_[binq][3]*qfl3+xflparlh_[binq][4]*qfl4+xflparlh_[binq][5]*qfl5))
1884 + 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)
1885 + xxratio_*(xflparhh_[binq][0]+xflparhh_[binq][1]*qfl+xflparhh_[binq][2]*qfl2+xflparhh_[binq][3]*qfl3+xflparhh_[binq][4]*qfl4+xflparhh_[binq][5]*qfl5));
1909 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1910 if(fybin < 0 || fybin > 40) {
1911 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp called with fybin = " << fybin << std::endl;
1914 assert(fybin >= 0 && fybin < 41);
1916 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1917 if(lybin < 0 || lybin > 40) {
1918 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp called with lybin = " << lybin << std::endl;
1921 assert(lybin >= 0 && lybin < 41);
1926 for(i=0; i<9; ++
i) {
1927 for(j=0; j<
BYSIZE; ++j) {
1928 ytemplate[i+16][j]=ytemp_[
i][j];
1931 for(i=0; i<8; ++
i) {
1932 ytemplate[i+8][
BYM1] = 0.f;
1933 for(j=0; j<
BYM1; ++j) {
1934 ytemplate[i+8][j]=ytemp_[
i][j+1];
1937 for(i=1; i<9; ++
i) {
1938 ytemplate[i+24][0] = 0.f;
1939 for(j=0; j<
BYM1; ++j) {
1940 ytemplate[i+24][j+1]=ytemp_[
i][j];
1947 for(i=0; i<8; ++
i) {
1948 ytemplate[
i][
BYM2] = 0.f;
1949 ytemplate[
i][
BYM1] = 0.f;
1950 for(j=0; j<
BYM2; ++j) {
1951 ytemplate[
i][j]=ytemp_[
i][j+2];
1956 for(i=1; i<9; ++
i) {
1957 ytemplate[i+32][0] = 0.f;
1958 ytemplate[i+32][1] = 0.f;
1959 for(j=0; j<
BYM2; ++j) {
1960 ytemplate[i+32][j+2]=ytemp_[
i][j];
1987 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1988 if(fxbin < 0 || fxbin > 40) {
1989 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp called with fxbin = " << fxbin << std::endl;
1992 assert(fxbin >= 0 && fxbin < 41);
1994 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1995 if(lxbin < 0 || lxbin > 40) {
1996 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp called with lxbin = " << lxbin << std::endl;
1999 assert(lxbin >= 0 && lxbin < 41);
2004 for(i=0; i<9; ++
i) {
2005 for(j=0; j<
BXSIZE; ++j) {
2006 xtemplate[i+16][j]=xtemp_[
i][j];
2009 for(i=0; i<8; ++
i) {
2010 xtemplate[i+8][
BXM1] = 0.f;
2011 for(j=0; j<
BXM1; ++j) {
2012 xtemplate[i+8][j]=xtemp_[
i][j+1];
2015 for(i=1; i<9; ++
i) {
2016 xtemplate[i+24][0] = 0.f;
2017 for(j=0; j<
BXM1; ++j) {
2018 xtemplate[i+24][j+1]=xtemp_[
i][j];
2025 for(i=0; i<8; ++
i) {
2026 xtemplate[
i][
BXM2] = 0.f;
2027 xtemplate[
i][
BXM1] = 0.f;
2028 for(j=0; j<
BXM2; ++j) {
2029 xtemplate[
i][j]=xtemp_[
i][j+2];
2034 for(i=1; i<9; ++
i) {
2035 xtemplate[i+32][0] = 0.f;
2036 xtemplate[i+32][1] = 0.f;
2037 for(j=0; j<
BXM2; ++j) {
2038 xtemplate[i+32][j+2]=xtemp_[
i][j];
2063 float qedge = 2.*s50_;
2066 for(j=0; j<
BYSIZE; ++j) {
2067 if(ytemp_[4][j] > sigmax) {
2068 sigmax = ytemp_[4][j];
2072 if(sigmax < qedge) {qedge = s50_;}
2073 if(sigmax < qedge || jmax<1 || jmax>
BYM2) {
return -1;}
2079 for(j=jmax+1; j<
BYM1; ++j) {
2080 if(ytemp_[4][j] < qedge)
break;
2086 for(j=jmax-1; j>0; --j) {
2087 if(ytemp_[4][j] < qedge)
break;
2091 return (jbeg+jend)/2;
2112 float qedge = 2.*s50_;
2115 for(j=0; j<
BXSIZE; ++j) {
2116 if(xtemp_[4][j] > sigmax) {
2117 sigmax = xtemp_[4][j];
2121 if(sigmax < qedge) {qedge = s50_;}
2122 if(sigmax < qedge || jmax<1 || jmax>
BXM2) {
return -1;}
2128 for(j=jmax+1; j<
BXM1; ++j) {
2129 if(xtemp_[4][j] < qedge)
break;
2135 for(j=jmax-1; j>0; --j) {
2136 if(xtemp_[4][j] < qedge)
break;
2140 return (jbeg+jend)/2;
2158 int ioff0, ioffp, ioffm;
2162 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2163 if(nypix < 1 || nypix >=
BYM3) {
2164 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp3d called with nypix = " << nypix << std::endl;
2167 assert(nypix > 0 && nypix <
BYM3);
2172 float diff = fabsf(nypix - clsleny_)/2. + 1.f;
2173 int nshift = (
int)diff;
2174 if((diff - nshift) > 0.5f) {++nshift;}
2178 nybins_ = 9 + 16*nshift;
2182 temp2dy_.resize(boost::extents[nybins_][
BYSIZE]);
2188 for(i=0; i<9; ++
i) {
2189 for(j=0; j<
BYSIZE; ++j) {
2190 temp2dy_[i+ioff0][j]=ytemp_[
i][j];
2196 for(k=1; k<=nshift; ++
k) {
2198 for(i=0; i<8; ++
i) {
2199 for(j=0; j<
k; ++j) {
2200 temp2dy_[i+ioffm][
BYM1-j] = 0.f;
2202 for(j=0; j<BYSIZE-
k; ++j) {
2203 temp2dy_[i+ioffm][j]=ytemp_[
i][j+
k];
2207 for(i=1; i<9; ++
i) {
2208 for(j=0; j<
k; ++j) {
2209 temp2dy_[i+ioffp][j] = 0.f;
2211 for(j=0; j<BYSIZE-
k; ++j) {
2212 temp2dy_[i+ioffp][j+
k]=ytemp_[
i][j];
2232 if(i >= 0 && i < nybins_ && j <= i) {
2234 ytemplate[
k]=temp2dy_[
i][
k]+temp2dy_[j][
k];
2259 int ioff0, ioffp, ioffm;
2263 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2264 if(nxpix < 1 || nxpix >=
BXM3) {
2265 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp3d called with nxpix = " << nxpix << std::endl;
2268 assert(nxpix > 0 && nxpix <
BXM3);
2273 float diff = fabsf(nxpix - clslenx_)/2.f + 1.f;
2274 int nshift = (
int)diff;
2275 if((diff - nshift) > 0.5f) {++nshift;}
2279 nxbins_ = 9 + 16*nshift;
2283 temp2dx_.resize(boost::extents[nxbins_][
BXSIZE]);
2289 for(i=0; i<9; ++
i) {
2290 for(j=0; j<
BXSIZE; ++j) {
2291 temp2dx_[i+ioff0][j]=xtemp_[
i][j];
2297 for(k=1; k<=nshift; ++
k) {
2299 for(i=0; i<8; ++
i) {
2300 for(j=0; j<
k; ++j) {
2301 temp2dx_[i+ioffm][
BXM1-j] = 0.f;
2303 for(j=0; j<BXSIZE-
k; ++j) {
2304 temp2dx_[i+ioffm][j]=xtemp_[
i][j+
k];
2308 for(i=1; i<9; ++
i) {
2309 for(j=0; j<
k; ++j) {
2310 temp2dx_[i+ioffp][j] = 0.f;
2312 for(j=0; j<BXSIZE-
k; ++j) {
2313 temp2dx_[i+ioffp][j+
k]=xtemp_[
i][j];
2335 if(i >= 0 && i < nxbins_ && j <= i) {
2337 xtemplate[
k]=temp2dx_[
i][
k]+temp2dx_[j][
k];
2380 float& sigmay,
float& deltay,
float& sigmax,
float& deltax,
float& sy1,
float& dy1,
float& sy2,
2381 float& dy2,
float& sx1,
float& dx1,
float& sx2,
float& dx2)
2389 for(
int i=0;
i<(
int)thePixelTemp_.size(); ++
i) {
2390 if(
id == thePixelTemp_[
i].head.ID) {
2396 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2397 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2398 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::qbin can't find needed template ID = " <<
id << std::endl;
2401 assert(index >= 0 && index < (
int)thePixelTemp_.size());
2407 auto const & templ = thePixelTemp_[
index];
2415 auto cotalpha0 = thePixelTemp_[
index].enty[0].cotalpha;
2416 auto qcorrect=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta*cotbeta+cotalpha0*cotalpha0));
2420 float cota = cotalpha;
2421 float cotb = abs_cotb_;
2422 bool flip_x =
false;
2423 bool flip_y =
false;
2424 switch(thePixelTemp_[index_id_].head.Dtype) {
2426 if(cotbeta < 0.
f) {flip_y =
true;}
2440 if(locBx*locBz < 0.
f) {
2452 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2453 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
2455 std::cout <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
2463 auto qscale = thePixelTemp_[
index].head.qscale;
2473 auto Ny = thePixelTemp_[
index].head.NTy;
2474 auto Nyx = thePixelTemp_[
index].head.NTyx;
2475 auto Nxx = thePixelTemp_[
index].head.NTxx;
2477 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2478 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
2479 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
2482 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
2492 auto j = std::lower_bound(templ.cotbetaY,templ.cotbetaY+Ny,cotb);
2493 if (j==templ.cotbetaY+Ny) { --j; yratio = 1.f; }
2494 else if (j==templ.cotbetaY) { ++j; yratio = 0.f;}
2495 else { yratio = (cotb - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2497 ihigh = j-templ.cotbetaY;
2505 dy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dyone + yratio*thePixelTemp_[index].enty[ihigh].dyone;
2506 if(flip_y) {dy1 = -dy1;}
2507 sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone;
2508 dy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dytwo + yratio*thePixelTemp_[index].enty[ihigh].dytwo;
2509 if(flip_y) {dy2 = -dy2;}
2510 sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo;
2512 auto qavg = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qavg + yratio*thePixelTemp_[index].enty[ihigh].qavg;
2514 auto qmin = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin + yratio*thePixelTemp_[index].enty[ihigh].qmin;
2516 auto qmin2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin2 + yratio*thePixelTemp_[index].enty[ihigh].qmin2;
2520 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2521 if(qavg <= 0.
f || qmin <= 0.
f) {
2522 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::qbin, qavg or qmin <= 0," 2523 <<
" Probably someone called the generic pixel reconstruction with an illegal trajectory state" << std::endl;
2526 assert(qavg > 0.
f && qmin > 0.
f);
2531 auto qtotal = qscale*qclus;
2534 auto fq = qtotal/qavg;
2553 auto yavggen =(1.f - yratio)*thePixelTemp_[index].enty[ilow].yavggen[binq] + yratio*thePixelTemp_[index].enty[ihigh].yavggen[binq];
2554 if(flip_y) {yavggen = -yavggen;}
2555 auto yrmsgen =(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrmsgen[binq] + yratio*thePixelTemp_[index].enty[ihigh].yrmsgen[binq];
2566 auto j = std::lower_bound(templ.cotbetaX,templ.cotbetaX+Nyx,acotb);
2567 if (j==templ.cotbetaX+Nyx) { --j; yxratio = 1.f; }
2568 else if (j==templ.cotbetaX) { ++j; yxratio = 0.f;}
2569 else { yxratio = (acotb - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2571 iyhigh = j-templ.cotbetaX;
2581 auto j = std::lower_bound(templ.cotalphaX,templ.cotalphaX+Nxx,cotalpha);
2582 if (j==templ.cotalphaX+Nxx) { --j; xxratio = 1.f; }
2583 else if (j==templ.cotalphaX) { ++j; xxratio = 0.f;}
2584 else { xxratio = (cota - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2586 ihigh = j-templ.cotalphaX;
2592 dx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxone + xxratio*thePixelTemp_[index].entx[0][ihigh].dxone;
2593 if(flip_x) {dx1 = -dx1;}
2594 sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone;
2595 dx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].dxtwo;
2596 if(flip_x) {dx2 = -dx2;}
2597 sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo;
2601 pixmx=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].pixmax)
2602 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].pixmax);
2604 auto xavggen = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xavggen[binq] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xavggen[binq])
2605 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xavggen[binq] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xavggen[binq]);
2606 if(flip_x) {xavggen = -xavggen;}
2608 auto xrmsgen = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xrmsgen[binq] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xrmsgen[binq])
2609 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xrmsgen[binq] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xrmsgen[binq]);
2615 sigmay = yrmsgen; deltay = yavggen;
2617 sigmax = xrmsgen; deltax = xavggen;
2621 if(qtotal < 0.95
f*qmin) {binq = 5;}
else {
if(qtotal < 0.95
f*qmin2) {binq = 4;}}
2658 float& sigmay,
float& deltay,
float& sigmax,
float& deltax,
float& sy1,
float& dy1,
float& sy2,
2659 float& dy2,
float& sx1,
float& dx1,
float& sx2,
float& dx2)
2666 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2667 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2719 float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz;
2722 if(cotbeta < 0.
f) {locBx = -1.f;}
2724 if(cotalpha < 0.
f) {locBz = -locBx;}
2726 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2727 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2743 float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz, locBx;
2744 const float cotalpha = 0.f;
2746 if(cotbeta < 0.
f) {locBx = -1.f;}
2748 if(cotalpha < 0.
f) {locBz = -locBx;}
2749 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2750 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2777 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx,
index;
2778 float yratio, yxratio, xxratio;
2787 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
2789 if(
id == thePixelTemp_[i].head.ID) {
2796 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2797 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2798 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors can't find needed template ID = " <<
id << std::endl;
2801 assert(index >= 0 && index < (
int)thePixelTemp_.size());
2805 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2806 if(qBin < 0 || qBin > 5) {
2807 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors called with illegal qBin = " << qBin << std::endl;
2810 assert(qBin >= 0 && qBin < 6);
2815 if(qBin > 3) {qBin = 3;}
2820 acotb = fabs((
double)cotbeta);
2841 Ny = thePixelTemp_[
index].head.NTy;
2842 Nyx = thePixelTemp_[
index].head.NTyx;
2843 Nxx = thePixelTemp_[
index].head.NTxx;
2845 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2846 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
2847 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
2850 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
2858 if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) {
2865 if(cotb >= thePixelTemp_[index].enty[0].cotbeta) {
2867 for (i=0; i<Ny-1; ++
i) {
2869 if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) {
2872 yratio = (cotb - thePixelTemp_[
index].enty[
i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta);
2883 sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone;
2884 sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo;
2885 yrms=(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrms[qBin] + yratio*thePixelTemp_[index].enty[ihigh].yrms[qBin];
2893 if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) {
2898 }
else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) {
2900 for (i=0; i<Nyx-1; ++
i) {
2902 if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) {
2905 yxratio = (acotb - thePixelTemp_[
index].entx[
i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta);
2916 if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) {
2923 if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) {
2925 for (i=0; i<Nxx-1; ++
i) {
2927 if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) {
2930 xxratio = (cotalpha - thePixelTemp_[
index].entx[0][
i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha);
2939 sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone;
2940 sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo;
2942 xrms=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xrms[
qBin] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xrms[
qBin])
2943 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xrms[
qBin] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xrms[
qBin]);
2969 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)
2976 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx,
index;
2977 float yratio, yxratio, xxratio;
2985 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
2987 if(
id == thePixelTemp_[i].head.ID) {
2995 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2996 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2997 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors can't find needed template ID = " <<
id << std::endl;
3000 assert(index >= 0 && index < (
int)thePixelTemp_.size());
3007 acotb = fabs((
double)cotbeta);
3029 Ny = thePixelTemp_[
index].head.NTy;
3030 Nyx = thePixelTemp_[
index].head.NTyx;
3031 Nxx = thePixelTemp_[
index].head.NTxx;
3033 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3034 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
3035 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
3038 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
3046 if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) {
3053 if(cotb >= thePixelTemp_[index].enty[0].cotbeta) {
3055 for (i=0; i<Ny-1; ++
i) {
3057 if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) {
3060 yratio = (cotb - thePixelTemp_[
index].enty[
i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta);
3070 ny1_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracyone + yratio*thePixelTemp_[index].enty[ihigh].fracyone;
3071 ny2_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracytwo + yratio*thePixelTemp_[index].enty[ihigh].fracytwo;
3078 if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) {
3083 }
else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) {
3085 for (i=0; i<Nyx-1; ++
i) {
3087 if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) {
3090 yxratio = (acotb - thePixelTemp_[
index].entx[
i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta);
3101 if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) {
3108 if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) {
3110 for (i=0; i<Nxx-1; ++
i) {
3112 if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) {
3115 xxratio = (cotalpha - thePixelTemp_[
index].entx[0][
i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha);
3124 for(i=0; i<3; ++
i) {
3125 qfrac[
i]=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].qbfrac[
i] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].qbfrac[
i])
3126 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].qbfrac[
i] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].qbfrac[
i]);
3128 nx1_frac = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].fracxone + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].fracxone)
3129 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].fracxone + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].fracxone);
3130 nx2_frac = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].fracxtwo + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].fracxtwo)
3131 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].fracxtwo + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].fracxtwo);
3135 qbin_frac[0] = qfrac[0];
3136 qbin_frac[1] = qbin_frac[0] + qfrac[1];
3137 qbin_frac[2] = qbin_frac[1] + qfrac[2];
3158 float x0, y0, xf, yf,
xi, yi, sf, si, s0, qpix, slopey, slopex, ds;
3159 int i, j, jpix0, ipix0, jpixf, ipixf, jpix, ipix, nx, ny, anx,
any, jmax, imax;
3162 std::list<SimplePixel>
list;
3163 std::list<SimplePixel>::iterator listIter, listEnd;
3167 x0 = xhit - 0.5*zsize_*cota_current_;
3168 y0 = yhit - 0.5*zsize_*cotb_current_;
3170 jpix0 = floor(x0/xsize_)+1;
3171 ipix0 = floor(y0/ysize_)+1;
3173 if(jpix0 < 0 || jpix0 >
BXM3) {
return false;}
3174 if(ipix0 < 0 || ipix0 >
BYM3) {
return false;}
3176 xf = xhit + 0.5*zsize_*cota_current_ + lorxwidth_;
3177 yf = yhit + 0.5*zsize_*cotb_current_ + lorywidth_;
3179 jpixf = floor(xf/xsize_)+1;
3180 ipixf = floor(yf/ysize_)+1;
3182 if(jpixf < 0 || jpixf > BXM3) {
return false;}
3183 if(ipixf < 0 || ipixf > BYM3) {
return false;}
3187 sf =
std::sqrt((xf-x0)*(xf-x0) + (yf-y0)*(yf-y0));
3188 if((xf-x0) != 0.
f) {slopey = (yf-y0)/(xf-x0);}
else { slopey = 1.e10;}
3189 if((yf-y0) != 0.f) {slopex = (xf-x0)/(yf-y0);}
else { slopex = 1.e10;}
3202 list.push_back(element);
3210 for(j=jpix0; j<jpixf; ++j) {
3212 yi = slopey*(xi-x0) + y0;
3213 ipix = (
int)(yi/ysize_)+1;
3214 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3221 list.push_back(element);
3224 for(j=jpix0; j>jpixf; --j) {
3226 yi = slopey*(xi-x0) + y0;
3227 ipix = (
int)(yi/ysize_)+1;
3228 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3235 list.push_back(element);
3244 for(i=ipix0; i<ipixf; ++
i) {
3246 xi = slopex*(yi-y0) + x0;
3247 jpix = (
int)(xi/xsize_)+1;
3248 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3255 list.push_back(element);
3258 for(i=ipix0; i>ipixf; --
i) {
3260 xi = slopex*(yi-y0) + x0;
3261 jpix = (
int)(xi/xsize_)+1;
3262 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3269 list.push_back(element);
3283 for(i=1; i<imax; ++
i) {
3285 listIter = list.begin();
3287 while(listIter != list.end()) {
3288 if(listIter->i == i && listIter->btype == 2) {
3289 listIter = list.erase(listIter);
3292 if(listIter->i > i) {
3298 while(listIter != list.end()) {
3299 if(listIter->i == i+1 && listIter->btype == 2) {
3300 listIter = list.erase(listIter);
3303 if(listIter->i > i+1) {
3312 for(j=1; j<jmax; ++j) {
3314 listIter = list.begin();
3316 while(listIter != list.end()) {
3317 if(listIter->j == j && listIter->btype == 1) {
3318 listIter = list.erase(listIter);
3321 if(listIter->j > j) {
3327 while(listIter != list.end()) {
3328 if(listIter->j == j+1 && listIter->btype == 1) {
3329 listIter = list.erase(listIter);
3332 if(listIter->j > j+1) {
3344 listIter = list.begin();
3345 listEnd = list.end();
3346 for( ;listIter != listEnd; ++listIter) {
3352 if(sf > 0.
f) { qpix = qtotal*ds/sf;}
else {qpix = qtotal;}
3353 template2d[j][
i] += qpix;
3372 int ilow, ihigh, Ny;
3373 float yratio, cotb, cotalpha0,
arg;
3377 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
3378 arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0;
3379 if(arg < 0.
f) arg = 0.f;
3384 Ny = thePixelTemp_[index_id_].head.NTy;
3386 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3388 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny = " << Ny << std::endl;
3399 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
3406 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
3408 for (i=0; i<Ny-1; ++
i) {
3410 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
3413 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
3424 mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav;
3425 sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav;
3426 kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav;
3431 mpv = (double)mpvvav_;
3432 sigma = (double)sigmavav_;
3433 kappa = (double)kappavav_;
3450 int ilow, ihigh, Ny;
3451 float yratio, cotb, cotalpha0,
arg;
3455 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
3456 arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0;
3457 if(arg < 0.
f) arg = 0.f;
3462 Ny = thePixelTemp_[index_id_].head.NTy;
3464 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3466 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny = " << Ny << std::endl;
3477 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
3484 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
3486 for (i=0; i<Ny-1; ++
i) {
3488 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
3491 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
3502 mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2;
3503 sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2;
3504 kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2;
3508 mpv = (double)mpvvav2_;
3509 sigma = (double)sigmavav2_;
3510 kappa = (double)kappavav2_;
float qavg_avg
average cluster charge of clusters that are less than qavg (normalize 2-D simple templates) ...
int runnum
< Basic template entry corresponding to a single set of track angles
float xflpar[4][6]
Aqfl-parameterized x-correction in 4 charge bins.
float xrms[4]
average x-rms of reconstruction binned in 4 charge bins
void vavilov2_pars(double &mpv, double &sigma, double &kappa)
float clslenx
cluster x-length in pixels at signal height sxmax/2
float qavg
average cluster charge for this set of track angles (now includes threshold effects) ...
float syone
rms for one pixel y-clusters
float chi2yavgone
average y chi^2 for 1 pixel clusters
bool interpolate(int id, float cotalpha, float cotbeta, float locBz, float locBx)
int cytemp()
Return central pixel of y template pixels above readout threshold.
float dyone
mean offset/correction for one pixel y-clusters
float sigmavav
"sigma" scale fctor for Vavilov distribution
float fracxtwo
fraction of double pixel sample with xsize = 1
float yavggen[4]
generic algorithm: average y-bias of reconstruction binned in 4 charge bins
float sxmax
average pixel signal for x-projection of cluster
int btype
type of boundary (0=end, 1 = x-boundary, 2 = y-boundary)
void xsigma2(int fxpix, int lxpix, float sxthr, float xsum[13+4], float xsig2[13+4])
float chi2yminc2m[4]
1st pass chi2 min search: minimum of y chi^2 in 4 charge bins (merged clusters)
float xavgc2m[4]
1st pass chi2 min search: average x-bias of reconstruction binned in 4 charge bins ...
bool any(const std::vector< T > &v, const T &what)
float chi2xavgone
average x chi^2 for 1 pixel clusters
float fracytwo
fraction of double pixel sample with ysize = 1
float yrms[4]
average y-rms of reconstruction binned in 4 charge bins
float mpvvav2
most probable charge in Vavilov distribution for 2 merged clusters (not actually for larger kappa) ...
float ygx0gen[4]
generic algorithm: average y0 from Gaussian fit binned in 4 charge bins
float xavg[4]
average x-bias of reconstruction binned in 4 charge bins
bool simpletemplate2D(float xhitp, float yhitp, std::vector< bool > &ydouble, std::vector< bool > &xdouble, float template2d[13+2][21+2])
Make simple 2-D templates from track angles set in interpolate and hit position.
float y
y coordinate of boundary intersection
float dytwo
mean offset/correction for one double-pixel y-clusters
float dxone
mean offset/correction for one pixel x-clusters
float pixmax
maximum charge for individual pixels in cluster
float chi2yavgc2m[4]
1st pass chi2 min search: average y chi^2 in 4 charge bins (merged clusters)
float qmin
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
float chi2xavgc2m[4]
1st pass chi2 min search: average x chi^2 in 4 charge bins (merged clusters)
float xflcorr(int binq, float qflx)
float xgsiggen[4]
generic algorithm: average sigma_x from Gaussian fit binned in 4 charge bins
float chi2xminc2m[4]
1st pass chi2 min search: minimum of x chi^2 in 4 charge bins (merged clusters)
float cotalpha
cot(alpha) is proportional to cluster length in x and is basis of interpolation
float ytemp[9][21]
templates for y-reconstruction (binned over 1 central pixel)
float yrmsc2m[4]
1st pass chi2 min search: average y-rms of reconstruction binned in 4 charge bins ...
void ytemp(int fybin, int lybin, float ytemplate[41][21+4])
int cxtemp()
Return central pixel of x-template pixels above readout threshold.
float xpar[2][5]
projected x-pixel uncertainty parameterization
float ygx0[4]
average y0 from Gaussian fit binned in 4 charge bins
float xgx0gen[4]
generic algorithm: average x0 from Gaussian fit binned in 4 charge bins
float symax
average pixel signal for y-projection of cluster
float kappavav2
kappa parameter for Vavilov distribution for 2 merged clusters
float xgsig[4]
average sigma_x from Gaussian fit binned in 4 charge bins
float cotbeta
cot(beta) is proportional to cluster length in y and is basis of interpolation
float beta
beta track angle (defined in CMS CMS IN 2004/014)
void vavilov_pars(double &mpv, double &sigma, double &kappa)
float yflcorr(int binq, float qfly)
float s
distance from track entry
float xrmsc2m[4]
1st pass chi2 min search: average x-rms of reconstruction binned in 4 charge bins ...
void ytemp3d(int j, int k, std::vector< float > &ytemplate)
void temperrors(int id, float cotalpha, float cotbeta, int qBin, float &sigmay, float &sigmax, float &sy1, float &sy2, float &sx1, float &sx2)
float xgx0[4]
average x0 from Gaussian fit binned in 4 charge bins
Abs< T >::type abs(const T &t)
void ysigma2(int fypix, int lypix, float sythr, float ysum[21+4], float ysig2[21+4])
int j
y index of traversed pixel
float ygsiggen[4]
generic algorithm: average sigma_y from Gaussian fit binned in 4 charge bins
float fracxone
fraction of sample with xsize = 1
float mpvvav
most probable charge in Vavilov distribution (not actually for larger kappa)
float sxtwo
rms for one double-pixel x-clusters
float r_qMeas_qTrue
ratio of measured to true cluster charge
float chi2yavg[4]
average y chi^2 in 4 charge bins
float alpha
alpha track angle (defined in CMS CMS IN 2004/014)
float xtemp[9][13]
templates for x-reconstruction (binned over 1 central pixel)
SiPixelTemplateHeader head
< template storage structure
float chi2xminone
minimum of x chi^2 for 1 pixel clusters
float ypar[2][5]
projected y-pixel uncertainty parameterization
void xtemp3d(int j, int k, std::vector< float > &xtemplate)
void xtemp(int fxbin, int lxbin, float xtemplate[41][13+4])
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 qbfrac[3]
fraction of sample in qbin = 0-2 (>=3 is the complement)
void ytemp3d_int(int nypix, int &nybins)
float fracyone
fraction of sample with ysize = 1
float qmin2
tighter minimum cluster charge for valid hit (keeps 99.8% of simulated hits)
float yavg[4]
average y-bias of reconstruction binned in 4 charge bins
void xtemp3d_int(int nxpix, int &nxbins)
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > &pixelTemp, std::string dir="CalibTracker/SiPixelESProducers/data/")
float chi2ymin[4]
minimum of y chi^2 in 4 charge bins
float yavgc2m[4]
1st pass chi2 min search: average y-bias of reconstruction binned in 4 charge bins ...
float x
x coordinate of boundary intersection
float dxtwo
mean offset/correction for one double-pixel x-clusters
int i
x index of traversed pixel
float yflpar[4][6]
Aqfl-parameterized y-correction in 4 charge bins.
std::string fullPath() const
float sxone
rms for one pixel x-clusters
float chi2xmin[4]
minimum of x chi^2 in 4 charge bins
static const G4double kappa
float chi2yminone
minimum of y chi^2 for 1 pixel clusters
int qbin(int id, float cotalpha, float cotbeta, float locBz, float locBx, 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 costrk[3]
direction cosines of tracks used to generate this entry
static void postInit(std::vector< SiPixelTemplateStore > &thePixelTemp_)
SiPixelTemplateEntry entx[5][29]
29 Barrel x templates spanning cluster lengths from -6px (-1.125Rad) to +6px (+1.125Rad) in each of 5...
float ygsig[4]
average sigma_y from Gaussian fit binned in 4 charge bins
SiPixelTemplateEntry enty[60]
60 Barrel y templates spanning cluster lengths from 0px to +18px [28 entries for fpix] ...
float sigmavav2
"sigma" scale fctor for Vavilov distribution for 2 merged clusters
float sytwo
rms for one double-pixel y-clusters
float xrmsgen[4]
generic algorithm: average x-rms of reconstruction binned in 4 charge bins
float chi2xavg[4]
average x chi^2 in 4 charge bins
How EventSelector::AcceptEvent() decides whether to accept an event for output otherwise it is excluding the probing of A single or multiple positive and the trigger will pass if any such matching triggers are PASS or EXCEPTION[A criterion thatmatches no triggers at all is detected and causes a throw.] A single negative with an expectation of appropriate bit checking in the decision and the trigger will pass if any such matching triggers are FAIL or EXCEPTION A wildcarded negative criterion that matches more than one trigger in the trigger list("!*","!HLTx*"if it matches 2 triggers or more) will accept the event if all the matching triggers are FAIL.It will reject the event if any of the triggers are PASS or EXCEPTION(this matches the behavior of"!*"before the partial wildcard feature was incorporated).Triggers which are in the READY state are completely ignored.(READY should never be returned since the trigger paths have been run
float kappavav
kappa parameter for Vavilov distribution
float xavggen[4]
generic algorithm: average x-bias of reconstruction binned in 4 charge bins
float yrmsgen[4]
generic algorithm: average y-rms of reconstruction binned in 4 charge bins
float clsleny
cluster y-length in pixels at signal height symax/2