mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 13:27:14 +02:00
eiger mapping for 32 bit done
This commit is contained in:
@ -19,8 +19,8 @@ public:
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
|
|
||||||
eigerHalfModuleData(int dr, int np, int bsize, int dsize, double c=0): slsReceiverData<uint32_t>(xpixels, ypixels, np, bsize),
|
eigerHalfModuleData(int dr, int np, int bsize, int dsize, bool top, double c=0): slsReceiverData<uint32_t>(xpixels, ypixels, np, bsize),
|
||||||
xtalk(c), dynamicRange(dr), bufferSize(bsize), dataSize(dsize){
|
xtalk(c), bufferSize(bsize), dataSize(dsize), dynamicRange(dr), numberOfPackets(np){
|
||||||
|
|
||||||
|
|
||||||
int **dMap;
|
int **dMap;
|
||||||
@ -42,29 +42,60 @@ public:
|
|||||||
int iData1 = 0, iData2 = 0;
|
int iData1 = 0, iData2 = 0;
|
||||||
int iPort;
|
int iPort;
|
||||||
|
|
||||||
for (int ir=0; ir<ypixels; ir++) {
|
|
||||||
for (int ic=0; ic<xpixels; ic++) {
|
if(top){
|
||||||
iPort = ic / (xpixels/2);
|
for (int ir=0; ir<ypixels; ir++) {
|
||||||
if(!iPort){
|
for (int ic=0; ic<xpixels; ic++) {
|
||||||
dMap[ir][ic] = iPacket1;
|
iPort = ic / (xpixels/2);
|
||||||
iPacket1 += (dynamicRange / 8);
|
if(!iPort){
|
||||||
iData1 +=(dynamicRange / 8);
|
dMap[ir][ic] = iPacket1;
|
||||||
if(iData1 >= dataSize){
|
iPacket1 += (dynamicRange / 8);
|
||||||
iPacket1 += 16;
|
iData1 +=(dynamicRange / 8);
|
||||||
iData1 = 0;
|
if(iData1 >= dataSize){
|
||||||
}
|
iPacket1 += 16;
|
||||||
}else{
|
iData1 = 0;
|
||||||
dMap[ir][ic] = iPacket2;
|
}
|
||||||
iPacket2 += (dynamicRange / 8);
|
}else{
|
||||||
iData2 +=(dynamicRange / 8);
|
dMap[ir][ic] = iPacket2;
|
||||||
if(iData2 >= dataSize){
|
iPacket2 += (dynamicRange / 8);
|
||||||
iPacket2 += 16;
|
iData2 +=(dynamicRange / 8);
|
||||||
iData2 = 0;
|
if(iData2 >= dataSize){
|
||||||
|
iPacket2 += 16;
|
||||||
|
iData2 = 0;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
else{
|
||||||
|
iPacket1 = (totalNumberOfBytes/2) - 1040 - 8;
|
||||||
|
iPacket2 = totalNumberOfBytes - 1040 - 8;
|
||||||
|
for (int ir=0; ir<ypixels; ir++) {
|
||||||
|
for (int ic=0; ic<xpixels; ic++) {
|
||||||
|
iPort = ic / (xpixels/2);
|
||||||
|
if(!iPort){
|
||||||
|
dMap[ir][ic] = iPacket1;
|
||||||
|
iPacket1 += (dynamicRange / 8);//increment now but decrement before by 1024 before and after
|
||||||
|
iData1 +=(dynamicRange / 8);
|
||||||
|
if(iData1 >= dataSize){
|
||||||
|
iPacket1 += 16;
|
||||||
|
iData1 = 0;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
dMap[ir][ic] = iPacket2;
|
||||||
|
iPacket2 += (dynamicRange / 8);
|
||||||
|
iData2 +=(dynamicRange / 8);
|
||||||
|
if(iData2 >= dataSize){
|
||||||
|
iPacket2 += 16;
|
||||||
|
iData2 = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
@ -87,7 +118,7 @@ public:
|
|||||||
\returns frame number
|
\returns frame number
|
||||||
*/
|
*/
|
||||||
int getFrameNumber(char *buff){
|
int getFrameNumber(char *buff){
|
||||||
return htonl(*(unsigned int*)((eiger_image_header *)((char*)(buff)))->fnum);
|
return(*(unsigned int*)(((eiger_packet_header *)((char*)buff))->num1));
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -96,7 +127,31 @@ public:
|
|||||||
\returns packet number
|
\returns packet number
|
||||||
*/
|
*/
|
||||||
int getPacketNumber(char *buff){
|
int getPacketNumber(char *buff){
|
||||||
return htonl(*(unsigned int*)((eiger_packet_header *)((char*)(buff)))->num2);
|
/*other way roud if its a bottom*/
|
||||||
|
|
||||||
|
#ifdef VERY_DEBUG
|
||||||
|
cprintf(RED, "\n0x%x - %d - %d",
|
||||||
|
(*(uint8_t*)(((eiger_packet_header *)((char*)(buff)))->num3)),
|
||||||
|
(*(uint8_t*)(((eiger_packet_header *)((char*)(buff)))->num4)),
|
||||||
|
(*(uint16_t*)(((eiger_packet_header *)((char*)(buff)))->num2)));
|
||||||
|
#endif
|
||||||
|
//32 bit packet number written in num2
|
||||||
|
if(dynamicRange == 32){
|
||||||
|
//both ports have same packet numbers, so reconstruct
|
||||||
|
if((*(uint8_t*)(((eiger_packet_header *)((char*)buff))->num3))){
|
||||||
|
return ((*(uint16_t*)(((eiger_packet_header *)((char*)buff))->num2))+(numberOfPackets/2) +1);
|
||||||
|
}else{
|
||||||
|
return ((*(uint16_t*)(((eiger_packet_header *)((char*)buff))->num2))+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else{
|
||||||
|
//both ports have same packet numbers, so reconstruct
|
||||||
|
if((*(uint8_t*)(((eiger_packet_header *)((char*)buff))->num3))){
|
||||||
|
return ((*(uint8_t*)(((eiger_packet_header *)((char*)buff))->num4))+(numberOfPackets/2) +1);
|
||||||
|
}else{
|
||||||
|
return ((*(uint8_t*)(((eiger_packet_header *)((char*)buff))->num4))+1);
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
@ -146,21 +201,16 @@ private:
|
|||||||
const int bufferSize;
|
const int bufferSize;
|
||||||
const int dataSize;
|
const int dataSize;
|
||||||
const int dynamicRange;
|
const int dynamicRange;
|
||||||
|
const int numberOfPackets;
|
||||||
|
|
||||||
|
|
||||||
/** structure of an eiger image header*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
unsigned char header_before[20];
|
|
||||||
unsigned char fnum[4];
|
|
||||||
unsigned char header_after[24];
|
|
||||||
} eiger_image_header;
|
|
||||||
|
|
||||||
/** structure of an eiger image header*/
|
/** structure of an eiger image header*/
|
||||||
typedef struct
|
typedef struct
|
||||||
{
|
{
|
||||||
unsigned char num1[4];
|
unsigned char num1[4];
|
||||||
unsigned char num2[4];
|
unsigned char num2[2];
|
||||||
|
unsigned char num3[1];
|
||||||
|
unsigned char num4[1];
|
||||||
} eiger_packet_header;
|
} eiger_packet_header;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
@ -211,14 +211,14 @@ class slsDetectorData {
|
|||||||
|
|
||||||
*/
|
*/
|
||||||
virtual dataType getChannel(char *data, int ix, int iy, int dr) {
|
virtual dataType getChannel(char *data, int ix, int iy, int dr) {
|
||||||
dataType m=0, d=0;
|
dataType m=0;
|
||||||
uint64_t t;
|
uint64_t t;
|
||||||
int numBytes,divFactor,newix,pixelval;
|
int numBytes,divFactor,newix,pixelval;
|
||||||
|
|
||||||
|
|
||||||
if (ix>=0 && ix<nx && iy>=0 && iy<ny && dataMap[iy][ix]>=0 && dataMap[iy][ix]<dataSize) {
|
if (ix>=0 && ix<nx && iy>=0 && iy<ny && dataMap[iy][ix]>=0 && dataMap[iy][ix]<dataSize) {
|
||||||
m=dataMask[iy][ix];
|
m=dataMask[iy][ix];
|
||||||
|
//cout <<"ix:"<<dec<<ix<<" iy:"<<iy<<endl;
|
||||||
numBytes = (nx * iy + ix);
|
numBytes = (nx * iy + ix);
|
||||||
divFactor=2;
|
divFactor=2;
|
||||||
if(dr == 4) divFactor = 16;
|
if(dr == 4) divFactor = 16;
|
||||||
@ -228,10 +228,10 @@ class slsDetectorData {
|
|||||||
pixelval = numBytes % divFactor;
|
pixelval = numBytes % divFactor;
|
||||||
newix = ix - pixelval;
|
newix = ix - pixelval;
|
||||||
|
|
||||||
//cout <<"pixelval:"<<pixelval<<" newix:"<<newix<<endl;
|
//cout <<"pixelval:"<<dec <<pixelval<<" newix:"<<newix<<endl;
|
||||||
//cout <<"64:"<< hex<<((uint64_t)(*((uint64_t*)(((char*)data)+(dataMap[iy][newix])))))<<endl;
|
// cout <<"64:"<< hex<<((uint64_t)(*((uint64_t*)(((char*)data)+(dataMap[iy][newix])))))<<endl;
|
||||||
t = (be64toh((uint64_t)(*((uint64_t*)(((char*)data)+(dataMap[iy][newix]))))));
|
t = (be64toh((uint64_t)(*((uint64_t*)(((char*)data)+(dataMap[iy][newix]))))));
|
||||||
//cout<<"t:"<<t<<endl;
|
// cout<<"t:"<<hex<<t<<endl;
|
||||||
|
|
||||||
}else
|
}else
|
||||||
cprintf(RED,"outside limits\n");
|
cprintf(RED,"outside limits\n");
|
||||||
|
@ -67,7 +67,7 @@ public:
|
|||||||
while (dd<=(dsize-packetSize)) {
|
while (dd<=(dsize-packetSize)) {
|
||||||
pnum=getPacketNumber(p);
|
pnum=getPacketNumber(p);
|
||||||
fn=getFrameNumber(p);
|
fn=getFrameNumber(p);
|
||||||
|
//cout <<"pnum:"<<pnum<<" fn:"<<fn<<"\t";
|
||||||
|
|
||||||
if (pnum<1 || pnum>nPackets) {
|
if (pnum<1 || pnum>nPackets) {
|
||||||
cout << "Bad packet number " << pnum << " frame "<< fn << endl;
|
cout << "Bad packet number " << pnum << " frame "<< fn << endl;
|
||||||
|
Reference in New Issue
Block a user