void LoadSINQFocus::loadRunDetails(NXEntry & entry) { API::Run & runDetails = m_localWorkspace->mutableRun(); // int runNum = entry.getInt("run_number"); // std::string run_num = boost::lexical_cast<std::string>(runNum); // runDetails.addProperty("run_number", run_num); std::string start_time = entry.getString("start_time"); //start_time = getDateTimeInIsoFormat(start_time); runDetails.addProperty("run_start", start_time); std::string end_time = entry.getString("end_time"); //end_time = getDateTimeInIsoFormat(end_time); runDetails.addProperty("run_end", end_time); double wavelength = entry.getFloat(m_instrumentPath + "/monochromator/lambda"); runDetails.addProperty<double>("wavelength", wavelength); double energy = entry.getFloat(m_instrumentPath + "/monochromator/energy"); runDetails.addProperty<double>("Ei", energy, true); //overwrite std::string title = entry.getString("title"); runDetails.addProperty("title", title); m_localWorkspace->setTitle(title); }
/** Execute the algorithm. */ void LoadILLReflectometry::exec() { // Retrieve filename std::string filenameData = getPropertyValue("Filename"); // open the root node NeXus::NXRoot dataRoot(filenameData); NXEntry firstEntry = dataRoot.openFirstEntry(); // Load Monitor details: n. monitors x monitor contents std::vector<std::vector<int>> monitorsData = loadMonitors(firstEntry); // Load Data details (number of tubes, channels, etc) loadDataDetails(firstEntry); std::string instrumentPath = m_loader.findInstrumentNexusPath(firstEntry); setInstrumentName(firstEntry, instrumentPath); initWorkSpace(firstEntry, monitorsData); g_log.debug("Building properties..."); loadNexusEntriesIntoProperties(filenameData); g_log.debug("Loading data..."); loadDataIntoTheWorkSpace(firstEntry, monitorsData); // load the instrument from the IDF if it exists g_log.debug("Loading instrument definition..."); runLoadInstrument(); // 1) Move // Get distance and tilt angle stored in nexus file // Mantid way //// auto angleProp = /// dynamic_cast<PropertyWithValue<double>*>(m_localWorkspace->run().getProperty("dan.value")); // Nexus way double angle = firstEntry.getFloat("instrument/dan/value"); // detector angle in degrees double distance = firstEntry.getFloat( "instrument/det/value"); // detector distance in millimeter distance /= 1000.0; // convert to meter g_log.debug() << "Moving detector at angle " << angle << " and distance " << distance << std::endl; placeDetector(distance, angle); // Set the channel width property auto channel_width = dynamic_cast<PropertyWithValue<double> *>( m_localWorkspace->run().getProperty("monitor1.time_of_flight_0")); m_localWorkspace->mutableRun().addProperty<double>( "channel_width", *channel_width, true); // overwrite // Set the output workspace property setProperty("OutputWorkspace", m_localWorkspace); }
/** 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 data about the Experiment. * * TODO: This is very incomplete. In ISIS they much more info in the nexus file than ILL. * * @param entry :: The Nexus entry */ void LoadSINQFocus::loadExperimentDetails(NXEntry & entry) { std::string name = boost::lexical_cast<std::string>( entry.getFloat("sample/name")); m_localWorkspace->mutableSample().setName(name); }
void LoadLLB::loadRunDetails(NXEntry &entry) { API::Run &runDetails = m_localWorkspace->mutableRun(); // int runNum = entry.getInt("run_number"); // std::string run_num = boost::lexical_cast<std::string>(runNum); // runDetails.addProperty("run_number", run_num); std::string start_time = entry.getString("start_time"); // start_time = getDateTimeInIsoFormat(start_time); runDetails.addProperty("run_start", start_time); std::string end_time = entry.getString("end_time"); // end_time = getDateTimeInIsoFormat(end_time); runDetails.addProperty("run_end", end_time); double wavelength = entry.getFloat("nxbeam/incident_wavelength"); runDetails.addProperty<double>("wavelength", wavelength); double energy = m_loader.calculateEnergy(wavelength); runDetails.addProperty<double>("Ei", energy, true); // overwrite std::string title = entry.getString("title"); runDetails.addProperty("title", title); m_localWorkspace->setTitle(title); }
/** * Load data about the run * @param local_workspace :: The workspace to load the run information in to * @param entry :: The Nexus entry */ void LoadISISNexus2::loadRunDetails(DataObjects::Workspace2D_sptr local_workspace, NXEntry & entry) { API::Run & runDetails = local_workspace->mutableRun(); // Charge is stored as a float m_proton_charge = static_cast<double>(entry.getFloat("proton_charge")); runDetails.setProtonCharge(m_proton_charge); std::string run_num = boost::lexical_cast<std::string>(entry.getInt("run_number")); runDetails.addProperty("run_number", run_num); // // Some details are only stored in the VMS compatability block so we'll pull everything from there // for consistency NXClass vms_compat = entry.openNXGroup("isis_vms_compat"); // Run header NXChar char_data = vms_compat.openNXChar("HDR"); char_data.load(); runDetails.addProperty("run_header", std::string(char_data(),80)); // Data details on run not the workspace runDetails.addProperty("nspectra", static_cast<int>(m_numberOfSpectraInFile)); runDetails.addProperty("nchannels", static_cast<int>(m_numberOfChannelsInFile)); runDetails.addProperty("nperiods", static_cast<int>(m_numberOfPeriodsInFile)); // RPB struct info NXInt rpb_int = vms_compat.openNXInt("IRPB"); rpb_int.load(); runDetails.addProperty("dur", rpb_int[0]); // actual run duration runDetails.addProperty("durunits", rpb_int[1]); // scaler for above (1=seconds) runDetails.addProperty("dur_freq", rpb_int[2]); // testinterval for above (seconds) runDetails.addProperty("dmp", rpb_int[3]); // dump interval runDetails.addProperty("dmp_units", rpb_int[4]); // scaler for above runDetails.addProperty("dmp_freq", rpb_int[5]); // interval for above runDetails.addProperty("freq", rpb_int[6]); // 2**k where source frequency = 50 / 2**k // Now double data NXFloat rpb_dbl = vms_compat.openNXFloat("RRPB"); rpb_dbl.load(); runDetails.addProperty("gd_prtn_chrg", static_cast<double>(rpb_dbl[7])); // good proton charge (uA.hour) runDetails.addProperty("tot_prtn_chrg", static_cast<double>(rpb_dbl[8])); // total proton charge (uA.hour) runDetails.addProperty("goodfrm",rpb_int[9]); // good frames runDetails.addProperty("rawfrm", rpb_int[10]); // raw frames runDetails.addProperty("dur_wanted", rpb_int[11]); // requested run duration (units as for "duration" above) runDetails.addProperty("dur_secs", rpb_int[12]); // actual run duration in seconds runDetails.addProperty("mon_sum1", rpb_int[13]); // monitor sum 1 runDetails.addProperty("mon_sum2", rpb_int[14]); // monitor sum 2 runDetails.addProperty("mon_sum3",rpb_int[15]); // monitor sum 3 // End date and time is stored separately in ISO format in the "raw_data1/endtime" class char_data = entry.openNXChar("end_time"); char_data.load(); std::string end_time_iso = std::string(char_data(), 19); runDetails.addProperty("run_end", end_time_iso); char_data = entry.openNXChar("start_time"); char_data.load(); std::string start_time_iso = std::string(char_data(), 19); runDetails.addProperty("run_start", start_time_iso); runDetails.addProperty("rb_proposal",rpb_int[21]); // RB (proposal) number vms_compat.close(); }
/** * Load data about the run * @param local_workspace :: The workspace to load the run information in to * @param entry :: The Nexus entry */ void LoadISISNexus2::loadRunDetails(DataObjects::Workspace2D_sptr &local_workspace, NXEntry &entry) { API::Run &runDetails = local_workspace->mutableRun(); // Charge is stored as a float m_proton_charge = static_cast<double>(entry.getFloat("proton_charge")); runDetails.setProtonCharge(m_proton_charge); std::string run_num = boost::lexical_cast<std::string>(entry.getInt("run_number")); runDetails.addProperty("run_number", run_num); // // Some details are only stored in the VMS comparability block so we'll pull // everything from there // for consistency NXClass vms_compat = entry.openNXGroup("isis_vms_compat"); // Run header NXChar char_data = vms_compat.openNXChar("HDR"); char_data.load(); // Space-separate the fields char *nxsHdr = char_data(); char header[86] = {}; const size_t byte = sizeof(char); const char fieldSep(' '); size_t fieldWidths[7] = {3, 5, 20, 24, 12, 8, 8}; char *srcStart = nxsHdr; char *destStart = header; for (size_t i = 0; i < 7; ++i) { size_t width = fieldWidths[i]; memcpy(destStart, srcStart, width * byte); if (i < 6) // no space after last field { srcStart += width; destStart += width; memset(destStart, fieldSep, byte); // insert separator destStart += 1; } } runDetails.addProperty("run_header", std::string(header, header + 86)); // Data details on run not the workspace runDetails.addProperty("nspectra", static_cast<int>(m_loadBlockInfo.numberOfSpectra)); runDetails.addProperty("nchannels", static_cast<int>(m_loadBlockInfo.numberOfChannels)); runDetails.addProperty("nperiods", static_cast<int>(m_loadBlockInfo.numberOfPeriods)); // RPB struct info NXInt rpb_int = vms_compat.openNXInt("IRPB"); rpb_int.load(); runDetails.addProperty("dur", rpb_int[0]); // actual run duration runDetails.addProperty("durunits", rpb_int[1]); // scaler for above (1=seconds) runDetails.addProperty("dur_freq", rpb_int[2]); // testinterval for above (seconds) runDetails.addProperty("dmp", rpb_int[3]); // dump interval runDetails.addProperty("dmp_units", rpb_int[4]); // scaler for above runDetails.addProperty("dmp_freq", rpb_int[5]); // interval for above runDetails.addProperty("freq", rpb_int[6]); // 2**k where source frequency = 50 / 2**k // Now double data NXFloat rpb_dbl = vms_compat.openNXFloat("RRPB"); rpb_dbl.load(); runDetails.addProperty( "gd_prtn_chrg", static_cast<double>(rpb_dbl[7])); // good proton charge (uA.hour) runDetails.addProperty( "tot_prtn_chrg", static_cast<double>(rpb_dbl[8])); // total proton charge (uA.hour) runDetails.addProperty("goodfrm", rpb_int[9]); // good frames runDetails.addProperty("rawfrm", rpb_int[10]); // raw frames runDetails.addProperty( "dur_wanted", rpb_int[11]); // requested run duration (units as for "duration" above) runDetails.addProperty("dur_secs", rpb_int[12]); // actual run duration in seconds runDetails.addProperty("mon_sum1", rpb_int[13]); // monitor sum 1 runDetails.addProperty("mon_sum2", rpb_int[14]); // monitor sum 2 runDetails.addProperty("mon_sum3", rpb_int[15]); // monitor sum 3 // End date and time is stored separately in ISO format in the // "raw_data1/endtime" class char_data = entry.openNXChar("end_time"); char_data.load(); std::string end_time_iso = std::string(char_data(), 19); runDetails.addProperty("run_end", end_time_iso); char_data = entry.openNXChar("start_time"); char_data.load(); std::string start_time_iso = std::string(char_data(), 19); runDetails.addProperty("run_start", start_time_iso); runDetails.addProperty("rb_proposal", rpb_int[21]); // RB (proposal) number vms_compat.close(); }