49 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
60 #include "Math/DistFunc.h"
64 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
68 #define LOGERROR(x) edm::LogError(x)
69 #define LOGDEBUG(x) LogDebug(x)
77 #define LOGERROR(x) std::cout << x << ": "
78 #define LOGDEBUG(x) std::cout << x << ": "
79 #define ENDL std::endl
82 using namespace SiPixelTemplateReco;
127 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,
132 int i,
j,
k, minbin, binl, binh, binq, midpix, fypix, nypix, lypix, logypx;
133 int fxpix, nxpix, lxpix, logxpx, shifty, shiftx, nyzero[
TYSIZE];
135 int deltaj, jmin, jmax, fxbin, lxbin, fybin, lybin, djy, djx;
137 float sythr, sxthr, rnorm,
delta, sigma, sigavg, pseudopix, qscale, q50;
138 float ss2, ssa, sa2, ssba, saba, sba2, rat, fq, qtotal, qpixel;
139 float originx, originy, qfy, qly, qfx, qlx, bias,
maxpix, minmax;
140 double chi2x, meanx, chi2y, meany, chi2ymin, chi2xmin, chi21max;
141 double hchi2, hndof, prvav, mpv, sigmaQ,
kappa, xvav, beta2;
143 float chi2ybin[41], chi2xbin[41], ysig2[
BYSIZE], xsig2[
BXSIZE];
145 bool yd[
BYSIZE], xd[
BXSIZE], anyyd, anyxd, calc_probQ, use_VVIObj;
147 const float probmin={1.110223e-16};
148 const float probQmin={1.e-5};
152 const double mean1pix={0.100}, chi21min={0.160};
157 if(!templ.
interpolate(
id, cotalpha, cotbeta, locBz)) {
158 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();
186 pseudopix = 0.2f*q50;
194 nclusx = cluster.
mrow;
195 nclusy = (int)cluster.
mcol;
196 auto const xdouble = cluster.
xdouble;
197 auto const ydouble = cluster.
ydouble;
201 for(i=0; i<nclusx*nclusy; ++i) {
207 for(j=0; j<nclusx; ++
j)
208 for(i=0; i<nclusy; ++
i) {
210 if(ydouble[i]) {maxpix *=2.f;}
211 if(cluster(j,i) > maxpix) {cluster(j,i) =
maxpix;}
218 fypix =
BYM3; lypix = -1;
219 for(i=0; i<nclusy; ++
i) {
220 ysum[
i] = 0.f; nyzero[
i] = 0;
222 for(j=0; j<nclusx; ++
j) {
223 ysum[
i] += cluster(j,i);
227 if(i < fypix) {fypix =
i;}
228 if(i > lypix) {lypix =
i;}
236 std::vector<std::pair<int, int> >::const_iterator zeroIter = zeropix.begin(), zeroEnd = zeropix.end();
237 for ( ; zeroIter != zeroEnd; ++zeroIter ) {
238 i = zeroIter->second;
239 if(i<0 || i>
TYSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column y-index " << i <<
", no reconstruction performed" <<
ENDL;
245 if(i < fypix) {fypix =
i;}
246 if(i > lypix) {lypix =
i;}
249 nypix = lypix-fypix+1;
253 for (zeroIter = zeropix.begin(); zeroIter != zeroEnd; ++zeroIter ) {
254 i = zeroIter->second; j = zeroIter->first;
255 if(j<0 || j>
TXSIZE-1) {
LOGERROR(
"SiPixelTemplateReco") <<
"dead pixel column x-index " << j <<
", no reconstruction performed" <<
ENDL;
257 if((i == fypix || i == lypix) && nypix > 1) {maxpix = templ.
symax()/2.;}
else {maxpix = templ.
symax();}
258 if(ydouble[i]) {maxpix *=2.;}
259 if(nyzero[i] > 0 && nyzero[i] < 3) {qpixel = (maxpix - ysum[
i])/(
float)nyzero[
i];}
else {qpixel = 1.;}
260 if(qpixel < 1.) {qpixel = 1.;}
261 cluster(j,i) = qpixel;
270 for(i=0; i<
BYSIZE; ++
i) { ysum[
i] = 0.f; yd[
i] =
false;}
273 for(i=0; i<nclusy; ++
i) {
274 for(j=0; j<nclusx; ++
j) {
275 ysum[
k] += cluster(j,i);
291 if(k >
BYM1) {
break;}
296 for(i=0; i<
BXSIZE; ++
i) { xsum[
i] = 0.f; xd[
i] =
false;}
299 for(j=0; j<nclusx; ++
j) {
300 for(i=0; i<nclusy; ++
i) {
301 xsum[
k] += cluster(j,i);
317 if(k >
BXM1) {
break;}
328 if(fypix == -1) {fypix =
i;}
330 ysort[logypx] = ysum[
i];
342 if((lypix-fypix+1) != nypix || nypix == 0) {
343 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
345 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
346 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
347 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
356 LOGDEBUG(
"SiPixelTemplateReco") <<
"y-length of pixel cluster is larger than maximum template size" <<
ENDL;
358 LOGDEBUG(
"SiPixelTemplateReco") <<
"ysum[] = ";
359 for(i=0; i<BYSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << ysum[
i] <<
", ";}
360 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BYSIZE-1] <<
ENDL;
373 midpix = (fypix+lypix)/2;
374 shifty = templ.
cytemp() - midpix;
376 for(i=lypix; i>=fypix; --
i) {
377 ysum[i+shifty] = ysum[
i];
379 yd[i+shifty] = yd[
i];
382 }
else if (shifty < 0) {
383 for(i=fypix; i<=lypix; ++
i) {
384 ysum[i+shifty] = ysum[
i];
386 yd[i+shifty] = yd[
i];
395 if(fypix > 1 && fypix <
BYM2) {
396 ysum[fypix-1] = pseudopix;
397 ysum[fypix-2] = pseudopix;
399 if(lypix > 1 && lypix <
BYM2) {
400 ysum[lypix+1] = pseudopix;
401 ysum[lypix+2] = pseudopix;
420 if(fxpix == -1) {fxpix =
i;}
422 xsort[logxpx] = xsum[
i];
434 if((lxpix-fxpix+1) != nxpix) {
436 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster doesn't agree with number of pixels above threshold" <<
ENDL;
438 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
439 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
440 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
450 LOGDEBUG(
"SiPixelTemplateReco") <<
"x-length of pixel cluster is larger than maximum template size" <<
ENDL;
452 LOGDEBUG(
"SiPixelTemplateReco") <<
"xsum[] = ";
453 for(i=0; i<BXSIZE-1; ++
i) {
LOGDEBUG(
"SiPixelTemplateReco") << xsum[
i] <<
", ";}
454 LOGDEBUG(
"SiPixelTemplateReco") << ysum[BXSIZE-1] <<
ENDL;
467 midpix = (fxpix+lxpix)/2;
468 shiftx = templ.
cxtemp() - midpix;
470 for(i=lxpix; i>=fxpix; --
i) {
471 xsum[i+shiftx] = xsum[
i];
473 xd[i+shiftx] = xd[
i];
476 }
else if (shiftx < 0) {
477 for(i=fxpix; i<=lxpix; ++
i) {
478 xsum[i+shiftx] = xsum[
i];
480 xd[i+shiftx] = xd[
i];
489 if(fxpix > 1 && fxpix <
BXM2) {
490 xsum[fxpix-1] = pseudopix;
491 xsum[fxpix-2] = pseudopix;
493 if(lxpix > 1 && lxpix <
BXM2) {
494 xsum[lxpix+1] = pseudopix;
495 xsum[lxpix+2] = pseudopix;
508 fq = qtotal/templ.
qavg();
526 if(!deadpix && qtotal < 0.95
f*templ.
qmin()) {qbin = 5;}
else {
527 if(!deadpix && qtotal < 0.95
f*templ.
qmin(1)) {qbin = 4;}
532 " cot(alpha) = " << cotalpha <<
" cot(beta) = " << cotbeta <<
533 " nclusx = " << nclusx <<
" nclusy = " << nclusy <<
ENDL;
541 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
542 if(speed < 0 || speed > 3) {
543 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::PixelTempReco2D called with illegal speed = " << speed << std::endl;
546 assert(speed >= 0 && speed < 4);
548 fybin = 2; lybin = 38; fxbin = 2; lxbin = 38; djy = 1; djx = 1;
550 fybin = 8; lybin = 32;
551 if(yd[fypix]) {fybin = 4; lybin = 36;}
553 if(yd[lypix-1]) {fybin = 4; lybin = 36;}
555 fxbin = 8; lxbin = 32;
556 if(xd[fxpix]) {fxbin = 4; lxbin = 36;}
558 if(xd[lxpix-1]) {fxbin = 4; lxbin = 36;}
565 if(!anyyd) {djy = 4;}
566 if(!anyxd) {djx = 4;}
572 "fypix " << fypix <<
" lypix = " << lypix <<
573 " fybin = " << fybin <<
" lybin = " << lybin <<
574 " djy = " << djy <<
" logypx = " << logypx <<
ENDL;
576 "fxpix " << fxpix <<
" lxpix = " << lxpix <<
577 " fxbin = " << fxbin <<
" lxbin = " << lxbin <<
578 " djx = " << djx <<
" logxpx = " << logxpx <<
ENDL;
583 templ.
ytemp(fybin, lybin, ytemp);
585 templ.
xtemp(fxbin, lxbin, xtemp);
596 if(yd[i] && !yd[i+1]) {
597 for(j=fybin; j<=lybin; ++
j) {
601 sigavg = (ytemp[
j][
i] + ytemp[
j][i+1])/2.
f;
602 ytemp[
j][
i] = sigavg;
603 ytemp[
j][i+1] = sigavg;
614 sythr = 1.1*(templ.
symax());
618 std::sort(&ysort[0], &ysort[logypx]);
619 if(logypx == 1) {sythr = 1.01f*ysort[0];}
else {
620 if (ysort[1] > sythr) { sythr = 1.01f*ysort[1]; }
626 templ.
ysigma2(fypix, lypix, sythr, ysum, ysig2);
631 for(i=fybin; i<=lybin; ++
i) { chi2ybin[
i] = -1.e15f;}
633 for(i=fypix-2; i<=lypix+2; ++
i) {
634 yw2[
i] = 1.f/ysig2[
i];
635 ysw[
i] = ysum[
i]*yw2[
i];
636 ss2 += ysum[
i]*ysw[
i];
644 for(j=jmin; j<=jmax; j+=deltaj) {
645 if(chi2ybin[j] < -100.
f) {
648 for(i=fypix-2; i<=lypix+2; ++
i) {
649 ssa += ysw[
i]*ytemp[
j][
i];
650 sa2 += ytemp[
j][
i]*ytemp[
j][
i]*yw2[
i];
653 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2ymin normalization (1) = " << rat <<
ENDL; rat = 1.;}
654 chi2ybin[
j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
656 if(chi2ybin[j] < chi2ymin) {
657 chi2ymin = chi2ybin[
j];
662 if(minbin > fybin) {jmin = minbin - deltaj;}
else {jmin = fybin;}
663 if(minbin < lybin) {jmax = minbin + deltaj;}
else {jmax = lybin;}
668 "minbin " << minbin <<
" chi2ymin = " << chi2ymin <<
ENDL;
676 delta = templ.
dyone();
677 sigma = templ.
syone();
679 delta = templ.
dytwo();
680 sigma = templ.
sytwo();
683 yrec = 0.5f*(fypix+lypix-2*shifty+2.f*originy)*ysize-delta;
692 chi21max = fmax(chi21min, (
double)templ.
chi2yminone());
694 if(chi2ymin < 0.) {chi2ymin = 0.;}
696 meany = fmax(mean1pix, (
double)templ.
chi2yavgone());
697 hchi2 = chi2ymin/2.; hndof = meany/2.;
706 if(binl < fybin) { binl = fybin;}
707 if(binh > lybin) { binh = lybin;}
713 for(i=fypix-2; i<=lypix+2; ++
i) {
714 ssa += ysw[
i]*ytemp[binl][
i];
715 sa2 += ytemp[binl][
i]*ytemp[binl][
i]*yw2[
i];
716 ssba += ysw[
i]*(ytemp[binh][
i] - ytemp[binl][
i]);
717 saba += ytemp[binl][
i]*(ytemp[binh][
i] - ytemp[binl][
i])*yw2[i];
718 sba2 += (ytemp[binh][
i] - ytemp[binl][
i])*(ytemp[binh][i] - ytemp[binl][i])*yw2[
i];
723 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
724 if(rat < 0.
f) {rat=0.f;}
725 if(rat > 1.
f) {rat=1.0f;}
726 rnorm = (ssa+rat*ssba)/ss2;
731 if(yd[fypix]) {qfy+=ysum[fypix+1];}
734 if(yd[lypix-1]) {qly+=ysum[lypix-1];}
741 float qyfrac = (qfy-qly)/(qfy+qly);
742 bias = templ.
yflcorr(binq,qyfrac)+templ.
yavg(binq);
746 yrec = (0.125f*binl+
BHY-2.5f+rat*(binh-binl)*0.125
f-(
float)shifty+originy)*ysize - bias;
747 sigmay = templ.
yrms(binq);
751 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2y normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
752 chi2y=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2ymin(binq);
753 if(chi2y < 0.0) {chi2y = 0.0;}
755 if(meany < 0.01) {meany = 0.01;}
759 hchi2 = chi2y/2.; hndof = meany/2.;
772 if(xd[i] && !xd[i+1]) {
773 for(j=fxbin; j<=lxbin; ++
j) {
777 sigavg = (xtemp[
j][
i] + xtemp[
j][i+1])/2.
f;
778 xtemp[
j][
i] = sigavg;
779 xtemp[
j][i+1] = sigavg;
790 sxthr = 1.1f*templ.
sxmax();
793 std::sort(&xsort[0], &xsort[logxpx]);
794 if(logxpx == 1) {sxthr = 1.01f*xsort[0];}
else {
795 if (xsort[1] > sxthr) { sxthr = 1.01f*xsort[1]; }
801 templ.
xsigma2(fxpix, lxpix, sxthr, xsum, xsig2);
806 for(i=fxbin; i<=lxbin; ++
i) { chi2xbin[
i] = -1.e15f;}
808 for(i=fxpix-2; i<=lxpix+2; ++
i) {
809 xw2[
i] = 1.f/xsig2[
i];
810 xsw[
i] = xsum[
i]*xw2[
i];
811 ss2 += xsum[
i]*xsw[
i];
818 for(j=jmin; j<=jmax; j+=deltaj) {
819 if(chi2xbin[j] < -100.
f) {
822 for(i=fxpix-2; i<=lxpix+2; ++
i) {
823 ssa += xsw[
i]*xtemp[
j][
i];
824 sa2 += xtemp[
j][
i]*xtemp[
j][
i]*xw2[
i];
827 if(rat <= 0.
f) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2xmin normalization (1) = " << rat <<
ENDL; rat = 1.;}
828 chi2xbin[
j]=ss2-2.f*ssa/rat+sa2/(rat*rat);
830 if(chi2xbin[j] < chi2xmin) {
831 chi2xmin = chi2xbin[
j];
836 if(minbin > fxbin) {jmin = minbin - deltaj;}
else {jmin = fxbin;}
837 if(minbin < lxbin) {jmax = minbin + deltaj;}
else {jmax = lxbin;}
842 "minbin " << minbin <<
" chi2xmin = " << chi2xmin <<
ENDL;
850 delta = templ.
dxone();
851 sigma = templ.
sxone();
853 delta = templ.
dxtwo();
854 sigma = templ.
sxtwo();
856 xrec = 0.5*(fxpix+lxpix-2*shiftx+2.*originx)*xsize-delta;
865 chi21max = fmax(chi21min, (
double)templ.
chi2xminone());
867 if(chi2xmin < 0.) {chi2xmin = 0.;}
868 meanx = fmax(mean1pix, (
double)templ.
chi2xavgone());
869 hchi2 = chi2xmin/2.; hndof = meanx/2.;
878 if(binl < fxbin) { binl = fxbin;}
879 if(binh > lxbin) { binh = lxbin;}
885 for(i=fxpix-2; i<=lxpix+2; ++
i) {
886 ssa += xsw[
i]*xtemp[binl][
i];
887 sa2 += xtemp[binl][
i]*xtemp[binl][
i]*xw2[
i];
888 ssba += xsw[
i]*(xtemp[binh][
i] - xtemp[binl][
i]);
889 saba += xtemp[binl][
i]*(xtemp[binh][
i] - xtemp[binl][
i])*xw2[i];
890 sba2 += (xtemp[binh][
i] - xtemp[binl][
i])*(xtemp[binh][i] - xtemp[binl][i])*xw2[
i];
895 rat=(ssba*ssa-ss2*saba)/(ss2*sba2-ssba*ssba);
896 if(rat < 0.
f) {rat=0.f;}
897 if(rat > 1.
f) {rat=1.0f;}
898 rnorm = (ssa+rat*ssba)/ss2;
903 if(xd[fxpix]) {qfx+=xsum[fxpix+1];}
906 if(xd[lxpix-1]) {qlx+=xsum[lxpix-1];}
913 float qxfrac = (qfx-qlx)/(qfx+qlx);
914 bias = templ.
xflcorr(binq,qxfrac)+templ.
xavg(binq);
918 xrec = (0.125f*binl+
BHX-2.5f+rat*(binh-binl)*0.125
f-(
float)shiftx+originx)*xsize - bias;
919 sigmax = templ.
xrms(binq);
923 if(rnorm <= 0.) {
LOGERROR(
"SiPixelTemplateReco") <<
"illegal chi2x normalization (2) = " << rnorm <<
ENDL; rnorm = 1.;}
924 chi2x=ss2-2./rnorm*ssa-2./rnorm*rat*ssba+(sa2+2.*rat*saba+rat*rat*sba2)/(rnorm*rnorm)-templ.
chi2xmin(binq);
925 if(chi2x < 0.0) {chi2x = 0.0;}
927 if(meanx < 0.01) {meanx = 0.01;}
931 hchi2 = chi2x/2.; hndof = meanx/2.;
937 if(proby < probmin) {proby = probmin;}
938 if(probx < probmin) {probx = probmin;}
947 #ifndef SI_PIXEL_TEMPLATE_STANDALONE
948 if((sigmaQ <=0.) || (mpv <= 0.) || (kappa < 0.01) || (kappa > 9.9)) {
949 throw cms::Exception(
"DataCorrupt") <<
"SiPixelTemplateReco::Vavilov parameters mpv/sigmaQ/kappa = " << mpv <<
"/" << sigmaQ <<
"/" << kappa << std::endl;
952 assert((sigmaQ > 0.) && (mpv > 0.) && (kappa > 0.01) && (kappa < 10.));
954 xvav = ((double)qtotal-mpv)/sigmaQ;
958 VVIObjF vvidist(kappa, beta2, 1);
959 prvav = vvidist.
fcn(xvav);
962 prvav = TMath::VavilovI(xvav, kappa, beta2);
968 if(probQ < probQmin) {probQ = probQmin;}
1007 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1012 const bool deadpix =
false;
1013 std::vector<std::pair<int, int> > zeropix;
1016 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ);
1050 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed,
1055 const bool deadpix =
false;
1056 std::vector<std::pair<int, int> > zeropix;
1058 if(cotbeta < 0.) {locBz = -locBz;}
1061 yrec, sigmay, proby, xrec, sigmax, probx, qbin, speed, deadpix, zeropix, probQ);
1093 float& yrec,
float& sigmay,
float& proby,
float& xrec,
float& sigmax,
float& probx,
int& qbin,
int speed)
1097 const bool deadpix =
false;
1098 std::vector<std::pair<int, int> > zeropix;
1100 if(cotbeta < 0.) {locBz = -locBz;}
1102 if(speed < 0) speed = 0;
1103 if(speed > 3) speed = 3;
1106 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
int cytemp()
Return central pixel of y template pixels above readout threshold.
int PixelTempReco2D(int id, float cotalpha, float cotbeta, float locBz, 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)
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)
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
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)