slsDetectorSoftware: from 3.1.4: being able to get timer values individually from the users class since gotthard 25um master and slave will have different delay values

This commit is contained in:
maliakal_d 2018-07-30 17:47:37 +02:00
parent 73fcef5f6d
commit 41fb6c26a2
9 changed files with 87 additions and 53 deletions

View File

@ -71,10 +71,6 @@ int main(int argc, char **argv) {
/** - registering data callback */
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 */

View File

@ -2567,8 +2567,22 @@ int multiSlsDetector::configureMAC() {
return callDetectorMember(&slsDetector::configureMAC);
}
int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t) {
int64_t ret = parallelCallDetectorMember(&slsDetector::setTimer, index, t);
int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int imod) {
int64_t ret=-100;
// single (for gotthard 25 um)
if (imod != -1) {
if (imod >= 0 && imod < (int)detectors.size()) {
ret = detectors[imod]->setTimer(index,t,imod);
if(detectors[imod]->getErrorMask())
setErrorMask(getErrorMask()|(1<<imod));
return ret;
}
return -1;
}
// multi
ret = parallelCallDetectorMember(&slsDetector::setTimer, index, t);
if (index == SAMPLES_JCTB)
setDynamicRange();

View File

@ -1033,9 +1033,10 @@ public:
* Set/get timer value (not all implemented for all detectors)
* @param index timer index
* @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)
*/
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 left in acquisition (not all implemented for all detectors)

View File

@ -4117,7 +4117,7 @@ int slsDetector::configureMAC() {
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;

View File

@ -1140,9 +1140,10 @@ public:
* Set/get timer value (not all implemented for all detectors)
* @param index timer index
* @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)
*/
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 left in acquisition (not all implemented for all detectors)

View File

@ -367,17 +367,18 @@ class slsDetectorBase : public virtual slsDetectorDefs, public virtual errorDef
set/get timer value
\param index timer index
\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)
*/
virtual int64_t setTimer(timerIndex index, int64_t t=-1)=0;
int64_t setExposureTime(int64_t t=-1){return setTimer(ACQUISITION_TIME,t);};
int64_t setSubFrameExposureTime(int64_t t=-1){return setTimer(SUBFRAME_ACQUISITION_TIME,t);};
int64_t setSubFramePeriod(int64_t t=-1){return setTimer(SUBFRAME_PERIOD,t);};
int64_t setExposurePeriod(int64_t t=-1){return setTimer(FRAME_PERIOD,t);};
int64_t setDelayAfterTrigger(int64_t t=-1){return setTimer(DELAY_AFTER_TRIGGER,t);};
int64_t setNumberOfGates(int64_t t=-1){return setTimer(GATES_NUMBER,t);};
int64_t setNumberOfFrames(int64_t t=-1){return setTimer(FRAME_NUMBER,t);};
int64_t setNumberOfCycles(int64_t t=-1){return setTimer(CYCLES_NUMBER,t);};
virtual int64_t setTimer(timerIndex index, int64_t t=-1, int imod = -1)=0;
int64_t setExposureTime(int64_t t=-1, int imod = -1){return setTimer(ACQUISITION_TIME,t,imod);};
int64_t setSubFrameExposureTime(int64_t t=-1, int imod = -1){return setTimer(SUBFRAME_ACQUISITION_TIME,t,imod);};
int64_t setSubFramePeriod(int64_t t=-1, int imod = -1){return setTimer(SUBFRAME_PERIOD,t,imod);};
int64_t setExposurePeriod(int64_t t=-1, int imod = -1){return setTimer(FRAME_PERIOD,t,imod);};
int64_t setDelayAfterTrigger(int64_t t=-1, int imod = -1){return setTimer(DELAY_AFTER_TRIGGER,t,imod);};
int64_t setNumberOfGates(int64_t t=-1, int imod = -1){return setTimer(GATES_NUMBER,t,imod);};
int64_t setNumberOfFrames(int64_t t=-1, int imod = -1){return setTimer(FRAME_NUMBER,t,imod);};
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

