diff --git a/slsDetectorCalibration/eigerHalfModuleData.h b/slsDetectorCalibration/eigerHalfModuleData.h index 5bf8efb82..38430f9c5 100644 --- a/slsDetectorCalibration/eigerHalfModuleData.h +++ b/slsDetectorCalibration/eigerHalfModuleData.h @@ -235,7 +235,7 @@ public: virtual int getChannel(char *data, int ix, int iy, int dr) { uint32_t m=0, n = 0; - int linesperpacket,newix, newiy; + int linesperpacket,newix, newiy,origX; //cout <<"ix:"<=0 && ix=0 && iy=0 && dataMap[iy][ix]missingpacket)==0xFFFF){ cprintf(RED,"missing packet\n"); @@ -269,14 +275,18 @@ public: }else{ cprintf(RED,"outside limits\n"); - return -99; + return -99; } - //little endian + //get proper data + n = ((uint32_t)(*((uint32_t*)(((char*)data)+(dataMap[iy][ix]))))); - /*if(dr == 16) return ((uint16_t)(*((uint16_t*)(((char*)data)+(dataMap[iy][ix])))));*/ - n = ((uint32_t)(*((uint32_t*)(((char*)data)+(dataMap[iy][ix]))))); - if(dr == 4) return (n & 0xf)^m; + //each byte is shared by 2 pixels for 4 bit mode + if(dr == 4){ + if(ix != origX) + return ((n & 0xf0)>>4)^m; + return (n & 0xf)^m; + } else if(dr == 8) return (n & 0xff)^m; else if(dr == 16) return (n & 0xffff)^m; else return (n & 0xffffffff)^m;