55 #include "Math/DistFunc.h"
59 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
63 #define LOGERROR(x) edm::LogError(x)
64 #define LOGDEBUG(x) LogDebug(x)
72 #define LOGERROR(x) std::cout << x << ": "
73 #define LOGDEBUG(x) std::cout << x << ": "
74 #define ENDL std::endl
77 using namespace SiPixelTemplateReco;
121 std::vector<bool>& ydouble, std::vector<bool>& xdouble,
123 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
bool deadpix, std::vector<std::pair<int, int> >& zeropix,
128 int i,
j,
k, minbin, binl, binh, binq, midpix, fypix, nypix, lypix, logypx;
129 int fxpix, nxpix, lxpix, logxpx, shifty, shiftx, nyzero[
TYSIZE];
131 int deltaj, jmin, jmax, fxbin, lxbin, fybin, lybin, djy, djx;
132 int fypix2D, lypix2D, fxpix2D, lxpix2D;
133 float sythr, sxthr, rnorm,
delta,
sigma, sigavg, pseudopix, qscale, q50;
134 float ss2, ssa, sa2, ssba, saba, sba2, rat, fq, qtotal, qpixel;
135 float originx, originy, qfy, qly, qfx, qlx, bias,
maxpix, minmax;
136 double chi2x, meanx, chi2y, meany, chi2ymin, chi2xmin, chi21max;
137 double hchi2, hndof, prvav, mpv, sigmaQ, kappa, xvav, beta2;
139 float chi2ybin[41], chi2xbin[41], ysig2[
BYSIZE], xsig2[
BXSIZE];
141 bool yd[
BYSIZE], xd[
BXSIZE], anyyd, anyxd, calc_probQ, use_VVIObj;
143 const float probmin={1.110223e-16};
144 const float probQmin={1.e-5};
148 const double mean1pix={0.100}, chi21min={0.160};
153 if(!templ.
interpolate(
id, cotalpha, cotbeta, locBz)) {
154 if (
theVerboseLevel > 2) {
LOGDEBUG(
"SiPixelTemplateReco") <<
"input cluster direction cot(alpha) = " << cotalpha <<
", cot(beta) = " << cotbeta<<
", local B_z = " << locBz <<
", template ID = " <<
id <<
", no reconstruction performed" <<
ENDL;}
168 if(speed < -1) use_VVIObj =
true;
174 if(speed < 5) use_VVIObj =
true;
180 xsize = templ.
xsize();
181 ysize = templ.
ysize();
194 if(cluster.num_dimensions() != 2) {
195 LOGERROR(
"SiPixelTemplateReco") <<
"input cluster container (BOOST Multiarray) has wrong number of dimensions" <<
ENDL;
198 nclusx = (int)cluster.shape()[0];
199 nclusy = (int)cluster.shape()[1];
200 if(nclusx != (
int)xdouble.size()) {
201 LOGERROR(
"SiPixelTemplateReco") <<
"input cluster container x-size is not equal to double pixel flag container size" <<
ENDL;
204 if(nclusy != (
int)ydouble.size()) {
205 LOGERROR(
"SiPixelTemplateReco") <<
"input cluster container y-size is not equal to double pixel flag container size" <<
ENDL;
216 for(j=0; j<nclusx; ++
j)
217 for(i=0; i<nclusy; ++
i)
218 if(cluster[j][i] > 0) {cluster[
j][
i] *= qscale;}
225 for(i=0; i<nclusy; ++
i) {
227 if(ydouble[i]) {maxpix *=2.;}
228 for(j=0; j<nclusx; ++
j) {
229 qtotal += cluster[
j][
i];
230 if(cluster[j][i] > maxpix) {cluster[
j][
i] =
maxpix;}
237 fypix =
BYM3; lypix = -1;
238 for(i=0; i<nclusy; ++
i) {
239 ysum[
i] = 0.; nyzero[
i] = 0;
241 for(j=0; j<nclusx; ++
j) {
242 ysum[
i] += cluster[
j][
i];
246 if(i < fypix) {fypix =
i;}
247 if(i > lypix) {lypix =
i;}
255 std::vector<std::pair<int, int> >::const_iterator zeroIter = zeropix.begin(), zeroEnd = zeropix.end();
256 for ( ; zeroIter != zeroEnd; ++zeroIter ) {
257 i = zeroIter->second;
258 if(i<0 || i>
TYSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column y-index " << i <<
", no reconstruction performed" <<
ENDL;
264 if(i < fypix) {fypix =
i;}
265 if(i > lypix) {lypix =
i;}
268 nypix = lypix-fypix+1;
272 for (zeroIter = zeropix.begin(); zeroIter != zeroEnd; ++zeroIter ) {
273 i = zeroIter->second; j = zeroIter->first;
274 if(j<0 || j>
TXSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column x-index " << j <<
", no reconstruction performed" <<
ENDL;
276 if((i == fypix || i == lypix) && nypix > 1) {maxpix = templ.
symax()/2.;}
else {maxpix = templ.
symax();}
277 if(ydouble[i]) {maxpix *=2.;}
278 if(nyzero[i] > 0 && nyzero[i] < 3) {qpixel = (maxpix - ysum[
i])/(
float)nyzero[
i];}
else {qpixel = 1.;}
279 if(qpixel < 1.) {qpixel = 1.;}
280 cluster[
j][
i] = qpixel;
289 for(i=0; i<
BYSIZE; ++
i) { ysum[
i] = 0.; yd[
i] =
false;}
292 for(i=0; i<nclusy; ++
i) {
293 for(j=0; j<nclusx; ++
j) {
294 ysum[
k] += cluster[
j][
i];
310 if(k >
BYM1) {
break;}
315 for(i=0; i<
BXSIZE; ++
i) { xsum[
i] = 0.; xd[
i] =
false;}
318 for(j=0; j<nclusx; ++
j) {
319 for(i=0; i<nclusy; ++
i) {
320 xsum[
k] += cluster[
j][
i];
336 if(k >
BXM1) {
break;}
347 if(fypix == -1) {fypix =
i;}
349 ysort[logypx] = ysum[
i];
361 if((lypix-fypix+1) != nypix || nypix == 0) {
362 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
364 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
365 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
366 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
375 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster is larger than maximum template size" <<
ENDL;
377 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
378 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
379 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
392 midpix = (fypix+lypix)/2;
393 shifty =
BHY - midpix;
395 for(i=lypix; i>=fypix; --
i) {
396 ysum[i+shifty] = ysum[
i];
398 yd[i+shifty] = yd[
i];
401 }
else if (shifty < 0) {
402 for(i=fypix; i<=lypix; ++
i) {
403 ysum[i+shifty] = ysum[
i];
405 yd[i+shifty] = yd[
i];
414 if(fypix > 1 && fypix <
BYM2) {
415 ysum[fypix-1] = pseudopix;
416 ysum[fypix-2] = pseudopix;
418 if(lypix > 1 && lypix <
BYM2) {
419 ysum[lypix+1] = pseudopix;
420 ysum[lypix+2] = pseudopix;
439 if(fxpix == -1) {fxpix =
i;}
441 xsort[logxpx] = xsum[
i];
453 if((lxpix-fxpix+1) != nxpix) {
455 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
457 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
458 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
459 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
469 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster is larger than maximum template size" <<
ENDL;
471 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
472 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
473 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
486 midpix = (fxpix+lxpix)/2;
487 shiftx =
BHX - midpix;
489 for(i=lxpix; i>=fxpix; --
i) {
490 xsum[i+shiftx] = xsum[
i];
492 xd[i+shiftx] = xd[
i];
495 }
else if (shiftx < 0) {
496 for(i=fxpix; i<=lxpix; ++
i) {
497 xsum[i+shiftx] = xsum[
i];
499 xd[i+shiftx] = xd[
i];
508 if(fxpix > 1 && fxpix <
BXM2) {
509 xsum[fxpix-1] = pseudopix;
510 xsum[fxpix-2] = pseudopix;
512 if(lxpix > 1 && lxpix <
BXM2) {
513 xsum[lxpix+1] = pseudopix;
514 xsum[lxpix+2] = pseudopix;
527 fq = qtotal/templ.
qavg();
545 if(!deadpix && qtotal < 0.95*templ.
qmin()) {qbin = 5;}
else {
546 if(!deadpix && qtotal < 0.95*templ.
qmin(1)) {qbin = 4;}
551 " cot(alpha) = " << cotalpha <<
" cot(beta) = " << cotbeta <<
552 " nclusx = " << nclusx <<
" nclusy = " << nclusy <<
ENDL;
560 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
561 if(speed < 0 || speed > 3) {
562 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::PixelTempReco2D called with illegal speed = " << speed << std::endl;
565 assert(speed >= 0 && speed < 4);
567 fybin = 2; lybin = 38; fxbin = 2; lxbin = 38; djy = 1; djx = 1;
569 fybin = 8; lybin = 32;
570 if(yd[fypix]) {fybin = 4; lybin = 36;}
572 if(yd[lypix-1]) {fybin = 4; lybin = 36;}
574 fxbin = 8; lxbin = 32;
575 if(xd[fxpix]) {fxbin = 4; lxbin = 36;}
577 if(xd[lxpix-1]) {fxbin = 4; lxbin = 36;}
584 if(!anyyd) {djy = 4;}
585 if(!anyxd) {djx = 4;}
591 "fypix " << fypix <<
" lypix = " << lypix <<
592 " fybin = " << fybin <<
" lybin = " << lybin <<
593 " djy = " << djy <<
" logypx = " << logypx <<
ENDL;
595 "fxpix " << fxpix <<
" lxpix = " << lxpix <<
596 " fxbin = " << fxbin <<
" lxbin = " << lxbin <<
597 " djx = " << djx <<
" logxpx = " << logxpx <<
ENDL;
602 templ.
ytemp(fybin, lybin, ytemp);
604 templ.
xtemp(fxbin, lxbin, xtemp);
615 if(yd[i] && !yd[i+1]) {
616 for(j=fybin; j<=lybin; ++
j) {
620 sigavg = (ytemp[
j][
i] + ytemp[
j][i+1])/2.;
621 ytemp[
j][
i] = sigavg;
622 ytemp[
j][i+1] = sigavg;
633 sythr = 1.1*(templ.
symax());
638 if(logypx == 1) {sythr = 1.01f*ysort[0];}
else {
639 if (ysort[1] > sythr) { sythr = 1.01f*ysort[1]; }
645 templ.
ysigma2(fypix, lypix, sythr, ysum, ysig2);
650 for(i=fybin; i<=lybin; ++
i) {
651 chi2ybin[
i] = -1.e15f;
654 for(i=fypix-2; i<=lypix+2; ++
i) {
655 yw2[
i] = 1.f/ysig2[
i];
656 ysw[
i] = ysum[
i]*yw2[
i];
657 ss2 += ysum[
i]*ysw[
i];
664 for(j=jmin; j<=jmax; j+=deltaj) {
665 if(chi2ybin[j] < -100.
f) {
668 for(i=fypix-2; i<=lypix+2; ++
i) {
669 ssa += ysw[
i]*ytemp[
j][
i];
670 sa2 += ytemp[
j][
i]*ytemp[
j][
i]*yw2[
i];
673 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2ymin normalization (1) = " << rat <<
ENDL; rat = 1.;}
674 chi2ybin[
j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
676 if(chi2ybin[j] < chi2ymin) {
677 chi2ymin = chi2ybin[
j];
682 if(minbin > fybin) {jmin = minbin - deltaj;}
else {jmin = fybin;}
683 if(minbin < lybin) {jmax = minbin + deltaj;}
else {jmax = lybin;}
688 "minbin " << minbin <<
" chi2ymin = " << chi2ymin <<
ENDL;
696 delta = templ.
dyone();
697 sigma = templ.
syone();
699 delta = templ.
dytwo();
700 sigma = templ.
sytwo();
703 yrec = 0.5f*(fypix+lypix-2*shifty+2.f*originy)*ysize-delta;
712 chi21max = fmax(chi21min, (
double)templ.
chi2yminone());
714 if(chi2ymin < 0.) {chi2ymin = 0.;}
716 meany = fmax(mean1pix, (
double)templ.
chi2yavgone());
717 hchi2 = chi2ymin/2.; hndof = meany/2.;
726 if(binl < fybin) { binl = fybin;}
727 if(binh > lybin) { binh = lybin;}
733 for(i=fypix-2; i<=lypix+2; ++
i) {
734 ssa += ysw[
i]*ytemp[binl][
i];
735 sa2 += ytemp[binl][
i]*ytemp[binl][
i]*yw2[
i];
736 ssba += ysw[
i]*(ytemp[binh][
i] - ytemp[binl][
i]);
737 saba += ytemp[binl][
i]*(ytemp[binh][
i] - ytemp[binl][
i])*yw2[i];
738 sba2 += (ytemp[binh][
i] - ytemp[binl][
i])*(ytemp[binh][i] - ytemp[binl][i])*yw2[
i];
743 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
744 if(rat < 0.) {rat=0.;}
745 if(rat > 1.) {rat=1.0;}
746 rnorm = (ssa+rat*ssba)/ss2;
751 if(yd[fypix]) {qfy+=ysum[fypix+1];}
754 if(yd[lypix-1]) {qly+=ysum[lypix-1];}
761 float qyfrac = (qfy-qly)/(qfy+qly);
762 bias = templ.
yflcorr(binq,qyfrac)+templ.
yavg(binq);
766 yrec = (0.125f*binl+
BHY-2.5f+rat*(binh-binl)*0.125
f-(
float)shifty+originy)*ysize - bias;
767 sigmay = templ.
yrms(binq);
771 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2y normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
772 chi2y=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2ymin(binq);
773 if(chi2y < 0.0) {chi2y = 0.0;}
775 if(meany < 0.01) {meany = 0.01;}
779 hchi2 = chi2y/2.; hndof = meany/2.;
792 if(xd[i] && !xd[i+1]) {
793 for(j=fxbin; j<=lxbin; ++
j) {
797 sigavg = (xtemp[
j][
i] + xtemp[
j][i+1])/2.;
798 xtemp[
j][
i] = sigavg;
799 xtemp[
j][i+1] = sigavg;
810 sxthr = 1.1f*templ.
sxmax();
814 if(logxpx == 1) {sxthr = 1.01f*xsort[0];}
else {
815 if (xsort[1] > sxthr) { sxthr = 1.01f*xsort[1]; }
821 templ.
xsigma2(fxpix, lxpix, sxthr, xsum, xsig2);
826 for(i=fxbin; i<=lxbin; ++
i) { chi2xbin[
i] = -1.e15f;}
828 for(i=fxpix-2; i<=lxpix+2; ++
i) {
829 xw2[
i] = 1.f/xsig2[
i];
830 xsw[
i] = xsum[
i]*xw2[
i];
831 ss2 += xsum[
i]*xsw[
i];
839 for(j=jmin; j<=jmax; j+=deltaj) {
840 if(chi2xbin[j] < -100.
f) {
843 for(i=fxpix-2; i<=lxpix+2; ++
i) {
844 ssa += xsw[
i]*xtemp[
j][
i];
845 sa2 += xtemp[
j][
i]*xtemp[
j][
i]*xw2[
i];
848 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2xmin normalization (1) = " << rat <<
ENDL; rat = 1.;}
849 chi2xbin[
j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
851 if(chi2xbin[j] < chi2xmin) {
852 chi2xmin = chi2xbin[
j];
857 if(minbin > fxbin) {jmin = minbin - deltaj;}
else {jmin = fxbin;}
858 if(minbin < lxbin) {jmax = minbin + deltaj;}
else {jmax = lxbin;}
863 "minbin " << minbin <<
" chi2xmin = " << chi2xmin <<
ENDL;
871 delta = templ.
dxone();
872 sigma = templ.
sxone();
874 delta = templ.
dxtwo();
875 sigma = templ.
sxtwo();
877 xrec = 0.5*(fxpix+lxpix-2*shiftx+2.*originx)*xsize-delta;
886 chi21max = fmax(chi21min, (
double)templ.
chi2xminone());
888 if(chi2xmin < 0.) {chi2xmin = 0.;}
889 meanx = fmax(mean1pix, (
double)templ.
chi2xavgone());
890 hchi2 = chi2xmin/2.; hndof = meanx/2.;
899 if(binl < fxbin) { binl = fxbin;}
900 if(binh > lxbin) { binh = lxbin;}
906 for(i=fxpix-2; i<=lxpix+2; ++
i) {
907 ssa += xsw[
i]*xtemp[binl][
i];
908 sa2 += xtemp[binl][
i]*xtemp[binl][
i]*xw2[
i];
909 ssba += xsw[
i]*(xtemp[binh][
i] - xtemp[binl][
i]);
910 saba += xtemp[binl][
i]*(xtemp[binh][
i] - xtemp[binl][
i])*xw2[i];
911 sba2 += (xtemp[binh][
i] - xtemp[binl][
i])*(xtemp[binh][i] - xtemp[binl][i])*xw2[
i];
916 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
917 if(rat < 0.
f) {rat=0.f;}
918 if(rat > 1.
f) {rat=1.0f;}
919 rnorm = (ssa+rat*ssba)/ss2;
924 if(xd[fxpix]) {qfx+=xsum[fxpix+1];}
927 if(xd[lxpix-1]) {qlx+=xsum[lxpix-1];}
934 float qxfrac = (qfx-qlx)/(qfx+qlx);
935 bias = templ.
xflcorr(binq,qxfrac)+templ.
xavg(binq);
939 xrec = (0.125f*binl+
BHX-2.5f+rat*(binh-binl)*0.125
f-(
float)shiftx+originx)*xsize - bias;
940 sigmax = templ.
xrms(binq);
944 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2x normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
945 chi2x=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2xmin(binq);
946 if(chi2x < 0.0) {chi2x = 0.0;}
948 if(meanx < 0.01) {meanx = 0.01;}
952 hchi2 = chi2x/2.; hndof = meanx/2.;
958 if(proby < probmin) {proby = probmin;}
959 if(probx < probmin) {probx = probmin;}
968 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
969 if((sigmaQ <=0.) || (mpv <= 0.) || (kappa < 0.01) || (kappa > 9.9)) {
970 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::Vavilov parameters mpv/sigmaQ/kappa = " << mpv <<
"/" << sigmaQ <<
"/" << kappa << std::endl;
973 assert((sigmaQ > 0.) && (mpv > 0.) && (kappa > 0.01) && (kappa < 10.));
975 xvav = ((double)qtotal-mpv)/sigmaQ;
979 VVIObj vvidist(kappa, beta2, 1);
980 prvav = vvidist.
fcn(xvav);
987 prvav = TMath::VavilovI(xvav, kappa, beta2);
993 if(probQ < probQmin) {probQ = probQmin;}
1031 std::vector<bool>& ydouble, std::vector<bool>& xdouble,
1033 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1038 const bool deadpix =
false;
1039 std::vector<std::pair<int, int> > zeropix;
1042 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ);
1075 std::vector<bool>& ydouble, std::vector<bool>& xdouble,
1077 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1082 const bool deadpix =
false;
1083 std::vector<std::pair<int, int> > zeropix;
1085 if(cotbeta < 0.) {locBz = -locBz;}
1088 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ);
1119 std::vector<bool>& ydouble, std::vector<bool>& xdouble,
1121 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed)
1125 const bool deadpix =
false;
1126 std::vector<std::pair<int, int> > zeropix;
1128 if(cotbeta < 0.) {locBz = -locBz;}
1130 if(speed < 0) speed = 0;
1131 if(speed > 3) speed = 3;
1134 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ);
float chi2xminone()
//!< minimum of x chi^2 for 1 pixel clusters
float symax()
average pixel signal for y-projection of cluster
float yavg(int i)
average y-bias of reconstruction binned in 4 charge bins
float chi2xmin(int i)
minimum y chi^2 in 4 charge bins
float chi2ymin(int i)
minimum y chi^2 in 4 charge bins
float xrms(int i)
average x-rms of reconstruction binned in 4 charge bins
float qmin()
minimum cluster charge for valid hit (keeps 99.9% of simulated hits)
float xflcorr(int binq, float qflx)
float sytwo()
rms for one double-pixel y-clusters
float chi2yminone()
//!< minimum of y chi^2 for 1 pixel clusters
bool interpolate(int id, float cotalpha, float cotbeta, float locBz)
float sxone()
rms for one pixel x-clusters
boost::multi_array< float, 2 > array_2d
float qscale()
charge scaling factor
float dxone()
mean offset/correction for one pixel x-clusters
static int theVerboseLevel
float chi2yavg(int i)
average y chi^2 in 4 charge bins
void vavilov_pars(double &mpv, double &sigma, double &kappa)
void xtemp(int fxbin, int lxbin, float xtemplate[41][BXSIZE])
float yrms(int i)
average y-rms of reconstruction binned in 4 charge bins
float yflcorr(int binq, float qfly)
float xsize()
pixel x-size (microns)
void ytemp(int fybin, int lybin, float ytemplate[41][BYSIZE])
float sxtwo()
rms for one double-pixel x-clusters
int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, array_2d &cluster, std::vector< bool > &ydouble, std::vector< bool > &xdouble, SiPixelTemplate &templ, float &yrec, float &sigmay, float &proby, float &xrec, float &sigmax, float &probx, int &qbin, int speed, bool deadpix, std::vector< std::pair< int, int > > &zeropix, float &probQ)
float dytwo()
mean offset/correction for one double-pixel y-clusters
double fcn(double x) const
float s50()
1/2 of the pixel threshold signal in electrons
float syone()
rms for one pixel y-clusters
float chi2yavgone()
//!< average y chi^2 for 1 pixel clusters
float qavg()
average cluster charge for this set of track angles
float sxmax()
average pixel signal for x-projection of cluster
void xsigma2(int fxpix, int lxpix, float sxthr, float xsum[BXSIZE], float xsig2[BXSIZE])
float chi2xavgone()
//!< average x chi^2 for 1 pixel clusters
float pixmax()
maximum pixel charge
void ysigma2(int fypix, int lypix, float sythr, float ysum[BYSIZE], float ysig2[BYSIZE])
float chi2xavg(int i)
averaage x chi^2 in 4 charge bins
float dyone()
mean offset/correction for one pixel y-clusters
float xavg(int i)
average x-bias of reconstruction binned in 4 charge bins
float dxtwo()
mean offset/correction for one double-pixel x-clusters
float ysize()
pixel y-size (microns)