28 std::dynamic_pointer_cast<Mantid::DataObjects::TableWorkspace>(
30 timeZeroTable->addColumn(
"double",
"time zero");
32 for (
size_t specNum = 0; specNum < numSpec; ++specNum) {
34 row << timeZeros[specNum];
42 : m_logger(
g_log), m_filename(
std::move(filename)), m_nexusLoader(nexusLoader) {}
54 auto &run = localWorkspace.
run();
55 std::string mainFieldDirection = run.
getLogData(
"main_field_direction")->
value();
59 return idfGrouping->toTable();
60 }
catch (
const std::runtime_error &) {
61 auto dummyGrouping = std::make_shared<API::Grouping>();
62 if (instrument->getNumberDetectors() != 0) {
67 dummyGrouping->groups.emplace_back(std::move(numDetectors));
68 dummyGrouping->groupNames.emplace_back(
"all");
70 return dummyGrouping->toTable();
80 std::vector<detid_t> loadedDetectors;
81 loadedDetectors.reserve(numberOfSpectra);
82 for (
size_t spectraIndex = 0; spectraIndex < numberOfSpectra; spectraIndex++) {
85 loadedDetectors.emplace_back(*detIdSet.begin());
87 return loadedDetectors;
96std::optional<DataObjects::TableWorkspace_sptr>
98 const std::optional<std::vector<detid_t>> &grouping)
const {
103 auto groupingIDs = *grouping;
104 if (detectorsLoaded.size() != groupingIDs.size()) {
105 m_logger.
information() <<
"The number of groupings in the provided Nexus file (" << groupingIDs.size()
106 <<
") does not match the number of loaded detectors (" << detectorsLoaded.size() <<
").";
110 std::map<detid_t, std::vector<detid_t>> groupingMap;
111 for (
size_t i = 0; i < detectorsLoaded.size(); ++i) {
113 groupingMap[groupingIDs[i]].emplace_back(detectorsLoaded[i]);
116 auto detectorGroupingTable = std::dynamic_pointer_cast<DataObjects::TableWorkspace>(
118 detectorGroupingTable->addColumn(
"vector_int",
"Detectors");
119 for (
const auto &
group : groupingMap) {
120 if (
group.first != 0) {
122 newRow <<
group.second;
125 return detectorGroupingTable;
134 const std::vector<double> &deadTimes)
const {
135 auto deadTimesTable = std::dynamic_pointer_cast<DataObjects::TableWorkspace>(
138 deadTimesTable->addColumn(
"int",
"spectrum");
139 deadTimesTable->addColumn(
"double",
"dead-time");
141 for (
size_t i = 0; i < detectorsLoaded.size(); i++) {
143 row << detectorsLoaded[i] << deadTimes[i];
146 return deadTimesTable;
const Run & run() const
Run details object access.
Geometry::Instrument_const_sptr getInstrument() const
Returns the parameterized instrument.
GroupingLoader : Loads instrument grouping from IDF file.
std::shared_ptr< Grouping > getDummyGrouping()
Returns a "dummy" grouping of a single group with all the detectors in it.
std::shared_ptr< Grouping > getGroupingFromIDF() const
Load the grouping from the instrument's IDF.
const std::set< detid_t > & getDetectorIDs() const
Get a const reference to the detector IDs set.
Kernel::Property * getLogData(const std::string &name) const
Access a single log entry.
TableRow represents a row in a TableWorkspace.
Kernel::Logger & m_logger
std::optional< DataObjects::TableWorkspace_sptr > createDetectorGroupingTable(const std::vector< detid_t > &specToLoad, const std::optional< std::vector< detid_t > > &grouping) const
Creates Detector Grouping Table .
DataObjects::TableWorkspace_sptr createDeadTimeTable(const std::vector< detid_t > &detectorsLoaded, const std::vector< double > &deadTimes) const
Creates the deadtime table for the loaded detectors .
std::vector< detid_t > getLoadedDetectorsFromWorkspace(const DataObjects::Workspace2D &localWorkspace) const
Determines the detectors loaded in the input workspace.
API::Workspace_sptr loadDefaultDetectorGrouping(const DataObjects::Workspace2D &localWorkspace) const
Loads default detector grouping, if this isn't present return dummy grouping.
LoadMuonStrategy(Kernel::Logger &g_log, std::string filename, LoadMuonNexusV2NexusHelper &nexusLoader)
Concrete workspace implementation.
std::size_t getNumberHistograms() const override
Returns the histogram number.
Histogram1D & getSpectrum(const size_t index) override
Return the underlying ISpectrum ptr at the given workspace index.
The Logger class is in charge of the publishing messages from the framework through various channels.
void information(const std::string &msg)
Logs at information level.
virtual std::string value() const =0
Returns the value of the property as a string.
static T & Instance()
Return a reference to the Singleton instance, creating it if it does not already exist Creation is do...
std::shared_ptr< Workspace > Workspace_sptr
shared pointer to Mantid::API::Workspace
Kernel::Logger g_log("ExperimentInfo")
static logger object
DataObjects::TableWorkspace_sptr createTimeZeroTable(const size_t numSpec, const std::vector< double > &timeZeros)
Creates a timezero table for the loaded detectors.
std::shared_ptr< TableWorkspace > TableWorkspace_sptr
shared pointer to Mantid::DataObjects::TableWorkspace
std::string to_string(const wide_integer< Bits, Signed > &n)