From b5829799fc718dea41a673c745fc13d581d00dcb Mon Sep 17 00:00:00 2001 From: Austin Sanders Date: Fri, 28 Feb 2020 12:33:09 -0700 Subject: [PATCH] Added tests + testing data --- .../apps/kaguyatc2isis/kaguyatc2isis.cpp | 292 ++++++++++++++++++ .../kaguya/apps/kaguyatc2isis/kaguyatc2isis.h | 11 + isis/src/kaguya/apps/kaguyatc2isis/main.cpp | 286 +---------------- isis/tests/FunctionalTestsKaguyatc2isis.cpp | 88 ++++++ .../TC1S2B0_01_05186N225E0040_mini.img | Bin 0 -> 19248 bytes .../TC1S2B0_01_05186N225E0040_mini.lbl | 131 ++++++++ 6 files changed, 533 insertions(+), 275 deletions(-) create mode 100644 isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp create mode 100644 isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.h create mode 100644 isis/tests/FunctionalTestsKaguyatc2isis.cpp create mode 100644 isis/tests/data/kaguyatc2isis/TC1S2B0_01_05186N225E0040_mini.img create mode 100644 isis/tests/data/kaguyatc2isis/TC1S2B0_01_05186N225E0040_mini.lbl diff --git a/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp b/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp new file mode 100644 index 0000000000..f80d772d56 --- /dev/null +++ b/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.cpp @@ -0,0 +1,292 @@ +#include "kaguyatc2isis.h" + +#include +#include + +#include "FileName.h" +#include "ProcessImportPds.h" +#include "UserInterface.h" +#include "Pvl.h" + +using namespace std; + +namespace Isis { + void kaguyatc2isis(UserInterface &ui, Pvl *log) { + ProcessImportPds importPds; + FileName inFile = ui.GetFileName("FROM"); + QString labelFile = inFile.expanded(); + Pvl label(labelFile); + + QString dataFile = ""; + if ( inFile.extension().toLower() == "lbl" ) { + dataFile = inFile.path() + "/" + (QString) label.findKeyword("FILE_NAME"); + } + else { + dataFile = labelFile; + } + + QString id = ""; + try { + id = (QString) label.findKeyword("DATA_SET_ID"); + } + catch(IException &e) { + QString msg = "Unable to read [DATA_SET_ID] from label file [" + + labelFile + "]"; + throw IException(e, IException::Unknown, msg, _FILEINFO_); + } + + id = id.simplified().trimmed(); + if (id != "TC_MAP" + && id != "TCO_MAP" + && id != "TC1_Level2B" + && id != "TC2_Level2B" + && id != "SLN-L-TC-3-S-LEVEL2B0-V1.0" + && id != "SLN-L-TC-5-MORNING-MAP-V4.0") { + QString msg = "Input file [" + labelFile + "] does not appear to be " + + "a supported Kaguya Terrain Camera format. " + + "DATA_SET_ID is [" + id + "]" + + "Valid formats include [TC_MAP, TCO_MAP, TC1_Level2B, " + + "SLN-L-TC-3-S-LEVEL2B0-V1.0, SLN-L-TC-5-MORNING-MAP-V4.0]"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } + + if (!label.hasKeyword("TARGET_NAME")) { + label.addKeyword(PvlKeyword("TARGET_NAME", "MOON"), Pvl::Replace); + } + + importPds.SetPdsFile(label, dataFile); + + CubeAttributeOutput &att = ui.GetOutputAttribute("TO"); + Cube *outcube = importPds.SetOutputCube(ui.GetFileName("TO"), att); + + // Get user entered special pixel ranges + if (ui.GetBoolean("SETNULLRANGE")) { + importPds.SetNull(ui.GetDouble("NULLMIN"), ui.GetDouble("NULLMAX")); + } + if (ui.GetBoolean("SETHRSRANGE")) { + importPds.SetHRS(ui.GetDouble("HRSMIN"), ui.GetDouble("HRSMAX")); + } + if (ui.GetBoolean("SETHISRANGE")) { + importPds.SetHIS(ui.GetDouble("HISMIN"), ui.GetDouble("HISMAX")); + } + if (ui.GetBoolean("SETLRSRANGE")) { + importPds.SetLRS(ui.GetDouble("LRSMIN"), ui.GetDouble("LRSMAX")); + } + if (ui.GetBoolean("SETLISRANGE")) { + importPds.SetLIS(ui.GetDouble("LISMIN"), ui.GetDouble("LISMAX")); + } + + importPds.SetOrganization(Isis::ProcessImport::BSQ); + + importPds.StartProcess(); + + // Get the mapping labels + Pvl otherLabels; + importPds.TranslatePdsProjection(otherLabels); + + // Translate the remaining MI MAP labels + PvlGroup dataDir(Preference::Preferences().findGroup("DataDirectory")); + QString transDir = (QString) dataDir["Kaguya"] + "/translations/"; + + FileName transFile(transDir + "kaguyaTcBandBin.trn"); + PvlToPvlTranslationManager bandBinXlater(label, transFile.expanded()); + bandBinXlater.Auto(otherLabels); + + transFile = transDir + "kaguyaTcInstrument.trn"; + PvlToPvlTranslationManager instXlater(label, transFile.expanded()); + instXlater.Auto(otherLabels); + + transFile = transDir + "kaguyaTcArchive.trn"; + PvlToPvlTranslationManager archiveXlater(label, transFile.expanded()); + archiveXlater.Auto(otherLabels); + + transFile = transDir + "kaguyaTcKernels.trn"; + PvlToPvlTranslationManager kernelsXlater(label, transFile.expanded()); + kernelsXlater.Auto(otherLabels); + + if ( otherLabels.hasGroup("Mapping") + && otherLabels.findGroup("Mapping").keywords() > 0 ) { + outcube->putGroup(otherLabels.findGroup("Mapping")); + } + if ( otherLabels.hasGroup("Instrument") + && otherLabels.findGroup("Instrument").keywords() > 0 ) { + PvlGroup &inst = otherLabels.findGroup("Instrument", Pvl::Traverse); + if (inst.hasKeyword("StartTime")) { + // Remove trailing "Z" from keyword + PvlKeyword &startTime = inst["StartTime"]; + QString startTimeString = startTime[0]; + if (QString::compare(startTimeString.at(startTimeString.size() - 1), "Z", Qt::CaseInsensitive) == 0){ + startTimeString = startTimeString.left(startTimeString.length() - 1); + startTime.setValue(startTimeString); + } + } + if (inst.hasKeyword("StopTime")) { + // Remove trailing "Z" from keyword + PvlKeyword &stopTime = inst["StopTime"]; + QString stopTimeString = stopTime[0]; + if (QString::compare(stopTimeString.at(stopTimeString.size() - 1), "Z", Qt::CaseInsensitive) == 0){ + stopTimeString = stopTimeString.left(stopTimeString.length() - 1); + stopTime.setValue(stopTimeString); + } + } + outcube->putGroup(otherLabels.findGroup("Instrument")); + /* + // This code is not needed now, but is included here commented-out in case it becomes necessary + // to support the swath modes by setting their NaifFrameCodes in the future. The swath mode + // setting is currently handled entirely via the camera model. + + // add kernels group + QString instId = inst["InstrumentId"]; + QString encoding = inst["EncodingType"]; + QString swath = inst["SwathModeId"]; + PvlGroup kern("Kernels"); + if (instId == "TC1") { + if (swath == "Full") { + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131352)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131353)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131354)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131355)); + } + } + } + else if (swath == "Nominal") { + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131356)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131357)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131358)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131359)); + } + } + } + else { // swath == "Half" + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131360)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131361)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131362)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131363)); + } + } + } + } + if (instId == "TC2") { + if (swath == "Full") { + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131372)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131373)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131374)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131375)); + } + } + } + else if (swath == "Nominal") { + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131376)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131377)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131378)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131379)); + } + } + } + else { // swath == "Half" + if (productSetId == "TC_w_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131380)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131381)); + } + } + else if (productSetId == "TC_s_Level2B0") { + if (encoding == "DCT") { + kern += PvlKeyword("NaifFrameCode", toString(-131382)); + } + else { // encoding == "N/A" so no compression + kern += PvlKeyword("NaifFrameCode", toString(-131383)); + } + } + } + } + */ + } + if ( otherLabels.hasGroup("BandBin") + && otherLabels.findGroup("BandBin").keywords() > 0 ) { + + PvlGroup &bandBinGroup = otherLabels.findGroup("BandBin"); + if (!bandBinGroup.hasKeyword("FilterName")) { + bandBinGroup += PvlKeyword("FilterName", "BroadBand"); + } + if (!bandBinGroup.hasKeyword("Center")) { + bandBinGroup += PvlKeyword("Center", "640", "nanometers"); + } + if (!bandBinGroup.hasKeyword("Width")) { + bandBinGroup += PvlKeyword("Width", "420", "nanometers"); + } + outcube->putGroup(bandBinGroup); + } + else { + // Add the BandBin group + PvlGroup bandBinGroup("BandBin"); + bandBinGroup += PvlKeyword("FilterName", "BroadBand"); + bandBinGroup += PvlKeyword("Center", "640nm"); + bandBinGroup += PvlKeyword("Width", "420nm"); + outcube->putGroup(bandBinGroup); + } + + if ( otherLabels.hasGroup("Archive") + && otherLabels.findGroup("Archive").keywords() > 0 ) { + outcube->putGroup(otherLabels.findGroup("Archive")); + } + if ( otherLabels.hasGroup("Kernels") + && otherLabels.findGroup("Kernels").keywords() > 0 ) { + outcube->putGroup(otherLabels.findGroup("Kernels", Pvl::Traverse)); + } + + importPds.EndProcess(); + } +} diff --git a/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.h b/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.h new file mode 100644 index 0000000000..9c2db22777 --- /dev/null +++ b/isis/src/kaguya/apps/kaguyatc2isis/kaguyatc2isis.h @@ -0,0 +1,11 @@ +#ifndef kaguyatc2isis_h +#define kaguyatc2isis_h + +#include "UserInterface.h" +#include "Pvl.h" + +namespace Isis { + extern void kaguyatc2isis(UserInterface &ui, Pvl *log); +} + +#endif diff --git a/isis/src/kaguya/apps/kaguyatc2isis/main.cpp b/isis/src/kaguya/apps/kaguyatc2isis/main.cpp index ce689691e3..c92d257f8f 100644 --- a/isis/src/kaguya/apps/kaguyatc2isis/main.cpp +++ b/isis/src/kaguya/apps/kaguyatc2isis/main.cpp @@ -1,291 +1,27 @@ #include "Isis.h" -#include -#include +#include "kaguyatc2isis.h" -#include "FileName.h" -#include "ProcessImportPds.h" -#include "UserInterface.h" +#include "Application.h" +#include "Pvl.h" using namespace std; using namespace Isis; void IsisMain() { - ProcessImportPds importPds; UserInterface &ui = Application::GetUserInterface(); - - FileName inFile = ui.GetFileName("FROM"); - QString labelFile = inFile.expanded(); - Pvl label(labelFile); - - QString dataFile = ""; - if ( inFile.extension().toLower() == "lbl" ) { - dataFile = inFile.path() + "/" + (QString) label.findKeyword("FILE_NAME"); - } - else { - dataFile = labelFile; - } - - QString id = ""; + Pvl appLog; try { - id = (QString) label.findKeyword("DATA_SET_ID"); - } - catch(IException &e) { - QString msg = "Unable to read [DATA_SET_ID] from label file [" - + labelFile + "]"; - throw IException(e, IException::Unknown, msg, _FILEINFO_); - } - - id = id.simplified().trimmed(); - if (id != "TC_MAP" - && id != "TCO_MAP" - && id != "TC1_Level2B" - && id != "TC2_Level2B" - && id != "SLN-L-TC-3-S-LEVEL2B0-V1.0" - && id != "SLN-L-TC-5-MORNING-MAP-V4.0") { - QString msg = "Input file [" + labelFile + "] does not appear to be " + - "a supported Kaguya Terrain Camera format. " + - "DATA_SET_ID is [" + id + "]" + - "Valid formats include [TC_MAP, TCO_MAP, TC1_Level2B, " + - "SLN-L-TC-3-S-LEVEL2B0-V1.0, SLN-L-TC-5-MORNING-MAP-V4.0]"; - throw IException(IException::Unknown, msg, _FILEINFO_); - } - - if (!label.hasKeyword("TARGET_NAME")) { - label.addKeyword(PvlKeyword("TARGET_NAME", "MOON"), Pvl::Replace); - } - - importPds.SetPdsFile(label, dataFile); - - Cube *outcube = importPds.SetOutputCube("TO"); - - // Get user entered special pixel ranges - if (ui.GetBoolean("SETNULLRANGE")) { - importPds.SetNull(ui.GetDouble("NULLMIN"), ui.GetDouble("NULLMAX")); - } - if (ui.GetBoolean("SETHRSRANGE")) { - importPds.SetHRS(ui.GetDouble("HRSMIN"), ui.GetDouble("HRSMAX")); - } - if (ui.GetBoolean("SETHISRANGE")) { - importPds.SetHIS(ui.GetDouble("HISMIN"), ui.GetDouble("HISMAX")); - } - if (ui.GetBoolean("SETLRSRANGE")) { - importPds.SetLRS(ui.GetDouble("LRSMIN"), ui.GetDouble("LRSMAX")); - } - if (ui.GetBoolean("SETLISRANGE")) { - importPds.SetLIS(ui.GetDouble("LISMIN"), ui.GetDouble("LISMAX")); - } - - importPds.SetOrganization(Isis::ProcessImport::BSQ); - - importPds.StartProcess(); - - // Get the mapping labels - Pvl otherLabels; - importPds.TranslatePdsProjection(otherLabels); - - // Translate the remaining MI MAP labels - PvlGroup dataDir(Preference::Preferences().findGroup("DataDirectory")); - QString transDir = (QString) dataDir["Kaguya"] + "/translations/"; - - FileName transFile(transDir + "kaguyaTcBandBin.trn"); - PvlToPvlTranslationManager bandBinXlater(label, transFile.expanded()); - bandBinXlater.Auto(otherLabels); - - transFile = transDir + "kaguyaTcInstrument.trn"; - PvlToPvlTranslationManager instXlater(label, transFile.expanded()); - instXlater.Auto(otherLabels); - - transFile = transDir + "kaguyaTcArchive.trn"; - PvlToPvlTranslationManager archiveXlater(label, transFile.expanded()); - archiveXlater.Auto(otherLabels); - - transFile = transDir + "kaguyaTcKernels.trn"; - PvlToPvlTranslationManager kernelsXlater(label, transFile.expanded()); - kernelsXlater.Auto(otherLabels); - - if ( otherLabels.hasGroup("Mapping") - && otherLabels.findGroup("Mapping").keywords() > 0 ) { - outcube->putGroup(otherLabels.findGroup("Mapping")); - } - if ( otherLabels.hasGroup("Instrument") - && otherLabels.findGroup("Instrument").keywords() > 0 ) { - PvlGroup &inst = otherLabels.findGroup("Instrument", Pvl::Traverse); - if (inst.hasKeyword("StartTime")) { - // Remove trailing "Z" from keyword - PvlKeyword &startTime = inst["StartTime"]; - QString startTimeString = startTime[0]; - if (QString::compare(startTimeString.at(startTimeString.size() - 1), "Z", Qt::CaseInsensitive) == 0){ - startTimeString = startTimeString.left(startTimeString.length() - 1); - startTime.setValue(startTimeString); - } - } - if (inst.hasKeyword("StopTime")) { - // Remove trailing "Z" from keyword - PvlKeyword &stopTime = inst["StopTime"]; - QString stopTimeString = stopTime[0]; - if (QString::compare(stopTimeString.at(stopTimeString.size() - 1), "Z", Qt::CaseInsensitive) == 0){ - stopTimeString = stopTimeString.left(stopTimeString.length() - 1); - stopTime.setValue(stopTimeString); - } - } - outcube->putGroup(otherLabels.findGroup("Instrument")); -/* - // This code is not needed now, but is included here commented-out in case it becomes necessary - // to support the swath modes by setting their NaifFrameCodes in the future. The swath mode - // setting is currently handled entirely via the camera model. - - // add kernels group - QString instId = inst["InstrumentId"]; - QString encoding = inst["EncodingType"]; - QString swath = inst["SwathModeId"]; - PvlGroup kern("Kernels"); - if (instId == "TC1") { - if (swath == "Full") { - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131352)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131353)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131354)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131355)); - } - } - } - else if (swath == "Nominal") { - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131356)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131357)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131358)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131359)); - } - } - } - else { // swath == "Half" - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131360)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131361)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131362)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131363)); - } - } - } - } - if (instId == "TC2") { - if (swath == "Full") { - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131372)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131373)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131374)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131375)); - } - } - } - else if (swath == "Nominal") { - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131376)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131377)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131378)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131379)); - } - } - } - else { // swath == "Half" - if (productSetId == "TC_w_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131380)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131381)); - } - } - else if (productSetId == "TC_s_Level2B0") { - if (encoding == "DCT") { - kern += PvlKeyword("NaifFrameCode", toString(-131382)); - } - else { // encoding == "N/A" so no compression - kern += PvlKeyword("NaifFrameCode", toString(-131383)); - } - } - } - } - */ + kaguyatc2isis(ui, &appLog); } - if ( otherLabels.hasGroup("BandBin") - && otherLabels.findGroup("BandBin").keywords() > 0 ) { - - PvlGroup &bandBinGroup = otherLabels.findGroup("BandBin"); - if (!bandBinGroup.hasKeyword("FilterName")) { - bandBinGroup += PvlKeyword("FilterName", "BroadBand"); + catch (...) { + for (auto grpIt = appLog.beginGroup(); grpIt != appLog.endGroup(); grpIt++) { + Application::Log(*grpIt); } - if (!bandBinGroup.hasKeyword("Center")) { - bandBinGroup += PvlKeyword("Center", "640", "nanometers"); - } - if (!bandBinGroup.hasKeyword("Width")) { - bandBinGroup += PvlKeyword("Width", "420", "nanometers"); - } - outcube->putGroup(bandBinGroup); - } - else { - // Add the BandBin group - PvlGroup bandBinGroup("BandBin"); - bandBinGroup += PvlKeyword("FilterName", "BroadBand"); - bandBinGroup += PvlKeyword("Center", "640nm"); - bandBinGroup += PvlKeyword("Width", "420nm"); - outcube->putGroup(bandBinGroup); + throw; } - if ( otherLabels.hasGroup("Archive") - && otherLabels.findGroup("Archive").keywords() > 0 ) { - outcube->putGroup(otherLabels.findGroup("Archive")); + for (auto grpIt = appLog.beginGroup(); grpIt != appLog.endGroup(); grpIt++){ + Application::Log(*grpIt); } - if ( otherLabels.hasGroup("Kernels") - && otherLabels.findGroup("Kernels").keywords() > 0 ) { - outcube->putGroup(otherLabels.findGroup("Kernels", Pvl::Traverse)); - } - - importPds.EndProcess(); } diff --git a/isis/tests/FunctionalTestsKaguyatc2isis.cpp b/isis/tests/FunctionalTestsKaguyatc2isis.cpp new file mode 100644 index 0000000000..0b60ffb1e6 --- /dev/null +++ b/isis/tests/FunctionalTestsKaguyatc2isis.cpp @@ -0,0 +1,88 @@ +#include + +#include "kaguyatc2isis.h" +#include "Fixtures.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "TestUtilities.h" + +#include "gtest/gtest.h" + +using namespace Isis; + +static QString APP_XML = FileName("$ISISROOT/bin/xml/kaguyatc2isis.xml").expanded(); + +TEST(kaguyatc2isisTest, kaguyatc2isisTestDefault) { + Pvl appLog; + QTemporaryDir prefix; + QString cubeFileName = prefix.path() + "/kaguyatc2isisTEMP.cub"; + QVector args = {"from=data/kaguyatc2isis/TC1S2B0_01_05186N225E0040_mini.lbl", "to="+cubeFileName}; + + UserInterface options(APP_XML, args); + try { + kaguyatc2isis(options, &appLog); + } + catch (IException &e) { + FAIL() << "Unable to ingest Kaguya TC image: " <findGroup("Dimensions", Pvl::Traverse); + ASSERT_EQ(int(dims["Samples"]), 3208); + ASSERT_EQ(int(dims["Lines"]), 3); + ASSERT_EQ(int(dims["Bands"]), 1); + + // Pixels group + PvlGroup &pix = isisLabel->findGroup("Pixels", Pvl::Traverse); + ASSERT_EQ(pix["Type"][0].toStdString(), "SignedWord"); + ASSERT_EQ(pix["ByteOrder"][0].toStdString(), "Lsb"); + ASSERT_DOUBLE_EQ(double(pix["Base"]), 0.0); + ASSERT_DOUBLE_EQ(double(pix["Multiplier"]), 0.013); + + // Instrument Group + PvlGroup &inst = isisLabel->findGroup("Instrument", Pvl::Traverse); + ASSERT_EQ(inst["MissionName"][0].toStdString(), "SELENE"); + ASSERT_EQ(inst["SpacecraftName"][0].toStdString(), "KAGUYA"); + ASSERT_EQ(inst["InstrumentName"][0].toStdString(), "TERRAIN CAMERA 1"); + ASSERT_EQ(inst["InstrumentId"][0].toStdString(), "TC1"); + ASSERT_EQ(inst["TargetName"][0].toStdString(), "MOON"); + ASSERT_EQ(inst["StartTime"][0].toStdString(), "2008-12-07T05:04:34.458542"); + ASSERT_EQ(inst["StopTime"][0].toStdString(), "2008-12-07T05:05:04.715727"); + ASSERT_EQ(inst["SpacecraftClockStartCount"][0].toStdString(), "912661463.551562"); + ASSERT_EQ(inst["SpacecraftClockStopCount"][0].toStdString(), "912661493.808747"); + ASSERT_DOUBLE_EQ(inst["ExposureDuration"], 3.25); + ASSERT_EQ(inst["ExposureDuration"].unit(), "ms"); + ASSERT_DOUBLE_EQ(inst["LineSamplingInterval"], 6.499932); + ASSERT_EQ(inst["LineSamplingInterval"].unit(), "ms"); + ASSERT_EQ(inst["IlluminationCondition"][0].toStdString(), "MORNING"); + + // Archive Group + PvlGroup &arch = isisLabel->findGroup("Archive", Pvl::Traverse); + + ASSERT_EQ(arch["DataSetId"][0].toStdString(), "SLN-L-TC-3-S-LEVEL2B0-V1.0"); + ASSERT_EQ(arch["ImageValueType"][0].toStdString(), "RADIANCE"); + ASSERT_EQ(int(arch["SceneMaximumDn"]), 3913); + ASSERT_EQ(int(arch["SceneMinimumDn"]), 30); + ASSERT_DOUBLE_EQ(double(arch["SceneAverageDn"]), 868.1); + ASSERT_DOUBLE_EQ(double(arch["UpperLeftLatitude"]), 21.694101); + ASSERT_DOUBLE_EQ(double(arch["UpperLeftLongitude"]), 3.476042); + ASSERT_DOUBLE_EQ(double(arch["UpperRightLatitude"]), 21.711476); + ASSERT_DOUBLE_EQ(double(arch["UpperRightLongitude"]), 4.636101); + ASSERT_DOUBLE_EQ(double(arch["LowerLeftLatitude"]), 23.230896); + ASSERT_DOUBLE_EQ(double(arch["LowerLeftLongitude"]), 3.440187); + ASSERT_DOUBLE_EQ(double(arch["LowerRightLatitude"]), 23.248459); + ASSERT_DOUBLE_EQ(double(arch["LowerRightLongitude"]), 4.613281); + + // Bandbin Group + PvlGroup &bandbin = isisLabel->findGroup("BandBin", Pvl::Traverse); + ASSERT_EQ(bandbin["Center"][0], "640nm"); + ASSERT_EQ(bandbin["Width"][0], "420nm"); + + // Kernels Group + PvlGroup &kern = isisLabel->findGroup("Kernels", Pvl::Traverse); + ASSERT_EQ(int(kern["NaifCkCode"]), -131350); + ASSERT_EQ(int(kern["NaifFrameCode"]), -131351); +} diff --git a/isis/tests/data/kaguyatc2isis/TC1S2B0_01_05186N225E0040_mini.img b/isis/tests/data/kaguyatc2isis/TC1S2B0_01_05186N225E0040_mini.img new file mode 100644 index 0000000000000000000000000000000000000000..eaad94a387ea4c9ddfe89ffc4125d0d3da6b96b0 GIT binary patch literal 19248 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 qKas-|8<) +MISSION_NAME = SELENE +DATA_SET_ID = SLN-L-TC-3-S-LEVEL2B0-V1.0 +DATA_SET_NAME = "SELENE MOON TC 3 MONO LEVEL2B0 V1.0" +L2DB_ORIGINAL_ID = TC_s_Level2B0 +PRODUCT_ID = TC1S2B0_01_05186N225E0040 +INSTRUMENT_TYPE = IMAGER +INSTRUMENT_ID = TC1 +INSTRUMENT_NAME = "TERRAIN CAMERA 1" +INSTRUMENT_HOST_NAME = "SELENE MAIN ORBITER" +TARGET_TYPE = SATELLITE +TARGET_NAME = MOON +START_TIME = 2008-12-07T05:04:34.460480 +STOP_TIME = 2008-12-07T05:05:04.717980 +SOFTWARE_NAME = RGC_TC_s_Level2B0 +SOFTWARE_VERSION = 1.0.0 +PROCESS_VERSION_ID = L2B +PRODUCT_CREATION_TIME = 2013-06-08T12:58:16 +PROGRAM_START_TIME = 2013-06-08T12:58:01 +PRODUCER_ID = LISM +PRODUCT_SET_ID = TC_s_Level2B0 +PRODUCT_VERSION_ID = "01" +REGISTERED_PRODUCT = Y +ILLUMINATION_CONDITION = MORNING +LEVEL2A_FILE_NAME = TC1S2A0_02TMF05186_004_0002.img +SPICE_METAKERNEL_FILE_NAME = RGC_INF_TCv401IK_MIv200IK_SPv105IK_RISE100i_05_LongCK_D_V02_de421_110706.mk +MISSION_PHASE_NAME = Extended +REVOLUTION_NUMBER = 5186 +STRIP_SEQUENCE_NUMBER = 4 +SCENE_SEQUENCE_NUMBER = 2 +UPPER_LEFT_DAYTIME_FLAG = Day +UPPER_RIGHT_DAYTIME_FLAG = Day +LOWER_LEFT_DAYTIME_FLAG = Day +LOWER_RIGHT_DAYTIME_FLAG = Day +OBSERVATION_MODE_ID = NORMAL +SENSOR_DESCRIPTION = "Imagery type:Pushbroom. ImageryMode:Mono,Stereo. ExposureTimeMode:Long,Middle,Short. CompressionMode:NonComp,DCT. Q-table:32 patterns. H-table:4 patterns. SwathMode:F(Full),N(Nominal),H(Half). First pixel number:1(F),297(N),1172(H)." +SENSOR_DESCRIPTION2 = "Pixel size:7x7[micron^2](TC1/TC2). Wavelength range:430-850[nm](TC1/TC2). A/D rate:10[bit](TC1/TC2). Slant angle:+/-15[degree] (from nadir to +x of S/C)(TC1/TC2). Focal length:72.45/72.63[mm](TC1/TC2). F number:3.97/3.98(TC1/TC2)." +DETECTOR_STATUS = (TC1:ON, TC2:OFF, MV:OFF, MN:OFF, SP:ON) +EXPOSURE_MODE_ID = MIDDLE +LINE_EXPOSURE_DURATION = (3.25 ) +SPACECRAFT_CLOCK_START_COUNT = "912661463.5535 " +SPACECRAFT_CLOCK_STOP_COUNT = "912661493.8110 " +CORRECTED_SC_CLOCK_START_COUNT = 912661463.551562 +CORRECTED_SC_CLOCK_STOP_COUNT = 912661493.808747 +CORRECTED_START_TIME = 2008-12-07T05:04:34.458542 +CORRECTED_STOP_TIME = 2008-12-07T05:05:04.715727 +LINE_SAMPLING_INTERVAL = 6.5 +CORRECTED_SAMPLING_INTERVAL = (6.499932 ) +UPPER_LEFT_LATITUDE = 21.694101 +UPPER_LEFT_LONGITUDE = 3.476042 +UPPER_RIGHT_LATITUDE = 21.711476 +UPPER_RIGHT_LONGITUDE = 4.636101 +LOWER_LEFT_LATITUDE = 23.230896 +LOWER_LEFT_LONGITUDE = 3.440187 +LOWER_RIGHT_LATITUDE = 23.248459 +LOWER_RIGHT_LONGITUDE = 4.613281 +LOCATION_FLAG = A +ROLL_CANT = NO +SCENE_CENTER_LATITUDE = 22.472717 +SCENE_CENTER_LONGITUDE = 4.042497 +INCIDENCE_ANGLE = 65.012 +EMISSION_ANGLE = 15.912 +PHASE_ANGLE = 67.161 +SOLAR_AZIMUTH_ANGLE = 102.71 +FOCAL_PLANE_TEMPERATURE = (18.08 ) +TELESCOPE_TEMPERATURE = (17.82 ) +SATELLITE_MOVING_DIRECTION = -1 +FIRST_SAMPLED_LINE_POSITION = UPPERMOST +FIRST_DETECTOR_ELEM_POSITION = LEFT +A_AXIS_RADIUS = 1737.4 +B_AXIS_RADIUS = 1737.4 +C_AXIS_RADIUS = 1737.4 +DEFECT_PIXEL_POSITION = N/A +SWATH_MODE_ID = FULL +FIRST_PIXEL_NUMBER = 1 +LAST_PIXEL_NUMBER = 3208 +SPACECRAFT_ALTITUDE = 101.768 +SPACECRAFT_GROUND_SPEED = 1.54 +TC1_TELESCOPE_TEMPERATURE = 18.01 +TC2_TELESCOPE_TEMPERATURE = 18.01 +DPU_TEMPERATURE = 13.3 +TM_TEMPERATURE = 16.99 +TM_RADIATOR_TEMPERATURE = 14.6 +Q_TABLE_ID = N/A +HUFFMAN_TABLE_ID = N/A +DATA_COMPRESSION_PERCENT_MEAN = 100.0 +DATA_COMPRESSION_PERCENT_MAX = 100.0 +DATA_COMPRESSION_PERCENT_MIN = 100.0 +Object = IMAGE + COMPRESSION_TYPE = N/A + COMPRESSION_PERCENT = 100.0 + NOMINAL_LINE_NUMBER = 4088 + NOMINAL_OVERLAP_LINE_NUMBER = 568 + OVERLAP_LINE_NUMBER = 568 + LINES = 3 + LINE_SAMPLES = 3208 + SAMPLE_TYPE = MSB_INTEGER + SAMPLE_BITS = 16 + IMAGE_VALUE_TYPE = RADIANCE + UNIT = W/m**2/micron/sr + SCALING_FACTOR = 0.013 + OFFSET = 0.0 + MIN_FOR_STATISTICAL_EVALUATION = 0 + MAX_FOR_STATISTICAL_EVALUATION = 32767 + SCENE_MAXIMUM_DN = 3913 + SCENE_MINIMUM_DN = 30 + SCENE_AVERAGE_DN = 868.1 + SCENE_STDEV_DN = 236.6 + SCENE_MODE_DN = 833 + SHADOWED_AREA_MINIMUM = 0 + SHADOWED_AREA_MAXIMUM = 0 + SHADOWED_AREA_PERCENTAGE = 0 + INVALID_TYPE = (SATURATION, MINUS, DUMMY_DEFECT, OTHER) + INVALID_VALUE = (-20000, -21000, -22000, -23000) + INVALID_PIXELS = (0, 0, 0, 0) +End_Object +Object = PROCESSING_PARAMETERS + DARK_FILE_NAME = TC1_DRK_04740_07463_M_N_b05.csv + FLAT_FILE_NAME = TC1_FLT_04740_07536_N_N_b05.csv + EFFIC_FILE_NAME = TC1_EFF_PRFLT_N_N_v01.csv + NONLIN_FILE_NAME = TC1_NLT_PRFLT_N_N_v01.csv + RAD_CNV_COEF = (3.790009 ) + L2A_DEAD_PIXEL_THRESHOLD = 30 + L2A_SATURATION_THRESHOLD = 1023 + DARK_VALID_MINIMUM = -5 + RADIANCE_SATURATION_THRESHOLD = 425.971 +End_Object +End \ No newline at end of file