View File

@ -157,43 +157,58 @@ int slsDetectorUsers::setThresholdEnergy(int e_ev, int tb, int isettings, int id
return myDetector->slsDetectorBase::setThresholdEnergy(e_ev, tb, isettings, id);
}
double slsDetectorUsers::setExposureTime(double t, bool inseconds){
int64_t tms = (int64_t)(t * (1E+9));
if (t < 0) tms = -1;
double slsDetectorUsers::setExposureTime(double t, bool inseconds, int imod){
if(!inseconds)
return myDetector->setExposureTime((int64_t)t);
else
return ((1E-9) * (double)myDetector->setExposureTime(tms));
}
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds){
int64_t tms = (int64_t)(t * (1E+9));
return myDetector->setExposureTime((int64_t)t,imod);
else {
// + 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;
if(!inseconds)
return myDetector->setExposurePeriod((int64_t)t);
else
return ((1E-9) * (double)myDetector->setExposurePeriod(tms));
tms = myDetector->setExposureTime(tms,imod);
if (tms < 0)
return -1;
return ((1E-9) * (double)tms);
}
}
double slsDetectorUsers::setDelayAfterTrigger(double t, bool inseconds){
int64_t tms = (int64_t)(t * (1E+9));
double slsDetectorUsers::setExposurePeriod(double t, bool inseconds, int imod){
if(!inseconds)
return myDetector->setExposurePeriod((int64_t)t,imod);
else {
// + 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, int imod){
if(!inseconds)
return myDetector->setDelayAfterTrigger((int64_t)t);
else
return ((1E-9) * (double)myDetector->setDelayAfterTrigger(tms));
return myDetector->setDelayAfterTrigger((int64_t)t,imod);
else {
// + 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){
return myDetector->setNumberOfGates(t);
int64_t slsDetectorUsers::setNumberOfGates(int64_t t, int imod){
return myDetector->setNumberOfGates(t,imod);
}
int64_t slsDetectorUsers::setNumberOfFrames(int64_t t){
return myDetector->setNumberOfFrames(t);
int64_t slsDetectorUsers::setNumberOfFrames(int64_t t, int imod){
return myDetector->setNumberOfFrames(t,imod);
}
int64_t slsDetectorUsers::setNumberOfCycles(int64_t t){
return myDetector->setNumberOfCycles(t);
int64_t slsDetectorUsers::setNumberOfCycles(int64_t t, int imod){
return myDetector->setNumberOfCycles(t,imod);
}
int slsDetectorUsers::setTimingMode(int pol){

View File

@ -325,47 +325,53 @@ class slsDetectorUsers
@short set/get exposure time value
\param t time in sn (-1 gets)
\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
*/
double setExposureTime(double t=-1, bool inseconds=false);
double setExposureTime(double t=-1, bool inseconds=false, int imod = -1);
/**
@short set/get exposure period
\param t time in ns (-1 gets)
\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
*/
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
\param t time in ns (-1 gets)
\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
*/
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
\param t number of gates (-1 gets)
\param imod module number (-1 for all)
\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
\param t number of frames (-1 gets)
\param imod module number (-1 for all)
\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
\param t number of frames (-1 gets)
\param imod module number (-1 for all)
\returns number of frames
*/
int64_t setNumberOfCycles(int64_t t=-1);
int64_t setNumberOfCycles(int64_t t=-1, int imod = -1);
/**

View File

@ -123,7 +123,7 @@ protected:
func2_t <int, std::string,int>* m10;
func2_t <dacs_t, dacIndex,int>* m11;
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 <std::string, networkParameter,std::string>* m14;
func3_t <int, int,int,int>* m15;
func4_t <int, trimMode,int,int,int>* m16;
@ -149,7 +149,7 @@ public:
Task(func2_t <int, std::string,int>* t): SuperTask(),fnum(10){m10 = 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 <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 <std::string, networkParameter,std::string>* t): SuperTask(),fnum(14){m14 = 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;};