#ifndef ETA_INTERPOLATION_ADAPTIVEBINS_H #define ETA_INTERPOLATION_ADAPTIVEBINS_H #include "tiffIO.h" #include "etaInterpolationBase.h" class etaInterpolationAdaptiveBins : public etaInterpolationBase{ private: double calcDiff(double avg, double *hx, double *hy) { double p_tot=0; double diff=0; double bsize=1./nSubPixels; for (int ipx=0; ipx=nSubPixels; ipx++) { for (int ipy=0; ipy=nSubPixels; ipy++) { p_tot=0; for (int ibx=0; ibx=((ipx)*bsize) && hx[ibx+iby*nbeta]<((ipx+1)*bsize) && hy[ibx+iby*nbeta]>=((ipy)*bsize) && hy[ibx+iby*nbeta]<((ipy+1)*bsize)) { p_tot+=heta[ibx+iby*nbeta]; } } } diff+=(p_tot-avg)*(p_tot-avg); } } return diff; } void iterate(double *newhhx, double *newhhy) { double bsize=1./nSubPixels; double hy[nbeta]; //profile y double hx[nbeta]; //profile x double hix[nbeta]; //integral of projection x double hiy[nbeta]; //integral of projection y double tot_eta_x=0; double tot_eta_y=0; for (int ipy=0; ipy=nSubPixels; ipy++) { for (int ibx=0; ibx=((ipy)*bsize) && hhy[ibx+iby*nbeta]<((ipy+1)*bsize)) { hx[ibx]+=heta[ibx+iby*nbeta]; } if ( hhx[ibx+iby*nbeta]>=((ipy)*bsize) && hhx[ibx+iby*nbeta]<((ipy+1)*bsize)) { hy[iby]+=heta[ibx+iby*nbeta]; } } } } hix[0]=hx[0]; hiy[0]=hy[0]; for (int ib=1; ib=((ipy)*bsize) && hhy[ibx+iby*nbeta]<((ipy+1)*bsize)) { newhhx[ibx+iby*nbeta]=hix[ibx]/((double)tot_eta_x); } if ( hhx[ibx+iby*nbeta]>=((ipy)*bsize) && hhx[ibx+iby*nbeta]<((ipy+1)*bsize)) { newhhy[ibx+iby*nbeta]=hiy[iby]/((double)tot_eta_y); } } } } } public: etaInterpolationAdaptiveBins(int nx=400, int ny=400, int ns=25, int nb=-1, double emin=1, double emax=0) : etaInterpolationBase(nx,ny,ns, nb, emin,emax){}; etaInterpolationAdaptiveBins(etaInterpolationAdaptiveBins *orig): etaInterpolationBase(orig){}; virtual etaInterpolationAdaptiveBins* Clone() { return new etaInterpolationAdaptiveBins(this); }; virtual void prepareInterpolation(int &ok) { ok=1; ///*Eta Distribution Rebinning*/// double bsize=1./nSubPixels; //precision // cout<<"nPixelsX = "<