diff --git a/slsDetectorSoftware/src/multiSlsDetector.cpp b/slsDetectorSoftware/src/multiSlsDetector.cpp index 4d4d33cd4..218c66163 100755 --- a/slsDetectorSoftware/src/multiSlsDetector.cpp +++ b/slsDetectorSoftware/src/multiSlsDetector.cpp @@ -10,7 +10,6 @@ #include "sls_detector_exceptions.h" #include "versionAPI.h" - #include "container_utils.h" #include "network_utils.h" #include "string_utils.h" @@ -24,8 +23,6 @@ #include #include - - #include #include #include @@ -48,8 +45,9 @@ void multiSlsDetector::setupMultiDetector(bool verify, bool update) { } template -std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), - typename NonDeduced::type... Args) { +std::vector +multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), + typename NonDeduced::type... Args) { std::vector result; result.reserve(detectors.size()); for (auto &d : detectors) { @@ -59,8 +57,9 @@ std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...), } template -std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...) const, - typename NonDeduced::type... Args) const { +std::vector +multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...) const, + typename NonDeduced::type... Args) const { std::vector result; result.reserve(detectors.size()); for (auto &d : detectors) { @@ -70,11 +69,13 @@ std::vector multiSlsDetector::serialCall(RT (slsDetector::*somefunc)(CT...) } template -std::vector multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), - typename NonDeduced::type... Args) { +std::vector +multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...), + typename NonDeduced::type... Args) { std::vector> futures; for (auto &d : detectors) { - futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...)); + futures.push_back( + std::async(std::launch::async, somefunc, d.get(), Args...)); } std::vector result; result.reserve(detectors.size()); @@ -85,11 +86,13 @@ std::vector multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT... } template -std::vector multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...) const, - typename NonDeduced::type... Args) const { +std::vector +multiSlsDetector::parallelCall(RT (slsDetector::*somefunc)(CT...) const, + typename NonDeduced::type... Args) const { std::vector> futures; for (auto &d : detectors) { - futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...)); + futures.push_back( + std::async(std::launch::async, somefunc, d.get(), Args...)); } std::vector result; result.reserve(detectors.size()); @@ -104,7 +107,8 @@ void multiSlsDetector::parallelCall(void (slsDetector::*somefunc)(CT...), typename NonDeduced::type... Args) { std::vector> futures; for (auto &d : detectors) { - futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...)); + futures.push_back( + std::async(std::launch::async, somefunc, d.get(), Args...)); } for (auto &i : futures) { i.get(); @@ -113,11 +117,13 @@ void multiSlsDetector::parallelCall(void (slsDetector::*somefunc)(CT...), } template -void multiSlsDetector::parallelCall(void (slsDetector::*somefunc)(CT...) const, - typename NonDeduced::type... Args) const{ +void multiSlsDetector::parallelCall( + void (slsDetector::*somefunc)(CT...) const, + typename NonDeduced::type... Args) const { std::vector> futures; for (auto &d : detectors) { - futures.push_back(std::async(std::launch::async, somefunc, d.get(), Args...)); + futures.push_back( + std::async(std::launch::async, somefunc, d.get(), Args...)); } for (auto &i : futures) { i.get(); @@ -125,8 +131,8 @@ void multiSlsDetector::parallelCall(void (slsDetector::*somefunc)(CT...) const, return; } - -int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX, int &channelY) { +int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX, + int &channelY) { channelX = -1; channelY = -1; // loop over @@ -135,14 +141,17 @@ int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX, in int y = detectors[i]->getDetectorOffset(Y); // check x offset range if ((offsetX >= x) && - (offsetX < (x + detectors[i]->getTotalNumberOfChannelsInclGapPixels(X)))) { + (offsetX < + (x + detectors[i]->getTotalNumberOfChannelsInclGapPixels(X)))) { if (offsetY == -1) { channelX = offsetX - x; return i; } else { // check y offset range if ((offsetY >= y) && - (offsetY < (y + detectors[i]->getTotalNumberOfChannelsInclGapPixels(Y)))) { + (offsetY < + (y + detectors[i]->getTotalNumberOfChannelsInclGapPixels( + Y)))) { channelX = offsetX - x; channelY = offsetY - y; return i; @@ -153,16 +162,20 @@ int multiSlsDetector::decodeNChannel(int offsetX, int offsetY, int &channelX, in return -1; } +void multiSlsDetector::setAcquiringFlag(bool flag) { + multi_shm()->acquiringFlag = flag; +} -void multiSlsDetector::setAcquiringFlag(bool flag) { multi_shm()->acquiringFlag = flag; } - -bool multiSlsDetector::getAcquiringFlag() const { return multi_shm()->acquiringFlag; } +bool multiSlsDetector::getAcquiringFlag() const { + return multi_shm()->acquiringFlag; +} bool multiSlsDetector::isAcquireReady() { if (multi_shm()->acquiringFlag) { - FILE_LOG(logWARNING) << "Acquire has already started. " - "If previous acquisition terminated unexpectedly, " - "reset busy flag to restart.(sls_detector_put busy 0)"; + FILE_LOG(logWARNING) + << "Acquire has already started. " + "If previous acquisition terminated unexpectedly, " + "reset busy flag to restart.(sls_detector_put busy 0)"; return FAIL != 0u; } multi_shm()->acquiringFlag = true; @@ -196,11 +209,9 @@ int64_t multiSlsDetector::getId(idMode mode, int detPos) { return sls::minusOneIfDifferent(r); } -int64_t multiSlsDetector::getClientSoftwareVersion() const { - return APILIB; -} +int64_t multiSlsDetector::getClientSoftwareVersion() const { return APILIB; } -int64_t multiSlsDetector::getReceiverSoftwareVersion(int detPos){ +int64_t multiSlsDetector::getReceiverSoftwareVersion(int detPos) { if (detPos >= 0) { return detectors[detPos]->getReceiverSoftwareVersion(); } @@ -210,7 +221,8 @@ int64_t multiSlsDetector::getReceiverSoftwareVersion(int detPos){ } std::vector multiSlsDetector::getDetectorNumber() { - return parallelCall(&slsDetector::getId, slsDetectorDefs::DETECTOR_SERIAL_NUMBER); + return parallelCall(&slsDetector::getId, + slsDetectorDefs::DETECTOR_SERIAL_NUMBER); } void multiSlsDetector::freeSharedMemory(int multiId, int detPos) { @@ -270,7 +282,8 @@ std::string multiSlsDetector::getUserDetails() { sstream << d->getDetectorTypeAsString() << "+"; } - sstream << "\nPID: " << multi_shm()->lastPID << "\nUser: " << multi_shm()->lastUser + sstream << "\nPID: " << multi_shm()->lastPID + << "\nUser: " << multi_shm()->lastUser << "\nDate: " << multi_shm()->lastDate << std::endl; return sstream.str(); @@ -287,7 +300,7 @@ void multiSlsDetector::initSharedMemory(bool verify) { << ") version mismatch " "(expected 0x" << std::hex << MULTI_SHMVERSION << " but got 0x" - << multi_shm()->shmversion << std::dec + << multi_shm()->shmversion << std::dec << ". Clear Shared memory to continue."; throw SharedMemoryError("Shared memory version mismatch!"); } @@ -326,7 +339,8 @@ void multiSlsDetector::initializeMembers(bool verify) { // get objects from single det shared memory (open) for (int i = 0; i < multi_shm()->numberOfDetectors; i++) { try { - detectors.push_back(sls::make_unique(multiId, i, verify)); + detectors.push_back( + sls::make_unique(multiId, i, verify)); } catch (...) { detectors.clear(); throw; @@ -383,8 +397,9 @@ void multiSlsDetector::setHostname(const char *name, int detPos) { // multi // this check is there only to allow the previous detsizechan command if (multi_shm()->numberOfDetectors != 0) { - FILE_LOG(logWARNING) << "There are already detector(s) in shared memory." - "Freeing Shared memory now."; + FILE_LOG(logWARNING) + << "There are already detector(s) in shared memory." + "Freeing Shared memory now."; freeSharedMemory(); setupMultiDetector(); } @@ -416,36 +431,42 @@ void multiSlsDetector::addSlsDetector(const std::string &hostname) { for (auto &d : detectors) { if (d->getHostname() == hostname) { - FILE_LOG(logWARNING) << "Detector " << hostname << "already part of the multiDetector!" - << std::endl - << "Remove it before adding it back in a new position!"; + FILE_LOG(logWARNING) + << "Detector " << hostname + << "already part of the multiDetector!" << std::endl + << "Remove it before adding it back in a new position!"; return; } } // get type by connecting - detectorType type = slsDetector::getTypeFromDetector(hostname, DEFAULT_PORTNO); + detectorType type = + slsDetector::getTypeFromDetector(hostname, DEFAULT_PORTNO); int pos = (int)detectors.size(); - detectors.push_back(sls::make_unique(type, multiId, pos, false)); + detectors.push_back( + sls::make_unique(type, multiId, pos, false)); multi_shm()->numberOfDetectors = detectors.size(); multi_shm()->dataBytes += detectors[pos]->getDataBytes(); - multi_shm()->dataBytesInclGapPixels += detectors[pos]->getDataBytesInclGapPixels(); + multi_shm()->dataBytesInclGapPixels += + detectors[pos]->getDataBytesInclGapPixels(); multi_shm()->numberOfChannels += detectors[pos]->getTotalNumberOfChannels(); detectors[pos]->setHostname(hostname); detectors[pos]->setOnline(1); } -void multiSlsDetector::addSlsDetector(std::unique_ptr det){ +void multiSlsDetector::addSlsDetector(std::unique_ptr det) { detectors.push_back(std::move(det)); multi_shm()->numberOfDetectors = detectors.size(); multi_shm()->dataBytes += detectors.back()->getDataBytes(); multi_shm()->dataBytesInclGapPixels += detectors.back()->getDataBytesInclGapPixels(); - multi_shm()->numberOfChannels += detectors.back()->getTotalNumberOfChannels(); + multi_shm()->numberOfChannels += + detectors.back()->getTotalNumberOfChannels(); } -slsDetectorDefs::detectorType multiSlsDetector::getDetectorTypeAsEnum(int detPos) { +slsDetectorDefs::detectorType +multiSlsDetector::getDetectorTypeAsEnum(int detPos) { // single if (detPos >= 0) { return detectors[detPos]->getDetectorTypeAsEnum(); @@ -498,7 +519,8 @@ int multiSlsDetector::getTotalNumberOfChannels(dimension d, int detPos) { return multi_shm()->numberOfChannel[d]; } -int multiSlsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d, int detPos) { +int multiSlsDetector::getTotalNumberOfChannelsInclGapPixels(dimension d, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->getTotalNumberOfChannelsInclGapPixels(d); @@ -519,18 +541,20 @@ int multiSlsDetector::setMaxNumberOfChannelsPerDetector(dimension d, int i) { int multiSlsDetector::getQuad(int detPos) { int retval = detectors[0]->getQuad(); - if (retval && getNumberOfDetectors() > 1) { - throw RuntimeError("Quad type is available only for 1 Eiger Quad Half module, but it Quad is enabled for 1st readout"); + if (retval && getNumberOfDetectors() > 1) { + throw RuntimeError("Quad type is available only for 1 Eiger Quad Half " + "module, but it Quad is enabled for 1st readout"); } - return retval; + return retval; } void multiSlsDetector::setQuad(const bool enable, int detPos) { - if (enable && getNumberOfDetectors() > 1) { - throw RuntimeError("Cannot set Quad type as it is available only for 1 Eiger Quad Half module."); + if (enable && getNumberOfDetectors() > 1) { + throw RuntimeError("Cannot set Quad type as it is available only for 1 " + "Eiger Quad Half module."); } - detectors[0]->setQuad(enable); + detectors[0]->setQuad(enable); } int multiSlsDetector::getDetectorOffset(dimension d, int detPos) { @@ -563,35 +587,44 @@ void multiSlsDetector::updateOffsets() { multi_shm()->numberOfChannelInclGapPixels[Y] = 0; for (size_t idet = 0; idet < detectors.size(); ++idet) { - FILE_LOG(logDEBUG1) << "offsetX:" << offsetX << " prevChanX:" << prevChanX - << " offsetY:" << offsetY << " prevChanY:" << prevChanY - << " offsetX_gp:" << offsetX_gp << " prevChanX_gp:" << prevChanX_gp - << " offsetY_gp:" << offsetY_gp << " prevChanY_gp:" << prevChanY_gp; + FILE_LOG(logDEBUG1) + << "offsetX:" << offsetX << " prevChanX:" << prevChanX + << " offsetY:" << offsetY << " prevChanY:" << prevChanY + << " offsetX_gp:" << offsetX_gp << " prevChanX_gp:" << prevChanX_gp + << " offsetY_gp:" << offsetY_gp << " prevChanY_gp:" << prevChanY_gp; // incrementing in both direction if (firstTime) { // incrementing in both directions firstTime = false; if ((maxChanX > 0) && - ((offsetX + detectors[idet]->getTotalNumberOfChannels(X)) > maxChanX)) { - FILE_LOG(logWARNING) << "\nDetector[" << idet - << "] exceeds maximum channels " - "allowed for complete detector set in X dimension!"; + ((offsetX + detectors[idet]->getTotalNumberOfChannels(X)) > + maxChanX)) { + FILE_LOG(logWARNING) + << "\nDetector[" << idet + << "] exceeds maximum channels " + "allowed for complete detector set in X dimension!"; } if ((maxChanY > 0) && - ((offsetY + detectors[idet]->getTotalNumberOfChannels(Y)) > maxChanY)) { - FILE_LOG(logERROR) << "\nDetector[" << idet - << "] exceeds maximum channels " - "allowed for complete detector set in Y dimension!"; + ((offsetY + detectors[idet]->getTotalNumberOfChannels(Y)) > + maxChanY)) { + FILE_LOG(logERROR) + << "\nDetector[" << idet + << "] exceeds maximum channels " + "allowed for complete detector set in Y dimension!"; } prevChanX = detectors[idet]->getTotalNumberOfChannels(X); prevChanY = detectors[idet]->getTotalNumberOfChannels(Y); - prevChanX_gp = detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); - prevChanY_gp = detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); + prevChanX_gp = + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); + prevChanY_gp = + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); numX += detectors[idet]->getTotalNumberOfChannels(X); numY += detectors[idet]->getTotalNumberOfChannels(Y); - numX_gp += detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); - numY_gp += detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); + numX_gp += + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); + numY_gp += + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); ++multi_shm()->numberOfDetector[X]; ++multi_shm()->numberOfDetector[Y]; FILE_LOG(logDEBUG1) << "incrementing in both direction"; @@ -600,14 +633,18 @@ void multiSlsDetector::updateOffsets() { // incrementing in y direction else if ((maxChanY == -1) || ((maxChanY > 0) && ((offsetY + prevChanY + - detectors[idet]->getTotalNumberOfChannels(Y)) <= maxChanY))) { + detectors[idet]->getTotalNumberOfChannels( + Y)) <= maxChanY))) { offsetY += prevChanY; offsetY_gp += prevChanY_gp; prevChanY = detectors[idet]->getTotalNumberOfChannels(Y); - prevChanY_gp = detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); + prevChanY_gp = + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); numY += detectors[idet]->getTotalNumberOfChannels(Y); - numY_gp += detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); - // increment in y again only in the first column (else you double increment) + numY_gp += + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); + // increment in y again only in the first column (else you double + // increment) if (multi_shm()->numberOfDetector[X] == 1) ++multi_shm()->numberOfDetector[Y]; FILE_LOG(logDEBUG1) << "incrementing in y direction"; @@ -616,33 +653,41 @@ void multiSlsDetector::updateOffsets() { // incrementing in x direction else { if ((maxChanX > 0) && - ((offsetX + prevChanX + detectors[idet]->getTotalNumberOfChannels(X)) > maxChanX)) { - FILE_LOG(logDEBUG1) << "\nDetector[" << idet - << "] exceeds maximum channels " - "allowed for complete detector set in X dimension!"; + ((offsetX + prevChanX + + detectors[idet]->getTotalNumberOfChannels(X)) > maxChanX)) { + FILE_LOG(logDEBUG1) + << "\nDetector[" << idet + << "] exceeds maximum channels " + "allowed for complete detector set in X dimension!"; } offsetY = 0; offsetY_gp = 0; prevChanY = detectors[idet]->getTotalNumberOfChannels(Y); - prevChanY_gp = detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); + prevChanY_gp = + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y); numY = 0; // assuming symmetry with this statement. // whats on 1st column should be on 2nd column numY_gp = 0; offsetX += prevChanX; offsetX_gp += prevChanX_gp; prevChanX = detectors[idet]->getTotalNumberOfChannels(X); - prevChanX_gp = detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); + prevChanX_gp = + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); numX += detectors[idet]->getTotalNumberOfChannels(X); - numX_gp += detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); + numX_gp += + detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X); ++multi_shm()->numberOfDetector[X]; FILE_LOG(logDEBUG1) << "incrementing in x direction"; } - double bytesperchannel = (double)detectors[idet]->getDataBytes() / - (double)(detectors[idet]->getTotalNumberOfChannels(X) * - detectors[idet]->getTotalNumberOfChannels(Y)); - detectors[idet]->setDetectorOffset(X, (bytesperchannel >= 1.0) ? offsetX_gp : offsetX); - detectors[idet]->setDetectorOffset(Y, (bytesperchannel >= 1.0) ? offsetY_gp : offsetY); + double bytesperchannel = + (double)detectors[idet]->getDataBytes() / + (double)(detectors[idet]->getTotalNumberOfChannels(X) * + detectors[idet]->getTotalNumberOfChannels(Y)); + detectors[idet]->setDetectorOffset( + X, (bytesperchannel >= 1.0) ? offsetX_gp : offsetX); + detectors[idet]->setDetectorOffset( + Y, (bytesperchannel >= 1.0) ? offsetY_gp : offsetY); FILE_LOG(logDEBUG1) << "Detector[" << idet << "] has offsets (" << detectors[idet]->getDetectorOffset(X) << ", " @@ -662,20 +707,22 @@ void multiSlsDetector::updateOffsets() { multi_shm()->numberOfChannelInclGapPixels[Y] = numY_gp; } } - FILE_LOG(logDEBUG1) << "\n\tNumber of Channels in X direction:" - << multi_shm()->numberOfChannel[X] - << "\n\tNumber of Channels in Y direction:" - << multi_shm()->numberOfChannel[Y] - << "\n\tNumber of Channels in X direction with Gap Pixels:" - << multi_shm()->numberOfChannelInclGapPixels[X] - << "\n\tNumber of Channels in Y direction with Gap Pixels:" - << multi_shm()->numberOfChannelInclGapPixels[Y]; + FILE_LOG(logDEBUG1) + << "\n\tNumber of Channels in X direction:" + << multi_shm()->numberOfChannel[X] + << "\n\tNumber of Channels in Y direction:" + << multi_shm()->numberOfChannel[Y] + << "\n\tNumber of Channels in X direction with Gap Pixels:" + << multi_shm()->numberOfChannelInclGapPixels[X] + << "\n\tNumber of Channels in Y direction with Gap Pixels:" + << multi_shm()->numberOfChannelInclGapPixels[Y]; multi_shm()->numberOfChannels = multi_shm()->numberOfChannel[0] * multi_shm()->numberOfChannel[1]; for (auto &d : detectors) { - d->updateMultiSize(multi_shm()->numberOfDetector[0], multi_shm()->numberOfDetector[1]); + d->updateMultiSize(multi_shm()->numberOfDetector[0], + multi_shm()->numberOfDetector[1]); } } @@ -739,7 +786,7 @@ int multiSlsDetector::setReceiverPort(int port_number, int detPos) { } int multiSlsDetector::getReceiverPort(int detPos) const { - if (detPos >= 0) { + if (detPos >= 0) { return detectors[detPos]->getReceiverPort(); } @@ -787,7 +834,8 @@ void multiSlsDetector::readConfigurationFile(const std::string &fname) { std::ifstream input_file; input_file.open(fname, std::ios_base::in); if (!input_file.is_open()) { - throw RuntimeError("Could not open configuration file " + fname + " for reading"); + throw RuntimeError("Could not open configuration file " + fname + + " for reading"); } std::string current_line; while (input_file.good()) { @@ -795,7 +843,8 @@ void multiSlsDetector::readConfigurationFile(const std::string &fname) { if (current_line.find('#') != std::string::npos) { current_line.erase(current_line.find('#')); } - FILE_LOG(logDEBUG1) << "current_line after removing comments:\n\t" << current_line; + FILE_LOG(logDEBUG1) + << "current_line after removing comments:\n\t" << current_line; if (current_line.length() > 1) { multiSlsDetectorClient(current_line, PUT_ACTION, this); } @@ -810,18 +859,19 @@ int multiSlsDetector::writeConfigurationFile(const std::string &fname) { outfile.open(fname.c_str(), std::ios_base::out); if (outfile.is_open()) { - for(const auto& cmd : header) + for (const auto &cmd : header) multiSlsDetectorClient(cmd, GET_ACTION, this, outfile); // single detector configuration - for (auto & detector : detectors) { + for (auto &detector : detectors) { outfile << '\n'; auto det_commands = detector->getConfigFileCommands(); - for(const auto& cmd : det_commands) + for (const auto &cmd : det_commands) multiSlsDetectorClient(cmd, GET_ACTION, this, outfile); } } else { - throw RuntimeError("Could not open configuration file " + fname + " for writing"); + throw RuntimeError("Could not open configuration file " + fname + + " for writing"); } return OK; } @@ -837,8 +887,8 @@ slsDetectorDefs::detectorSettings multiSlsDetector::getSettings(int detPos) { return (detectorSettings)sls::minusOneIfDifferent(r); } -slsDetectorDefs::detectorSettings multiSlsDetector::setSettings(detectorSettings isettings, - int detPos) { +slsDetectorDefs::detectorSettings +multiSlsDetector::setSettings(detectorSettings isettings, int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setSettings(isettings); @@ -863,14 +913,16 @@ int multiSlsDetector::getThresholdEnergy(int detPos) { return -1; } -int multiSlsDetector::setThresholdEnergy(int e_eV, detectorSettings isettings, int tb, int detPos) { +int multiSlsDetector::setThresholdEnergy(int e_eV, detectorSettings isettings, + int tb, int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setThresholdEnergy(e_eV, isettings, tb); } // multi - auto r = parallelCall(&slsDetector::setThresholdEnergy, e_eV, isettings, tb); + auto r = + parallelCall(&slsDetector::setThresholdEnergy, e_eV, isettings, tb); if (sls::allEqualWithTol(r, 200)) { return r.front(); } @@ -888,7 +940,8 @@ std::string multiSlsDetector::getSettingsDir(int detPos) { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setSettingsDir(const std::string &directory, int detPos) { +std::string multiSlsDetector::setSettingsDir(const std::string &directory, + int detPos) { if (detPos >= 0) { return detectors[detPos]->setSettingsDir(directory); } @@ -1056,7 +1109,8 @@ int multiSlsDetector::configureMAC(int detPos) { return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } -void multiSlsDetector::setStartingFrameNumber(const uint64_t value, int detPos) { +void multiSlsDetector::setStartingFrameNumber(const uint64_t value, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setStartingFrameNumber(value); @@ -1094,7 +1148,8 @@ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int detPos) { case FRAME_NUMBER: case CYCLES_NUMBER: case STORAGE_CELL_NUMBER: - throw RuntimeError("Cannot set number of frames, cycles or storage cells individually."); + throw RuntimeError("Cannot set number of frames, cycles or " + "storage cells individually."); default: break; } @@ -1123,9 +1178,9 @@ int64_t multiSlsDetector::setTimer(timerIndex index, int64_t t, int detPos) { return ret; } -int64_t multiSlsDetector::secondsToNanoSeconds(double t){ +int64_t multiSlsDetector::secondsToNanoSeconds(double t) { int64_t ns = lround(t * 1E9); - return (ns < 0) ? -1: ns; + return (ns < 0) ? -1 : ns; } double multiSlsDetector::setExposureTime(double t, bool inseconds, int detPos) { @@ -1136,7 +1191,8 @@ double multiSlsDetector::setExposureTime(double t, bool inseconds, int detPos) { return (t_ns < 0) ? -1 : 1E-9 * t_ns; } -double multiSlsDetector::setExposurePeriod(double t, bool inseconds, int detPos) { +double multiSlsDetector::setExposurePeriod(double t, bool inseconds, + int detPos) { if (!inseconds) { return setTimer(FRAME_PERIOD, (int64_t)t, detPos); } @@ -1144,7 +1200,8 @@ double multiSlsDetector::setExposurePeriod(double t, bool inseconds, int detPos) return (t_ns < 0) ? -1 : 1E-9 * t_ns; } -double multiSlsDetector::setDelayAfterTrigger(double t, bool inseconds, int detPos) { +double multiSlsDetector::setDelayAfterTrigger(double t, bool inseconds, + int detPos) { if (!inseconds) { return setTimer(DELAY_AFTER_TRIGGER, (int64_t)t, detPos); } @@ -1152,21 +1209,23 @@ double multiSlsDetector::setDelayAfterTrigger(double t, bool inseconds, int detP return (t_ns < 0) ? -1 : 1E-9 * t_ns; } -double multiSlsDetector::setSubFrameExposureTime(double t, bool inseconds, int detPos) { +double multiSlsDetector::setSubFrameExposureTime(double t, bool inseconds, + int detPos) { if (!inseconds) { return setTimer(SUBFRAME_ACQUISITION_TIME, (int64_t)t, detPos); } - auto t_ns = setTimer(SUBFRAME_ACQUISITION_TIME, secondsToNanoSeconds(t), detPos); + auto t_ns = + setTimer(SUBFRAME_ACQUISITION_TIME, secondsToNanoSeconds(t), detPos); return (t_ns < 0) ? -1 : 1E-9 * t_ns; } -double multiSlsDetector::setSubFrameExposureDeadTime(double t, bool inseconds, int detPos) { +double multiSlsDetector::setSubFrameExposureDeadTime(double t, bool inseconds, + int detPos) { if (!inseconds) { return setTimer(SUBFRAME_DEADTIME, (int64_t)t, detPos); } auto t_ns = setTimer(SUBFRAME_DEADTIME, secondsToNanoSeconds(t), detPos); return (t_ns < 0) ? -1 : 1E-9 * t_ns; - } int64_t multiSlsDetector::setNumberOfFrames(int64_t t, int detPos) { @@ -1220,7 +1279,8 @@ int64_t multiSlsDetector::getTimeLeft(timerIndex index, int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::setSpeed(speedVariable index, int value, int mode, int detPos) { +int multiSlsDetector::setSpeed(speedVariable index, int value, int mode, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setSpeed(index, value, mode); @@ -1260,10 +1320,10 @@ int multiSlsDetector::setDynamicRange(int dr, int detPos) { // update speed, check ratecorrection if (getDetectorTypeAsEnum() == EIGER) { - // rate correction before speed for consistency + // rate correction before speed for consistency // (else exception at speed makes ratecorr inconsistent) parallelCall(&slsDetector::updateRateCorrection); - + // speed(usability) switch (dr) { case 32: @@ -1283,10 +1343,6 @@ int multiSlsDetector::setDynamicRange(int dr, int detPos) { } } - - - - return ret; } @@ -1336,7 +1392,8 @@ int multiSlsDetector::getADC(dacIndex index, int detPos) { } slsDetectorDefs::externalCommunicationMode -multiSlsDetector::setExternalCommunicationMode(externalCommunicationMode pol, int detPos) { +multiSlsDetector::setExternalCommunicationMode(externalCommunicationMode pol, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setExternalCommunicationMode(pol); @@ -1370,7 +1427,8 @@ int multiSlsDetector::setReadOutFlags(readOutFlags flag, int detPos) { return sls::minusOneIfDifferent(r); } -uint32_t multiSlsDetector::writeRegister(uint32_t addr, uint32_t val, int detPos) { +uint32_t multiSlsDetector::writeRegister(uint32_t addr, uint32_t val, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->writeRegister(addr, val); @@ -1384,8 +1442,9 @@ uint32_t multiSlsDetector::writeRegister(uint32_t addr, uint32_t val, int detPos // can't have different values std::ostringstream ss; - ss << "Error: Different Values for function writeRegister (write 0x" << std::hex << val - << " to addr 0x" << std::hex << addr << std::dec << ")"; + ss << "Error: Different Values for function writeRegister (write 0x" + << std::hex << val << " to addr 0x" << std::hex << addr << std::dec + << ")"; throw RuntimeError(ss.str()); } @@ -1403,8 +1462,8 @@ uint32_t multiSlsDetector::readRegister(uint32_t addr, int detPos) { // can't have different values std::ostringstream ss; - ss << "Error: Different Values for function readRegister (read from 0x" << std::hex << addr - << std::dec << ")"; + ss << "Error: Different Values for function readRegister (read from 0x" + << std::hex << addr << std::dec << ")"; throw RuntimeError(ss.str()); } @@ -1442,12 +1501,13 @@ uint32_t multiSlsDetector::clearBit(uint32_t addr, int n, int detPos) { // can't have different values std::ostringstream ss; - ss << "Error: Different Values for function clearBit (clear bit " << n << " to addr 0x" - << std::hex << addr << std::dec << ")"; + ss << "Error: Different Values for function clearBit (clear bit " << n + << " to addr 0x" << std::hex << addr << std::dec << ")"; throw RuntimeError(ss.str()); } -std::string multiSlsDetector::setDetectorMAC(const std::string &detectorMAC, int detPos) { +std::string multiSlsDetector::setDetectorMAC(const std::string &detectorMAC, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDetectorMAC(detectorMAC); @@ -1469,7 +1529,8 @@ std::string multiSlsDetector::getDetectorMAC(int detPos) { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setDetectorMAC2(const std::string &detectorMAC, int detPos) { +std::string multiSlsDetector::setDetectorMAC2(const std::string &detectorMAC, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDetectorMAC2(detectorMAC); @@ -1491,7 +1552,8 @@ std::string multiSlsDetector::getDetectorMAC2(int detPos) { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setDetectorIP(const std::string &detectorIP, int detPos) { +std::string multiSlsDetector::setDetectorIP(const std::string &detectorIP, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDetectorIP(detectorIP); @@ -1513,7 +1575,8 @@ std::string multiSlsDetector::getDetectorIP(int detPos) const { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setDetectorIP2(const std::string &detectorIP, int detPos) { +std::string multiSlsDetector::setDetectorIP2(const std::string &detectorIP, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDetectorIP2(detectorIP); @@ -1535,8 +1598,8 @@ std::string multiSlsDetector::getDetectorIP2(int detPos) const { return sls::concatenateIfDifferent(r); } - -std::string multiSlsDetector::setReceiverHostname(const std::string &receiver, int detPos) { +std::string multiSlsDetector::setReceiverHostname(const std::string &receiver, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverHostname(receiver); @@ -1558,7 +1621,8 @@ std::string multiSlsDetector::getReceiverHostname(int detPos) const { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setReceiverUDPIP(const std::string &udpip, int detPos) { +std::string multiSlsDetector::setReceiverUDPIP(const std::string &udpip, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverUDPIP(udpip); @@ -1580,7 +1644,8 @@ std::string multiSlsDetector::getReceiverUDPIP(int detPos) const { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setReceiverUDPIP2(const std::string &udpip, int detPos) { +std::string multiSlsDetector::setReceiverUDPIP2(const std::string &udpip, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverUDPIP2(udpip); @@ -1602,7 +1667,8 @@ std::string multiSlsDetector::getReceiverUDPIP2(int detPos) const { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setReceiverUDPMAC(const std::string &udpmac, int detPos) { +std::string multiSlsDetector::setReceiverUDPMAC(const std::string &udpmac, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverUDPMAC(udpmac); @@ -1624,7 +1690,8 @@ std::string multiSlsDetector::getReceiverUDPMAC(int detPos) const { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setReceiverUDPMAC2(const std::string &udpmac, int detPos) { +std::string multiSlsDetector::setReceiverUDPMAC2(const std::string &udpmac, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverUDPMAC2(udpmac); @@ -1702,7 +1769,7 @@ int multiSlsDetector::setNumberofUDPInterfaces(int n, int detPos) { } // multi - auto r = parallelCall(&slsDetector::setNumberofUDPInterfaces,n); + auto r = parallelCall(&slsDetector::setNumberofUDPInterfaces, n); // redo the zmq sockets if (previouslyClientStreaming != 0) { @@ -1716,7 +1783,7 @@ int multiSlsDetector::setNumberofUDPInterfaces(int n, int detPos) { // return single if (detPos >= 0) - return ret; + return ret; // return multi return sls::minusOneIfDifferent(r); @@ -1740,7 +1807,7 @@ int multiSlsDetector::selectUDPInterface(int n, int detPos) { } // multi - auto r = parallelCall(&slsDetector::selectUDPInterface,n); + auto r = parallelCall(&slsDetector::selectUDPInterface, n); return sls::minusOneIfDifferent(r); } @@ -1769,7 +1836,7 @@ void multiSlsDetector::setClientDataStreamingInPort(int i, int detPos) { int firstPort = i; int numSockets = (getDetectorTypeAsEnum() == EIGER) ? 2 : 1; if (getNumberofUDPInterfaces() == 2) - numSockets *= 2; + numSockets *= 2; for (size_t idet = 0; idet < detectors.size(); ++idet) { auto port = firstPort + (idet * numSockets); @@ -1809,7 +1876,7 @@ void multiSlsDetector::setReceiverDataStreamingOutPort(int i, int detPos) { int firstPort = i; int numSockets = (getDetectorTypeAsEnum() == EIGER) ? 2 : 1; if (getNumberofUDPInterfaces() == 2) - numSockets *= 2; + numSockets *= 2; for (size_t idet = 0; idet < detectors.size(); ++idet) { auto port = firstPort + (idet * numSockets); @@ -1835,7 +1902,8 @@ int multiSlsDetector::getReceiverStreamingPort(int detPos) { return sls::minusOneIfDifferent(r); } -void multiSlsDetector::setClientDataStreamingInIP(const std::string &ip, int detPos) { +void multiSlsDetector::setClientDataStreamingInIP(const std::string &ip, + int detPos) { if (ip.length() != 0u) { int prev_streaming = enableDataStreamingToClient(-1); @@ -1868,7 +1936,8 @@ std::string multiSlsDetector::getClientStreamingIP(int detPos) { return sls::concatenateIfDifferent(r); } -void multiSlsDetector::setReceiverDataStreamingOutIP(const std::string &ip, int detPos) { +void multiSlsDetector::setReceiverDataStreamingOutIP(const std::string &ip, + int detPos) { if (ip.length() != 0u) { int prev_streaming = enableDataStreamingFromReceiver(-1, detPos); @@ -1901,18 +1970,22 @@ std::string multiSlsDetector::getReceiverStreamingIP(int detPos) { return sls::concatenateIfDifferent(r); } -int multiSlsDetector::setDetectorNetworkParameter(networkParameter index, int value, int detPos) { +int multiSlsDetector::setDetectorNetworkParameter(networkParameter index, + int value, int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDetectorNetworkParameter(index, value); } // multi - auto r = parallelCall(&slsDetector::setDetectorNetworkParameter, index, value); + auto r = + parallelCall(&slsDetector::setDetectorNetworkParameter, index, value); return sls::minusOneIfDifferent(r); } -std::string multiSlsDetector::setAdditionalJsonHeader(const std::string &jsonheader, int detPos) { +std::string +multiSlsDetector::setAdditionalJsonHeader(const std::string &jsonheader, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setAdditionalJsonHeader(jsonheader); @@ -1934,8 +2007,8 @@ std::string multiSlsDetector::getAdditionalJsonHeader(int detPos) { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setAdditionalJsonParameter(const std::string &key, - const std::string &value, int detPos) { +std::string multiSlsDetector::setAdditionalJsonParameter( + const std::string &key, const std::string &value, int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setAdditionalJsonParameter(key, value); @@ -1946,7 +2019,8 @@ std::string multiSlsDetector::setAdditionalJsonParameter(const std::string &key, return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::getAdditionalJsonParameter(const std::string &key, int detPos) { +std::string multiSlsDetector::getAdditionalJsonParameter(const std::string &key, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->getAdditionalJsonParameter(key); @@ -1957,14 +2031,16 @@ std::string multiSlsDetector::getAdditionalJsonParameter(const std::string &key, return sls::concatenateIfDifferent(r); } -int multiSlsDetector::setDetectorMinMaxEnergyThreshold(const int index, int value, int detPos) { +int multiSlsDetector::setDetectorMinMaxEnergyThreshold(const int index, + int value, int detPos) { std::string parameter = (index != 0 ? "emax" : "emin"); std::string result; if (value < 0) { result = getAdditionalJsonParameter(parameter, detPos); } else { - result = setAdditionalJsonParameter(parameter, std::to_string(value), detPos); + result = setAdditionalJsonParameter(parameter, std::to_string(value), + detPos); } // convert to integer @@ -1984,7 +2060,8 @@ int multiSlsDetector::setFrameMode(frameModeType value, int detPos) { if (value == GET_FRAME_MODE) { result = getAdditionalJsonParameter(parameter, detPos); } else { - result = setAdditionalJsonParameter(parameter, getFrameModeType(value), detPos); + result = setAdditionalJsonParameter(parameter, getFrameModeType(value), + detPos); } return getFrameModeType(result); @@ -1997,20 +2074,24 @@ int multiSlsDetector::setDetectorMode(detectorModeType value, int detPos) { if (value == GET_DETECTOR_MODE) { result = getAdditionalJsonParameter(parameter, detPos); } else { - result = setAdditionalJsonParameter(parameter, getDetectorModeType(value), detPos); + result = setAdditionalJsonParameter(parameter, + getDetectorModeType(value), detPos); } return getDetectorModeType(result); } -int64_t multiSlsDetector::setReceiverUDPSocketBufferSize(int64_t udpsockbufsize, int detPos) { +int64_t multiSlsDetector::setReceiverUDPSocketBufferSize(int64_t udpsockbufsize, + int detPos) { // single if (detPos >= 0) { - return detectors[detPos]->setReceiverUDPSocketBufferSize(udpsockbufsize); + return detectors[detPos]->setReceiverUDPSocketBufferSize( + udpsockbufsize); } // multi - auto r = parallelCall(&slsDetector::setReceiverUDPSocketBufferSize, udpsockbufsize); + auto r = parallelCall(&slsDetector::setReceiverUDPSocketBufferSize, + udpsockbufsize); return sls::minusOneIfDifferent(r); } @@ -2054,7 +2135,9 @@ int multiSlsDetector::digitalTest(digitalTestMode mode, int ival, int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::loadImageToDetector(imageType index, const std::string &fname, int detPos) { +int multiSlsDetector::loadImageToDetector(imageType index, + const std::string &fname, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->loadImageToDetector(index, fname); @@ -2066,20 +2149,22 @@ int multiSlsDetector::loadImageToDetector(imageType index, const std::string &fn int nch = multi_shm()->numberOfChannels; short int imageVals[nch]; if (readDataFile(fname, imageVals, nch) < nch * (int)sizeof(short int)) { - throw RuntimeError( - "Could not open file or not enough data in file to load image to detector."); + throw RuntimeError("Could not open file or not enough data in file to " + "load image to detector."); } // send image to all std::vector r; for (size_t idet = 0; idet < detectors.size(); ++idet) { r.push_back(detectors[idet]->sendImageToDetector( - index, imageVals + idet * detectors[idet]->getTotalNumberOfChannels())); + index, + imageVals + idet * detectors[idet]->getTotalNumberOfChannels())); } return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } -int multiSlsDetector::writeCounterBlockFile(const std::string &fname, int startACQ, int detPos) { +int multiSlsDetector::writeCounterBlockFile(const std::string &fname, + int startACQ, int detPos) { // single if (detPos >= 0) { return detectors[detPos]->writeCounterBlockFile(fname, startACQ); @@ -2093,14 +2178,17 @@ int multiSlsDetector::writeCounterBlockFile(const std::string &fname, int startA std::vector r; for (size_t idet = 0; idet < detectors.size(); ++idet) { r.push_back(detectors[idet]->getCounterBlock( - imageVals + idet * detectors[idet]->getTotalNumberOfChannels(), startACQ)); + imageVals + idet * detectors[idet]->getTotalNumberOfChannels(), + startACQ)); } // write image if all ok if (sls::allEqualTo(r, static_cast(OK))) { - if (writeDataFile(fname, nch, imageVals) < nch * (int)sizeof(short int)) { - throw RuntimeError("Could not open file to write or did not write enough data" - " in file to write counter block file from detector."); + if (writeDataFile(fname, nch, imageVals) < + nch * (int)sizeof(short int)) { + throw RuntimeError( + "Could not open file to write or did not write enough data" + " in file to write counter block file from detector."); } return OK; } @@ -2152,8 +2240,9 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { } // multi - int xmin = 0, xmax = 0, ymin = 0, ymax = 0, channelX = 0, channelY = 0, idet = 0, - lastChannelX = 0, lastChannelY = 0, index = 0, offsetX = 0, offsetY = 0; + int xmin = 0, xmax = 0, ymin = 0, ymax = 0, channelX = 0, channelY = 0, + idet = 0, lastChannelX = 0, lastChannelY = 0, index = 0, offsetX = 0, + offsetY = 0; bool invalidroi = false; int ndet = detectors.size(); @@ -2171,8 +2260,9 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { verifyMinMaxROI(n, roiLimits); FILE_LOG(logDEBUG1) << "Setting ROI for " << n << "rois:"; for (int i = 0; i < n; ++i) { - FILE_LOG(logDEBUG1) << i << ":" << roiLimits[i].xmin << "\t" << roiLimits[i].xmax << "\t" - << roiLimits[i].ymin << "\t" << roiLimits[i].ymax; + FILE_LOG(logDEBUG1) + << i << ":" << roiLimits[i].xmin << "\t" << roiLimits[i].xmax + << "\t" << roiLimits[i].ymin << "\t" << roiLimits[i].ymax; } // for each roi for (int i = 0; i < n; ++i) { @@ -2185,8 +2275,8 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { // check roi max values idet = decodeNChannel(xmax, ymax, channelX, channelY); FILE_LOG(logDEBUG1) << "Decoded Channel max vals: " << std::endl - << "det:" << idet << "\t" << xmax << "\t" << ymax << "\t" - << channelX << "\t" << channelY; + << "det:" << idet << "\t" << xmax << "\t" + << ymax << "\t" << channelX << "\t" << channelY; if (idet == -1) { FILE_LOG(logERROR) << "invalid roi"; continue; @@ -2200,17 +2290,24 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { while (ymin <= ymax) { // get offset for each detector idet = decodeNChannel(xmin, ymin, channelX, channelY); - FILE_LOG(logDEBUG1) << "Decoded Channel min vals: " << std::endl - << "det:" << idet << "\t" << xmin << "\t" << ymin << "\t" - << channelX << "\t" << channelY; + FILE_LOG(logDEBUG1) + << "Decoded Channel min vals: " << std::endl + << "det:" << idet << "\t" << xmin << "\t" << ymin + << "\t" << channelX << "\t" << channelY; if (idet < 0 || idet >= (int)detectors.size()) { FILE_LOG(logDEBUG1) << "invalid roi"; invalidroi = true; break; } // get last channel for each det in x and y dir - lastChannelX = (detectors[idet]->getTotalNumberOfChannelsInclGapPixels(X)) - 1; - lastChannelY = (detectors[idet]->getTotalNumberOfChannelsInclGapPixels(Y)) - 1; + lastChannelX = + (detectors[idet]->getTotalNumberOfChannelsInclGapPixels( + X)) - + 1; + lastChannelY = + (detectors[idet]->getTotalNumberOfChannelsInclGapPixels( + Y)) - + 1; offsetX = detectors[idet]->getDetectorOffset(X); offsetY = detectors[idet]->getDetectorOffset(Y); @@ -2223,8 +2320,9 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { lastChannelY = ymax - offsetY; } - FILE_LOG(logDEBUG1) << "lastChannelX:" << lastChannelX << "\t" - << "lastChannelY:" << lastChannelY; + FILE_LOG(logDEBUG1) + << "lastChannelX:" << lastChannelX << "\t" + << "lastChannelY:" << lastChannelY; // creating the list of roi for corresponding detector index = nroi[idet]; @@ -2239,7 +2337,8 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { ymin = ymax + 1; } - FILE_LOG(logDEBUG1) << "nroi[idet]:" << nroi[idet] << "\tymin:" << ymin; + FILE_LOG(logDEBUG1) + << "nroi[idet]:" << nroi[idet] << "\tymin:" << ymin; } if (invalidroi) { break; @@ -2266,8 +2365,9 @@ int multiSlsDetector::setROI(int n, ROI roiLimits[], int detPos) { for (size_t i = 0; i < detectors.size(); ++i) { FILE_LOG(logDEBUG1) << "detector " << i; for (int j = 0; j < nroi[i]; ++j) { - FILE_LOG(logDEBUG1) << allroi[i][j].xmin << "\t" << allroi[i][j].xmax << "\t" - << allroi[i][j].ymin << "\t" << allroi[i][j].ymax; + FILE_LOG(logDEBUG1) + << allroi[i][j].xmin << "\t" << allroi[i][j].xmax << "\t" + << allroi[i][j].ymin << "\t" << allroi[i][j].ymax; } } @@ -2305,8 +2405,9 @@ const slsDetectorDefs::ROI *multiSlsDetector::getROI(int &n, int detPos) { FILE_LOG(logINFO) << "detector " << idet << ":"; } for (int j = 0; j < index; ++j) { - FILE_LOG(logINFO) << temp[j].xmin << "\t" << temp[j].xmax << "\t" << temp[j].ymin - << "\t" << temp[j].ymax; + FILE_LOG(logINFO) + << temp[j].xmin << "\t" << temp[j].xmax << "\t" + << temp[j].ymin << "\t" << temp[j].ymax; int x = detectors[idet]->getDetectorOffset(X); int y = detectors[idet]->getDetectorOffset(Y); roiLimits[n].xmin = temp[j].xmin + x; @@ -2325,8 +2426,9 @@ const slsDetectorDefs::ROI *multiSlsDetector::getROI(int &n, int detPos) { FILE_LOG(logDEBUG1) << "ROI :" << std::endl; for (int j = 0; j < n; ++j) { - FILE_LOG(logDEBUG1) << roiLimits[j].xmin << "\t" << roiLimits[j].xmax << "\t" - << roiLimits[j].ymin << "\t" << roiLimits[j].ymax; + FILE_LOG(logDEBUG1) + << roiLimits[j].xmin << "\t" << roiLimits[j].xmax << "\t" + << roiLimits[j].ymin << "\t" << roiLimits[j].ymax; } // combine all the adjacent rois in x direction @@ -2363,10 +2465,12 @@ const slsDetectorDefs::ROI *multiSlsDetector::getROI(int &n, int detPos) { } } - FILE_LOG(logDEBUG1) << "Combined along x axis Getting ROI :\ndetector " << n; + FILE_LOG(logDEBUG1) << "Combined along x axis Getting ROI :\ndetector " + << n; for (int j = 0; j < n; ++j) { - FILE_LOG(logDEBUG1) << roiLimits[j].xmin << "\t" << roiLimits[j].xmax << "\t" - << roiLimits[j].ymin << "\t" << roiLimits[j].ymax; + FILE_LOG(logDEBUG1) + << roiLimits[j].xmin << "\t" << roiLimits[j].xmax << "\t" + << roiLimits[j].ymin << "\t" << roiLimits[j].ymax; } // combine all the adjacent rois in y direction @@ -2424,8 +2528,8 @@ const slsDetectorDefs::ROI *multiSlsDetector::getROI(int &n, int detPos) { FILE_LOG(logDEBUG1) << "\nxmin\txmax\tymin\tymax"; for (int i = 0; i < n; ++i) { - FILE_LOG(logDEBUG1) << retval[i].xmin << "\t" << retval[i].xmax << "\t" << retval[i].ymin - << "\t" << retval[i].ymax; + FILE_LOG(logDEBUG1) << retval[i].xmin << "\t" << retval[i].xmax << "\t" + << retval[i].ymin << "\t" << retval[i].ymax; } return retval; } @@ -2542,7 +2646,8 @@ int multiSlsDetector::getReceiverDbitOffset(int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::writeAdcRegister(uint32_t addr, uint32_t val, int detPos) { +int multiSlsDetector::writeAdcRegister(uint32_t addr, uint32_t val, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->writeAdcRegister(addr, val); @@ -2567,7 +2672,8 @@ int multiSlsDetector::activate(int const enable, int detPos) { int multiSlsDetector::setDeactivatedRxrPaddingMode(int padding, int detPos) { // single if (detPos >= 0) { - return static_cast(detectors[detPos]->setDeactivatedRxrPaddingMode(padding)); + return static_cast( + detectors[detPos]->setDeactivatedRxrPaddingMode(padding)); } // multi @@ -2620,8 +2726,8 @@ int multiSlsDetector::enableGapPixels(int val, int detPos) { // single if (detPos >= 0) { if (val >= 0) { - throw RuntimeError( - "Function (enableGapPixels) must be called from a multi detector level."); + throw RuntimeError("Function (enableGapPixels) must be called from " + "a multi detector level."); } return detectors[detPos]->enableGapPixels(val); } @@ -2735,13 +2841,13 @@ int multiSlsDetector::setStoragecellStart(int pos, int detPos) { } int multiSlsDetector::programFPGA(const std::string &fname, int detPos) { - FILE_LOG(logINFO) << "This can take awhile. Please be patient..."; - // read pof file - std::vector buffer = readPofFile(fname); + FILE_LOG(logINFO) << "This can take awhile. Please be patient..."; + // read pof file + std::vector buffer = readPofFile(fname); // single if (detPos >= 0) { - return detectors[detPos]->programFPGA(buffer); + return detectors[detPos]->programFPGA(buffer); } // multi @@ -2760,15 +2866,19 @@ int multiSlsDetector::resetFPGA(int detPos) { return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } -int multiSlsDetector::copyDetectorServer(const std::string &fname, const std::string &hostname, int detPos) { +int multiSlsDetector::copyDetectorServer(const std::string &fname, + const std::string &hostname, + int detPos) { // single if (detPos >= 0) { detectors[detPos]->copyDetectorServer(fname, hostname); - return detectors[detPos]->rebootController(); // reboot and copy should be independant for update command + return detectors[detPos] + ->rebootController(); // reboot and copy should be independant for + // update command } // multi - parallelCall(&slsDetector::copyDetectorServer,fname, hostname); + parallelCall(&slsDetector::copyDetectorServer, fname, hostname); auto r = parallelCall(&slsDetector::rebootController); return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } @@ -2784,19 +2894,21 @@ int multiSlsDetector::rebootController(int detPos) { return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } -int multiSlsDetector::update(const std::string &sname, const std::string &hostname, const std::string &fname, int detPos) { - FILE_LOG(logINFO) << "This can take awhile. Please be patient..."; - // read pof file - std::vector buffer = readPofFile(fname); +int multiSlsDetector::update(const std::string &sname, + const std::string &hostname, + const std::string &fname, int detPos) { + FILE_LOG(logINFO) << "This can take awhile. Please be patient..."; + // read pof file + std::vector buffer = readPofFile(fname); - // single + // single if (detPos >= 0) { detectors[detPos]->copyDetectorServer(sname, hostname); return detectors[detPos]->programFPGA(buffer); } // multi - parallelCall(&slsDetector::copyDetectorServer,sname, hostname); + parallelCall(&slsDetector::copyDetectorServer, sname, hostname); auto r = parallelCall(&slsDetector::programFPGA, buffer); return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } @@ -2817,7 +2929,7 @@ int multiSlsDetector::powerChip(int ival, int detPos) { } return sls::minusOneIfDifferent(r); } - // multi parallel + // multi parallel auto r = parallelCall(&slsDetector::powerChip, ival); return sls::minusOneIfDifferent(r); } @@ -2833,7 +2945,6 @@ int multiSlsDetector::setAutoComparatorDisableMode(int ival, int detPos) { return sls::minusOneIfDifferent(r); } - int multiSlsDetector::setRateCorrection(int64_t t, int detPos) { // single if (detPos >= 0) { @@ -2985,7 +3096,8 @@ std::string multiSlsDetector::getFileName(int detPos) { return sls::concatenateIfDifferent(r); } -std::string multiSlsDetector::setFileName(const std::string &fname, int detPos) { +std::string multiSlsDetector::setFileName(const std::string &fname, + int detPos) { if (fname.empty()) { return getFileName(detPos); } @@ -3017,7 +3129,8 @@ int multiSlsDetector::getFramesPerFile(int detPos) const { } slsDetectorDefs::frameDiscardPolicy -multiSlsDetector::setReceiverFramesDiscardPolicy(frameDiscardPolicy f, int detPos) { +multiSlsDetector::setReceiverFramesDiscardPolicy(frameDiscardPolicy f, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setReceiverFramesDiscardPolicy(f); @@ -3030,7 +3143,8 @@ multiSlsDetector::setReceiverFramesDiscardPolicy(frameDiscardPolicy f, int detPo int multiSlsDetector::setPartialFramesPadding(bool padding, int detPos) { if (detPos >= 0) - return static_cast(detectors[detPos]->setPartialFramesPadding(padding)); + return static_cast( + detectors[detPos]->setPartialFramesPadding(padding)); auto r = parallelCall(&slsDetector::setPartialFramesPadding, padding); return sls::minusOneIfDifferent(r); } @@ -3053,7 +3167,8 @@ slsDetectorDefs::fileFormat multiSlsDetector::getFileFormat(int detPos) { return sls::minusOneIfDifferent(r); } -slsDetectorDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f, int detPos) { +slsDetectorDefs::fileFormat multiSlsDetector::setFileFormat(fileFormat f, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setFileFormat(f); @@ -3165,7 +3280,8 @@ uint64_t multiSlsDetector::getReceiverCurrentFrameIndex(int detPos) { auto r = parallelCall(&slsDetector::getReceiverCurrentFrameIndex); // prevent divide by all or do not take avg when -1 for "did not connect" - if ((detectors.empty()) || (sls::anyEqualTo(r, static_cast(-1)))) { + if ((detectors.empty()) || + (sls::anyEqualTo(r, static_cast(-1)))) { return -1; } @@ -3208,16 +3324,20 @@ int multiSlsDetector::createReceivingDataSockets(const bool destroy) { numSockets *= numSocketsPerDetector; for (size_t iSocket = 0; iSocket < numSockets; ++iSocket) { - uint32_t portnum = (detectors[iSocket / numSocketsPerDetector]->getClientStreamingPort()); + uint32_t portnum = (detectors[iSocket / numSocketsPerDetector] + ->getClientStreamingPort()); portnum += (iSocket % numSocketsPerDetector); try { zmqSocket.push_back(sls::make_unique( - detectors[iSocket / numSocketsPerDetector]->getClientStreamingIP().c_str(), + detectors[iSocket / numSocketsPerDetector] + ->getClientStreamingIP() + .c_str(), portnum)); FILE_LOG(logINFO) << "Zmq Client[" << iSocket << "] at " << zmqSocket.back()->GetZmqServerAddress(); } catch (...) { - FILE_LOG(logERROR) << "Could not create Zmq socket on port " << portnum; + FILE_LOG(logERROR) + << "Could not create Zmq socket on port " << portnum; createReceivingDataSockets(true); return FAIL; } @@ -3236,7 +3356,7 @@ void multiSlsDetector::readFrameFromReceiver() { int nDetPixelsY = 0; bool gappixelsenable = false; bool eiger = false; - bool numInterfaces = getNumberofUDPInterfaces(); // cannot pick up from zmq + bool numInterfaces = getNumberofUDPInterfaces(); // cannot pick up from zmq bool runningList[zmqSocket.size()], connectList[zmqSocket.size()]; int numRunning = 0; @@ -3264,8 +3384,10 @@ void multiSlsDetector::readFrameFromReceiver() { float bytesPerPixel = 0; // header info every header std::string currentFileName = ""; - uint64_t currentAcquisitionIndex = -1, currentFrameIndex = -1, currentFileIndex = -1; - uint32_t currentSubFrameIndex = -1, coordX = -1, coordY = -1, flippedDataX = -1; + uint64_t currentAcquisitionIndex = -1, currentFrameIndex = -1, + currentFileIndex = -1; + uint32_t currentSubFrameIndex = -1, coordX = -1, coordY = -1, + flippedDataX = -1; // wait for real time acquisition to start bool running = true; @@ -3290,8 +3412,9 @@ void multiSlsDetector::readFrameFromReceiver() { // HEADER { rapidjson::Document doc; - if (zmqSocket[isocket]->ReceiveHeader(isocket, doc, - SLS_DETECTOR_JSON_HEADER_VERSION) == 0) { + if (zmqSocket[isocket]->ReceiveHeader( + isocket, doc, SLS_DETECTOR_JSON_HEADER_VERSION) == + 0) { // parse error, version error or end of acquisition for // socket runningList[isocket] = false; @@ -3313,28 +3436,31 @@ void multiSlsDetector::readFrameFromReceiver() { // shape nPixelsX = doc["shape"][0].GetUint(); nPixelsY = doc["shape"][1].GetUint(); - // detector shape - nX = doc["detshape"][0].GetUint(); - nY = doc["detshape"][1].GetUint(); - nY *= numInterfaces; - nDetPixelsX = nX * nPixelsX; - nDetPixelsY = nY * nPixelsY; - // det type - eiger = (doc["detType"].GetUint() == static_cast(3)) ? true : false; // to be changed to EIGER when firmware updates its header data - // gap pixels enable - gappixelsenable = (doc["gappixels"].GetUint() == 0) ? false : true; - + // detector shape + nX = doc["detshape"][0].GetUint(); + nY = doc["detshape"][1].GetUint(); + nY *= numInterfaces; + nDetPixelsX = nX * nPixelsX; + nDetPixelsY = nY * nPixelsY; + // det type + eiger = + (doc["detType"].GetUint() == static_cast(3)) + ? true + : false; // to be changed to EIGER when firmware + // updates its header data + // gap pixels enable + gappixelsenable = + (doc["gappixels"].GetUint() == 0) ? false : true; + FILE_LOG(logDEBUG1) << "One Time Header Info:" "\n\tsize: " << size << "\n\tmultisize: " << multisize << "\n\tdynamicRange: " << dynamicRange << "\n\tbytesPerPixel: " << bytesPerPixel - << "\n\tnPixelsX: " << nPixelsX - << "\n\tnPixelsY: " << nPixelsY - << "\n\tnX: " << nX - << "\n\tnY: " << nY - << "\n\teiger: " << eiger + << "\n\tnPixelsX: " << nPixelsX + << "\n\tnPixelsY: " << nPixelsY << "\n\tnX: " << nX + << "\n\tnY: " << nY << "\n\teiger: " << eiger << "\n\tgappixelsenable: " << gappixelsenable; } // each time, parse rest of header @@ -3352,8 +3478,8 @@ void multiSlsDetector::readFrameFromReceiver() { FILE_LOG(logDEBUG1) << "Header Info:" "\n\tcurrentFileName: " - << currentFileName - << "\n\tcurrentAcquisitionIndex: " << currentAcquisitionIndex + << currentFileName << "\n\tcurrentAcquisitionIndex: " + << currentAcquisitionIndex << "\n\tcurrentFrameIndex: " << currentFrameIndex << "\n\tcurrentFileIndex: " << currentFileIndex << "\n\tcurrentSubFrameIndex: " << currentSubFrameIndex @@ -3370,26 +3496,32 @@ void multiSlsDetector::readFrameFromReceiver() { uint32_t xoffset = coordX * nPixelsX * bytesPerPixel; uint32_t yoffset = coordY * nPixelsY; uint32_t singledetrowoffset = nPixelsX * bytesPerPixel; - uint32_t rowoffset = nX * singledetrowoffset; - if (getDetectorTypeAsEnum() == CHIPTESTBOARD) { - singledetrowoffset=size; - } - FILE_LOG(logDEBUG1) << "Multi Image Info:" - "\n\txoffset: " - << xoffset << "\n\tyoffset: " << yoffset - << "\n\tsingledetrowoffset: " << singledetrowoffset - << "\n\trowoffset: " << rowoffset; + uint32_t rowoffset = nX * singledetrowoffset; + if (getDetectorTypeAsEnum() == CHIPTESTBOARD) { + singledetrowoffset = size; + } + FILE_LOG(logDEBUG1) + << "Multi Image Info:" + "\n\txoffset: " + << xoffset << "\n\tyoffset: " << yoffset + << "\n\tsingledetrowoffset: " << singledetrowoffset + << "\n\trowoffset: " << rowoffset; if (eiger && (flippedDataX != 0u)) { for (uint32_t i = 0; i < nPixelsY; ++i) { memcpy(((char *)multiframe) + - ((yoffset + (nPixelsY - 1 - i)) * rowoffset) + xoffset, - (char *)image + (i * singledetrowoffset), singledetrowoffset); + ((yoffset + (nPixelsY - 1 - i)) * + rowoffset) + + xoffset, + (char *)image + (i * singledetrowoffset), + singledetrowoffset); } } else { for (uint32_t i = 0; i < nPixelsY; ++i) { - memcpy(((char *)multiframe) + ((yoffset + i) * rowoffset) + xoffset, - (char *)image + (i * singledetrowoffset), singledetrowoffset); + memcpy(((char *)multiframe) + + ((yoffset + i) * rowoffset) + xoffset, + (char *)image + (i * singledetrowoffset), + singledetrowoffset); } } } @@ -3402,16 +3534,21 @@ void multiSlsDetector::readFrameFromReceiver() { // 4bit gap pixels if (dynamicRange == 4 && gappixelsenable) { int n = processImageWithGapPixels(multiframe, multigappixels); - thisData = - new detectorData(getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multigappixels, n, dynamicRange, currentFileIndex); + thisData = new detectorData( + getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, + nDetPixelsY, multigappixels, n, dynamicRange, + currentFileIndex); } // normal pixels else { - thisData = new detectorData(getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, nDetPixelsY, multiframe, multisize, dynamicRange, - currentFileIndex); + thisData = new detectorData( + getCurrentProgress(), currentFileName.c_str(), nDetPixelsX, + nDetPixelsY, multiframe, multisize, dynamicRange, + currentFileIndex); } dataReady(thisData, currentFrameIndex, - ((dynamicRange == 32) ? currentSubFrameIndex : -1), pCallbackArg); + ((dynamicRange == 32) ? currentSubFrameIndex : -1), + pCallbackArg); delete thisData; } @@ -3444,12 +3581,12 @@ void multiSlsDetector::readFrameFromReceiver() { } // free resources - if (image != nullptr) + if (image != nullptr) delete[] image; if (multiframe) delete[] multiframe; if (multigappixels) - delete [] multigappixels; + delete[] multigappixels; } int multiSlsDetector::processImageWithGapPixels(char *image, char *&gpImage) { @@ -3476,8 +3613,9 @@ int multiSlsDetector::processImageWithGapPixels(char *image, char *&gpImage) { // copying line by line src = image; dst = gpImage; - for (int row = 0; row < nychip; ++row) { // for each chip in a row - for (int ichipy = 0; ichipy < b1chipy; ++ichipy) { // for each row in a chip + for (int row = 0; row < nychip; ++row) { // for each chip in a row + for (int ichipy = 0; ichipy < b1chipy; + ++ichipy) { // for each row in a chip for (int col = 0; col < nxchip; ++col) { memcpy(dst, src, b1chipx); src += b1chipx; @@ -3496,8 +3634,9 @@ int multiSlsDetector::processImageWithGapPixels(char *image, char *&gpImage) { uint8_t temp, g1, g2; int mod; dst = gpImage; - for (int row = 0; row < nychip; ++row) { // for each chip in a row - for (int ichipy = 0; ichipy < b1chipy; ++ichipy) { // for each row in a chip + for (int row = 0; row < nychip; ++row) { // for each chip in a row + for (int ichipy = 0; ichipy < b1chipy; + ++ichipy) { // for each row in a chip for (int col = 0; col < nxchip; ++col) { dst += b1chipx; mod = (col + 1) % 4; @@ -3582,7 +3721,7 @@ int multiSlsDetector::setFileWrite(bool value, int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::getFileWrite(int detPos) const{ +int multiSlsDetector::getFileWrite(int detPos) const { if (detPos >= 0) { return static_cast(detectors[detPos]->getFileWrite()); } @@ -3598,7 +3737,7 @@ int multiSlsDetector::setMasterFileWrite(bool value, int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::getMasterFileWrite(int detPos) const{ +int multiSlsDetector::getMasterFileWrite(int detPos) const { if (detPos >= 0) { return static_cast(detectors[detPos]->getMasterFileWrite()); } @@ -3662,11 +3801,13 @@ int multiSlsDetector::enableDataStreamingToClient(int enable) { int multiSlsDetector::enableDataStreamingFromReceiver(int enable, int detPos) { // single if (detPos >= 0) { - return static_cast(detectors[detPos]->enableDataStreamingFromReceiver(enable)); + return static_cast( + detectors[detPos]->enableDataStreamingFromReceiver(enable)); } // multi - auto r = parallelCall(&slsDetector::enableDataStreamingFromReceiver, enable); + auto r = + parallelCall(&slsDetector::enableDataStreamingFromReceiver, enable); return sls::minusOneIfDifferent(r); } @@ -3756,7 +3897,8 @@ uint64_t multiSlsDetector::setPatternWord(int addr, uint64_t word, int detPos) { return sls::minusOneIfDifferent(r); } -void multiSlsDetector::setPatternLoops(int level, int start, int stop, int n, int detPos) { +void multiSlsDetector::setPatternLoops(int level, int start, int stop, int n, + int detPos) { // single if (detPos >= 0) { detectors[detPos]->setPatternLoops(level, start, stop, n); @@ -3788,7 +3930,8 @@ int multiSlsDetector::setPatternWaitAddr(int level, int addr, int detPos) { return sls::minusOneIfDifferent(r); } -uint64_t multiSlsDetector::setPatternWaitTime(int level, uint64_t t, int detPos) { +uint64_t multiSlsDetector::setPatternWaitTime(int level, uint64_t t, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setPatternWaitTime(level, t); @@ -3811,18 +3954,16 @@ int multiSlsDetector::setPatternMask(uint64_t mask, int detPos) { } uint64_t multiSlsDetector::getPatternMask(int detPos) { - // single - if (detPos >= 0) { + if (detPos >= 0) return detectors[detPos]->getPatternMask(); - } - - // multi auto r = parallelCall(&slsDetector::getPatternMask); if (sls::allEqual(r)) { return r.front(); + } else { + + throw RuntimeError("multiSlsDetector::getPatternMask: Error: Different " + "Values returned)"); } - // should not have different values - throw RuntimeError("multiSlsDetector::getPatternMask: Error: Different Values returned)"); } int multiSlsDetector::setPatternBitMask(uint64_t mask, int detPos) { @@ -3843,7 +3984,8 @@ uint64_t multiSlsDetector::getPatternBitMask(int detPos) { } // should not have different values - throw RuntimeError("multiSlsDetector::getPatternBitMask Different Values returned)"); + throw RuntimeError( + "multiSlsDetector::getPatternBitMask Different Values returned)"); } int multiSlsDetector::setLEDEnable(int enable, int detPos) { @@ -3857,7 +3999,8 @@ int multiSlsDetector::setLEDEnable(int enable, int detPos) { return sls::minusOneIfDifferent(r); } -int multiSlsDetector::setDigitalIODelay(uint64_t pinMask, int delay, int detPos) { +int multiSlsDetector::setDigitalIODelay(uint64_t pinMask, int delay, + int detPos) { // single if (detPos >= 0) { return detectors[detPos]->setDigitalIODelay(pinMask, delay); @@ -3868,7 +4011,8 @@ int multiSlsDetector::setDigitalIODelay(uint64_t pinMask, int delay, int detPos) return sls::allEqualTo(r, static_cast(OK)) ? OK : FAIL; } -int multiSlsDetector::retrieveDetectorSetup(const std::string &fname1, int level) { +int multiSlsDetector::retrieveDetectorSetup(const std::string &fname1, + int level) { int skip = 0; std::string fname; @@ -4037,30 +4181,36 @@ int multiSlsDetector::dumpDetectorSetup(const std::string &fname, int level) { auto cmd = slsDetectorCommand(this); for (auto &name : names) { sls::strcpy_safe(buffer, name.c_str()); // this is... - outfile << name << " " << cmd.executeLine(n_arguments, args, GET_ACTION) << std::endl; + outfile << name << " " + << cmd.executeLine(n_arguments, args, GET_ACTION) + << std::endl; } outfile.close(); } else { - throw RuntimeError("Error opening parameters file " + fname + " for writing"); + throw RuntimeError("Error opening parameters file " + fname + + " for writing"); } - FILE_LOG(logDEBUG1) << "wrote " << names.size() << " lines to " << outfname; + FILE_LOG(logDEBUG1) << "wrote " << names.size() << " lines to " + << outfname; return OK; } -void multiSlsDetector::registerAcquisitionFinishedCallback(void (*func)(double, int, void *), - void *pArg) { +void multiSlsDetector::registerAcquisitionFinishedCallback( + void (*func)(double, int, void *), void *pArg) { acquisition_finished = func; acqFinished_p = pArg; } -void multiSlsDetector::registerProgressCallback(void (*func)(double, void *), void *pArg) { +void multiSlsDetector::registerProgressCallback(void (*func)(double, void *), + void *pArg) { progress_call = func; pProgressCallArg = pArg; } -void multiSlsDetector::registerDataCallback(void (*userCallback)(detectorData *, uint64_t, uint32_t, void *), - void *pArg) { +void multiSlsDetector::registerDataCallback( + void (*userCallback)(detectorData *, uint64_t, uint32_t, void *), + void *pArg) { dataReady = userCallback; pCallbackArg = pArg; if (setReceiverOnline() == slsDetectorDefs::ONLINE_FLAG) { @@ -4105,7 +4255,8 @@ void multiSlsDetector::incrementProgress() { std::lock_guard lock(mp); progressIndex++; std::cout << std::fixed << std::setprecision(2) << std::setw(6) - << 100. * ((double)progressIndex) / ((double)totalProgress) << " \%"; + << 100. * ((double)progressIndex) / ((double)totalProgress) + << " \%"; std::cout << '\r' << std::flush; } @@ -4113,7 +4264,8 @@ void multiSlsDetector::setCurrentProgress(int i) { std::lock_guard lock(mp); progressIndex = i; std::cout << std::fixed << std::setprecision(2) << std::setw(6) - << 100. * ((double)progressIndex) / ((double)totalProgress) << " \%"; + << 100. * ((double)progressIndex) / ((double)totalProgress) + << " \%"; std::cout << '\r' << std::flush; } @@ -4200,7 +4352,8 @@ int multiSlsDetector::acquire() { } if (acquisition_finished != nullptr) { - acquisition_finished(getCurrentProgress(), getRunStatus(), acqFinished_p); + acquisition_finished(getCurrentProgress(), getRunStatus(), + acqFinished_p); } sem_destroy(&sem_newRTAcquisition); @@ -4222,7 +4375,6 @@ void multiSlsDetector::startProcessingThread() { dataProcessingThread = std::thread(&multiSlsDetector::processData, this); } - void multiSlsDetector::processData() { if (setReceiverOnline() == OFFLINE_FLAG) { return; @@ -4237,7 +4389,8 @@ void multiSlsDetector::processData() { // to exit acquire by typing q if (kbhit() != 0) { if (fgetc(stdin) == 'q') { - FILE_LOG(logINFO) << "Caught the command to stop acquisition"; + FILE_LOG(logINFO) + << "Caught the command to stop acquisition"; stopAcquisition(); } } @@ -4282,106 +4435,102 @@ int multiSlsDetector::kbhit() { return FD_ISSET(STDIN_FILENO, &fds); } - - std::vector multiSlsDetector::readPofFile(const std::string &fname) { - FILE_LOG(logDEBUG1) << "Programming FPGA with file name:" << fname; - size_t filesize = 0; - // check if it exists + FILE_LOG(logDEBUG1) << "Programming FPGA with file name:" << fname; + size_t filesize = 0; + // check if it exists - struct stat st; - if (stat(fname.c_str(), &st) != 0) { - throw RuntimeError("Program FPGA: Programming file does not exist"); - } + struct stat st; + if (stat(fname.c_str(), &st) != 0) { + throw RuntimeError("Program FPGA: Programming file does not exist"); + } + // open src + FILE *src = fopen(fname.c_str(), "rb"); + if (src == nullptr) { + throw RuntimeError( + "Program FPGA: Could not open source file for programming: " + + fname); + } + // create temp destination file + char destfname[] = "/tmp/SLS_DET_MCB.XXXXXX"; + int dst = mkstemp(destfname); // create temporary file and open it in r/w + if (dst == -1) { + fclose(src); + throw RuntimeError( + std::string( + "Could not create destination file in /tmp for programming: ") + + destfname); + } - // open src - FILE *src = fopen(fname.c_str(), "rb"); - if (src == nullptr) { - throw RuntimeError("Program FPGA: Could not open source file for programming: " + - fname); - } + // convert src to dst rawbin + FILE_LOG(logDEBUG1) << "Converting " << fname << " to " << destfname; + { + int filepos, x, y, i; + // Remove header (0...11C) + for (filepos = 0; filepos < 0x11C; ++filepos) { + fgetc(src); + } + // Write 0x80 times 0xFF (0...7F) + { + char c = 0xFF; + for (filepos = 0; filepos < 0x80; ++filepos) { + write(dst, &c, 1); + } + } + // Swap bits and write to file + for (filepos = 0x80; filepos < 0x1000000; ++filepos) { + x = fgetc(src); + if (x < 0) { + break; + } + y = 0; + for (i = 0; i < 8; ++i) { + y = y | + (((x & (1 << i)) >> i) << (7 - i)); // This swaps the bits + } + write(dst, &y, 1); + } + if (filepos < 0x1000000) { + throw RuntimeError( + "Could not convert programming file. EOF before end of flash"); + } + } + if (fclose(src) != 0) { + throw RuntimeError("Program FPGA: Could not close source file"); + } + if (close(dst) != 0) { + throw RuntimeError("Program FPGA: Could not close destination file"); + } + FILE_LOG(logDEBUG1) << "File has been converted to " << destfname; - // create temp destination file - char destfname[] = "/tmp/SLS_DET_MCB.XXXXXX"; - int dst = mkstemp(destfname); // create temporary file and open it in r/w - if (dst == -1) { - fclose(src); - throw RuntimeError( - std::string("Could not create destination file in /tmp for programming: ") + - destfname); - } + // loading dst file to memory + FILE *fp = fopen(destfname, "r"); + if (fp == nullptr) { + throw RuntimeError("Program FPGA: Could not open rawbin file"); + } + if (fseek(fp, 0, SEEK_END) != 0) { + throw RuntimeError("Program FPGA: Seek error in rawbin file"); + } + filesize = ftell(fp); + if (filesize <= 0) { + throw RuntimeError("Program FPGA: Could not get length of rawbin file"); + } + rewind(fp); - // convert src to dst rawbin - FILE_LOG(logDEBUG1) << "Converting " << fname << " to " << destfname; - { - int filepos, x, y, i; - // Remove header (0...11C) - for (filepos = 0; filepos < 0x11C; ++filepos) { - fgetc(src); - } - // Write 0x80 times 0xFF (0...7F) - { - char c = 0xFF; - for (filepos = 0; filepos < 0x80; ++filepos) { - write(dst, &c, 1); - } - } - // Swap bits and write to file - for (filepos = 0x80; filepos < 0x1000000; ++filepos) { - x = fgetc(src); - if (x < 0) { - break; - } - y = 0; - for (i = 0; i < 8; ++i) { - y = y | (((x & (1 << i)) >> i) << (7 - i)); // This swaps the bits - } - write(dst, &y, 1); - } - if (filepos < 0x1000000) { - throw RuntimeError("Could not convert programming file. EOF before end of flash"); - } - } - if (fclose(src) != 0) { - throw RuntimeError("Program FPGA: Could not close source file"); - } - if (close(dst) != 0) { - throw RuntimeError("Program FPGA: Could not close destination file"); - } - FILE_LOG(logDEBUG1) << "File has been converted to " << destfname; + std::vector buffer(filesize, 0); + if (fread(buffer.data(), sizeof(char), filesize, fp) != filesize) { + throw RuntimeError("Program FPGA: Could not read rawbin file"); + } - // loading dst file to memory - FILE *fp = fopen(destfname, "r"); - if (fp == nullptr) { - throw RuntimeError("Program FPGA: Could not open rawbin file"); - } - if (fseek(fp, 0, SEEK_END) != 0) { - throw RuntimeError("Program FPGA: Seek error in rawbin file"); - } - filesize = ftell(fp); - if (filesize <= 0) { - throw RuntimeError("Program FPGA: Could not get length of rawbin file"); - } - rewind(fp); - - std::vector buffer(filesize, 0); - if (fread(buffer.data(), sizeof(char), filesize, fp) != filesize) { - throw RuntimeError("Program FPGA: Could not read rawbin file"); - } - - if (fclose(fp) != 0) { - throw RuntimeError("Program FPGA: Could not close destination file after converting"); - } - unlink(destfname); // delete temporary file - FILE_LOG(logDEBUG1) << "Successfully loaded the rawbin file to program memory"; - FILE_LOG(logINFO) << "Read file into memory"; - return buffer; + if (fclose(fp) != 0) { + throw RuntimeError( + "Program FPGA: Could not close destination file after converting"); + } + unlink(destfname); // delete temporary file + FILE_LOG(logDEBUG1) + << "Successfully loaded the rawbin file to program memory"; + FILE_LOG(logINFO) << "Read file into memory"; + return buffer; } - - - - - -