Unverified Commit 0dff5234 authored by kledmundson's avatar kledmundson Committed by GitHub
Browse files

Noseam has been refactored to be callable. Makefile test has been converted to...

Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. (#5600)

* Noseam has been refactored to be callable. Makefile test has been converted to a gtest and removed. Addresses #5599.

* Modifications to address gtest failures. Also added addtional input parameter error checking to ensure noseam exits prior to generation of temporary files. Finally modified gtests to remove the print.prt file if generated. Addresses #5599.
parent 636eb250
Loading
Loading
Loading
Loading
+1 −0
Original line number Original line Diff line number Diff line
@@ -46,6 +46,7 @@ release.
- Added *.history to the ignore list in downloadIsisData
- Added *.history to the ignore list in downloadIsisData


### Changed
### Changed
- Noseam has been refactored to be callable; old Makefile test has been removed and replaced by a gtest. Issue: [#5599](https://github.com/USGS-Astrogeology/ISIS3/issues/5599)
- Explode has been refactored to be callable; old Makefile test has been removed and replaced by a gtest. Issue: [#5557](https://github.com/USGS-Astrogeology/ISIS3/issues/5557)
- Explode has been refactored to be callable; old Makefile test has been removed and replaced by a gtest. Issue: [#5557](https://github.com/USGS-Astrogeology/ISIS3/issues/5557)
- Isisminer has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5516](https://github.com/USGS-Astrogeology/ISIS3/issues/5516)
- Isisminer has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5516](https://github.com/USGS-Astrogeology/ISIS3/issues/5516)
- Algebra has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5594](https://github.com/USGS-Astrogeology/ISIS3/issues/5594)
- Algebra has been refactored to be callable; old Makefile tests have been removed and replaced by gtests. Issue: [#5594](https://github.com/USGS-Astrogeology/ISIS3/issues/5594)
+12 −84
Original line number Original line Diff line number Diff line
#include "Isis.h"
/** This is free and unencumbered software released into the public domain.
#include "Application.h"
#include "FileList.h"
#include "Cube.h"
#include "Preference.h"
#include "ProgramLauncher.h"

#include <iostream>
#include <fstream>

using namespace std;
using namespace Isis;

void IsisMain() {

  //Get user parameters
  UserInterface &ui = Application::GetUserInterface();
  FileList cubes;
  cubes.read(ui.GetFileName("FROMLIST"));

  int samples = ui.GetInteger("SAMPLES");
  int lines = ui.GetInteger("LINES");
  QString match = ui.GetAsString("MATCHBANDBIN");

  //Sets upt the pathName to be used for most application calls
  FileName inFile = cubes[0];


  Pvl &pref = Preference::Preferences();
The authors of ISIS do not claim copyright on the contents of this file.
  QString pathName = (QString)pref.findGroup("DataDirectory")["Temporary"] + "/";
For more details about the LICENSE terms and the AUTHORS, you will
find files of those names at the top level of this repository. **/


  /**
/* SPDX-License-Identifier: CC0-1.0 */
   * Creates a mosaic from the original images.  It is placed here
   * so that the failure MATCHBANDBIN causes does not leave
   * highpasses cubes lying around!
  */
  QString parameters = "FROMLIST=" + ui.GetFileName("FROMLIST") +
                      " MOSAIC=" + pathName + "OriginalMosaic.cub" +
                      " MATCHBANDBIN=" + match;
  ProgramLauncher::RunIsisProgram("automos", parameters);


  //Creates the highpass cubes from the cubes FileList
#include "Isis.h"
  std::ofstream highPassList;
  highPassList.open("HighPassList.lis");
  for(int i = 0; i < cubes.size(); i++) {
    inFile = cubes[i];
    QString outParam = pathName + inFile.baseName() + "_highpass.cub";
    parameters = "FROM=" + inFile.expanded() +
                 " TO=" + outParam
                 + " SAMPLES=" + toString(samples) + " LINES=" + toString(lines);
    ProgramLauncher::RunIsisProgram("highpass", parameters);
    //Reads the just created highpass cube into a list file for automos
    highPassList << outParam << endl;
  }
  highPassList.close();

  //Makes a mosaic out of the highpass cube filelist
  parameters = "FROMLIST=HighPassList.lis MOSAIC=" + pathName + "HighpassMosaic.cub"
               + " MATCHBANDBIN=" + match;
  ProgramLauncher::RunIsisProgram("automos", parameters);

  //Does a lowpass on the original mosaic
  parameters = "FROM=" + pathName + "OriginalMosaic.cub"
               + " TO=" + pathName + "LowpassMosaic.cub"
               + " SAMPLES=" + toString(samples) + " LINES=" + toString(lines);
  ProgramLauncher::RunIsisProgram("lowpass", parameters);


  //Finally combines the highpass and lowpass mosaics
#include "noseam.h"
  parameters = "FROM=" + pathName + "HighpassMosaic.cub" +
               " FROM2=" + pathName + "LowpassMosaic.cub" +
               " TO=" + ui.GetCubeName("TO") +
               " OPERATOR= add";
  ProgramLauncher::RunIsisProgram("algebra", parameters);


  //Will remove all of the temp files by default
#include "Application.h"
  if(ui.GetBoolean("REMOVETEMP")) {
    QString file("HighPassList.lis");
    remove(file.toLatin1().data());
    file = pathName + "HighpassMosaic.cub";
    remove(file.toLatin1().data());
    file = pathName + "LowpassMosaic.cub";
    remove(file.toLatin1().data());
    file = pathName + "OriginalMosaic.cub";
    remove(file.toLatin1().data());


    for(int i = 0; i < cubes.size(); i++) {
using namespace Isis;
      inFile = cubes[i];
      file = pathName + inFile.baseName() + "_highpass.cub";
      remove(file.toLatin1().data());
    }
  }


void IsisMain() {
  UserInterface &ui = Application::GetUserInterface();
  noseam(ui);
}
}
+149 −0
Original line number Original line Diff line number Diff line
/** This is free and unencumbered software released into the public domain.

The authors of ISIS do not claim copyright on the contents of this file.
For more details about the LICENSE terms and the AUTHORS, you will
find files of those names at the top level of this repository. **/

/* SPDX-License-Identifier: CC0-1.0 */

#include "noseam.h"

#include <iostream>
#include <fstream>

//#include "automos.h"
#include "FileList.h"
#include "FileName.h"
#include "Cube.h"
#include "Preference.h"
#include "ProgramLauncher.h"

using namespace std;

namespace Isis {

  /**
   * Noseam creates a mosaic from a list of input cubes using an
   * algorithm that minimizes seams.
   *
   * @param ui UserInterface object containing parameters
   */
  void noseam(UserInterface &ui) {

    // Get Filename with list of cubes to mosaic
    FileName cubeListFileName(ui.GetFileName("FROMLIST"));
    std::cout << "***going to run 2nd noseam method\n";
    return noseam(cubeListFileName, ui);
  }


  /**
   * Noseam creates a mosaic from a list of input cubes using an
   * algorithm that minimizes seams.
   *
   * @param cubeListFileName Filename with list of cubes to mosaic
   * @param ui UserInterface object containing parameters
   */
  void noseam(FileName &cubeListFileName, UserInterface &ui) {

    // Boxcar samples and lines must be odd and 1 or greater
    int samples;
    if (ui.WasEntered("SAMPLES")) {
      samples = ui.GetInteger("SAMPLES");
      
      if (samples < 1 || samples % 2 == 0) {
        string msg = "Value for [SAMPLES] must be odd and greater or equal to 1.";
        throw IException(IException::User, msg, _FILEINFO_);
      }
    }
    else {
      string msg = "Parameter [SAMPLES] must be entered.";
      throw IException(IException::User, msg, _FILEINFO_);
    }

    int lines;
    if (ui.WasEntered("LINES")) {
      lines = ui.GetInteger("LINES");

      if (lines < 1 || lines % 2 == 0) {
        string msg = "Value for [LINES] must be odd and greater or equal to 1.";
        throw IException(IException::User, msg, _FILEINFO_);
      }
    }
    else {
      string msg = "Parameter [LINES] must be entered.";
      throw IException(IException::User, msg, _FILEINFO_);      
    }
    // Get user parameters
    FileList cubes;
    cubes.read(cubeListFileName);

    QString match = ui.GetAsString("MATCHBANDBIN");

    // Sets up the pathName to be used for most application calls
    FileName inFile = cubes[0];

    QString pathName = FileName("$TEMPORARY/").expanded();

    /**
     * Creates a mosaic from the original images.  It is placed here
     * so that the failure MATCHBANDBIN causes does not leave
     * highpasses cubes lying around!
    */
    QString parameters = "FROMLIST=" + cubeListFileName.original() + 
                        " MOSAIC=" + pathName + "OriginalMosaic.cub" +
                        " MATCHBANDBIN=" + match;
    ProgramLauncher::RunIsisProgram("automos", parameters);

    // Creates the highpass cubes from the cubes FileList
    ofstream highPassList;
    highPassList.open("HighPassList.lis");
    for(int i = 0; i < cubes.size(); i++) {
      inFile = cubes[i];
      QString outParam = pathName + inFile.baseName() + "_highpass.cub";
      parameters = "FROM=" + inFile.expanded() +
                   " TO=" + outParam
                   + " SAMPLES=" + toString(samples) + " LINES=" + toString(lines);
      ProgramLauncher::RunIsisProgram("highpass", parameters);
      // Reads the just created highpass cube into a list file for automos
      highPassList << outParam << endl;
    }
    highPassList.close();

    // Makes a mosaic out of the highpass cube filelist
    parameters = "FROMLIST=HighPassList.lis MOSAIC=" + pathName + "HighpassMosaic.cub"
                 + " MATCHBANDBIN=" + match;
    ProgramLauncher::RunIsisProgram("automos", parameters);

    // Does a lowpass on the original mosaic
    parameters = "FROM=" + pathName + "OriginalMosaic.cub"
                 + " TO=" + pathName + "LowpassMosaic.cub"
                 + " SAMPLES=" + toString(samples) + " LINES=" + toString(lines);
    ProgramLauncher::RunIsisProgram("lowpass", parameters);

    // Finally combines the highpass and lowpass mosaics
    parameters = "FROM=" + pathName + "HighpassMosaic.cub" +
                 " FROM2=" + pathName + "LowpassMosaic.cub" +
                 " TO=" + ui.GetCubeName("TO") +
                 " OPERATOR= add";
    ProgramLauncher::RunIsisProgram("algebra", parameters);

    // Will remove all of the temp files by default
    if(ui.GetBoolean("REMOVETEMP")) {
      QString file("HighPassList.lis");
      remove(file.toLatin1().data());
      file = pathName + "HighpassMosaic.cub";
      remove(file.toLatin1().data());
      file = pathName + "LowpassMosaic.cub";
      remove(file.toLatin1().data());
      file = pathName + "OriginalMosaic.cub";
      remove(file.toLatin1().data());

      for(int i = 0; i < cubes.size(); i++) {
        inFile = cubes[i];
        file = pathName + inFile.baseName() + "_highpass.cub";
        remove(file.toLatin1().data());
      }
    }
  }
}
+20 −0
Original line number Original line Diff line number Diff line
/** This is free and unencumbered software released into the public domain.

The authors of ISIS do not claim copyright on the contents of this file.
For more details about the LICENSE terms and the AUTHORS, you will
find files of those names at the top level of this repository. **/

/* SPDX-License-Identifier: CC0-1.0 */

#ifndef noseam_h
#define noseam_h

#include "FileName.h"
#include "UserInterface.h"

namespace Isis{
  extern void noseam(UserInterface &ui);
  extern void noseam(FileName &cubeListFileName, UserInterface &ui);
}

#endif
+3 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,9 @@
      boxcar for the highpass and lowpass filters, have been condensed down to two 
      boxcar for the highpass and lowpass filters, have been condensed down to two 
      parameters, SAMPLES and LINES as the size of the boxcars must be the same. Fixes #258.
      parameters, SAMPLES and LINES as the size of the boxcars must be the same. Fixes #258.
    </change>
    </change>
    <change name="Ken Edmundson" date="2024-8-25">
      Converted noseam to callable app. Also converted Makefile test to gtest format.
    </change>
  </history>
  </history>


  <groups>
  <groups>
Loading