From e4558ea6ab9740757c30d2b57f106d0b6a7b69e2 Mon Sep 17 00:00:00 2001 From: Raquel Alvarez Banos <raquel.alvarez.banos@gmail.com> Date: Mon, 3 Nov 2014 11:24:26 +0000 Subject: [PATCH] Public static LoadFullprofResolution code Re #9380 --- .../LoadFullprofResolution.h | 72 +++++++++---------- .../src/LoadFullprofResolution.cpp | 28 ++++---- 2 files changed, 52 insertions(+), 48 deletions(-) diff --git a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFullprofResolution.h b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFullprofResolution.h index 989812493da..3ea47f5d2c5 100644 --- a/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFullprofResolution.h +++ b/Code/Mantid/Framework/DataHandling/inc/MantidDataHandling/LoadFullprofResolution.h @@ -55,6 +55,42 @@ namespace Mantid virtual const std::string summary() const {return "Load Fullprof's resolution (.irf) file to one or multiple TableWorkspace(s) and/or where this is supported." " See description section, translate fullprof resolution fitting parameter into Mantid equivalent fitting parameters.";} + /// Get row numbers of the parameters in the table workspace + static void getTableRowNumbers(const API::ITableWorkspace_sptr & tablews, std::map<std::string, size_t>& parammap); + + /// Put parameters into a matrix workspace + static void putParametersIntoWorkspace( const API::Column_const_sptr, API::MatrixWorkspace_sptr ws, int profNumber, std::string & parameterXMLString); + + /// Add an Ikeda-Carpenter PV ALFBE parameter + static void addALFBEParameter(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent, const std::string& paramName); + + /// Add set of Ikeda-Carpenter PV Sigma parameters + static void addSigmaParameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); + + /// Add set of Ikeda-Carpenter PV Gamma parameters + static void addGammaParameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); + + /// Add set of BackToBackExponential S parameters + static void addBBX_S_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); + + /// Add set of BackToBackExponential A parameters + static void addBBX_A_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); + + /// Add set of BackToBackExponential B parameters + static void addBBX_B_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); + + /// Get value for XML eq attribute for parameter + static std::string getXMLEqValue( const API::Column_const_sptr, const std::string& name ); + + /// Get value for XML eq attribute for squared parameter + static std::string getXMLSquaredEqValue( const API::Column_const_sptr column, const std::string& name ); + + // Translate a parameter name from as it appears in the table workspace to its name in the XML file + static std::string getXMLParameterName( const std::string& name ); + + /// Place to store the row numbers + static std::map<std::string, size_t> m_rowNumbers; + private: /// Implement abstract Algorithm methods void init(); @@ -94,42 +130,6 @@ namespace Mantid /// Create Bank to Workspace Correspondence void createBankToWorkspaceMap ( const std::vector<int>& banks, const std::vector<int>& workspaces, std::map< int, size_t>& WorkpsaceOfBank ); - /// Put parameters into a matrix workspace - void putParametersIntoWorkspace( const API::Column_const_sptr, API::MatrixWorkspace_sptr ws, int profNumber); - - /// Add an Ikeda-Carpenter PV ALFBE parameter - void addALFBEParameter(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent, const std::string& paramName); - - /// Add set of Ikeda-Carpenter PV Sigma parameters - void addSigmaParameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); - - /// Add set of Ikeda-Carpenter PV Gamma parameters - void addGammaParameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); - - /// Add set of BackToBackExponential S parameters - void addBBX_S_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); - - /// Add set of BackToBackExponential A parameters - void addBBX_A_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); - - /// Add set of BackToBackExponential B parameters - void addBBX_B_Parameters(const API::Column_const_sptr, Poco::XML::Document* mDoc, Poco::XML::Element* parent ); - - /// Get value for XML eq attribute for parameter - std::string getXMLEqValue( const API::Column_const_sptr, const std::string& name ); - - /// Get value for XML eq attribute for squared parameter - std::string getXMLSquaredEqValue( const API::Column_const_sptr column, const std::string& name ); - - // Translate a parameter name from as it appears in the table workspace to its name in the XML file - std::string getXMLParameterName( const std::string& name ); - - /// Get row numbers of the parameters in the table workspace - void getTableRowNumbers(const API::ITableWorkspace_sptr & tablews, std::map<std::string, size_t>& parammap); - - /// Place to store the row numbers - std::map<std::string, size_t> m_rowNumbers; - }; diff --git a/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp b/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp index e33b5f0571f..7ae2769db3a 100644 --- a/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp +++ b/Code/Mantid/Framework/DataHandling/src/LoadFullprofResolution.cpp @@ -38,6 +38,8 @@ namespace DataHandling DECLARE_ALGORITHM(LoadFullprofResolution) + std::map<std::string, size_t> LoadFullprofResolution::m_rowNumbers; + //---------------------------------------------------------------------------------------------- /** Constructor */ @@ -213,7 +215,7 @@ namespace DataHandling } else // Numbers match, so put parameters into workspaces. { - getTableRowNumbers( outTabWs, m_rowNumbers); + getTableRowNumbers( outTabWs, LoadFullprofResolution::m_rowNumbers); for (size_t i=0; i < vec_bankids.size(); ++i) { int bankId = vec_bankids[i]; @@ -222,7 +224,15 @@ namespace DataHandling auto workspace = boost::dynamic_pointer_cast<MatrixWorkspace>(wsi); // Get column from table workspace API::Column_const_sptr OutTabColumn = outTabWs->getColumn( i+1 ); - putParametersIntoWorkspace( OutTabColumn, workspace, nProf ); + std::string parameterXMLString; + putParametersIntoWorkspace( OutTabColumn, workspace, nProf, parameterXMLString ); + + // Load the string into the workspace + Algorithm_sptr loadParamAlg = createChildAlgorithm("LoadParameterFile"); + loadParamAlg->setProperty("ParameterXML", parameterXMLString); + loadParamAlg->setProperty("Workspace", workspace); + loadParamAlg->execute(); + } } } @@ -835,7 +845,7 @@ namespace DataHandling * @param ws :: [input/output] the group workspace parameters are to be put in * @param nProf :: the PROF Number, which is used to determine fitting function for the parameters. */ - void LoadFullprofResolution::putParametersIntoWorkspace( API::Column_const_sptr column, API::MatrixWorkspace_sptr ws, int nProf) + void LoadFullprofResolution::putParametersIntoWorkspace( API::Column_const_sptr column, API::MatrixWorkspace_sptr ws, int nProf, std::string & parameterXMLString) { // Get instrument name from matrix workspace @@ -882,19 +892,13 @@ namespace DataHandling // Convert DOM XML document into string std::ostringstream outFile; writer.writeNode(outFile, mDoc); - std::string parameterXMLString = outFile.str(); + parameterXMLString = outFile.str(); // Useful code for testing upgrades commented out for production use //std::ofstream outfileDebug("C:/Temp/test4_fullprof.xml"); //outfileDebug << parameterXMLString; //outfileDebug.close(); - - // Load the string into the workspace - Algorithm_sptr loadParamAlg = createChildAlgorithm("LoadParameterFile"); - loadParamAlg->setProperty("ParameterXML", parameterXMLString); - loadParamAlg->setProperty("Workspace", ws); - loadParamAlg->execute(); } /* Add an Ikeda Carpenter PV ALFBE parameter to the XML document according to the table workspace @@ -1041,7 +1045,7 @@ namespace DataHandling */ std::string LoadFullprofResolution::getXMLEqValue( const API::Column_const_sptr column, const std::string& name ) { - size_t paramNumber = m_rowNumbers[name]; + size_t paramNumber = LoadFullprofResolution::m_rowNumbers[name]; //API::Column_const_sptr column = tablews->getColumn( columnIndex ); double eqValue = column->cell<double>(paramNumber); return boost::lexical_cast<std::string>(eqValue); @@ -1053,7 +1057,7 @@ namespace DataHandling */ std::string LoadFullprofResolution::getXMLSquaredEqValue( const API::Column_const_sptr column, const std::string& name ) { - size_t paramNumber = m_rowNumbers[name]; + size_t paramNumber = LoadFullprofResolution::m_rowNumbers[name]; //API::Column_const_sptr column = tablews->getColumn( columnIndex ); double eqValue = column->cell<double>(paramNumber); return boost::lexical_cast<std::string>(eqValue*eqValue); -- GitLab