From c6fb28a3154b1a9355ffcdf7fbf1edc5f814767f Mon Sep 17 00:00:00 2001
From: Michael Hart <michael.hart@stfc.ac.uk>
Date: Tue, 13 Oct 2015 16:34:47 +0100
Subject: [PATCH] Re #13632 Cleanup, comments, formatting, tweaks

---
 .../Crystal/inc/MantidCrystal/LoadIsawPeaks.h | 26 +++++--
 Framework/Crystal/src/LoadIsawPeaks.cpp       | 68 +++++++++----------
 2 files changed, 52 insertions(+), 42 deletions(-)

diff --git a/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h b/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h
index dde3349dc49..70a04ea2a32 100644
--- a/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h
+++ b/Framework/Crystal/inc/MantidCrystal/LoadIsawPeaks.h
@@ -8,7 +8,8 @@
 namespace Mantid {
 namespace Crystal {
 
-/** LoadIsawPeaks : Load an ISAW-style .peaks file
+/**
+ * Load an ISAW-style .peaks or .integrate file
  * into a PeaksWorkspace
  *
  * @author Janik Zikovsky, SNS
@@ -17,18 +18,24 @@ namespace Crystal {
 class DLLExport LoadIsawPeaks
     : public API::IFileLoader<Kernel::FileDescriptor> {
 public:
-  LoadIsawPeaks();
-  virtual ~LoadIsawPeaks();
+  LoadIsawPeaks() = default;
+  virtual ~LoadIsawPeaks() = default;
 
   /// Algorithm's name for identification
-  virtual const std::string name() const { return "LoadIsawPeaks"; };
+  virtual const std::string name() const {
+    return "LoadIsawPeaks";
+  }
+
   /// Summary of algorithms purpose
   virtual const std::string summary() const {
     return "Load an ISAW-style .peaks file into a PeaksWorkspace.";
   }
 
   /// Algorithm's version for identification
-  virtual int version() const { return 1; };
+  virtual int version() const {
+    return 1;
+  }
+
   /// Algorithm's category for identification
   virtual const std::string category() const {
     return "Crystal;DataHandling\\Isaw";
@@ -40,16 +47,20 @@ public:
 private:
   /// Initialise the properties
   void init();
+
   /// Run the algorithm
   void exec();
 
+  /// Reads calibration/detector section and returns first word of next line
   std::string ApplyCalibInfo(std::ifstream &in, std::string startChar,
                              Geometry::Instrument_const_sptr instr_old,
                              Geometry::Instrument_const_sptr instr, double &T0);
 
+  /// Reads first line of peaks file and returns first word of next line
   std::string readHeader(Mantid::DataObjects::PeaksWorkspace_sptr outWS,
                          std::ifstream &in, double &T0);
 
+  /// Read a single peak from peaks file
   DataObjects::Peak readPeak(DataObjects::PeaksWorkspace_sptr outWS,
                              std::string &lastStr, std::ifstream &in,
                              int &seqNum, std::string bankName);
@@ -57,12 +68,17 @@ private:
   int findPixelID(Geometry::Instrument_const_sptr inst, std::string bankName,
                   int col, int row);
 
+  /// Read the header of a peak block section, returns first word of next line
   std::string readPeakBlockHeader(std::string lastStr, std::ifstream &in,
                                   int &run, int &detName, double &chi,
                                   double &phi, double &omega, double &monCount);
 
+  /// Append peaks from given file to given workspace
   void appendFile(Mantid::DataObjects::PeaksWorkspace_sptr outWS,
                   std::string filename);
+
+  /// Compare number of peaks in given file to given workspace
+  /// Throws std::length_error on mismatch
   void checkNumberPeaks(Mantid::DataObjects::PeaksWorkspace_sptr outWS,
                         std::string filename);
 
diff --git a/Framework/Crystal/src/LoadIsawPeaks.cpp b/Framework/Crystal/src/LoadIsawPeaks.cpp
index ee0ccfb9fbe..d5c5c41bce0 100644
--- a/Framework/Crystal/src/LoadIsawPeaks.cpp
+++ b/Framework/Crystal/src/LoadIsawPeaks.cpp
@@ -19,18 +19,10 @@ using namespace Mantid::API;
 using namespace Mantid::DataObjects;
 using namespace Mantid::Geometry;
 
-//----------------------------------------------------------------------------------------------
-/** Constructor
- */
-LoadIsawPeaks::LoadIsawPeaks() {}
 
 //----------------------------------------------------------------------------------------------
-/** Destructor
- */
-LoadIsawPeaks::~LoadIsawPeaks() {}
-
 /**
- * Return the confidence with with this algorithm can load the file
+ * Determine the confidence with which this algorithm can load a given file
  * @param descriptor A descriptor for the file
  * @returns An integer specifying the confidence level. 0 indicates it will not
  * be used
@@ -76,14 +68,13 @@ int LoadIsawPeaks::confidence(Kernel::FileDescriptor &descriptor) const {
       getWord(in, false);
     readToEndOfLine(in, true);
     confidence = 95;
-  } catch (std::exception &) {
   }
+  catch (std::exception &) {
+  }
+
   return confidence;
 }
 
-//----------------------------------------------------------------------------------------------
-//----------------------------------------------------------------------------------------------
-
 //----------------------------------------------------------------------------------------------
 /** Initialize the algorithm's properties.
  */
@@ -99,6 +90,23 @@ void LoadIsawPeaks::init() {
                   "Name of the output workspace.");
 }
 
+//----------------------------------------------------------------------------------------------
+/** Execute the algorithm.
+ */
+void LoadIsawPeaks::exec() {
+  // Create the workspace
+  PeaksWorkspace_sptr ws(new PeaksWorkspace());
+
+  // This loads (appends) the peaks
+  this->appendFile(ws, getPropertyValue("Filename"));
+
+  // Save it in the output
+  setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(ws));
+
+  this->checkNumberPeaks(ws, getPropertyValue("Filename"));
+}
+
+//----------------------------------------------------------------------------------------------
 std::string
 LoadIsawPeaks::ApplyCalibInfo(std::ifstream &in, std::string startChar,
                               Geometry::Instrument_const_sptr instr_old,
@@ -113,7 +121,6 @@ LoadIsawPeaks::ApplyCalibInfo(std::ifstream &in, std::string startChar,
     startChar = getWord(in, false);
   }
   if (!(in.good())) {
-    // g_log.error()<<"Peaks file has no time shift and L0 info"<<std::endl;
     throw std::invalid_argument("Peaks file has no time shift and L0 info");
   }
   std::string L1s = getWord(in, false);
@@ -291,15 +298,11 @@ std::string LoadIsawPeaks::readHeader(PeaksWorkspace_sptr outWS,
   Geometry::Instrument_const_sptr instr(
       new Geometry::Instrument(instr_old->baseInstrument(), map));
 
-  // std::string s;
   std::string s = ApplyCalibInfo(in, "", instr_old, instr, T0);
   outWS->setInstrument(instr);
 
   // Now skip all lines on L1, detector banks, etc. until we get to a block of
   // peaks. They start with 0.
-  // readToEndOfLine( in ,  true );
-  // readToEndOfLine( in ,  true );
-  // s = getWord(in, false);
   while (s != "0" && in.good()) {
     readToEndOfLine(in, true);
     s = getWord(in, false);
@@ -402,6 +405,7 @@ DataObjects::Peak LoadIsawPeaks::readPeak(PeaksWorkspace_sptr outWS,
   return peak;
 }
 
+//----------------------------------------------------------------------------------------------
 int LoadIsawPeaks::findPixelID(Instrument_const_sptr inst, std::string bankName,
                                int col, int row) {
   boost::shared_ptr<const IComponent> parent =
@@ -492,6 +496,11 @@ void LoadIsawPeaks::appendFile(PeaksWorkspace_sptr outWS,
   // Open the file
   std::ifstream in(filename.c_str());
 
+  // Calculate filesize
+  in.seekg(0, in.end);
+  auto filelen = in.tellg();
+  in.seekg(0, in.beg);
+
   // Read the header, load the instrument
   double T0;
   std::string s = readHeader(outWS, in, T0);
@@ -515,8 +524,8 @@ void LoadIsawPeaks::appendFile(PeaksWorkspace_sptr outWS,
   Mantid::Geometry::Goniometer uniGonio;
   uniGonio.makeUniversalGoniometer();
 
-  // TODO: Can we find the number of peaks to get better progress reporting?
-  Progress prog(this, 0.0, 1.0, 100);
+  // Progress is reported based on how much of the file we've read
+  Progress prog(this, 0.0, 1.0, filelen);
 
   while (in.good()) {
     // Read the header if necessary
@@ -566,9 +575,10 @@ void LoadIsawPeaks::appendFile(PeaksWorkspace_sptr outWS,
                       << e.what() << std::endl;
     }
 
-    prog.report();
+    prog.report(in.tellg());
   }
 }
+
 //-----------------------------------------------------------------------------------------------
 /** Count the peaks from a .peaks file and compare with the workspace
  * @param outWS :: the workspace in which to place the information
@@ -592,22 +602,6 @@ void LoadIsawPeaks::checkNumberPeaks(PeaksWorkspace_sptr outWS,
   }
 }
 
-//----------------------------------------------------------------------------------------------
-/** Execute the algorithm.
- */
-void LoadIsawPeaks::exec() {
-  // Create the workspace
-  PeaksWorkspace_sptr ws(new PeaksWorkspace());
-
-  // This loads (appends) the peaks
-  this->appendFile(ws, getPropertyValue("Filename"));
-
-  // Save it in the output
-  setProperty("OutputWorkspace", boost::dynamic_pointer_cast<Workspace>(ws));
-
-  this->checkNumberPeaks(ws, getPropertyValue("Filename"));
-}
-
 //----------------------------------------------------------------------------------------------
 /** Retrieves pointer to given bank from local cache.
  *
-- 
GitLab