Unverified Commit af1fd9b6 authored by Makayla Shepherd's avatar Makayla Shepherd Committed by GitHub
Browse files

Merge pull request #158 from kberryUSGS/kerneldbgen

Added an option to kerneldbgen to specify SPICE time coverage level. Fixes #5410.
parents f6501877 a0f6538e
Loading
Loading
Loading
Loading
+21 −3
Original line number Diff line number Diff line
@@ -40,6 +40,7 @@ const char *SpiceDbGen::calForm = "YYYY MON DD HR:MN:SC.###### TDB ::TDB";
*/
SpiceDbGen::SpiceDbGen(QString type) {
  p_type = type;
  m_coverageLevel = "SEGMENT"; // default
  //  calForm = "YYYY MON DD HR:MN:SC.### TDB ::TDB";
}

@@ -155,6 +156,17 @@ QStringList SpiceDbGen::GetFiles(FileName location, QString filter) {
}


/**
 * Sets the desired time coverage level of the Spice database. 
 * 
 * @param level The desired time coverage level. May be either Segment or 
 *              Interval.  
 */
void SpiceDbGen::setCoverageLevel(QString level) {
  m_coverageLevel = level; 
}


/**
  * Format a single kernel file to include the file.
  *
@@ -227,10 +239,16 @@ PvlGroup SpiceDbGen::AddSelection(FileName fileIn, double startOffset, double en
        SPICEDOUBLE_CELL(cover, 200000);
        ssize_c(0, &cover);
        ssize_c(200000, &cover);

        // A SPICE SEGMENT is composed of SPICE INTERVALS
        if (QString::compare(m_coverageLevel, "SEGMENT", Qt::CaseInsensitive) == 0 ) {
          ckcov_c(tmp.toLatin1().data(), body, SPICEFALSE, "SEGMENT", 0.0, "TDB", &cover); 
        }
        else {
          ckcov_c(tmp.toLatin1().data(), body, SPICEFALSE, "INTERVAL", 0.0, "TDB", &cover);
        }

        NaifStatus::CheckErrors();

        result = FormatIntervals(cover, currFile, startOffset, endOffset);
      }
    }
+7 −0
Original line number Diff line number Diff line
@@ -47,6 +47,11 @@
 *   @history 2013-02-15 Steven Lambright - Added support for extra kernel dependencies
 *   @history 2018-01-10 Christopher Combs - Added passing startOffset and endOffset to allow
 *                           the passing of time offsets to to FormatIntervals. Fixes #5272.
 *   @history 2018-05-09 Kristin Berry - Added information about the Spice time coverage level
 *                            to this class: m_coverageLevel, setCoverageLevel, and this class will
 *                            now select spice "time intervals" at the level specified. This is
 *                            either a SPICE Segment (coarse) or a SPICE interval (fine.)
 *                            Fixes #5410. 
 *
 */
class SpiceDbGen {
@@ -57,6 +62,7 @@ class SpiceDbGen {
                           std::vector<QString> & filter, double startOffset, double endOffset);
    void FurnishDependencies(QList<Isis::FileName> sclks, QList<Isis::FileName> fks,
                             QList<Isis::FileName> extras);
    void setCoverageLevel(QString level); 

