mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-14 13:57:13 +02:00
Compare commits
19 Commits
Author | SHA1 | Date | |
---|---|---|---|
6f7c31b747 | |||
8c1974b34e | |||
287efde54a | |||
faa25b9e9f | |||
1b92b01a46 | |||
4849063b6c | |||
5cd020ae81 | |||
160fabe02c | |||
90dd8e70e5 | |||
08e121c71f | |||
cb3b337a99 | |||
5d9a952316 | |||
8cc05c5848 | |||
d69d69e892 | |||
07a120fc4a | |||
11e8796847 | |||
f79b009978 | |||
3259bfb008 | |||
934bc5b9db |
56
RELEASE.txt
56
RELEASE.txt
@ -1,26 +1,72 @@
|
|||||||
SLS Detector Package 3.1.3 released on 2018-06-28
|
SLS Detector Package 3.1.4 released on 2018-08-17
|
||||||
=================================================
|
=================================================
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
INTRODUCTION
|
INTRODUCTION
|
||||||
|
|
||||||
This document describes the differences between 3.1.3 into 3.1.2 releases.
|
This document describes the differences between 3.1.4 into 3.1.3 releases.
|
||||||
|
|
||||||
|
|
||||||
Topics Concerning
|
Topics Concerning
|
||||||
==================
|
==================
|
||||||
Using delay after trigger for Jungfrau
|
- get settings in users class
|
||||||
|
- HDF5 in Receiver
|
||||||
|
- gotthard timer accuracy
|
||||||
|
|
||||||
|
|
||||||
Resolved Issues
|
Resolved Issues
|
||||||
===============
|
===============
|
||||||
|
|
||||||
|
Client
|
||||||
|
------
|
||||||
|
1. Users class setSettings(-1) gave undefined settings. Has been fixed.
|
||||||
|
|
||||||
|
2. Users class timers give more precise values now.
|
||||||
|
|
||||||
|
3. When deleting slsDetector object, Stop socket deletion includes a close on
|
||||||
|
default file descriptor zero (which it didn't open, just set for flag).
|
||||||
|
This is fixed with temporary solution, to connect stop socket at checkOnline
|
||||||
|
to set file descriptor to the right one. Later releases will use exception
|
||||||
|
to handle constructor error flags.
|
||||||
|
|
||||||
|
|
||||||
Detector Server
|
Detector Server
|
||||||
---------------
|
---------------
|
||||||
1. Delay after trigger was always set to 5 seconds. This is fixed now.
|
1. (Gotthard) Timers converted from time in nanoseconds to number of cycles
|
||||||
3. Get delay left after trigger is not available for this version.
|
is made more precise now. Clock value changed from 32.1E+6 to 32.007729E+6.
|
||||||
|
|
||||||
|
|
||||||
|
Receiver
|
||||||
|
--------
|
||||||
|
1. Jungfrau Single Module Master files did not link to the HDF5 data file properly.
|
||||||
|
This is fixed now.
|
||||||
|
|
||||||
|
2. Relative linking is used in the HDF5, instead of absolute now.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
New Features
|
||||||
|
============
|
||||||
|
|
||||||
|
Client
|
||||||
|
------
|
||||||
|
1. Timers can be set/retrieved individually. It has been introduced because
|
||||||
|
Gotthard 25um can have different delays for master and slave modules.
|
||||||
|
|
||||||
|
Receiver
|
||||||
|
--------
|
||||||
|
1. HDF5 x dimension (#images). Max made unlimited. Chunked Dataset by default.
|
||||||
|
|
||||||
|
When receiver gets an image more than #frames, the HDF5 dataset will
|
||||||
|
extend itself in the x dimension by another #frames. So, one can do
|
||||||
|
(in Jungfrau, Gotthard, NOT Eiger)
|
||||||
|
sls_detector_put resetframescaught 0
|
||||||
|
sls_detector_put receiver start
|
||||||
|
sls_detector_put status start
|
||||||
|
sls_detector_put status start
|
||||||
|
...
|
||||||
|
sls_detector_put receiver stop
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -71,11 +71,6 @@ int main(int argc, char **argv) {
|
|||||||
|
|
||||||
/** - registering data callback */
|
/** - registering data callback */
|
||||||
pDetector->registerDataCallback(&dataCallback, NULL);
|
pDetector->registerDataCallback(&dataCallback, NULL);
|
||||||
/** - if receiver exists, enable data streaming from receiver to get the data */
|
|
||||||
pDetector->enableDataStreamingFromReceiver(1);
|
|
||||||
/** - create zmq sockets in client to enable data streaming in of data from receiver/different process */
|
|
||||||
pDetector->enableDataStreamingToClient(1);
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
/** - ensuring detector status is idle before starting acquisition. exiting if not idle */
|
/** - ensuring detector status is idle before starting acquisition. exiting if not idle */
|
||||||
|
@ -1 +0,0 @@
|
|||||||
../slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.1.0.1
|
|
1
serverBin/gotthardDetectorServerv3.1.4.0
Symbolic link
1
serverBin/gotthardDetectorServerv3.1.4.0
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.1.4.0
|
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorGui
|
Path: slsDetectorsPackage/slsDetectorGui
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: e599bfe56f512ea6a262483f61ffd8d67d6c6fcd
|
Repsitory UUID: 1b92b01a466aa1986b8198700274af75477a1e54
|
||||||
Revision: 454
|
Revision: 455
|
||||||
Branch: 3.1.3
|
Branch: 3.1.4
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Dhanya_Thattil
|
||||||
Last Changed Rev: 3475
|
Last Changed Rev: 3492
|
||||||
Last Changed Date: 2018-06-28 14:19:33.000000002 +0200 ./src/qTabSettings.cpp
|
Last Changed Date: 2018-08-17 16:36:24.000000002 +0200 ./src/qTabSettings.cpp
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "e599bfe56f512ea6a262483f61ffd8d67d6c6fcd"
|
#define GITREPUUID "1b92b01a466aa1986b8198700274af75477a1e54"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Dhanya_Thattil"
|
||||||
#define GITREV 0x3475
|
#define GITREV 0x3492
|
||||||
#define GITDATE 0x20180628
|
#define GITDATE 0x20180817
|
||||||
#define GITBRANCH "3.1.3"
|
#define GITBRANCH "3.1.4"
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware
|
Path: slsDetectorsPackage/slsDetectorSoftware
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: e599bfe56f512ea6a262483f61ffd8d67d6c6fcd
|
Repsitory UUID: 1b92b01a466aa1986b8198700274af75477a1e54
|
||||||
Revision: 1720
|
Revision: 1726
|
||||||
Branch: 3.1.3
|
Branch: 3.1.4
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Dhanya_Thattil
|
||||||
Last Changed Rev: 3475
|
Last Changed Rev: 3492
|
||||||
Last Changed Date: 2018-06-28 15:27:02.000000002 +0200 ./threadFiles/ThreadPool.o
|
Last Changed Date: 2018-08-17 17:57:11.000000002 +0200 ./threadFiles/ThreadPool.o
|
||||||
|
@ -905,21 +905,16 @@ int64_t getFrames(){
|
|||||||
|
|
||||||
int64_t setExposureTime(int64_t value){
|
int64_t setExposureTime(int64_t value){
|
||||||
/* time is in ns */
|
/* time is in ns */
|
||||||
if (value!=-1) {
|
if (value != -1) {
|
||||||
double actualvalue = value*(1E-9*CLK_FREQ);
|
value = (value * 1E-3 * CLK_FREQ ) + 0.5;
|
||||||
value*=(1E-9*CLK_FREQ);
|
|
||||||
if(fabs(actualvalue-value)>= 0.5){
|
|
||||||
if(actualvalue > value)
|
|
||||||
value++;
|
|
||||||
else
|
|
||||||
value--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
return set64BitReg(value,SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ);
|
return (set64BitReg(value,SET_EXPTIME_LSB_REG, SET_EXPTIME_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getExposureTime(){
|
int64_t getExposureTime(){
|
||||||
return get64BitReg(GET_EXPTIME_LSB_REG, GET_EXPTIME_MSB_REG)/(1E-9*CLK_FREQ);
|
return (get64BitReg(GET_EXPTIME_LSB_REG, GET_EXPTIME_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t setGates(int64_t value){
|
int64_t setGates(int64_t value){
|
||||||
@ -933,23 +928,16 @@ int64_t getGates(){
|
|||||||
int64_t setPeriod(int64_t value){
|
int64_t setPeriod(int64_t value){
|
||||||
/* time is in ns */
|
/* time is in ns */
|
||||||
if (value!=-1) {
|
if (value!=-1) {
|
||||||
double actualvalue = value*(1E-9*CLK_FREQ);
|
value = (value * 1E-3 * CLK_FREQ ) + 0.5;
|
||||||
value*=(1E-9*CLK_FREQ);
|
|
||||||
if(fabs(actualvalue-value)>= 0.5){
|
|
||||||
if(actualvalue > value)
|
|
||||||
value++;
|
|
||||||
else
|
|
||||||
value--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return (set64BitReg(value,SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
return set64BitReg(value,SET_PERIOD_LSB_REG, SET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getPeriod(){
|
int64_t getPeriod(){
|
||||||
return get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG)/(1E-9*CLK_FREQ);
|
return (get64BitReg(GET_PERIOD_LSB_REG, GET_PERIOD_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t setDelay(int64_t value){
|
int64_t setDelay(int64_t value){
|
||||||
@ -959,16 +947,11 @@ int64_t setDelay(int64_t value){
|
|||||||
value += masterdefaultdelay;
|
value += masterdefaultdelay;
|
||||||
cprintf(BLUE,"Actual delay for master: %lld\n", (long long int) value);
|
cprintf(BLUE,"Actual delay for master: %lld\n", (long long int) value);
|
||||||
}
|
}
|
||||||
double actualvalue = value*(1E-9*CLK_FREQ);
|
value = (value * 1E-3 * CLK_FREQ ) + 0.5;
|
||||||
value*=(1E-9*CLK_FREQ);
|
|
||||||
if(fabs(actualvalue-value)>= 0.5){
|
|
||||||
if(actualvalue > value)
|
|
||||||
value++;
|
|
||||||
else
|
|
||||||
value--;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
int64_t retval = set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG)/(1E-9*CLK_FREQ);
|
|
||||||
|
int64_t retval = (set64BitReg(value,SET_DELAY_LSB_REG, SET_DELAY_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
if (masterflags == IS_MASTER) {
|
if (masterflags == IS_MASTER) {
|
||||||
cprintf(BLUE,"Actual delay read from master: %lld\n", (long long int) retval);
|
cprintf(BLUE,"Actual delay read from master: %lld\n", (long long int) retval);
|
||||||
retval -= masterdefaultdelay;
|
retval -= masterdefaultdelay;
|
||||||
@ -978,7 +961,8 @@ int64_t setDelay(int64_t value){
|
|||||||
}
|
}
|
||||||
|
|
||||||
int64_t getDelay(){
|
int64_t getDelay(){
|
||||||
return get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG)/(1E-9*CLK_FREQ);
|
return (get64BitReg(GET_DELAY_LSB_REG, GET_DELAY_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t setTrains(int64_t value){
|
int64_t setTrains(int64_t value){
|
||||||
@ -996,37 +980,26 @@ int64_t setProbes(int64_t value){
|
|||||||
|
|
||||||
|
|
||||||
int64_t setProgress() {
|
int64_t setProgress() {
|
||||||
|
|
||||||
//????? eventually call after setting the registers
|
//????? eventually call after setting the registers
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int64_t getProgress() {
|
int64_t getProgress() {
|
||||||
|
|
||||||
|
|
||||||
//should be done in firmware!!!!
|
//should be done in firmware!!!!
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getActualTime(){
|
int64_t getActualTime(){
|
||||||
return get64BitReg(GET_ACTUAL_TIME_LSB_REG, GET_ACTUAL_TIME_MSB_REG)/(1E-9*CLK_FREQ);
|
return (get64BitReg(GET_ACTUAL_TIME_LSB_REG, GET_ACTUAL_TIME_MSB_REG) /
|
||||||
|
(1E-3 * CLK_FREQ)) + 0.5;
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t getMeasurementTime(){
|
int64_t getMeasurementTime(){
|
||||||
int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG);
|
int64_t v=get64BitReg(GET_MEASUREMENT_TIME_LSB_REG, GET_MEASUREMENT_TIME_MSB_REG);
|
||||||
/* u_int64_t mask=0x8000000000000000;
|
return (v / (1E-3 * CLK_FREQ)) + 0.5;
|
||||||
if (v & mask ) {
|
|
||||||
#ifdef VERBOSE
|
|
||||||
printf("no measurement time left\n");
|
|
||||||
#endif
|
|
||||||
return -1E+9;
|
|
||||||
} else*/
|
|
||||||
return v/(1E-9*CLK_FREQ);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsDetectorSoftware/gotthardDetectorServer
|
Path: slsDetectorsPackage/slsDetectorSoftware/gotthardDetectorServer
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: 675d69392a6497d42b23057c7c8783c8dad768d0
|
Repsitory UUID: d69d69e8928f90b053a0e5ffccb9cfc4e9c5f960
|
||||||
Revision: 223
|
Revision: 225
|
||||||
Branch: 3.1.0-rc
|
Branch: 3.1.4-rc
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Dhanya_Thattil
|
||||||
Last Changed Rev: 3447
|
Last Changed Rev: 3483
|
||||||
Last Changed Date: 2018-02-27 14:04:08.000000002 +0100 ./server_funcs.c
|
Last Changed Date: 2018-07-25 14:56:37.000000002 +0200 ./firmware_funcs.c
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "675d69392a6497d42b23057c7c8783c8dad768d0"
|
#define GITREPUUID "d69d69e8928f90b053a0e5ffccb9cfc4e9c5f960"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Dhanya_Thattil"
|
||||||
#define GITREV 0x3447
|
#define GITREV 0x3483
|
||||||
#define GITDATE 0x20180227
|
#define GITDATE 0x20180725
|
||||||
#define GITBRANCH "3.1.0-rc"
|
#define GITBRANCH "3.1.4-rc"
|
||||||
|
Binary file not shown.
BIN
slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.1.4.0
Executable file
BIN
slsDetectorSoftware/gotthardDetectorServer/gotthardDetectorServerv3.1.4.0
Executable file
Binary file not shown.
@ -54,7 +54,7 @@
|
|||||||
#define DEBUGOUT
|
#define DEBUGOUT
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#define CLK_FREQ 32.1E+6
|
#define CLK_FREQ 32.007729
|
||||||
|
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -1974,10 +1974,26 @@ void multiSlsDetector::resetFinalDataQueue() {
|
|||||||
GATE_INTEGRATED_TIME
|
GATE_INTEGRATED_TIME
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t){
|
int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int imod){
|
||||||
|
|
||||||
int64_t ret=-100;
|
int64_t ret=-100;
|
||||||
|
|
||||||
|
// single (for gotthard 25 um)
|
||||||
|
if (imod != -1) {
|
||||||
|
if (imod >= 0 && imod < thisMultiDetector->numberOfDetectors) {
|
||||||
|
if (detectors[imod]) {
|
||||||
|
ret = detectors[imod]->setTimer(index,t,imod);
|
||||||
|
if(detectors[imod]->getErrorMask())
|
||||||
|
setErrorMask(getErrorMask()|(1<<imod));
|
||||||
|
return ret;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// multi
|
||||||
if(!threadpool){
|
if(!threadpool){
|
||||||
cout << "Error in creating threadpool. Exiting" << endl;
|
cout << "Error in creating threadpool. Exiting" << endl;
|
||||||
return -1;
|
return -1;
|
||||||
@ -1987,8 +2003,8 @@ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t){
|
|||||||
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet){
|
for(int idet=0; idet<thisMultiDetector->numberOfDetectors; ++idet){
|
||||||
if(detectors[idet]){
|
if(detectors[idet]){
|
||||||
iret[idet]= new int64_t(-1);
|
iret[idet]= new int64_t(-1);
|
||||||
Task* task = new Task(new func2_t<int64_t,timerIndex,int64_t>(&slsDetector::setTimer,
|
Task* task = new Task(new func3_t<int64_t,timerIndex,int64_t,int>(&slsDetector::setTimer,
|
||||||
detectors[idet],index,t,iret[idet]));
|
detectors[idet],index,t,imod,iret[idet]));
|
||||||
threadpool->add_task(task);
|
threadpool->add_task(task);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -688,9 +688,10 @@ class multiSlsDetector : public slsDetectorUtils {
|
|||||||
set/get timer value
|
set/get timer value
|
||||||
\param index timer index
|
\param index timer index
|
||||||
\param t time in ns or number of...(e.g. frames, gates, probes)
|
\param t time in ns or number of...(e.g. frames, gates, probes)
|
||||||
|
\param imod module number (gotthard delay can have different values)
|
||||||
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
int64_t setTimer(timerIndex index, int64_t t=-1);
|
int64_t setTimer(timerIndex index, int64_t t=-1, int imod = -1);
|
||||||
/**
|
/**
|
||||||
set/get timer value
|
set/get timer value
|
||||||
\param index timer index
|
\param index timer index
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "e599bfe56f512ea6a262483f61ffd8d67d6c6fcd"
|
#define GITREPUUID "1b92b01a466aa1986b8198700274af75477a1e54"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Dhanya_Thattil"
|
||||||
#define GITREV 0x3475
|
#define GITREV 0x3492
|
||||||
#define GITDATE 0x20180628
|
#define GITDATE 0x20180817
|
||||||
#define GITBRANCH "3.1.3"
|
#define GITBRANCH "3.1.4"
|
||||||
|
@ -1321,6 +1321,26 @@ string slsDetector::checkOnline() {
|
|||||||
disconnectControl();
|
disconnectControl();
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
std::cout<< "online!" << std::endl;
|
std::cout<< "online!" << std::endl;
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
}
|
||||||
|
//still cannot connect to socket, controlSocket=0
|
||||||
|
if(stopSocket){
|
||||||
|
if (connectStop() == FAIL) {
|
||||||
|
stopSocket->SetTimeOut(5);
|
||||||
|
thisDetector->onlineFlag=OFFLINE_FLAG;
|
||||||
|
delete stopSocket;
|
||||||
|
stopSocket=NULL;
|
||||||
|
retval = string(thisDetector->hostname);
|
||||||
|
#ifdef VERBOSE
|
||||||
|
std::cout<< "stop offline!" << std::endl;
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
thisDetector->onlineFlag=ONLINE_FLAG;
|
||||||
|
stopSocket->SetTimeOut(100);
|
||||||
|
disconnectStop();
|
||||||
|
#ifdef VERBOSE
|
||||||
|
std::cout<< "stop online!" << std::endl;
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3701,6 +3721,9 @@ slsDetectorDefs::detectorSettings slsDetector::setSettings( detectorSettings ise
|
|||||||
std::cout<< "slsDetector setSettings "<< std::endl;
|
std::cout<< "slsDetector setSettings "<< std::endl;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
if (isettings == -1)
|
||||||
|
return getSettings(imod);
|
||||||
|
|
||||||
//only set client shared memory variable for Eiger, settings threshold loads the module data (trimbits, dacs etc.)
|
//only set client shared memory variable for Eiger, settings threshold loads the module data (trimbits, dacs etc.)
|
||||||
if (thisDetector->myDetectorType == EIGER) {
|
if (thisDetector->myDetectorType == EIGER) {
|
||||||
switch(isettings) {
|
switch(isettings) {
|
||||||
@ -4586,7 +4609,7 @@ int slsDetector::startAndReadAllNoWait(){
|
|||||||
GATE_INTEGRATED_TIME
|
GATE_INTEGRATED_TIME
|
||||||
}
|
}
|
||||||
*/
|
*/
|
||||||
int64_t slsDetector::setTimer(timerIndex index, int64_t t){
|
int64_t slsDetector::setTimer(timerIndex index, int64_t t, int imod){
|
||||||
|
|
||||||
|
|
||||||
int fnum=F_SET_TIMER,fnum2=F_SET_RECEIVER_TIMER;
|
int fnum=F_SET_TIMER,fnum2=F_SET_RECEIVER_TIMER;
|
||||||
@ -7395,7 +7418,7 @@ int slsDetector::programFPGA(string fname){
|
|||||||
#endif
|
#endif
|
||||||
if (thisDetector->onlineFlag==ONLINE_FLAG) {
|
if (thisDetector->onlineFlag==ONLINE_FLAG) {
|
||||||
if (connectControl() == OK){
|
if (connectControl() == OK){
|
||||||
controlSocket->SendDataOnly(&fnum,sizeof(fnum));cprintf(BG_RED,"size of filesize:%lu\n",sizeof(filesize));
|
controlSocket->SendDataOnly(&fnum,sizeof(fnum));
|
||||||
controlSocket->SendDataOnly(&filesize,sizeof(filesize));
|
controlSocket->SendDataOnly(&filesize,sizeof(filesize));
|
||||||
//check opening error
|
//check opening error
|
||||||
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
controlSocket->ReceiveDataOnly(&ret,sizeof(ret));
|
||||||
|
@ -1205,9 +1205,10 @@ class slsDetector : public slsDetectorUtils, public energyConversion {
|
|||||||
set/get timer value
|
set/get timer value
|
||||||
\param index timer index
|
\param index timer index
|
||||||
\param t time in ns or number of...(e.g. frames, gates, probes)
|
\param t time in ns or number of...(e.g. frames, gates, probes)
|
||||||
|
\param imod module number (pointless in slsDetector)
|
||||||
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
int64_t setTimer(timerIndex index, int64_t t=-1);
|
int64_t setTimer(timerIndex index, int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
get current timer value
|
get current timer value
|
||||||
|
@ -369,16 +369,17 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
|
|||||||
set/get timer value
|
set/get timer value
|
||||||
\param index timer index
|
\param index timer index
|
||||||
\param t time in ns or number of...(e.g. frames, gates, probes)
|
\param t time in ns or number of...(e.g. frames, gates, probes)
|
||||||
|
\param imod module number
|
||||||
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
\returns timer set value in ns or number of...(e.g. frames, gates, probes)
|
||||||
*/
|
*/
|
||||||
virtual int64_t setTimer(timerIndex index, int64_t t=-1)=0;
|
virtual int64_t setTimer(timerIndex index, int64_t t=-1, int imod = -1) = 0;
|
||||||
int64_t setExposureTime(int64_t t=-1){return setTimer(ACQUISITION_TIME,t);};
|
int64_t setExposureTime(int64_t t=-1, int imod = -1){return setTimer(ACQUISITION_TIME,t,imod);};
|
||||||
int64_t setSubFrameExposureTime(int64_t t=-1){return setTimer(SUBFRAME_ACQUISITION_TIME,t);};
|
int64_t setSubFrameExposureTime(int64_t t=-1, int imod = -1){return setTimer(SUBFRAME_ACQUISITION_TIME,t,imod);};
|
||||||
int64_t setExposurePeriod(int64_t t=-1){return setTimer(FRAME_PERIOD,t);};
|
int64_t setExposurePeriod(int64_t t=-1, int imod = -1){return setTimer(FRAME_PERIOD,t,imod);};
|
||||||
int64_t setDelayAfterTrigger(int64_t t=-1){return setTimer(DELAY_AFTER_TRIGGER,t);};
|
int64_t setDelayAfterTrigger(int64_t t=-1, int imod = -1){return setTimer(DELAY_AFTER_TRIGGER,t,imod);};
|
||||||
int64_t setNumberOfGates(int64_t t=-1){return setTimer(GATES_NUMBER,t);};
|
int64_t setNumberOfGates(int64_t t=-1, int imod = -1){return setTimer(GATES_NUMBER,t,imod);};
|
||||||
int64_t setNumberOfFrames(int64_t t=-1){return setTimer(FRAME_NUMBER,t);};
|
int64_t setNumberOfFrames(int64_t t=-1, int imod = -1){return setTimer(FRAME_NUMBER,t,imod);};
|
||||||
int64_t setNumberOfCycles(int64_t t=-1){return setTimer(CYCLES_NUMBER,t);};
|
int64_t setNumberOfCycles(int64_t t=-1, int imod = -1){return setTimer(CYCLES_NUMBER,t,imod);};
|
||||||
|
|
||||||
|
|
||||||
/** sets/gets the value of important readout speed parameters
|
/** sets/gets the value of important readout speed parameters
|
||||||
|
@ -5464,11 +5464,8 @@ string slsDetectorCommand::cmdTimer(int narg, char *args[], int action) {
|
|||||||
else
|
else
|
||||||
return string("cannot scan timer value ")+string(args[1]);
|
return string("cannot scan timer value ")+string(args[1]);
|
||||||
if (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER) {
|
if (index==ACQUISITION_TIME || index==SUBFRAME_ACQUISITION_TIME || index==FRAME_PERIOD || index==DELAY_AFTER_TRIGGER) {
|
||||||
// t=(int64_t)(val*1E+9); for precision of eg.0.0000325, following done
|
// +0.5 for precision of eg.0.0000325
|
||||||
val*=1E9;
|
t = ( val * 1E9 + 0.5);
|
||||||
t = (int64_t)val;
|
|
||||||
if(fabs(val-t)) // to validate precision loss
|
|
||||||
t = t + val - t; //even t += vak-t loses precision
|
|
||||||
}else t=(int64_t)val;
|
}else t=(int64_t)val;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -151,43 +151,58 @@ int slsDetectorUsers::setThresholdEnergy(int e_eV){
|
|||||||
return myDetector->setThresholdEnergy(e_eV);
|
return myDetector->setThresholdEnergy(e_eV);
|
||||||
}
|
}
|
||||||
|
|
||||||
double slsDetectorUsers::setExposureTime(double t, bool inseconds){
|
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int imod){
|
||||||
int64_t tms = (int64_t)(t * (1E+9));
|
|
||||||
if (t < 0) tms = -1;
|
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setExposureTime((int64_t)t);
|
return myDetector->setExposureTime((int64_t)t,imod);
|
||||||
else
|
else {
|
||||||
return ((1E-9) * (double)myDetector->setExposureTime(tms));
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
|
if (t < 0) tms = -1;
|
||||||
|
tms = myDetector->setExposureTime(tms,imod);
|
||||||
|
if (tms < 0)
|
||||||
|
return -1;
|
||||||
|
return ((1E-9) * (double)tms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds){
|
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int imod){
|
||||||
int64_t tms = (int64_t)(t * (1E+9));
|
|
||||||
if (t < 0) tms = -1;
|
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setExposurePeriod((int64_t)t);
|
return myDetector->setExposurePeriod((int64_t)t,imod);
|
||||||
else
|
else {
|
||||||
return ((1E-9) * (double)myDetector->setExposurePeriod(tms));
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
|
if (t < 0) tms = -1;
|
||||||
|
tms = myDetector->setExposurePeriod(tms,imod);
|
||||||
|
if (tms < 0)
|
||||||
|
return -1;
|
||||||
|
return ((1E-9) * (double)tms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds){
|
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds, int imod){
|
||||||
int64_t tms = (int64_t)(t * (1E+9));
|
|
||||||
if (t < 0) tms = -1;
|
|
||||||
if(!inseconds)
|
if(!inseconds)
|
||||||
return myDetector->setDelayAfterTrigger((int64_t)t);
|
return myDetector->setDelayAfterTrigger((int64_t)t,imod);
|
||||||
else
|
else {
|
||||||
return ((1E-9) * (double)myDetector->setDelayAfterTrigger(tms));
|
// + 0.5 to round for precision lost from converting double to int64_t
|
||||||
|
int64_t tms = (int64_t)(t * (1E+9) + 0.5);
|
||||||
|
if (t < 0) tms = -1;
|
||||||
|
tms = myDetector->setDelayAfterTrigger(tms,imod);
|
||||||
|
if (tms < 0)
|
||||||
|
return -1;
|
||||||
|
return ((1E-9) * (double)tms);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t slsDetectorUsers::setNumberOfGates(int64_t t){
|
int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int imod){
|
||||||
return myDetector->setNumberOfGates(t);
|
return myDetector->setNumberOfGates(t,imod);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t slsDetectorUsers::setNumberOfFrames(int64_t t){
|
int64_t slsDetectorUsers::setNumberOfFrames(int64_t t, int imod){
|
||||||
return myDetector->setNumberOfFrames(t);
|
return myDetector->setNumberOfFrames(t,imod);
|
||||||
}
|
}
|
||||||
|
|
||||||
int64_t slsDetectorUsers::setNumberOfCycles(int64_t t){
|
int64_t slsDetectorUsers::setNumberOfCycles(int64_t t, int imod){
|
||||||
return myDetector->setNumberOfCycles(t);
|
return myDetector->setNumberOfCycles(t,imod);
|
||||||
}
|
}
|
||||||
|
|
||||||
int slsDetectorUsers::setTimingMode(int pol){
|
int slsDetectorUsers::setTimingMode(int pol){
|
||||||
|
@ -315,47 +315,53 @@ class slsDetectorUsers
|
|||||||
@short set/get exposure time value
|
@short set/get exposure time value
|
||||||
\param t time in sn (-1 gets)
|
\param t time in sn (-1 gets)
|
||||||
\param inseconds true if the value is in s, else ns
|
\param inseconds true if the value is in s, else ns
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns timer set value in ns, or s if specified
|
\returns timer set value in ns, or s if specified
|
||||||
*/
|
*/
|
||||||
|
|
||||||
double setExposureTime(double t=-1, bool inseconds=false);
|
double setExposureTime(double t=-1, bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get exposure period
|
@short set/get exposure period
|
||||||
\param t time in ns (-1 gets)
|
\param t time in ns (-1 gets)
|
||||||
\param inseconds true if the value is in s, else ns
|
\param inseconds true if the value is in s, else ns
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns timer set value in ns, or s if specified
|
\returns timer set value in ns, or s if specified
|
||||||
*/
|
*/
|
||||||
double setExposurePeriod(double t=-1, bool inseconds=false);
|
double setExposurePeriod(double t=-1, bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get delay after trigger
|
@short set/get delay after trigger
|
||||||
\param t time in ns (-1 gets)
|
\param t time in ns (-1 gets)
|
||||||
\param inseconds true if the value is in s, else ns
|
\param inseconds true if the value is in s, else ns
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns timer set value in ns, or s if specified
|
\returns timer set value in ns, or s if specified
|
||||||
*/
|
*/
|
||||||
double setDelayAfterTrigger(double t=-1, bool inseconds=false);
|
double setDelayAfterTrigger(double t=-1, bool inseconds=false, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get number of gates
|
@short set/get number of gates
|
||||||
\param t number of gates (-1 gets)
|
\param t number of gates (-1 gets)
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns number of gates
|
\returns number of gates
|
||||||
*/
|
*/
|
||||||
int64_t setNumberOfGates(int64_t t=-1);
|
int64_t setNumberOfGates(int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get number of frames i.e. number of exposure per trigger
|
@short set/get number of frames i.e. number of exposure per trigger
|
||||||
\param t number of frames (-1 gets)
|
\param t number of frames (-1 gets)
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns number of frames
|
\returns number of frames
|
||||||
*/
|
*/
|
||||||
int64_t setNumberOfFrames(int64_t t=-1);
|
int64_t setNumberOfFrames(int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@short set/get number of cycles i.e. number of triggers
|
@short set/get number of cycles i.e. number of triggers
|
||||||
\param t number of frames (-1 gets)
|
\param t number of frames (-1 gets)
|
||||||
|
\param imod module number (-1 for all)
|
||||||
\returns number of frames
|
\returns number of frames
|
||||||
*/
|
*/
|
||||||
int64_t setNumberOfCycles(int64_t t=-1);
|
int64_t setNumberOfCycles(int64_t t=-1, int imod = -1);
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -127,7 +127,7 @@ protected:
|
|||||||
func2_t <int, string,int>* m10;
|
func2_t <int, string,int>* m10;
|
||||||
func2_t <dacs_t, dacIndex,int>* m11;
|
func2_t <dacs_t, dacIndex,int>* m11;
|
||||||
func2_t <detectorSettings, detectorSettings,int>* m12;
|
func2_t <detectorSettings, detectorSettings,int>* m12;
|
||||||
func2_t <int64_t, timerIndex,int64_t>* m13;
|
func3_t <int64_t, timerIndex,int64_t,int>* m13;
|
||||||
func2_t <string, networkParameter,string>* m14;
|
func2_t <string, networkParameter,string>* m14;
|
||||||
func3_t <int, int,int,int>* m15;
|
func3_t <int, int,int,int>* m15;
|
||||||
func4_t <int, trimMode,int,int,int>* m16;
|
func4_t <int, trimMode,int,int,int>* m16;
|
||||||
@ -152,7 +152,7 @@ public:
|
|||||||
Task(func2_t <int, string,int>* t): SuperTask(),fnum(10){m10 = t;};
|
Task(func2_t <int, string,int>* t): SuperTask(),fnum(10){m10 = t;};
|
||||||
Task(func2_t <dacs_t, dacIndex,int>* t): SuperTask(),fnum(11){m11 = t;};
|
Task(func2_t <dacs_t, dacIndex,int>* t): SuperTask(),fnum(11){m11 = t;};
|
||||||
Task(func2_t <detectorSettings, detectorSettings,int>* t): SuperTask(),fnum(12){m12 = t;};
|
Task(func2_t <detectorSettings, detectorSettings,int>* t): SuperTask(),fnum(12){m12 = t;};
|
||||||
Task(func2_t <int64_t, timerIndex,int64_t>* t): SuperTask(),fnum(13){m13 = t;};
|
Task(func3_t <int64_t, timerIndex,int64_t,int>* t): SuperTask(),fnum(13){m13 = t;};
|
||||||
Task(func2_t <string, networkParameter,string>* t): SuperTask(),fnum(14){m14 = t;};
|
Task(func2_t <string, networkParameter,string>* t): SuperTask(),fnum(14){m14 = t;};
|
||||||
Task(func3_t <int, int,int,int>* t): SuperTask(),fnum(15){m15 = t;};
|
Task(func3_t <int, int,int,int>* t): SuperTask(),fnum(15){m15 = t;};
|
||||||
Task(func4_t <int, trimMode,int,int,int>* t): SuperTask(),fnum(16){m16 = t;};
|
Task(func4_t <int, trimMode,int,int,int>* t): SuperTask(),fnum(16){m16 = t;};
|
||||||
|
@ -1,9 +1,9 @@
|
|||||||
Path: slsDetectorsPackage/slsReceiverSoftware
|
Path: slsDetectorsPackage/slsReceiverSoftware
|
||||||
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
URL: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
Repository Root: origin git@github.com:slsdetectorgroup/slsDetectorPackage.git
|
||||||
Repsitory UUID: e599bfe56f512ea6a262483f61ffd8d67d6c6fcd
|
Repsitory UUID: 1b92b01a466aa1986b8198700274af75477a1e54
|
||||||
Revision: 710
|
Revision: 715
|
||||||
Branch: 3.1.3
|
Branch: 3.1.4
|
||||||
Last Changed Author: Dhanya_Thattil
|
Last Changed Author: Dhanya_Thattil
|
||||||
Last Changed Rev: 3475
|
Last Changed Rev: 3492
|
||||||
Last Changed Date: 2018-06-28 14:19:34.000000002 +0200 ./src/UDPStandardImplementation.cpp
|
Last Changed Date: 2018-08-17 16:36:25.000000002 +0200 ./src/utilities.cpp
|
||||||
|
@ -198,9 +198,10 @@ class DataProcessor : private virtual slsReceiverDefs, public ThreadObject {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* End of Acquisition
|
* End of Acquisition
|
||||||
|
* @param anyPacketsCaught true if any packets are caught, else false
|
||||||
* @param numf number of images caught
|
* @param numf number of images caught
|
||||||
*/
|
*/
|
||||||
void EndofAcquisition(uint64_t numf);
|
void EndofAcquisition(bool anyPacketsCaught, uint64_t numf);
|
||||||
|
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
@ -159,9 +159,10 @@ class File : private virtual slsReceiverDefs {
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* End of Acquisition
|
* End of Acquisition
|
||||||
|
* @param anyPacketsCaught true if any packets are caught, else false
|
||||||
* @param numf number of images caught
|
* @param numf number of images caught
|
||||||
*/
|
*/
|
||||||
virtual void EndofAcquisition(uint64_t numf) {
|
virtual void EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
|
||||||
cprintf(RED,"This is a generic function EndofAcquisition that should be overloaded by a derived class\n");
|
cprintf(RED,"This is a generic function EndofAcquisition that should be overloaded by a derived class\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -111,9 +111,10 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* End of Acquisition
|
* End of Acquisition
|
||||||
|
* @param anyPacketsCaught true if any packets are caught, else false
|
||||||
* @param numf number of images caught
|
* @param numf number of images caught
|
||||||
*/
|
*/
|
||||||
void EndofAcquisition(uint64_t numf);
|
void EndofAcquisition(bool anyPacketsCaught, uint64_t numf);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create Virtual File
|
* Create Virtual File
|
||||||
@ -180,5 +181,8 @@ class HDF5File : private virtual slsReceiverDefs, public File, public HDF5FileSt
|
|||||||
/** Dataset array for parameters */
|
/** Dataset array for parameters */
|
||||||
DataSet* dataset_para[HDF5FileStatic::NumberofParameters];
|
DataSet* dataset_para[HDF5FileStatic::NumberofParameters];
|
||||||
|
|
||||||
|
/** Number of Images (including extended during acquisition) */
|
||||||
|
uint64_t extNumImages;
|
||||||
|
|
||||||
};
|
};
|
||||||
#endif
|
#endif
|
||||||
|
@ -112,7 +112,7 @@ public:
|
|||||||
}
|
}
|
||||||
} catch(Exception error) {
|
} catch(Exception error) {
|
||||||
cprintf(RED,"Error in closing HDF5 handles of index %d\n", ind);
|
cprintf(RED,"Error in closing HDF5 handles of index %d\n", ind);
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -130,7 +130,7 @@ public:
|
|||||||
}
|
}
|
||||||
} catch(Exception error) {
|
} catch(Exception error) {
|
||||||
cprintf(RED,"Error in closing master HDF5 handles\n");
|
cprintf(RED,"Error in closing master HDF5 handles\n");
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -177,7 +177,7 @@ public:
|
|||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in writing to file in object %d\n",ind);
|
cprintf(RED,"Error in writing to file in object %d\n",ind);
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -187,6 +187,12 @@ public:
|
|||||||
|
|
||||||
/**
|
/**
|
||||||
* Write Parameter Arrays as datasets (to virtual file)
|
* Write Parameter Arrays as datasets (to virtual file)
|
||||||
|
* @param ind self index
|
||||||
|
* @param dpace_para parameter dataspace
|
||||||
|
* @param fnum frame number current
|
||||||
|
* @param dset_para parameter dataset
|
||||||
|
* @param header image header
|
||||||
|
* @returns 0 for success and 1 for fail
|
||||||
*/
|
*/
|
||||||
static int WriteParameterDatasets(int ind, DataSpace* dspace_para, uint64_t fnum,
|
static int WriteParameterDatasets(int ind, DataSpace* dspace_para, uint64_t fnum,
|
||||||
DataSet* dset_para[],sls_detector_header* header)
|
DataSet* dset_para[],sls_detector_header* header)
|
||||||
@ -213,12 +219,50 @@ public:
|
|||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in writing parameters to file in object %d\n",ind);
|
cprintf(RED,"Error in writing parameters to file in object %d\n",ind);
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Extend datasets in #images dimension (x dimension)
|
||||||
|
* @param ind self index
|
||||||
|
* @param dpace data space pointer address
|
||||||
|
* @param dset data set pointer
|
||||||
|
* @param dspace_para parameter dataspace address pointer
|
||||||
|
* @param dset dataset parameter pointer
|
||||||
|
* @param initialNumImages initial number of images
|
||||||
|
* @returns 0 for success and 1 for fail
|
||||||
|
*/
|
||||||
|
static int ExtendDataset(int ind, DataSpace*& dspace, DataSet* dset,
|
||||||
|
DataSpace*& dspace_para, DataSet* dset_para[],
|
||||||
|
uint64_t initialNumImages) {
|
||||||
|
try{
|
||||||
|
Exception::dontPrint(); //to handle errors
|
||||||
|
|
||||||
|
hsize_t dims[3];
|
||||||
|
dspace->getSimpleExtentDims(dims);
|
||||||
|
dims[0] += initialNumImages;
|
||||||
|
|
||||||
|
dset->extend(dims);
|
||||||
|
delete dspace;
|
||||||
|
dspace = new DataSpace(dset->getSpace());
|
||||||
|
|
||||||
|
hsize_t dims_para[1] = {dims[0]};
|
||||||
|
for (int i = 0; i < NumberofParameters; ++i)
|
||||||
|
dset_para[i]->extend(dims_para);
|
||||||
|
delete dspace_para;
|
||||||
|
dspace_para = new DataSpace(dset_para[0]->getSpace());
|
||||||
|
|
||||||
|
}
|
||||||
|
catch(Exception error){
|
||||||
|
cprintf(RED,"Error in extending dataset in object %d\n",ind);
|
||||||
|
error.printErrorStack();
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Create master file
|
* Create master file
|
||||||
@ -246,9 +290,9 @@ public:
|
|||||||
FileAccPropList flist;
|
FileAccPropList flist;
|
||||||
flist.setFcloseDegree(H5F_CLOSE_STRONG);
|
flist.setFcloseDegree(H5F_CLOSE_STRONG);
|
||||||
if(!owenable)
|
if(!owenable)
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_EXCL, NULL, flist );
|
fd = new H5File( fname.c_str(), H5F_ACC_EXCL, FileCreatPropList::DEFAULT, flist );
|
||||||
else
|
else
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, NULL, flist );
|
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, flist );
|
||||||
|
|
||||||
//variables
|
//variables
|
||||||
DataSpace dataspace = DataSpace (H5S_SCALAR);
|
DataSpace dataspace = DataSpace (H5S_SCALAR);
|
||||||
@ -328,7 +372,7 @@ public:
|
|||||||
|
|
||||||
} catch(Exception error) {
|
} catch(Exception error) {
|
||||||
cprintf(RED,"Error in creating master HDF5 handles\n");
|
cprintf(RED,"Error in creating master HDF5 handles\n");
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
@ -374,9 +418,9 @@ public:
|
|||||||
FileAccPropList fapl;
|
FileAccPropList fapl;
|
||||||
fapl.setFcloseDegree(H5F_CLOSE_STRONG);
|
fapl.setFcloseDegree(H5F_CLOSE_STRONG);
|
||||||
if(!owenable)
|
if(!owenable)
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_EXCL, NULL,fapl );
|
fd = new H5File( fname.c_str(), H5F_ACC_EXCL, FileCreatPropList::DEFAULT,fapl );
|
||||||
else
|
else
|
||||||
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, NULL, fapl );
|
fd = new H5File( fname.c_str(), H5F_ACC_TRUNC, FileCreatPropList::DEFAULT, fapl );
|
||||||
|
|
||||||
//attributes - version
|
//attributes - version
|
||||||
double dValue=version;
|
double dValue=version;
|
||||||
@ -386,7 +430,8 @@ public:
|
|||||||
|
|
||||||
//dataspace
|
//dataspace
|
||||||
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
||||||
dspace = new DataSpace (3,srcdims);
|
hsize_t srcdimsmax[3] = {H5S_UNLIMITED, nDimy, nDimz};
|
||||||
|
dspace = new DataSpace (3,srcdims,srcdimsmax);
|
||||||
|
|
||||||
//dataset name
|
//dataset name
|
||||||
ostringstream osfn;
|
ostringstream osfn;
|
||||||
@ -396,23 +441,28 @@ public:
|
|||||||
|
|
||||||
//dataset
|
//dataset
|
||||||
//chunked dataset if greater than max_chunked_images
|
//chunked dataset if greater than max_chunked_images
|
||||||
if(nDimx > maxchunkedimages){
|
// always create chunked dataset as unlimited is only supported with chunked layout
|
||||||
DSetCreatPropList plist;
|
DSetCreatPropList plist;
|
||||||
hsize_t chunk_dims[3] ={maxchunkedimages, nDimy, nDimz};
|
hsize_t chunk_dims[3] ={maxchunkedimages, nDimy, nDimz};
|
||||||
plist.setChunk(3, chunk_dims);
|
plist.setChunk(3, chunk_dims);
|
||||||
dset = new DataSet (fd->createDataSet(dsetname.c_str(), dtype, *dspace, plist));
|
dset = new DataSet (fd->createDataSet(dsetname.c_str(), dtype, *dspace, plist));
|
||||||
}else
|
|
||||||
dset = new DataSet (fd->createDataSet(dsetname.c_str(), dtype, *dspace));
|
|
||||||
|
|
||||||
//create parameter datasets
|
//create parameter datasets
|
||||||
hsize_t dims[1] = {nDimx};
|
hsize_t dims[1] = {nDimx};
|
||||||
dspace_para = new DataSpace (1,dims);
|
hsize_t dimsmax[1] = {H5S_UNLIMITED};
|
||||||
|
dspace_para = new DataSpace (1,dims,dimsmax);
|
||||||
|
|
||||||
|
// always create chunked dataset as unlimited is only supported with chunked layout
|
||||||
|
DSetCreatPropList paralist;
|
||||||
|
hsize_t chunkpara_dims[3] ={maxchunkedimages};
|
||||||
|
paralist.setChunk(1, chunkpara_dims);
|
||||||
|
|
||||||
for (int i = 0; i < NumberofParameters; ++i)
|
for (int i = 0; i < NumberofParameters; ++i)
|
||||||
dset_para[i] = new DataSet(fd->createDataSet(ParameterNames[i], ParameterDataTypes[i], *dspace_para));
|
dset_para[i] = new DataSet(fd->createDataSet(ParameterNames[i], ParameterDataTypes[i], *dspace_para, paralist));
|
||||||
}
|
}
|
||||||
catch(Exception error){
|
catch(Exception error){
|
||||||
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
cprintf(RED,"Error in creating HDF5 handles in object %d\n",ind);
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
fd->close();
|
fd->close();
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
@ -488,7 +538,7 @@ public:
|
|||||||
hid_t vdsDataspace = H5Screate_simple(3, vdsdims ,NULL);
|
hid_t vdsDataspace = H5Screate_simple(3, vdsdims ,NULL);
|
||||||
if (vdsDataspace < 0)
|
if (vdsDataspace < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating virtual dataspace in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating virtual dataspace in virtual file ") + virtualFileName + string("\n"));
|
||||||
hsize_t vdsdims_para[2] = {numf, numDety * numDetz};
|
hsize_t vdsdims_para[2] = {numf, (unsigned int)numDety * numDetz};
|
||||||
hid_t vdsDataspace_para = H5Screate_simple(2, vdsdims_para, NULL);
|
hid_t vdsDataspace_para = H5Screate_simple(2, vdsdims_para, NULL);
|
||||||
if (vdsDataspace_para < 0)
|
if (vdsDataspace_para < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating virtual dataspace (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating virtual dataspace (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
@ -541,6 +591,14 @@ public:
|
|||||||
string srcFileName = HDF5FileStatic::CreateFileName(fpath, fnameprefix, findex,
|
string srcFileName = HDF5FileStatic::CreateFileName(fpath, fnameprefix, findex,
|
||||||
frindexenable, framesSaved, dindex, numunits, i);
|
frindexenable, framesSaved, dindex, numunits, i);
|
||||||
|
|
||||||
|
// find relative path
|
||||||
|
string relative_srcFileName = srcFileName;
|
||||||
|
{
|
||||||
|
size_t i = srcFileName.rfind('/', srcFileName.length());
|
||||||
|
if (i != string::npos)
|
||||||
|
relative_srcFileName = (srcFileName.substr(i+1, srcFileName.length() - i));
|
||||||
|
}
|
||||||
|
|
||||||
//source dataset name
|
//source dataset name
|
||||||
ostringstream osfn;
|
ostringstream osfn;
|
||||||
osfn << "/data";
|
osfn << "/data";
|
||||||
@ -549,23 +607,25 @@ public:
|
|||||||
|
|
||||||
//source dataspace
|
//source dataspace
|
||||||
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
hsize_t srcdims[3] = {nDimx, nDimy, nDimz};
|
||||||
hid_t srcDataspace = H5Screate_simple(3, srcdims, NULL);
|
hsize_t srcdimsmax[3] = {H5S_UNLIMITED, nDimy, nDimz};
|
||||||
|
hid_t srcDataspace = H5Screate_simple(3, srcdims, srcdimsmax);
|
||||||
if (srcDataspace < 0)
|
if (srcDataspace < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating source dataspace in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating source dataspace in virtual file ") + virtualFileName + string("\n"));
|
||||||
hsize_t srcdims_para[1] = {nDimx};
|
hsize_t srcdims_para[1] = {nDimx};
|
||||||
hid_t srcDataspace_para = H5Screate_simple(1, srcdims_para, NULL);
|
hsize_t srcdimsmax_para[1] = {H5S_UNLIMITED};
|
||||||
|
hid_t srcDataspace_para = H5Screate_simple(1, srcdims_para, srcdimsmax_para);
|
||||||
if (srcDataspace_para < 0)
|
if (srcDataspace_para < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating source dataspace (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating source dataspace (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
|
|
||||||
//mapping
|
//mapping
|
||||||
if (H5Pset_virtual(dcpl, vdsDataspace, srcFileName.c_str(), srcDatasetName.c_str(), srcDataspace) < 0) {
|
if (H5Pset_virtual(dcpl, vdsDataspace, relative_srcFileName.c_str(), srcDatasetName.c_str(), srcDataspace) < 0) {
|
||||||
cprintf(RED,"could not set mapping for paramter 1\n");
|
cprintf(RED,"could not set mapping for paramter 1\n");
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (int k = 0; k < NumberofParameters; ++k) {
|
for (int k = 0; k < NumberofParameters; ++k) {
|
||||||
if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, srcFileName.c_str(), ParameterNames[k], srcDataspace_para) < 0) {
|
if (H5Pset_virtual(dcpl_para[k], vdsDataspace_para, relative_srcFileName.c_str(), ParameterNames[k], srcDataspace_para) < 0) {
|
||||||
cprintf(RED,"could not set mapping for paramter %d\n", k);
|
cprintf(RED,"could not set mapping for paramter %d\n", k);
|
||||||
error = true;
|
error = true;
|
||||||
break;
|
break;
|
||||||
@ -587,7 +647,7 @@ public:
|
|||||||
return CloseFileOnError(fd, string("Error in mapping files in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in mapping files in virtual file ") + virtualFileName + string("\n"));
|
||||||
|
|
||||||
//dataset
|
//dataset
|
||||||
string virtualDatasetName = string("/virtual_") + srcDataseName;
|
string virtualDatasetName = /*string("/virtual_") + */srcDataseName;
|
||||||
hid_t vdsdataset = H5Dcreate2 (fd, virtualDatasetName.c_str(), GetDataTypeinC(dataType), vdsDataspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
|
hid_t vdsdataset = H5Dcreate2 (fd, virtualDatasetName.c_str(), GetDataTypeinC(dataType), vdsDataspace, H5P_DEFAULT, dcpl, H5P_DEFAULT);
|
||||||
if (vdsdataset < 0)
|
if (vdsdataset < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating virutal dataset in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating virutal dataset in virtual file ") + virtualFileName + string("\n"));
|
||||||
@ -596,7 +656,7 @@ public:
|
|||||||
//virtual parameter dataset
|
//virtual parameter dataset
|
||||||
for (int i = 0; i < NumberofParameters; ++i) {
|
for (int i = 0; i < NumberofParameters; ++i) {
|
||||||
hid_t vdsdataset_para = H5Dcreate2 (fd,
|
hid_t vdsdataset_para = H5Dcreate2 (fd,
|
||||||
(string("/virtual_") + string (ParameterNames[i])).c_str(),
|
(/*string("/virtual_") + */string (ParameterNames[i])).c_str(),
|
||||||
GetDataTypeinC(ParameterDataTypes[i]), vdsDataspace_para, H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT);
|
GetDataTypeinC(ParameterDataTypes[i]), vdsDataspace_para, H5P_DEFAULT, dcpl_para[i], H5P_DEFAULT);
|
||||||
if (vdsdataset_para < 0)
|
if (vdsdataset_para < 0)
|
||||||
return CloseFileOnError(fd, string("Error in creating virutal dataset (parameters) in virtual file ") + virtualFileName + string("\n"));
|
return CloseFileOnError(fd, string("Error in creating virutal dataset (parameters) in virtual file ") + virtualFileName + string("\n"));
|
||||||
@ -697,7 +757,7 @@ public:
|
|||||||
oldfd->close();
|
oldfd->close();
|
||||||
} catch(Exception error){
|
} catch(Exception error){
|
||||||
cprintf(RED,"Error in copying virtual files\n");
|
cprintf(RED,"Error in copying virtual files\n");
|
||||||
error.printError();
|
error.printErrorStack();
|
||||||
free(data_out);
|
free(data_out);
|
||||||
oldfd->close();
|
oldfd->close();
|
||||||
newfd->close();
|
newfd->close();
|
||||||
@ -739,6 +799,14 @@ public:
|
|||||||
return CloseFileOnError( vfd, string("Error in opening virtual file\n"));
|
return CloseFileOnError( vfd, string("Error in opening virtual file\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// find relative path
|
||||||
|
string relative_virtualfname = virtualfname;
|
||||||
|
{
|
||||||
|
size_t i = virtualfname.rfind('/', virtualfname.length());
|
||||||
|
if (i != string::npos)
|
||||||
|
relative_virtualfname = (virtualfname.substr(i+1, virtualfname.length() - i));
|
||||||
|
}
|
||||||
|
|
||||||
//**data dataset**
|
//**data dataset**
|
||||||
hid_t vdset = H5Dopen2( vfd, virtualDatasetname.c_str(), H5P_DEFAULT);
|
hid_t vdset = H5Dopen2( vfd, virtualDatasetname.c_str(), H5P_DEFAULT);
|
||||||
if (vdset < 0) {
|
if (vdset < 0) {
|
||||||
@ -746,7 +814,7 @@ public:
|
|||||||
return CloseFileOnError( vfd, string("Error in opening virtual data dataset\n"));
|
return CloseFileOnError( vfd, string("Error in opening virtual data dataset\n"));
|
||||||
}
|
}
|
||||||
sprintf(linkname, "/entry/data/%s",virtualDatasetname.c_str());
|
sprintf(linkname, "/entry/data/%s",virtualDatasetname.c_str());
|
||||||
if(H5Lcreate_external( virtualfname.c_str(), virtualDatasetname.c_str(),
|
if(H5Lcreate_external( relative_virtualfname.c_str(), virtualDatasetname.c_str(),
|
||||||
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
||||||
H5Fclose(mfd); mfd = 0;
|
H5Fclose(mfd); mfd = 0;
|
||||||
return CloseFileOnError( vfd, string("Error in creating link to data dataset\n"));
|
return CloseFileOnError( vfd, string("Error in creating link to data dataset\n"));
|
||||||
@ -755,13 +823,13 @@ public:
|
|||||||
|
|
||||||
//**paramter datasets**
|
//**paramter datasets**
|
||||||
for (int i = 0; i < NumberofParameters; ++i){
|
for (int i = 0; i < NumberofParameters; ++i){
|
||||||
hid_t vdset_para = H5Dopen2( vfd, (string("/virtual_") + string (ParameterNames[i])).c_str(), H5P_DEFAULT);
|
hid_t vdset_para = H5Dopen2( vfd, (/*string("/virtual_") + */string (ParameterNames[i])).c_str(), H5P_DEFAULT);
|
||||||
if (vdset_para < 0) {
|
if (vdset_para < 0) {
|
||||||
H5Fclose(mfd); mfd = 0;
|
H5Fclose(mfd); mfd = 0;
|
||||||
return CloseFileOnError( vfd, string("Error in opening virtual parameter dataset to create link\n"));
|
return CloseFileOnError( vfd, string("Error in opening virtual parameter dataset to create link\n"));
|
||||||
}
|
}
|
||||||
sprintf(linkname, "/entry/data/%s",(string("/virtual_") + string (ParameterNames[i])).c_str());
|
sprintf(linkname, "/entry/data/%s",(/*string("/virtual_") + */string (ParameterNames[i])).c_str());
|
||||||
if(H5Lcreate_external( virtualfname.c_str(), (string("/virtual_") + string (ParameterNames[i])).c_str(),
|
if(H5Lcreate_external( relative_virtualfname.c_str(), (/*string("/virtual_") + */string (ParameterNames[i])).c_str(),
|
||||||
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
mfd, linkname, H5P_DEFAULT, H5P_DEFAULT) < 0) {
|
||||||
H5Fclose(mfd); mfd = 0;
|
H5Fclose(mfd); mfd = 0;
|
||||||
return CloseFileOnError( vfd, string("Error in creating link to virtual parameter dataset\n"));
|
return CloseFileOnError( vfd, string("Error in creating link to virtual parameter dataset\n"));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
#define GITURL "git@github.com:slsdetectorgroup/slsDetectorPackage.git"
|
||||||
#define GITREPUUID "e599bfe56f512ea6a262483f61ffd8d67d6c6fcd"
|
#define GITREPUUID "1b92b01a466aa1986b8198700274af75477a1e54"
|
||||||
#define GITAUTH "Dhanya_Thattil"
|
#define GITAUTH "Dhanya_Thattil"
|
||||||
#define GITREV 0x3475
|
#define GITREV 0x3492
|
||||||
#define GITDATE 0x20180628
|
#define GITDATE 0x20180817
|
||||||
#define GITBRANCH "3.1.3"
|
#define GITBRANCH "3.1.4"
|
||||||
|
@ -282,9 +282,9 @@ void DataProcessor::CloseFiles() {
|
|||||||
file->CloseAllFiles();
|
file->CloseAllFiles();
|
||||||
}
|
}
|
||||||
|
|
||||||
void DataProcessor::EndofAcquisition(uint64_t numf) {
|
void DataProcessor::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
|
||||||
if (file && file->GetFileType() == HDF5) {
|
if (file && file->GetFileType() == HDF5) {
|
||||||
file->EndofAcquisition(numf);
|
file->EndofAcquisition(anyPacketsCaught, numf);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -38,7 +38,8 @@ HDF5File::HDF5File(int ind, uint32_t maxf, const uint32_t* ppf,
|
|||||||
numFramesInFile(0),
|
numFramesInFile(0),
|
||||||
numActualPacketsInFile(0),
|
numActualPacketsInFile(0),
|
||||||
numFilesinAcquisition(0),
|
numFilesinAcquisition(0),
|
||||||
dataspace_para(0)
|
dataspace_para(0),
|
||||||
|
extNumImages(0)
|
||||||
{
|
{
|
||||||
#ifdef VERBOSE
|
#ifdef VERBOSE
|
||||||
PrintMembers();
|
PrintMembers();
|
||||||
@ -97,7 +98,7 @@ int HDF5File::CreateFile(uint64_t fnum) {
|
|||||||
//first time
|
//first time
|
||||||
if(!fnum) UpdateDataType();
|
if(!fnum) UpdateDataType();
|
||||||
|
|
||||||
uint64_t framestosave = ((*numImages - fnum) > maxFramesPerFile) ? maxFramesPerFile : (*numImages-fnum);
|
uint64_t framestosave = ((extNumImages - fnum) > maxFramesPerFile) ? maxFramesPerFile : (extNumImages-fnum);
|
||||||
pthread_mutex_lock(&Mutex);
|
pthread_mutex_lock(&Mutex);
|
||||||
if (HDF5FileStatic::CreateDataFile(index, *overWriteEnable, currentFileName, *frameIndexEnable,
|
if (HDF5FileStatic::CreateDataFile(index, *overWriteEnable, currentFileName, *frameIndexEnable,
|
||||||
fnum, framestosave, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
fnum, framestosave, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
||||||
@ -111,9 +112,9 @@ int HDF5File::CreateFile(uint64_t fnum) {
|
|||||||
if (dataspace == NULL)
|
if (dataspace == NULL)
|
||||||
cprintf(RED,"Got nothing!\n");
|
cprintf(RED,"Got nothing!\n");
|
||||||
|
|
||||||
if(!silentMode)
|
if(!silentMode) {
|
||||||
FILE_LOG(logINFO) << *udpPortNumber << ": HDF5 File created: " << currentFileName;
|
FILE_LOG(logINFO) << *udpPortNumber << ": HDF5 File created: " << currentFileName;
|
||||||
|
}
|
||||||
return OK;
|
return OK;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -145,6 +146,19 @@ int HDF5File::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t
|
|||||||
numFramesInFile++;
|
numFramesInFile++;
|
||||||
numActualPacketsInFile += nump;
|
numActualPacketsInFile += nump;
|
||||||
pthread_mutex_lock(&Mutex);
|
pthread_mutex_lock(&Mutex);
|
||||||
|
|
||||||
|
// extend dataset (when receiver start followed by many status starts (jungfrau)))
|
||||||
|
if (fnum >= extNumImages) {
|
||||||
|
if (HDF5FileStatic::ExtendDataset(index, dataspace, dataset,
|
||||||
|
dataspace_para, dataset_para, *numImages) == OK) {
|
||||||
|
if (!silentMode) {
|
||||||
|
cprintf(BLUE,"%d Extending HDF5 dataset by %lu, Total x Dimension: %lu\n",
|
||||||
|
index, extNumImages, extNumImages + *numImages);
|
||||||
|
}
|
||||||
|
extNumImages += *numImages;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if (HDF5FileStatic::WriteDataFile(index, buffer + sizeof(sls_detector_header),
|
if (HDF5FileStatic::WriteDataFile(index, buffer + sizeof(sls_detector_header),
|
||||||
fnum%maxFramesPerFile, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
fnum%maxFramesPerFile, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
||||||
dataspace, dataset, datatype) == OK) {
|
dataspace, dataset, datatype) == OK) {
|
||||||
@ -163,18 +177,23 @@ int HDF5File::WriteToFile(char* buffer, int buffersize, uint64_t fnum, uint32_t
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
int HDF5File::CreateMasterFile(bool en, uint32_t size,
|
int HDF5File::CreateMasterFile(bool en, uint32_t size,
|
||||||
uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap) {
|
uint32_t nx, uint32_t ny, uint64_t at, uint64_t st, uint64_t ap) {
|
||||||
|
|
||||||
//beginning of every acquisition
|
//beginning of every acquisition
|
||||||
numFramesInFile = 0;
|
numFramesInFile = 0;
|
||||||
numActualPacketsInFile = 0;
|
numActualPacketsInFile = 0;
|
||||||
|
extNumImages = *numImages;
|
||||||
|
|
||||||
if (master && (*detIndex==0)) {
|
if (master && (*detIndex==0)) {
|
||||||
virtualfd = 0;
|
virtualfd = 0;
|
||||||
masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex);
|
masterFileName = HDF5FileStatic::CreateMasterFileName(filePath, fileNamePrefix, *fileIndex);
|
||||||
if(!silentMode)
|
if(!silentMode){
|
||||||
FILE_LOG(logINFO) << "Master File: " << masterFileName;
|
FILE_LOG(logINFO) << "Master File: " << masterFileName;
|
||||||
|
}
|
||||||
pthread_mutex_lock(&Mutex);
|
pthread_mutex_lock(&Mutex);
|
||||||
int ret = HDF5FileStatic::CreateMasterDataFile(masterfd, masterFileName, *overWriteEnable,
|
int ret = HDF5FileStatic::CreateMasterDataFile(masterfd, masterFileName, *overWriteEnable,
|
||||||
*dynamicRange, en, size, nx, ny, *numImages, at, st, ap, HDF5_WRITER_VERSION);
|
*dynamicRange, en, size, nx, ny, *numImages, at, st, ap, HDF5_WRITER_VERSION);
|
||||||
@ -185,11 +204,11 @@ int HDF5File::CreateMasterFile(bool en, uint32_t size,
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void HDF5File::EndofAcquisition(uint64_t numf) {
|
void HDF5File::EndofAcquisition(bool anyPacketsCaught, uint64_t numf) {
|
||||||
//not created before
|
//not created before
|
||||||
if (!virtualfd) {
|
if (!virtualfd && anyPacketsCaught) {
|
||||||
|
|
||||||
//only one file and one sub image
|
//only one file and one sub image (link current file in master)
|
||||||
if (((numFilesinAcquisition == 1) && (numDetY*numDetX) == 1)) {
|
if (((numFilesinAcquisition == 1) && (numDetY*numDetX) == 1)) {
|
||||||
//dataset name
|
//dataset name
|
||||||
ostringstream osfn;
|
ostringstream osfn;
|
||||||
@ -217,7 +236,7 @@ int HDF5File::CreateVirtualFile(uint64_t numf) {
|
|||||||
virtualfd, masterFileName,
|
virtualfd, masterFileName,
|
||||||
filePath, fileNamePrefix, *fileIndex, *frameIndexEnable,
|
filePath, fileNamePrefix, *fileIndex, *frameIndexEnable,
|
||||||
*detIndex, *numUnitsPerDetector,
|
*detIndex, *numUnitsPerDetector,
|
||||||
maxFramesPerFile, numf,
|
maxFramesPerFile, numf+1,
|
||||||
"data", datatype,
|
"data", datatype,
|
||||||
numDetY, numDetX, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
numDetY, numDetX, nPixelsY, ((*dynamicRange==4) ? (nPixelsX/2) : nPixelsX),
|
||||||
HDF5_WRITER_VERSION);
|
HDF5_WRITER_VERSION);
|
||||||
|
@ -290,7 +290,7 @@ void UDPBaseImplementation::setFilePath(const char c[]){
|
|||||||
else
|
else
|
||||||
FILE_LOG(logERROR) << "FilePath does not exist: " << filePath;
|
FILE_LOG(logERROR) << "FilePath does not exist: " << filePath;
|
||||||
}
|
}
|
||||||
FILE_LOG(logINFO) << "Info: File path: " << filePath;
|
FILE_LOG(logINFO) << "File path: " << filePath;
|
||||||
}
|
}
|
||||||
|
|
||||||
void UDPBaseImplementation::setFileIndex(const uint64_t i){
|
void UDPBaseImplementation::setFileIndex(const uint64_t i){
|
||||||
|
@ -462,8 +462,9 @@ void UDPStandardImplementation::stopReceiver(){
|
|||||||
if((*it)->GetMeasurementStartedFlag())
|
if((*it)->GetMeasurementStartedFlag())
|
||||||
anycaught = true;
|
anycaught = true;
|
||||||
}
|
}
|
||||||
if (anycaught)
|
|
||||||
dataProcessor[0]->EndofAcquisition(maxIndexCaught); //to create virtual file
|
//to create virtual file & set files/acquisition to 0 (only hdf5 at the moment)
|
||||||
|
dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught);
|
||||||
}
|
}
|
||||||
|
|
||||||
while(DataStreamer::GetRunningMask()){
|
while(DataStreamer::GetRunningMask()){
|
||||||
@ -480,7 +481,7 @@ void UDPStandardImplementation::stopReceiver(){
|
|||||||
tot += dataProcessor[i]->GetNumFramesCaught();
|
tot += dataProcessor[i]->GetNumFramesCaught();
|
||||||
|
|
||||||
uint64_t missingpackets = numberOfFrames*generalData->packetsPerFrame-listener[i]->GetPacketsCaught();
|
uint64_t missingpackets = numberOfFrames*generalData->packetsPerFrame-listener[i]->GetPacketsCaught();
|
||||||
if (missingpackets) {
|
if ((int)missingpackets > 0) {
|
||||||
cprintf(RED, "\n[Port %d]\n",udpPortNum[i]);
|
cprintf(RED, "\n[Port %d]\n",udpPortNum[i]);
|
||||||
cprintf(RED, "Missing Packets\t\t: %lld\n",(long long int)missingpackets);
|
cprintf(RED, "Missing Packets\t\t: %lld\n",(long long int)missingpackets);
|
||||||
cprintf(RED, "Complete Frames\t\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
cprintf(RED, "Complete Frames\t\t: %lld\n",(long long int)dataProcessor[i]->GetNumFramesCaught());
|
||||||
@ -562,12 +563,15 @@ void UDPStandardImplementation::shutDownUDPSockets() {
|
|||||||
|
|
||||||
void UDPStandardImplementation::closeFiles() {
|
void UDPStandardImplementation::closeFiles() {
|
||||||
uint64_t maxIndexCaught = 0;
|
uint64_t maxIndexCaught = 0;
|
||||||
|
bool anycaught = false;
|
||||||
for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) {
|
for (vector<DataProcessor*>::const_iterator it = dataProcessor.begin(); it != dataProcessor.end(); ++it) {
|
||||||
(*it)->CloseFiles();
|
(*it)->CloseFiles();
|
||||||
maxIndexCaught = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex());
|
maxIndexCaught = max(maxIndexCaught, (*it)->GetProcessedMeasurementIndex());
|
||||||
|
if((*it)->GetMeasurementStartedFlag())
|
||||||
|
anycaught = true;
|
||||||
}
|
}
|
||||||
if (maxIndexCaught)
|
//to create virtual file & set files/acquisition to 0 (only hdf5 at the moment)
|
||||||
dataProcessor[0]->EndofAcquisition(maxIndexCaught);
|
dataProcessor[0]->EndofAcquisition(anycaught, maxIndexCaught);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user