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