/** Log the run details from the file * @param localWorkspace :: The workspace details to use */ void LoadMuonNexus1::loadRunDetails(DataObjects::Workspace2D_sptr localWorkspace) { API::Run &runDetails = localWorkspace->mutableRun(); runDetails.addProperty("run_title", localWorkspace->getTitle(), true); int numSpectra = static_cast<int>(localWorkspace->getNumberHistograms()); runDetails.addProperty("nspectra", numSpectra); NXRoot root(m_filename); try { std::string start_time = root.getString("run/start_time"); runDetails.addProperty("run_start", start_time); } catch (std::runtime_error &) { g_log.warning("run/start_time is not available, run_start log not added."); } try { std::string stop_time = root.getString("run/stop_time"); runDetails.addProperty("run_end", stop_time); } catch (std::runtime_error &) { g_log.warning("run/stop_time is not available, run_end log not added."); } try { std::string dur = root.getString("run/duration"); runDetails.addProperty("dur", dur); runDetails.addProperty("durunits", 1); // 1 means second here runDetails.addProperty("dur_secs", dur); } catch (std::runtime_error &) { g_log.warning("run/duration is not available, dur log not added."); } // Get sample parameters NXEntry runSample = root.openEntry("run/sample"); if (runSample.containsDataSet("temperature")) { float temperature = runSample.getFloat("temperature"); runDetails.addProperty("sample_temp", static_cast<double>(temperature)); } if (runSample.containsDataSet("magnetic_field")) { float magn_field = runSample.getFloat("magnetic_field"); runDetails.addProperty("sample_magn_field", static_cast<double>(magn_field)); } }
/** Load logs from Nexus file. Logs are expected to be in * /run/sample group of the file. * @param ws :: The workspace to load the logs to. * @param entry :: The Nexus entry * @param period :: The period of this workspace */ void LoadMuonNexus2::loadLogs(API::MatrixWorkspace_sptr ws, NXEntry &entry, int period) { // Avoid compiler warning (void)period; std::string start_time = entry.getString("start_time"); std::string sampleName = entry.getString("sample/name"); NXMainClass runlogs = entry.openNXClass<NXMainClass>("sample"); ws->mutableSample().setName(sampleName); for (std::vector<NXClassInfo>::const_iterator it = runlogs.groups().begin(); it != runlogs.groups().end(); ++it) { NXLog nxLog = runlogs.openNXLog(it->nxname); Kernel::Property *logv = nxLog.createTimeSeries(start_time); if (!logv) continue; ws->mutableRun().addLogData(logv); } ws->setTitle(entry.getString("title")); if (entry.containsDataSet("notes")) { ws->setComment(entry.getString("notes")); } std::string run_num = std::to_string(entry.getInt("run_number")); // The sample is left to delete the property ws->mutableRun().addLogData( new PropertyWithValue<std::string>("run_number", run_num)); ws->populateInstrumentParameters(); }