-
Edward Brown authoredEdward Brown authored
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
ReflMeasureTransferStrategy.cpp 5.46 KiB
#include "ReflMeasureTransferStrategy.h"
#include "MantidKernel/ICatalogInfo.h"
#include "MantidKernel/ProgressBase.h"
#include "MantidKernel/UserCatalogInfo.h"
#include "ReflMeasurementItemSource.h"
#include "ReflTableSchema.h"
#include <boost/regex.hpp>
#include <limits>
#include <map>
#include <memory>
#include <set>
#include <sstream>
#include <utility>
#include <vector>
using namespace Mantid::Kernel;
namespace MantidQt {
namespace CustomInterfaces {
//----------------------------------------------------------------------------------------------
/** Constructor
*/
ReflMeasureTransferStrategy::ReflMeasureTransferStrategy(
std::unique_ptr<ICatalogInfo> catInfo,
std::unique_ptr<ReflMeasurementItemSource> measurementItemSource)
: m_catInfo(std::move(catInfo)),
m_measurementItemSource(std::move(measurementItemSource)) {}
ReflMeasureTransferStrategy::ReflMeasureTransferStrategy(
const ReflMeasureTransferStrategy &other)
: m_catInfo(other.m_catInfo->clone()),
m_measurementItemSource(other.m_measurementItemSource->clone())
{}
//----------------------------------------------------------------------------------------------
/** Destructor
*/
ReflMeasureTransferStrategy::~ReflMeasureTransferStrategy() {}
TransferResults
MantidQt::CustomInterfaces::ReflMeasureTransferStrategy::transferRuns(
SearchResultMap &searchResults, Mantid::Kernel::ProgressBase &progress) {
using VecSameMeasurement = std::vector<MeasurementItem>;
using MapGroupedMeasurement =
std::map<MeasurementItem::IDType, VecSameMeasurement>;
// table-like output for successful runs
std::vector<std::map<std::string, std::string>> runs;
// table-like output for unsuccessful runs containing
// row number and reason why unsuccessful.
// This will be used mainly for highlighting unsuccessful runs
// in a tooltip.
std::vector<std::map<std::string, std::string>> errors;
// Create TransferResults as a holder for both successful/unsuccessful
// runs.
TransferResults results(runs, errors);
MapGroupedMeasurement mapOfMeasurements;
for (auto it = searchResults.begin(); it != searchResults.end(); ++it) {
const auto location = it->second.location;
const auto fuzzyName = it->first;
const auto definedPath = m_catInfo->transformArchivePath(location);
// This is where we read the meta data.
MeasurementItem metaData =
m_measurementItemSource->obtain(definedPath, fuzzyName);