82 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 98 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 103 #define LOGERROR(x) LogError(x) 104 #define LOGINFO(x) LogInfo(x) 105 #define LOGWARNING(x) LogWarning(x) 112 #define LOGERROR(x) std::cout << x << ": " 113 #define LOGINFO(x) std::cout << x << ": " 114 #define ENDL std::endl 130 const char *tempfile;
133 const int code_version={17};
139 std::ostringstream tout;
143 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 144 tout <<
"CalibTracker/SiPixelESProducers/data/template_summary_zp" 145 << std::setw(4) << std::setfill(
'0') << std::right << filenum <<
".out" << std::ends;
148 tempfile = (
file.fullPath()).c_str();
150 tout <<
"template_summary_zp" << std::setw(4) << std::setfill(
'0') << std::right << filenum <<
".out" << std::ends;
152 tempfile = tempf.c_str();
159 if(in_file.is_open()) {
167 for (i=0; (c=in_file.get()) !=
'\n'; ++
i) {
172 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.
head.
title <<
ENDL;
180 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0A, no template load" <<
ENDL;
return false;}
187 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0B, no template load" 188 <<
ENDL;
return false;}
194 theCurrentTemp.
head.
fbin[1] = 1.00f;
195 theCurrentTemp.
head.
fbin[2] = 0.85f;
199 <<
", NTy = " << theCurrentTemp.
head.
NTy <<
", NTyx = " << theCurrentTemp.
head.
NTyx<<
", NTxx = " << theCurrentTemp.
head.
NTxx <<
", Dtype = " << theCurrentTemp.
head.
Dtype 200 <<
", Bias voltage " << theCurrentTemp.
head.
Vbias <<
", temperature " 202 <<
", 1/2 multi dcol threshold " << theCurrentTemp.
head.
s50 <<
", 1/2 single dcol threshold " << theCurrentTemp.
head.
ss50 205 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.
head.
fbin[0] <<
", " << theCurrentTemp.
head.
fbin[1]
206 <<
", " << theCurrentTemp.
head.
fbin[2]
212 #ifdef SI_PIXEL_TEMPLATE_USE_BOOST 216 theCurrentTemp.
enty.resize(boost::extents[theCurrentTemp.
head.
NTy]);
224 for (i=0; i < theCurrentTemp.
head.
NTy; ++
i) {
229 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 1, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
244 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 2, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
249 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 3, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
252 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;}
255 for (j=0; j<2; ++j) {
260 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 4, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
264 for (j=0; j<9; ++j) {
268 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 5, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
271 for (j=0; j<2; ++j) {
276 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 6, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
281 for (j=0; j<9; ++j) {
285 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 7, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
289 for (j=0; j<4; ++j) {
293 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 8, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
296 for (j=0; j<4; ++j) {
301 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 9, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
304 for (j=0; j<4; ++j) {
308 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 10, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
311 for (j=0; j<4; ++j) {
316 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 11, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
319 for (j=0; j<4; ++j) {
323 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 12, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
326 for (j=0; j<4; ++j) {
330 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 13, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
333 for (j=0; j<4; ++j) {
337 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
340 for (j=0; j<4; ++j) {
344 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14a, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
347 for (j=0; j<4; ++j) {
351 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14b, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
357 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 15, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
363 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 16, no template load, run # " << theCurrentTemp.
enty[
i].
runnum <<
ENDL;
return false;}
369 for (k=0; k < theCurrentTemp.
head.
NTyx; ++
k) {
371 for (i=0; i < theCurrentTemp.
head.
NTxx; ++
i) {
376 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 17, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
384 theCurrentTemp.
entx[
k][
i].
beta =
static_cast<float>(atan2((
double)theCurrentTemp.
entx[k][i].
costrk[2], (
double)theCurrentTemp.
entx[k][i].
costrk[1]));
391 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 18, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
397 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 19, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
399 for (j=0; j<2; ++j) {
404 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 20, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
407 for (j=0; j<9; ++j) {
411 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 21, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
414 for (j=0; j<2; ++j) {
420 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 22, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
424 for (j=0; j<9; ++j) {
428 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 23, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
432 for (j=0; j<4; ++j) {
436 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 24, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
439 for (j=0; j<4; ++j) {
444 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 25, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
447 for (j=0; j<4; ++j) {
451 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 26, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
454 for (j=0; j<4; ++j) {
459 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 27, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
462 for (j=0; j<4; ++j) {
466 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 28, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
469 for (j=0; j<4; ++j) {
473 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 29, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
476 for (j=0; j<4; ++j) {
480 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
483 for (j=0; j<4; ++j) {
487 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30a, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
490 for (j=0; j<4; ++j) {
494 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30b, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
500 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 31, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
506 if(in_file.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 32, no template load, run # " << theCurrentTemp.
entx[
k][
i].
runnum <<
ENDL;
return false;}
516 thePixelTemp_.push_back(theCurrentTemp);
518 postInit(thePixelTemp_);
525 LOGERROR(
"SiPixelTemplate") <<
"Error opening File" << tempfile <<
ENDL;
533 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 549 const int code_version={17};
552 auto db(dbobject.
reader());
558 for(
int m=0;
m<db.numOfTempl(); ++
m) {
563 for (i=0; i<20; ++
i) {
564 temp.
f = db.sVector()[db.index()];
565 theCurrentTemp.head.title[4*
i] = temp.
c[0];
566 theCurrentTemp.head.title[4*i+1] = temp.
c[1];
567 theCurrentTemp.head.title[4*i+2] = temp.
c[2];
568 theCurrentTemp.head.title[4*i+3] = temp.
c[3];
569 db.incrementIndex(1);
571 theCurrentTemp.head.title[79] =
'\0';
572 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.head.title <<
ENDL;
576 db >> theCurrentTemp.head.ID >> theCurrentTemp.head.templ_version >> theCurrentTemp.head.Bfield >> theCurrentTemp.head.NTy >> theCurrentTemp.head.NTyx >> theCurrentTemp.head.NTxx
577 >> theCurrentTemp.head.Dtype >> theCurrentTemp.head.Vbias >> theCurrentTemp.head.temperature >> theCurrentTemp.head.fluence >> theCurrentTemp.head.qscale
578 >> theCurrentTemp.head.s50 >> theCurrentTemp.head.lorywidth >> theCurrentTemp.head.lorxwidth >> theCurrentTemp.head.ysize >> theCurrentTemp.head.xsize >> theCurrentTemp.head.zsize;
580 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0A, no template load" <<
ENDL;
return false;}
582 LOGINFO(
"SiPixelTemplate") <<
"Loading Pixel Template File - " << theCurrentTemp.head.title
583 <<
" code version = "<<code_version
584 <<
" object version "<<theCurrentTemp.head.templ_version
587 if(theCurrentTemp.head.templ_version > 17) {
588 db >> theCurrentTemp.head.ss50 >> theCurrentTemp.head.lorybias >> theCurrentTemp.head.lorxbias >> theCurrentTemp.head.fbin[0] >> theCurrentTemp.head.fbin[1] >> theCurrentTemp.head.fbin[2];
590 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 0B, no template load" 591 <<
ENDL;
return false;}
593 theCurrentTemp.head.ss50 = theCurrentTemp.head.s50;
594 theCurrentTemp.head.lorybias = theCurrentTemp.head.lorywidth/2.f;
595 theCurrentTemp.head.lorxbias = theCurrentTemp.head.lorxwidth/2.f;
596 theCurrentTemp.head.fbin[0] = 1.50f;
597 theCurrentTemp.head.fbin[1] = 1.00f;
598 theCurrentTemp.head.fbin[2] = 0.85f;
604 <<
"Template ID = " << theCurrentTemp.head.ID <<
", Template Version " 605 << theCurrentTemp.head.templ_version <<
", Bfield = " 606 << theCurrentTemp.head.Bfield<<
", NTy = " << theCurrentTemp.head.NTy <<
", NTyx = " 607 << theCurrentTemp.head.NTyx<<
", NTxx = " << theCurrentTemp.head.NTxx <<
", Dtype = " 608 << theCurrentTemp.head.Dtype<<
", Bias voltage " << theCurrentTemp.head.Vbias <<
", temperature " 609 << theCurrentTemp.head.temperature <<
", fluence " << theCurrentTemp.head.fluence
610 <<
", Q-scaling factor " << theCurrentTemp.head.qscale
611 <<
", 1/2 multi dcol threshold " << theCurrentTemp.head.s50 <<
", 1/2 single dcol threshold " 612 << theCurrentTemp.head.ss50<<
", y Lorentz Width " << theCurrentTemp.head.lorywidth
613 <<
", y Lorentz Bias " << theCurrentTemp.head.lorybias
614 <<
", x Lorentz width " << theCurrentTemp.head.lorxwidth
615 <<
", x Lorentz Bias " << theCurrentTemp.head.lorxbias
616 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.head.fbin[0]
617 <<
", " << theCurrentTemp.head.fbin[1]
618 <<
", " << theCurrentTemp.head.fbin[2]
619 <<
", pixel x-size " << theCurrentTemp.head.xsize
620 <<
", y-size " << theCurrentTemp.head.ysize <<
", zsize " << theCurrentTemp.head.zsize <<
ENDL;
622 if(theCurrentTemp.head.templ_version < code_version) {
623 LOGINFO(
"SiPixelTemplate") <<
"code expects version "<< code_version <<
" finds " 624 << theCurrentTemp.head.templ_version <<
", load anyway " <<
ENDL;
629 #ifdef SI_PIXEL_TEMPLATE_USE_BOOST 632 theCurrentTemp.enty.resize(boost::extents[theCurrentTemp.head.NTy]);
633 theCurrentTemp.entx.resize(boost::extents[theCurrentTemp.head.NTyx][theCurrentTemp.head.NTxx]);
639 for (i=0; i < theCurrentTemp.head.NTy; ++
i) {
641 db >> theCurrentTemp.enty[
i].runnum >> theCurrentTemp.enty[
i].costrk[0]
642 >> theCurrentTemp.enty[
i].costrk[1] >> theCurrentTemp.enty[
i].costrk[2];
644 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 1, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
648 theCurrentTemp.enty[
i].alpha =
static_cast<float>(atan2((
double)theCurrentTemp.enty[i].costrk[2], (
double)theCurrentTemp.enty[i].costrk[0]));
650 theCurrentTemp.enty[
i].cotalpha = theCurrentTemp.enty[
i].costrk[0]/theCurrentTemp.enty[
i].costrk[2];
652 theCurrentTemp.enty[
i].beta =
static_cast<float>(atan2((
double)theCurrentTemp.enty[i].costrk[2], (
double)theCurrentTemp.enty[i].costrk[1]));
654 theCurrentTemp.enty[
i].cotbeta = theCurrentTemp.enty[
i].costrk[1]/theCurrentTemp.enty[
i].costrk[2];
656 db >> theCurrentTemp.enty[
i].qavg >> theCurrentTemp.enty[
i].pixmax >> theCurrentTemp.enty[
i].symax >> theCurrentTemp.enty[
i].dyone
657 >> theCurrentTemp.enty[
i].syone >> theCurrentTemp.enty[
i].sxmax >> theCurrentTemp.enty[
i].dxone >> theCurrentTemp.enty[
i].sxone;
659 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 2, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
661 db >> theCurrentTemp.enty[
i].dytwo >> theCurrentTemp.enty[
i].sytwo >> theCurrentTemp.enty[
i].dxtwo
662 >> theCurrentTemp.enty[
i].sxtwo >> theCurrentTemp.enty[
i].qmin >> theCurrentTemp.enty[
i].clsleny >> theCurrentTemp.enty[
i].clslenx;
665 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 3, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
667 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;}
669 for (j=0; j<2; ++j) {
671 db >> theCurrentTemp.enty[
i].ypar[j][0] >> theCurrentTemp.enty[
i].ypar[j][1]
672 >> theCurrentTemp.enty[
i].ypar[j][2] >> theCurrentTemp.enty[
i].ypar[j][3] >> theCurrentTemp.enty[
i].ypar[j][4];
674 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 4, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
678 for (j=0; j<9; ++j) {
680 for (k=0; k<
TYSIZE; ++
k) {db >> theCurrentTemp.enty[
i].ytemp[j][
k];}
682 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 5, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
685 for (j=0; j<2; ++j) {
687 db >> theCurrentTemp.enty[
i].xpar[j][0] >> theCurrentTemp.enty[
i].xpar[j][1]
688 >> theCurrentTemp.enty[
i].xpar[j][2] >> theCurrentTemp.enty[
i].xpar[j][3] >> theCurrentTemp.enty[
i].xpar[j][4];
690 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 6, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
695 for (j=0; j<9; ++j) {
697 for (k=0; k<
TXSIZE; ++
k) {db >> theCurrentTemp.enty[
i].xtemp[j][
k]; qavg_avg += theCurrentTemp.enty[
i].xtemp[j][
k];}
699 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 7, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
701 theCurrentTemp.enty[
i].qavg_avg = qavg_avg/9.;
703 for (j=0; j<4; ++j) {
705 db >> theCurrentTemp.enty[
i].yavg[j] >> theCurrentTemp.enty[
i].yrms[j] >> theCurrentTemp.enty[
i].ygx0[j] >> theCurrentTemp.enty[
i].ygsig[j];
707 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 8, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
710 for (j=0; j<4; ++j) {
712 db >> theCurrentTemp.enty[
i].yflpar[j][0] >> theCurrentTemp.enty[
i].yflpar[j][1] >> theCurrentTemp.enty[
i].yflpar[j][2]
713 >> theCurrentTemp.enty[
i].yflpar[j][3] >> theCurrentTemp.enty[
i].yflpar[j][4] >> theCurrentTemp.enty[
i].yflpar[j][5];
715 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 9, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
718 for (j=0; j<4; ++j) {
720 db >> theCurrentTemp.enty[
i].xavg[j] >> theCurrentTemp.enty[
i].xrms[j] >> theCurrentTemp.enty[
i].xgx0[j] >> theCurrentTemp.enty[
i].xgsig[j];
722 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 10, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
725 for (j=0; j<4; ++j) {
727 db >> theCurrentTemp.enty[
i].xflpar[j][0] >> theCurrentTemp.enty[
i].xflpar[j][1] >> theCurrentTemp.enty[
i].xflpar[j][2]
728 >> theCurrentTemp.enty[
i].xflpar[j][3] >> theCurrentTemp.enty[
i].xflpar[j][4] >> theCurrentTemp.enty[
i].xflpar[j][5];
730 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 11, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
733 for (j=0; j<4; ++j) {
735 db >> theCurrentTemp.enty[
i].chi2yavg[j] >> theCurrentTemp.enty[
i].chi2ymin[j] >> theCurrentTemp.enty[
i].chi2xavg[j] >> theCurrentTemp.enty[
i].chi2xmin[j];
737 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 12, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
740 for (j=0; j<4; ++j) {
742 db >> theCurrentTemp.enty[
i].yavgc2m[j] >> theCurrentTemp.enty[
i].yrmsc2m[j] >> theCurrentTemp.enty[
i].chi2yavgc2m[j] >> theCurrentTemp.enty[
i].chi2yminc2m[j];
744 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 13, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
747 for (j=0; j<4; ++j) {
749 db >> theCurrentTemp.enty[
i].xavgc2m[j] >> theCurrentTemp.enty[
i].xrmsc2m[j] >> theCurrentTemp.enty[
i].chi2xavgc2m[j] >> theCurrentTemp.enty[
i].chi2xminc2m[j];
751 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
754 for (j=0; j<4; ++j) {
756 db >> theCurrentTemp.enty[
i].yavggen[j] >> theCurrentTemp.enty[
i].yrmsgen[j] >> theCurrentTemp.enty[
i].ygx0gen[j] >> theCurrentTemp.enty[
i].ygsiggen[j];
758 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14a, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
761 for (j=0; j<4; ++j) {
763 db >> theCurrentTemp.enty[
i].xavggen[j] >> theCurrentTemp.enty[
i].xrmsgen[j] >> theCurrentTemp.enty[
i].xgx0gen[j] >> theCurrentTemp.enty[
i].xgsiggen[j];
765 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 14b, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
769 db >> theCurrentTemp.enty[
i].chi2yavgone >> theCurrentTemp.enty[
i].chi2yminone >> theCurrentTemp.enty[
i].chi2xavgone >> theCurrentTemp.enty[
i].chi2xminone >> theCurrentTemp.enty[
i].qmin2
770 >> theCurrentTemp.enty[
i].mpvvav >> theCurrentTemp.enty[
i].sigmavav >> theCurrentTemp.enty[
i].kappavav >> theCurrentTemp.enty[
i].r_qMeas_qTrue >> theCurrentTemp.enty[
i].spare[0];
772 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 15, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
774 db >> theCurrentTemp.enty[
i].mpvvav2 >> theCurrentTemp.enty[
i].sigmavav2 >> theCurrentTemp.enty[
i].kappavav2 >> theCurrentTemp.enty[
i].qbfrac[0] >> theCurrentTemp.enty[
i].qbfrac[1]
775 >> theCurrentTemp.enty[
i].qbfrac[2] >> theCurrentTemp.enty[
i].fracyone >> theCurrentTemp.enty[
i].fracxone >> theCurrentTemp.enty[
i].fracytwo >> theCurrentTemp.enty[
i].fracxtwo;
778 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 16, no template load, run # " << theCurrentTemp.enty[
i].runnum <<
ENDL;
return false;}
784 for (k=0; k < theCurrentTemp.head.NTyx; ++
k) {
786 for (i=0; i < theCurrentTemp.head.NTxx; ++
i) {
788 db >> theCurrentTemp.entx[
k][
i].runnum >> theCurrentTemp.entx[
k][
i].costrk[0]
789 >> theCurrentTemp.entx[
k][
i].costrk[1] >> theCurrentTemp.entx[
k][
i].costrk[2];
791 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 17, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
795 theCurrentTemp.entx[
k][
i].alpha =
static_cast<float>(atan2((
double)theCurrentTemp.entx[k][i].costrk[2], (
double)theCurrentTemp.entx[k][i].costrk[0]));
797 theCurrentTemp.entx[
k][
i].cotalpha = theCurrentTemp.entx[
k][
i].costrk[0]/theCurrentTemp.entx[
k][
i].costrk[2];
799 theCurrentTemp.entx[
k][
i].beta =
static_cast<float>(atan2((
double)theCurrentTemp.entx[k][i].costrk[2], (
double)theCurrentTemp.entx[k][i].costrk[1]));
801 theCurrentTemp.entx[
k][
i].cotbeta = theCurrentTemp.entx[
k][
i].costrk[1]/theCurrentTemp.entx[
k][
i].costrk[2];
803 db >> theCurrentTemp.entx[
k][
i].qavg >> theCurrentTemp.entx[
k][
i].pixmax >> theCurrentTemp.entx[
k][
i].symax >> theCurrentTemp.entx[
k][
i].dyone
804 >> theCurrentTemp.entx[
k][
i].syone >> theCurrentTemp.entx[
k][
i].sxmax >> theCurrentTemp.entx[
k][
i].dxone >> theCurrentTemp.entx[
k][
i].sxone;
806 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 18, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
808 db >> theCurrentTemp.entx[
k][
i].dytwo >> theCurrentTemp.entx[
k][
i].sytwo >> theCurrentTemp.entx[
k][
i].dxtwo
809 >> theCurrentTemp.entx[
k][
i].sxtwo >> theCurrentTemp.entx[
k][
i].qmin >> theCurrentTemp.entx[
k][
i].clsleny >> theCurrentTemp.entx[
k][
i].clslenx;
812 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 19, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
814 for (j=0; j<2; ++j) {
816 db >> theCurrentTemp.entx[
k][
i].ypar[j][0] >> theCurrentTemp.entx[
k][
i].ypar[j][1]
817 >> theCurrentTemp.entx[
k][
i].ypar[j][2] >> theCurrentTemp.entx[
k][
i].ypar[j][3] >> theCurrentTemp.entx[
k][
i].ypar[j][4];
819 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 20, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
822 for (j=0; j<9; ++j) {
824 for (l=0; l<
TYSIZE; ++
l) {db >> theCurrentTemp.entx[
k][
i].ytemp[j][
l];}
826 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 21, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
831 for (j=0; j<2; ++j) {
833 db >> theCurrentTemp.entx[
k][
i].xpar[j][0] >> theCurrentTemp.entx[
k][
i].xpar[j][1]
834 >> theCurrentTemp.entx[
k][
i].xpar[j][2] >> theCurrentTemp.entx[
k][
i].xpar[j][3] >> theCurrentTemp.entx[
k][
i].xpar[j][4];
837 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 22, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
841 for (j=0; j<9; ++j) {
843 for (l=0; l<
TXSIZE; ++
l) {db >> theCurrentTemp.entx[
k][
i].xtemp[j][
l]; qavg_avg += theCurrentTemp.entx[
k][
i].xtemp[j][
l];}
845 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 23, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
847 theCurrentTemp.entx[
k][
i].qavg_avg = qavg_avg/9.;
849 for (j=0; j<4; ++j) {
851 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];
853 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 24, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
856 for (j=0; j<4; ++j) {
858 db >> theCurrentTemp.entx[
k][
i].yflpar[j][0] >> theCurrentTemp.entx[
k][
i].yflpar[j][1] >> theCurrentTemp.entx[
k][
i].yflpar[j][2]
859 >> theCurrentTemp.entx[
k][
i].yflpar[j][3] >> theCurrentTemp.entx[
k][
i].yflpar[j][4] >> theCurrentTemp.entx[
k][
i].yflpar[j][5];
861 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 25, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
864 for (j=0; j<4; ++j) {
866 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];
868 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 26, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
871 for (j=0; j<4; ++j) {
873 db >> theCurrentTemp.entx[
k][
i].xflpar[j][0] >> theCurrentTemp.entx[
k][
i].xflpar[j][1] >> theCurrentTemp.entx[
k][
i].xflpar[j][2]
874 >> theCurrentTemp.entx[
k][
i].xflpar[j][3] >> theCurrentTemp.entx[
k][
i].xflpar[j][4] >> theCurrentTemp.entx[
k][
i].xflpar[j][5];
876 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 27, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
879 for (j=0; j<4; ++j) {
881 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];
883 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 28, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
886 for (j=0; j<4; ++j) {
888 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];
890 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 29, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
893 for (j=0; j<4; ++j) {
895 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];
897 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
900 for (j=0; j<4; ++j) {
902 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];
904 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30a, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
907 for (j=0; j<4; ++j) {
909 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];
911 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 30b, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
915 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
916 >> 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];
918 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 31, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
920 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]
921 >> 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;
924 if(db.fail()) {
LOGERROR(
"SiPixelTemplate") <<
"Error reading file 32, no template load, run # " << theCurrentTemp.entx[
k][
i].runnum <<
ENDL;
return false;}
932 thePixelTemp_.push_back(theCurrentTemp);
935 postInit(thePixelTemp_);
961 for (
auto & templ : thePixelTemp_) {
962 for (
auto iy=0; iy<templ.head.NTy; ++iy ) templ.cotbetaY[iy]=templ.enty[iy].cotbeta;
963 for (
auto iy=0; iy<templ.head.NTyx; ++iy ) templ.cotbetaX[iy]= templ.entx[iy][0].cotbeta;
964 for (
auto ix=0; ix<templ.head.NTxx; ++ix ) templ.cotalphaX[ix]=templ.entx[0][ix].cotalpha;
989 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx, imidy, imaxx;
990 float yratio, yxratio, xxratio, sxmax, qcorrect, qxtempcor, symax, chi2xavgone, chi2xminone, cota, cotb, cotalpha0, cotbeta0;
993 float chi2xavg[4], chi2xmin[4], chi2xavgc2m[4], chi2xminc2m[4];
997 if(
id != id_current_ || cotalpha != cota_current_ || cotbeta != cotb_current_) {
999 cota_current_ = cotalpha; cotb_current_ = cotbeta; success_ =
true;
1001 if(
id != id_current_) {
1006 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
1010 if(
id == thePixelTemp_[i].head.ID) {
1017 qscale_ = thePixelTemp_[index_id_].head.qscale;
1021 s50_ = thePixelTemp_[index_id_].head.s50;
1025 for(j=0; j<3; ++j) {fbin_[j] = thePixelTemp_[index_id_].head.fbin[j];}
1030 xsize_ = thePixelTemp_[index_id_].head.xsize;
1031 ysize_ = thePixelTemp_[index_id_].head.ysize;
1032 zsize_ = thePixelTemp_[index_id_].head.zsize;
1039 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1040 if(index_id_ < 0 || index_id_ >= (
int)thePixelTemp_.size()) {
1041 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::interpolate can't find needed template ID = " <<
id << std::endl;
1044 assert(index_id_ >= 0 && index_id_ < (
int)thePixelTemp_.size());
1053 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
1054 qcorrect=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta*cotbeta+cotalpha0*cotalpha0));
1061 switch(thePixelTemp_[index_id_].head.Dtype) {
1063 if(cotbeta < 0.
f) {flip_y =
true;}
1076 if(locBx*locBz < 0.
f) {
1088 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1089 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
1091 std::cout <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
1095 Ny = thePixelTemp_[index_id_].head.NTy;
1096 Nyx = thePixelTemp_[index_id_].head.NTyx;
1097 Nxx = thePixelTemp_[index_id_].head.NTxx;
1099 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1100 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
1101 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
1104 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
1114 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
1122 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
1124 for (i=0; i<Ny-1; ++
i) {
1126 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
1129 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
1133 }
else { success_ =
false; }
1141 qavg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg;
1143 symax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].symax + yratio*thePixelTemp_[index_id_].enty[ihigh].symax;
1145 sxmax = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sxmax + yratio*thePixelTemp_[index_id_].enty[ihigh].sxmax;
1146 dyone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dyone + yratio*thePixelTemp_[index_id_].enty[ihigh].dyone;
1147 if(flip_y) {dyone_ = -dyone_;}
1148 syone_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].syone + yratio*thePixelTemp_[index_id_].enty[ihigh].syone;
1149 dytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].dytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].dytwo;
1150 if(flip_y) {dytwo_ = -dytwo_;}
1151 sytwo_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sytwo + yratio*thePixelTemp_[index_id_].enty[ihigh].sytwo;
1152 qmin_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin;
1154 qmin2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qmin2 + yratio*thePixelTemp_[index_id_].enty[ihigh].qmin2;
1156 mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav;
1157 mpvvav_ *= qcorrect;
1158 sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav;
1159 kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav;
1160 mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2;
1161 mpvvav2_ *= qcorrect;
1162 sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2;
1163 kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2;
1164 clsleny_ = fminf(thePixelTemp_[index_id_].enty[ilow].clsleny, thePixelTemp_[index_id_].enty[ihigh].clsleny);
1165 qavg_avg_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].qavg_avg + yratio*thePixelTemp_[index_id_].enty[ihigh].qavg_avg;
1166 qavg_avg_ *= qcorrect;
1167 for(i=0; i<2 ; ++
i) {
1168 for(j=0; j<5 ; ++j) {
1171 yparl_[1-
i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[
i][j];
1172 yparh_[1-
i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[
i][j];
1174 yparl_[
i][j] = thePixelTemp_[index_id_].enty[ilow].ypar[
i][j];
1175 yparh_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].ypar[
i][j];
1178 xparly0_[1-
i][j] = thePixelTemp_[index_id_].enty[ilow].xpar[
i][j];
1179 xparhy0_[1-
i][j] = thePixelTemp_[index_id_].enty[ihigh].xpar[
i][j];
1181 xparly0_[
i][j] = thePixelTemp_[index_id_].enty[ilow].xpar[
i][j];
1182 xparhy0_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].xpar[
i][j];
1187 for(i=0; i<4; ++
i) {
1188 yavg_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavg[i];
1189 if(flip_y) {yavg_[
i] = -yavg_[
i];}
1190 yrms_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrms[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrms[i];
1196 chi2yavg_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavg[i];
1197 chi2ymin_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2ymin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2ymin[i];
1198 chi2xavg[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavg[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavg[i];
1199 chi2xmin[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xmin[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xmin[i];
1200 yavgc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yavgc2m[i];
1201 if(flip_y) {yavgc2m_[
i] = -yavgc2m_[
i];}
1202 yrmsc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].yrmsc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].yrmsc2m[i];
1203 chi2yavgc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgc2m[i];
1205 chi2yminc2m_[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminc2m[i];
1207 chi2xavgc2m[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgc2m[i];
1208 chi2xminc2m[
i]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminc2m[i] + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminc2m[i];
1209 for(j=0; j<6 ; ++j) {
1210 yflparl_[
i][j] = thePixelTemp_[index_id_].enty[ilow].yflpar[
i][j];
1211 yflparh_[
i][j] = thePixelTemp_[index_id_].enty[ihigh].yflpar[
i][j];
1215 if(flip_y && (j == 0 || j == 2 || j == 4)) {
1216 yflparl_[
i][j] = - yflparl_[
i][j];
1217 yflparh_[
i][j] = - yflparh_[
i][j];
1224 chi2yavgone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yavgone;
1225 chi2yminone_=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2yminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2yminone;
1226 chi2xavgone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xavgone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xavgone;
1227 chi2xminone=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].chi2xminone + yratio*thePixelTemp_[index_id_].enty[ihigh].chi2xminone;
1234 for(i=0; i<9; ++
i) {
1237 ytemp_[
i][
BYM2] = 0.f;
1238 ytemp_[
i][
BYM1] = 0.f;
1239 for(j=0; j<
TYSIZE; ++j) {
1244 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];
1246 ytemp_[
i][j+2]=(1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].ytemp[i][j] + yratio*thePixelTemp_[index_id_].enty[ihigh].ytemp[i][j];
1256 if(abs_cotb_ >= thePixelTemp_[index_id_].entx[Nyx-1][0].cotbeta) {
1261 }
else if(abs_cotb_ >= thePixelTemp_[index_id_].entx[0][0].cotbeta) {
1263 for (i=0; i<Nyx-1; ++
i) {
1265 if( thePixelTemp_[index_id_].entx[i][0].cotbeta <= abs_cotb_ && abs_cotb_ < thePixelTemp_[index_id_].entx[i+1][0].cotbeta) {
1268 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);
1279 if(cota >= thePixelTemp_[index_id_].entx[0][Nxx-1].cotalpha) {
1287 if(cota >= thePixelTemp_[index_id_].entx[0][0].cotalpha) {
1289 for (i=0; i<Nxx-1; ++
i) {
1291 if( thePixelTemp_[index_id_].entx[0][i].cotalpha <= cota && cota < thePixelTemp_[index_id_].entx[0][i+1].cotalpha) {
1294 xxratio = (cota - thePixelTemp_[index_id_].entx[0][
i].cotalpha)/(thePixelTemp_[index_id_].entx[0][i+1].cotalpha - thePixelTemp_[index_id_].entx[0][i].cotalpha);
1298 }
else { success_ =
false; }
1310 sxparmax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].sxmax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].sxmax;
1312 if(thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax != 0.
f) {sxmax_=sxmax_/thePixelTemp_[index_id_].entx[imaxx][imidy].sxmax*sxmax;}
1313 symax_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[imaxx][ilow].symax + xxratio*thePixelTemp_[index_id_].entx[imaxx][ihigh].symax;
1314 if(thePixelTemp_[index_id_].entx[imaxx][imidy].symax != 0.
f) {symax_=symax_/thePixelTemp_[index_id_].entx[imaxx][imidy].symax*symax;}
1315 dxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxone;
1316 if(flip_x) {dxone_ = -dxone_;}
1317 sxone_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxone + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxone;
1318 dxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].dxtwo;
1319 if(flip_x) {dxtwo_ = -dxtwo_;}
1320 sxtwo_ = (1.f - xxratio)*thePixelTemp_[index_id_].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index_id_].entx[0][ihigh].sxtwo;
1321 clslenx_ = fminf(thePixelTemp_[index_id_].entx[0][ilow].clslenx, thePixelTemp_[index_id_].entx[0][ihigh].clslenx);
1323 for(i=0; i<2 ; ++
i) {
1324 for(j=0; j<5 ; ++j) {
1327 xpar0_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][imidy].xpar[
i][j];
1328 xparl_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][ilow].xpar[
i][j];
1329 xparh_[1-
i][j] = thePixelTemp_[index_id_].entx[imaxx][ihigh].xpar[
i][j];
1331 xpar0_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][imidy].xpar[
i][j];
1332 xparl_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][ilow].xpar[
i][j];
1333 xparh_[
i][j] = thePixelTemp_[index_id_].entx[imaxx][ihigh].xpar[
i][j];
1340 pixmax_=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iylow][ihigh].pixmax)
1341 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].pixmax);
1344 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)
1345 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].r_qMeas_qTrue + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].r_qMeas_qTrue);
1348 for(i=0; i<4; ++
i) {
1349 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])
1350 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavg[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavg[
i]);
1351 if(flip_x) {xavg_[
i] = -xavg_[
i];}
1353 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])
1354 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrms[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrms[
i]);
1362 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])
1363 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xavgc2m[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xavgc2m[
i]);
1364 if(flip_x) {xavgc2m_[
i] = -xavgc2m_[
i];}
1366 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])
1367 +yxratio*((1.
f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].xrmsc2m[
i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].xrmsc2m[
i]);
1383 chi2xavg_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavg[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavg[i]);
1384 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];}
1386 chi2xmin_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xmin[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xmin[i]);
1387 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];}
1389 chi2xavgc2m_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgc2m[i]);
1390 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];}
1392 chi2xminc2m_[
i]=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminc2m[i] + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminc2m[i]);
1393 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];}
1395 for(j=0; j<6 ; ++j) {
1396 xflparll_[
i][j] = thePixelTemp_[index_id_].entx[iylow][ilow].xflpar[
i][j];
1397 xflparlh_[
i][j] = thePixelTemp_[index_id_].entx[iylow][ihigh].xflpar[
i][j];
1398 xflparhl_[
i][j] = thePixelTemp_[index_id_].entx[iyhigh][ilow].xflpar[
i][j];
1399 xflparhh_[
i][j] = thePixelTemp_[index_id_].entx[iyhigh][ihigh].xflpar[
i][j];
1401 if(flip_x && (j == 0 || j == 2 || j == 4)) {
1402 xflparll_[
i][j] = -xflparll_[
i][j];
1403 xflparlh_[
i][j] = -xflparlh_[
i][j];
1404 xflparhl_[
i][j] = -xflparhl_[
i][j];
1405 xflparhh_[
i][j] = -xflparhh_[
i][j];
1413 chi2xavgone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xavgone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xavgone);
1414 if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone != 0.
f) {chi2xavgone_=chi2xavgone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xavgone*chi2xavgone;}
1416 chi2xminone_=((1.f - xxratio)*thePixelTemp_[index_id_].entx[iyhigh][ilow].chi2xminone + xxratio*thePixelTemp_[index_id_].entx[iyhigh][ihigh].chi2xminone);
1417 if(thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone != 0.
f) {chi2xminone_=chi2xminone_/thePixelTemp_[index_id_].entx[iyhigh][imidy].chi2xminone*chi2xminone;}
1427 cotbeta0 = thePixelTemp_[index_id_].entx[iyhigh][0].cotbeta;
1428 qxtempcor=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta0*cotbeta0+cotalpha*cotalpha));
1430 for(i=0; i<9; ++
i) {
1433 xtemp_[
i][
BXM2] = 0.f;
1434 xtemp_[
i][
BXM1] = 0.f;
1435 for(j=0; j<
TXSIZE; ++j) {
1440 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]);
1442 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]);
1447 lorywidth_ = thePixelTemp_[index_id_].head.lorywidth;
1448 lorxwidth_ = thePixelTemp_[index_id_].head.lorxwidth;
1449 lorybias_ = thePixelTemp_[index_id_].head.lorybias;
1450 lorxbias_ = thePixelTemp_[index_id_].head.lorxbias;
1451 if(flip_x) {lorxwidth_ = -lorxwidth_; lorxbias_ = -lorxbias_;}
1452 if(flip_y) {lorywidth_ = -lorywidth_; lorybias_ = -lorybias_;}
1478 if(cotbeta < 0.
f) {locBx = -1.f;}
1480 if(cotalpha < 0.
f) {locBz = -locBx;}
1520 float sigi, sigi2, sigi3, sigi4, symax, qscale;
1524 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1525 if(fypix < 2 || fypix >=
BYM2) {
1526 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with fypix = " << fypix << std::endl;
1529 assert(fypix > 1 && fypix <
BYM2);
1531 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1532 if(lypix < fypix || lypix >=
BYM2) {
1533 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with lypix/fypix = " << lypix <<
"/" << fypix << std::endl;
1536 assert(lypix >= fypix && lypix <
BYM2);
1542 if(symax_ > syparmax_) {symax = syparmax_;}
1546 for(i=fypix-2; i<=lypix+2; ++
i) {
1547 if(i < fypix || i > lypix) {
1551 ysig2[
i] = s50_*s50_;
1553 if(ysum[i] < symax) {
1558 qscale = ysum[
i]/symax;
1560 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1562 ysig2[
i] = (1.f-yratio_)*
1563 (yparl_[0][0]+yparl_[0][1]*sigi+yparl_[0][2]*sigi2+yparl_[0][3]*sigi3+yparl_[0][4]*sigi4)
1565 (yparh_[0][0]+yparh_[0][1]*sigi+yparh_[0][2]*sigi2+yparh_[0][3]*sigi3+yparh_[0][4]*sigi4);
1567 ysig2[
i] = (1.f-yratio_)*
1568 (yparl_[1][0]+yparl_[1][1]*sigi+yparl_[1][2]*sigi2+yparl_[1][3]*sigi3+yparl_[1][4]*sigi4)
1570 (yparh_[1][0]+yparh_[1][1]*sigi+yparh_[1][2]*sigi2+yparh_[1][3]*sigi3+yparh_[1][4]*sigi4);
1573 if(ysum[i] > sythr) {ysig2[
i] = 1.e8;}
1574 if(ysig2[i] <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg y-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1575 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1597 float sigi, sigi2, sigi3, sigi4, symax, qscale, err2;
1601 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1602 if(index < 2 || index >=
BYM2) {
1603 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ysigma2 called with index = " << index << std::endl;
1606 assert(index > 1 && index <
BYM2);
1612 if(symax_ > syparmax_) {symax = syparmax_;}
1616 if(qpixel < symax) {
1621 qscale = qpixel/symax;
1623 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1625 err2 = (1.f-yratio_)*
1626 (yparl_[0][0]+yparl_[0][1]*sigi+yparl_[0][2]*sigi2+yparl_[0][3]*sigi3+yparl_[0][4]*sigi4)
1628 (yparh_[0][0]+yparh_[0][1]*sigi+yparh_[0][2]*sigi2+yparh_[0][3]*sigi3+yparh_[0][4]*sigi4);
1630 err2 = (1.f-yratio_)*
1631 (yparl_[1][0]+yparl_[1][1]*sigi+yparl_[1][2]*sigi2+yparl_[1][3]*sigi3+yparl_[1][4]*sigi4)
1633 (yparh_[1][0]+yparh_[1][1]*sigi+yparh_[1][2]*sigi2+yparh_[1][3]*sigi3+yparh_[1][4]*sigi4);
1636 if(ysig2 <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg y-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1637 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1663 float sigi, sigi2, sigi3, sigi4, yint, sxmax, x0, qscale;
1667 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1668 if(fxpix < 2 || fxpix >=
BXM2) {
1669 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xsigma2 called with fxpix = " << fxpix << std::endl;
1672 assert(fxpix > 1 && fxpix <
BXM2);
1674 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1675 if(lxpix < fxpix || lxpix >=
BXM2) {
1676 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xsigma2 called with lxpix/fxpix = " << lxpix <<
"/" << fxpix << std::endl;
1679 assert(lxpix >= fxpix && lxpix <
BXM2);
1685 if(sxmax_ > sxparmax_) {sxmax = sxparmax_;}
1689 for(i=fxpix-2; i<=lxpix+2; ++
i) {
1690 if(i < fxpix || i > lxpix) {
1694 xsig2[
i] = s50_*s50_;
1696 if(xsum[i] < sxmax) {
1701 qscale = xsum[
i]/sxmax;
1703 sigi2 = sigi*sigi; sigi3 = sigi2*sigi; sigi4 = sigi3*sigi;
1708 yint = (1.f-yratio_)*
1709 (xparly0_[0][0]+xparly0_[0][1]*sigi+xparly0_[0][2]*sigi2+xparly0_[0][3]*sigi3+xparly0_[0][4]*sigi4)
1711 (xparhy0_[0][0]+xparhy0_[0][1]*sigi+xparhy0_[0][2]*sigi2+xparhy0_[0][3]*sigi3+xparhy0_[0][4]*sigi4);
1713 yint = (1.f-yratio_)*
1714 (xparly0_[1][0]+xparly0_[1][1]*sigi+xparly0_[1][2]*sigi2+xparly0_[1][3]*sigi3+xparly0_[1][4]*sigi4)
1716 (xparhy0_[1][0]+xparhy0_[1][1]*sigi+xparhy0_[1][2]*sigi2+xparhy0_[1][3]*sigi3+xparhy0_[1][4]*sigi4);
1722 xsig2[
i] = (1.f-xxratio_)*
1723 (xparl_[0][0]+xparl_[0][1]*sigi+xparl_[0][2]*sigi2+xparl_[0][3]*sigi3+xparl_[0][4]*sigi4)
1725 (xparh_[0][0]+xparh_[0][1]*sigi+xparh_[0][2]*sigi2+xparh_[0][3]*sigi3+xparh_[0][4]*sigi4);
1727 xsig2[
i] = (1.f-xxratio_)*
1728 (xparl_[1][0]+xparl_[1][1]*sigi+xparl_[1][2]*sigi2+xparl_[1][3]*sigi3+xparl_[1][4]*sigi4)
1730 (xparh_[1][0]+xparh_[1][1]*sigi+xparh_[1][2]*sigi2+xparh_[1][3]*sigi3+xparh_[1][4]*sigi4);
1736 x0 = xpar0_[0][0]+xpar0_[0][1]*sigi+xpar0_[0][2]*sigi2+xpar0_[0][3]*sigi3+xpar0_[0][4]*sigi4;
1738 x0 = xpar0_[1][0]+xpar0_[1][1]*sigi+xpar0_[1][2]*sigi2+xpar0_[1][3]*sigi3+xpar0_[1][4]*sigi4;
1743 if(x0 != 0.
f) {xsig2[
i] = xsig2[
i]/x0 * yint;}
1745 if(xsum[i] > sxthr) {xsig2[
i] = 1.e8;}
1746 if(xsig2[i] <= 0.
f) {
LOGERROR(
"SiPixelTemplate") <<
"neg x-error-squared, id = " << id_current_ <<
", index = " << index_id_ <<
1747 ", cot(alpha) = " << cota_current_ <<
", cot(beta) = " << cotb_current_ <<
", sigi = " << sigi <<
ENDL;}
1771 float qfl, qfl2, qfl3, qfl4, qfl5, dy;
1775 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1776 if(binq < 0 || binq > 3) {
1777 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::yflcorr called with binq = " << binq << std::endl;
1780 assert(binq >= 0 && binq < 4);
1782 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1783 if(fabs((
double)qfly) > 1.) {
1784 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::yflcorr called with qfly = " << qfly << std::endl;
1787 assert(fabs((
double)qfly) <= 1.);
1794 if(qfl < -0.9
f) {qfl = -0.9f;}
1795 if(qfl > 0.9
f) {qfl = 0.9f;}
1799 qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl;
1800 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)
1801 + yratio_*(yflparh_[binq][0]+yflparh_[binq][1]*qfl+yflparh_[binq][2]*qfl2+yflparh_[binq][3]*qfl3+yflparh_[binq][4]*qfl4+yflparh_[binq][5]*qfl5);
1823 float qfl, qfl2, qfl3, qfl4, qfl5, dx;
1827 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1828 if(binq < 0 || binq > 3) {
1829 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xflcorr called with binq = " << binq << std::endl;
1832 assert(binq >= 0 && binq < 4);
1834 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1835 if(fabs((
double)qflx) > 1.) {
1836 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xflcorr called with qflx = " << qflx << std::endl;
1839 assert(fabs((
double)qflx) <= 1.);
1846 if(qfl < -0.9
f) {qfl = -0.9f;}
1847 if(qfl > 0.9
f) {qfl = 0.9f;}
1851 qfl2 = qfl*qfl; qfl3 = qfl2*qfl; qfl4 = qfl3*qfl; qfl5 = qfl4*qfl;
1852 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)
1853 + xxratio_*(xflparlh_[binq][0]+xflparlh_[binq][1]*qfl+xflparlh_[binq][2]*qfl2+xflparlh_[binq][3]*qfl3+xflparlh_[binq][4]*qfl4+xflparlh_[binq][5]*qfl5))
1854 + 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)
1855 + xxratio_*(xflparhh_[binq][0]+xflparhh_[binq][1]*qfl+xflparhh_[binq][2]*qfl2+xflparhh_[binq][3]*qfl3+xflparhh_[binq][4]*qfl4+xflparhh_[binq][5]*qfl5));
1879 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1880 if(fybin < 0 || fybin > 40) {
1881 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp called with fybin = " << fybin << std::endl;
1884 assert(fybin >= 0 && fybin < 41);
1886 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1887 if(lybin < 0 || lybin > 40) {
1888 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp called with lybin = " << lybin << std::endl;
1891 assert(lybin >= 0 && lybin < 41);
1896 for(i=0; i<9; ++
i) {
1897 for(j=0; j<
BYSIZE; ++j) {
1898 ytemplate[i+16][j]=ytemp_[
i][j];
1901 for(i=0; i<8; ++
i) {
1902 ytemplate[i+8][
BYM1] = 0.f;
1903 for(j=0; j<
BYM1; ++j) {
1904 ytemplate[i+8][j]=ytemp_[
i][j+1];
1907 for(i=1; i<9; ++
i) {
1908 ytemplate[i+24][0] = 0.f;
1909 for(j=0; j<
BYM1; ++j) {
1910 ytemplate[i+24][j+1]=ytemp_[
i][j];
1917 for(i=0; i<8; ++
i) {
1918 ytemplate[
i][
BYM2] = 0.f;
1919 ytemplate[
i][
BYM1] = 0.f;
1920 for(j=0; j<
BYM2; ++j) {
1921 ytemplate[
i][j]=ytemp_[
i][j+2];
1926 for(i=1; i<9; ++
i) {
1927 ytemplate[i+32][0] = 0.f;
1928 ytemplate[i+32][1] = 0.f;
1929 for(j=0; j<
BYM2; ++j) {
1930 ytemplate[i+32][j+2]=ytemp_[
i][j];
1957 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1958 if(fxbin < 0 || fxbin > 40) {
1959 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp called with fxbin = " << fxbin << std::endl;
1962 assert(fxbin >= 0 && fxbin < 41);
1964 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 1965 if(lxbin < 0 || lxbin > 40) {
1966 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp called with lxbin = " << lxbin << std::endl;
1969 assert(lxbin >= 0 && lxbin < 41);
1974 for(i=0; i<9; ++
i) {
1975 for(j=0; j<
BXSIZE; ++j) {
1976 xtemplate[i+16][j]=xtemp_[
i][j];
1979 for(i=0; i<8; ++
i) {
1980 xtemplate[i+8][
BXM1] = 0.f;
1981 for(j=0; j<
BXM1; ++j) {
1982 xtemplate[i+8][j]=xtemp_[
i][j+1];
1985 for(i=1; i<9; ++
i) {
1986 xtemplate[i+24][0] = 0.f;
1987 for(j=0; j<
BXM1; ++j) {
1988 xtemplate[i+24][j+1]=xtemp_[
i][j];
1995 for(i=0; i<8; ++
i) {
1996 xtemplate[
i][
BXM2] = 0.f;
1997 xtemplate[
i][
BXM1] = 0.f;
1998 for(j=0; j<
BXM2; ++j) {
1999 xtemplate[
i][j]=xtemp_[
i][j+2];
2004 for(i=1; i<9; ++
i) {
2005 xtemplate[i+32][0] = 0.f;
2006 xtemplate[i+32][1] = 0.f;
2007 for(j=0; j<
BXM2; ++j) {
2008 xtemplate[i+32][j+2]=xtemp_[
i][j];
2033 float qedge = 2.*s50_;
2036 for(j=0; j<
BYSIZE; ++j) {
2037 if(ytemp_[4][j] > sigmax) {
2038 sigmax = ytemp_[4][j];
2042 if(sigmax < qedge) {qedge = s50_;}
2043 if(sigmax < qedge || jmax<1 || jmax>
BYM2) {
return -1;}
2049 for(j=jmax+1; j<
BYM1; ++j) {
2050 if(ytemp_[4][j] < qedge)
break;
2056 for(j=jmax-1; j>0; --j) {
2057 if(ytemp_[4][j] < qedge)
break;
2061 return (jbeg+jend)/2;
2082 float qedge = 2.*s50_;
2085 for(j=0; j<
BXSIZE; ++j) {
2086 if(xtemp_[4][j] > sigmax) {
2087 sigmax = xtemp_[4][j];
2091 if(sigmax < qedge) {qedge = s50_;}
2092 if(sigmax < qedge || jmax<1 || jmax>
BXM2) {
return -1;}
2098 for(j=jmax+1; j<
BXM1; ++j) {
2099 if(xtemp_[4][j] < qedge)
break;
2105 for(j=jmax-1; j>0; --j) {
2106 if(xtemp_[4][j] < qedge)
break;
2110 return (jbeg+jend)/2;
2128 int ioff0, ioffp, ioffm;
2132 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2133 if(nypix < 1 || nypix >=
BYM3) {
2134 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::ytemp3d called with nypix = " << nypix << std::endl;
2137 assert(nypix > 0 && nypix <
BYM3);
2142 float diff = fabsf(nypix - clsleny_)/2. + 1.f;
2143 int nshift = (
int)diff;
2144 if((diff - nshift) > 0.5f) {++nshift;}
2148 nybins_ = 9 + 16*nshift;
2152 temp2dy_.resize(boost::extents[nybins_][
BYSIZE]);
2158 for(i=0; i<9; ++
i) {
2159 for(j=0; j<
BYSIZE; ++j) {
2160 temp2dy_[i+ioff0][j]=ytemp_[
i][j];
2166 for(k=1; k<=nshift; ++
k) {
2168 for(i=0; i<8; ++
i) {
2169 for(j=0; j<
k; ++j) {
2170 temp2dy_[i+ioffm][
BYM1-j] = 0.f;
2172 for(j=0; j<BYSIZE-
k; ++j) {
2173 temp2dy_[i+ioffm][j]=ytemp_[
i][j+
k];
2177 for(i=1; i<9; ++
i) {
2178 for(j=0; j<
k; ++j) {
2179 temp2dy_[i+ioffp][j] = 0.f;
2181 for(j=0; j<BYSIZE-
k; ++j) {
2182 temp2dy_[i+ioffp][j+
k]=ytemp_[
i][j];
2202 if(i >= 0 && i < nybins_ && j <= i) {
2204 ytemplate[
k]=temp2dy_[
i][
k]+temp2dy_[j][
k];
2229 int ioff0, ioffp, ioffm;
2233 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2234 if(nxpix < 1 || nxpix >=
BXM3) {
2235 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::xtemp3d called with nxpix = " << nxpix << std::endl;
2238 assert(nxpix > 0 && nxpix <
BXM3);
2243 float diff = fabsf(nxpix - clslenx_)/2.f + 1.f;
2244 int nshift = (
int)diff;
2245 if((diff - nshift) > 0.5f) {++nshift;}
2249 nxbins_ = 9 + 16*nshift;
2253 temp2dx_.resize(boost::extents[nxbins_][
BXSIZE]);
2259 for(i=0; i<9; ++
i) {
2260 for(j=0; j<
BXSIZE; ++j) {
2261 temp2dx_[i+ioff0][j]=xtemp_[
i][j];
2267 for(k=1; k<=nshift; ++
k) {
2269 for(i=0; i<8; ++
i) {
2270 for(j=0; j<
k; ++j) {
2271 temp2dx_[i+ioffm][
BXM1-j] = 0.f;
2273 for(j=0; j<BXSIZE-
k; ++j) {
2274 temp2dx_[i+ioffm][j]=xtemp_[
i][j+
k];
2278 for(i=1; i<9; ++
i) {
2279 for(j=0; j<
k; ++j) {
2280 temp2dx_[i+ioffp][j] = 0.f;
2282 for(j=0; j<BXSIZE-
k; ++j) {
2283 temp2dx_[i+ioffp][j+
k]=xtemp_[
i][j];
2305 if(i >= 0 && i < nxbins_ && j <= i) {
2307 xtemplate[
k]=temp2dx_[
i][
k]+temp2dx_[j][
k];
2350 float& sigmay,
float& deltay,
float& sigmax,
float& deltax,
float& sy1,
float& dy1,
float& sy2,
2351 float& dy2,
float& sx1,
float& dx1,
float& sx2,
float& dx2)
2359 for(
int i=0;
i<(
int)thePixelTemp_.size(); ++
i) {
2360 if(
id == thePixelTemp_[
i].head.ID) {
2366 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2367 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2368 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::qbin can't find needed template ID = " <<
id << std::endl;
2371 assert(index >= 0 && index < (
int)thePixelTemp_.size());
2377 auto const & templ = thePixelTemp_[
index];
2385 auto cotalpha0 = thePixelTemp_[
index].enty[0].cotalpha;
2386 auto qcorrect=
std::sqrt((1.
f+cotbeta*cotbeta+cotalpha*cotalpha)/(1.
f+cotbeta*cotbeta+cotalpha0*cotalpha0));
2390 float cota = cotalpha;
2391 float cotb = abs_cotb_;
2392 bool flip_x =
false;
2393 bool flip_y =
false;
2394 switch(thePixelTemp_[index_id_].head.Dtype) {
2396 if(cotbeta < 0.
f) {flip_y =
true;}
2409 if(locBx*locBz < 0.
f) {
2421 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2422 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
2424 std::cout <<
"SiPixelTemplate::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
2432 auto qscale = thePixelTemp_[
index].head.qscale;
2442 auto Ny = thePixelTemp_[
index].head.NTy;
2443 auto Nyx = thePixelTemp_[
index].head.NTyx;
2444 auto Nxx = thePixelTemp_[
index].head.NTxx;
2446 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2447 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
2448 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
2451 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
2461 auto j = std::lower_bound(templ.cotbetaY,templ.cotbetaY+Ny,cotb);
2462 if (j==templ.cotbetaY+Ny) { --j; yratio = 1.f; }
2463 else if (j==templ.cotbetaY) { ++j; yratio = 0.f;}
2464 else { yratio = (cotb - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2466 ihigh = j-templ.cotbetaY;
2474 dy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dyone + yratio*thePixelTemp_[index].enty[ihigh].dyone;
2475 if(flip_y) {dy1 = -dy1;}
2476 sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone;
2477 dy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].dytwo + yratio*thePixelTemp_[index].enty[ihigh].dytwo;
2478 if(flip_y) {dy2 = -dy2;}
2479 sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo;
2481 auto qavg = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qavg + yratio*thePixelTemp_[index].enty[ihigh].qavg;
2483 auto qmin = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin + yratio*thePixelTemp_[index].enty[ihigh].qmin;
2485 auto qmin2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].qmin2 + yratio*thePixelTemp_[index].enty[ihigh].qmin2;
2489 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2490 if(qavg <= 0.
f || qmin <= 0.
f) {
2491 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::qbin, qavg or qmin <= 0," 2492 <<
" Probably someone called the generic pixel reconstruction with an illegal trajectory state" << std::endl;
2495 assert(qavg > 0.
f && qmin > 0.
f);
2500 auto qtotal = qscale*qclus;
2503 auto fq = qtotal/qavg;
2522 auto yavggen =(1.f - yratio)*thePixelTemp_[index].enty[ilow].yavggen[binq] + yratio*thePixelTemp_[index].enty[ihigh].yavggen[binq];
2523 if(flip_y) {yavggen = -yavggen;}
2524 auto yrmsgen =(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrmsgen[binq] + yratio*thePixelTemp_[index].enty[ihigh].yrmsgen[binq];
2535 auto j = std::lower_bound(templ.cotbetaX,templ.cotbetaX+Nyx,acotb);
2536 if (j==templ.cotbetaX+Nyx) { --j; yxratio = 1.f; }
2537 else if (j==templ.cotbetaX) { ++j; yxratio = 0.f;}
2538 else { yxratio = (acotb - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2540 iyhigh = j-templ.cotbetaX;
2550 auto j = std::lower_bound(templ.cotalphaX,templ.cotalphaX+Nxx,cotalpha);
2551 if (j==templ.cotalphaX+Nxx) { --j; xxratio = 1.f; }
2552 else if (j==templ.cotalphaX) { ++j; xxratio = 0.f;}
2553 else { xxratio = (cota - (*(j-1)) )/( (*j) - (*(j-1)) ) ; }
2555 ihigh = j-templ.cotalphaX;
2561 dx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxone + xxratio*thePixelTemp_[index].entx[0][ihigh].dxone;
2562 if(flip_x) {dx1 = -dx1;}
2563 sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone;
2564 dx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].dxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].dxtwo;
2565 if(flip_x) {dx2 = -dx2;}
2566 sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo;
2570 pixmx=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].pixmax + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].pixmax)
2571 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].pixmax + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].pixmax);
2573 auto xavggen = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xavggen[binq] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xavggen[binq])
2574 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xavggen[binq] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xavggen[binq]);
2575 if(flip_x) {xavggen = -xavggen;}
2577 auto xrmsgen = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xrmsgen[binq] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xrmsgen[binq])
2578 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xrmsgen[binq] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xrmsgen[binq]);
2584 sigmay = yrmsgen; deltay = yavggen;
2586 sigmax = xrmsgen; deltax = xavggen;
2590 if(qtotal < 0.95
f*qmin) {binq = 5;}
else {
if(qtotal < 0.95
f*qmin2) {binq = 4;}}
2627 float& sigmay,
float& deltay,
float& sigmax,
float& deltax,
float& sy1,
float& dy1,
float& sy2,
2628 float& dy2,
float& sx1,
float& dx1,
float& sx2,
float& dx2)
2637 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2638 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2690 float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz, locBx;
2693 if(cotbeta < 0.
f) {locBx = -1.f;}
2695 if(cotalpha < 0.
f) {locBz = -locBx;}
2697 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2698 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2714 float pixmx, sigmay, deltay, sigmax, deltax, sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2, locBz, locBx;
2715 const float cotalpha = 0.f;
2717 if(cotbeta < 0.
f) {locBx = -1.f;}
2719 if(cotalpha < 0.
f) {locBz = -locBx;}
2720 return SiPixelTemplate::qbin(
id, cotalpha, cotbeta, locBz, locBx, qclus, pixmx, sigmay, deltay, sigmax, deltax,
2721 sy1, dy1, sy2, dy2, sx1, dx1, sx2, dx2);
2748 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx,
index;
2749 float yratio, yxratio, xxratio;
2758 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
2760 if(
id == thePixelTemp_[i].head.ID) {
2767 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2768 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2769 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors can't find needed template ID = " <<
id << std::endl;
2772 assert(index >= 0 && index < (
int)thePixelTemp_.size());
2776 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2777 if(qBin < 0 || qBin > 5) {
2778 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors called with illegal qBin = " << qBin << std::endl;
2781 assert(qBin >= 0 && qBin < 6);
2786 if(qBin > 3) {qBin = 3;}
2791 acotb = fabs((
double)cotbeta);
2812 Ny = thePixelTemp_[
index].head.NTy;
2813 Nyx = thePixelTemp_[
index].head.NTyx;
2814 Nxx = thePixelTemp_[
index].head.NTxx;
2816 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2817 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
2818 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
2821 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
2829 if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) {
2836 if(cotb >= thePixelTemp_[index].enty[0].cotbeta) {
2838 for (i=0; i<Ny-1; ++
i) {
2840 if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) {
2843 yratio = (cotb - thePixelTemp_[
index].enty[
i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta);
2854 sy1 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].syone + yratio*thePixelTemp_[index].enty[ihigh].syone;
2855 sy2 = (1.f - yratio)*thePixelTemp_[index].enty[ilow].sytwo + yratio*thePixelTemp_[index].enty[ihigh].sytwo;
2856 yrms=(1.f - yratio)*thePixelTemp_[index].enty[ilow].yrms[qBin] + yratio*thePixelTemp_[index].enty[ihigh].yrms[qBin];
2864 if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) {
2869 }
else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) {
2871 for (i=0; i<Nyx-1; ++
i) {
2873 if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) {
2876 yxratio = (acotb - thePixelTemp_[
index].entx[
i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta);
2887 if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) {
2894 if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) {
2896 for (i=0; i<Nxx-1; ++
i) {
2898 if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) {
2901 xxratio = (cotalpha - thePixelTemp_[
index].entx[0][
i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha);
2910 sx1 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxone + xxratio*thePixelTemp_[index].entx[0][ihigh].sxone;
2911 sx2 = (1.f - xxratio)*thePixelTemp_[index].entx[0][ilow].sxtwo + xxratio*thePixelTemp_[index].entx[0][ihigh].sxtwo;
2913 xrms=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].xrms[
qBin] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].xrms[
qBin])
2914 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].xrms[
qBin] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].xrms[
qBin]);
2940 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)
2947 int ilow, ihigh, iylow, iyhigh, Ny, Nxx, Nyx,
index;
2948 float yratio, yxratio, xxratio;
2956 for(i=0; i<(
int)thePixelTemp_.size(); ++
i) {
2958 if(
id == thePixelTemp_[i].head.ID) {
2966 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 2967 if(index < 0 || index >= (
int)thePixelTemp_.size()) {
2968 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate::temperrors can't find needed template ID = " <<
id << std::endl;
2971 assert(index >= 0 && index < (
int)thePixelTemp_.size());
2978 acotb = fabs((
double)cotbeta);
3000 Ny = thePixelTemp_[
index].head.NTy;
3001 Nyx = thePixelTemp_[
index].head.NTyx;
3002 Nxx = thePixelTemp_[
index].head.NTxx;
3004 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3005 if(Ny < 2 || Nyx < 1 || Nxx < 2) {
3006 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny/Nyx/Nxx = " << Ny <<
"/" << Nyx <<
"/" << Nxx << std::endl;
3009 assert(Ny > 1 && Nyx > 0 && Nxx > 1);
3017 if(cotb >= thePixelTemp_[index].enty[Ny-1].cotbeta) {
3024 if(cotb >= thePixelTemp_[index].enty[0].cotbeta) {
3026 for (i=0; i<Ny-1; ++
i) {
3028 if( thePixelTemp_[index].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index].enty[i+1].cotbeta) {
3031 yratio = (cotb - thePixelTemp_[
index].enty[
i].cotbeta)/(thePixelTemp_[index].enty[i+1].cotbeta - thePixelTemp_[index].enty[i].cotbeta);
3041 ny1_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracyone + yratio*thePixelTemp_[index].enty[ihigh].fracyone;
3042 ny2_frac = (1.f - yratio)*thePixelTemp_[index].enty[ilow].fracytwo + yratio*thePixelTemp_[index].enty[ihigh].fracytwo;
3049 if(acotb >= thePixelTemp_[index].entx[Nyx-1][0].cotbeta) {
3054 }
else if(acotb >= thePixelTemp_[index].entx[0][0].cotbeta) {
3056 for (i=0; i<Nyx-1; ++
i) {
3058 if( thePixelTemp_[index].entx[i][0].cotbeta <= acotb && acotb < thePixelTemp_[index].entx[i+1][0].cotbeta) {
3061 yxratio = (acotb - thePixelTemp_[
index].entx[
i][0].cotbeta)/(thePixelTemp_[index].entx[i+1][0].cotbeta - thePixelTemp_[index].entx[i][0].cotbeta);
3072 if(cotalpha >= thePixelTemp_[index].entx[0][Nxx-1].cotalpha) {
3079 if(cotalpha >= thePixelTemp_[index].entx[0][0].cotalpha) {
3081 for (i=0; i<Nxx-1; ++
i) {
3083 if( thePixelTemp_[index].entx[0][i].cotalpha <= cotalpha && cotalpha < thePixelTemp_[index].entx[0][i+1].cotalpha) {
3086 xxratio = (cotalpha - thePixelTemp_[
index].entx[0][
i].cotalpha)/(thePixelTemp_[index].entx[0][i+1].cotalpha - thePixelTemp_[index].entx[0][i].cotalpha);
3095 for(i=0; i<3; ++
i) {
3096 qfrac[
i]=(1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].qbfrac[
i] + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].qbfrac[
i])
3097 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].qbfrac[
i] + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].qbfrac[
i]);
3099 nx1_frac = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].fracxone + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].fracxone)
3100 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].fracxone + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].fracxone);
3101 nx2_frac = (1.f - yxratio)*((1.
f - xxratio)*thePixelTemp_[
index].entx[iylow][ilow].fracxtwo + xxratio*thePixelTemp_[
index].entx[iylow][ihigh].fracxtwo)
3102 +yxratio*((1.
f - xxratio)*thePixelTemp_[
index].entx[iyhigh][ilow].fracxtwo + xxratio*thePixelTemp_[
index].entx[iyhigh][ihigh].fracxtwo);
3106 qbin_frac[0] = qfrac[0];
3107 qbin_frac[1] = qbin_frac[0] + qfrac[1];
3108 qbin_frac[2] = qbin_frac[1] + qfrac[2];
3129 float x0, y0, xf, yf,
xi, yi, sf, si, s0, qpix, slopey, slopex, ds;
3130 int i, j, jpix0, ipix0, jpixf, ipixf, jpix, ipix, nx, ny, anx,
any, jmax, imax;
3133 std::list<SimplePixel>
list;
3134 std::list<SimplePixel>::iterator listIter, listEnd;
3138 x0 = xhit - 0.5*zsize_*cota_current_;
3139 y0 = yhit - 0.5*zsize_*cotb_current_;
3141 jpix0 = floor(x0/xsize_)+1;
3142 ipix0 = floor(y0/ysize_)+1;
3144 if(jpix0 < 0 || jpix0 >
BXM3) {
return false;}
3145 if(ipix0 < 0 || ipix0 >
BYM3) {
return false;}
3147 xf = xhit + 0.5*zsize_*cota_current_ + lorxwidth_;
3148 yf = yhit + 0.5*zsize_*cotb_current_ + lorywidth_;
3150 jpixf = floor(xf/xsize_)+1;
3151 ipixf = floor(yf/ysize_)+1;
3153 if(jpixf < 0 || jpixf > BXM3) {
return false;}
3154 if(ipixf < 0 || ipixf > BYM3) {
return false;}
3158 sf =
std::sqrt((xf-x0)*(xf-x0) + (yf-y0)*(yf-y0));
3159 if((xf-x0) != 0.
f) {slopey = (yf-y0)/(xf-x0);}
else { slopey = 1.e10;}
3160 if((yf-y0) != 0.f) {slopex = (xf-x0)/(yf-y0);}
else { slopex = 1.e10;}
3173 list.push_back(element);
3181 for(j=jpix0; j<jpixf; ++j) {
3183 yi = slopey*(xi-x0) + y0;
3184 ipix = (
int)(yi/ysize_)+1;
3185 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3192 list.push_back(element);
3195 for(j=jpix0; j>jpixf; --j) {
3197 yi = slopey*(xi-x0) + y0;
3198 ipix = (
int)(yi/ysize_)+1;
3199 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3206 list.push_back(element);
3215 for(i=ipix0; i<ipixf; ++
i) {
3217 xi = slopex*(yi-y0) + x0;
3218 jpix = (
int)(xi/xsize_)+1;
3219 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3226 list.push_back(element);
3229 for(i=ipix0; i>ipixf; --
i) {
3231 xi = slopex*(yi-y0) + x0;
3232 jpix = (
int)(xi/xsize_)+1;
3233 si =
std::sqrt((xi-x0)*(xi-x0) + (yi-y0)*(yi-y0));
3240 list.push_back(element);
3254 for(i=1; i<imax; ++
i) {
3256 listIter = list.begin();
3258 while(listIter != list.end()) {
3259 if(listIter->i == i && listIter->btype == 2) {
3260 listIter = list.erase(listIter);
3263 if(listIter->i > i) {
3269 while(listIter != list.end()) {
3270 if(listIter->i == i+1 && listIter->btype == 2) {
3271 listIter = list.erase(listIter);
3274 if(listIter->i > i+1) {
3283 for(j=1; j<jmax; ++j) {
3285 listIter = list.begin();
3287 while(listIter != list.end()) {
3288 if(listIter->j == j && listIter->btype == 1) {
3289 listIter = list.erase(listIter);
3292 if(listIter->j > j) {
3298 while(listIter != list.end()) {
3299 if(listIter->j == j+1 && listIter->btype == 1) {
3300 listIter = list.erase(listIter);
3303 if(listIter->j > j+1) {
3315 listIter = list.begin();
3316 listEnd = list.end();
3317 for( ;listIter != listEnd; ++listIter) {
3323 if(sf > 0.
f) { qpix = qtotal*ds/sf;}
else {qpix = qtotal;}
3324 template2d[j][
i] += qpix;
3343 int ilow, ihigh, Ny;
3344 float yratio, cotb, cotalpha0,
arg;
3348 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
3349 arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0;
3350 if(arg < 0.
f) arg = 0.f;
3355 Ny = thePixelTemp_[index_id_].head.NTy;
3357 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3359 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny = " << Ny << std::endl;
3370 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
3377 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
3379 for (i=0; i<Ny-1; ++
i) {
3381 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
3384 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
3395 mpvvav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav;
3396 sigmavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav;
3397 kappavav_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav;
3402 mpv = (double)mpvvav_;
3403 sigma = (double)sigmavav_;
3404 kappa = (double)kappavav_;
3421 int ilow, ihigh, Ny;
3422 float yratio, cotb, cotalpha0,
arg;
3426 cotalpha0 = thePixelTemp_[index_id_].enty[0].cotalpha;
3427 arg = cotb_current_*cotb_current_ + cota_current_*cota_current_ - cotalpha0*cotalpha0;
3428 if(arg < 0.
f) arg = 0.f;
3433 Ny = thePixelTemp_[index_id_].head.NTy;
3435 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 3437 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_ <<
"has too few entries: Ny = " << Ny << std::endl;
3448 if(cotb >= thePixelTemp_[index_id_].enty[Ny-1].cotbeta) {
3455 if(cotb >= thePixelTemp_[index_id_].enty[0].cotbeta) {
3457 for (i=0; i<Ny-1; ++
i) {
3459 if( thePixelTemp_[index_id_].enty[i].cotbeta <= cotb && cotb < thePixelTemp_[index_id_].enty[i+1].cotbeta) {
3462 yratio = (cotb - thePixelTemp_[index_id_].enty[
i].cotbeta)/(thePixelTemp_[index_id_].enty[i+1].cotbeta - thePixelTemp_[index_id_].enty[i].cotbeta);
3473 mpvvav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].mpvvav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].mpvvav2;
3474 sigmavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].sigmavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].sigmavav2;
3475 kappavav2_ = (1.f - yratio)*thePixelTemp_[index_id_].enty[ilow].kappavav2 + yratio*thePixelTemp_[index_id_].enty[ihigh].kappavav2;
3479 mpv = (double)mpvvav2_;
3480 sigma = (double)sigmavav2_;
3481 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
static bool pushfile(int filenum, std::vector< SiPixelTemplateStore > &thePixelTemp_)
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)
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.
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