#include "startReflectionReconstruction.h" #include "Function.h" #include "Function2D.h" #include "Function3D.h" #include "Matrix.h" #include "MatlabWriter.h" #include "common/getGeometryInfo.h" #include "common/precalculateChannelList.h" #include "common/dataBlockCreation/getAScanBlockPreprocessed.h" #include "common/dataBlockCreation/removeDataFromArrays.h" #include "log/notify.h" #include "reflectionReconstruction/preprocessData/determineOptimalPulse.h" #include "reflectionReconstruction/reconstructionSAFT/reconstructionSAFT.h" #include "src/reflectionReconstruction/preprocessData/preprocessAScanBlockForReflection.h" #include "config/config.h" #include "log/log.h" #include "CudaEnvInit.h" #include #include #include #include #include using namespace Aurora; using namespace Recon; namespace { std::queue PRODUCER_PROCESSDATAS; std::queue PRODUCER_BLOCKDATAS; std::mutex PRODUCER_MUTEX; std::condition_variable PRODUCER_CONDITION; std::mutex CUSTOMER_MUTEX; std::condition_variable CUSTOMER_CONDITION; } void producerThread( Parser* aParser, const Aurora::Matrix& aMotorPos, const Aurora::Matrix& aSlList, const Aurora::Matrix& aSnList, const Aurora::Matrix& aRlList, const Aurora::Matrix& aRnList, GeometryInfo& aGeom, MeasurementInfo& aExpInfo, PreComputes& aPreComputes) { if(reflectParams::useOptPulse==1 && reflectParams::runReflectionReco) { aPreComputes.sincPeak_ft = determineOptimalPulse(aPreComputes.timeInterval, aExpInfo.expectedAScanLength); } printf(" - channel list"); auto channelList = precalculateChannelList(aRlList, aRnList, aExpInfo, aPreComputes); size_t numScans = aMotorPos.getDataSize() * aSlList.getDataSize() * aSnList.getDataSize() * aRlList.getDataSize() * aRnList.getDataSize(); int numTakenScans = 0,numProcessedScans = 0,numPossibleScans = 0; for(int i=0; i