Skip to content

Commit

Permalink
Fix bug with separated monitor spectra.
Browse files Browse the repository at this point in the history
The workspace factory as being passed the wrong workspace to clone from.
Refs #11486
  • Loading branch information
martyngigg committed Apr 8, 2015
1 parent af16c69 commit 1c3ebd9
Show file tree
Hide file tree
Showing 2 changed files with 40 additions and 13 deletions.
35 changes: 22 additions & 13 deletions Code/Mantid/Framework/DataHandling/src/LoadISISNexus2.cpp
Expand Up @@ -314,14 +314,15 @@ void LoadISISNexus2::exec() {
std::string wsName = getPropertyValue("OutputWorkspace");
if (m_monBlockInfo.numberOfSpectra > 0) {
x_length = m_monBlockInfo.numberOfChannels + 1;
auto monitor_workspace =
// reset the size of the period free workspace to the monitor size
period_free_workspace =
boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
WorkspaceFactory::Instance().create(
period_free_workspace, m_monBlockInfo.numberOfSpectra, x_length,
m_monBlockInfo.numberOfChannels));

ISISRunLogs monLogCreator(monitor_workspace->run(),
m_detBlockInfo.numberOfPeriods);
period_free_workspace, m_monBlockInfo.numberOfSpectra,
x_length, m_monBlockInfo.numberOfChannels));
auto monitor_workspace =
boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
WorkspaceFactory::Instance().create(period_free_workspace));

m_spectraBlocks.clear();
m_specInd2specNum_map.clear();
Expand All @@ -340,11 +341,14 @@ void LoadISISNexus2::exec() {
int64_t firstentry = (m_entrynumber > 0) ? m_entrynumber : 1;
loadPeriodData(firstentry, entry, monitor_workspace, true);
local_workspace->setMonitorWorkspace(monitor_workspace);

ISISRunLogs monLogCreator(monitor_workspace->run(),
m_detBlockInfo.numberOfPeriods);
monLogCreator.addPeriodLogs(1, monitor_workspace->mutableRun());

const std::string monitorPropBase = "MonitorWorkspace";
const std::string monitorWsNameBase = wsName + "_monitors";
if(m_detBlockInfo.numberOfPeriods > 1 && m_entrynumber == 0) {
if (m_detBlockInfo.numberOfPeriods > 1 && m_entrynumber == 0) {
WorkspaceGroup_sptr monitor_group(new WorkspaceGroup);
monitor_group->setTitle(monitor_workspace->getTitle());

Expand All @@ -353,18 +357,23 @@ void LoadISISNexus2::exec() {
os << "_" << p;
m_progress->report("Loading period " + os.str());
if (p > 1) {
monitor_workspace = boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
WorkspaceFactory::Instance().create(period_free_workspace));
loadPeriodData(p, entry, monitor_workspace, m_load_selected_spectra);
monitor_workspace =
boost::dynamic_pointer_cast<DataObjects::Workspace2D>(
WorkspaceFactory::Instance().create(period_free_workspace));
loadPeriodData(p, entry, monitor_workspace,
m_load_selected_spectra);
monLogCreator.addPeriodLogs(p, monitor_workspace->mutableRun());
// Check consistency of logs data for multi-period workspaces and raise
// Check consistency of logs data for multi-period workspaces and
// raise
// warnings where necessary.
validateMultiPeriodLogs(monitor_workspace);
auto data_ws = boost::static_pointer_cast<API::MatrixWorkspace>(wksp_group->getItem(p-1));
auto data_ws = boost::static_pointer_cast<API::MatrixWorkspace>(
wksp_group->getItem(p - 1));
data_ws->setMonitorWorkspace(monitor_workspace);
}
declareProperty(new WorkspaceProperty<Workspace>(
monitorPropBase + os.str(), monitorWsNameBase + os.str(), Direction::Output));
monitorPropBase + os.str(), monitorWsNameBase + os.str(),
Direction::Output));
monitor_group->addWorkspace(monitor_workspace);
setProperty(monitorPropBase + os.str(),
boost::static_pointer_cast<Workspace>(monitor_workspace));
Expand Down
18 changes: 18 additions & 0 deletions Code/Mantid/Framework/DataHandling/test/LoadISISNexusTest.h
Expand Up @@ -673,6 +673,24 @@ class LoadISISNexusTest : public CxxTest::TestSuite
TS_ASSERT_DELTA(12563.0, monWS0->readY(0)[1], 1e-08);
TS_ASSERT_DELTA(std::sqrt(12563.0), monWS0->readE(0)[1], 1e-08);
TS_ASSERT_EQUALS(monWS0->getSpectrum(0)->getSpectrumNo(),1);
TS_ASSERT_EQUALS(monWS0->getSpectrum(2)->getSpectrumNo(),3);

auto monWS1 = boost::dynamic_pointer_cast<MatrixWorkspace>(monGroup->getItem(1));
TS_ASSERT_EQUALS(1000, monWS1->blocksize());
TS_ASSERT_EQUALS(3, monWS1->getNumberHistograms());
TS_ASSERT_DELTA(105, monWS1->readX(1)[1], 1e-08);
TS_ASSERT_DELTA(12595.0, monWS1->readY(0)[1], 1e-08);
TS_ASSERT_DELTA(std::sqrt(12595.0), monWS1->readE(0)[1], 1e-08);
TS_ASSERT_EQUALS(monWS1->getSpectrum(0)->getSpectrumNo(),1);
TS_ASSERT_EQUALS(monWS1->getSpectrum(2)->getSpectrumNo(),3);

// Same number of logs
const auto & monPeriod1Run = monWS0->run();
const auto & monPeriod2Run = monWS1->run();
TS_ASSERT_EQUALS(monPeriod1Run.getLogData().size(), monPeriod2Run.getLogData().size() );
TS_ASSERT(monPeriod1Run.hasProperty("period 1"))
TS_ASSERT(monPeriod2Run.hasProperty("period 2"))

}

};
Expand Down

0 comments on commit 1c3ebd9

Please sign in to comment.