/** Calculate and show the full (integrated) line, using the latest * integrated workspace. The apply() method must have been called * before calling this. */ void LineViewer::showFull() { if (!m_sliceWS) return; MatrixWorkspace_const_sptr sliceMatrix = boost::dynamic_pointer_cast<const MatrixWorkspace>(m_sliceWS); if (sliceMatrix) { MantidQwtMatrixWorkspaceData curveData(sliceMatrix, 0, false /*not logScale*/); m_fullCurve->setData(curveData); Unit_const_sptr unit = sliceMatrix->getAxis(0)->unit(); std::string title = unit->caption() + " (" + unit->label() + ")"; m_plot->setAxisTitle( QwtPlot::xBottom, QString::fromStdString(title));; title = sliceMatrix->YUnit() + " (" + sliceMatrix->YUnitLabel() + ")"; m_plot->setAxisTitle( QwtPlot::yLeft, QString::fromStdString(title));; } else { MantidQwtIMDWorkspaceData curveData(m_sliceWS, false, VMD(), VMD(), m_lineOptions->getNormalization()); curveData.setPreviewMode(false); curveData.setPlotAxisChoice(m_lineOptions->getPlotAxis()); m_fullCurve->setData(curveData); m_plot->setAxisTitle( QwtPlot::xBottom, QString::fromStdString( curveData.getXAxisLabel() ));; m_plot->setAxisTitle( QwtPlot::yLeft, QString::fromStdString( curveData.getYAxisLabel() ));; } if (m_previewCurve->isVisible()) { m_previewCurve->setVisible(false); m_previewCurve->detach(); m_fullCurve->attach(m_plot); } m_fullCurve->setVisible(true); m_plot->replot(); m_plot->setTitle("Integrated Line Plot"); }
/// Run ConvertUnits as a sub-algorithm to convert to dSpacing MatrixWorkspace_sptr DiffractionFocussing::convertUnitsToDSpacing(const API::MatrixWorkspace_sptr& workspace) { const std::string CONVERSION_UNIT = "dSpacing"; Unit_const_sptr xUnit = workspace->getAxis(0)->unit(); g_log.information() << "Converting units from "<< xUnit->label() << " to " << CONVERSION_UNIT<<".\n"; API::IAlgorithm_sptr childAlg = createSubAlgorithm("ConvertUnits", 0.34, 0.66); childAlg->setProperty("InputWorkspace", workspace); childAlg->setPropertyValue("Target",CONVERSION_UNIT); childAlg->executeAsSubAlg(); return childAlg->getProperty("OutputWorkspace"); }
/** Checks that the input workspace and table have compatible dimensions * @return a map where: Key = string name of the the property; Value = string * describing the problem with the property. */ std::map<std::string, std::string> PhaseQuadMuon::validateInputs() { std::map<std::string, std::string> result; // Check that input ws and table ws have compatible dimensions API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace"); API::ITableWorkspace_const_sptr tabWS = getProperty("PhaseTable"); if (!inputWS) { result["InputWorkspace"] = "InputWorkspace is of Incorrect type. Please " "provide a MatrixWorkspace as the " "InputWorkspace"; return result; } size_t nspec = inputWS->getNumberHistograms(); size_t ndet = tabWS->rowCount(); if (tabWS->columnCount() == 0) { result["PhaseTable"] = "Please provide a non-empty PhaseTable."; } if (nspec != ndet) { result["PhaseTable"] = "PhaseTable must have one row per spectrum"; } // PhaseTable should have three columns: (detector, asymmetry, phase) if (tabWS->columnCount() != 3) { result["PhaseTable"] = "PhaseTable must have three columns"; } // Check units, should be microseconds Unit_const_sptr unit = inputWS->getAxis(0)->unit(); if ((unit->caption() != "Time") || (unit->label().ascii() != "microsecond")) { result["InputWorkspace"] = "InputWorkspace units must be microseconds"; } return result; }
/** Checks that the input workspace and table have compatible dimensions * @return a map where: Key = string name of the the property; Value = string * describing the problem with the property. */ std::map<std::string, std::string> PhaseQuadMuon::validateInputs() { std::map<std::string, std::string> result; // Check that input ws and table ws have compatible dimensions API::MatrixWorkspace_const_sptr inputWS = getProperty("InputWorkspace"); API::ITableWorkspace_const_sptr tabWS = getProperty("PhaseTable"); if (!inputWS) { result["InputWorkspace"] = "InputWorkspace is of Incorrect type. Please " "provide a MatrixWorkspace as the " "InputWorkspace"; return result; } size_t nspec = inputWS->getNumberHistograms(); size_t ndet = tabWS->rowCount(); if (tabWS->columnCount() == 0) { result["PhaseTable"] = "Please provide a non-empty PhaseTable."; } if (nspec != ndet) { result["PhaseTable"] = "PhaseTable must have one row per spectrum"; } // PhaseTable should have three columns: (detector, asymmetry, phase) if (tabWS->columnCount() != 3) { result["PhaseTable"] = "PhaseTable must have three columns"; } auto names = tabWS->getColumnNames(); for (auto &name : names) { std::transform(name.begin(), name.end(), name.begin(), ::tolower); } int phaseCount = 0; int asymmetryCount = 0; for (const std::string &name : names) { for (const std::string &goodName : phaseNames) { if (name == goodName) { phaseCount += 1; } } for (const std::string &goodName : asymmNames) { if (name == goodName) { asymmetryCount += 1; } } } if (phaseCount == 0) { result["PhaseTable"] = "PhaseTable needs phases column"; } if (asymmetryCount == 0) { result["PhaseTable"] = "PhaseTable needs a asymmetry/asymm/asym column"; } if (phaseCount > 1) { result["PhaseTable"] = "PhaseTable has " + std::to_string(phaseCount) + " phase columns"; } if (asymmetryCount > 1) { result["PhaseTable"] = "PhaseTable has " + std::to_string(asymmetryCount) + " asymmetry/asymm/asym columns"; } // Check units, should be microseconds Unit_const_sptr unit = inputWS->getAxis(0)->unit(); if ((unit->caption() != "Time") || (unit->label().ascii() != "microsecond")) { result["InputWorkspace"] = "InputWorkspace units must be microseconds"; } return result; }