53 LroWideAngleCamera::LroWideAngleCamera(
Cube &cube) :
67 QString stime = inst[
"SpacecraftClockStartCount"];
76 QString instId = inst[
"InstrumentId"][0].toUpper();
78 int frameletSize = 14;
80 int filterIKBase = 10;
82 if (instId ==
"WAC-UV") {
85 filterIKBase = 15 - 1;
87 else if (instId ==
"WAC-VIS") {
90 filterIKBase = 10 - 3;
93 QString msg =
"Invalid value [" + instId
94 +
"] for keyword [InstrumentId]";
103 const PvlKeyword &filtNames = bandBin[
"Center"];
106 if (nbands != filtNames.
size()) {
108 mess <<
"Number bands in (file) label (" << nbands
109 <<
") do not match number of values in BandBin/Center keyword ("
110 << filtNames.
size() <<
") - required for band-dependent geoemtry";
115 bool dataflipped = (inst[
"DataFlipped"][0].toUpper() ==
"YES");
118 QString instCode =
"INS" + QString::number(
naifIkCode());
120 QString ikernKey = instCode +
"_FILTER_BANDCENTER";
123 ikernKey = instCode +
"_FILTER_OFFSET";
127 ikernKey = instCode +
"_FILTER_BANDID";
135 for (
int i = 0 ; i < foffset.size() ; i++) {
136 filterToDetectorOffset.
add(fbc[i], foffset[i]);
137 wavel.
add(foffset[i], fbc[i]);
138 filterIKCode.
add(fbc[i],
naifIkCode() - (filterIKBase + fbandid[i]));
144 int frameletOffsetFactor = inst[
"ColorOffset"];
145 if ( dataflipped ) frameletOffsetFactor *= -1;
147 for (
int j = 0 ; j < wavel.
size() ; j++) {
148 int wavelen = wavel.
getNth(j);
149 filterToFrameletOffset.
add(wavelen, j * frameletOffsetFactor);
154 for (
int i = 0; i < filtNames.
size(); i++) {
155 if (!filterToDetectorOffset.
exists(filtNames[i].toInt())) {
156 QString msg =
"Unrecognized filter name [" + filtNames[i] +
"]";
160 p_detectorStartLines.push_back(filterToDetectorOffset.
get(filtNames[i].toInt()));
161 p_frameletOffsets.push_back(filterToFrameletOffset.
get(filtNames[i].toInt()));
163 QString kBase =
"INS" + QString::number(filterIKCode.
get(filtNames[i].toInt()));
164 p_focalLength.push_back(
getDouble(kBase+
"_FOCAL_LENGTH"));
165 p_boreSightSample.push_back(
getDouble(kBase+
"_BORESIGHT_SAMPLE"));
166 p_boreSightLine.push_back(
getDouble(kBase+
"_BORESIGHT_LINE"));
170 double frameletRate = (double) inst[
"InterframeDelay"] / 1000.0;
177 bool flippedFramelets = dataflipped;
182 QString instModeId = inst[
"InstrumentModeId"][0].toUpper();
185 if (instModeId ==
"BW") {
186 instModeId += inst[
"Mode"][0];
189 p_frameletOffsets[0] = 0;
192 ikernKey = instCode +
"_" + instModeId +
"_SAMPLE_OFFSET";
199 for (
int i = 0 ; i < filtNames.
size() ; i++ ) {
200 fplane->
addFilter(filterIKCode.
get(filtNames[i].toInt()));
201 distort->
addFilter(filterIKCode.
get(filtNames[i].toInt()));
205 bool evenFramelets = (inst[
"Framelets"][0].toUpper() ==
"EVEN");
213 if(instId ==
"WAC-UV") {
238 int maxbands = min(p_detectorStartLines.size(), p_frameletOffsets.size());
239 if ((vband <= 0) || (vband > maxbands)) {
241 mess <<
"Requested virtual band (" << vband
242 <<
") outside valid (BandBin/Center) limits (1 - " << maxbands
259 p_boreSightLine[vband-1] + 1.0);
276 dtpool_c(key.toAscii().data(), &found, &n, ctype);
288 QVariant poolKeySize = getStoredResult(key +
"_SIZE",
SpiceIntType);
290 int nvals = poolKeySize.toInt();
298 QString mess =
"Kernel pool keyword " + key +
" not found!";
303 for (
int i = 0 ; i < nvals ; i++) {