52 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 63 #include "Math/DistFunc.h" 67 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 71 #define LOGERROR(x) edm::LogError(x) 72 #define LOGDEBUG(x) LogDebug(x) 80 #define LOGERROR(x) std::cout << x << ": " 81 #define LOGDEBUG(x) std::cout << x << ": " 82 #define ENDL std::endl 136 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,
137 float& probQ,
int& nypix,
int& nxpix)
141 int i, j,
k, minbin, binl, binh, binq, midpix, fypix, lypix, logypx;
142 int fxpix, lxpix, logxpx, shifty, shiftx, nyzero[
TYSIZE];
144 int deltaj, jmin, jmax, fxbin, lxbin, fybin, lybin, djy, djx;
146 float sythr, sxthr, rnorm,
delta,
sigma, sigavg, pseudopix, qscale, q50;
147 float ss2, ssa, sa2, ssba, saba, sba2, rat, fq, qtotal, qpixel, fbin[3];
148 float originx, originy, qfy, qly, qfx, qlx, bias,
maxpix, minmax;
149 double chi2x, meanx, chi2y, meany, chi2ymin, chi2xmin, chi21max;
150 double hchi2, hndof, prvav, mpv, sigmaQ,
kappa, xvav, beta2;
152 float chi2ybin[41], chi2xbin[41], ysig2[
BYSIZE], xsig2[
BXSIZE];
154 bool yd[
BYSIZE], xd[
BXSIZE], anyyd, anyxd, calc_probQ, use_VVIObj;
156 const float probmin={1.110223e-16};
157 const float probQmin={1.e-5};
161 const double mean1pix={0.100}, chi21min={0.160};
166 if(!templ.
interpolate(
id, cotalpha, cotbeta, locBz, locBx)) {
167 if (
theVerboseLevel > 2) {
LOGDEBUG(
"SiPixelTemplateReco") <<
"input cluster direction cot(alpha) = " << cotalpha <<
", cot(beta) = " << cotbeta <<
", local B_z = " << locBz <<
", local B_x = " << locBx <<
", template ID = " <<
id <<
", no reconstruction performed" <<
ENDL;}
177 if(speed < -1) use_VVIObj =
true;
183 if(speed < 5) use_VVIObj =
true;
189 xsize = templ.
xsize();
190 ysize = templ.
ysize();
195 for(i=0; i<3; ++
i) {fbin[
i] = templ.
fbin(i);}
200 pseudopix = 0.2f*q50;
208 nclusx = cluster.
mrow;
210 auto const xdouble = cluster.
xdouble;
211 auto const ydouble = cluster.
ydouble;
215 for(i=0; i<nclusx*nclusy; ++i) {
221 for(j=0; j<nclusx; ++j)
222 for(i=0; i<nclusy; ++
i) {
224 if(ydouble[i]) {maxpix *=2.f;}
225 if(cluster(j,i) > maxpix) {cluster(j,i) =
maxpix;}
232 fypix =
BYM3; lypix = -1;
233 memset(nyzero, 0,
TYSIZE *
sizeof(
int));
234 memset(ysum, 0,
BYSIZE *
sizeof(
float));
235 for(i=0; i<nclusy; ++
i) {
237 for(j=0; j<nclusx; ++j) {
238 ysum[
i] += cluster(j,i);
242 if(i < fypix) {fypix =
i;}
243 if(i > lypix) {lypix =
i;}
251 std::vector<std::pair<int, int> >::const_iterator zeroIter = zeropix.begin(), zeroEnd = zeropix.end();
252 for ( ; zeroIter != zeroEnd; ++zeroIter ) {
253 i = zeroIter->second;
254 if(i<0 || i>
TYSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column y-index " << i <<
", no reconstruction performed" <<
ENDL;
260 if(i < fypix) {fypix =
i;}
261 if(i > lypix) {lypix =
i;}
264 nypix = lypix-fypix+1;
268 for (zeroIter = zeropix.begin(); zeroIter != zeroEnd; ++zeroIter ) {
269 i = zeroIter->second; j = zeroIter->first;
270 if(j<0 || j>
TXSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column x-index " << j <<
", no reconstruction performed" <<
ENDL;
272 if((i == fypix || i == lypix) && nypix > 1) {maxpix = templ.
symax()/2.;}
else {maxpix = templ.
symax();}
273 if(ydouble[i]) {maxpix *=2.;}
274 if(nyzero[i] > 0 && nyzero[i] < 3) {qpixel = (maxpix - ysum[
i])/(
float)nyzero[
i];}
else {qpixel = 1.;}
275 if(qpixel < 1.) {qpixel = 1.;}
276 cluster(j,i) = qpixel;
285 for(i=0; i<
BYSIZE; ++
i) { ysum[
i] = 0.f; yd[
i] =
false;}
288 for(i=0; i<nclusy; ++
i) {
289 for(j=0; j<nclusx; ++j) {
290 ysum[
k] += cluster(j,i);
306 if(k >
BYM1) {
break;}
311 for(i=0; i<
BXSIZE; ++
i) { xsum[
i] = 0.f; xd[
i] =
false;}
314 for(j=0; j<nclusx; ++j) {
315 for(i=0; i<nclusy; ++
i) {
316 xsum[
k] += cluster(j,i);
332 if(k >
BXM1) {
break;}
343 if(fypix == -1) {fypix =
i;}
345 ysort[logypx] = ysum[
i];
357 if((lypix-fypix+1) != nypix || nypix == 0) {
358 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
360 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
361 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
362 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
371 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster is larger than maximum template size" <<
ENDL;
373 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
374 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
375 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
388 midpix = (fypix+lypix)/2;
389 shifty = templ.
cytemp() - midpix;
391 for(i=lypix; i>=fypix; --
i) {
392 ysum[i+shifty] = ysum[
i];
394 yd[i+shifty] = yd[
i];
397 }
else if (shifty < 0) {
398 for(i=fypix; i<=lypix; ++
i) {
399 ysum[i+shifty] = ysum[
i];
401 yd[i+shifty] = yd[
i];
410 if(fypix > 1 && fypix <
BYM2) {
411 ysum[fypix-1] = pseudopix;
412 ysum[fypix-2] = pseudopix;
414 if(lypix > 1 && lypix <
BYM2) {
415 ysum[lypix+1] = pseudopix;
416 ysum[lypix+2] = pseudopix;
435 if(fxpix == -1) {fxpix =
i;}
437 xsort[logxpx] = xsum[
i];
449 if((lxpix-fxpix+1) != nxpix) {
451 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
453 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
454 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
455 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
465 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster is larger than maximum template size" <<
ENDL;
467 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
468 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
469 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
482 midpix = (fxpix+lxpix)/2;
483 shiftx = templ.
cxtemp() - midpix;
485 for(i=lxpix; i>=fxpix; --
i) {
486 xsum[i+shiftx] = xsum[
i];
488 xd[i+shiftx] = xd[
i];
491 }
else if (shiftx < 0) {
492 for(i=fxpix; i<=lxpix; ++
i) {
493 xsum[i+shiftx] = xsum[
i];
495 xd[i+shiftx] = xd[
i];
504 if(fxpix > 1 && fxpix <
BXM2) {
505 xsum[fxpix-1] = pseudopix;
506 xsum[fxpix-2] = pseudopix;
508 if(lxpix > 1 && lxpix <
BXM2) {
509 xsum[lxpix+1] = pseudopix;
510 xsum[lxpix+2] = pseudopix;
523 fq = qtotal/templ.
qavg();
541 if(!deadpix && qtotal < 0.95
f*templ.
qmin()) {qbin = 5;}
else {
542 if(!deadpix && qtotal < 0.95
f*templ.
qmin(1)) {qbin = 4;}
547 " cot(alpha) = " << cotalpha <<
" cot(beta) = " << cotbeta <<
548 " nclusx = " << nclusx <<
" nclusy = " << nclusy <<
ENDL;
556 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 557 if(speed < 0 || speed > 3) {
558 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::PixelTempReco2D called with illegal speed = " << speed << std::endl;
561 assert(speed >= 0 && speed < 4);
563 fybin = 3; lybin = 37; fxbin = 3; lxbin = 37; djy = 1; djx = 1;
565 fybin = 8; lybin = 32;
566 if(yd[fypix]) {fybin = 4; lybin = 36;}
568 if(yd[lypix-1]) {fybin = 4; lybin = 36;}
570 fxbin = 8; lxbin = 32;
571 if(xd[fxpix]) {fxbin = 4; lxbin = 36;}
573 if(xd[lxpix-1]) {fxbin = 4; lxbin = 36;}
580 if(!anyyd) {djy = 4;}
581 if(!anyxd) {djx = 4;}
587 "fypix " << fypix <<
" lypix = " << lypix <<
588 " fybin = " << fybin <<
" lybin = " << lybin <<
589 " djy = " << djy <<
" logypx = " << logypx <<
ENDL;
591 "fxpix " << fxpix <<
" lxpix = " << lxpix <<
592 " fxbin = " << fxbin <<
" lxbin = " << lxbin <<
593 " djx = " << djx <<
" logxpx = " << logxpx <<
ENDL;
598 templ.
ytemp(fybin, lybin, ytemp);
600 templ.
xtemp(fxbin, lxbin, xtemp);
611 if(yd[i] && !yd[i+1]) {
612 for(j=fybin; j<=lybin; ++j) {
616 sigavg = (ytemp[j][
i] + ytemp[j][i+1])/2.
f;
617 ytemp[j][
i] = sigavg;
618 ytemp[j][i+1] = sigavg;
629 sythr = 1.1*(templ.
symax());
633 std::sort(&ysort[0], &ysort[logypx]);
634 if(logypx == 1) {sythr = 1.01f*ysort[0];}
else {
635 if (ysort[1] > sythr) { sythr = 1.01f*ysort[1]; }
641 templ.
ysigma2(fypix, lypix, sythr, ysum, ysig2);
646 for(i=fybin; i<=lybin; ++
i) { chi2ybin[
i] = -1.e15f;}
648 for(i=fypix-2; i<=lypix+2; ++
i) {
649 yw2[
i] = 1.f/ysig2[
i];
650 ysw[
i] = ysum[
i]*yw2[
i];
651 ss2 += ysum[
i]*ysw[
i];
659 for(j=jmin; j<=jmax; j+=deltaj) {
660 if(chi2ybin[j] < -100.
f) {
663 for(i=fypix-2; i<=lypix+2; ++
i) {
664 ssa += ysw[
i]*ytemp[j][
i];
665 sa2 += ytemp[j][
i]*ytemp[j][
i]*yw2[
i];
668 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2ymin normalization (1) = " << rat <<
ENDL; rat = 1.;}
669 chi2ybin[j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
671 if(chi2ybin[j] < chi2ymin) {
672 chi2ymin = chi2ybin[j];
677 if(minbin > fybin) {jmin = minbin - deltaj;}
else {jmin = fybin;}
678 if(minbin < lybin) {jmax = minbin + deltaj;}
else {jmax = lybin;}
683 "minbin " << minbin <<
" chi2ymin = " << chi2ymin <<
ENDL;
691 delta = templ.
dyone();
692 sigma = templ.
syone();
694 delta = templ.
dytwo();
695 sigma = templ.
sytwo();
698 yrec = 0.5f*(fypix+lypix-2*shifty+2.f*originy)*ysize-delta;
707 chi21max = fmax(chi21min, (
double)templ.
chi2yminone());
709 if(chi2ymin < 0.) {chi2ymin = 0.;}
711 meany = fmax(mean1pix, (
double)templ.
chi2yavgone());
712 hchi2 = chi2ymin/2.; hndof = meany/2.;
721 if(binl < fybin) { binl = fybin;}
722 if(binh > lybin) { binh = lybin;}
728 for(i=fypix-2; i<=lypix+2; ++
i) {
729 ssa += ysw[
i]*ytemp[binl][
i];
730 sa2 += ytemp[binl][
i]*ytemp[binl][
i]*yw2[
i];
731 ssba += ysw[
i]*(ytemp[binh][
i] - ytemp[binl][
i]);
732 saba += ytemp[binl][
i]*(ytemp[binh][
i] - ytemp[binl][
i])*yw2[i];
733 sba2 += (ytemp[binh][
i] - ytemp[binl][
i])*(ytemp[binh][i] - ytemp[binl][i])*yw2[
i];
738 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
739 if(rat < 0.
f) {rat=0.f;}
740 if(rat > 1.
f) {rat=1.0f;}
741 rnorm = (ssa+rat*ssba)/ss2;
746 if(yd[fypix]) {qfy+=ysum[fypix+1];}
749 if(yd[lypix-1]) {qly+=ysum[lypix-1];}
756 float qyfrac = (qfy-qly)/(qfy+qly);
757 bias = templ.
yflcorr(binq,qyfrac)+templ.
yavg(binq);
761 yrec = (0.125f*binl+
BHY-2.5f+rat*(binh-binl)*0.125
f-(
float)shifty+originy)*ysize - bias;
762 sigmay = templ.
yrms(binq);
766 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2y normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
767 chi2y=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2ymin(binq);
768 if(chi2y < 0.0) {chi2y = 0.0;}
770 if(meany < 0.01) {meany = 0.01;}
774 hchi2 = chi2y/2.; hndof = meany/2.;
787 if(xd[i] && !xd[i+1]) {
788 for(j=fxbin; j<=lxbin; ++j) {
792 sigavg = (xtemp[j][
i] + xtemp[j][i+1])/2.
f;
793 xtemp[j][
i] = sigavg;
794 xtemp[j][i+1] = sigavg;
805 sxthr = 1.1f*templ.
sxmax();
808 std::sort(&xsort[0], &xsort[logxpx]);
809 if(logxpx == 1) {sxthr = 1.01f*xsort[0];}
else {
810 if (xsort[1] > sxthr) { sxthr = 1.01f*xsort[1]; }
816 templ.
xsigma2(fxpix, lxpix, sxthr, xsum, xsig2);
821 for(i=fxbin; i<=lxbin; ++
i) { chi2xbin[
i] = -1.e15f;}
823 for(i=fxpix-2; i<=lxpix+2; ++
i) {
824 xw2[
i] = 1.f/xsig2[
i];
825 xsw[
i] = xsum[
i]*xw2[
i];
826 ss2 += xsum[
i]*xsw[
i];
833 for(j=jmin; j<=jmax; j+=deltaj) {
834 if(chi2xbin[j] < -100.
f) {
838 for(i=fxpix-2; i<=lxpix+2; ++
i) {
840 ssa += xsw[
i]*xtemp[j][
i];
841 sa2 += xtemp[j][
i]*xtemp[j][
i]*xw2[
i];
845 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2xmin normalization (1) = " << rat <<
ENDL; rat = 1.;}
846 chi2xbin[j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
848 if(chi2xbin[j] < chi2xmin) {
849 chi2xmin = chi2xbin[j];
854 if(minbin > fxbin) {jmin = minbin - deltaj;}
else {jmin = fxbin;}
855 if(minbin < lxbin) {jmax = minbin + deltaj;}
else {jmax = lxbin;}
860 "minbin " << minbin <<
" chi2xmin = " << chi2xmin <<
ENDL;
868 delta = templ.
dxone();
869 sigma = templ.
sxone();
871 delta = templ.
dxtwo();
872 sigma = templ.
sxtwo();
874 xrec = 0.5*(fxpix+lxpix-2*shiftx+2.*originx)*xsize-delta;
883 chi21max = fmax(chi21min, (
double)templ.
chi2xminone());
885 if(chi2xmin < 0.) {chi2xmin = 0.;}
886 meanx = fmax(mean1pix, (
double)templ.
chi2xavgone());
887 hchi2 = chi2xmin/2.; hndof = meanx/2.;
896 if(binl < fxbin) { binl = fxbin;}
897 if(binh > lxbin) { binh = lxbin;}
903 for(i=fxpix-2; i<=lxpix+2; ++
i) {
904 ssa += xsw[
i]*xtemp[binl][
i];
905 sa2 += xtemp[binl][
i]*xtemp[binl][
i]*xw2[
i];
906 ssba += xsw[
i]*(xtemp[binh][
i] - xtemp[binl][
i]);
907 saba += xtemp[binl][
i]*(xtemp[binh][
i] - xtemp[binl][
i])*xw2[i];
908 sba2 += (xtemp[binh][
i] - xtemp[binl][
i])*(xtemp[binh][i] - xtemp[binl][i])*xw2[
i];
913 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
914 if(rat < 0.
f) {rat=0.f;}
915 if(rat > 1.
f) {rat=1.0f;}
916 rnorm = (ssa+rat*ssba)/ss2;
921 if(xd[fxpix]) {qfx+=xsum[fxpix+1];}
924 if(xd[lxpix-1]) {qlx+=xsum[lxpix-1];}
931 float qxfrac = (qfx-qlx)/(qfx+qlx);
932 bias = templ.
xflcorr(binq,qxfrac)+templ.
xavg(binq);
936 xrec = (0.125f*binl+
BHX-2.5f+rat*(binh-binl)*0.125
f-(
float)shiftx+originx)*xsize - bias;
937 sigmax = templ.
xrms(binq);
941 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2x normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
942 chi2x=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2xmin(binq);
943 if(chi2x < 0.0) {chi2x = 0.0;}
945 if(meanx < 0.01) {meanx = 0.01;}
949 hchi2 = chi2x/2.; hndof = meanx/2.;
955 if(proby < probmin) {proby = probmin;}
956 if(probx < probmin) {probx = probmin;}
965 #ifndef SI_PIXEL_TEMPLATE_STANDALONE 966 if((sigmaQ <=0.) || (mpv <= 0.) || (kappa < 0.01) || (kappa > 9.9)) {
967 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::Vavilov parameters mpv/sigmaQ/kappa = " << mpv <<
"/" << sigmaQ <<
"/" << kappa << std::endl;
970 assert((sigmaQ > 0.) && (mpv > 0.) && (kappa > 0.01) && (kappa < 10.));
972 xvav = ((double)qtotal-mpv)/sigmaQ;
976 VVIObjF vvidist(kappa, beta2, 1);
977 prvav = vvidist.
fcn(xvav);
980 prvav = TMath::VavilovI(xvav, kappa, beta2);
986 if(probQ < probQmin) {probQ = probQmin;}
1030 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1035 const bool deadpix =
false;
1036 std::vector<std::pair<int, int> > zeropix;
1040 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ, nypix, nxpix);
1075 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1080 const bool deadpix =
false;
1081 std::vector<std::pair<int, int> > zeropix;
1085 if(cotbeta < 0.
f) {locBx = -1.f;}
1087 if(cotalpha < 0.
f) {locBz = -locBx;}
1090 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ, nypix, nxpix);
1122 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed)
1126 const bool deadpix =
false;
1127 std::vector<std::pair<int, int> > zeropix;
1131 if(cotbeta < 0.
f) {locBx = -1.f;}
1133 if(cotalpha < 0.
f) {locBz = -locBx;}
1135 if(speed < 0) speed = 0;
1136 if(speed > 3) speed = 3;
1139 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ, nypix, nxpix);
float fbin(int i)
Return lower bound of Qbin definition.
float chi2xminone()
//!< minimum of x chi^2 for 1 pixel clusters
bool interpolate(int id, float cotalpha, float cotbeta, float locBz, float locBx)
float symax()
average pixel signal for y-projection of cluster
float yavg(int i)
average y-bias of reconstruction binned in 4 charge bins
int cytemp()
Return central pixel of y template pixels above readout threshold.
void xsigma2(int fxpix, int lxpix, float sxthr, float xsum[13+4], float xsig2[13+4])
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)
int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, float locBx, ClusMatrix &cluster, 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, int &nypix, int &nxpix)
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
float sxone()
rms for one pixel x-clusters
void ytemp(int fybin, int lybin, float ytemplate[41][21+4])
int cxtemp()
Return central pixel of x-template pixels above readout threshold.
float qscale()
charge scaling factor
float dxone()
mean offset/correction for one pixel x-clusters
float chi2yavg(int i)
average y chi^2 in 4 charge bins
void vavilov_pars(double &mpv, double &sigma, double &kappa)
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 ysigma2(int fypix, int lypix, float sythr, float ysum[21+4], float ysig2[21+4])
float sxtwo()
rms for one double-pixel x-clusters
float dytwo()
mean offset/correction for one double-pixel y-clusters
float s50()
1/2 of the pixel threshold signal in electrons
void xtemp(int fxbin, int lxbin, float xtemplate[41][13+4])
float syone()
rms for one pixel y-clusters
static const int theVerboseLevel
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
float chi2xavgone()
//!< average x chi^2 for 1 pixel clusters
float pixmax()
maximum pixel charge
static const G4double kappa
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)