multi progress calculated in one function rather getting all of them from shm

This commit is contained in:
2020-02-26 11:17:49 +01:00
parent fe3a7b0faf
commit 80304c2eaf
3 changed files with 20 additions and 52 deletions

View File

@ -877,24 +877,12 @@ void DetectorImpl::registerDataCallback(void (*userCallback)(detectorData *,
} }
double DetectorImpl::setTotalProgress() { double DetectorImpl::setTotalProgress() {
int64_t nf = Parallel(&slsDetector::getNumberOfFramesFromShm, {}) int64_t tot = Parallel(&slsDetector::getTotalNumFramesToReceive, {})
.tsquash("Inconsistent number of frames"); .tsquash("Inconsistent number of total frames (#frames x #triggers(or bursts) x #storage cells)");
int64_t nc = Parallel(&slsDetector::getNumberOfTriggersFromShm, {}) if (tot == 0) {
.tsquash("Inconsistent number of triggers"); throw RuntimeError("Invalid Total Number of frames (0)");
if (nf == 0 || nc == 0) {
throw RuntimeError("Number of frames or triggers is 0");
} }
totalProgress = tot;
int ns = 1;
if (multi_shm()->multiDetectorType == JUNGFRAU) {
ns =
Parallel(&slsDetector::getNumberOfAdditionalStorageCellsFromShm, {})
.tsquash("Inconsistent number of additional storage cells");
++ns;
}
totalProgress = nf * nc * ns;
FILE_LOG(logDEBUG1) << "nf " << nf << " nc " << nc << " ns " << ns;
FILE_LOG(logDEBUG1) << "Set total progress " << totalProgress << std::endl; FILE_LOG(logDEBUG1) << "Set total progress " << totalProgress << std::endl;
return totalProgress; return totalProgress;
} }

View File

@ -1219,25 +1219,25 @@ uint64_t slsDetector::getStartingFrameNumber() {
return retval; return retval;
} }
int64_t slsDetector::getTotalNumFramesToReceive() {
int64_t repeats = shm()->nTriggers;
// gotthard2 & auto & burst mode, use nBursts instead of nTriggers
if (shm()->myDetectorType == GOTTHARD2) {
if (shm()->burstMode != BURST_OFF && shm()->timingMode == AUTO_TIMING) {
repeats = shm()->nBursts;
}
}
return (shm()->nFrames * repeats * (int64_t)(shm()->nAddStorageCells + 1));
}
void slsDetector::sendTotalNumFramestoReceiver() { void slsDetector::sendTotalNumFramestoReceiver() {
if (shm()->useReceiverFlag) { if (shm()->useReceiverFlag) {
int64_t repeats = shm()->nTriggers; int64_t arg = getTotalNumFramesToReceive();
// gotthard2 & auto & burst mode, use nBursts instead of nTriggers
if (shm()->myDetectorType == GOTTHARD2) {
if (shm()->burstMode != BURST_OFF && shm()->timingMode == AUTO_TIMING) {
repeats = shm()->nBursts;
}
}
int64_t arg = shm()->nFrames * repeats * (shm()->nAddStorageCells + 1);
FILE_LOG(logDEBUG1) << "Sending total number of frames (#f x #t x #s) to Receiver: " << arg; FILE_LOG(logDEBUG1) << "Sending total number of frames (#f x #t x #s) to Receiver: " << arg;
sendToReceiver(F_RECEIVER_SET_NUM_FRAMES, arg, nullptr); sendToReceiver(F_RECEIVER_SET_NUM_FRAMES, arg, nullptr);
} }
} }
int64_t slsDetector::getNumberOfFramesFromShm() {
return shm()->nFrames;
}
int64_t slsDetector::getNumberOfFrames() { int64_t slsDetector::getNumberOfFrames() {
int64_t prevVal = shm()->nFrames; int64_t prevVal = shm()->nFrames;
int64_t retval = -1; int64_t retval = -1;
@ -1257,10 +1257,6 @@ void slsDetector::setNumberOfFrames(int64_t value) {
sendTotalNumFramestoReceiver(); sendTotalNumFramestoReceiver();
} }
int64_t slsDetector::getNumberOfTriggersFromShm() {
return shm()->nTriggers;
}
int64_t slsDetector::getNumberOfTriggers() { int64_t slsDetector::getNumberOfTriggers() {
int64_t prevVal = shm()->nTriggers; int64_t prevVal = shm()->nTriggers;
int64_t retval = -1; int64_t retval = -1;
@ -1280,10 +1276,6 @@ void slsDetector::setNumberOfTriggers(int64_t value) {
sendTotalNumFramestoReceiver(); sendTotalNumFramestoReceiver();
} }
int64_t slsDetector::getNumberOfBurstsFromShm() {
return shm()->nBursts;
}
int64_t slsDetector::getNumberOfBursts() { int64_t slsDetector::getNumberOfBursts() {
int64_t prevVal = shm()->nBursts; int64_t prevVal = shm()->nBursts;
int64_t retval = -1; int64_t retval = -1;
@ -1303,10 +1295,6 @@ void slsDetector::setNumberOfBursts(int64_t value) {
sendTotalNumFramestoReceiver(); sendTotalNumFramestoReceiver();
} }
int slsDetector::getNumberOfAdditionalStorageCellsFromShm() {
return shm()->nAddStorageCells;
}
int slsDetector::getNumberOfAdditionalStorageCells() { int slsDetector::getNumberOfAdditionalStorageCells() {
int prevVal = shm()->nAddStorageCells; int prevVal = shm()->nAddStorageCells;
int retval = -1; int retval = -1;

View File

@ -530,32 +530,24 @@ class slsDetector : public virtual slsDetectorDefs {
*/ */
uint64_t getStartingFrameNumber(); uint64_t getStartingFrameNumber();
void sendTotalNumFramestoReceiver(); int64_t getTotalNumFramesToReceive();
int64_t getNumberOfFramesFromShm(); void sendTotalNumFramestoReceiver();
int64_t getNumberOfFrames(); int64_t getNumberOfFrames();
void setNumberOfFrames(int64_t value); void setNumberOfFrames(int64_t value);
int64_t getNumberOfTriggersFromShm();
int64_t getNumberOfTriggers(); int64_t getNumberOfTriggers();
void setNumberOfTriggers(int64_t value); void setNumberOfTriggers(int64_t value);
/** [Gotthard2] only in burst mode and in auto timing mode */
int64_t getNumberOfBurstsFromShm();
/** [Gotthard2] only in burst mode and in auto timing mode */ /** [Gotthard2] only in burst mode and in auto timing mode */
int64_t getNumberOfBursts(); int64_t getNumberOfBursts();
/** [Gotthard2] only in burst mode and in auto timing mode */ /** [Gotthard2] only in burst mode and in auto timing mode */
void setNumberOfBursts(int64_t value); void setNumberOfBursts(int64_t value);
/** [Jungfrau] Advanced */
int getNumberOfAdditionalStorageCellsFromShm();
/** [Jungfrau] Advanced */ /** [Jungfrau] Advanced */
int getNumberOfAdditionalStorageCells(); int getNumberOfAdditionalStorageCells();