mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-23 10:07:59 +02:00
Zmq communication uses additional headers, moench processing fixed
This commit is contained in:
@ -486,13 +486,28 @@ enum readOutFlags {
|
||||
READ_HITS=0x2, /**< return only the number of the channel which counted ate least one */
|
||||
ZERO_COMPRESSION=0x4,/**< returned data are 0-compressed */
|
||||
PUMP_PROBE_MODE=0x8,/**<pump-probe mode */
|
||||
|
||||
PEDESTAL=0x10,/**< frame mode set to pedestal */
|
||||
FLAT=0x20,/**< frame mode set to flat */
|
||||
NEWPEDESTAL=0x40,/**< frame mode set to pedestal and reset */
|
||||
NEWFLAT=0x80,/**< frame mode set to flat and reset */
|
||||
|
||||
FRAME=0x100, /**< frame mode set to normal frame */
|
||||
ANALOG=0x200, /**<detector working in analog mode */
|
||||
COUNTING=0x400, /**<detector working in counting mode */
|
||||
INTERPOLATING=0x800, /**<detector working in interpolating mode */
|
||||
|
||||
|
||||
|
||||
BACKGROUND_CORRECTIONS=0x1000, /**<background corrections */
|
||||
TOT_MODE=0x2000,/**< pump-probe mode */
|
||||
CONTINOUS_RO=0x4000,/**< pump-probe mode */
|
||||
|
||||
PARALLEL=0x10000,/**< eiger parallel mode */
|
||||
NONPARALLEL=0x20000,/**< eiger serial mode */
|
||||
SAFE=0x40000/**< eiger safe mode */,
|
||||
DIGITAL_ONLY=0x80000, /** chiptest board read only digital bits (not adc values)*/
|
||||
|
||||
ANALOG_AND_DIGITAL=0x100000, /** chiptest board read adc values and digital bits digital bits */
|
||||
DUT_CLK=0x200000, /** chiptest board fifo clock comes from device under test */
|
||||
SHOW_OVERFLOW=0x400000, /** eiger 32 bit mode, show saturated for overflow of single subframes */
|
||||
|
@ -1,9 +1,9 @@
|
||||
Path: slsDetectorsPackage/slsDetectorSoftware
|
||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repsitory UUID: 6bb7195a2c7dc9526088882e0244a7455d3c15b2
|
||||
Revision: 1992
|
||||
Branch: 3.3.0-rc
|
||||
Last Changed Author: Dhanya_Thattil
|
||||
Last Changed Rev: 3941
|
||||
Last Changed Date: 2018-07-18 12:26:21.000000002 +0200 ./threadFiles/ThreadPool.o
|
||||
Repsitory UUID: 83600fcb15c8261173ab15a8ba8d1009693f2d23
|
||||
Revision: 2005
|
||||
Branch: anna
|
||||
Last Changed Author: Anna_Bergamaschi
|
||||
Last Changed Rev: 3962
|
||||
Last Changed Date: 2018-09-11 16:29:59.000000002 +0200 ./slsDetector/slsDetector.o
|
||||
|
@ -84,10 +84,10 @@ u_int16_t a_bus_r16(u_int32_t offset){
|
||||
|
||||
u_int16_t bus_r16(u_int32_t offset){
|
||||
u_int16_t r= a_bus_r16(offset);
|
||||
#ifndef OLDVERSION
|
||||
while (r!=a_bus_r16(offset))
|
||||
r=a_bus_r16(offset);
|
||||
#endif
|
||||
/* #ifndef OLDVERSION */
|
||||
/* while (r!=a_bus_r16(offset)) */
|
||||
/* r=a_bus_r16(offset); */
|
||||
/* #endif */
|
||||
return r;
|
||||
}
|
||||
|
||||
@ -117,10 +117,10 @@ u_int32_t a_bus_r(u_int32_t offset) {
|
||||
|
||||
u_int32_t bus_r(u_int32_t offset){
|
||||
u_int32_t r= a_bus_r(offset);
|
||||
#ifndef OLDVERSION
|
||||
while (r!=a_bus_r(offset))
|
||||
r=a_bus_r(offset);
|
||||
#endif
|
||||
/* #ifndef OLDVERSION */
|
||||
/* while (r!=a_bus_r(offset)) */
|
||||
/* r=a_bus_r(offset); */
|
||||
/* #endif */
|
||||
return r;
|
||||
}
|
||||
|
||||
|
@ -2003,7 +2003,7 @@ int startStateMachine(){
|
||||
bus_w16(CONTROL_REG, FIFO_RESET_BIT);
|
||||
bus_w16(CONTROL_REG, 0x0);
|
||||
bus_w16(CONTROL_REG, START_ACQ_BIT | START_EXPOSURE_BIT);
|
||||
// usleep(20);
|
||||
usleep(20);
|
||||
bus_w16(CONTROL_REG, 0x0);
|
||||
//verify
|
||||
/* if(bus_r(STATUS_REG) & RUN_BUSY_BIT) */
|
||||
@ -2128,48 +2128,42 @@ u_int16_t* fifo_read_event(int ns)
|
||||
a=bus_r16(LOOK_AT_ME_REG);
|
||||
while(a==0) {
|
||||
if (runBusy()==0) {
|
||||
usleep(100);
|
||||
a = bus_r(LOOK_AT_ME_REG);
|
||||
if (a==0) {
|
||||
printf("no frame found and acquisition finished - exiting\n");
|
||||
printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG));
|
||||
return NULL;
|
||||
printf("no frame found and acquisition finished - exiting\n");
|
||||
printf("%08x %08x\n", runState(), bus_r(LOOK_AT_ME_REG));
|
||||
return NULL;
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
a = bus_r(LOOK_AT_ME_REG);
|
||||
//#ifdef VERBOSE
|
||||
//printf(".");
|
||||
//#endif
|
||||
a = bus_r16(LOOK_AT_ME_REG);
|
||||
}
|
||||
/* #ifdef TIMEDBG */
|
||||
/* // tsss=tss; */
|
||||
/* gettimeofday(&tss,NULL); */
|
||||
/* printf("look for data = %ld usec\n", (tss.tv_usec) - (tse.tv_usec)); */
|
||||
|
||||
/* #endif */
|
||||
|
||||
// printf("LAM: %08x\n",a);
|
||||
}
|
||||
|
||||
// printf(".");
|
||||
a = bus_r(LOOK_AT_ME_REG);
|
||||
//a = bus_r16(LOOK_AT_ME_REG);
|
||||
|
||||
if (analogEnable) {
|
||||
printf("*");
|
||||
// printf("*");
|
||||
bus_w16(DUMMY_REG,1<<8); // read strobe to all fifos
|
||||
bus_w16(DUMMY_REG,0);
|
||||
for (i=0; i<32; i++) {
|
||||
if (~(mask&adcDisableMask)) {
|
||||
*((u_int16_t*)now_ptr)=*values;//bus_r16(FIFO_DATA_REG);
|
||||
if (i!=0 || ns!=0) {
|
||||
a=0;
|
||||
while (*((u_int16_t*)now_ptr)==*((u_int16_t*)(now_ptr)-1) && a++<10) {
|
||||
*((u_int16_t*)now_ptr)=*values;
|
||||
}
|
||||
}
|
||||
*((u_int16_t*)now_ptr)=bus_r16(FIFO_DATA_REG);
|
||||
/* if (i!=0 || ns!=0) { */
|
||||
/* a=0; */
|
||||
/* while (*((u_int16_t*)now_ptr)==*((u_int16_t*)(now_ptr)-1) && a++<10 && *((u_int16_t*)now_ptr)!=0 && *((u_int16_t*)now_ptr)!=0x3ff) { */
|
||||
/* printf("%d .",i); */
|
||||
/* *((u_int16_t*)now_ptr)=bus_r16(FIFO_DATA_REG);//\*values; */
|
||||
/* } */
|
||||
/* } */
|
||||
while (*((u_int16_t*)now_ptr)!=bus_r16(FIFO_DATA_REG)) {
|
||||
printf("%d ,",i);
|
||||
*((u_int16_t*)now_ptr)=bus_r16(FIFO_DATA_REG);
|
||||
}
|
||||
now_ptr+=2;
|
||||
}
|
||||
}
|
||||
mask=mask<<1;
|
||||
// if (~(mask&adcDisableMask)
|
||||
bus_w16(DUMMY_REG,i+1);
|
||||
@ -2177,7 +2171,7 @@ u_int16_t* fifo_read_event(int ns)
|
||||
}
|
||||
if (digitalEnable) {
|
||||
printf("+");
|
||||
|
||||
|
||||
bus_w16(DUMMY_REG,1<<9); // read strobe to digital fifo
|
||||
bus_w16(DUMMY_REG,0<<9); // read strobe to digital fifo
|
||||
*((u_int64_t*)now_ptr)=get64BitReg(FIFO_DIGITAL_DATA_LSB_REG,FIFO_DIGITAL_DATA_MSB_REG);
|
||||
@ -2186,17 +2180,17 @@ u_int16_t* fifo_read_event(int ns)
|
||||
now_ptr+=8;
|
||||
|
||||
}
|
||||
// bus_w16(DUMMY_REG,0); //
|
||||
/* #ifdef TIMEDBG */
|
||||
|
||||
/* gettimeofday(&tss,NULL); */
|
||||
/* printf("read data loop = %ld usec\n",(tss.tv_usec) - (tse.tv_usec)); */
|
||||
|
||||
// bus_w16(DUMMY_REG,0); //
|
||||
/* #ifdef TIMEDBG */
|
||||
|
||||
/* gettimeofday(&tss,NULL); */
|
||||
/* printf("read data loop = %ld usec\n",(tss.tv_usec) - (tse.tv_usec)); */
|
||||
|
||||
/* #endif */
|
||||
//#ifdef VERBOSE
|
||||
// printf("*");
|
||||
// printf("*");
|
||||
//#endif
|
||||
// printf("\n");
|
||||
// printf("\n");
|
||||
return ram_values;
|
||||
}
|
||||
|
||||
@ -2213,8 +2207,10 @@ u_int16_t* fifo_read_frame()
|
||||
now_ptr=(char*)ram_values;
|
||||
while(ns<nSamples && fifo_read_event(ns)) {
|
||||
// now_ptr+=dataBytes;
|
||||
// printf("%d %x\n",ns,bus_r16(LOOK_AT_ME_REG));
|
||||
ns++;
|
||||
}
|
||||
// printf("Data in fifo %x\n",bus_r16(LOOK_AT_ME_REG));
|
||||
#ifdef TIMEDBG
|
||||
// usleep(10);
|
||||
gettimeofday(&tss,NULL);
|
||||
|
@ -1,9 +1,9 @@
|
||||
Path: slsDetectorsPackage/slsDetectorSoftware/jctbDetectorServer
|
||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||
Repsitory UUID: 52b1e987263c831adcfab79c1c2b7bb9c68b09c7
|
||||
Revision: 26
|
||||
Repsitory UUID: 83600fcb15c8261173ab15a8ba8d1009693f2d23
|
||||
Revision: 27
|
||||
Branch: anna
|
||||
Last Changed Author: Anna_Bergamaschi
|
||||
Last Changed Rev: 3960
|
||||
Last Changed Date: 2018-08-09 14:00:05.000000002 +0200 ./server_funcs.c
|
||||
Last Changed Rev: 3962
|
||||
Last Changed Date: 2018-09-04 11:59:37.000000002 +0200 ./firmware_funcs.c
|
||||
|
@ -1,6 +1,6 @@
|
||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||
#define GITREPUUID "52b1e987263c831adcfab79c1c2b7bb9c68b09c7"
|
||||
#define GITREPUUID "83600fcb15c8261173ab15a8ba8d1009693f2d23"
|
||||
#define GITAUTH "Anna_Bergamaschi"
|
||||
#define GITREV 0x3960
|
||||
#define GITDATE 0x20180809
|
||||
#define GITREV 0x3962
|
||||
#define GITDATE 0x20180904
|
||||
#define GITBRANCH "anna"
|
||||
|
@ -3202,6 +3202,7 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
if ((n < 0) || (roiLimits == NULL))
|
||||
return FAIL;
|
||||
|
||||
// cout << "Setting ROI for " << n << "rois:" << endl;
|
||||
//ensures min < max
|
||||
verifyMinMaxROI(n, roiLimits);
|
||||
#ifdef VERBOSE
|
||||
@ -3216,7 +3217,7 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
xmax = roiLimits[i].xmax;
|
||||
ymin = roiLimits[i].ymin;
|
||||
ymax = roiLimits[i].ymax;
|
||||
|
||||
if (getDetectorsType() != JUNGFRAUCTB) {
|
||||
//check roi max values
|
||||
idet = decodeNChannel(xmax, ymax, channelX, channelY);
|
||||
#ifdef VERBOSE
|
||||
@ -3224,7 +3225,8 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
cout << "det:" << idet << "\t" << xmax << "\t" << ymax << "\t"
|
||||
<< channelX << "\t" << channelY << endl;
|
||||
#endif
|
||||
if (idet == -1) {
|
||||
//std::cout << getDetectorsType() << endl;
|
||||
if (idet == -1 ) {
|
||||
cout << "invalid roi" << endl;
|
||||
continue;
|
||||
}
|
||||
@ -3289,6 +3291,17 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[]) {
|
||||
if ((lastChannelX + offsetX) == xmax)
|
||||
xmin = xmax + 1;
|
||||
}
|
||||
}else {
|
||||
idet=0;
|
||||
nroi[idet]=n;
|
||||
index = 0;
|
||||
allroi[idet][index].xmin = xmin;
|
||||
allroi[idet][index].xmax = xmax;
|
||||
allroi[idet][index].ymin = ymin;
|
||||
allroi[idet][index].ymax = ymax;
|
||||
// nroi[idet] = nroi[idet] + 1;
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef VERBOSE
|
||||
@ -3335,6 +3348,7 @@ slsDetectorDefs::ROI* multiSlsDetector::getROI(int& n) {
|
||||
//get each detector's roi array
|
||||
for (unsigned i = 0; i < detectors.size(); ++i) {
|
||||
temp = detectors[i]->getROI(index);
|
||||
// cout << index << endl;
|
||||
if (detectors[i]->getErrorMask())
|
||||
setErrorMask(getErrorMask() | (1 << i));
|
||||
|
||||
|
@ -1,6 +1,6 @@
|
||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||
#define GITREPUUID "6bb7195a2c7dc9526088882e0244a7455d3c15b2"
|
||||
#define GITAUTH "Dhanya_Thattil"
|
||||
#define GITREV 0x3941
|
||||
#define GITDATE 0x20180718
|
||||
#define GITBRANCH "3.3.0-rc"
|
||||
#define GITREPUUID "83600fcb15c8261173ab15a8ba8d1009693f2d23"
|
||||
#define GITAUTH "Anna_Bergamaschi"
|
||||
#define GITREV 0x3962
|
||||
#define GITDATE 0x20180911
|
||||
#define GITBRANCH "anna"
|
||||
|
@ -1053,14 +1053,18 @@ void slsDetector::disconnectControl() {
|
||||
|
||||
|
||||
int slsDetector::connectData() {
|
||||
//cout << "connect" << endl;
|
||||
if (dataSocket){
|
||||
if (dataSocket->Connect() >= 0)
|
||||
return OK;
|
||||
else{
|
||||
if (dataSocket->Connect() >= 0) {
|
||||
//cout << "ok" << endl;
|
||||
return OK;
|
||||
} else{
|
||||
std::cout << "cannot connect to receiver" << endl;
|
||||
setErrorMask((getErrorMask())|(CANNOT_CONNECT_TO_RECEIVER));
|
||||
//cout << "fail" << endl;
|
||||
return FAIL;}
|
||||
}
|
||||
//cout << "undefined" << endl;
|
||||
return UNDEFINED;
|
||||
}
|
||||
|
||||
@ -2919,6 +2923,30 @@ int slsDetector::getThresholdEnergy(int imod) {
|
||||
updateDetector();
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
|
||||
if(thisDetector->myDetectorType==JUNGFRAUCTB) {
|
||||
|
||||
|
||||
int en=-1;
|
||||
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
|
||||
std::cout<< "Json header: " << header << std::endl;
|
||||
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find("\"threshold\"");
|
||||
if (pos0!=std::string::npos) {
|
||||
if (sscanf(header.substr(pos0).c_str(),"\"threshold\":%d", &en))
|
||||
thisDetector->currentThresholdEV=en;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
return thisDetector->currentThresholdEV;
|
||||
}
|
||||
|
||||
@ -2962,6 +2990,62 @@ int slsDetector::setThresholdEnergy(int e_eV, int imod, detectorSettings isetti
|
||||
} else {
|
||||
thisDetector->currentThresholdEV=e_eV;
|
||||
}
|
||||
|
||||
/* add threshold to zmq header */
|
||||
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
std::cout<< "Old json header: " << header << std::endl;
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find(",\"threshold\"");
|
||||
if (pos0==std::string::npos) {
|
||||
pos0=header.find("\"threshold\"");
|
||||
}
|
||||
if (pos0!=std::string::npos) {
|
||||
// remove old roi
|
||||
// std::cout<< header.substr(0,pos) << std::endl;
|
||||
// size_t pos0=header.find_last_of(",",0,pos);
|
||||
// if (pos0==std::string::npos) {
|
||||
// pos0=pos;
|
||||
// } else
|
||||
// std::cout<< header.substr(pos0) << std::endl;
|
||||
size_t pos1=header.find_first_of(",",pos0+1);
|
||||
// std::cout << pos0 << " " << pos1 << std::endl;
|
||||
std::cout<< "Replacing old threshold: " << header.substr(pos0,pos1-pos0) << std::endl;
|
||||
// if (pos1!=std::string::npos)
|
||||
header.erase(pos0,pos1-pos0);
|
||||
// else
|
||||
// header.erase(pos0);
|
||||
}
|
||||
if (header.length()>0) {
|
||||
if (header.at(0)==',')
|
||||
header.erase(0,1);
|
||||
if (header.length()>0)
|
||||
header.append(",");
|
||||
}
|
||||
// std::cout<< "Left: " << header << std::endl;
|
||||
char h[1000];
|
||||
sprintf(h,"\"threshold\":%d",e_eV);
|
||||
// std::cout<< "new ROI: " << h << std::endl;
|
||||
|
||||
header.append(h);
|
||||
std::cout<< "New json header: " << header << std::endl;
|
||||
setReceiverOnline(ONLINE_FLAG);
|
||||
setNetworkParameter(ADDITIONAL_JSON_HEADER, header);
|
||||
/***** END FOR ZMQ HEADER */
|
||||
ret=OK;
|
||||
|
||||
if (thisDetector->myDetectorType==JUNGFRAUCTB) {
|
||||
thisDetector->currentThresholdEV=e_eV;
|
||||
}
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
return thisDetector->currentThresholdEV;
|
||||
}
|
||||
|
||||
@ -4771,7 +4855,8 @@ int slsDetector::setReadOutFlags(readOutFlags flag) {
|
||||
|
||||
|
||||
int fnum=F_SET_READOUT_FLAGS;
|
||||
readOutFlags retval;
|
||||
//readOutFlags retval;
|
||||
int retval;
|
||||
char mess[MAX_STR_LENGTH]="";
|
||||
int ret=OK;
|
||||
|
||||
@ -4790,7 +4875,7 @@ int slsDetector::setReadOutFlags(readOutFlags flag) {
|
||||
setErrorMask((getErrorMask())|(COULD_NOT_SET_READOUT_FLAGS));
|
||||
} else {
|
||||
controlSocket->ReceiveDataOnly(&retval,sizeof(retval));
|
||||
thisDetector->roFlags=retval;
|
||||
thisDetector->roFlags=(readOutFlags)retval;
|
||||
if (thisDetector->myDetectorType==JUNGFRAUCTB) {
|
||||
|
||||
getTotalNumberOfChannels();
|
||||
@ -4807,6 +4892,150 @@ int slsDetector::setReadOutFlags(readOutFlags flag) {
|
||||
thisDetector->roFlags=flag;
|
||||
}
|
||||
|
||||
std::cout<< "***ZMQ: " << hex<< flag << std::endl;
|
||||
|
||||
if (flag & (PEDESTAL | NEWPEDESTAL | NEWFLAT | FLAT | FRAME)) {
|
||||
|
||||
std::cout<< "***frameMode: " << std::endl;
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
std::cout<< "Old json header: " << header << std::endl;
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find(",\"frameMode\"");
|
||||
if (pos0==std::string::npos) {
|
||||
pos0=header.find("\"frameMode\"");
|
||||
}
|
||||
if (pos0!=std::string::npos) {
|
||||
size_t pos1=header.find_first_of(",",pos0+1);
|
||||
// if (pos1!=std::string::npos)
|
||||
if (flag!=GET_READOUT_FLAGS) {
|
||||
cout << dec<< pos0 << " " << pos1 << endl;
|
||||
std::cout<< "Replacing frame Mode: " << header.substr(pos0,pos1-pos0) << std::endl;
|
||||
header.erase(pos0,pos1-pos0);
|
||||
}
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"frameMode\":\"pedestal\"")
|
||||
retval|=PEDESTAL;
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"frameMode\":\"newPedestal\"")
|
||||
retval|=NEWPEDESTAL;
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"frameMode\":\"flatfield\"")
|
||||
retval|=FLAT;
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"frameMode\":\"newFlatfield\"")
|
||||
retval|=NEWFLAT;
|
||||
else
|
||||
retval|=FRAME;
|
||||
|
||||
|
||||
}
|
||||
char h[1000];
|
||||
switch (flag) {
|
||||
case PEDESTAL:
|
||||
retval=PEDESTAL;
|
||||
strcpy(h,"\"frameMode\":\"pedestal\"");
|
||||
break;
|
||||
case NEWPEDESTAL:
|
||||
retval=NEWPEDESTAL;
|
||||
strcpy(h,"\"frameMode\":\"newPedestal\"");
|
||||
break;
|
||||
case FLAT:
|
||||
retval=FLAT;
|
||||
strcpy(h,"\"frameMode\":\"flatfield\"");
|
||||
break;
|
||||
case NEWFLAT:
|
||||
retval=NEWFLAT;
|
||||
strcpy(h,"\"frameMode\":\"newFlatfield\"");
|
||||
break;
|
||||
default:
|
||||
retval=FRAME;
|
||||
strcpy(h,"\"frameMode\":\"frame\"");
|
||||
}
|
||||
if (flag!=GET_READOUT_FLAGS) {
|
||||
if (header.length()>0) {
|
||||
if (header.at(0)==',')
|
||||
header.erase(0,1);
|
||||
if (header.length()>0)
|
||||
header.append(",");
|
||||
}
|
||||
header.append(h);
|
||||
setReceiverOnline(ONLINE_FLAG);
|
||||
setNetworkParameter(ADDITIONAL_JSON_HEADER, header);
|
||||
}
|
||||
std::cout<< "New json header: " << header << std::endl;
|
||||
/***** END FOR ZMQ HEADER */
|
||||
ret=OK;
|
||||
// retval=flag;
|
||||
|
||||
}
|
||||
|
||||
if (flag & (COUNTING | INTERPOLATING | ANALOG)) {
|
||||
|
||||
std::cout<< "***detectorMode: " << std::endl;
|
||||
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
std::cout<< "Old json header: " << header << std::endl;
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find(",\"detectorMode\"");
|
||||
if (pos0==std::string::npos) {
|
||||
pos0=header.find("\"detectorMode\"");
|
||||
}
|
||||
if (pos0!=std::string::npos) {
|
||||
size_t pos1=header.find_first_of(",",pos0+1);
|
||||
// if (pos1!=std::string::npos)
|
||||
if (flag!=GET_READOUT_FLAGS) {
|
||||
cout << dec<< pos0 << " " << pos1 << endl;
|
||||
std::cout<< "Replacing detector Mode: " << header.substr(pos0,pos1-pos0) << std::endl;
|
||||
header.erase(pos0,pos1-pos0);
|
||||
}
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"detectorMode\":\"counting\"")
|
||||
retval|=COUNTING;
|
||||
else if (header.substr(pos0,pos1+pos0)=="\"detectorMode\":\"interpolating\"")
|
||||
retval|=INTERPOLATING;
|
||||
else
|
||||
retval|=ANALOG;
|
||||
}
|
||||
char h[1000];
|
||||
switch (flag) {
|
||||
case COUNTING:
|
||||
strcpy(h,"\"detectorMode\":\"counting\"");
|
||||
retval=COUNTING;
|
||||
break;
|
||||
case INTERPOLATING:
|
||||
retval=INTERPOLATING;
|
||||
strcpy(h,"\"detectorMode\":\"interpolating\"");
|
||||
break;
|
||||
default:
|
||||
retval=ANALOG;
|
||||
strcpy(h,"\"detectorMode\":\"analog\"");
|
||||
}
|
||||
if (flag!=GET_READOUT_FLAGS) {
|
||||
if (header.length()>0) {
|
||||
if (header.at(0)==',')
|
||||
header.erase(0,1);
|
||||
if (header.length()>0)
|
||||
header.append(",");
|
||||
}
|
||||
header.append(h);
|
||||
setReceiverOnline(ONLINE_FLAG);
|
||||
setNetworkParameter(ADDITIONAL_JSON_HEADER, header);
|
||||
/***** END FOR ZMQ HEADER */
|
||||
// retval=flag;
|
||||
}
|
||||
std::cout<< "New json header: " << header << std::endl;
|
||||
ret=OK;
|
||||
}
|
||||
|
||||
|
||||
if (ret==OK) {
|
||||
|
||||
// thisDetector->roFlags=flag;
|
||||
thisDetector->roFlags=(readOutFlags)retval;
|
||||
}
|
||||
|
||||
std::cout<< retval << std::endl;
|
||||
#ifdef VERBOSE
|
||||
std::cout<< "Readout flag set to "<< retval << std::endl;
|
||||
#endif
|
||||
@ -5540,12 +5769,14 @@ string slsDetector::setAdditionalJsonHeader(string jsonheader) {
|
||||
strcpy(arg, jsonheader.c_str());
|
||||
|
||||
if(thisDetector->receiverOnlineFlag==ONLINE_FLAG){
|
||||
#ifdef VERBOSE
|
||||
std::cout << "Sending additional json header " << arg << std::endl;
|
||||
#endif
|
||||
//#ifdef VERBOSE
|
||||
// std::cout << "* Sending additional json header " << arg << std::endl;
|
||||
//#endif
|
||||
if (connectData() == OK){
|
||||
ret=thisReceiver->sendString(fnum,retval,arg);
|
||||
disconnectData();
|
||||
|
||||
// std::cout << "** Sending additional json header " << arg << std::endl;
|
||||
ret=thisReceiver->sendString(fnum,retval,arg);
|
||||
disconnectData();
|
||||
}
|
||||
if(ret==FAIL) {
|
||||
setErrorMask((getErrorMask())|(COULDNOT_SET_NETWORK_PARAMETER));
|
||||
@ -5994,6 +6225,70 @@ int slsDetector::setROI(int n,ROI roiLimits[]) {
|
||||
//sort ascending order
|
||||
int temp;
|
||||
|
||||
/***** NEW PART FOR ZMQ HEADER */
|
||||
//std::cout<< "******* ROI" << std::endl;
|
||||
|
||||
// char header[1000];
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
std::cout<< "Old json header: " << header << std::endl;
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find(",\"roi\"");
|
||||
if (pos0==std::string::npos) {
|
||||
pos0=header.find("\"roi\"");
|
||||
}
|
||||
if (pos0!=std::string::npos) {
|
||||
// remove old roi
|
||||
// std::cout<< header.substr(0,pos) << std::endl;
|
||||
// size_t pos0=header.find_last_of(",",0,pos);
|
||||
// if (pos0==std::string::npos) {
|
||||
// pos0=pos;
|
||||
// } else
|
||||
// std::cout<< header.substr(pos0) << std::endl;
|
||||
size_t pos1=header.find_first_of("]",pos0+1);
|
||||
// std::cout << pos0 << " " << pos1 << std::endl;
|
||||
std::cout<< "Replacing old ROI: " << header.substr(pos0,pos1-pos0+1) << std::endl;
|
||||
// if (pos1!=std::string::npos)
|
||||
header.erase(pos0,pos1-pos0+1);
|
||||
// else
|
||||
// header.erase(pos0);
|
||||
}
|
||||
if (header.length()>0) {
|
||||
if (header.at(0)==',')
|
||||
header.erase(0,1);
|
||||
if (header.length()>0)
|
||||
header.append(",");
|
||||
}
|
||||
// std::cout<< "Left: " << header << std::endl;
|
||||
char h[1000];
|
||||
if (n) {
|
||||
sprintf(h,"\"roi\":[%d, %d, %d, %d]",roiLimits[0].xmin, roiLimits[0].xmax, roiLimits[0].ymin, roiLimits[0].ymax);
|
||||
// std::cout<< "new ROI: " << h << std::endl;
|
||||
} else {
|
||||
sprintf(h,"\"roi\":[%d, %d, %d, %d]",-1, -1, -1, -1);
|
||||
}
|
||||
header.append(h);
|
||||
std::cout<< "New json header: " << header << std::endl;
|
||||
setReceiverOnline(ONLINE_FLAG);
|
||||
setNetworkParameter(ADDITIONAL_JSON_HEADER, header);
|
||||
/***** END FOR ZMQ HEADER */
|
||||
ret=OK;
|
||||
|
||||
if(thisDetector->myDetectorType==JUNGFRAUCTB) {
|
||||
|
||||
thisDetector->nROI = n;
|
||||
thisDetector->roiLimits[0].xmin=roiLimits[0].xmin;
|
||||
thisDetector->roiLimits[0].xmax=roiLimits[0].xmax;
|
||||
thisDetector->roiLimits[0].ymin=roiLimits[0].ymin;
|
||||
thisDetector->roiLimits[0].ymax=roiLimits[0].ymax;
|
||||
// std::cout << "** " << thisDetector->nROI << endl;
|
||||
getTotalNumberOfChannels();
|
||||
// std::cout << "*** " << thisDetector->nROI << endl;
|
||||
return ret;
|
||||
}
|
||||
// if(thisDetector->myDetectorType==JUNGFRAUCTB)
|
||||
for(int i=0;i<n;++i){
|
||||
|
||||
// cout << "*** ROI "<< i << " xmin " << roiLimits[i].xmin << " xmax "
|
||||
@ -6022,16 +6317,45 @@ int slsDetector::setROI(int n,ROI roiLimits[]) {
|
||||
if(ret==FAIL)
|
||||
setErrorMask((getErrorMask())|(COULDNOT_SET_ROI));
|
||||
|
||||
|
||||
if(thisDetector->myDetectorType==JUNGFRAUCTB) getTotalNumberOfChannels();
|
||||
|
||||
return ret;
|
||||
}
|
||||
|
||||
|
||||
slsDetectorDefs::ROI* slsDetector::getROI(int &n) {
|
||||
sendROI(-1,NULL);
|
||||
n=thisDetector->nROI;
|
||||
if(thisDetector->myDetectorType==JUNGFRAUCTB) getTotalNumberOfChannels();
|
||||
if(thisDetector->myDetectorType==JUNGFRAUCTB) {
|
||||
|
||||
|
||||
int xmin, xmax, ymin, ymax;
|
||||
|
||||
string header=getNetworkParameter(ADDITIONAL_JSON_HEADER);
|
||||
|
||||
|
||||
std::cout<< "Json header: " << header << std::endl;
|
||||
|
||||
//must be in the format '\"label1\":\"value1\",\"label2\":\"value2\"' etc."
|
||||
//
|
||||
size_t pos0;
|
||||
pos0=header.find("\"roi\"");
|
||||
if (pos0!=std::string::npos) {
|
||||
sscanf(header.substr(pos0).c_str(),"\"roi\":[%d, %d, %d, %d]", &xmin, &xmax, &ymin, &ymax);
|
||||
if (xmin<0 && xmax<0 && ymin<0 && ymax<0)
|
||||
thisDetector->nROI=0;
|
||||
else {
|
||||
thisDetector->nROI=1;
|
||||
thisDetector->roiLimits[0].xmin=xmin;
|
||||
thisDetector->roiLimits[0].xmax=xmax;
|
||||
thisDetector->roiLimits[0].ymin=ymin;
|
||||
thisDetector->roiLimits[0].ymax=ymax;
|
||||
}
|
||||
} else {
|
||||
thisDetector->nROI=0;
|
||||
}
|
||||
|
||||
// cout << thisDetector->nROI << endl;
|
||||
getTotalNumberOfChannels();
|
||||
} else
|
||||
sendROI(-1,NULL);
|
||||
return thisDetector->roiLimits;
|
||||
}
|
||||
|
||||
|
@ -991,9 +991,12 @@ slsDetectorCommand::slsDetectorCommand(slsDetectorUtils *det) {
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdImage;
|
||||
++i;
|
||||
|
||||
|
||||
|
||||
|
||||
/*! \page data
|
||||
- <b>gainimage fn</b> Loads the gain image to the detector from file fn (gain map for translation into number of photons of an analog detector). Cannot get.
|
||||
*/
|
||||
descrToFuncMap[i].m_pFuncName="flatimage"; //
|
||||
descrToFuncMap[i].m_pFuncPtr=&slsDetectorCommand::cmdImage;
|
||||
++i;
|
||||
|
||||
|
||||
|
||||
@ -4089,7 +4092,6 @@ string slsDetectorCommand::cmdNetworkParameter(int narg, char *args[], int actio
|
||||
t=ADDITIONAL_JSON_HEADER;
|
||||
}
|
||||
else return ("unknown network parameter")+cmd;
|
||||
|
||||
if (action==PUT_ACTION) {
|
||||
myDet->setNetworkParameter(t, args[1]);
|
||||
// switch it back on, if it had been switched on
|
||||
@ -4454,8 +4456,9 @@ string slsDetectorCommand::cmdDetectorSize(int narg, char *args[], int action) {
|
||||
if ((val<0) || (narg!=((val*4)+2)) )
|
||||
return helpDetectorSize(narg,args,action);
|
||||
ROI allroi[val];
|
||||
pos=2;
|
||||
for(i=0;i<val;++i){
|
||||
pos=1;
|
||||
// std::cout << val << std::endl;
|
||||
for(i=0;i<val;i++){
|
||||
if ((!sscanf(args[++pos],"%d",&allroi[i].xmin)) ||
|
||||
(!sscanf(args[++pos],"%d",&allroi[i].xmax)) ||
|
||||
(!sscanf(args[++pos],"%d",&allroi[i].ymin)) ||
|
||||
@ -5956,29 +5959,45 @@ string slsDetectorCommand::cmdAdvanced(int narg, char *args[], int action) {
|
||||
if (action==PUT_ACTION) {
|
||||
string sval=string(args[1]);
|
||||
if (sval=="none")
|
||||
flag=NORMAL_READOUT;
|
||||
flag=NORMAL_READOUT;
|
||||
else if (sval=="storeinram")
|
||||
flag=STORE_IN_RAM;
|
||||
flag=STORE_IN_RAM;
|
||||
else if (sval=="tot")
|
||||
flag=TOT_MODE;
|
||||
flag=TOT_MODE;
|
||||
else if (sval=="continous")
|
||||
flag=CONTINOUS_RO;
|
||||
flag=CONTINOUS_RO;
|
||||
else if (sval=="parallel")
|
||||
flag=PARALLEL;
|
||||
flag=PARALLEL;
|
||||
else if (sval=="nonparallel")
|
||||
flag=NONPARALLEL;
|
||||
flag=NONPARALLEL;
|
||||
else if (sval=="safe")
|
||||
flag=SAFE;
|
||||
flag=SAFE;
|
||||
else if (sval=="digital")
|
||||
flag=DIGITAL_ONLY;
|
||||
flag=DIGITAL_ONLY;
|
||||
else if (sval=="analog_digital")
|
||||
flag=ANALOG_AND_DIGITAL;
|
||||
flag=ANALOG_AND_DIGITAL;
|
||||
else if (sval=="overflow")
|
||||
flag=SHOW_OVERFLOW;
|
||||
flag=SHOW_OVERFLOW;
|
||||
else if (sval=="nooverflow")
|
||||
flag=NOOVERFLOW;
|
||||
flag=NOOVERFLOW;
|
||||
else if (sval=="pedestal")
|
||||
flag=PEDESTAL;
|
||||
else if (sval=="flatfield")
|
||||
flag=FLAT;
|
||||
else if (sval=="newpedestal")
|
||||
flag=NEWPEDESTAL;
|
||||
else if (sval=="newflatfield")
|
||||
flag=NEWFLAT;
|
||||
else if (sval=="frame")
|
||||
flag=FRAME;
|
||||
else if (sval=="analog")
|
||||
flag=ANALOG;
|
||||
else if (sval=="counting")
|
||||
flag=COUNTING;
|
||||
else if (sval=="interpolating")
|
||||
flag=INTERPOLATING;
|
||||
else
|
||||
return string("could not scan flag ")+string(args[1]);
|
||||
return string("could not scan flag ")+string(args[1]);
|
||||
}
|
||||
|
||||
myDet->setOnline(ONLINE_FLAG);
|
||||
@ -6009,6 +6028,22 @@ string slsDetectorCommand::cmdAdvanced(int narg, char *args[], int action) {
|
||||
strcat(answer,"overflow ");
|
||||
if (retval & NOOVERFLOW)
|
||||
strcat(answer,"nooverflow ");
|
||||
if (retval & PEDESTAL)
|
||||
strcat(answer,"pedestal ");
|
||||
if (retval & NEWPEDESTAL)
|
||||
strcat(answer,"newpedestal ");
|
||||
if (retval & NEWFLAT)
|
||||
strcat(answer,"newflat ");
|
||||
if (retval & FLAT)
|
||||
strcat(answer,"flatfield ");
|
||||
if (retval & FRAME)
|
||||
strcat(answer,"frame ");
|
||||
if (retval & ANALOG)
|
||||
strcat(answer,"analog ");
|
||||
if (retval & COUNTING)
|
||||
strcat(answer,"counting ");
|
||||
if (retval & INTERPOLATING)
|
||||
strcat(answer,"interpolating ");
|
||||
if(strlen(answer))
|
||||
return string(answer);
|
||||
|
||||
|
Reference in New Issue
Block a user