Merge pull request #355 from slsdetectorgroup/rxframeindex

Rxframeindex
This commit is contained in:
Dhanya Thattil 2022-01-31 10:44:45 +01:00 committed by GitHub
commit 3eafcd69a7
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 55 additions and 22 deletions

View File

@ -841,7 +841,7 @@ int ClientInterface::get_file_index(Interface &socket) {
} }
int ClientInterface::get_frame_index(Interface &socket) { int ClientInterface::get_frame_index(Interface &socket) {
uint64_t retval = impl()->getAcquisitionIndex(); uint64_t retval = impl()->getCurrentFrameIndex();
LOG(logDEBUG1) << "frame index:" << retval; LOG(logDEBUG1) << "frame index:" << retval;
return socket.sendResult(retval); return socket.sendResult(retval);
} }

View File

@ -443,32 +443,31 @@ uint64_t Implementation::getFramesCaught() const {
return min; return min;
} }
uint64_t Implementation::getAcquisitionIndex() const { uint64_t Implementation::getCurrentFrameIndex() const {
uint64_t min = -1; uint64_t max = 0;
uint32_t flagsum = 0; uint32_t flagsum = 0;
for (const auto &it : dataProcessor) { for (const auto &it : listener) {
flagsum += it->GetStartedFlag(); flagsum += it->GetStartedFlag();
min = std::min(min, it->GetCurrentFrameIndex()); max = std::max(max, it->GetCurrentFrameIndex());
} }
// no data processed // no data processed
if (flagsum != dataProcessor.size()) if (flagsum != listener.size())
return 0; return 0;
return min; return max;
} }
double Implementation::getProgress() const { double Implementation::getProgress() const {
// get minimum of processed frame indices // get minimum of processed frame indices
uint64_t currentFrameIndex = -1; uint64_t currentFrameIndex = 0;
uint32_t flagsum = 0; uint32_t flagsum = 0;
for (const auto &it : dataProcessor) { for (const auto &it : listener) {
flagsum += it->GetStartedFlag(); flagsum += it->GetStartedFlag();
currentFrameIndex = currentFrameIndex = std::max(currentFrameIndex, it->GetListenedIndex());
std::min(currentFrameIndex, it->GetProcessedIndex());
} }
// no data processed // no data processed
if (flagsum != dataProcessor.size()) { if (flagsum != listener.size()) {
currentFrameIndex = -1; currentFrameIndex = -1;
} }

View File

@ -81,7 +81,7 @@ class Implementation : private virtual slsDetectorDefs {
* ************************************************/ * ************************************************/
runStatus getStatus() const; runStatus getStatus() const;
uint64_t getFramesCaught() const; uint64_t getFramesCaught() const;
uint64_t getAcquisitionIndex() const; uint64_t getCurrentFrameIndex() const;
double getProgress() const; double getProgress() const;
std::vector<int64_t> getNumMissingPackets() const; std::vector<int64_t> getNumMissingPackets() const;
void setScan(slsDetectorDefs::scanParameters s); void setScan(slsDetectorDefs::scanParameters s);

View File

@ -53,6 +53,12 @@ int64_t Listener::GetNumMissingPacket(bool stoppedFlag,
numPacketsCaught; numPacketsCaught;
} }
bool Listener::GetStartedFlag() { return startedFlag; }
uint64_t Listener::GetCurrentFrameIndex() { return currentFrameIndex; }
uint64_t Listener::GetListenedIndex() { return currentFrameIndex - firstIndex; }
void Listener::SetFifo(Fifo *f) { fifo = f; } void Listener::SetFifo(Fifo *f) { fifo = f; }
void Listener::ResetParametersforNewAcquisition() { void Listener::ResetParametersforNewAcquisition() {
@ -232,16 +238,11 @@ void Listener::ThreadExecution() {
// discarding image // discarding image
else if (rc < 0) { else if (rc < 0) {
LOG(logDEBUG) << index << " discarding fnum:" << currentFrameIndex;
fifo->FreeAddress(buffer); fifo->FreeAddress(buffer);
currentFrameIndex++;
return; return;
} }
(*((uint32_t *)buffer)) = rc; (*((uint32_t *)buffer)) = rc;
(*((uint64_t *)(buffer + FIFO_HEADER_NUMBYTES))) =
currentFrameIndex; // for those returning earlier
currentFrameIndex++;
// push into fifo // push into fifo
fifo->PushAddress(buffer); fifo->PushAddress(buffer);
@ -334,10 +335,17 @@ uint32_t Listener::ListenToAnImage(char *buf) {
} }
switch (*frameDiscardMode) { switch (*frameDiscardMode) {
case DISCARD_EMPTY_FRAMES: case DISCARD_EMPTY_FRAMES:
if (!numpackets) if (!numpackets) {
LOG(logDEBUG)
<< index << " Skipped fnum:" << currentFrameIndex;
currentFrameIndex = fnum;
return -1; return -1;
}
break; break;
case DISCARD_PARTIAL_FRAMES: case DISCARD_PARTIAL_FRAMES:
LOG(logDEBUG)
<< index << " discarding fnum:" << currentFrameIndex;
currentFrameIndex = fnum;
return -1; return -1;
default: default:
break; break;
@ -347,6 +355,8 @@ uint32_t Listener::ListenToAnImage(char *buf) {
new_header->detHeader.row = row; new_header->detHeader.row = row;
new_header->detHeader.column = column; new_header->detHeader.column = column;
} }
new_header->detHeader.frameNumber = currentFrameIndex;
++currentFrameIndex;
return imageSize; return imageSize;
} }
@ -423,10 +433,16 @@ uint32_t Listener::ListenToAnImage(char *buf) {
switch (*frameDiscardMode) { switch (*frameDiscardMode) {
case DISCARD_EMPTY_FRAMES: case DISCARD_EMPTY_FRAMES:
if (!numpackets) if (!numpackets) {
return -1; return -1;
}
break; break;
case DISCARD_PARTIAL_FRAMES: case DISCARD_PARTIAL_FRAMES:
// empty packet now, but not empty image (EOA)
if (numpackets) {
LOG(logDEBUG)
<< index << " discarding fnum:" << currentFrameIndex;
}
return -1; return -1;
default: default:
break; break;
@ -437,7 +453,8 @@ uint32_t Listener::ListenToAnImage(char *buf) {
new_header->detHeader.row = row; new_header->detHeader.row = row;
new_header->detHeader.column = column; new_header->detHeader.column = column;
} }
return imageSize; // empty packet now, but not empty image new_header->detHeader.frameNumber = currentFrameIndex;
return imageSize; // empty packet now, but not empty image (EOA)
} }
// update parameters // update parameters
@ -502,10 +519,17 @@ uint32_t Listener::ListenToAnImage(char *buf) {
switch (*frameDiscardMode) { switch (*frameDiscardMode) {
case DISCARD_EMPTY_FRAMES: case DISCARD_EMPTY_FRAMES:
if (!numpackets) if (!numpackets) {
LOG(logDEBUG)
<< index << " Skipped fnum:" << currentFrameIndex;
currentFrameIndex = fnum;
return -1; return -1;
}
break; break;
case DISCARD_PARTIAL_FRAMES: case DISCARD_PARTIAL_FRAMES:
LOG(logDEBUG)
<< index << " discarding fnum:" << currentFrameIndex;
currentFrameIndex = fnum;
return -1; return -1;
default: default:
break; break;
@ -516,6 +540,8 @@ uint32_t Listener::ListenToAnImage(char *buf) {
new_header->detHeader.row = row; new_header->detHeader.row = row;
new_header->detHeader.column = column; new_header->detHeader.column = column;
} }
new_header->detHeader.frameNumber = currentFrameIndex;
++currentFrameIndex;
return imageSize; return imageSize;
} }
@ -577,6 +603,8 @@ uint32_t Listener::ListenToAnImage(char *buf) {
// complete image // complete image
new_header->detHeader.packetNumber = numpackets; // number of packets caught new_header->detHeader.packetNumber = numpackets; // number of packets caught
new_header->detHeader.frameNumber = currentFrameIndex;
++currentFrameIndex;
return imageSize; return imageSize;
} }

View File

@ -67,6 +67,12 @@ class Listener : private virtual slsDetectorDefs, public ThreadObject {
* packet */ * packet */
int64_t GetNumMissingPacket(bool stoppedFlag, uint64_t numPackets) const; int64_t GetNumMissingPacket(bool stoppedFlag, uint64_t numPackets) const;
bool GetStartedFlag();
uint64_t GetCurrentFrameIndex();
/** (-1 if no frames have been caught) */
uint64_t GetListenedIndex();
/** /**
* Set Fifo pointer to the one given * Set Fifo pointer to the one given
* @param f address of Fifo pointer * @param f address of Fifo pointer