  private:
    QStringList GetFiles(Isis::FileName location, QString filter);
@@ -65,6 +71,7 @@ class SpiceDbGen {
    Isis::PvlGroup GetIntervals(SpiceCell &cover);
    //private instance variables
    QString p_type;
    QString m_coverageLevel; //! The time coverage level of the database: INTERVAL or SEGMENT
    static const char *calForm;
};

+16 −5
Original line number Diff line number Diff line
@@ -15,7 +15,7 @@ void IsisMain() {
  UserInterface &ui = Application::GetUserInterface();
  PvlGroup dependency("Dependencies");

  //create the database writer based on the kernel type
  // Create the database writer based on the kernel type
  SpiceDbGen sdg(ui.GetString("TYPE"));

  // Load the SCLK. If it exists, add its location to the dependency group
@@ -37,6 +37,17 @@ void IsisMain() {
  }
  PvlObject selections(kernelType);

  // Specify whether to use SPICE segments (made up of SPICE intervals) 
  // or SPICE intervals for the SPICE database. Naif referes to this as "coverage level" 
  QString coverageLevel; 
  if (ui.GetString("LEVEL") == "SEGMENT") {
    coverageLevel = "SEGMENT"; 
  }
  else if (ui.GetString("LEVEL") == "INTERVAL") {
    coverageLevel = "INTERVAL"; 
  }
  sdg.setCoverageLevel(coverageLevel); 

  selections += PvlKeyword("RunTime", iTime::CurrentLocalTime());
  selections.addGroup(dependency);

+35 −0
Original line number Diff line number Diff line
@@ -152,6 +152,10 @@
      Added STARTOFFSET and ENDOFFSET parameters to allow for slight editing to start and end times.
      Fixes #5272.
    </change>
    <change name="Kristin Berry" date="2018-05-09">
      Added the LEVEL=(SEGMENT*, INTERVAL) option to specify the time coverage level to be used for the generated database. SPICE segements are made up of SPICE intervals. 
      Segments (the only option in the past) are now the default, but interval can be selected if needed. Fixes #5410. 
    </change>
  </history>

  <groups>
@@ -221,6 +225,37 @@
        </list>
      </parameter>
    </group>
    <group name="Coverage Level">
      <parameter name="LEVEL">
        <type>string</type>
        <default>
          <item>SEGMENT</item>
        </default>
        <brief>
           The level of time-granularity for the time-coverage interval to be output to the SPICE database. 
        </brief>
        <description>
        </description>
        <list>
          <option value="SEGMENT">
            <brief>
              SPICE Segment             
            </brief>
            <description>
              The coarsest level of time granularity, a SPICE segment is composed of SPICE intervals.              
            </description>
          </option>
          <option value="INTERVAL">
            <brief>
              SPICE Interval 
            </brief>
            <description>
              A finer level of time granularity. 
            </description>
          </option>
        </list>
      </parameter>
    </group>
    <group name="Predict">
      <parameter name="PREDICTDIR">
        <type>string</type>
+38 −0
Original line number Diff line number Diff line
# Coverage Level Test for kerneldbgen
#
# This test creates an output database file from the kernel in the input file
# that follow the given filter for reconstructed ck file name patterns. A database
# is output with time coverage at the SPICE segment level and at the SPICE interval 
# level. (There will be one output entry for the spice segment, and several for the
# SPICE interval because a SPICE segment is composed of SPICE intervals.) 
#
# After the output PVL is created, when compared, the DIFF file indicates to
# ignore RunTime and File.  The File keyword is ignored since, depending on 
# where the test is run, files may have different paths. These paths can not be 
# removed since they may be long enough to take up multiple lines.
# 
# This test uses files from the TGO CaSSIS mission, as this is where the problem
# was identified. 
#
# history 2018-05-09 Kristin Berry - Added test for newly added time coverage 
#                                    LEVEL=(SEGMENT*, INTERVAL) option. See #5410
APPNAME = kerneldbgen
include $(ISISROOT)/make/isismake.tsts

commands:
	# Default output level=segment
	$(APPNAME) to=$(OUTPUT)/kernel_segment.db.pvl \
	  type=CK \
	  recondir=$(INPUT) \
	  reconfilter='em16_tgo_sc_??m_*.bc' \
	  sclk=\$$tgo/kernels/sclk/em16_tgo_step_????????.tsc \
          lsk=\$$base/kernels/lsk/naif0012.tls > /dev/null; 

	# Output with level=interval, needed for CaSSIS kernels and potentially other type-6 kernels
	$(APPNAME) to=$(OUTPUT)/kernel_interval.db.pvl \
	  type=CK \
	  level=INTERVAL \
	  recondir=$(INPUT) \
	  reconfilter='em16_tgo_sc_??m_*.bc' \
 	  sclk=\$$tgo/kernels/sclk/em16_tgo_step_????????.tsc \
          lsk=\$$base/kernels/lsk/naif0012.tls > /dev/null;