diff --git a/isis/src/galileo/apps/gllssical/gllssical.xml b/isis/src/galileo/apps/gllssical/gllssical.xml index 9c634bef5629ae7979b4ff6d64c9293e86c25a10..c1e6f5e70f4716d66e6847cd8f553f4c1096a3dd 100644 --- a/isis/src/galileo/apps/gllssical/gllssical.xml +++ b/isis/src/galileo/apps/gllssical/gllssical.xml @@ -163,6 +163,9 @@ Modified code that it doesn't require a camera model to calculate the I/F. Fixes #1740. </change> + <change name="Kristin Berry" date="2021-02-23"> + Modified code to try to use the camera to get the target-sun distance to calculate the IOF. + </change> </history> <groups> diff --git a/isis/src/galileo/apps/gllssical/main.cpp b/isis/src/galileo/apps/gllssical/main.cpp index e442d0b00a13990575bac36210f7102f31112d15..25e06e4f4d49089ba4ce71fd3177338c58375c6b 100644 --- a/isis/src/galileo/apps/gllssical/main.cpp +++ b/isis/src/galileo/apps/gllssical/main.cpp @@ -9,10 +9,12 @@ find files of those names at the top level of this repository. **/ #include "Isis.h" #include "ProcessByLine.h" #include "Buffer.h" +#include "Camera.h" #include "iTime.h" #include "SpecialPixel.h" #include "Spice.h" #include "TextFile.h" +#include "NaifStatus.h" using namespace Isis; using namespace std; @@ -444,31 +446,55 @@ void calculateScaleFactor0(Cube *icube, Cube *gaincube) { gainConversion = toDouble(conversionFactors["GainRatios"][getGainModeID(gaincube)-1]); if (iof) { - Pvl *label = icube->label(); - Spice spicegll(*icube); - spicegll.instrumentPosition()->SetAberrationCorrection("LT+S"); - QString startTime = label->findGroup("Instrument",Pvl::Traverse)["SpacecraftClockStartCount"][0]; - Isis::FileName sclk(label->findGroup("Kernels",Pvl::Traverse)["SpacecraftClock"][0]); - QString sclkName(sclk.expanded()); - furnsh_c(sclkName.toLatin1().data()); - double obsStartTime; - scs2e_c(-77, startTime.toLatin1().data(), &obsStartTime); - spicegll.setTime(obsStartTime); - double sunv[3]; - spicegll.sunPosition(sunv); - - double sunkm = vnorm_c(sunv); - - // Convert to AU units - rsun = sunkm / 1.49597870691E8 / 5.2; - - /* - * We are calculating I/F, so scaleFactor0 is: - * - * S1 K - * -------- * --- (D/5.2)**2 - * A1 Ko - */ + try { + Camera *cam; + cam = icube->camera(); + cam->instrumentPosition()->SetAberrationCorrection("LT+S"); + // Set time to the starting time of the image by setting image. + cam->SetImage(0.5, 0.5); + + // rsun converted to AU + rsun = cam->sunToBodyDist() / 1.49597870691E8 / 5.2; + } + catch (IException &e) { + // try original fallback for previously spiceinited data + try { + Pvl *label = icube->label(); + QString startTime = label->findGroup("Instrument",Pvl::Traverse)["SpacecraftClockStartCount"][0]; + + Spice spicegll(*icube); + spicegll.instrumentPosition()->SetAberrationCorrection("LT+S"); + Isis::FileName sclk(label->findGroup("Kernels",Pvl::Traverse)["SpacecraftClock"][0]); + QString sclkName(sclk.expanded()); + + NaifStatus::CheckErrors(); + furnsh_c(sclkName.toLatin1().data()); + NaifStatus::CheckErrors(); + + double obsStartTime; + scs2e_c(-77, startTime.toLatin1().data(), &obsStartTime); + spicegll.setTime(obsStartTime); + double sunv[3]; + spicegll.sunPosition(sunv); + + double sunkm = vnorm_c(sunv); + + // Convert to AU units + rsun = sunkm / 1.49597870691E8 / 5.2; + } + catch (IException &e) { + QString message = "IOF option does not work with non-spiceinited cubes."; + throw IException(e, IException::User, message, _FILEINFO_); + } + } + + /* + * We are calculating I/F, so scaleFactor0 is: + * + * S1 K + * -------- * --- (D/5.2)**2 + * A1 Ko + */ scaleFactor0 = (s1 * (cubeConversion / gainConversion) * pow(rsun, 2)) / (scaleFactor); } else { diff --git a/isis/src/galileo/apps/gllssical/tsts/default/Makefile b/isis/src/galileo/apps/gllssical/tsts/default/Makefile index 01f23792ed07b21443c5a89f0c3de39bb5fec13b..54c57bc364959753ba253f8b79dae2a65a918d38 100644 --- a/isis/src/galileo/apps/gllssical/tsts/default/Makefile +++ b/isis/src/galileo/apps/gllssical/tsts/default/Makefile @@ -3,7 +3,30 @@ APPNAME = gllssical include $(ISISROOT)/make/isismake.tsts commands: + # Test old spiceinited data $(APPNAME) FROM=$(INPUT)/3439R.cub TO=$(OUTPUT)/3439R.cal.cub > /dev/null; catlab FROM=$(OUTPUT)/3439R.cal.cub TO=$(OUTPUT)/3439R.cal.pvl > /dev/null; $(APPNAME) FROM=$(INPUT)/1213r.cub TO=$(OUTPUT)/1213r.cal.cub > /dev/null; catlab FROM=$(OUTPUT)/1213r.cal.cub TO=$(OUTPUT)/1213r.cal.pvl > /dev/null; + + # Test newly re-spiceinited data + $(APPNAME) FROM=$(INPUT)/3439R.respiceinit.cub TO=$(OUTPUT)/3439R.respiceinit.cub > /dev/null; + catlab FROM=$(OUTPUT)/3439R.respiceinit.cub TO=$(OUTPUT)/3439R.respiceinit.pvl > /dev/null; + $(APPNAME) FROM=$(INPUT)/1213r.respiceinit.cub TO=$(OUTPUT)/1213r.respiceinit.cub > /dev/null; + catlab FROM=$(OUTPUT)/1213r.respiceinit.cub TO=$(OUTPUT)/1213r.respiceinit.pvl > /dev/null; + + # Test non-spiceinited data: throws an error + if [ `$(APPNAME) \ + FROM=$(INPUT)/3439R.nospice.cub TO=$(OUTPUT)/broken.cub 2>> $(OUTPUT)/errors_temp.txt > /dev/null` ]; \ + then true; \ + fi; + + # Remove everything in brackets like filenames/paths from error messages + $(SED) 's/\[\([^"]*\)\]//g' $(OUTPUT)/errors_temp.txt \ + > $(OUTPUT)/errors.txt; + + # Cleanup + $(RM) $(OUTPUT)/errors_temp.txt; + $(RM) $(OUTPUT)/broken.cub; + +