/** * This function either shows or hides the given QCheckBox, based on the named property * inside the instrument param file. When hidden, the default state will be used to * reset to the "unused" state of the checkbox. * * @param parameterName :: The name of the property to look for inside the current inst param file. * @param checkBox :: The checkbox to set the state of, and to either hide or show based on the current inst. * @param defaultState :: The state to which the checkbox will be set upon hiding it. */ void IndirectDataReduction::setInstSpecificWidget(const std::string & parameterName, QCheckBox * checkBox, QCheckBox::ToggleState defaultState) { // Get access to instrument specific parameters via the loaded empty workspace. std::string instName = m_uiForm.cbInst->currentText().toStdString(); Mantid::API::MatrixWorkspace_sptr input = boost::dynamic_pointer_cast<Mantid::API::MatrixWorkspace>(Mantid::API::AnalysisDataService::Instance().retrieve("__empty_" + instName)); if(input == NULL) return; Mantid::Geometry::Instrument_const_sptr instr = input->getInstrument(); // See if the instrument params file requests that the checkbox be shown to the user. std::vector<std::string> showParams = instr->getStringParameter(parameterName); std::string show = ""; if(!showParams.empty()) show = showParams[0]; if(show == "Show") checkBox->setHidden(false); else { checkBox->setHidden(true); checkBox->setState(defaultState); } }
/** * Provide the collimation length which is associated with the instrument * @param workspace: the input workspace * @returns the collimation length */ double SANSCollimationLengthEstimator::provideCollimationLength( Mantid::API::MatrixWorkspace_sptr workspace) { // If the instrument does not have a correction specified then set the length // to 4 const double defaultLColim = 4.0; auto collimationLengthID = "collimation-length-correction"; if (!workspace->getInstrument()->hasParameter(collimationLengthID)) { g_log.error("Error in SANSCollimtionLengthEstimator: The instrument " "parameter file does not contain a collimation length " "correction," "a default of 4 is provided. Please update the instrument " "parameter file."); return defaultLColim; } // Get the L1 length const V3D samplePos = workspace->getInstrument()->getSample()->getPos(); const V3D sourcePos = workspace->getInstrument()->getSource()->getPos(); const V3D SSD = samplePos - sourcePos; const double L1 = SSD.norm(); auto collimationLengthCorrection = workspace->getInstrument()->getNumberParameter(collimationLengthID); if (workspace->getInstrument()->hasParameter( "special-default-collimation-length-method")) { auto specialCollimationMethod = workspace->getInstrument()->getStringParameter( "special-default-collimation-length-method"); if (specialCollimationMethod[0] == "guide") { try { return getCollimationLengthWithGuides(workspace, L1, collimationLengthCorrection[0]); } catch (std::invalid_argument &ex) { g_log.notice() << ex.what(); g_log.notice() << "SANSCollimationLengthEstimator: Not using any guides"; return L1 - collimationLengthCorrection[0]; } } else { throw std::invalid_argument("Error in SANSCollimationLengthEstimator: " "Unknown special collimation method."); } } return L1 - collimationLengthCorrection[0]; }
/** * Check the input workspace * @param inWS: the input workspace */ void TOFSANSResolutionByPixel::checkInput( Mantid::API::MatrixWorkspace_sptr inWS) { // Make sure that input workspace has an instrument as we rely heavily on // thisa auto inst = inWS->getInstrument(); if (inst->getName().empty()) { throw std::invalid_argument("TOFSANSResolutionByPixel: The input workspace " "does not contain an instrument"); } }
/** * Gets the eFixed value from the workspace using the instrument parameters. * * @param ws Pointer to the workspace * @return eFixed value */ double IndirectTab::getEFixed(Mantid::API::MatrixWorkspace_sptr ws) { Mantid::Geometry::Instrument_const_sptr inst = ws->getInstrument(); if (!inst) throw std::runtime_error("No instrument on workspace"); // Try to get the parameter form the base instrument if (inst->hasParameter("Efixed")) return inst->getNumberParameter("Efixed")[0]; // Try to get it form the analyser component if (inst->hasParameter("analyser")) { std::string analyserName = inst->getStringParameter("analyser")[0]; auto analyserComp = inst->getComponentByName(analyserName); if (analyserComp && analyserComp->hasParameter("Efixed")) return analyserComp->getNumberParameter("Efixed")[0]; } throw std::runtime_error("Instrument has no efixed parameter"); }
std::string getIDFfromWorkspace(Mantid::API::MatrixWorkspace_sptr workspace) { auto instrument = workspace->getInstrument(); auto name = instrument->getFullName(); auto date = workspace->getWorkspaceStartDate(); return workspace->getInstrumentFilename(name, date); }