File failed to load: https://isis.astrogeology.usgs.gov/9.0.0/Object/assets/jax/output/NativeMML/config.js
Isis 3 Programmer Reference
NewHorizonsMvicFrameCamera.cpp
1
6
7/* SPDX-License-Identifier: CC0-1.0 */
8
9#include "NewHorizonsMvicFrameCamera.h"
10
11#include <QDebug>
12#include <QString>
13
14#include "Camera.h"
15#include "CameraDetectorMap.h"
16#include "CameraDistortionMap.h"
17#include "CameraFocalPlaneMap.h"
18#include "CameraGroundMap.h"
19#include "CameraSkyMap.h"
20#include "IString.h"
21#include "iTime.h"
22#include "NewHorizonsMvicFrameCameraDistortionMap.h"
23#include "NaifStatus.h"
24
25using namespace std;
26
27namespace Isis {
28
42 m_instrumentNameLong = "Multispectral Visible Imaging Framing Camera";
43 m_instrumentNameShort = "MVIC FRAMING";
44 m_spacecraftNameLong = "New Horizons";
45 m_spacecraftNameShort = "NewHorizons";
46
48
51
52 // Get the start time from labels
53 Pvl &lab = *cube.label();
54 PvlGroup &inst = lab.findGroup("Instrument", Pvl::Traverse);
55 m_exposure = inst["ExposureDuration"];
56 QString stime = inst["SpacecraftClockStartCount"];
57 // ** TODO ** Need an offset time added to labels at ingestion?? The 0.125 value is
58 // the value in DELTAT00.
59 double offset = 0.125;
60 m_etStart = getClockTime(stime).Et() + offset;
61 SpiceChar utc[30];
62 et2utc_c(m_etStart, "ISOC", 3, 30, utc);
63// qDebug()<<"\n\nspacecraftClockStartCount + "<<offset<<" (offset) = "<<utc;
64
65 // If bands have been extracted from the original image then we
66 // need to read the band bin group so we can map from the cube band
67 // number to the instrument band number. Also save times of each framelet which are stored
68 // in the BandBin group.
69 PvlGroup &bandBin = lab.findGroup("BandBin", Pvl::Traverse);
70 PvlKeyword &origBand = bandBin["OriginalBand"];
71 PvlKeyword &utcTime = bandBin["UtcTime"];
72 for(int i = 0; i < origBand.size(); i++) {
73 m_originalBand.push_back(toInt(origBand[i]));
74 m_utcTime.push_back(utcTime[i]);
75 }
76
77 CameraDetectorMap *detectorMap = new CameraDetectorMap(this);
78 detectorMap->SetDetectorSampleSumming(1);
79 detectorMap->SetDetectorLineSumming(1);
80
81 // Setup focal plane map. The class will read data from the instrument addendum kernel to pull
82 // out the affine transforms from detector samp,line to focal plane x,y.
83 CameraFocalPlaneMap *focalMap = new CameraFocalPlaneMap(this, naifIkCode());
84 focalMap->SetDetectorOrigin(2500.5, 64.5);
85
86 // Read distortion coefficients and boresight offsets from the instrument kernels. Then
87 // construct the distortion map.
88 //read the distortion coefs from the NAIF Kernels
89 QString naifXKey = "INS-98900_DISTORTION_COEF_X";
90 QString naifYKey = "INS-98900_DISTORTION_COEF_Y";
91 QString naifppKey = "INS-98900_PP_OFFSET";
92 vector<double> distCoefX;
93 vector<double> distCoefY;
94
95 for (int i=0; i < 20; i++) {
96 distCoefX.push_back(getDouble(naifXKey,i));
97 distCoefY.push_back(getDouble(naifYKey,i));
98 }
99
100 new NewHorizonsMvicFrameCameraDistortionMap(this, distCoefX, distCoefY);
101
102 // Setup the ground and sky map
103 new CameraGroundMap(this);
104 new CameraSkyMap(this);
105
106 // Internalize all the NAIF SPICE information into memory.
107 LoadCache();
109 }
110
111
118
119 if(vband > (int) m_originalBand.size()) {
120 QString msg = QObject::tr("Band number out of array bounds in NewHorizonsMvicFrameCamera::SetBand legal "
121 "bands are [1-%1], input was [%2]").
122 arg(m_originalBand.size()).arg(vband);
123 throw IException(IException::Programmer, msg, _FILEINFO_);
124 }
125
126 iTime time(m_utcTime[vband-1]);
127 double et = time.Et();
128
129 SpiceChar utc[30];
130 et2utc_c(et, "ISOC", 3, 30, utc);
131 Camera::setTime(et);
132 pair<iTime, iTime> shuttertimes = ShutterOpenCloseTimes(et, m_exposure);
133
134 // Set up valid band access
135 Camera::SetBand(vband);
136
137 }
138
139
163}
164
165
175extern "C" Isis::Camera *NewHorizonsMvicFrameCameraPlugin(Isis::Cube &cube) {
176 return new Isis::NewHorizonsMvicFrameCamera(cube);
177}
Convert between parent image coordinates and detector coordinates.
void SetDetectorLineSumming(const double summing)
Set line summing mode.
void SetDetectorSampleSumming(const double summing)
Set sample summing mode.
Convert between distorted focal plane and detector coordinates.
void SetDetectorOrigin(const double sample, const double line)
Set the detector origin.
Convert between undistorted focal plane and ground coordinates.
QString m_spacecraftNameLong
Full spacecraft name.
Definition Camera.h:499
virtual double exposureDuration() const
Return the exposure duration for the pixel that the camera is set to.
Definition Camera.cpp:3093
void SetFocalLength()
Reads the focal length from the instrument kernel.
Definition Camera.cpp:1422
void SetPixelPitch()
Reads the Pixel Pitch from the instrument kernel.
Definition Camera.cpp:1429
void LoadCache()
This loads the spice cache big enough for this image.
Definition Camera.cpp:2450
QString m_instrumentNameShort
Shortened instrument name.
Definition Camera.h:498
QString m_spacecraftNameShort
Shortened spacecraft name.
Definition Camera.h:500
virtual void SetBand(const int band)
Virtual method that sets the band number.
Definition Camera.cpp:2710
QString m_instrumentNameLong
Full instrument name.
Definition Camera.h:497
Convert between undistorted focal plane and ra/dec coordinates.
IO Handler for Isis Cubes.
Definition Cube.h:168
Pvl * label() const
Returns a pointer to the IsisLabel object associated with the cube.
Definition Cube.cpp:1734
FramingCamera(Cube &cube)
Constructs the FramingCamera object.
virtual std::pair< iTime, iTime > ShutterOpenCloseTimes(double time, double exposureDuration)=0
Returns the shutter open and close times.
Isis exception class.
Definition IException.h:91
@ Programmer
This error is for when a programmer made an API call that was illegal.
Definition IException.h:146
static void CheckErrors(bool resetNaif=true)
This method looks for any naif errors that might have occurred.
Distort/undistort focal plane coordinates for New Horizons/MVIC frame sensor.
This is the camera model for the New Horizons MVIC Frame mode Camera.
void SetBand(const int vband)
Sets the band in the camera model.
NewHorizonsMvicFrameCamera(Cube &cube)
Create a NewHorizonsMvicFrameCamera object.
virtual std::pair< iTime, iTime > ShutterOpenCloseTimes(double time, double exposureDuration)
The camera model is band dependent, so this method returns false.
Contains multiple PvlContainers.
Definition PvlGroup.h:41
Container for cube-like labels.
Definition Pvl.h:119
A single keyword-value pair.
Definition PvlKeyword.h:87
int size() const
Returns the number of values stored in this keyword.
Definition PvlKeyword.h:133
@ Traverse
Search child objects.
Definition PvlObject.h:158
PvlGroupIterator findGroup(const QString &name, PvlGroupIterator beg, PvlGroupIterator end)
Find a group with the specified name, within these indexes.
Definition PvlObject.h:129
void setTime(const iTime &time)
By setting the time you essential set the position of the spacecraft and body as indicated in the cla...
Definition Sensor.cpp:99
virtual iTime getClockTime(QString clockValue, int sclkCode=-1, bool clockTicks=false)
This converts the spacecraft clock ticks value (clockValue) to an iTime.
Definition Spice.cpp:1060
virtual iTime time() const
Returns the ephemeris time in seconds which was used to obtain the spacecraft and sun positions.
Definition Spice.cpp:891
SpiceInt naifIkCode() const
This returns the NAIF IK code to use when reading from instrument kernels.
Definition Spice.cpp:975
SpiceDouble getDouble(const QString &key, int index=0)
This returns a value from the NAIF text pool.
Definition Spice.cpp:1046
Parse and return pieces of a time string.
Definition iTime.h:65
double Et() const
Returns the ephemeris time (TDB) representation of the time as a double.
Definition iTime.h:126
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16
int toInt(const QString &string)
Global function to convert from a string to an integer.
Definition IString.cpp:93
Namespace for the standard library.