/** * Apply any instrument adjustments from the file * @param filename :: The file to take the positions */ void CreateSimulationWorkspace::adjustInstrument(const std::string &filename) { // If requested update the instrument to positions in the raw file const Geometry::ParameterMap &pmap = m_outputWS->instrumentParameters(); Geometry::Instrument_const_sptr instrument = m_outputWS->getInstrument(); boost::shared_ptr<Geometry::Parameter> updateDets = pmap.get(instrument->getComponentID(), "det-pos-source"); if (!updateDets) return; // No tag, use IDF std::string value = updateDets->value<std::string>(); if (value.substr(0, 8) == "datafile") { IAlgorithm_sptr updateInst = createChildAlgorithm("UpdateInstrumentFromFile", 0.75, 1.0); updateInst->setProperty<MatrixWorkspace_sptr>("Workspace", m_outputWS); updateInst->setPropertyValue("Filename", filename); if (value == "datafile-ignore-phi") { updateInst->setProperty("IgnorePhi", true); g_log.information("Detector positions in IDF updated with positions in " "the data file except for the phi values"); } else { g_log.information( "Detector positions in IDF updated with positions in the data file"); } // We want this to throw if it fails to warn the user that the information // is not correct. updateInst->execute(); } }
Peak PeakHKLErrors::createNewPeak(const Geometry::IPeak &peak_old, Geometry::Instrument_sptr instrNew, double T0, double L0) { Geometry::Instrument_const_sptr inst = peak_old.getInstrument(); if (inst->getComponentID() != instrNew->getComponentID()) { g_log.error("All peaks must have the same instrument"); throw std::invalid_argument("All peaks must have the same instrument"); } double T = peak_old.getTOF() + T0; int ID = peak_old.getDetectorID(); Kernel::V3D hkl = peak_old.getHKL(); // peak_old.setDetectorID(ID); //set det positions Peak peak(instrNew, ID, peak_old.getWavelength(), hkl, peak_old.getGoniometerMatrix()); Wavelength wl; wl.initialize(L0, peak.getL2(), peak.getScattering(), 0, peak_old.getInitialEnergy(), 0.0); peak.setWavelength(wl.singleFromTOF(T)); peak.setIntensity(peak_old.getIntensity()); peak.setSigmaIntensity(peak_old.getSigmaIntensity()); peak.setRunNumber(peak_old.getRunNumber()); peak.setBinCount(peak_old.getBinCount()); //!!!peak.setDetectorID(ID); return peak; }