some changes on the eiger receiver side

This commit is contained in:
Maliakal Dhanya 2014-05-28 18:06:00 +02:00
parent 90f5fb39db
commit d133d7eb8f
5 changed files with 86 additions and 53 deletions

View File

@ -19,16 +19,24 @@
#define HEADER_SIZE_NUM_PACKETS 1 #define HEADER_SIZE_NUM_PACKETS 1
//all max frames defined in sls_receiver_defs.h. 20000 gotthard, 100000 for short gotthard, 1000 for moench //all max frames defined in sls_receiver_defs.h. 20000 gotthard, 100000 for short gotthard, 1000 for moench, eiger 20000
#define GOTTHARD_FIFO_SIZE 25000 //cannot be less than max jobs per thread = 1000 #define GOTTHARD_FIFO_SIZE 25000 //cannot be less than max jobs per thread = 1000
/*#define GOTTHARD_ALIGNED_FRAME_SIZE 4096*/ /*#define GOTTHARD_ALIGNED_FRAME_SIZE 4096*/
#define GOTTHARD_PACKETS_PER_FRAME 2 #define GOTTHARD_PACKETS_PER_FRAME 2
#define GOTTHARD_ONE_PACKET_SIZE 1286 #define GOTTHARD_ONE_PACKET_SIZE 1286
#define GOTTHARD_BUFFER_SIZE (GOTTHARD_ONE_PACKET_SIZE*GOTTHARD_PACKETS_PER_FRAME) //1286*2 #define GOTTHARD_BUFFER_SIZE (GOTTHARD_ONE_PACKET_SIZE*GOTTHARD_PACKETS_PER_FRAME) //1286*2
#define GOTTHARD_DATA_BYTES (1280*GOTTHARD_PACKETS_PER_FRAME) //1280*2 #define GOTTHARD_DATA_BYTES (1280*GOTTHARD_PACKETS_PER_FRAME) //1280*2
#define GOTTHARD_FRAME_INDEX_MASK 0xFFFFFFFE
#define GOTTHARD_FRAME_INDEX_OFFSET 1
#define GOTTHARD_PACKET_INDEX_MASK 0x1
#define GOTTHARD_PIXELS_IN_ROW 1280
#define GOTTHARD_PIXELS_IN_COL 1
#define GOTTHARD_SHORT_PACKETS_PER_FRAME 1 #define GOTTHARD_SHORT_PACKETS_PER_FRAME 1
#define GOTTHARD_SHORT_BUFFER_SIZE 518 #define GOTTHARD_SHORT_BUFFER_SIZE 518
#define GOTTHARD_SHORT_DATABYTES 512 #define GOTTHARD_SHORT_DATABYTES 512
@ -39,13 +47,6 @@
#define GOTTHARD_SHORT_PIXELS_IN_COL 1 #define GOTTHARD_SHORT_PIXELS_IN_COL 1
#define GOTTHARD_FRAME_INDEX_MASK 0xFFFFFFFE
#define GOTTHARD_FRAME_INDEX_OFFSET 1
#define GOTTHARD_PACKET_INDEX_MASK 0x1
#define GOTTHARD_PIXELS_IN_ROW 1280
#define GOTTHARD_PIXELS_IN_COL 1
#define MOENCH_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000 #define MOENCH_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
@ -55,18 +56,29 @@
#define MOENCH_BUFFER_SIZE (MOENCH_ONE_PACKET_SIZE*MOENCH_PACKETS_PER_FRAME) //1286*40 #define MOENCH_BUFFER_SIZE (MOENCH_ONE_PACKET_SIZE*MOENCH_PACKETS_PER_FRAME) //1286*40
#define MOENCH_DATA_BYTES (1280*MOENCH_PACKETS_PER_FRAME) //1280*40 #define MOENCH_DATA_BYTES (1280*MOENCH_PACKETS_PER_FRAME) //1280*40
#define MOENCH_FRAME_INDEX_MASK 0xFFFFFF00
#define MOENCH_FRAME_INDEX_OFFSET 8
#define MOENCH_PACKET_INDEX_MASK 0xFF
#define MOENCH_BYTES_PER_ADC (40*2) #define MOENCH_BYTES_PER_ADC (40*2)
#define MOENCH_PIXELS_IN_ONE_ROW 160 #define MOENCH_PIXELS_IN_ONE_ROW 160
#define MOENCH_BYTES_IN_ONE_ROW (MOENCH_PIXELS_IN_ONE_ROW*2) #define MOENCH_BYTES_IN_ONE_ROW (MOENCH_PIXELS_IN_ONE_ROW*2)
#define MOENCH_FRAME_INDEX_MASK 0xFFFFFF00
#define MOENCH_FRAME_INDEX_OFFSET 8
#define MOENCH_PACKET_INDEX_MASK 0xFF
#define EIGER_FIFO_SIZE 2500 //cannot be less than max jobs per thread = 1000
/*#define EIGER_ALIGNED_FRAME_SIZE 65536*/
#define EIGER_PACKETS_PER_FRAME 1 //default for 16B
#define EIGER_ONE_PACKET_SIZE 1040 //default for 16B
#define EIGER_BUFFER_SIZE (EIGER_ONE_PACKET_SIZE*EIGER_PACKETS_PER_FRAME) //1040*1 //default for 16B
#define EIGER_DATA_BYTES (1032*EIGER_PACKETS_PER_FRAME) //1280*40 //default for 16B
#define EIGER_FRAME_INDEX_MASK 0xFFFFFF00
#define EIGER_FRAME_INDEX_OFFSET 8
#define EIGER_PACKET_INDEX_MASK 0xFF
//#define THIS_SOFTWARE_VERSION 0x20120919
#endif #endif

