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 */ /** - 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 */

View File

@ -2567,8 +2567,22 @@ int multiSlsDetector::configureMAC() {
return callDetectorMember(&slsDetector::configureMAC); return callDetectorMember(&slsDetector::configureMAC);
} }
int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t) { int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int imod) {
int64_t ret = parallelCallDetectorMember(&slsDetector::setTimer, index, t); 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) if (index == SAMPLES_JCTB)
setDynamicRange(); setDynamicRange();

View File

@ -1033,9 +1033,10 @@ public:
* Set/get timer value (not all implemented for all detectors) * Set/get timer value (not all implemented for all detectors)
* @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 left in acquisition (not all implemented for all detectors) * 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; 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) * Set/get timer value (not all implemented for all detectors)
* @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);
/** /**
* Set/get timer value left in acquisition (not all implemented for all detectors) * 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 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 setSubFramePeriod(int64_t t=-1){return setTimer(SUBFRAME_PERIOD,t);}; int64_t setSubFramePeriod(int64_t t=-1, int imod = -1){return setTimer(SUBFRAME_PERIOD,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

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); return myDetector->slsDetectorBase::setThresholdEnergy(e_ev, tb, isettings, id);
} }
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(!inseconds)
if (t < 0) tms = -1; return myDetector->setExposureTime((int64_t)t,imod);
if(!inseconds) else {
return myDetector->setExposureTime((int64_t)t); // + 0.5 to round for precision lost from converting double to int64_t
else int64_t tms = (int64_t)(t * (1E+9) + 0.5);
return ((1E-9) * (double)myDetector->setExposureTime(tms)); 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(!inseconds)
if (t < 0) tms = -1; return myDetector->setExposurePeriod((int64_t)t,imod);
if(!inseconds) else {
return myDetector->setExposurePeriod((int64_t)t); // + 0.5 to round for precision lost from converting double to int64_t
else int64_t tms = (int64_t)(t * (1E+9) + 0.5);
return ((1E-9) * (double)myDetector->setExposurePeriod(tms)); 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(!inseconds)
if (t < 0) tms = -1; return myDetector->setDelayAfterTrigger((int64_t)t,imod);
if(!inseconds) else {
return myDetector->setDelayAfterTrigger((int64_t)t); // + 0.5 to round for precision lost from converting double to int64_t
else int64_t tms = (int64_t)(t * (1E+9) + 0.5);
return ((1E-9) * (double)myDetector->setDelayAfterTrigger(tms)); 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){

View File

@ -325,47 +325,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);
/** /**

View File

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