/** 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(); }
/** Execute the algorithm. */ void CalculateDIFC::exec() { DataObjects::OffsetsWorkspace_const_sptr offsetsWs = getProperty("OffsetsWorkspace"); API::ITableWorkspace_const_sptr calibWs = getProperty("CalibrationWorkspace"); API::MatrixWorkspace_sptr inputWs = getProperty("InputWorkspace"); API::MatrixWorkspace_sptr outputWs = getProperty("OutputWorkspace"); if ((!bool(inputWs == outputWs)) || (!bool(boost::dynamic_pointer_cast<SpecialWorkspace2D>(outputWs)))) { outputWs = boost::dynamic_pointer_cast<MatrixWorkspace>( boost::make_shared<SpecialWorkspace2D>(inputWs->getInstrument())); outputWs->setTitle("DIFC workspace"); } // convert to actual type being used DataObjects::SpecialWorkspace2D_sptr outputSpecialWs = boost::dynamic_pointer_cast<DataObjects::SpecialWorkspace2D>(outputWs); API::Progress progress(this, 0.0, 1.0, inputWs->getNumberHistograms()); if (bool(calibWs)) { calculateFromTable(progress, *outputSpecialWs, *calibWs); } else { // this method handles calculating from instrument geometry as well const auto &detectorInfo = inputWs->detectorInfo(); calculateFromOffset(progress, *outputSpecialWs, offsetsWs.get(), detectorInfo); } setProperty("OutputWorkspace", outputWs); }