View File

@ -19,6 +19,7 @@ typedef int int32_t;
#define MAX_FRAMES_PER_FILE 20000 #define MAX_FRAMES_PER_FILE 20000
#define SHORT_MAX_FRAMES_PER_FILE 100000 #define SHORT_MAX_FRAMES_PER_FILE 100000
#define MOENCH_MAX_FRAMES_PER_FILE 1000 #define MOENCH_MAX_FRAMES_PER_FILE 1000
#define EIGER_MAX_FRAMES_PER_FILE 20000
/** /**

View File

@ -798,9 +798,9 @@ int slsReceiverTCPIPInterface::start_receiver(){
// send answer // send answer
socket->SendDataOnly(&ret,sizeof(ret)); socket->SendDataOnly(&ret,sizeof(ret));
if(ret==FAIL) if(ret==FAIL){
socket->SendDataOnly(mess,sizeof(mess)); socket->SendDataOnly(mess,sizeof(mess));
cout<<"ret of start receiver:"<<ret<<endl; }
//return ok/fail //return ok/fail
return ret; return ret;

View File

@ -227,29 +227,43 @@ int slsReceiverUDPFunctions::setDetectorType(detectorType det){
//moench variables //moench variables
if(myDetectorType == GOTTHARD){ if(myDetectorType == GOTTHARD){
fifosize = GOTTHARD_FIFO_SIZE; fifosize = GOTTHARD_FIFO_SIZE;
bufferSize = GOTTHARD_BUFFER_SIZE; packetsPerFrame = GOTTHARD_PACKETS_PER_FRAME;
packetsPerFrame = GOTTHARD_PACKETS_PER_FRAME; onePacketSize = GOTTHARD_ONE_PACKET_SIZE;
maxPacketsPerFile = MAX_FRAMES_PER_FILE * GOTTHARD_PACKETS_PER_FRAME; bufferSize = GOTTHARD_BUFFER_SIZE;
frameIndexMask = GOTTHARD_FRAME_INDEX_MASK; maxPacketsPerFile = MAX_FRAMES_PER_FILE * GOTTHARD_PACKETS_PER_FRAME;
frameIndexOffset = GOTTHARD_FRAME_INDEX_OFFSET; frameIndexMask = GOTTHARD_FRAME_INDEX_MASK;
packetIndexMask = GOTTHARD_PACKET_INDEX_MASK; frameIndexOffset = GOTTHARD_FRAME_INDEX_OFFSET;
packetIndexMask = GOTTHARD_PACKET_INDEX_MASK;
}else if(myDetectorType == MOENCH){ }else if(myDetectorType == MOENCH){
fifosize = MOENCH_FIFO_SIZE; fifosize = MOENCH_FIFO_SIZE;
bufferSize = MOENCH_BUFFER_SIZE; packetsPerFrame = MOENCH_PACKETS_PER_FRAME;
packetsPerFrame = MOENCH_PACKETS_PER_FRAME; onePacketSize = MOENCH_ONE_PACKET_SIZE;
maxPacketsPerFile = MOENCH_MAX_FRAMES_PER_FILE * MOENCH_PACKETS_PER_FRAME; bufferSize = MOENCH_BUFFER_SIZE;
frameIndexMask = MOENCH_FRAME_INDEX_MASK; maxPacketsPerFile = MOENCH_MAX_FRAMES_PER_FILE * MOENCH_PACKETS_PER_FRAME;
frameIndexOffset = MOENCH_FRAME_INDEX_OFFSET; frameIndexMask = MOENCH_FRAME_INDEX_MASK;
packetIndexMask = MOENCH_PACKET_INDEX_MASK; frameIndexOffset = MOENCH_FRAME_INDEX_OFFSET;
packetIndexMask = MOENCH_PACKET_INDEX_MASK;
} }
else if(myDetectorType == EIGER){ else if(myDetectorType == EIGER){
#ifndef EIGERSLS
cout << "SLS Eiger Receiver" << endl;
fifosize = EIGER_FIFO_SIZE;
packetsPerFrame = EIGER_PACKETS_PER_FRAME;
onePacketSize = EIGER_ONE_PACKET_SIZE;
bufferSize = EIGER_BUFFER_SIZE;
maxPacketsPerFile = EIGER_MAX_FRAMES_PER_FILE * EIGER_PACKETS_PER_FRAME;
frameIndexMask = EIGER_FRAME_INDEX_MASK;
frameIndexOffset = EIGER_FRAME_INDEX_OFFSET;
packetIndexMask = EIGER_PACKET_INDEX_MASK;
#else
cout << "Heiner's Receiver" << endl;
if(receiver == NULL) if(receiver == NULL)
receiver = EigerReceiver::create(); receiver = EigerReceiver::create();
receiver->setFileName(fileName); receiver->setFileName(fileName);
} #endif
onePacketSize = bufferSize/packetsPerFrame; }
latestData = new char[bufferSize]; latestData = new char[bufferSize];
@ -322,7 +336,7 @@ void slsReceiverUDPFunctions::resetTotalFramesCaught(){
/*file parameters*/ /*file parameters*/
char* slsReceiverUDPFunctions::getFilePath(){ char* slsReceiverUDPFunctions::getFilePath(){
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getFilePath(); return receiver->getFilePath();
else else
return filePath; return filePath;
@ -333,7 +347,7 @@ char* slsReceiverUDPFunctions::setFilePath(char c[]){
//check if filepath exists //check if filepath exists
struct stat st; struct stat st;
if(stat(c,&st) == 0){ if(stat(c,&st) == 0){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setFilePath(c); receiver->setFilePath(c);
else else
strcpy(filePath,c); strcpy(filePath,c);
@ -347,7 +361,7 @@ char* slsReceiverUDPFunctions::setFilePath(char c[]){
char* slsReceiverUDPFunctions::getFileName(){ char* slsReceiverUDPFunctions::getFileName(){
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getFileName(); return receiver->getFileName();
else else
return fileName; return fileName;
@ -355,7 +369,7 @@ char* slsReceiverUDPFunctions::getFileName(){
char* slsReceiverUDPFunctions::setFileName(char c[]){ char* slsReceiverUDPFunctions::setFileName(char c[]){
if(strlen(c)){ if(strlen(c)){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setFileName(c); receiver->setFileName(c);
else else
strcpy(fileName,c); strcpy(fileName,c);
@ -385,13 +399,13 @@ int slsReceiverUDPFunctions::setFrameIndexNeeded(int i){
int slsReceiverUDPFunctions::setEnableFileWrite(int i){ int slsReceiverUDPFunctions::setEnableFileWrite(int i){
if(i!=-1){ if(i!=-1){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setEnableFileWrite(i); receiver->setEnableFileWrite(i);
else else
enableFileWrite=i; enableFileWrite=i;
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getEnableFileWrite(); return receiver->getEnableFileWrite();
else else
return enableFileWrite; return enableFileWrite;
@ -402,13 +416,13 @@ int slsReceiverUDPFunctions::setEnableFileWrite(int i){
int slsReceiverUDPFunctions::enableOverwrite(int i){ int slsReceiverUDPFunctions::enableOverwrite(int i){
if(i!=-1){ if(i!=-1){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setEnableOverwrite(i); receiver->setEnableOverwrite(i);
else else
overwrite=i; overwrite=i;
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getEnableOverwrite(); return receiver->getEnableOverwrite();
else else
return overwrite; return overwrite;
@ -421,7 +435,7 @@ int slsReceiverUDPFunctions::enableOverwrite(int i){
/*other parameters*/ /*other parameters*/
slsReceiverDefs::runStatus slsReceiverUDPFunctions::getStatus(){ slsReceiverDefs::runStatus slsReceiverUDPFunctions::getStatus(){
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getStatus(); return receiver->getStatus();
else else
return status; return status;
@ -430,14 +444,14 @@ slsReceiverDefs::runStatus slsReceiverUDPFunctions::getStatus(){
char* slsReceiverUDPFunctions::setDetectorHostname(char c[]){ char* slsReceiverUDPFunctions::setDetectorHostname(char c[]){
if(strlen(c)){ if(strlen(c)){
if(myDetectorType == EIGER){ if(receiver != NULL){
if(receiver->getDetectorHostname()== NULL) if(receiver->getDetectorHostname()== NULL)
receiver->initialize(c); receiver->initialize(c);
}else }else
strcpy(detHostname,c); strcpy(detHostname,c);
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getDetectorHostname(); return receiver->getDetectorHostname();
else else
return detHostname; return detHostname;
@ -456,13 +470,13 @@ void slsReceiverUDPFunctions::setUDPPortNo(int p){
int32_t slsReceiverUDPFunctions::setNumberOfFrames(int32_t fnum){ int32_t slsReceiverUDPFunctions::setNumberOfFrames(int32_t fnum){
if(fnum >= 0){ if(fnum >= 0){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setNumberOfFrames(fnum); receiver->setNumberOfFrames(fnum);
else else
numberOfFrames = fnum; numberOfFrames = fnum;
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getNumberOfFrames(); return receiver->getNumberOfFrames();
else else
return numberOfFrames; return numberOfFrames;
@ -470,13 +484,13 @@ int32_t slsReceiverUDPFunctions::setNumberOfFrames(int32_t fnum){
int32_t slsReceiverUDPFunctions::setScanTag(int32_t stag){ int32_t slsReceiverUDPFunctions::setScanTag(int32_t stag){
if(stag >= 0){ if(stag >= 0){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setScanTag(stag); receiver->setScanTag(stag);
else else
scanTag = stag; scanTag = stag;
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getScanTag(); return receiver->getScanTag();
else else
return scanTag; return scanTag;
@ -484,13 +498,13 @@ int32_t slsReceiverUDPFunctions::setScanTag(int32_t stag){
int32_t slsReceiverUDPFunctions::setDynamicRange(int32_t dr){ int32_t slsReceiverUDPFunctions::setDynamicRange(int32_t dr){
if(dr >= 0){ if(dr >= 0){
if(myDetectorType == EIGER) if(receiver != NULL)
receiver->setDynamicRange(dr); receiver->setDynamicRange(dr);
else else
dynamicRange = dr; dynamicRange = dr;
} }
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->getDynamicRange(); return receiver->getDynamicRange();
else else
return dynamicRange; return dynamicRange;
@ -541,7 +555,7 @@ int64_t slsReceiverUDPFunctions::setAcquisitionPeriod(int64_t index){
if(index >= 0){ if(index >= 0){
if(index != acquisitionPeriod){ if(index != acquisitionPeriod){
acquisitionPeriod = index; acquisitionPeriod = index;
if(myDetectorType != EIGER) if(receiver != NULL)
setupFifoStructure(); setupFifoStructure();
} }
} }
@ -658,6 +672,10 @@ void slsReceiverUDPFunctions::setupFilter(){
void slsReceiverUDPFunctions::setupFifoStructure(){ void slsReceiverUDPFunctions::setupFifoStructure(){
if(receiver != NULL)
return;
int64_t i; int64_t i;
int oldn = numJobsPerThread; int oldn = numJobsPerThread;
@ -688,6 +706,8 @@ void slsReceiverUDPFunctions::setupFifoStructure(){
fifosize = GOTTHARD_FIFO_SIZE; fifosize = GOTTHARD_FIFO_SIZE;
if(myDetectorType == MOENCH) if(myDetectorType == MOENCH)
fifosize = MOENCH_FIFO_SIZE; fifosize = MOENCH_FIFO_SIZE;
else if(myDetectorType == EIGER)
fifosize = EIGER_FIFO_SIZE;
if(fifosize % numJobsPerThread) if(fifosize % numJobsPerThread)
fifosize = (fifosize/numJobsPerThread)+1; fifosize = (fifosize/numJobsPerThread)+1;
@ -1212,7 +1232,7 @@ void slsReceiverUDPFunctions::closeFile(int ithr){
int slsReceiverUDPFunctions::startReceiver(char message[]){ int slsReceiverUDPFunctions::startReceiver(char message[]){
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->startReceiver(message); return receiver->startReceiver(message);
@ -1276,7 +1296,7 @@ int slsReceiverUDPFunctions::startReceiver(char message[]){
int slsReceiverUDPFunctions::stopReceiver(){ int slsReceiverUDPFunctions::stopReceiver(){
if(myDetectorType == EIGER) if(receiver != NULL)
return receiver->stopReceiver(); return receiver->stopReceiver();
@ -1309,7 +1329,7 @@ int slsReceiverUDPFunctions::stopReceiver(){
void slsReceiverUDPFunctions::startReadout(){ void slsReceiverUDPFunctions::startReadout(){
if(myDetectorType == EIGER){ if(receiver != NULL){
receiver->stopReceiver(); receiver->stopReceiver();
return; return;
} }