#ifndef ETA2_INTERPOLATION_BASE_H #define ETA2_INTERPOLATION_BASE_H #ifdef MYROOT1 #include #include #include #include #endif #include "etaInterpolationBase.h" class eta2InterpolationBase : public virtual etaInterpolationBase { public: eta2InterpolationBase(int nx=400, int ny=400, int ns=25, int nsy=25, int nb=-1, int nby=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny, ns, nsy, nb, nby, emin, emax) { /* if (etamin>=etamax) { */ /* etamin=-1; */ /* etamax=2; */ /* // cout << ":" <2 || nSubPixelsY>2) calcEta(totquad, sDum, etax, etay); getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); return; }; virtual void getInterpolatedPosition(int x, int y, double *data, double &int_x, double &int_y) { double sDum[2][2]; double tot, totquad; double etax=0,etay=0; int corner; corner=calcQuad(data, tot, totquad, sDum); if (nSubPixelsX>2 || nSubPixelsY>2 ) calcEta(totquad, sDum, etax, etay); getInterpolatedPosition(x,y,etax,etay,corner,int_x,int_y); return; }; virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,double *cl,double &int_x, double &int_y) { double cc[2][2]; int xoff=0, yoff=0; switch (quad) { case BOTTOM_LEFT: xoff=0; yoff=0; break; case BOTTOM_RIGHT: xoff=1; yoff=0; break; case TOP_LEFT: xoff=0; yoff=1; break; case TOP_RIGHT: xoff=1; yoff=1; break; default: ; } double etax=0, etay=0; if (nSubPixelsX>2 || nSubPixelsY>2) { cc[0][0]=cl[xoff+3*yoff]; cc[1][0]=cl[xoff+3*(yoff+1)]; cc[0][1]=cl[xoff+1+3*yoff]; cc[1][1]=cl[xoff+1+3*(yoff+1)]; calcEta(totquad,cc,etax,etay); } return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); } virtual void getInterpolatedPosition(int x, int y, double totquad,int quad,int *cl,double &int_x, double &int_y) { double cc[2][2]; int xoff=0, yoff=0; switch (quad) { case BOTTOM_LEFT: xoff=0; yoff=0; break; case BOTTOM_RIGHT: xoff=1; yoff=0; break; case TOP_LEFT: xoff=0; yoff=1; break; case TOP_RIGHT: xoff=1; yoff=1; break; default: ; } double etax=0, etay=0; if (nSubPixelsX>2 || nSubPixelsY>2) { cc[0][0]=cl[xoff+3*yoff]; cc[1][0]=cl[xoff+3*(yoff+1)]; cc[0][1]=cl[xoff+1+3*yoff]; cc[1][1]=cl[xoff+1+3*(xoff+1)]; calcEta(totquad,cc,etax,etay); } return getInterpolatedPosition(x,y,etax, etay,quad,int_x,int_y); } virtual void getInterpolatedPosition(int x, int y, double etax, double etay, int corner, double &int_x, double &int_y) { double xpos_eta=0,ypos_eta=0; double dX,dY; int ex,ey; switch (corner) { case TOP_LEFT: dX=-1.; dY=0; break; case TOP_RIGHT: ; dX=0; dY=0; break; case BOTTOM_LEFT: dX=-1.; dY=-1.; break; case BOTTOM_RIGHT: dX=0; dY=-1.; break; default: cout << "bad quadrant" << endl; dX=0.; dY=0.; } if (nSubPixelsX>2 || nSubPixelsY>2 ) { ex=(etax-etamin)/etastepX; ey=(etay-etamin)/etastepY; if (ex<0) { cout << "x*"<< ex << endl; ex=0; } if (ex>=nbetaX) { cout << "x?"<< ex << endl; ex=nbetaX-1; } if (ey<0) { cout << "y*"<< ey << " " << nbetaY << endl; ey=0; } if (ey>=nbetaY) { cout << "y?"<< ey << " " << nbetaY << endl; ey=nbetaY-1; } xpos_eta=(((double)hhx[(ey*nbetaX+ex)]))+dX ;///((double)nSubPixels); ypos_eta=(((double)hhy[(ey*nbetaX+ex)]))+dY ;///((double)nSubPixels); } else { xpos_eta=0.5*dX+0.25; ypos_eta=0.5*dY+0.25; } int_x=((double)x) + xpos_eta+0.5; int_y=((double)y) + ypos_eta+0.5; } virtual int addToFlatField(double totquad,int quad,int *cl,double &etax, double &etay) { double cc[2][2]; int xoff=0, yoff=0; switch (quad) { case BOTTOM_LEFT: xoff=0; yoff=0; break; case BOTTOM_RIGHT: xoff=1; yoff=0; break; case TOP_LEFT: xoff=0; yoff=1; break; case TOP_RIGHT: xoff=1; yoff=1; break; default: ; } cc[0][0]=cl[xoff+3*yoff]; cc[1][0]=cl[xoff+3*(yoff+1)]; cc[0][1]=cl[xoff+1+3*yoff]; cc[1][1]=cl[xoff+1+3*(yoff+1)]; //calcMyEta(totquad,quad,cl,etax, etay); calcEta(totquad, cc,etax, etay); // cout <<"******"<< etax << " " << etay << endl; return addToFlatField(etax,etay); } virtual int addToFlatField(double totquad,int quad,double *cl,double &etax, double &etay) { double cc[2][2]; int xoff=0, yoff=0; switch (quad) { case BOTTOM_LEFT: xoff=0; yoff=0; break; case BOTTOM_RIGHT: xoff=1; yoff=0; break; case TOP_LEFT: xoff=0; yoff=1; break; case TOP_RIGHT: xoff=1; yoff=1; break; default: ; } cc[0][0]=cl[xoff+3*yoff]; cc[1][0]=cl[(yoff+1)*3+xoff]; cc[0][1]=cl[yoff*3+xoff+1]; cc[1][1]=cl[(yoff+1)*3+xoff+1]; /* cout << cl[0] << " " << cl[1] << " " << cl[2] << endl; */ /* cout << cl[3] << " " << cl[4] << " " << cl[5] << endl; */ /* cout << cl[6] << " " << cl[7] << " " << cl[8] << endl; */ /* cout <<"******"<Fill(etax,etay); #endif #ifndef MYROOT1 int ex,ey; ex=(etax-etamin)/etastepX; ey=(etay-etamin)/etastepY; if (ey=0 && ey>=0) heta[ey*nbetaX+ex]++; #endif return 0; }; virtual int *getInterpolatedImage(){ int ipx, ipy; // cout << "ff" << endl; calcDiff(1, hhx, hhy); //get flat double avg=0; for (ipx=0; ipx0) hintcorr[ibx+iby*nSubPixelsX*nPixelsX]=hint[ibx+iby*nSubPixelsX*nPixelsX]*(avg/flat[ipx+ipy*nSubPixelsX]); else hintcorr[ibx+iby*nSubPixelsX*nPixelsX]=hint[ibx+iby*nSubPixelsX*nPixelsX]; } } return hintcorr; }; /* protected: */ /* #ifdef MYROOT1 */ /* TH2D *heta; */ /* TH2D *hhx; */ /* TH2D *hhy; */ /* #endif */ /* #ifndef MYROOT1 */ /* int *heta; */ /* float *hhx; */ /* float *hhy; */ /* #endif */ /* int nbeta; */ /* double etamin, etamax, etastep; */ }; #endif