#ifndef MOENCH03GHOSTSUMMATION_H #define MOENCH03GHOSTSUMMATION_H #include "ghostSummation.h" class moench03GhostSummation : public ghostSummation { /** @short virtual calss to handle ghosting*/ public: /** constructor \param xt crosstalk */ moench03GhostSummation(slsDetectorData *d, double xt=0.0004) : ghostSummation(d, xt) {} virtual void calcGhost(char *data){ for (int iy=0; iy<200; iy++){ for (int ix=0; ix<25; ix++){ calcGhost(data,ix,iy); } } }; moench03GhostSummation(moench03GhostSummation *orig) : ghostSummation(orig) { } virtual moench03GhostSummation *Clone() { return new moench03GhostSummation(this); } virtual double calcGhost(char *data, int x, int y=0){ int ix=x%25; int iy=y; if (y>=200) iy=399-y; if (iy<0 || ix<0) return 0; double val=0; val=0; for (int isc=0; isc<16; isc++) { val+=det->getChannel(data,ix+25*isc,iy); // cout << val << " " ; val+=det->getChannel(data,ix+25*isc,399-iy); // cout << val << " " ; } ghost[iy*nx+ix]=xtalk*val; // if (ix==15 && iy==15) cout << ":" << ghost[iy*nx+ix] << " " << val << endl; return ghost[iy*nx+ix]; }; virtual double getGhost(int ix, int iy) { if (iy >=0 && iy<200) return ghost[iy*nx+(ix%25)]; if (iy<400) return ghost[(399-iy)*nx+(ix%25)]; return 0; }; }; #endif