27 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
39 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
43 #define LOGERROR(x) LogError(x)
44 #define LOGINFO(x) LogInfo(x)
50 #define LOGERROR(x) std::cout << x << ": "
51 #define LOGINFO(x) std::cout << x << ": "
52 #define ENDL std::endl
65 const int code_version = {21};
72 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
74 int nzeros = 4 - tempfile.length();
79 tempfile =
dir +
"template_summary2D_zp" + tempfile +
".out";
81 tempfile =
file.fullPath();
85 std::ostringstream tout;
86 tout <<
"template_summary2D_zp" << std::setw(4) << std::setfill(
'0') << std::right << filenum <<
".out" << std::ends;
87 tempfile = tout.str();
93 std::ifstream in_file(tempfile);
94 if (in_file.is_open() && in_file.good()) {
100 for (
int i = 0; (
c = in_file.get()) !=
'\n'; ++
i) {
107 LOGINFO(
"SiPixelTemplate2D") <<
"Loading Pixel Template File - " << theCurrentTemp.
head.
title <<
ENDL;
117 if (in_file.fail()) {
118 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 0A, no template load" <<
ENDL;
126 if (in_file.fail()) {
127 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 0B, no template load" <<
ENDL;
136 theCurrentTemp.
head.
fbin[1] = 1.00f;
137 theCurrentTemp.
head.
fbin[2] = 0.85f;
140 LOGINFO(
"SiPixelTemplate2D") <<
"Template ID = " << theCurrentTemp.
head.
ID <<
", Template Version "
142 <<
", NTy = " << theCurrentTemp.
head.
NTy <<
", NTyx = " << theCurrentTemp.
head.
NTyx
143 <<
", NTxx = " << theCurrentTemp.
head.
NTxx <<
", Dtype = " << theCurrentTemp.
head.
Dtype
144 <<
", Bias voltage " << theCurrentTemp.
head.
Vbias <<
", temperature "
146 <<
", Q-scaling factor " << theCurrentTemp.
head.
qscale <<
", 1/2 multi dcol threshold "
147 << theCurrentTemp.
head.
s50 <<
", 1/2 single dcol threshold "
149 <<
", y Lorentz Bias " << theCurrentTemp.
head.
lorybias <<
", x Lorentz width "
151 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.
head.
fbin[0] <<
", "
153 <<
", pixel x-size " << theCurrentTemp.
head.
xsize <<
", y-size "
157 LOGERROR(
"SiPixelTemplate2D") <<
"code expects version " << code_version <<
", no template load" <<
ENDL;
161 if (theCurrentTemp.
head.
NTy != 0) {
163 <<
"Trying to load 1-d template info into the 2-d template object, check your DB/global tag!" <<
ENDL;
176 for (
int iy = 0; iy < theCurrentTemp.
head.
NTyx; ++iy) {
177 for (
int jx = 0; jx < theCurrentTemp.
head.
NTxx; ++jx) {
181 if (in_file.fail()) {
182 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 1, no template load, run # "
184 delete[] theCurrentTemp.
entry[0];
185 delete[] theCurrentTemp.
entry;
202 if (in_file.fail()) {
203 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 2, no template load, run # "
205 delete[] theCurrentTemp.
entry[0];
206 delete[] theCurrentTemp.
entry;
210 for (
int k = 0;
k < 2; ++
k) {
215 if (in_file.fail()) {
217 <<
"Error reading file 3, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
218 delete[] theCurrentTemp.
entry[0];
219 delete[] theCurrentTemp.
entry;
224 for (
int k = 0;
k < 2; ++
k) {
229 if (in_file.fail()) {
231 <<
"Error reading file 4, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
232 delete[] theCurrentTemp.
entry[0];
233 delete[] theCurrentTemp.
entry;
241 for (
int l = 0;
l < 7; ++
l) {
242 for (
int k = 0;
k < 7; ++
k) {
247 if (in_file.fail()) {
249 <<
"Error reading file 5, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
250 delete[] theCurrentTemp.
entry[0];
251 delete[] theCurrentTemp.
entry;
267 if (in_file.fail()) {
268 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 6, no template load, run # "
270 delete[] theCurrentTemp.
entry[0];
271 delete[] theCurrentTemp.
entry;
281 if (in_file.fail()) {
282 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 7, no template load, run # "
284 delete[] theCurrentTemp.
entry[0];
285 delete[] theCurrentTemp.
entry;
295 if (in_file.fail()) {
296 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 8, no template load, run # "
298 delete[] theCurrentTemp.
entry[0];
299 delete[] theCurrentTemp.
entry;
309 pixelTemp.push_back(theCurrentTemp);
316 LOGERROR(
"SiPixelTemplate2D") <<
"Error opening File" << tempfile <<
ENDL;
322 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
330 std::vector<SiPixelTemplateStore2D>& pixelTemp) {
333 const int code_version = {21};
342 for (
int m = 0;
m <
db.numOfTempl(); ++
m) {
346 for (
int i = 0;
i < 20; ++
i) {
352 db.incrementIndex(1);
355 LOGINFO(
"SiPixelTemplate2D") <<
"Loading Pixel Template File - " << theCurrentTemp.
head.
title <<
ENDL;
367 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 0A, no template load" <<
ENDL;
371 LOGINFO(
"SiPixelTemplate2D") <<
"Loading Pixel Template File - " << theCurrentTemp.
head.
title
372 <<
" code version = " << code_version <<
" object version "
380 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 0B, no template load" <<
ENDL;
388 theCurrentTemp.
head.
fbin[0] = 1.50f;
389 theCurrentTemp.
head.
fbin[1] = 1.00f;
390 theCurrentTemp.
head.
fbin[2] = 0.85f;
393 LOGINFO(
"SiPixelTemplate2D") <<
"Template ID = " << theCurrentTemp.
head.
ID <<
", Template Version "
395 <<
", NTy = " << theCurrentTemp.
head.
NTy <<
", NTyx = " << theCurrentTemp.
head.
NTyx
396 <<
", NTxx = " << theCurrentTemp.
head.
NTxx <<
", Dtype = " << theCurrentTemp.
head.
Dtype
397 <<
", Bias voltage " << theCurrentTemp.
head.
Vbias <<
", temperature "
399 <<
", Q-scaling factor " << theCurrentTemp.
head.
qscale <<
", 1/2 multi dcol threshold "
400 << theCurrentTemp.
head.
s50 <<
", 1/2 single dcol threshold "
402 <<
", y Lorentz Bias " << theCurrentTemp.
head.
lorybias <<
", x Lorentz width "
404 <<
", Q/Q_avg fractions for Qbin defs " << theCurrentTemp.
head.
fbin[0] <<
", "
406 <<
", pixel x-size " << theCurrentTemp.
head.
xsize <<
", y-size "
410 LOGINFO(
"SiPixelTemplate2D") <<
"code expects version " << code_version <<
" finds "
414 if (theCurrentTemp.
head.
NTy != 0) {
416 <<
"Trying to load 1-d template info into the 2-d template object, check your DB/global tag!" <<
ENDL;
429 for (
int iy = 0; iy < theCurrentTemp.
head.
NTyx; ++iy) {
430 for (
int jx = 0; jx < theCurrentTemp.
head.
NTxx; ++jx) {
435 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 1, no template load, run # "
437 delete[] theCurrentTemp.
entry[0];
438 delete[] theCurrentTemp.
entry;
456 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 2, no template load, run # "
458 delete[] theCurrentTemp.
entry[0];
459 delete[] theCurrentTemp.
entry;
463 for (
int k = 0;
k < 2; ++
k) {
470 <<
"Error reading file 3, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
471 delete[] theCurrentTemp.
entry[0];
472 delete[] theCurrentTemp.
entry;
477 for (
int k = 0;
k < 2; ++
k) {
484 <<
"Error reading file 4, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
485 delete[] theCurrentTemp.
entry[0];
486 delete[] theCurrentTemp.
entry;
494 for (
int l = 0;
l < 7; ++
l) {
495 for (
int k = 0;
k < 7; ++
k) {
502 <<
"Error reading file 5, no template load, run # " << theCurrentTemp.
entry[iy][jx].
runnum <<
ENDL;
503 delete[] theCurrentTemp.
entry[0];
504 delete[] theCurrentTemp.
entry;
521 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 6, no template load, run # "
523 delete[] theCurrentTemp.
entry[0];
524 delete[] theCurrentTemp.
entry;
535 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 7, no template load, run # "
537 delete[] theCurrentTemp.
entry[0];
538 delete[] theCurrentTemp.
entry;
549 LOGERROR(
"SiPixelTemplate2D") <<
"Error reading file 8, no template load, run # "
551 delete[] theCurrentTemp.
entry[0];
552 delete[] theCurrentTemp.
entry;
560 pixelTemp.push_back(theCurrentTemp);
570 if (
id != id_current_) {
574 for (
int i = 0;
i < (
int)thePixelTemp_.size(); ++
i) {
575 if (
id == thePixelTemp_[
i].head.ID) {
581 Dtype_ = thePixelTemp_[index_id_].head.Dtype;
585 qscale_ = thePixelTemp_[index_id_].head.qscale;
589 s50_ = thePixelTemp_[index_id_].head.s50;
593 for (
int j = 0;
j < 3; ++
j) {
594 fbin_[
j] = thePixelTemp_[index_id_].head.fbin[
j];
599 lorywidth_ = thePixelTemp_[index_id_].head.lorywidth;
600 lorxwidth_ = thePixelTemp_[index_id_].head.lorxwidth;
604 xsize_ = thePixelTemp_[index_id_].head.xsize;
605 ysize_ = thePixelTemp_[index_id_].head.ysize;
606 zsize_ = thePixelTemp_[index_id_].head.zsize;
610 Nyx_ = thePixelTemp_[index_id_].head.NTyx;
611 Nxx_ = thePixelTemp_[index_id_].head.NTxx;
612 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
613 if (Nyx_ < 2 || Nxx_ < 2) {
614 throw cms::Exception(
"DataCorrupt") <<
"template ID = " << id_current_
615 <<
"has too few entries: Nyx/Nxx = " << Nyx_ <<
"/" << Nxx_ << std::endl;
618 assert(Nyx_ > 1 && Nxx_ > 1);
620 int imidx = Nxx_ / 2;
622 cotalpha0_ = thePixelTemp_[index_id_].entry[0][0].cotalpha;
623 cotalpha1_ = thePixelTemp_[index_id_].entry[0][Nxx_ - 1].cotalpha;
624 deltacota_ = (cotalpha1_ - cotalpha0_) / (
float)(Nxx_ - 1);
626 cotbeta0_ = thePixelTemp_[index_id_].entry[0][imidx].cotbeta;
627 cotbeta1_ = thePixelTemp_[index_id_].entry[Nyx_ - 1][imidx].cotbeta;
628 deltacotb_ = (cotbeta1_ - cotbeta0_) / (
float)(Nyx_ - 1);
635 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
636 if (index_id_ < 0 || index_id_ >= (
int)thePixelTemp_.size()) {
637 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate2D::interpolate can't find needed template ID = " <<
id
638 <<
", Are you using the correct global tag?" << std::endl;
641 assert(index_id_ >= 0 && index_id_ < (
int)thePixelTemp_.size());
664 float acotb, dcota, dcotb;
668 if (
id != id_current_ || cotalpha != cota_current_ || cotbeta != cotb_current_) {
669 cota_current_ = cotalpha;
670 cotb_current_ = cotbeta;
672 success_ = getid(
id);
675 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
676 if (index_id_ < 0 || index_id_ >= (
int)thePixelTemp_.size()) {
677 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate2D::interpolate can't find needed template ID = " <<
id
678 <<
", Are you using the correct global tag?" << std::endl;
681 assert(index_id_ >= 0 && index_id_ < (
int)thePixelTemp_.size());
686 float cota = cotalpha;
704 if (locBx * locBz < 0.
f) {
713 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
715 <<
"SiPixelTemplate2D::illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
717 std::cout <<
"SiPixelTemplate:2D:illegal subdetector ID = " << thePixelTemp_[index_id_].head.Dtype << std::endl;
721 if (cota < cotalpha0_) {
726 }
else if (cota > cotalpha1_) {
732 jx0_ = (
int)((cota - cotalpha0_) / deltacota_ + 0.5f);
733 dcota = (cota - (cotalpha0_ + jx0_ * deltacota_)) / deltacota_;
734 adcota_ = fabs(dcota);
750 if (acotb < cotbeta0_) {
755 }
else if (acotb > cotbeta1_) {
761 iy0_ = (
int)((acotb - cotbeta0_) / deltacotb_ + 0.5f);
762 dcotb = (acotb - (cotbeta0_ + iy0_ * deltacotb_)) / deltacotb_;
763 adcotb_ = fabs(dcotb);
777 lorydrift_ = lorywidth_ / 2.;
779 lorydrift_ = -lorydrift_;
780 lorxdrift_ = lorxwidth_ / 2.;
782 lorxdrift_ = -lorxdrift_;
786 entry00_ = &thePixelTemp_[index_id_].entry[iy0_][jx0_];
787 entry10_ = &thePixelTemp_[index_id_].entry[iy1_][jx0_];
788 entry01_ = &thePixelTemp_[index_id_].entry[iy0_][jx1_];
792 qavg_ = entry00_->qavg + adcota_ * (entry01_->qavg - entry00_->qavg) + adcotb_ * (entry10_->qavg - entry00_->qavg);
794 pixmax_ = entry00_->pixmax + adcota_ * (entry01_->pixmax - entry00_->pixmax) +
795 adcotb_ * (entry10_->pixmax - entry00_->pixmax);
797 sxymax_ = entry00_->sxymax + adcota_ * (entry01_->sxymax - entry00_->sxymax) +
798 adcotb_ * (entry10_->sxymax - entry00_->sxymax);
800 chi2avgone_ = entry00_->chi2avgone + adcota_ * (entry01_->chi2avgone - entry00_->chi2avgone) +
801 adcotb_ * (entry10_->chi2avgone - entry00_->chi2avgone);
803 chi2minone_ = entry00_->chi2minone + adcota_ * (entry01_->chi2minone - entry00_->chi2minone) +
804 adcotb_ * (entry10_->chi2minone - entry00_->chi2minone);
806 clsleny_ = entry00_->clsleny + adcota_ * (entry01_->clsleny - entry00_->clsleny) +
807 adcotb_ * (entry10_->clsleny - entry00_->clsleny);
809 clslenx_ = entry00_->clslenx + adcota_ * (entry01_->clslenx - entry00_->clslenx) +
810 adcotb_ * (entry10_->clslenx - entry00_->clslenx);
812 chi2ppix_ = entry00_->chi2ppix + adcota_ * (entry01_->chi2ppix - entry00_->chi2ppix) +
813 adcotb_ * (entry10_->chi2ppix - entry00_->chi2ppix);
815 chi2scale_ = entry00_->chi2scale + adcota_ * (entry01_->chi2scale - entry00_->chi2scale) +
816 adcotb_ * (entry10_->chi2scale - entry00_->chi2scale);
818 scaleyavg_ = entry00_->scaleyavg + adcota_ * (entry01_->scaleyavg - entry00_->scaleyavg) +
819 adcotb_ * (entry10_->scaleyavg - entry00_->scaleyavg);
821 scalexavg_ = entry00_->scalexavg + adcota_ * (entry01_->scalexavg - entry00_->scalexavg) +
822 adcotb_ * (entry10_->scalexavg - entry00_->scalexavg);
824 delyavg_ = entry00_->delyavg + adcota_ * (entry01_->delyavg - entry00_->delyavg) +
825 adcotb_ * (entry10_->delyavg - entry00_->delyavg);
827 delysig_ = entry00_->delysig + adcota_ * (entry01_->delysig - entry00_->delysig) +
828 adcotb_ * (entry10_->delysig - entry00_->delysig);
830 mpvvav_ = entry00_->mpvvav + adcota_ * (entry01_->mpvvav - entry00_->mpvvav) +
831 adcotb_ * (entry10_->mpvvav - entry00_->mpvvav);
833 sigmavav_ = entry00_->sigmavav + adcota_ * (entry01_->sigmavav - entry00_->sigmavav) +
834 adcotb_ * (entry10_->sigmavav - entry00_->sigmavav);
836 kappavav_ = entry00_->kappavav + adcota_ * (entry01_->kappavav - entry00_->kappavav) +
837 adcotb_ * (entry10_->kappavav - entry00_->kappavav);
839 for (
int i = 0;
i < 4; ++
i) {
840 scalex_[
i] = entry00_->scalex[
i] + adcota_ * (entry01_->scalex[
i] - entry00_->scalex[
i]) +
841 adcotb_ * (entry10_->scalex[
i] - entry00_->scalex[
i]);
843 scaley_[
i] = entry00_->scaley[
i] + adcota_ * (entry01_->scaley[
i] - entry00_->scaley[
i]) +
844 adcotb_ * (entry10_->scaley[
i] - entry00_->scaley[
i]);
846 offsetx_[
i] = entry00_->offsetx[
i] + adcota_ * (entry01_->offsetx[
i] - entry00_->offsetx[
i]) +
847 adcotb_ * (entry10_->offsetx[
i] - entry00_->offsetx[
i]);
849 offsetx_[
i] = -offsetx_[
i];
851 offsety_[
i] = entry00_->offsety[
i] + adcota_ * (entry01_->offsety[
i] - entry00_->offsety[
i]) +
852 adcotb_ * (entry10_->offsety[
i] - entry00_->offsety[
i]);
854 offsety_[
i] = -offsety_[
i];
857 for (
int i = 0;
i < 2; ++
i) {
858 for (
int j = 0;
j < 5; ++
j) {
861 xypary0x0_[1 -
i][
j] = (
float)entry00_->xypar[
i][
j];
862 xypary1x0_[1 -
i][
j] = (
float)entry10_->xypar[
i][
j];
863 xypary0x1_[1 -
i][
j] = (
float)entry01_->xypar[
i][
j];
864 lanpar_[1 -
i][
j] = entry00_->lanpar[
i][
j] + adcota_ * (entry01_->lanpar[
i][
j] - entry00_->lanpar[
i][
j]) +
865 adcotb_ * (entry10_->lanpar[
i][
j] - entry00_->lanpar[
i][
j]);
867 xypary0x0_[
i][
j] = (
float)entry00_->xypar[
i][
j];
868 xypary1x0_[
i][
j] = (
float)entry10_->xypar[
i][
j];
869 xypary0x1_[
i][
j] = (
float)entry01_->xypar[
i][
j];
870 lanpar_[
i][
j] = entry00_->lanpar[
i][
j] + adcota_ * (entry01_->lanpar[
i][
j] - entry00_->lanpar[
i][
j]) +
871 adcotb_ * (entry10_->lanpar[
i][
j] - entry00_->lanpar[
i][
j]);
887 #ifdef SI_PIXEL_TEMPLATE_STANDALONE
912 for (
int i = 0;
i < 3; ++
i) {
923 qavg_ = entry00_->qavg;
925 pixmax_ = entry00_->pixmax;
927 sxymax_ = entry00_->sxymax;
929 clsleny_ = entry00_->clsleny;
931 clslenx_ = entry00_->clslenx;
941 for (
int i = 0;
i < 4; ++
i) {
952 float cotbeta = entry00_->cotbeta;
968 if (locBx * locBz < 0.
f) {
976 std::cout <<
"SiPixelTemplate:2D:illegal subdetector ID = " << iDtype << std::endl;
981 lorydrift_ = lorywidth_ / 2.;
983 lorydrift_ = -lorydrift_;
984 lorxdrift_ = lorxwidth_ / 2.;
986 lorxdrift_ = -lorxdrift_;
988 for (
int i = 0;
i < 2; ++
i) {
989 for (
int j = 0;
j < 5; ++
j) {
992 xypary0x0_[1 -
i][
j] = (
float)entry00_->xypar[
i][
j];
993 xypary1x0_[1 -
i][
j] = (
float)entry00_->xypar[
i][
j];
994 xypary0x1_[1 -
i][
j] = (
float)entry00_->xypar[
i][
j];
995 lanpar_[1 -
i][
j] = entry00_->lanpar[
i][
j];
997 xypary0x0_[
i][
j] = (
float)entry00_->xypar[
i][
j];
998 xypary1x0_[
i][
j] = (
float)entry00_->xypar[
i][
j];
999 xypary0x1_[
i][
j] = (
float)entry00_->xypar[
i][
j];
1000 lanpar_[
i][
j] = entry00_->lanpar[
i][
j];
1027 int pixx, pixy,
k0, k1, l0, l1, deltax, deltay, iflipy, jflipx, imin, imax, jmin, jmax;
1029 float dx,
dy, ddx, ddy, adx, ady;
1031 const float deltaxy[2] = {16.67f, 25.0f};
1040 pixy = (
int)floorf(yhit / ysize_);
1041 dy = yhit - (pixy + 0.5f) * ysize_;
1050 ddy = 6.f *
dy / ysize_ - (
k0 - 3);
1061 pixx = (
int)floorf(xhit / xsize_);
1062 dx = xhit - (pixx + 0.5f) * xsize_;
1066 l0 = (
int)(
dx / xsize_ * 6.
f + 3.5
f);
1071 ddx = 6.f *
dx / xsize_ - (l0 - 3);
1087 imin =
std::min(entry00_->iymin, entry10_->iymin);
1088 imin_ =
std::min(imin, entry01_->iymin);
1090 jmin =
std::min(entry00_->jxmin, entry10_->jxmin);
1091 jmin_ =
std::min(jmin, entry01_->jxmin);
1093 imax =
std::max(entry00_->iymax, entry10_->iymax);
1094 imax_ =
std::max(imax, entry01_->iymax);
1096 jmax =
std::max(entry00_->jxmax, entry10_->jxmax);
1097 jmax_ =
std::max(jmax, entry01_->jxmax);
1108 deltax = pixx -
T2HX;
1109 deltay = pixy -
T2HY;
1113 for (
int j = 0;
j <
BXM2; ++
j) {
1114 for (
int i = 0;
i <
BYM2; ++
i) {
1115 xytemp_[
j][
i] = 0.f;
1121 for (
int j = jmin_;
j <= jmax_; ++
j) {
1125 m = deltax + jflipx;
1129 for (
int i = imin_;
i <= imax_; ++
i) {
1132 n = deltay + iflipy;
1136 if (
m >= 0 && m <= BXM3 && n >= 0 &&
n <=
BYM3) {
1137 xytemp_[
m][
n] = (
float)entry00_->xytemp[
k0][l0][
i][
j] +
1138 adx * (
float)(entry00_->xytemp[
k0][l1][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1139 ady * (
float)(entry00_->xytemp[k1][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1140 adcota_ * (
float)(entry01_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1141 adcotb_ * (
float)(entry10_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]);
1148 for (
int n = 1;
n <
BYM3; ++
n) {
1151 for (
int m = 1;
m <
BXM3; ++
m) {
1152 xytemp_[
m][
n] += xytemp_[
m][
n + 1];
1155 for (
int i =
n + 1;
i <
BYM3; ++
i) {
1156 for (
int m = 1;
m <
BXM3; ++
m) {
1157 xytemp_[
m][
i] = xytemp_[
m][
i + 1];
1165 for (
int m = 1;
m <
BXM3; ++
m) {
1168 for (
int n = 1;
n <
BYM3; ++
n) {
1169 xytemp_[
m][
n] += xytemp_[
m + 1][
n];
1172 for (
int j =
m + 1;
j <
BXM3; ++
j) {
1174 xytemp_[
j][
n] = xytemp_[
j + 1][
n];
1182 float qtemptot = 0.f;
1184 for (
int n = 1;
n <
BYM3; ++
n) {
1185 for (
int m = 1;
m <
BXM3; ++
m) {
1186 if (xytemp_[
m][
n] != 0.
f) {
1187 template2d[
m][
n] += xytemp_[
m][
n];
1188 qtemptot += xytemp_[
m][
n];
1193 QTemplate = qtemptot;
1198 for (
int k = 0;
k < 2; ++
k) {
1199 for (
int i = 0;
i <
BXM2; ++
i) {
1200 for (
int j = 0;
j <
BYM2; ++
j) {
1201 dxytempdx[
k][
i][
j] = 0.f;
1202 dxytempdy[
k][
i][
j] = 0.f;
1203 dpdx2d[
k][
i][
j] = 0.f;
1210 pixx = (
int)floorf((xhit + deltaxy[0]) / xsize_);
1211 dx = (xhit + deltaxy[0]) - (pixx + 0.5
f) * xsize_;
1215 l0 = (
int)(
dx / xsize_ * 6.
f + 3.5
f);
1220 ddx = 6.f *
dx / xsize_ - (l0 - 3);
1242 deltax = pixx -
T2HX;
1246 for (
int j = jmin_;
j <= jmax_; ++
j) {
1250 m = deltax + jflipx;
1254 for (
int i = imin_;
i <= imax_; ++
i) {
1257 n = deltay + iflipy;
1261 if (
m >= 0 && m <= BXM3 && n >= 0 &&
n <=
BYM3) {
1262 dxytempdx[1][
m][
n] = (
float)entry00_->xytemp[
k0][l0][
i][
j] +
1263 adx * (
float)(entry00_->xytemp[
k0][l1][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1264 ady * (
float)(entry00_->xytemp[k1][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1265 adcota_ * (
float)(entry01_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1266 adcotb_ * (
float)(entry10_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]);
1273 for (
int n = 1;
n <
BYM3; ++
n) {
1276 for (
int m = 1;
m <
BXM3; ++
m) {
1277 dxytempdx[1][
m][
n] += dxytempdx[1][
m][
n + 1];
1280 for (
int i =
n + 1;
i <
BYM3; ++
i) {
1281 for (
int m = 1;
m <
BXM3; ++
m) {
1282 dxytempdx[1][
m][
i] = dxytempdx[1][
m][
i + 1];
1290 for (
int m = 1;
m <
BXM3; ++
m) {
1293 for (
int n = 1;
n <
BYM3; ++
n) {
1294 dxytempdx[1][
m][
n] += dxytempdx[1][
m + 1][
n];
1297 for (
int j =
m + 1;
j <
BXM3; ++
j) {
1298 for (
int n = 1;
n <
BYM3; ++
n) {
1299 dxytempdx[1][
j][
n] = dxytempdx[1][
j + 1][
n];
1307 pixx = (
int)floorf((xhit - deltaxy[0]) / xsize_);
1308 dx = (xhit - deltaxy[0]) - (pixx + 0.5
f) * xsize_;
1312 l0 = (
int)(
dx / xsize_ * 6.
f + 3.5
f);
1317 ddx = 6.f *
dx / xsize_ - (l0 - 3);
1339 deltax = pixx -
T2HX;
1343 for (
int j = jmin_;
j <= jmax_; ++
j) {
1347 m = deltax + jflipx;
1351 for (
int i = imin_;
i <= imax_; ++
i) {
1354 n = deltay + iflipy;
1358 if (
m >= 0 && m <= BXM3 && n >= 0 &&
n <=
BYM3) {
1359 dxytempdx[0][
m][
n] = (
float)entry00_->xytemp[
k0][l0][
i][
j] +
1360 adx * (
float)(entry00_->xytemp[
k0][l1][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1361 ady * (
float)(entry00_->xytemp[k1][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1362 adcota_ * (
float)(entry01_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1363 adcotb_ * (
float)(entry10_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]);
1370 for (
int n = 1;
n <
BYM3; ++
n) {
1373 for (
int m = 1;
m <
BXM3; ++
m) {
1374 dxytempdx[0][
m][
n] += dxytempdx[0][
m][
n + 1];
1377 for (
int i =
n + 1;
i <
BYM3; ++
i) {
1378 for (
int m = 1;
m <
BXM3; ++
m) {
1379 dxytempdx[0][
m][
i] = dxytempdx[0][
m][
i + 1];
1387 for (
int m = 1;
m <
BXM3; ++
m) {
1390 for (
int n = 1;
n <
BYM3; ++
n) {
1391 dxytempdx[0][
m][
n] += dxytempdx[0][
m + 1][
n];
1394 for (
int j =
m + 1;
j <
BXM3; ++
j) {
1395 for (
int n = 1;
n <
BYM3; ++
n) {
1396 dxytempdx[0][
j][
n] = dxytempdx[0][
j + 1][
n];
1404 for (
int n = 1;
n <
BYM3; ++
n) {
1405 for (
int m = 1;
m <
BXM3; ++
m) {
1406 dpdx2d[0][
m][
n] = (dxytempdx[1][
m][
n] - dxytempdx[0][
m][
n]) / (2. * deltaxy[0]);
1412 pixy = (
int)floorf((yhit + deltaxy[1]) / ysize_);
1413 dy = (yhit + deltaxy[1]) - (pixy + 0.5
f) * ysize_;
1422 ddy = 6.f *
dy / ysize_ - (
k0 - 3);
1433 pixx = (
int)floorf(xhit / xsize_);
1434 dx = xhit - (pixx + 0.5f) * xsize_;
1438 l0 = (
int)(
dx / xsize_ * 6.
f + 3.5
f);
1443 ddx = 6.f *
dx / xsize_ - (l0 - 3);
1466 deltax = pixx -
T2HX;
1467 deltay = pixy -
T2HY;
1471 for (
int j = jmin_;
j <= jmax_; ++
j) {
1475 m = deltax + jflipx;
1479 for (
int i = imin_;
i <= imax_; ++
i) {
1482 n = deltay + iflipy;
1486 if (
m >= 0 && m <= BXM3 && n >= 0 &&
n <=
BYM3) {
1487 dxytempdy[1][
m][
n] = (
float)entry00_->xytemp[
k0][l0][
i][
j] +
1488 adx * (
float)(entry00_->xytemp[
k0][l1][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1489 ady * (
float)(entry00_->xytemp[k1][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1490 adcota_ * (
float)(entry01_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1491 adcotb_ * (
float)(entry10_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]);
1498 for (
int n = 1;
n <
BYM3; ++
n) {
1501 for (
int m = 1;
m <
BXM3; ++
m) {
1502 dxytempdy[1][
m][
n] += dxytempdy[1][
m][
n + 1];
1505 for (
int i =
n + 1;
i <
BYM3; ++
i) {
1506 for (
int m = 1;
m <
BXM3; ++
m) {
1507 dxytempdy[1][
m][
i] = dxytempdy[1][
m][
i + 1];
1515 for (
int m = 1;
m <
BXM3; ++
m) {
1518 for (
int n = 1;
n <
BYM3; ++
n) {
1519 dxytempdy[1][
m][
n] += dxytempdy[1][
m + 1][
n];
1522 for (
int j =
m + 1;
j <
BXM3; ++
j) {
1523 for (
int n = 1;
n <
BYM3; ++
n) {
1524 dxytempdy[1][
j][
n] = dxytempdy[1][
j + 1][
n];
1532 pixy = (
int)floorf((yhit - deltaxy[1]) / ysize_);
1533 dy = (yhit - deltaxy[1]) - (pixy + 0.5
f) * ysize_;
1542 ddy = 6.f *
dy / ysize_ - (
k0 - 3);
1564 deltay = pixy -
T2HY;
1568 for (
int j = jmin_;
j <= jmax_; ++
j) {
1572 m = deltax + jflipx;
1576 for (
int i = imin_;
i <= imax_; ++
i) {
1579 n = deltay + iflipy;
1583 if (
m >= 0 && m <= BXM3 && n >= 0 &&
n <=
BYM3) {
1584 dxytempdy[0][
m][
n] = (
float)entry00_->xytemp[
k0][l0][
i][
j] +
1585 adx * (
float)(entry00_->xytemp[
k0][l1][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1586 ady * (
float)(entry00_->xytemp[k1][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1587 adcota_ * (
float)(entry01_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]) +
1588 adcotb_ * (
float)(entry10_->xytemp[
k0][l0][
i][
j] - entry00_->xytemp[
k0][l0][
i][
j]);
1595 for (
int n = 1;
n <
BYM3; ++
n) {
1598 for (
int m = 1;
m <
BXM3; ++
m) {
1599 dxytempdy[0][
m][
n] += dxytempdy[0][
m][
n + 1];
1602 for (
int i =
n + 1;
i <
BYM3; ++
i) {
1603 for (
int m = 1;
m <
BXM3; ++
m) {
1604 dxytempdy[0][
m][
i] = dxytempdy[0][
m][
i + 1];
1612 for (
int m = 1;
m <
BXM3; ++
m) {
1615 for (
int n = 1;
n <
BYM3; ++
n) {
1616 dxytempdy[0][
m][
n] += dxytempdy[0][
m + 1][
n];
1619 for (
int j =
m + 1;
j <
BXM3; ++
j) {
1620 for (
int n = 1;
n <
BYM3; ++
n) {
1621 dxytempdy[0][
j][
n] = dxytempdy[0][
j + 1][
n];
1629 for (
int n = 1;
n <
BYM3; ++
n) {
1630 for (
int m = 1;
m <
BXM3; ++
m) {
1631 dpdx2d[1][
m][
n] = (dxytempdy[1][
m][
n] - dxytempdy[0][
m][
n]) / (2. * deltaxy[1]);
1649 float xhit,
float yhit,
bool ydouble[
BYM2],
bool xdouble[
BXM2],
float template2d[
BXM2][
BYM2]) {
1652 bool derivatives =
false;
1677 std::vector<bool>& ydouble,
1678 std::vector<bool>& xdouble,
1682 bool derivatives =
false;
1686 if (cotbeta < 0.
f) {
1689 float locBz = locBx;
1690 if (cotalpha < 0.
f) {
1697 yd[
BYM2 - 1] =
false;
1699 yd[
i + 1] = ydouble[
i];
1702 xd[
BXM2 - 1] =
false;
1704 xd[
j + 1] = xdouble[
j];
1730 float sigi, sigi2, sigi3, sigi4, qscale, err2, err00;
1734 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
1735 if (index < 1 || index >=
BYM2) {
1736 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplate2D::ysigma2 called with index = " <<
index << std::endl;
1746 if (qpixel < sxymax_) {
1751 qscale = qpixel / sxymax_;
1753 sigi2 = sigi * sigi;
1754 sigi3 = sigi2 * sigi;
1755 sigi4 = sigi3 * sigi;
1757 err00 = xypary0x0_[0][0] + xypary0x0_[0][1] * sigi + xypary0x0_[0][2] * sigi2 + xypary0x0_[0][3] * sigi3 +
1758 xypary0x0_[0][4] * sigi4;
1760 adcota_ * (xypary0x1_[0][0] + xypary0x1_[0][1] * sigi + xypary0x1_[0][2] * sigi2 + xypary0x1_[0][3] * sigi3 +
1761 xypary0x1_[0][4] * sigi4 - err00) +
1762 adcotb_ * (xypary1x0_[0][0] + xypary1x0_[0][1] * sigi + xypary1x0_[0][2] * sigi2 + xypary1x0_[0][3] * sigi3 +
1763 xypary1x0_[0][4] * sigi4 - err00);
1765 err00 = xypary0x0_[1][0] + xypary0x0_[1][1] * sigi + xypary0x0_[1][2] * sigi2 + xypary0x0_[1][3] * sigi3 +
1766 xypary0x0_[1][4] * sigi4;
1768 adcota_ * (xypary0x1_[1][0] + xypary0x1_[1][1] * sigi + xypary0x1_[1][2] * sigi2 + xypary0x1_[1][3] * sigi3 +
1769 xypary0x1_[1][4] * sigi4 - err00) +
1770 adcotb_ * (xypary1x0_[1][0] + xypary1x0_[1][1] * sigi + xypary1x0_[1][2] * sigi2 + xypary1x0_[1][3] * sigi3 +
1771 xypary1x0_[1][4] * sigi4 - err00);
1773 xysig2 = qscale * err2;
1774 if (xysig2 <= 0.
f) {
1775 xysig2 = s50_ * s50_;
1790 for (
int i = 0;
i < 2; ++
i) {
1791 for (
int j = 0;
j < 5; ++
j) {
1792 lanpar[
i][
j] = lanpar_[
i][
j];