diff --git a/isis/src/apollo/apps/apollopangenck/Makefile b/isis/src/apollo/apps/apollopangenck/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570 --- /dev/null +++ b/isis/src/apollo/apps/apollopangenck/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.apps +endif \ No newline at end of file diff --git a/isis/src/apollo/apps/apollopangenck/apollopangenck.cpp b/isis/src/apollo/apps/apollopangenck/apollopangenck.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f01f8233ae8d61de766418939eb0fa929e703ab9 --- /dev/null +++ b/isis/src/apollo/apps/apollopangenck/apollopangenck.cpp @@ -0,0 +1,1130 @@ +/** + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + + +//Isis.h and IsisDebug.h if needed +#include "Isis.h" + +//C++ standard libraries if needed +#include <math.h> + +//QT libraries if needed if needed + +//third party libraries if needed +#include "NaifStatus.h" + +//Isis Headers if needed +#include "Angle.h" +#include "ApolloPanoramicCamera.h" +#include "ApolloPanoramicDetectorMap.h" +#include "AutoReg.h" +#include "AutoRegFactory.h" +#include "Camera.h" +#include "CameraDetectorMap.h" +#include "Centroid.h" +#include "CentroidApolloPan.h" +#include "Chip.h" +#include "Cube.h" +#include "CSVReader.h" +#include "FileName.h" +#include "IString.h" +#include "iTime.h" +#include "JP2Decoder.h" +#include "LinearAlgebra.h" +#include "ProcessImport.h" +#include "Pvl.h" +#include "PvlGroup.h" +#include "PvlKeyword.h" +#include "PvlObject.h" +#include "PvlTranslationTable.h" +#include "Spice.h" +#include "SpicePosition.h" +#include "SpiceRotation.h" +#include "Table.h" +#include "UserInterface.h" + + +#define FIDL 26.72093 //spacing between fiducial marks in mm +#define ROLLC 74.0846291699105 //constant to convert from V/H to roll speed in rads/sec + +#define NODES 87 //must be odd!!! number of nodes to put in tables + +//constants for 5 micro resolution scans +#define SCALE 10.0 //scale used for down sizingS patternS an search chips +#define SEARCHh 1400.0 //number of lines (in 5-micron-pixels) in search space for the first fiducial +#define SEARCHc 350.0 //number of samples per edge(in 5-micron-pixels) in each sub-search area +#define AVERs 5286.0 //average smaples (in 5-micron-pixels) between fiducials +#define AVERl 23459.0 //average diference (in 5-micron-pixels) between the top and bottom fiducials +#define TRANS_N 28520.0 //nomimal dx between scan lines, scani x + 28532 = (approx) scani+1 x--also + // the size of the search area for the first fiducial + + + +using namespace std; +using namespace Isis; + + +void crossp(double v1[3], double v2[3], double v1cv2[3]); +void Geographic2GeocentricLunar(double geographic[3], double geocentric[3]); +void MfromLeftEulers(double M[3][3], double omega, double phi, double kappa); +void MfromVecLeftAngle(double M[3][3], double vec[3], double angle); +void M2Q(double M[3][3], double Q[4]); + + +double R_MOON[3]; + +void IsisMain() { + UserInterface &ui = Application::GetUserInterface(); + double time0,//start time + time1,//end time + alti, //altitude of the spacecraftmore + fmc, //forward motion compensation rad/sec + horV, //horizontal velocity km/sec + radV, //radial velocity km/sec + rollV,//roll speed in rad/sec + led; //line exposure duration in seconds + + //*********** + + const QString fileName = ui.GetFileName("FROM"); + CSVReader reader(fileName, true, 0, ',', true, true); + + int numDataRows = reader.rows(); + + LinearAlgebra::Matrix tmp(3,3); + LinearAlgebra::Matrix phi0(3,3); + LinearAlgebra::Matrix omega0(3,3); + LinearAlgebra::Matrix kappa0(3,3); + LinearAlgebra::Matrix R0(3,3); + LinearAlgebra::Matrix R(3,3); + LinearAlgebra::Matrix sweep(3,3); + double mean_altitude_rate; + double horizontal_velocity; + double altitude; + double rollVelocity; + double rollAngularVelocity; + + QString str; + CSVReader::CSVAxis row; + CSVReader::CSVAxis startRow; + CSVReader::CSVAxis stopRow; + QStringList outputListFwd; + QStringList outputListReverse; + + int rowsProcessed = 0; + + while (rowsProcessed < numDataRows-1) { + startRow = reader.getRow(rowsProcessed); + QString imageId = startRow[0]; + + do { + rowsProcessed++; + stopRow = reader.getRow(rowsProcessed); + + } while (QString(stopRow[0]) == imageId); + + stopRow = reader.getRow(rowsProcessed-1); + + qDebug() << QString(stopRow[0]); + qDebug() << QString(startRow[0]); + + // get data + QString strStartTime = startRow[6]; + QString strStopTime = stopRow[7]; + iTime startTime(strStartTime); + iTime stopTime(strStopTime); + + qDebug() << strStartTime; + qDebug() << strStopTime; + + double elapsedTime = stopTime - startTime; +// iTime centerTime((startTime) + elapsedTime/2.0); + +// qDebug() << centerTime.UTC(); + +// QString ctrTime = "1971-08-03T16:41:01.46976245"; +// QString ctrTime = "1971-08-03T16:41:01.57976245"; + QString ctrTime = "1971-08-03T16:41:01.68976245"; + iTime centerTime(ctrTime); + + str = startRow[21]; + mean_altitude_rate = str.toDouble(); + + str = startRow[22]; + horizontal_velocity = str.toDouble(); + + str = startRow[23]; + altitude = str.toDouble(); + + rollVelocity = sqrt(mean_altitude_rate*mean_altitude_rate + + horizontal_velocity*horizontal_velocity); + fmc = rollVelocity/altitude; + rollAngularVelocity = fmc * ROLLC; + + str = startRow[24]; + Angle phi = Angle(str.toDouble(), Angle::Units::Degrees); + qDebug() << phi.toString(); + double cosp = cos(phi.radians()); + double sinp = sin(phi.radians()); + + str = startRow[25]; + Angle kappa = Angle(str.toDouble(), Angle::Units::Degrees); + double cosk = cos(kappa.radians()); + double sink = sin(kappa.radians()); + + str = startRow[26]; + Angle omega = Angle(str.toDouble(), Angle::Units::Degrees); + double coso = cos(omega.radians()); + double sino = sin(omega.radians()); + + // reset matrices to + phi0.clear(); + omega0.clear(); + kappa0.clear(); + + // form phi, omega, kappa matrices at time 0 (center of image) + phi0(0,0) = cosp; + phi0(0,2) = sinp; + phi0(1,1) = 1.0; + phi0(2,0) = -sinp; + phi0(2,2) = cosp; + + omega0(0,0) = 1.0; + omega0(1,1) = coso; + omega0(1,2) = -sino; + omega0(2,1) = sino; + omega0(2,2) = coso; + + kappa0(0,0) = cosk; + kappa0(0,1) = -sink; + kappa0(1,0) = sink; + kappa0(1,1) = cosk; + kappa0(2,2) = 1.0; + + qDebug() << phi0; + qDebug() << omega0; + qDebug() << kappa0; + + // create phi-omega-kappa rotation at time 0 + + tmp = prod(phi0,omega0); + R0 = prod(tmp,kappa0); + + // add center time + // create output string + QString outstr; + outstr = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10").arg(centerTime.UTC()). + arg(R0(0,0)).arg(R0(0,1)).arg(R0(0,2)).arg(R0(1,0)).arg(R0(1,1)).arg(R0(1,2)).arg(R0(2,0)). + arg(R0(2,1)).arg(R0(2,2)); + + outputListReverse.append(outstr); + + + // loop backward in time from t0 + iTime intervalTime; + double cacheSlope = 1.05*(elapsedTime)/(NODES-1); + for (int i=(NODES-1)/2-1; i>=0; i--) { + + double relT = + double(i - (NODES-1)/2 + 0.5)*cacheSlope; // interval center time relative to center line + + intervalTime = centerTime + relT; + + Angle theta = Angle(rollAngularVelocity * relT, Angle::Units::Radians); // sweep angle radians + + sweep.clear(); + sweep(0,0) = 1.0; + sweep(1,1) = cos(theta.radians()); + sweep(1,2) = -sin(theta.radians()); + sweep(2,1) = sin(theta.radians()); + sweep(2,2) = cos(theta.radians()); + + R = prod(trans(sweep),R0); + + // create output string + QString outstr; + outstr = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10").arg(intervalTime.UTC()). + arg(R(0,0)).arg(R(0,1)).arg(R(0,2)).arg(R(1,0)).arg(R(1,1)).arg(R(1,2)).arg(R(2,0)). + arg(R(2,1)).arg(R(2,2)); + + outputListReverse.append(outstr); + } + + // loop forward in time from t0 + for (int i=(NODES-1)/2+1; i<NODES; i++) { + + double relT = + double(i - (NODES-1)/2 - 0.5)*cacheSlope; // interval center time relative to center line + + intervalTime = centerTime + relT; + + Angle theta = Angle(rollAngularVelocity * relT, Angle::Units::Radians); // sweep angle radians + + sweep.clear(); + sweep(0,0) = 1.0; + sweep(1,1) = cos(theta.radians()); + sweep(1,2) = -sin(theta.radians()); + sweep(2,1) = sin(theta.radians()); + sweep(2,2) = cos(theta.radians()); + + R = prod(trans(sweep),R0); + + // create output string + QString outstr; + outstr = QString("%1 %2 %3 %4 %5 %6 %7 %8 %9 %10").arg(intervalTime.UTC()). + arg(R(0,0)).arg(R(0,1)).arg(R(0,2)).arg(R(1,0)).arg(R(1,1)).arg(R(1,2)).arg(R(2,0)). + arg(R(2,1)).arg(R(2,2)); + + outputListFwd.append(outstr); + } + + //output Reverse list in reverse order + for (int i = outputListReverse.size()-1; i >= 0; i--) { + qDebug() << outputListReverse.at(i); + } + + //output Fwd list + for (int i = 0; i < outputListFwd.size(); i++) { + qDebug() << outputListFwd.at(i); + } + + int fred=1; + } + + +//*********** + + Cube panCube; + iTime isisTime; + QString iStrTEMP; + + int i,j,k,scFrameCode,insCode; + + QString mission; + + SpicePosition *spPos; + SpiceRotation *spRot; + + //int nlines,nsamples,nbands; + + double deg2rad = acos(-1.0)/180.0; + + ProcessImport jp; + FileName transFile("$apollo15/translations/apollopantranstable.trn"); + PvlTranslationTable transTable(transFile); + PvlGroup kernels_pvlG; + + + insCode = scFrameCode - 230; + + try { + panCube.open(ui.GetFileName("FROM"),"rw"); + } + catch (IException &e) { + throw IException(IException::User, + "Unable to open the file [" + ui.GetFileName("FROM") + "] as a cube.", + _FILEINFO_); + } + + ////////////////////////////////////////////build the cube header instrament group + PvlGroup inst_pvlG("Instrument"); + + PvlKeyword keyword; + + //four that are the same for every panaramic mission + keyword.setName("SpacecraftName"); + keyword.setValue(mission); + inst_pvlG.addKeyword(keyword); + + keyword.setName("InstrumentName"); + keyword.setValue(transTable.Translate("InstrumentName","whatever")); + inst_pvlG.addKeyword(keyword); + + keyword.setName("InstrumentId"); + keyword.setValue(transTable.Translate("InstrumentId","whatever")); + inst_pvlG.addKeyword(keyword); + + keyword.setName("TargetName"); + keyword.setValue(transTable.Translate("TargetName","whatever")); + inst_pvlG.addKeyword(keyword); + + //three that need to be calculated from input values + horV = ui.GetDouble("VEL_HORIZ"); + radV = ui.GetDouble("VEL_RADIAL"); + alti = ui.GetDouble("CRAFT_ALTITUDE"); + + //caculate the LineExposureDuration (led) + if( ui.WasEntered("V/H_OVERRIDE") ) + fmc = ui.GetDouble("V/H_OVERRIDE")/1000.0; + else + //forward motion compensation is directly equivalent to V/H + fmc = sqrt(horV*horV + radV*radV)/alti; + rollV = fmc*ROLLC; //roll angular velcoity is equal to V/H * constant (units rad/sec) + //led = rad/mm * sec/rad = radians(2.5)/FIDL / rollV (final units: sec/mm) + led = (2.5*acos(-1.0)/180.0)/rollV/FIDL; + + //use led and the number of mm to determine the start and stop times + isisTime = ui.GetString("GMT"); + + //calculate starting and stoping times + time0 = isisTime.Et() - led*FIDL*21.5; + time1 = time0 + led*FIDL*43; + + isisTime = time0; + keyword.setName("StartTime"); + keyword.setValue(iStrTEMP=isisTime.UTC()); + inst_pvlG.addKeyword(keyword); + + isisTime = time1; + keyword.setName("StopTime"); + keyword.setValue(iStrTEMP=isisTime.UTC()); + inst_pvlG.addKeyword(keyword); + + keyword.setName("LineExposureDuration"); + //converted led to msec/mm--negative sign to account for the anti-parallel time and line axes + keyword.setValue(iStrTEMP=toString(-led),"sec/mm"); + inst_pvlG.addKeyword(keyword); + + panCube.putGroup(inst_pvlG); + + ///////////////////////////////////The kernals group + kernels_pvlG.setName("Kernels"); + kernels_pvlG.clear(); + + keyword.setName("NaifFrameCode"); + keyword.setValue(toString(insCode)); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("LeapSecond"); + keyword.setValue( transTable.Translate("LeapSecond","File1") ); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("TargetAttitudeShape"); + keyword.setValue( transTable.Translate("TargetAttitudeShape", "File1") ); + keyword.addValue( transTable.Translate("TargetAttitudeShape", "File2") ); + keyword.addValue( transTable.Translate("TargetAttitudeShape", "File3") ); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("TargetPosition"); + keyword.setValue("Table"); + keyword.addValue( transTable.Translate("TargetPosition", "File1") ); + keyword.addValue( transTable.Translate("TargetPosition", "File2") ); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("ShapeModel"); + keyword.setValue( transTable.Translate("ShapeModel", "File1") ); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("InstrumentPointing"); + keyword.setValue("Table"); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("InstrumentPosition"); + keyword.setValue("Table"); + kernels_pvlG.addKeyword(keyword); + + keyword.setName("InstrumentAddendum"); + keyword.setValue( transTable.Translate("InstrumentAddendum",mission)); + kernels_pvlG.addKeyword(keyword); + + panCube.putGroup(kernels_pvlG); + + //////////////////////////////////////////attach a target rotation table + char frameName[32]; + SpiceInt frameCode; + SpiceBoolean found; + //get the framecode from the body code (301=MOON) + cidfrm_c(301, sizeof(frameName), &frameCode, frameName, &found); + if(!found) { + QString naifTarget = QString("IAU_MOOM"); + namfrm_c(naifTarget.toLatin1().data(), &frameCode); + if(frameCode == 0) { + QString msg = "Can not find NAIF code for [" + naifTarget + "]"; + throw IException(IException::Io, msg, _FILEINFO_); + } + } + spRot = new SpiceRotation(frameCode); + //create a table from starttime to endtime (streched by 3%) with NODES entries + spRot->LoadCache(time0-0.015*(time1-time0), time1+0.015*(time1-time0), NODES); + Table tableTargetRot = spRot->Cache("BodyRotation"); + tableTargetRot.Label() += PvlKeyword("Description", "Created by apollopaninit"); + panCube.write(tableTargetRot); + + + //////////////////////////////////////////////////attach a sun position table + spPos = new SpicePosition(10,301); //Position of the sun (10) WRT to the MOON (301) + //create a table from starttime to endtime (stretched by 3%) with NODES entries + spPos->LoadCache(time0-0.015*(time1-time0), time1+0.015*(time1-time0), NODES); + Table tableSunPos = spPos->Cache("SunPosition"); + tableSunPos.Label() += PvlKeyword("SpkTableStartTime", toString(time0-0.015*(time1-time0))); + tableSunPos.Label() += PvlKeyword("SpkTablleEndTime", toString(time1+0.015*(time1-time0))); + tableSunPos.Label() += PvlKeyword("Description", "Created by apollopaninit"); + panCube.write(tableSunPos); //attach the table to the cube + + + /////////////Finding the principal scan line position and orientation + //get the radii of the MOON + SpiceInt tempRadii = 0; + bodvcd_c(301,"RADII",3,&tempRadii,R_MOON); //units are km + double omega,phi,kappa; + + std::vector<double> posSel; //Seleno centric position + std::vector<double> sunPos; //sunPosition used to transform to J2000 + std::vector<double> posJ20; //camera position in J2000 + posSel.resize(3); + sunPos.resize(3); + posJ20.resize(3); + + double temp, + vel[3] = { 0.0, 0.0, 0.0 }, //the total velocity vector (combined Horizonatal and normal components) + // in km/sec + M[3][3] = { { 0.0, 0.0, 0.0 }, + { 0.0, 0.0, 0.0 }, + { 0.0, 0.0, 0.0 } }, //rotation matrix + zDir[] = { 0.0, 0.0, 1.0 }, //selenographic Z axis + northPN[3] = { 0.0, 0.0, 0.0 }, //normal to the plane containing all the north/south directions, + // that is plane containing + // the origin, the z axis, and the primary point of intersection + northL[3] = { 0.0, 0.0, 0.0 }, //north direction vector in local horizontal plane + azm[3] = { 0.0, 0.0, 0.0 }, //azm direction of the veclocity vector in selenographic coordinates + azmP[3] = { 0.0, 0.0, 0.0 }, //azm rotated (partially) and projected into the image plane + norm[3] = { 0.0, 0.0, 0.0 }, //normal to the local horizontal plane + look[3] = { 0.0, 0.0, 0.0 }; //unit direction vector in the pincipal cameral look direction, + // parallel to the vector from the center of the moon through the spacecraft + + double pos0[3] = { 0.0, 0.0, 0.0 }, //coordinate of the camera position + pInt[3] = { 0.0, 0.0, 0.0 }; //coordinate of the principle intersection point + + /////////////////calculating the camera position for the center (principal scan line) + pos0[1] = ui.GetDouble("LON_NADIR")*deg2rad; + pos0[0] = ui.GetDouble("LAT_NADIR")*deg2rad; + pos0[2] = ui.GetDouble("CRAFT_ALTITUDE"); //units are km + Geographic2GeocentricLunar(pos0,pos0); //function is written so the input can also be the + // output + + /////////////////////calculating the camera orientation for the center (principal) scan line + pInt[1] = ui.GetDouble("LON_INT")*deg2rad; + pInt[0] = ui.GetDouble("LAT_INT")*deg2rad; + pInt[2] = 0.0; + Geographic2GeocentricLunar(pInt,pInt); //function is written so the input can also be the output + //calculate the unit look direction vector in object space + look[0] = -pos0[0] + pInt[0]; + look[1] = -pos0[1] + pInt[1]; + look[2] = -pos0[2] + pInt[2]; + temp = sqrt(look[0]*look[0] + look[1]*look[1] + look[2]*look[2]); + look[0] /= temp; + look[1] /= temp; + look[2] /= temp; + //the local normal vector is equal to pInt0/|pInt0| + temp = sqrt(pInt[0]*pInt[0] + pInt[1]*pInt[1] + pInt[2]*pInt[2]); + norm[0] = pInt[0]/temp; + norm[1] = pInt[1]/temp; + norm[2] = pInt[2]/temp; + //omega and phi are defined so that M(phi)M(omega)look = [0 0 -1] leaving only the roation + // around z axis to be found + omega = -atan2(look[1], look[2]); //omega rotation to zero look[1] + phi = atan2(-look[0], sin(omega)*look[1] - cos(omega)*look[2]); //phi rotation to zero look[0] + //use the horizontal velocity vector direction to solve for the last rotation; we will make the + // image x axis parallel to the in-image-plane projection of the horizontal direction of flight. + // The local normal cross the selenogrpahic z gives northPN (normal to the plane containing all + // the north/south directions), that is, the plane containing the origin, the z axis, and the + // primary point of intersection. + crossp(norm, zDir, northPN); + + //The normal to the plane containing all the north/south directions cross the local normal + // direction gives the local north/south direction in the local normal plane + crossp(northPN,norm,northL); + if (northL[2] < 0) { //if by chance we got the south direction change the signs + northL[0] = -northL[0]; + northL[1] = -northL[1]; + northL[2] = -northL[2]; + } + //define the rotation matrix to convert northL to the azimuth of flight. + // A left handed rotation of "VEL_AZM" around the positive normal direction will convert northL + // to azm + MfromVecLeftAngle(M,norm,ui.GetDouble("VEL_AZM")*deg2rad); + azm[0] = M[0][0]*northL[0] + M[0][1]*northL[1] + M[0][2]*northL[2]; + azm[1] = M[1][0]*northL[0] + M[1][1]*northL[1] + M[1][2]*northL[2]; + azm[2] = M[2][0]*northL[0] + M[2][1]*northL[1] + M[2][2]*northL[2]; + //apply the two rotations we already know + MfromLeftEulers(M,omega,phi,0.0); + azmP[0] = M[0][0]*azm[0] + M[0][1]*azm[1] + M[0][2]*azm[2]; + azmP[1] = M[1][0]*azm[1] + M[1][1]*azm[1] + M[1][2]*azm[2]; + azmP[2] = M[2][0]*azm[2] + M[2][1]*azm[1] + M[2][2]*azm[2]; + //subtract that portion of the azm that is perpindicular to the image plane (also the portion + // which is parallel to look) making azm a vector parrallel to the image plane + // Further, since we're now rotated into some coordinate system that differs from + // the image coordinate system by only a kappa rotation making the vector parrallel to the + // image plan is as simple as zeroing the z component (and as pointless to further calculations + // as a nat's fart in hurricane) nevertheless it completes the logical transition + azmP[2] = 0.0; + + //finally the kappa rotation that will make azmP parallel (including sign) to the camera x axis + kappa = -atan2(-azmP[1], azmP[0]); + + + ////////////////////Add an instrument position table + //Define the table records + TableRecord recordPos; // reacord to be added to table + // add x,y,z position labels and ephemeris time et to record + TableField x("J2000X", TableField::Double); + TableField y("J2000Y", TableField::Double); + TableField z("J2000Z", TableField::Double); + TableField t("ET", TableField::Double); + recordPos += x; + recordPos += y; + recordPos += z; + recordPos += t; + Table tablePos("InstrumentPosition", recordPos); + //now that the azm and norm vectors are defined + // the total velocity vector can be calcualted (km/sec) + vel[0] = horV*azm[0] + radV * norm[0]; + vel[1] = horV*azm[1] + radV * norm[1]; + vel[2] = horV*azm[2] + radV * norm[2]; + //we'll provide a two ellement table (more is redundant because the motion is modeled as linear + // at this point) we'll extend the nodes 3% beyond the edges of the images to be sure + // rounding errors don't cause problems + temp = 0.515*(time1-time0); //3% extension + posSel[0] = pos0[0] - temp*vel[0]; //selenocentric coordinate calculation + posSel[1] = pos0[1] - temp*vel[1]; + posSel[2] = pos0[2] - temp*vel[2]; + //converting to J2000 + temp = time0 - 0.005*(time1-time0); //et just before the first scan line + spPos->SetEphemerisTime(temp); + spRot->SetEphemerisTime(temp); + //Despite being labeled as J2000, the coordinates for the instrument position are in fact in + // target centric coordinated rotated to a system centered at the target with aces parallel + // to J2000, whatever that means + posJ20 = spRot->J2000Vector(posSel); //J2000Vector calls rotates the position vector into J2000, + // completing the transformation + recordPos[0] = posJ20[0]; + recordPos[1] = posJ20[1]; + recordPos[2] = posJ20[2]; + recordPos[3] = temp; //temp = et (right now anyway) + tablePos += recordPos; + tablePos.Label() += PvlKeyword("SpkTableStartTime",toString(temp)); + //now the other node + temp = 0.515*(time1-time0); //3% extension + posSel[0] = pos0[0] + temp*vel[0]; //selenocentric coordinate calculation + posSel[1] = pos0[1] + temp*vel[1]; + posSel[2] = pos0[2] + temp*vel[2]; + //converting to J2000 + temp = time1 + 0.015*(time1-time0); //et just after the last scan line + spPos->SetEphemerisTime(temp); + spRot->SetEphemerisTime(temp); + //Despite being labeled as J2000, the coordinates for the instrument position are in fact + // in target centric coordinated rotated to a system centered at the target with aces + // parallel to J2000, whatever that means + posJ20 = spRot->J2000Vector(posSel); //J2000Vector calls rotates the position vector into J2000, + // completing the transformation + recordPos[0] = posJ20[0]; + recordPos[1] = posJ20[1]; + recordPos[2] = posJ20[2]; + recordPos[3] = temp; //temp = et (right now anyway) + tablePos += recordPos; + tablePos.Label() += PvlKeyword("SpkTableEndTime",toString(temp)); + tablePos.Label() += PvlKeyword("CacheType","Linear"); + tablePos.Label() += PvlKeyword("Description","Created by apollopaninit"); + panCube.write(tablePos); //now attach it to the table + + /////////////////////////////attach a camera pointing table + double cacheSlope, //time between epoches in the table + rollComb, //magnitude of roll relative to the center in the middle of the epoch + relT, //relative time at the center of each epoch + Q[NODES][5], //NODES four ellement unit quarternions and et (to be calculated). + gimVec[3], //the direction of the gimbal rotation vector (to the cameras persepective + // this is always changing because the camera is mounted to the roll frame + // assembly which is mounted to the gimbal) + M0[3][3], //rotation matrix of the previous epoch + Mtemp1[3][3], //intermediate step in the multiplication of rotation matricies + Mtemp2[3][3], //intermediate step in the multiplication of rotation matricies + Mdg[3][3], //incremental rotation due the the gimbal motion in the camera frame + Mdr[3][3]; //the contribution of the roll motion in the camera frame during time + // cacheSlope + std::vector <double> M_J2toT; //rotation matrix from J2000 to the target frame + M_J2toT.resize(9); + //Table Definition + TableField q0("J2000Q0", TableField::Double); + TableField q1("J2000Q1", TableField::Double); + TableField q2("J2000Q2", TableField::Double); + TableField q3("J2000Q3", TableField::Double); + TableField et("ET", TableField::Double); + TableRecord recordRot; + recordRot += q0; + recordRot += q1; + recordRot += q2; + recordRot += q3; + recordRot += et; + Table tableRot("InstrumentPointing",recordRot); + //From the cameras perspective the gimbal motion is around a constantly changing axis, + // this is handled by combining a series of incremental rotations + MfromLeftEulers(M0, omega, phi, kappa); //rotation matrix in the center Q[(NOPDES-1)/2] + spRot->SetEphemerisTime(isisTime.Et()); + M_J2toT = spRot->Matrix(); //this actually gives the rotation from J2000 to target centric + for(j=0; j<3; j++) //reformating M_J2toT to a 3x3 + for(k=0; k<3; k++) + Mtemp1[j][k] = M_J2toT[3*j+k]; + mxm_c(M0, Mtemp1, Mtemp2); + M2Q(Mtemp2, Q[(NODES-1)/2]); //save the middle scan line quarternion + + Q[(NODES-1)/2][4] = (time1 + time0)/2.0; //time in the center of the image + //the total time is scaled up slightly so that nodes will extend just beyond the edge of the image + cacheSlope = 1.03*(time1 - time0)/(NODES-1); + //Mdr is constant for all the forward time computations + MfromLeftEulers(Mdr,cacheSlope*rollV,0.0,0.0); + for (i=(NODES-1)/2+1; i<NODES; i++) { //moving foward in time first + Q[i][4] = Q[i-1][4] + cacheSlope; //new time epoch + //epoch center time relative to the center line + relT = double(i - (NODES-1)/2 - 0.5)*cacheSlope; + rollComb = relT*rollV; + gimVec[0] = 0.0; //gimbal rotation vector direction in the middle of the epoch + gimVec[1] = cos(rollComb); + gimVec[2] = -sin(rollComb); + //incremental rotation due to the gimbal (forward motion compensation) + MfromVecLeftAngle(Mdg, gimVec, fmc*cacheSlope); + //the new rotation matrix is Transpose(Mdr)*Transpose(Mdg)*M0--NOTE the order swap and + // transposes are needed because both Mdr and Mdg were caculated in image space and need to be + // transposed to apply to object space + mtxm_c(Mdg, M0, Mtemp1); + //M0 is now what would typically be considered the rotation matrix of an image. It rotates a + // vector from the target centric space into camera space. However, what is standard to + // include in the cube labels is a rotation from camera space to J2000. M0 is therefore the + // transpose of the first part of this rotation. Transpose(M0) is the rotation from camera + // space to target centric space + mtxm_c(Mdr, Mtemp1, M0); + //now adding the rotation from the target frame to J2000 + spRot->SetEphemerisTime(Q[i][4]); + //this actually gives the rotation from J2000 to target centric--hence the mxmt_c function being + // used later + M_J2toT = spRot->Matrix(); + for(j=0; j<3; j++) //reformating M_J2toT to a 3x3 + for(k=0; k<3; k++) + Mtemp1[j][k] = M_J2toT[3*j+k]; + mxm_c(M0, Mtemp1, Mtemp2); + M2Q(Mtemp2, Q[i]); //convert to a quarterion + } + + MfromLeftEulers(M0, omega, phi, kappa); //rotation matrix in the center Q[(NOPDES-1)/2] + //Mdr is constant for all the backward time computations + MfromLeftEulers(Mdr, -cacheSlope*rollV, 0.0, 0.0); + for (i=(NODES-1)/2-1; i>=0; i--) { //moving backward in time + Q[i][4] = Q[i+1][4] - cacheSlope; //new time epoch + //epoch center time relative to the center line + relT = double(i - (NODES-1)/2 + 0.5)*cacheSlope; + rollComb = relT*rollV; + gimVec[0] = 0.0; //gimbal rotation vector direction in the middle of the epoch + gimVec[1] = cos(rollComb); + gimVec[2] = -sin(rollComb); + //incremental rotation due to the gimbal (forward motion compensation) + MfromVecLeftAngle(Mdg, gimVec, -fmc*cacheSlope); + //the new rotation matrix is Transpose(Mdr)*Transpose(Mdg)*M0 NOTE the order swap and + // transposes are needed because both Mdr and Mdg were caculated in image space and need to be + // transposed to apply to object space + mtxm_c(Mdg, M0, Mtemp1); + //M0 is now what would typically be considered the rotation matrix of an image. It rotates a + // vector from the target centric space into camera space. However, what is standard to + // include in the cube labels is a rotation from camera space to J2000. M0 is therefore the + // transpose of the first part of this rotation. Transpose(M0) is the rotation from camera + // space to target centric space + mtxm_c(Mdr, Mtemp1, M0); + //now adding the rotation from the target frame to J2000 + spRot->SetEphemerisTime(Q[i][4]); + M_J2toT = spRot->Matrix(); + for(j=0; j<3; j++) //reformating M_J2toT to a 3x3 + for(k=0; k<3; k++) + Mtemp1[j][k] = M_J2toT[3*j+k]; + mxm_c(M0, Mtemp1, Mtemp2); + M2Q(Mtemp2, Q[i]); //convert to a quarterion + } + //fill in the table + for (i=0; i<NODES; i++) { + recordRot[0] = Q[i][0]; + recordRot[1] = Q[i][1]; + recordRot[2] = Q[i][2]; + recordRot[3] = Q[i][3]; + recordRot[4] = Q[i][4]; + tableRot += recordRot; + } + tableRot.Label() += PvlKeyword("CkTableStartTime", toString(Q[0][4])); + tableRot.Label() += PvlKeyword("CkTableEndTime", toString(Q[NODES-1][4])); + tableRot.Label() += PvlKeyword("Description", "Created by appollopan2isis"); + + keyword.setName("TimeDependentFrames"); + keyword.setValue(toString(scFrameCode)); + keyword.addValue("1"); + tableRot.Label() += keyword; + + keyword.setName("ConstantFrames"); + keyword.setValue(toString(insCode)); + keyword.addValue(toString(scFrameCode)); + tableRot.Label() += keyword; + + keyword.setName("ConstantRotation"); + keyword.setValue("1"); + for (i=1;i<9;i++) + if (i%4 == 0) keyword.addValue("1"); + else keyword.addValue("0"); + tableRot.Label() += keyword; + panCube.write(tableRot); + + + /////////////////////////Attach a table with all the measurements of the fiducial mark locations. + Chip patternS,searchS; //scaled pattern and search chips + Cube fidC; //Fiducial image + + //line and sample coordinates for looping through the panCube + double l=1,s=1,sample,line,sampleInitial=1,lineInitial=1,play; + + int regStatus, + fidn, + panS, + refL, //number of lines in the patternS + refS; //number of samples in the patternS + Pvl pvl; + + bool foundFirst=false; + +// QString fileName; + + panS = panCube.sampleCount(); + + //Table definition + TableRecord recordFid; + TableField indexFid("FID_INEX",TableField::Integer); + TableField xFid("X_COORD",TableField::Double); + TableField yFid("Y_COORD",TableField::Double); + recordFid += indexFid; + recordFid += xFid; + recordFid += yFid; + Table tableFid("Fiducial Measurement",recordFid); + + //read the image resolutions and scale the constants acordingly + double resolution = ui.GetDouble("MICRONS"), //pixel size in microns + scale = SCALE *5.0/resolution, //reduction scale for fast autoregistrations + searchHeight = SEARCHh*5.0/resolution, //number of lines (in 5-micron-pixels) in + // search space for the first fiducial + searchCellSize = SEARCHc*5.0/resolution, //height/width of search chips block + averageSamples = AVERs *5.0/resolution, //scaled smaples between fiducials + averageLines = AVERl *5.0/resolution; //scaled average distance between the top and + //bottom fiducials + + if( 15.0/resolution < 1.5) play=1.5; + else play = 15.0/resolution; + + //copy the patternS chip (the entire ApolloPanFiducialMark.cub) + FileName fiducialFileName("$apollo15/calibration/ApolloPanFiducialMark.cub"); + fidC.open(fiducialFileName.expanded(),"r"); + if( !fidC.isOpen() ) { + QString msg = "Unable to open the fiducial patternS cube: ApolloPanFiducialMark.cub\n"; + throw IException(IException::User, msg, _FILEINFO_); + } + refL = fidC.lineCount(); + refS = fidC.sampleCount(); + //scaled pattern chip for fast matching + patternS.SetSize(int((refS-2)/SCALE), int((refL-2)/SCALE)); + patternS.TackCube((refS-1)/2, (refL-1)/2); + patternS.Load(fidC, 0, SCALE); + + //parameters for maximum correlation autoregestration + // see: file:///usgs/pkgs/isis3nightly2011-09-21/isis/doc/documents/patternSMatch/patternSMatch.html#DistanceTolerance + FileName fiducialPvl("$apollo15/templates/apolloPanFiducialFinder.pvl"); + pvl.read(fiducialPvl.expanded()); //read in the autoreg parameters + AutoReg *arS = AutoRegFactory::Create(pvl); + + *arS->PatternChip() = patternS; //patternS chip is constant + + //set up a centroid measurer + CentroidApolloPan centroid(resolution); + Chip inputChip,selectionChip; + inputChip.SetSize(int(ceil(200*5.0/resolution)), int(ceil(200*5.0/resolution))); +// fileName = ui.GetFileName("FROM"); + if( panCube.pixelType() == 1) //UnsignedByte + centroid.setDNRange(12, 1e99); //8 bit bright target + else + centroid.setDNRange(3500, 1e99); //16 bit bright target + + Progress progress; + progress.SetText("Locating Fiducials"); + progress.SetMaximumSteps(91); + + //Search for the first fiducial, search sizes are constanst + searchS.SetSize(int(searchCellSize/scale),int(searchCellSize/scale)); + //now start searching along a horizontal line for the first fiducial mark + for(l = searchCellSize/2; + l<searchHeight+searchCellSize/2.0 && !foundFirst; + l+=searchCellSize-125*5.0/resolution) { + for (s = searchCellSize/2; + s < averageSamples + searchCellSize/2.0 && !foundFirst; + s += searchCellSize-125*5.0/resolution) { + searchS.TackCube(s, l); + searchS.Load(panCube, 0, scale); + *arS->SearchChip() = searchS; + regStatus = arS->Register(); + if (regStatus == AutoReg::SuccessPixel) { + inputChip.TackCube(arS->CubeSample(), arS->CubeLine()); + inputChip.Load(panCube, 0, 1); + inputChip.SetCubePosition(arS->CubeSample(), arS->CubeLine()); + //continuous dynamic range selection + centroid.selectAdaptive(&inputChip, &selectionChip); + //elliptical trimming/smoothing + if (centroid.elipticalReduction(&selectionChip, 95, play, 2000)) { + //center of mass to reduce selection to a single measure + centroid.centerOfMass(&selectionChip, &sample, &line); + inputChip.SetChipPosition(sample, line); + sampleInitial = inputChip.CubeSample(); + lineInitial = inputChip.CubeLine(); + foundFirst = true; //once the first fiducial is found stop + } + } + } + } + if(s>=averageLines+searchCellSize/2.0) { + QString msg = "Unable to locate a fiducial mark in the input cube [" + fileName + + "]. Check FROM and MICRONS parameters."; + throw IException(IException::Io, msg, _FILEINFO_); + return; + } + progress.CheckStatus(); + + //record first fiducial measurement in the table + recordFid[0] = 0; + recordFid[1] = sampleInitial; + recordFid[2] = lineInitial; + tableFid += recordFid; + for (s= sampleInitial, l=lineInitial, fidn=0; s<panS; s+=averageSamples, fidn++) { + //corrections for half spacing of center fiducials + if (fidn == 22) s -= averageSamples/2.0; + if (fidn == 23) s -= averageSamples/2.0; + + //look for the bottom fiducial + searchS.TackCube(s,l+averageLines); + searchS.Load(panCube, 0, scale); + *arS->SearchChip() = searchS; + regStatus = arS->Register(); + if (regStatus == AutoReg::SuccessPixel) { + inputChip.TackCube(arS->CubeSample(), arS->CubeLine()); + inputChip.Load(panCube,0,1); + inputChip.SetCubePosition(arS->CubeSample(), arS->CubeLine()); + } + else { //if autoreg is unsuccessful, a larger window will be used + inputChip.TackCube(s, l+averageLines); + inputChip.Load(panCube, 0, 1); + inputChip.SetCubePosition(s, l+averageLines); + } + centroid.selectAdaptive(&inputChip, &selectionChip); //continuous dynamic range selection + //elliptical trimming/smoothing... if this fails move on + if (centroid.elipticalReduction(&selectionChip, 95, play, 2000) != 0 ) { + //center of mass to reduce selection to a single measure + centroid.centerOfMass(&selectionChip, &sample, &line); + inputChip.SetChipPosition(sample, line); + sample = inputChip.CubeSample(); + line = inputChip.CubeLine(); + recordFid[0] = fidn*2+1; + recordFid[1] = sample; + recordFid[2] = line; + tableFid += recordFid; + } + progress.CheckStatus(); + + //look for the top fiducial + if (s == sampleInitial) //first time through the loop? + continue; //then the top fiducial was already found + searchS.TackCube(s, l); + searchS.Load(panCube, 0, scale); + *arS->SearchChip() = searchS; + regStatus = arS->Register(); + if (regStatus == AutoReg::SuccessPixel) { + inputChip.TackCube(arS->CubeSample(), arS->CubeLine()); + inputChip.Load(panCube, 0, 1); + inputChip.SetCubePosition(arS->CubeSample(), arS->CubeLine()); + } + else { //if autoreg is unsuccessful, a larger window will be used + inputChip.TackCube(s, l); + inputChip.Load(panCube, 0, 1); + inputChip.SetCubePosition(s, l); + } + centroid.selectAdaptive(&inputChip, &selectionChip);//continuous dynamic range selection + //inputChip.Write("inputTemp.cub");//debug + //selectionChip.Write("selectionTemp.cub");//debug + //elliptical trimming/smoothing... if this fails move on + if (centroid.elipticalReduction(&selectionChip, 95, play, 2000) !=0) { + //center of mass to reduce selection to a single measure + centroid.centerOfMass(&selectionChip, &sample, &line); + inputChip.SetChipPosition(sample, line); + //when finding the top fiducial both s and l are refined for a successful measurement, + // this will help follow trends in the scaned image + s = inputChip.CubeSample(); + l = inputChip.CubeLine(); + recordFid[0] = fidn*2; + recordFid[1] = s; + recordFid[2] = l; + tableFid += recordFid; + } + progress.CheckStatus(); + } + + panCube.write(tableFid); + //close the new cube + panCube.close(false); + panCube.open(ui.GetFileName("FROM"),"rw"); + + delete spPos; + delete spRot; + +// Application::Log(); + + return; +} + + +void crossp(double v1[3],double v2[3],double v1cv2[3]) +{ + //calcuate v1 cross v2 + v1cv2[0] = v1[1]*v2[2] - v1[2]*v2[1]; + v1cv2[1] = v1[2]*v2[0] - v1[0]*v2[2]; + v1cv2[2] = v1[0]*v2[1] - v1[1]*v2[0]; + return; +} + +void Geographic2GeocentricLunar(double geographic[3], double geocentric[3]) +/* + given + geographic -> (Lat, Lon, H) + + calc + geocentric <- (X, Y, Z) + + Lat and Lon should be in radians +*/ +{ + double r,cosl; + + r = R_MOON[0] + geographic[2]; + + cosl = cos(geographic[0]); + + geocentric[2] = r*sin(geographic[0]); + geocentric[0] = r*cosl*cos(geographic[1]); + geocentric[1] = r*cosl*sin(geographic[1]); +} + +void MfromLeftEulers(double M[3][3], double omega, double phi, double kappa) +{ + /*given three left handed Euler angles compute M 3x3 orthogonal rotation matrix + + M <- 3x3 rotation matrix + omega -> left handed rotation (rad) around the x axis + phi -> left handed rotation (rad) around the once rotated y axis + kappa -> left handed rotation (rad) around the twice rotated z axis + */ + + M[0][0] = cos(phi) * cos(kappa); + M[0][1] = sin(omega) * sin(phi) * cos(kappa) + cos(omega) * sin(kappa); + M[0][2] = -cos(omega) * sin(phi) * cos(kappa) + sin(omega) * sin(kappa); + M[1][0] = -cos(phi) * sin(kappa); + M[1][1] = -sin(omega) * sin(phi) * sin(kappa) + cos(omega) * cos(kappa); + M[1][2] = cos(omega) * sin(phi) * sin(kappa) + sin(omega) * cos(kappa); + M[2][0] = sin(phi); + M[2][1] = -sin(omega) * cos(phi); + M[2][2] = cos(omega) * cos(phi); + +} + +void MfromVecLeftAngle(double M[3][3], double vec[3], double angle) +{ + /*Define a roation matrix from a vector and a left handed angle + M <- orthogonal rotation matrix + vec -> 3 ellement vector defining the axis of rotation + angle -> left handed angle of rotation (rad) around vec + + */ + double vs[3],l; + + l = sqrt(vec[0]*vec[0] + vec[1]*vec[1] + vec[2]*vec[2]); + vs[0] = vec[0] / l; + vs[1] = vec[1] / l; + vs[2] = vec[2] / l; + //change the sign of angle to match subsequent math (written for right handed angles) + l = -angle; //this makes this a right handed anlge + //calculate rotation matrix + M[0][0] = cos(l) + vs[0]*vs[0] * (1 - cos(l)); + M[0][1] = vs[0] * vs[1] * (1 - cos(l)) - vs[2] * sin(l); + M[0][2] = vs[0] * vs[2] * (1 - cos(l)) + vs[1] * sin(l); + + M[1][0] = vs[0] * vs[1] * (1 - cos(l)) + vs[2] * sin(l); + M[1][1] = cos(l) + vs[1]*vs[1] * (1 - cos(l)); + M[1][2] = vs[1] * vs[2] * (1 - cos(l)) - vs[0] * sin(l); + + M[2][0] = vs[0] * vs[2] * (1 - cos(l)) - vs[1] * sin(l); + M[2][1] = vs[1] * vs[2] * (1 - cos(l)) + vs[0] * sin(l); + M[2][2] = cos(l) + vs[2]*vs[2] * (1 - cos(l)); +} + +void M2Q(double M[3][3], double Q[4]) +{ + /* given a rotation matrix decompose the quarternion + + M -> 3x3 orthogonal rotation matrix + Q <- four ellement unit quarternion + + */ + + //following the decomposition algorithim given at: http://en.wikipedia.org/wiki/Quaternions_and_spatial_rotation + + int index[3],i; + double temp; + + //find the largest diagonal ellement in Md + temp = fabs(M[0][0]); + index[0] = 0; + + for(i=1; i<2 ; i++) + { + if( fabs(M[i][i] ) > temp ) + { + temp = fabs(M[i][i]); + index[0] = i; + } + } + + index[1] = index[0] + 1; + if( index[1] > 2 ) + index[1] -= 3; + + index[2] = index[1] + 1; + if( index[2] > 2 ) + index[2] -= 3; + + temp = sqrt(1 + M[index[0]][index[0]] - M[index[1]][index[1]] - M[index[2]][index[2]]); + + if( temp == 0 ) + { + Q[0] = 1; + Q[1] = 0; + Q[2] = 0; + Q[3] = 0; + return; + } + + Q[0] = ( M[index[2]][index[1]] - M[index[1]][index[2]] ) / (2 * temp); + Q[index[1] + 1] = (M[index[0]][index[1]] + M[index[1]][index[0]]) / (2 * temp); + Q[index[2] + 1] = (M[index[2]][index[0]] + M[index[0]][index[2]]) / (2 * temp); + + Q[index[0] + 1] = temp / 2; +} diff --git a/isis/src/apollo/apps/apollopangenck/apollopangenck.xml b/isis/src/apollo/apps/apollopangenck/apollopangenck.xml new file mode 100644 index 0000000000000000000000000000000000000000..0ecb51827cdb7fefd063604b764fb64469140226 --- /dev/null +++ b/isis/src/apollo/apps/apollopangenck/apollopangenck.xml @@ -0,0 +1,55 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<application name="apollopangenck" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd"> + + <brief> + Generate files to be used as input to NAIF utility msopck. + </brief> + + <description> + Generate files to be used as input to NAIF utility msopck. Location of Apollo Pan metadata csv + is /archive/missions/apollo_pan/AS15/CriticalData/PanData/MetadataCSVVersions/. + </description> + + <history> + <change name="Ken Edmundson" date="2018-07-06"> + TODO + </change> + </history> + + <category> + <missionItem>Apollo</missionItem> + </category> + + <seeAlso> + <applications> + <item>isis2std</item> + </applications> + </seeAlso> + + <groups> + <group name="Files"> + <parameter name="FROM"> + <type>filename</type> + <fileMode>input</fileMode> + <brief> + Input Apollo Pan metadata csv file. + </brief> + <description> + Use this parameter to select the filename to import. + </description> + <filter> + *.csv + </filter> + </parameter> + </group> + + <group name="Time"> + <parameter name="GMT"> + <type>string</type> + <brief>GMT format: YYYY-MM-DD HH:MM:SS.SSS</brief> + <description>GMT is space deliniated Year Month Day Hour Minute Seconds</description> + </parameter> + </group> + </groups> +</application> diff --git a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.cpp b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.cpp index e73055c90e04ea81b95fb0a574a3e49719d59d35..ddbb0fa72a3c5c72c74c71d9a4583fc5a6a7cb83 100644 --- a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.cpp +++ b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.cpp @@ -1,137 +1,164 @@ +/** + * @file + * $Revision: 1.7 $ + * $Date: 2010/06/17 18:59:11 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ #include "ApolloPanoramicCamera.h" - -#include "ApolloPanIO.h" +//#include "ApolloPanIO.h" +#include "ApolloPanoramicCameraFiducialMap.h" #include "ApolloPanoramicDetectorMap.h" #include <QString> +#include "Affine.h" + #include "CameraDistortionMap.h" #include "CameraFocalPlaneMap.h" #include "IException.h" #include "IString.h" #include "iTime.h" -#include "LineScanCameraDetectorMap.h" -#include "LineScanCameraGroundMap.h" -#include "LineScanCameraSkyMap.h" -#include "PvlGroup.h" -#include "PvlKeyword.h" +//#include "SampleScanCameraDetectorMap.h" +#include "SampleScanCameraGroundMap.h" +#include "SampleScanCameraSkyMap.h" +#include "NaifStatus.h" +//#include "VariableSampleScanCameraDetectorMap.h" +//#include "PvlGroup.h" +//#include "PvlKeyword.h" using namespace std; namespace Isis { /** - * Constructs an Apollo Panoramic Camera object using the image labels. + * Constructs the Apollo Panoramic Camera model object from the labels. + * + * This constructor uses the Pvl labels for Apollo Panoramic Camera Images. * - * @param lab Pvl label from an Apollo Panoramic image. + * @param lab Pvl label from an Apollo Panoramic Camera image. + * @internal + * @history 2016-09-12 Ken Edmundson - Original version, sort of. Orrin Thomas did the original + * original. The camera model has changed significantly since. * */ - ApolloPanoramicCamera::ApolloPanoramicCamera(Isis::Cube &cube) : Isis::LineScanCamera(cube) { - // Set up the camera info from ik/iak kernels - SetFocalLength(610.0); //nominal (uncalibrated) focal length in mm from "Apollo 15 SIM Bay - // Photographic Equipment and Mission Summary" August, 1971 - SetPixelPitch(0.005); //internally all images are modeled as if they have 5 micron pixels - - double constantTimeOffset = 0.0, - additionalPreroll = 0.0, - additiveLineTimeError = 0.0, - multiplicativeLineTimeError = 0.0; - - // Set up naming info + ApolloPanoramicCamera::ApolloPanoramicCamera(Isis::Cube &cube) : Isis::SampleScanCamera(cube) { + NaifStatus::CheckErrors(); + m_instrumentNameLong = "Panoramic Camera"; m_instrumentNameShort = "Pan"; - + // Apollo15 Pan naif code = -915230 if (naifIkCode() == -915230) { m_spacecraftNameLong = "Apollo 15"; m_spacecraftNameShort = "Apollo15"; + m_ckFrameId = -915230; } // Apollo16 Pan naif code = -916230 else if (naifIkCode() == -916230) { m_spacecraftNameLong = "Apollo 16"; m_spacecraftNameShort = "Apollo16"; + m_ckFrameId = -916230; } // Apollo17 Pan naif code = -917230 else if (naifIkCode() == -917230) { m_spacecraftNameLong = "Apollo 17"; m_spacecraftNameShort = "Apollo17"; + m_ckFrameId = -917230; } else { - QString msg = "File does not appear to be an Apollo image"; - throw IException(IException::User, msg, _FILEINFO_); + QString msg = "File does not appear to be an Apollo Panoramic image"; + msg += QString::number(naifIkCode()); + msg += " is not a supported instrument kernel code for Apollo."; + throw IException(IException::Programmer, msg, _FILEINFO_); } - - //following keywords in InstrumentAddendum file - QString ikernKey = "INS" + toString((int)naifIkCode()) + "_CONSTANT_TIME_OFFSET"; - constantTimeOffset = getDouble(ikernKey); - - ikernKey = "INS" + toString((int)naifIkCode()) + "_ADDITIONAL_PREROLL"; - additionalPreroll = getDouble(ikernKey); - - ikernKey = "INS" + toString((int)naifIkCode()) + "_ADDITIVE_LINE_ERROR"; - additiveLineTimeError = getDouble(ikernKey); - - ikernKey = "INS" + toString((int)naifIkCode()) + "_MULTIPLI_LINE_ERROR"; - multiplicativeLineTimeError = getDouble(ikernKey); - - Pvl &lab = *cube.label(); + + // Get the Instrument label information needed to define the camera for this frame + Pvl &lab = *cube.label(); PvlGroup &inst = lab.findGroup("Instrument", Pvl::Traverse); - QString stime = (QString)inst["StartTime"]; - SpiceDouble etStart; - str2et_c(stime.toLatin1().data(), &etStart); - stime = (QString) inst["StopTime"]; - SpiceDouble etStop; - str2et_c(stime.toLatin1().data(), &etStop); - iTime isisTime( (QString) inst["StartTime"]); - - // Get other info from labels - // line exposure duration, sec/mm - double lineRate = ( (double) inst["LineExposureDuration"] )*0.005; - - lineRate *= 1.0 + multiplicativeLineTimeError; - lineRate += additiveLineTimeError; - etStart += additionalPreroll * lineRate; - etStart += constantTimeOffset; - - setTime(isisTime); - - // Setup detector map - //note (etStart+etStop)/2.0 is the time in the middle of image - // (line = 0 after interior orientation) - ApolloPanoramicDetectorMap *detectorMap = - new ApolloPanoramicDetectorMap((Camera *)this, - (etStart+etStop)/2.0, - (double)lineRate, &lab); - //interior orientation residual stats - m_residualMean = detectorMap->meanResidual(); - m_residualMax = detectorMap->maxResidual(); - m_residualStdev = detectorMap->stdevResidual(); - - detectorMap->SetDetectorSampleSumming(1.0); - detectorMap->SetStartingDetectorSample(0.0); + QString spacecraft = (QString)inst["SpacecraftName"]; + QString instId = (QString)inst["InstrumentId"]; + + // read focal length and pixel pitch from the instrument kernel + SetFocalLength(); + SetPixelPitch(); + + ReadSampleRates(lab.fileName()); + + SpiceDouble etStart = iTime((QString)inst["StartTime"]).Et(); + setTime(etStart); + + // Setup fiducial mark affine transformation (in pixels) + PvlGroup &fiducials = lab.findGroup("Fiducials", Pvl::Traverse); + ApolloPanoramicCameraFiducialMap fid(fiducials, naifIkCode()); + + Affine* fiducialMap = fid.CreateTrans(); + + // Setup detector map for transform of parent image pixels to "detector" pixels + new VariableSampleScanCameraDetectorMap(this, p_sampleRates, fiducialMap); + // Setup focal plane map - PvlGroup &kernel = lab.findGroup("Kernels", Pvl::Traverse); - CameraFocalPlaneMap *focalMap = new CameraFocalPlaneMap(this, (int) kernel["NaifFrameCode"]); - - // Retrieve boresight location from instrument kernel (IK) (addendum?) - double sampleBoreSight = 0.0; //Presently no NAIF keywords for this sensor - double lineBoreSight = 0.0; //Presently no NAIF keywords for this sensor - - focalMap->SetDetectorOrigin(sampleBoreSight, lineBoreSight); + CameraFocalPlaneMap *focalMap = new CameraFocalPlaneMap(this, naifIkCode()); + +// focalMap->SetDetectorOrigin(114374.916541692, 11490.0); + focalMap->SetDetectorOrigin(0.0, 11490.0); focalMap->SetDetectorOffset(0.0, 0.0); - + + // Retrieve boresight location from instrument kernel (IK) (addendum?) +// double sampleBoreSight = 0.0; //Presently no NAIF keywords for this sensor +// double lineBoreSight = 0.0; //Presently no NAIF keywords for this sensor + // Setup distortion map new CameraDistortionMap(this, -1.0); - //distMap->SetDistortion(naifIkCode()); Presently no NAIF keywords for this sensor - + //Setup the ground and sky map - new LineScanCameraGroundMap(this); - new LineScanCameraSkyMap(this); - - PvlGroup &instP = lab.findGroup("Kernels", Pvl::Traverse); - m_CkFrameId = toInt(instP["NaifFrameCode"][0]); - m_CkFrameId = -int(-m_CkFrameId/1000)*1000; - + new SampleScanCameraGroundMap(this); + new SampleScanCameraSkyMap(this); + LoadCache(); + NaifStatus::CheckErrors(); + + delete fiducialMap; + } + + /** + * @param filename + */ + void ApolloPanoramicCamera::ReadSampleRates(QString filename) { + Table timesTable("SampleScanTimes", filename); + + if(timesTable.Records() <= 0) { + QString msg = "Table [SampleScanTimes] in ["; + msg += filename + "] must not be empty"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } + + for(int i = 0; i < timesTable.Records(); i++) { + p_sampleRates.push_back(SampleRateChange((int)timesTable[i][2], + (double)timesTable[i][0], + timesTable[i][1])); + } + + if(p_sampleRates.size() <= 0) { + QString msg = "There is a problem with the data within the Table "; + msg += "[SampleScanTimes] in [" + filename + "]"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } } + }// end Isis namespace diff --git a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.h b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.h index 1a0e5bfceb849699e28ddb93035222fbb418b356..f0cd26a3d752ae12f02e8c29501484b80ab4bdc6 100644 --- a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.h +++ b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicCamera.h @@ -24,7 +24,8 @@ * http://www.usgs.gov/privacy.html. */ -#include "LineScanCamera.h" +#include "SampleScanCamera.h" +#include "VariableSampleScanCameraDetectorMap.h" namespace Isis { class PvlGroup; @@ -48,9 +49,9 @@ namespace Isis { * members and methods and removed implementation of these methods * since Camera now handles this. References #2335. Fixed * indentation. - * @history 2017-06-28 Makayla Shepherd - Updated documentation. References #4807. - */ - class ApolloPanoramicCamera : public LineScanCamera { + * @history 2016-09-12 Ken Edmundson - Major changes, deriving now from SampleScanCamera. + */ + class ApolloPanoramicCamera : public SampleScanCamera { public: ApolloPanoramicCamera(Cube &lab); @@ -64,7 +65,7 @@ namespace Isis { * Kernel Frame ID */ //this sensor was used on multiple missions so it is necessary to check which Apollo - virtual int CkFrameId() const {return m_CkFrameId; } + virtual int CkFrameId() const {return m_ckFrameId; } /** * CK Reference ID - J2000 @@ -82,46 +83,13 @@ namespace Isis { */ virtual int SpkReferenceId() const { return (1); } - /** - * Returns residual summary statistics from interior orientation as a PvlGroup - * - * @return PvlGroup Residuals report. - */ - PvlGroup intOriResidualsReport(); - - /** - * Max interior orientation residual vector length, accesor - * - * @return double Residual max - */ - double intOriResidualMax() const { return m_residualMax; } - - /** - * Mean (average) of interior orientation residual vector length, accesor - * - * @return double Residual mean - */ - double intOriResidualMean() const { return m_residualMean; } - - /** - * Standard deviation of interior orientation residual vector length, accesor - * - * @return double Residual standard deviation - */ - double intOriResidualStdev() const { return m_residualStdev; } - private: - //! Max interior orientation residual vector length - double m_residualMean; - - //! Mean (average) of interior orientation residual vector length - double m_residualMax; + void ReadSampleRates(QString filename); - //! Standard deviation of interior orientation residual vector length - double m_residualStdev; + std::vector<SampleRateChange> p_sampleRates; //! CK "Camera Matrix" kernel frame ID - int m_CkFrameId; + int m_ckFrameId; }; }; diff --git a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.cpp b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.cpp index 66a768b83122e4b4f25f4898e05ef6174c05aeca..f04d28e6ea65fee5cc8b83b36110e05e61cf92d9 100644 --- a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.cpp +++ b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.cpp @@ -14,9 +14,9 @@ namespace Isis { * This method sets cube sample line coordinates from given Dector coordinates * * @param sample dector sample coordinate + * * @param line detector line coordinate * - * @return bool Always returns true */ bool ApolloPanoramicDetectorMap::SetDetector(const double sample, const double line) { //given a detector coordinate and a time (read from the 'parent' camera class) @@ -28,11 +28,11 @@ namespace Isis { p_detectorSample = -sample; //convert from detector to fiducial coordinants - double fidL = (p_camera->time().Et() - m_etMiddle)/m_lineRate; +// double fidL = (p_camera->time().Et() - m_etMiddle)/m_lineRate; //double fidS = sample; //conversion is identity so it is skiped //convert from fiducial coordinates to parent image coordinates - p_intOri.image2Machine(p_detectorSample, fidL, &p_parentSample, &p_parentLine); +// p_intOri.image2Machine(p_detectorSample, fidL, &p_parentSample, &p_parentLine); //cout << "fiducial values sent to IO: " << p_detectorSample << " " << fidL << endl; //debug //cout << "cube coordinates returned from IO: " << p_parentSample << " " << p_parentLine << endl; @@ -43,9 +43,9 @@ namespace Isis { * This method sets dector sample line coordinates from given cube coordinates * * @param sample cube sample coordinate + * * @param line cube line coordinate * - * @return bool Always returns true */ bool ApolloPanoramicDetectorMap::SetParent(const double sample, const double line) { //Given an image (aka 'Parent', aka encoder, aka machine) coordinate set the detector @@ -56,7 +56,7 @@ namespace Isis { //convert from machine to fiducial coordinates //cout << "cube coordinates sent to IO: " << sample << " " << line << endl; //debug - p_intOri.machine2Image(sample,line,&p_detectorSample, &p_detectorLine); +// p_intOri.machine2Image(sample,line,&p_detectorSample, &p_detectorLine); //cout << "fiducial coordinate return from IO: " << p_detectorSample << " " << p_detectorLine << endl; //convert from fiducial coordinates to detector/time coordinates @@ -76,14 +76,18 @@ namespace Isis { /** * This method uses the ApolloPanIO class to compute transforamtion from cube to image * (aka fiducial cooraintes) + * + * @return -1 failure + * + * @return 1 sucess * - * @throws IException::User "No FID_MEASURES table found in cube blobs." - * @throws IException::User "Less than four FID_MEASURES found in cube blobs." - * @throws IException::User "Insufficient Fiducial Observations for computation of the interior - * orientation. At least one vertical pair must be measured, many - * more is recomented." - * - * @returns int Returns 1 on success and -1 on failure. + * @throws No FID_MEASURES table found in cube blobs. + * + * @throws Less than four FID_MEASURES found in cube blobs. + * + * @throws Insufficient Fiducial Observations for computation of + * the interior orientation.\nAt least one vertical pair + * must be measured, many more is recomented. */ int ApolloPanoramicDetectorMap::initializeInteriorOrientation() { int i,nrec; @@ -104,13 +108,13 @@ namespace Isis { _FILEINFO_); return -1; } - p_intOri.initialize(); +// p_intOri.initialize(); - for(i=0;i<nrec;i++) //input all the observations to the the Interior Orientation Class - p_intOri.fiducialObservation(tableFid[i][0], tableFid[i][1], tableFid[i][2]); +// for(i=0;i<nrec;i++) //input all the observations to the the Interior Orientation Class +// p_intOri.fiducialObservation(tableFid[i][0], tableFid[i][1], tableFid[i][2]); - i = p_intOri.computeInteriorOrienation(); - +// i = p_intOri.computeInteriorOrienation(); + i = 1; if( i != 1) { //unsuccessful computation of the interior orienation throw IException(IException::User,"Insufficient Fiducial Observations for computation of " "the interior orientation.\nAt least one vertical pair " diff --git a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.h b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.h index 314ee440917ee0ea6aee9dca0ee22299ca7e7a72..3d943f19e2e77cfa57ea1adeba3b111ccb5a731c 100644 --- a/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.h +++ b/isis/src/apollo/objs/ApolloPanoramicCamera/ApolloPanoramicDetectorMap.h @@ -25,7 +25,7 @@ */ -#include "ApolloPanIO.h" +//#include "ApolloPanIO.h" #include "LineScanCameraDetectorMap.h" #include "Pvl.h" #include "PvlGroup.h" @@ -43,7 +43,6 @@ namespace Isis { * @internal * @history 2011-11-21 Orrin Thomas - Original version * @history 2012-07-10 Orrin Thomas - Updated to current coding standards - * @history 2017-06-28 Makayla Shepherd - Updated documentation. References #4807. */ class ApolloPanoramicDetectorMap : public CameraDetectorMap { public: @@ -66,7 +65,7 @@ namespace Isis { } //! Destroys ApolloPanoramicDetectorMap object - virtual ~ApolloPanoramicDetectorMap() {}; +// virtual ~ApolloPanoramicDetectorMap() {}; virtual bool SetParent(const double sample, const double line); @@ -79,52 +78,37 @@ namespace Isis { * * @param lineRate the time in seconds between lines * - * @return void */ void SetLineRate(const double lineRate) { m_lineRate = lineRate; }; - /** - * Return the time in seconds between scan lines - * - * @return double Time in seconds between scan lines - */ + //! Return the time in seconds between scan lines double LineRate() const { return m_lineRate; }; - /** - * Mean (average) of interior orientation residual vector lengths, accesor - * - * @return double Mean of interior orientation residual vector lengths - */ - double meanResidual() { return p_intOri.meanResiduals(); }; + //! Mean (average) of interior orientation residual vector lengths, accesor +// double meanResidual() { return p_intOri.meanResiduals(); }; - /** - * Max interior orientation residual vector length, accesor - * - * @return double Max interior orientation residual vector length - */ - double maxResidual() { return p_intOri.maxResiduals(); }; + //! Max interior orientation residual vector length, accesor +// double maxResidual() { return p_intOri.maxResiduals(); }; - /** - * Standard deviation of interior orientation residual vector lengths, accesor - * - * @return double Standard deviation of interior orientation residual vector lengths - */ - double stdevResidual() { return p_intOri.stdevResiduals(); }; + //! Standard deviation of interior orientation residual vector lengths, accesor +// double stdevResidual() { return p_intOri.stdevResiduals(); }; private: - - double m_etMiddle; //!< Ephemeris time at the middle line - double m_lineRate; //!< line exposure duration - Pvl *m_lab; //!< Image label used to construct camera object - - /** - * Class to preform transformations from cube coordiantes to image coordinates - */ - ApolloPanIO p_intOri; + //! Ephemeris time at the middle line + double m_etMiddle; + + //!line exposure duration + double m_lineRate; + + //! Image label used to construct camera object + Pvl *m_lab; + + //! Class to preform transformations from cube coordiantes to image coordinates +// ApolloPanIO p_intOri; int initializeInteriorOrientation(); }; diff --git a/isis/src/apollo/objs/ApolloPanoramicCamera/Camera.plugin b/isis/src/apollo/objs/ApolloPanoramicCamera/Camera.plugin index 50182636e0606901e5e2582f7b2d191a906920e0..57628262dc2d70a43e98d556889d29ac7c9304ab 100644 --- a/isis/src/apollo/objs/ApolloPanoramicCamera/Camera.plugin +++ b/isis/src/apollo/objs/ApolloPanoramicCamera/Camera.plugin @@ -1,14 +1,14 @@ -Group = Apollo15/Apollo_Pan - Library = ApolloPanoramicCamera +Group = Apollo15/Pan + Library = ./ApolloPanoramicCamera Routine = ApolloPanoramicCameraPlugin - Version = 1 + Version = 2 EndGroup -Group = Apollo16/Apollo_Pan +Group = Apollo16/Pan Library = ApolloPanoramicCamera Routine = ApolloPanoramicCameraPlugin Version = 1 EndGroup -Group = Apollo17/Apollo_Pan +Group = Apollo17/Pan Library = ApolloPanoramicCamera Routine = ApolloPanoramicCameraPlugin Version = 1 diff --git a/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.cpp b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ef7a7d8b4200b1e2a35f91ec265aff2a18fbbd12 --- /dev/null +++ b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.cpp @@ -0,0 +1,92 @@ +#include "ApolloPanoramicCameraFiducialMap.h" + +#include "Affine.h" +#include "CameraGroundMap.h" +#include "CameraSkyMap.h" +#include "IString.h" + +namespace Isis { + /** Constructs mapping between Apollo Panoramic Camera detectors and focal cylinder x/y. + * This method sets the x-axis direction to -1 if the NAIF IK code is even + * and to 1 if the code is odd. + * + * @param inst Instrument group from the Pvl labels + * @param naifIkCode Naif code of the Apollo Panoramic instrument for reading coefficients + * + */ + ApolloPanoramicCameraFiducialMap::ApolloPanoramicCameraFiducialMap(PvlGroup &fiducials, + const int naifIkCode) { + // Get the Instrument label information needed to define the fiducial map for this frame + p_naifIkCode = naifIkCode; + ReadFiducials(fiducials); + +// // Set the x-axis direction. +// int xdir; +// if(naifIkCode % 2 == 0) { +// xdir = -1; +// } +// else { +// xdir = 1; +// } + + //TODO Why is this commented out? I commented out the code above so we wouldn't get a compiler + //warning. 2018-07-14 mshepherd +// CreateTrans(xdir); + } + + + /** + * + * Reads the fiducials from the instrument group of the labels + * @param inst Instrument group from the Pvl labels + * + * @throws IException::User - "Unable to read fiducial mapping from cube + * labels - Input cube must be processed in Isis 2 through + * lofixlabel and converted to Isis 3 with pds2isis" + */ + void ApolloPanoramicCameraFiducialMap::ReadFiducials(PvlGroup &fiducials) { + + // Try to read the fiducials from the labels + try { + // Fiducial mapping to define the Focal Plane map + PvlKeyword &measuredSamples = fiducials["Sample"]; + PvlKeyword &measuredLines = fiducials["Line"]; + PvlKeyword &calibratedLines = fiducials["XCoordinates"]; + PvlKeyword &calibratedSamples = fiducials["YCoordinates"]; + for(int i = 0; i < measuredSamples.size(); i++) { + m_fidMeasuredSamples.push_back(toDouble(measuredSamples[i])); + m_fidMeasuredLines.push_back(toDouble(measuredLines[i])); + m_fidCalibratedLines.push_back(toDouble(calibratedLines[i])); + m_fidCalibratedSamples.push_back(toDouble(calibratedSamples[i])); + } + } + catch(IException &e) { + string msg = "Unable to read fiducial mapping from cube labels"; + throw IException(e, IException::User, msg, _FILEINFO_); + } + } + + + /** + * Creates focal plane affine transform. + * @param xdir The x-axis direction. + * + * + * @throws IException::User - "Unable to create fiducial map." + */ + Affine* ApolloPanoramicCameraFiducialMap::CreateTrans() { + Affine *fptrans = new Affine(); + + try { + fptrans->Solve(&m_fidMeasuredSamples[0], (double *) &m_fidMeasuredLines[0], + (double *) &m_fidCalibratedSamples[0], (double *) &m_fidCalibratedLines[0], + m_fidMeasuredSamples.size()); + } + catch(IException &e) { + string msg = "Unable to create fiducial map."; + throw IException(IException::User, msg, _FILEINFO_); + } + + return fptrans; + } +} diff --git a/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.h b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.h new file mode 100644 index 0000000000000000000000000000000000000000..27c0ab8386276749433078ab7b2ee17d4587342c --- /dev/null +++ b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.h @@ -0,0 +1,70 @@ +#ifndef ApolloPanoramicCameraFiducialMap_h +#define ApolloPanoramicCameraFiducialMap_h +/** + * @file + * + * Unless noted otherwise, the portions of Isis written by the USGS are public + * domain. See individual third-party library and package descriptions for + * intellectual property information,user agreements, and related information. + * + * Although Isis has been used by the USGS, no warranty, expressed or implied, + * is made by the USGS as to the accuracy and functioning of such software + * and related material nor shall the fact of distribution constitute any such + * warranty, and no responsibility is assumed by the USGS in connection + * therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see + * the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "PvlGroup.h" + +using namespace std; + +namespace Isis { + class Affine; + /** + * @brief Computes map from image coordinates to focal plane based on fiducials + * + * The ApolloPanoramicCameraFiducialMap class allows for the computation of a transformation + * from image coordinates (sample,line) to focal cylinder coordinates (x,y) for + * the Apollo 15, 16, 17 Panoramic Cameras The + * transformation map is an affine transformation defined by values written in + * the Isis 3 Instrument group labels. + * + * This class will load the fiducial sample/line and x/y values from the labels, + * compute the coefficients of the affine transformation, and place the + * coefficients in to the data pool. Typically these values are read from an + * iak, but for Lunar Orbiter they are frame dependent. + * + * @ingroup SpiceInstrumentsAndCameras + * @ingroup ApolloPanoramic + * + * @author 2016-09-07 Ken Edmundson + * + * @internal + * @history 2016-09-07 Ken Edmundson - Original Version + */ + class ApolloPanoramicCameraFiducialMap { + public: + ApolloPanoramicCameraFiducialMap(PvlGroup &inst, const int naifIkCode); + //! Destroys ApolloPanoramicCameraFiducialMap object. + ~ApolloPanoramicCameraFiducialMap() {}; + + Affine* CreateTrans(); + + private: + void ReadFiducials(PvlGroup &inst); + std::vector<double> m_fidMeasuredSamples; //!< Image sample positions of fiducial map + std::vector<double> m_fidMeasuredLines; //!< Image line positions of fiducial map + std::vector<double> m_fidCalibratedSamples; //!< Focal plane X positions of fiducial map + std::vector<double> m_fidCalibratedLines; //!< Focal plane Y positions of fiducial map + + int p_naifIkCode; //!< Naif instrument code + + }; +}; +#endif diff --git a/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.truth b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.truth new file mode 100644 index 0000000000000000000000000000000000000000..1845175eb9388f5f3b5006677c97e70c3ade9c8a --- /dev/null +++ b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/ApolloPanoramicCameraFiducialMap.truth @@ -0,0 +1,25 @@ +Unit Test for ApolloPanoramicCameraFiducialMap... +Testing fiducial fit on full Apollo 15 Panoramic AS15-P-0116 tile 5 (39795 x 25448) +FileName: AS15-P-0116_0005_TRIM.cub +CK Frame: -915230 + +testing four corners... + +Upper Left + (1 , 1) => (Xfp, Yfp) = (63.0117796745100520 , 148.8404313509815324) +Upper Left OK + +Upper Right + (1, 39795) => (Xfp, Yfp) = (62.7868969997623338 , -51.2210664535820328) +Upper Right OK + +Lower Left + (1, 1) => (Xfp, Yfp) = (-61.5404808995972417 , 148.8119557628731684) +Lower Left OK + +Lower Right + (1, 39795) => (Xfp, Yfp) = (-61.7653635743449598 , -51.2495420416903897) +Lower Right OK + + +------------------------------------- diff --git a/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/Makefile b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/unitTest.cpp b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..c690fe4ef93d28e802a11279ae5913a276e36640 --- /dev/null +++ b/isis/src/apollo/objs/ApolloPanoramicCameraFiducialMap/unitTest.cpp @@ -0,0 +1,298 @@ +/** + * @file + * + * Unless noted otherwise, the portions of Isis written by the USGS are public + * domain. See individual third-party library and package descriptions for + * intellectual property information,user agreements, and related information. + * + * Although Isis has been used by the USGS, no warranty, expressed or implied, + * is made by the USGS as to the accuracy and functioning of such software + * and related material nor shall the fact of distribution constitute any such + * warranty, and no responsibility is assumed by the USGS in connection + * therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see + * the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include <iomanip> +#include <iostream> + +#include "Camera.h" +#include "CameraDetectorMap.h" +#include "CameraDistortionMap.h" +#include "CameraFactory.h" +#include "CameraFocalPlaneMap.h" +#include "FileName.h" +#include "IException.h" +#include "iTime.h" +#include "Preference.h" +#include "Pvl.h" + +using namespace std; +using namespace Isis; + +int main(void) { + Preference::Preferences(true); + + cout << "Unit Test for ApolloPanoramicCameraFiducialMap..." << endl; + + try { + + cout << "Testing fiducial fit on full Apollo 15 Panoramic AS15-P-0116 tile 5 (39795 x 25448)" << endl; + Cube tile5("/work/projects/progteam/kedmundson/Apollo/PAN/AS15/testCubes/trimmed/AS15-P-0116_0005_TRIM.cub", "r"); + Camera *cam = CameraFactory::Create(tile5); + + cout << "FileName: " << FileName(tile5.fileName()).name() << endl; + cout << "CK Frame: " << cam->instrumentRotation()->Frame() << endl << endl; + cout.setf(std::ios::fixed); + cout << setprecision(9); + + // Test four corners detector to distorted focal plane + cout << "testing four corners detector to distorted focal plane..." << endl << endl; + + // upper left pixel + double samp = 1.0; + double line = 1.0; + double knownUpperLeftX = 63.011779675; + double knownUpperLeftY = 148.840431351; + + // convert from detector to distorted focal plane + if(cam->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = cam->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = cam->FocalPlaneMap()->FocalPlaneY(); + + cout << "Upper Left" << endl << setprecision(0) << " (" << samp << " , " << line + << ") => (Xfp, Yfp) = (" << setprecision(16) << focalPlaneX << " , " << focalPlaneY + << ")" << endl; + + if(fabs(focalPlaneX - knownUpperLeftX) < 1E-9 && + fabs(focalPlaneY - knownUpperLeftY) < 1E-9) { + cout << "Upper Left OK" << endl << endl; + } + else { + cout << setprecision(16) << "Upper Left X off by: " << focalPlaneX - knownUpperLeftX << endl; + cout << setprecision(16) << "Upper Left Y off by: " << focalPlaneY - knownUpperLeftY << endl; + } + } + + // upper right pixel + samp = cam->Samples(); + double knownUpperRightX = 62.786897000; + double knownUpperRightY = -51.221066454; + + // convert from detector to distorted focal plane + if(cam->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = cam->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = cam->FocalPlaneMap()->FocalPlaneY(); + cout << "Upper Right" << endl << " (1, " << setprecision(0) << samp << ") => (Xfp, Yfp) = (" << setprecision(16) << focalPlaneX << " , " << focalPlaneY << ")" << endl; + + if(fabs(focalPlaneX - knownUpperRightX) < 1E-9 && + fabs(focalPlaneY - knownUpperRightY) < 1E-9) { + cout << "Upper Right OK" << endl << endl; + } + else { + cout << setprecision(16) << "Upper Right X off by: " << focalPlaneX - knownUpperRightX << endl; + cout << setprecision(16) << "Upper Right Y off by: " << focalPlaneY - knownUpperRightY << endl; + } + } + + // lower left pixel + samp = 1.0; + line = cam->Lines(); + double knownLowerLeftX = -61.5404808995972417; + double knownLowerLeftY = 148.8119557628731684; + + // convert from detector to distorted focal plane + if(cam->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = cam->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = cam->FocalPlaneMap()->FocalPlaneY(); + cout << "Lower Left" << endl << " (1, " << setprecision(0) << samp << ") => (Xfp, Yfp) = (" << setprecision(16) << focalPlaneX << " , " << focalPlaneY << ")" << endl; + + if(fabs(focalPlaneX - knownLowerLeftX) < 1E-9 && + fabs(focalPlaneY - knownLowerLeftY) < 1E-9) { + cout << "Lower Left OK" << endl << endl; + } + else { + cout << setprecision(16) << "Lower Left X off by: " << focalPlaneX - knownLowerLeftX << endl; + cout << setprecision(16) << "Lower Left Y off by: " << focalPlaneY - knownLowerLeftY << endl; + } + } + + // lower right pixel + samp = cam->Samples(); + line = cam->Lines(); + double knownLowerRightX = -61.7653635743449598; + double knownLowerRightY = -51.2495420416903897; + + // convert from detector to distorted focal plane + if(cam->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = cam->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = cam->FocalPlaneMap()->FocalPlaneY(); + cout << "Lower Right" << endl << " (1, " << setprecision(0) << samp << ") => (Xfp, Yfp) = (" << setprecision(16) << focalPlaneX << " , " << focalPlaneY << ")" << endl; + + if(fabs(focalPlaneX - knownLowerRightX) < 1E-9 && + fabs(focalPlaneY - knownLowerRightY) < 1E-9) { + cout << "Lower Right OK" << endl << endl; + } + else { + cout << setprecision(16) << "Lower Right X off by: " << focalPlaneX - knownLowerRightX << endl; + cout << setprecision(16) << "Lower Right Y off by: " << focalPlaneY - knownLowerRightY << endl; + } + cout << endl << "-------------------------------------" << endl; + } + + // Test four corners distorted focal plane to detector + cout << "testing four corners distorted focal plane to detector..." << endl << endl; + + // upper left pixel + double distortedFocalPlaneX = 63.011779675; + double distortedFocalPlaneY = 148.840431351; + double knownUpperLeftSample = 1.0; + double knownUpperLeftLine = 1.0; + + // convert from detector to distorted focal plane + if(cam->DistortionMap()->SetUndistortedFocalPlane(distortedFocalPlaneX, distortedFocalPlaneY)) { + double sample = cam->DetectorMap()->ParentSample(); + double line = cam->DetectorMap()->ParentLine(); + + cout << "Upper Left" << endl << setprecision(16) << " (" << distortedFocalPlaneX << " , " + << distortedFocalPlaneY + << ") => (sample, line) = (" << setprecision(16) << sample << " , " << line + << ")" << endl; + + if(fabs(sample - knownUpperLeftSample) < 1E-9 && + fabs(line - knownUpperLeftLine) < 1E-9) { + cout << "Upper Left OK" << endl << endl; + } + else { + cout << setprecision(16) << "Upper Left sample off by: " << sample - knownUpperLeftSample << endl; + cout << setprecision(16) << "Upper Left line off by: " << line - knownUpperLeftLine << endl; + } + } + + + delete cam; + } +/* + cout << "Testing high fiducial fit on a full 34530 x 8750 frame" << endl; + Cube ch("$lo/testData/4164H_Full_mirror.cub", "r"); + Camera *camh = CameraFactory::Create(ch); + + cout << "FileName: " << FileName(ch.fileName()).name() << endl; + cout << "CK Frame: " << camh->instrumentRotation()->Frame() << endl << endl; + cout.setf(std::ios::fixed); + cout << setprecision(9); + + // Test all four corners and center pixel to make sure the conversions are correct + // Upper left pixel + samp = 1.0; + line = 1.0; + knownUpperLeftX = 125.8894771096694; + knownUpperLeftY = -31.23569821243375; + + // Now Convert from detector to distorted focal plane + if(camh->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = camh->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = camh->FocalPlaneMap()->FocalPlaneY(); + if(fabs(focalPlaneX - knownUpperLeftX) < 1E-9 && + fabs(focalPlaneY - knownUpperLeftY) < 1E-9) { + cout << "Upper left corner OK" << endl; + } + else { + cout << setprecision(16) << "Upper left X off by: " << focalPlaneX - knownUpperLeftX << endl; + cout << setprecision(16) << "Upper left Y off by: " << focalPlaneY - knownUpperLeftY << endl; + } + } + + // Upper right pixel + samp = camh->Samples(); + knownUpperRightX = -114.13710918057000754; + knownUpperRightY = -31.21483142132193; + + // Now Convert from detector to distorted focal plane + if(camh->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = camh->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = camh->FocalPlaneMap()->FocalPlaneY(); + + if(fabs(focalPlaneX - knownUpperRightX) < 1E-9 && + fabs(focalPlaneY - knownUpperRightY) < 1E-9) { + cout << "Upper right corner OK" << endl; + } + else { + cout << setprecision(18) << "Upper right X off by: " << focalPlaneX - knownUpperRightX << endl; + cout << setprecision(18) << "Upper right Y off by: " << focalPlaneY - knownUpperRightY << endl; + } + } + + // Lower left pixel + samp = 1.0; + line = camh->Lines(); + knownLowerLeftX = 125.9405233275204; + knownLowerLeftY = 29.52307388869981; + + // Now Convert from detector to distorted focal plane + if(camh->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = camh->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = camh->FocalPlaneMap()->FocalPlaneY(); + if(fabs(focalPlaneX - knownLowerLeftX) < 1E-9 && + fabs(focalPlaneY - knownLowerLeftY) < 1E-9) { + cout << "Lower left corner OK" << endl; + } + else { + cout << setprecision(16) << "Lower left X off by: " << focalPlaneX - knownLowerLeftX << endl; + cout << setprecision(16) << "Lower left Y off by: " << focalPlaneY - knownLowerLeftY << endl; + } + } + + // Lower right pixel + samp = camh->Samples(); + line = camh->Lines(); + knownLowerRightX = -114.0860629627191; + knownLowerRightY = 29.54394067981162; + + // Now Convert from detector to distorted focal plane + if(camh->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = camh->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = camh->FocalPlaneMap()->FocalPlaneY(); + if(fabs(focalPlaneX - knownLowerRightX) < 1E-9 && + fabs(focalPlaneY - knownLowerRightY) < 1E-9) { + cout << "Lower right corner OK" << endl; + } + else { + cout << setprecision(16) << "Lower right X off by: " << focalPlaneX - knownLowerRightX << endl; + cout << setprecision(16) << "Lower right Y off by: " << focalPlaneY - knownLowerRightY << endl; + } + } + + // Center pixel + samp = camh->Samples() / 2; + line = camh->Lines() / 2; + double knownCenterX = 5.90517988076963;//119.9912428434887; + double knownCenterY = -0.8493513951460194;//-30.39329207495764; + + // Now Convert from detector to distorted focal plane + if(camh->FocalPlaneMap()->SetDetector(samp, line)) { + double focalPlaneX = camh->FocalPlaneMap()->FocalPlaneX(); + double focalPlaneY = camh->FocalPlaneMap()->FocalPlaneY(); + if(fabs(focalPlaneX - knownCenterX) < 1E-9 && + fabs(focalPlaneY - knownCenterY) < 1E-9) { + cout << "Center corner OK" << endl; + } + else { + cout << setprecision(16) << "Center X off by: " << focalPlaneX - knownCenterX << endl; + cout << setprecision(16) << "Center Y off by: " << focalPlaneY - knownCenterY << endl; + } + } + + delete camh; + } +*/ + catch(IException &e) { + e.print(); + } +} + diff --git a/isis/src/base/objs/Camera/Camera.h b/isis/src/base/objs/Camera/Camera.h index b955731bb2aac6e88a6725ad70e61ad779cd9128..dccdf31037b78a162620e138da1c935d622fce63 100644 --- a/isis/src/base/objs/Camera/Camera.h +++ b/isis/src/base/objs/Camera/Camera.h @@ -365,6 +365,7 @@ namespace Isis { enum CameraType { Framing, //!< Framing Camera PushFrame, //!< Push Frame Camera + SampleScan, //!< Sample Scan Camera LineScan, //!< Line Scan Camera Radar, //!< Radar Camera Point //!< Point Camera diff --git a/isis/src/base/objs/CameraFocalPlaneMap/CameraFocalPlaneMap.cpp b/isis/src/base/objs/CameraFocalPlaneMap/CameraFocalPlaneMap.cpp index f498c9eca0bee1eed45c5d7e7a1f32be7f5eab18..ef07040e8eb3f517911b06709cda27889b1e3ac3 100644 --- a/isis/src/base/objs/CameraFocalPlaneMap/CameraFocalPlaneMap.cpp +++ b/isis/src/base/objs/CameraFocalPlaneMap/CameraFocalPlaneMap.cpp @@ -159,7 +159,6 @@ namespace Isis { bool CameraFocalPlaneMap::SetFocalPlane(const double dx, const double dy) { p_focalPlaneX = dx; p_focalPlaneY = dy; - p_centeredDetectorSample = p_itranss[0] + (p_itranss[1] * dx) + (p_itranss[2] * dy); p_centeredDetectorLine = p_itransl[0] + (p_itransl[1] * dx) + (p_itransl[2] * dy); ComputeUncentered(); @@ -167,7 +166,7 @@ namespace Isis { } - /** Compute distorted focal plane coordinate from detector position (sampel,line) + /** Compute distorted focal plane coordinate from detector position (sample,line) * * This method will compute both the distorted focal plane x/y and centered * detector position given a detector position @@ -249,49 +248,37 @@ namespace Isis { } - /** - * @returns The distorted focal plane x - */ + //! Return distorted focal plane x double CameraFocalPlaneMap::FocalPlaneX() const { return p_focalPlaneX; } - /** - * @returns The distorted focal plane y - */ + //! Return distorted focal plane y double CameraFocalPlaneMap::FocalPlaneY() const { return p_focalPlaneY; } - /** - * @returns The detector sample - */ + //! Return detector sample double CameraFocalPlaneMap::DetectorSample() const { return p_detectorSample; } - /** - * @returns The detector line - */ + //! Return detector line double CameraFocalPlaneMap::DetectorLine() const { return p_detectorLine; } - /** - * @returns The centered detector sample - */ + //! Return centered detector sample double CameraFocalPlaneMap::CenteredDetectorSample() const { return p_centeredDetectorSample; } - /** - * @returns The centered detector line - */ + //! Return centered detector line double CameraFocalPlaneMap::CenteredDetectorLine() const { return p_centeredDetectorLine; } @@ -312,17 +299,13 @@ namespace Isis { } - /** - * @returns The detector line origin - */ + //! Return detector line origin double CameraFocalPlaneMap::DetectorLineOrigin() const { return p_detectorLineOrigin; } - /** - * @returns The detector sample origin - */ + //! Return detector sample origin double CameraFocalPlaneMap::DetectorSampleOrigin() const { return p_detectorSampleOrigin; } @@ -344,27 +327,19 @@ namespace Isis { } - /** - * @returns The detector line offset - */ + //! Return detector line offset double CameraFocalPlaneMap::DetectorLineOffset() const { return p_detectorLineOffset; } - /** - * @returns The detector sample offset - */ + //! Return detector sample offset double CameraFocalPlaneMap::DetectorSampleOffset() const { return p_detectorSampleOffset; } - /** - * Set the affine coefficients for converting destorted (x,y) to a detector Line - * - * @param transL Vector of the affine coefficients - */ + //! Set the affine coefficients for converting destorted (x,y) to a detector Line void CameraFocalPlaneMap::SetTransL(const QVector<double> transL) { for (int i=0; i<3; ++i) { p_itransl[i] = transL[i]; @@ -372,11 +347,7 @@ namespace Isis { } - /** - * Set the affine coefficients for converting destorted (x,y) to a detector Sample - * - * @param transS Vector of the affine coefficients - */ + //! Set the affine coefficients for converting destorted (x,y) to a detector Sample void CameraFocalPlaneMap::SetTransS(const QVector<double> transS) { for (int i=0; i<3; ++i) { p_itranss[i] = transS[i]; @@ -384,11 +355,7 @@ namespace Isis { } - /** - * Set the affine coefficients for converting detector (sample,line) to a distorted X - * - * @param transX Vector of the affine coefficients - */ + //! Set the affine coefficients for converting detector (sample,line) to a distorted X void CameraFocalPlaneMap::SetTransX(const QVector<double> transX) { for (int i=0; i<3; ++i) { p_transx[i] = transX[i]; @@ -396,11 +363,7 @@ namespace Isis { } - /** - * Set the affine coefficients for converting detector (sample,line) to a distorted Y - * - * @param transY Vector of the affine coefficients - */ + //! Set the affine coefficients for converting detector (sample,line) to a distorted Y void CameraFocalPlaneMap::SetTransY(const QVector<double> transY) { for (int i=0; i<3; ++i) { p_transy[i] = transY[i]; @@ -408,33 +371,25 @@ namespace Isis { } - /** - * @return The affine coefficients for converting detector (sample,line) to a distorted X - */ + //! Return the affine coefficients for converting detector (sample,line) to a distorted X const double *CameraFocalPlaneMap::TransX() const{ return p_transx; } - /** - * @returns The affine coefficients for converting detector (sample,line) to distorted Y - */ + //! Return the affine coefficients for converting detector (sample,line) to distorted Y const double *CameraFocalPlaneMap::TransY() const{ return p_transy; } - /** - * @returns The affine coefficients for converting distorted (x,y) to a detector Sample - */ + //! Return the affine coefficients for converting distorted (x,y) to a detector Sample const double *CameraFocalPlaneMap::TransS() const{ return p_itranss; } - /** - * @returns The affine coefficients for converting distorted (x,y) to a detector Line - */ + //! Return the affine coefficients for converting distorted (x,y) to a detector Line const double *CameraFocalPlaneMap::TransL() const{ return p_itransl; } diff --git a/isis/src/base/objs/LineScanCameraGroundMap/LineScanCameraGroundMap.cpp b/isis/src/base/objs/LineScanCameraGroundMap/LineScanCameraGroundMap.cpp index 6b7056bbbcedb84f12353591d0a74c4bbf4f1232..ee98483f69f2bf85ef9e1fc64f66a0d3933419ab 100644 --- a/isis/src/base/objs/LineScanCameraGroundMap/LineScanCameraGroundMap.cpp +++ b/isis/src/base/objs/LineScanCameraGroundMap/LineScanCameraGroundMap.cpp @@ -62,7 +62,7 @@ class LineOffsetFunctor : LineOffsetFunctor(Isis::Camera *camera, const Isis::SurfacePoint &surPt) { m_camera = camera; - m_surfacePoint = surPt; + surfacePoint = surPt; } @@ -96,7 +96,7 @@ class LineOffsetFunctor : m_camera->Sensor::setTime(et); // Set ground - if (!m_camera->Sensor::SetGround(m_surfacePoint, false)) { + if (!m_camera->Sensor::SetGround(surfacePoint, false)) { IString msg = "Sensor::SetGround failed for surface point in LineScanCameraGroundMap.cpp" " LineOffsetFunctor"; throw IException(IException::Programmer, msg, _FILEINFO_); @@ -112,22 +112,22 @@ class LineOffsetFunctor : // SetUndistortedFocalPlane was failing a majority of the time, causing most SetGround calls // to fail. Even when it did succeed, it was producing non-continous return values. // Set the undistorted focal plane coordinates - // if (!m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { - // IString msg = "DistortionMap::SetUndistoredFocalPlane failed for surface point in " - // "LineScanCameraGroundMap.cpp LineOffsetFunctor"; - // throw IException(IException::Programmer, msg, _FILEINFO_); - // } +// if (!m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { +// IString msg = "DistortionMap::SetUndistoredFocalPlane failed for surface point in " +// "LineScanCameraGroundMap.cpp LineOffsetFunctor"; +// throw IException(IException::Programmer, msg, _FILEINFO_); +// } // Get the natural (distorted focal plane coordinates) - // dx = m_camera->DistortionMap()->FocalPlaneX(); - // dy = m_camera->DistortionMap()->FocalPlaneY(); - // std::cout << "use dist" << std::endl; - //} +// dx = m_camera->DistortionMap()->FocalPlaneX(); +// dy = m_camera->DistortionMap()->FocalPlaneY(); +// std::cout << "use dist" << std::endl; +// } // Try to use SetUndistortedFocalPlane, if that does not work use the distorted x,y // under the assumption (bad|good) that extrapolating the distortion - // is causing the distorted x,y to be way off the sensor, and thus not very good anyway. + // is causing the distorted x to be way off the sensor, and thus not very good anyway. if (m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { // Get the natural (distorted focal plane coordinates) dx = m_camera->DistortionMap()->FocalPlaneX(); @@ -151,7 +151,7 @@ class LineOffsetFunctor : private: - SurfacePoint m_surfacePoint; + SurfacePoint surfacePoint; Camera* m_camera; }; @@ -187,7 +187,7 @@ class SensorSurfacePointDistanceFunctor : throw IException(IException::Programmer, msg, _FILEINFO_); } m_camera->Sensor::setTime(et); - if (!m_camera->Sensor::SetGround(surfacePoint, false)) { + if(!m_camera->Sensor::SetGround(surfacePoint, false)) { IString msg = "Sensor::SetGround failed for surface point in LineScanCameraGroundMap.cpp" "SensorSurfacePointDistanceFunctor"; } @@ -289,8 +289,8 @@ namespace Isis { //CameraDistortionMap *distortionMap = p_camera->DistortionMap(); //CameraFocalPlaneMap *focalMap = p_camera->FocalPlaneMap(); - double approxTime = 0; - double approxOffset = 0; + double approxTime=0; + double approxOffset=0; double lookC[3] = {0.0, 0.0, 0.0}; double ux = 0.0; double uy = 0.0; @@ -306,20 +306,20 @@ namespace Isis { LineOffsetFunctor offsetFunc(p_camera,surfacePoint); SensorSurfacePointDistanceFunctor distanceFunc(p_camera,surfacePoint); - // METHOD #1 - // Use the line given as a start point for the secant method root search. - if (approxLine >= 0.5) { - - // convert the approxLine to an approximate time and offset - p_camera->DetectorMap()->SetParent(p_camera->ParentSamples() / 2.0, approxLine); + /********************************************************************************************* + if an approximate point is given use that as a start point for the secant method root search + *********************************************************************************************/ + if (approxLine > 0) { + //convert the approxLine to an approximate time and offset + p_camera->DetectorMap()->SetParent(p_camera->ParentSamples() / 2, p_camera->ParentLines()); +// p_camera->DetectorMap()->SetParent(p_camera->ParentSamples() / 2, approxLine); approxTime = p_camera->time().Et(); approxOffset = offsetFunc(approxTime); - // Check to see if there is no need to improve this root, it's good enough - if (fabs(approxOffset) < 1e-2) { + if (fabs(approxOffset) < 1e-2) { //no need to iteratively improve this root, it's good enough p_camera->Sensor::setTime(approxTime); - // check to make sure the point isn't behind the planet + //check to make sure the point isn't behind the planet if (!p_camera->Sensor::SetGround(surfacePoint, true)) { return Failure; } @@ -335,7 +335,7 @@ namespace Isis { double fl, fh, xl, xh; - // starting times for the secant method, kept within the domain of the cache + //starting times for the secant method, kept within the domain of the cache xh = approxTime; if (xh + lineRate < cacheEnd) { xl = xh + lineRate; @@ -344,7 +344,7 @@ namespace Isis { xl = xh - lineRate; } - // starting offsets + //starting offsets fh = approxOffset; //the first is already calculated fl = offsetFunc(xl); @@ -361,7 +361,7 @@ namespace Isis { double f = offsetFunc(etGuess); - // elliminate the node farthest away from the current best guess + //elliminate the node farthest away from the current best guess if (fabs( xl- etGuess) > fabs( xh - etGuess)) { xl = etGuess; fl = f; @@ -371,10 +371,11 @@ namespace Isis { fh = f; } - // See if we converged on the point so set up the undistorted focal plane values and return + //See if we converged on the point so set up the undistorted + // focal plane values and return if (fabs(f) < 1e-2) { - p_camera->Sensor::setTime(approxTime); - // check to make sure the point isn't behind the planet + p_camera->Sensor::setTime(etGuess); + //check to make sure the point isn't behind the planet if (!p_camera->Sensor::SetGround(surfacePoint, true)) { return Failure; } @@ -387,13 +388,14 @@ namespace Isis { return Success; } - } // End itteration using a guess - // return Failure; // Removed to let the lagrange method try to find the line if secant fails - } // End use a guess + } + return Failure; + } - // METHOD #2 - // The guess or middle line did not work so try estimating with a quadratic + /********************************************************************************************** + no estimate given for the approximate line--quadratic approximation root finding + **********************************************************************************************/ // The offsets are typically quadratic, so three points will be used to approximate a quadratic // as a first order attempt to find the root location(s) @@ -408,7 +410,7 @@ namespace Isis { timeNodes[0] = cacheStart; timeNodes[2] = cacheEnd; - timeNodes[1] = (cacheStart+cacheEnd) / 2.0; // middle time + timeNodes[1] = (cacheStart+cacheEnd) / 2.0; //middle time double quadPoly[3]; double temp; @@ -417,7 +419,7 @@ namespace Isis { offsetNodes[i] = offsetFunc(timeNodes[i]); } - // centralize and normalize the data for stability in root finding + //centralize and normalize the data for stability in root finding timeAverage = (timeNodes[0] + timeNodes[1] + timeNodes[2]) / 3.0; timeNodes[0] -= timeAverage; timeNodes[1] -= timeAverage; @@ -459,10 +461,8 @@ namespace Isis { // Now that we have the coefficients of the quadratic look for roots // (see Numerical Recipes Third Edition page 227) temp = quadPoly[1] * quadPoly[1] - 4.0 * quadPoly[0] * quadPoly[2]; //discriminant - - // THIS IS A PREMATURE FAILURE RETURN. IT SHOULD TRY THE NEXT METHON BEFORE FAILING if (temp < 0.0) { - return Failure; // there are apparently not any real roots on this image + return Failure; //there are apparently not any real roots on this image } if (quadPoly[1] >= 0.0) { @@ -480,44 +480,41 @@ namespace Isis { root.push_back(quadPoly[2]/temp); } - // check to see if the roots are in the time interval of the cache + //check to see if the roots are in the time interval of the cache for (int i=root.size()-1; i>=0; i--) { if ( root[i] < timeNodes[0] || root[i] > timeNodes[2] ) { root.removeAt(i); } } - // return the calculated roots to the original system + //return the calculated roots to the original system for (int i=0; i<root.size(); i++) { root[i] = root[i]/scale + timeAverage; } - // THIS IS A PREMATURE FAILURE RETURN. IT SHOULD TRY THE NEXT METHON BEFORE FAILING if (root.size() == 0) { - return Failure; // there are apparently not any roots on this image + return Failure; //there are apparently not any roots on this image } // At the time of this writing ISIS made no attempt to support any sensors that were not "1 to 1". - // Meaning they imaged the same point on the ground in multiple lines of the image + // Meaning that imaged the same point on the ground in multiple lines of the image // therefore we must somehow reduce multiple possible roots to a single one, the legacy // code (replaced with this code) did this based on distance from the sensor to the target // the shortest distance being the winner. For legacy consistency I have used the same logic below. - for (int i=0; i<root.size(); i++) { // Offset/dist calculation loop + for (int i=0; i<root.size(); i++) { //Offset/dist calculation loop dist << distanceFunc(root[i]); offset << offsetFunc(root[i]); } // Save the root with the smallest dist - { - int j=0; - for (int i=1; i<root.size(); i++) { - if (dist[i] < dist[j]) j=i; - } - - approxTime = root[j]; // Now we have our time - approxOffset = offset[j]; // The offsets are saved to avoid recalculating it later - } + int j=0; + for (int i=1, j=0; i<root.size(); i++) { + if (dist[i] < dist[j]) j=i; + } + + approxTime = root[j]; // Now we have our time + approxOffset = offset[j]; // The offsets are saved to avoid recalculating it later if (fabs(approxOffset) < 1.0e-2) { // No need to iteratively improve this root, it's good enough p_camera->Sensor::setTime(approxTime); @@ -537,9 +534,10 @@ namespace Isis { return Success; } - - // METHOD #3 - // Estimated line and quadratic approximation insufficient, try Brent's method + /********************************************************************************************** + no estimate given for the approximate line, quadratic approximation insufficient, use Brent's + method + **********************************************************************************************/ // The offsets are typically quadratic, so three points will be used to approximate a quadratic // as a first order attempt to find the root location(s) @@ -562,14 +560,14 @@ namespace Isis { pt << offsetNodes[i] / scale; pts << pt; } - + for (int i=0; i<root.size(); i++) { QList <double> pt; pt << root[i]; pt << offset[i]; pts << pt; } - + qSort(pts.begin(), pts.end(), ptXLessThan); root.clear(); @@ -580,6 +578,7 @@ namespace Isis { if (FunctionTools::brentsRootFinder <LineOffsetFunctor> (offsetFunc, pts[i-1], pts[i], 1.0e-3, 200, temp)) { root << temp; + } } } @@ -607,15 +606,12 @@ namespace Isis { } // Save the root with the smallest dist - { - int j=0; - for (int i=1; i<root.size(); i++) { - if (dist[i] < dist[j]) j=i; - } - - p_camera->Sensor::setTime(root[j]); + for (int i=1, j=0; i<root.size(); i++) { + if (dist[i] < dist[j]) j=i; } + p_camera->Sensor::setTime(root[j]); + // No need to make sure the point isn't behind the planet, it was done above p_camera->Sensor::LookDirection(lookC); ux = p_camera->FocalLength() * lookC[0] / lookC[2]; diff --git a/isis/src/base/objs/SampleScanCamera/Makefile b/isis/src/base/objs/SampleScanCamera/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/base/objs/SampleScanCamera/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/base/objs/SampleScanCamera/SampleScanCamera.cpp b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.cpp new file mode 100644 index 0000000000000000000000000000000000000000..6b7fa5e90fc1a72b1d5cf0d88609ae1d3cba190f --- /dev/null +++ b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.cpp @@ -0,0 +1,71 @@ +/** + * @file + * $Revision: 1.1 $ + * $Date: 2009/08/31 15:11:49 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "SampleScanCamera.h" + +namespace Isis { + /** + * Constructs the SampleScanCamera object + * + * @param cube Cube used to create the parent Camera object + */ + SampleScanCamera::SampleScanCamera(Isis::Cube &cube) : Camera(cube) { + } + + /** + * Returns the SampleScan type of camera, as enumerated in the Camera + * class. + * @return CameraType SampleScan camera type. + */ + virtual CameraType GetCameraType() const { + return SampleScan; + } + + /** + * Returns a pointer to the SampleScanCameraGroundMap object + * + * @return SampleScanCameraGroundMap* + */ + SampleScanCameraGroundMap *GroundMap() { + return (SampleScanCameraGroundMap *)Camera::GroundMap(); + }; + + /** + * Returns a pointer to the SampleScanCameraSkyMap object + * + * @return SampleScanCameraSkyMap* + */ + SampleScanCameraSkyMap *SkyMap() { + return (SampleScanCameraSkyMap *)Camera::SkyMap(); + }; + + /** + * Returns a pointer to the SampleScanCameraDetectorMap object + * + * @return SampleScanCameraDetectorMap* + */ + SampleScanCameraDetectorMap *DetectorMap() { + return (SampleScanCameraDetectorMap *)Camera::DetectorMap(); + }; +}; + diff --git a/isis/src/base/objs/SampleScanCamera/SampleScanCamera.h b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.h new file mode 100644 index 0000000000000000000000000000000000000000..b2fefbfd5b4126e343a22c3935c5e1f253b39b66 --- /dev/null +++ b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.h @@ -0,0 +1,63 @@ +#ifndef SAMPLESCANCAMERA_H +#define SAMPLESCANCAMERA_H +/** + * @file + * $Revision: 1.1 $ + * $Date: 2009/08/31 15:11:49 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "Camera.h" + +namespace Isis { + class SampleScanCameraGroundMap; + class SampleScanCameraDetectorMap; + class SampleScanCameraSkyMap; + + /** + * @brief Generic class for Sample Scan Cameras + * + * This class is used to abstract out sample scan camera functionality from + * children classes. + * + * @ingroup SpiceInstrumentsAndCameras + * @author 2016-09-12 Ken Edmundson + * + * @internal + * @history 2016-09-12 Ken Edmundson - Original version. + * + * @todo Implement more functionality in this class and abstract away from the children + */ + + class SampleScanCamera : public Camera { + public: + SampleScanCamera(Isis::Cube &cube); + + virtual CameraType GetCameraType(); + SampleScanCameraGroundMap *GroundMap(); + SampleScanCameraSkyMap *SkyMap(); + SampleScanCameraDetectorMap *DetectorMap(); + + private: + SampleScanCamera(const SampleScanCamera &); //!< Copying cameras is not allowed + SampleScanCamera &operator=(const SampleScanCamera &); //!< Assigning cameras is not allowed + }; +}; + +#endif diff --git a/isis/src/base/objs/SampleScanCamera/SampleScanCamera.truth b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.truth new file mode 100644 index 0000000000000000000000000000000000000000..ed64237ffae45dcdb0e9d297560b7b0f6039583b --- /dev/null +++ b/isis/src/base/objs/SampleScanCamera/SampleScanCamera.truth @@ -0,0 +1,4 @@ +Camera = Framing? 0 +Camera = LineScan? 1 +Camera = PushFrame? 0 +Camera = Radar? 0 diff --git a/isis/src/base/objs/SampleScanCamera/unitTest.cpp b/isis/src/base/objs/SampleScanCamera/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..789bf7d2a202f0b752c3c449a7dc1f3583d7b6fe --- /dev/null +++ b/isis/src/base/objs/SampleScanCamera/unitTest.cpp @@ -0,0 +1,67 @@ +/** + * @file + * + * Unless noted otherwise, the portions of Isis written by the USGS are public + * domain. See individual third-party library and package descriptions for + * intellectual property information,user agreements, and related information. + * + * Although Isis has been used by the USGS, no warranty, expressed or implied, + * is made by the USGS as to the accuracy and functioning of such software + * and related material nor shall the fact of distribution constitute any such + * warranty, and no responsibility is assumed by the USGS in connection + * therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html in a browser or see + * the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "Cube.h" +#include "FileName.h" +#include "IException.h" +#include "SampleScanCamera.h" +#include "Preference.h" +#include "Pvl.h" + +using namespace std; +using namespace Isis; + +class MyCamera : public SampleScanCamera { + public: + MyCamera(Cube &cube) : SampleScanCamera(cube) { } + + virtual int CkFrameId() const { + string msg = "CK Frame ID is unqiue to mission-specific cameras"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } + + virtual int CkReferenceId() const { + string msg = "CK Reference ID is unique to mission-specific cameras"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } + + virtual int SpkReferenceId() const { + string msg = "SPK Reference ID is unique to mission-specific cameras"; + throw IException(IException::Unknown, msg, _FILEINFO_); + } + + // These are pure virtual within Sensor that must be overriden + virtual QString instrumentNameLong() const { return QString("Sample Scan"); } + virtual QString instrumentNameShort() const { return QString("LS"); } + virtual QString spacecraftNameLong() const { return QString("Sample Scan 1"); } + virtual QString spacecraftNameShort() const { return QString("LS1"); } +}; + +int main() { + Preference::Preferences(true); + Cube cube("$mgs/testData/ab102401.lev2.cub", "r"); + MyCamera cam(cube); + + cout << "Camera = Framing? " << (cam.GetCameraType() == Camera::Framing) << endl; + cout << "Camera = SampleScan? " << (cam.GetCameraType() == Camera::SampleScan) << endl; + cout << "Camera = LineScan? " << (cam.GetCameraType() == Camera::LineScan) << endl; + cout << "Camera = PushFrame? " << (cam.GetCameraType() == Camera::PushFrame) << endl; + cout << "Camera = Radar? " << (cam.GetCameraType() == Camera::Radar) << endl; +} diff --git a/isis/src/base/objs/SampleScanCameraDetectorMap/Makefile b/isis/src/base/objs/SampleScanCameraDetectorMap/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraDetectorMap/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.cpp b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..777b889ab5e0aceb0689566d90e1a7a9ca17ebef --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.cpp @@ -0,0 +1,137 @@ +/** + * @file + * $Revision: 1.1.1.1 $ + * $Date: 2006/10/31 23:18:08 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "SampleScanCameraDetectorMap.h" + +#include "CameraFocalPlaneMap.h" +#include "iTime.h" + +namespace Isis { + + /** Construct a detector map for sample scan cameras + * + * @param parent The parent camera model for the detector map + * @param etStart starting ephemeris time in seconds + * at the left of the first sample + * @param sampleRate the time in seconds between samples + * + */ + SampleScanCameraDetectorMap(Camera *parent, const double etStart, const double sampleRate) : + CameraDetectorMap(parent) { + p_etStart = etStart; + p_sampleRate = sampleRate; + } + + + //! Destructor + virtual ~SampleScanCameraDetectorMap() {}; + + /** Reset the starting ephemeris time + * + * Use this method to reset the starting time of the left edge of + * the first sample in the parent image. That is the time, prior + * to cropping, scaling, or padding. Usually this will not need + * to be done unless the time changes between bands. + * + * @param etStart starting ephemeris time in seconds + * + */ + void SetStartTime(const double etStart) { + p_etStart = etStart; + }; + + + /** Reset the sample rate + * + * Use this method to reset the time between samples. Usually this + * will not need to be done unless the rate changes between bands. + * + * @param sampleRate the time in seconds between samples + * + */ + void SetSampleRate(const double sampleRate) { + p_sampleRate = sampleRate; + }; + + + /** + * Returns the time in seconds between scan columns + * + * @return double The time in seconds between scan columns + */ + double SampleRate() const { + return p_sampleRate; + }; + + /** Compute parent position from a detector coordinate + * + * This method will compute a parent sample given a + * detector coordinate. The parent sample will be computed using the + * the time in the parent camera + * + * @param sample Sample number in the detector + * @param line Line number in the detector + * + * @return conversion successful + */ + bool SampleScanCameraDetectorMap::SetDetector(const double sample, const double line) { + if (!CameraDetectorMap::SetDetector(sample, line)) + return false; + + double etDiff = p_camera->time().Et() - p_etStart; + p_parentSample = etDiff / p_sampleRate + 0.5; + return true; + } + + /** Compute detector position from a parent image coordinate + * + * This method will compute the detector position from the parent + * line/sample coordinate. The parent sample will be used to set the + * appropriate time in the parent camera. + * + * @param sample Sample number in the parent image + * @param line Line number in the parent image + * + * @return conversion successful + */ + bool SampleScanCameraDetectorMap::SetParent(const double sample, const double line) { + if (!CameraDetectorMap::SetParent(sample, line)) + return false; + + p_detectorSample = p_camera->FocalPlaneMap()->DetectorSampleOffset(); + + double etSample = p_etStart - p_sampleRate * (sample - 0.5); + p_camera->setTime(etSample); + return true; + } + + /** + * Returns the starting time at the right edge of the last sample in the parent image + * + * @return double The starting time at the right edge of the last sample in the parent image + */ + double SampleScanCameraDetectorMap::StartTime() const { + return p_etStart; + } + +} diff --git a/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.h b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.h new file mode 100644 index 0000000000000000000000000000000000000000..980b828f2dac44dfb596384762d8d373857a0bfa --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.h @@ -0,0 +1,65 @@ +/** + * @file + * $Revision: 1.3 $ + * $Date: 2009/03/07 17:57:27 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#ifndef SampleScanCameraDetectorMap_h +#define SampleScanCameraDetectorMap_h + +#include "CameraDetectorMap.h" + +namespace Isis { + /** Convert between parent image coordinates and detector coordinates + * + * This class is used to convert between parent detector coordinates + * (sample/line) and detector coordinates for a sample scan camera. + * + * @ingroup Camera + * + * @see Camera + * + * @author 2016-09-07 Ken Edmundson + * + * @internal + * @history 2016-09-07 Ken Edmundson Original version. + * + */ + class SampleScanCameraDetectorMap : public CameraDetectorMap { + public: + + SampleScanCameraDetectorMap(Camera *parent, const double etStart, const double sampleRate); + + virtual ~SampleScanCameraDetectorMap() {}; + + void SetStartTime(const double etStart); + void SetSampleRate(const double sampleRate); + double SampleRate() const; + + virtual bool SetParent(const double sample, const double line); + virtual bool SetDetector(const double sample, const double line); + double StartTime() const; + + private: + double p_etStart; //!< Starting time at the left of the 1st parent sample + double p_sampleRate; //!< iTime between samples in parent cube + }; +}; +#endif diff --git a/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.truth b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.truth new file mode 100644 index 0000000000000000000000000000000000000000..6347fe6d38f458077e14c2efcd5624b000c19da3 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraDetectorMap/SampleScanCameraDetectorMap.truth @@ -0,0 +1 @@ +This class will be tested by the applications and the individual Camera models. diff --git a/isis/src/base/objs/SampleScanCameraDetectorMap/unitTest.cpp b/isis/src/base/objs/SampleScanCameraDetectorMap/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d29f6a0a3117f27e7834dbb1f64a8b2014ea3d9d --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraDetectorMap/unitTest.cpp @@ -0,0 +1,8 @@ +#include <iostream> +#include "Preference.h" + +using namespace std; +int main() { + Isis::Preference::Preferences(true); + cout << "This class will be tested by the applications and the individual Camera models." << endl; +} diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/Makefile b/isis/src/base/objs/SampleScanCameraGroundMap/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.cpp b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..ab57d2eb3b1c859916f15db58d546e326d41c4f4 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.cpp @@ -0,0 +1,398 @@ +/** + * @file + * $Revision: 1.7 $ + * $Date: 2010/06/17 18:59:11 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "SampleScanCameraGroundMap.h" + +#include <iostream> +#include <iomanip> + +#include <QTime> +#include <QList> +#include <QFile> +#include <QTextStream> + +#include "IException.h" +#include "IString.h" +#include "Camera.h" +#include "CameraDistortionMap.h" +#include "CameraFocalPlaneMap.h" +#include "Distance.h" +#include "FunctionTools.h" +#include "iTime.h" +#include "Latitude.h" +#include "Longitude.h" +#include "SampleScanCameraDetectorMap.h" +#include "Statistics.h" +#include "SurfacePoint.h" + + +using namespace std; +using namespace Isis; + + + + +namespace Isis { + + /** + * Constructor + * + * @param cam pointer to camera model + */ + SampleScanCameraGroundMap::SampleScanCameraGroundMap(Camera *cam) : CameraGroundMap(cam) {} + + + /** + * Destructor + * + */ + SampleScanCameraGroundMap::~SampleScanCameraGroundMap() {} + + /** + * Compute undistorted focal plane coordinate from ground position + * + * @param lat planetocentric latitude in degrees + * @param lon planetocentric longitude in degrees + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const Latitude &lat, + const Longitude &lon) { + Distance radius(p_camera->LocalRadius(lat, lon)); + + if (radius.isValid()) { + return SetGround(SurfacePoint(lat, lon, radius)); + } + else { + return false; + } + } + + + /** + * Compute undistorted focal plane coordinate from ground position + * + * @param lat planetocentric latitude in degrees + * @param lon planetocentric longitude in degrees + * @param radius local radius in meters + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const SurfacePoint &surfacePoint, + const int &approxSample) { + FindFocalPlaneStatus status = FindFocalPlane(approxSample, surfacePoint); + if (status == Success) + return true; + + return false; + } + + + /** + * Compute undistorted focal plane coordinate from ground position + * + * @param surfacePoint 3D point on the surface of the planet + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const SurfacePoint &surfacePoint) { + FindFocalPlaneStatus status = FindFocalPlane(-1, surfacePoint); + + if (status == Success) + return true; + + return false; + } + + + /** + * Returns the spacecraft distance + * + * @param sample The sample of the image + * @param &surfacePoint The surface point we want to find the distance from + * + * @return double The spacecraft distance + */ + double SampleScanCameraGroundMap::FindSpacecraftDistance(int sample, + const SurfacePoint &surfacePoint) { + + CameraDetectorMap *detectorMap = p_camera->DetectorMap(); + detectorMap->SetParent(sample, p_camera->ParentLines() / 2); + if (!p_camera->Sensor::SetGround(surfacePoint, false)) { + return DBL_MAX; + } + + return p_camera->SlantDistance(); + } + + + /** + * Finds where the surface point hits the image. If successful it sets the forcal plane + * corrdinates + * + * TODO Ken document this + * + * @param &approxLine + * @param &surfacePoint + */ + SampleScanCameraGroundMap::FindFocalPlaneStatus + SampleScanCameraGroundMap::FindFocalPlane(const int &approxLine, + const SurfacePoint &surfacePoint) { + double approxTime=0; + double approxOffset=0; + double lookC[3] = {0.0, 0.0, 0.0}; + double ux = 0.0; + double uy = 0.0; + const double cacheStart = p_camera->Spice::cacheStartTime().Et(); + const double cacheEnd = p_camera->Spice::cacheEndTime().Et(); + + double sampleRate + = ((SampleScanCameraDetectorMap *)p_camera->DetectorMap())->SampleRate(); + + if (sampleRate == 0.0) + return Failure; + + SampleOffsetFunctor offsetFunc(p_camera,surfacePoint); + + // parent center sample, line used as first approximation + p_camera->DetectorMap()->SetParent(p_camera->ParentSamples()/2, p_camera->ParentLines()/2); + approxTime = p_camera->time().Et(); + + approxOffset = offsetFunc(approxTime); + + if (fabs(approxOffset) < 1e-2) { //no need to iteratively improve this root, it's good enough + p_camera->Sensor::setTime(approxTime); + + // ensure point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) { + return Failure; + } + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } + + double fl, fh, xl, xh; + + //starting times for the secant method, kept within the domain of the cache + xh = approxTime; + if (xh + sampleRate < cacheEnd) { + xl = xh + sampleRate; + } + else { + xl = xh - sampleRate; + } + + //starting offsets + fh = approxOffset; //the first is already calculated + fl = offsetFunc(xl); + + // Iterate to refine the given approximate time that the instrument imaged the ground point + for (int j=0; j < 10; j++) { + if (fl-fh == 0.0) { + return Failure; + } + double etGuess = xl + (xh - xl) * fl / (fl - fh); + + if (etGuess < cacheStart) etGuess = cacheStart; + if (etGuess > cacheEnd) etGuess = cacheEnd; + + double f = offsetFunc(etGuess); + + // eliminate the node farthest away from the current best guess + if (fabs( xl- etGuess) > fabs( xh - etGuess)) { + xl = etGuess; + fl = f; + } + else { + xh = etGuess; + fh = f; + } + + // if converged on point set focal plane values and return + if (fabs(f) < 1e-2) { + p_camera->Sensor::setTime(etGuess); + + // ensure point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) { + return Failure; + } + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + if (!p_camera->FocalPlaneMap()->SetFocalPlane(ux, uy)) { + IString msg = "FocalPlaneMap::SetFocalPlane failed for surface point in " + "SampleScanCameraGroundMap.cpp SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } + } + return Failure; + } + + + /** + * Compute ground position from focal plane coordinate + * + * This method will compute the ground position given an + * undistorted focal plane coordinate. Note that the latitude/longitude + * value can be obtained from the camera pointer passed into the constructor. + * + * @param ux undistorted focal plane x in millimeters + * @param uy undistorted focal plane y in millimeters + * @param uz undistorted focal plane z in millimeters + * + * @return @b bool If conversion was successful + * + * TODO: what is implication of this???????? + */ + bool SampleScanCameraGroundMap::SetFocalPlane(const double ux, const double uy, const double uz) { + return CameraGroundMap::SetFocalPlane(ux, uy, uz); + } + + + /** + * Sample + * + * @param camera The camera + * @param surPoint A pointer to the surface point + */ + SampleScanCameraGroundMap::SampleOffsetFunctor::SampleOffsetFunctor(Isis::Camera *camera, + const Isis::SurfacePoint &surPt) { + m_camera = camera; + m_surfacePoint = surPt; + } + + + /** Compute the number of samples between the current sample (i.e., the sample imaged at the et + * as set in the camera model) and the sample number where the argument et would hit the focal + * plane. + * + * @param et The et at the new postion + * + * @return Sample off (see description) + */ + double SampleScanCameraGroundMap::SampleOffsetFunctor::operator()(double et) { + double lookC[3] = {0.0, 0.0, 0.0}; + double ux = 0.0; + double uy = 0.0; + double dx = 0.0; + double dy = 0.0; + + // Verify the time is with the cache bounds + double startTime = m_camera->cacheStartTime().Et(); + double endTime = m_camera->cacheEndTime().Et(); + if (et < startTime || et > endTime) { + IString msg = "Ephemeris time passed to SampleOffsetFunctor is not within the image " + "cache bounds"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + m_camera->Sensor::setTime(et); + + // Set ground + if (!m_camera->Sensor::SetGround(m_surfacePoint, false)) { + IString msg = "Sensor::SetGround failed for surface point in SampleScanCameraGroundMap.cpp" + " SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + // Calculate the undistorted focal plane coordinates + + m_camera->Sensor::LookDirection(lookC); + ux = m_camera->FocalLength() * lookC[0] / lookC[2]; + uy = m_camera->FocalLength() * lookC[1] / lookC[2]; + + // Try to use SetUndistortedFocalPlane, if that does not work use the distorted x,y + // under the assumption (bad|good) that extrapolating the distortion + // is causing the distorted x to be way off the sensor, and thus not very good anyway. + if (m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { + // Get the natural (distorted focal plane coordinates) + dx = m_camera->DistortionMap()->FocalPlaneX(); + dy = m_camera->DistortionMap()->FocalPlaneY(); + } + else { + dx = ux; + dy = uy; + } + + if (!m_camera->FocalPlaneMap()->SetFocalPlane(dx, dy)) { + IString msg = "FocalPlaneMap::SetFocalPlane failed for surface point in " + "SampleScanCameraGroundMap.cpp SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + // return sample offset in pixels + return m_camera->FocalPlaneMap()->CenteredDetectorSample(); + } + + + /** + * TODO Ken document this + */ + SampleScanCameraGroundMap::SensorSurfacePointDistanceFunctor::SensorSurfacePointDistanceFunctor + (Isis::Camera *camera, const Isis::SurfacePoint &surPt) { + m_camera = camera; + m_surfacePoint = surPt; + } + + /** + * TODO Ken document this + */ + double SampleScanCameraGroundMap::SensorSurfacePointDistanceFunctor::operator()(double et) { + double s[3], p[3]; + + //verify the time is with the cache bounds + double startTime = m_camera->cacheStartTime().Et(); + double endTime = m_camera->cacheEndTime().Et(); + + if (et < startTime || et > endTime) { + IString msg = "Ephemeris time passed to SensorSurfacePointDistanceFunctor is not within the " + "image cache bounds"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + m_camera->Sensor::setTime(et); + if(!m_camera->Sensor::SetGround(m_surfacePoint, false)) { + IString msg = "Sensor::SetGround failed for surface point in SampleScanCameraGroundMap.cpp" + "SensorSurfacePointDistanceFunctor"; + } + m_camera->instrumentPosition(s); + m_camera->Coordinate(p); + return sqrt((s[0] - p[0]) * (s[0] - p[0]) + + (s[1] - p[1]) * (s[1] - p[1]) + + (s[2] - p[2]) * (s[2] - p[2]) ); //distance + } +} + + diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.h b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.h new file mode 100644 index 0000000000000000000000000000000000000000..24f026508b16a986d1e704164e259ebc3c5aa7d2 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.h @@ -0,0 +1,116 @@ +/** + * @file + * $Revision: 1.6 $ + * $Date: 2010/06/17 18:59:12 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#ifndef SampleScanCameraGroundMap_h +#define SampleScanCameraGroundMap_h + +#include "CameraGroundMap.h" + +namespace Isis { + /** Convert between undistorted focal plane and ground coordinates + * + * This class is used to convert between undistorted focal plane + * coordinates (x/y) in millimeters and ground coordinates lat/lon + * for sample scan cameras. + * + * @ingroup Camera + * + * @see Camera + * + * @author 2012-09-12 Ken Edmundson + * + * @internal + * + * @history 2012-09-12 Ken Edmundson - Original version + * @history 2018-07-14 Makayla Shepherd - Updated documentation + * + */ + class SampleScanCameraGroundMap : public CameraGroundMap { + public: + + //! Constructor + SampleScanCameraGroundMap(Camera *cam); + + //! Destructor + virtual ~SampleScanCameraGroundMap(); + + virtual bool SetGround(const Latitude &lat, const Longitude &lon); + virtual bool SetGround(const SurfacePoint &surfacePoint); + virtual bool SetGround(const SurfacePoint &surfacePoint, const int &approxSample); + + virtual bool SetFocalPlane(const double ux, const double uy, const double uz); + + + protected: + enum FindFocalPlaneStatus { + Success, + BoundingProblem, + Failure + }; + + FindFocalPlaneStatus FindFocalPlane(const int &approxSample, + const SurfacePoint &surfacePoint); + double FindSpacecraftDistance(int sample, const SurfacePoint &surfacePoint); + + private: + /** + * @author 2012-05-09 Orrin Thomas + * + * @internal + */ + class SampleOffsetFunctor : public std::unary_function<double, double > { + public: + + SampleOffsetFunctor(Isis::Camera *camera, const Isis::SurfacePoint &surPt); + ~SampleOffsetFunctor(); + + double operator()(double et); + + private: + SurfacePoint m_surfacePoint; + Camera *m_camera; + }; + + + /** + * @author 2012-05-09 Orrin Thomas + * + * @internal + */ + class SensorSurfacePointDistanceFunctor : public std::unary_function<double, double > { + public: + + SensorSurfacePointDistanceFunctor(Isis::Camera *camera, const Isis::SurfacePoint &surPt); + ~SensorSurfacePointDistanceFunctor(); + + double operator()(double et); + + private: + SurfacePoint m_surfacePoint; + Camera* m_camera; + }; + }; + + +}; +#endif diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.truth b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.truth new file mode 100644 index 0000000000000000000000000000000000000000..9652a044c607e045ba0320730fed13a1c51df052 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/SampleScanCameraGroundMap.truth @@ -0,0 +1,3 @@ +This class is mostly tested by the applications and the individual Camera models. +attempting to back project a point behind the planet into the image (this should throw an error) +**ERROR** Requested position does not project in camera model; no surface intersection. diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.cpp b/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..5c1c1a8989b304428c2f7973322a7f93347bdc74 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.cpp @@ -0,0 +1,693 @@ +/** + * @file + * $Revision: 1.7 $ + * $Date: 2010/06/17 18:59:11 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "SampleScanCameraGroundMap.h" + +#include <iostream> +#include <iomanip> + +#include <QTime> +#include <QList> +#include <QFile> +#include <QTextStream> + +#include "IException.h" +#include "IString.h" +#include "Camera.h" +#include "CameraDistortionMap.h" +#include "CameraFocalPlaneMap.h" +#include "Distance.h" +#include "SampleScanCameraDetectorMap.h" +#include "iTime.h" +#include "Latitude.h" +#include "Longitude.h" +#include "Statistics.h" +#include "SurfacePoint.h" +#include "FunctionTools.h" + + +using namespace std; +using namespace Isis; + +//bool ptXLessThan(const QList<double> l1, const QList<double> l2); + +/** + * @author 2012-05-09 Orrin Thomas + * + * @internal + */ +class SampleOffsetFunctor : + public std::unary_function<double, double > { + public: + + SampleOffsetFunctor(Isis::Camera *camera, const Isis::SurfacePoint &surPt) { + m_camera = camera; + surfacePoint = surPt; + } + + + ~SampleOffsetFunctor() {} + + + /** Compute the number of samples between the current sample (i.e., the sample imaged at the et + * as set in the camera model) and the sample number where the argument et would hit the focal + * plane. + * + * @param et The et at the new postion + * + * @return Sample off (see description) + */ + double operator()(double et) { + double lookC[3] = {0.0, 0.0, 0.0}; + double ux = 0.0; + double uy = 0.0; + double dx = 0.0; + double dy = 0.0; + + // Verify the time is with the cache bounds + double startTime = m_camera->cacheStartTime().Et(); + double endTime = m_camera->cacheEndTime().Et(); + if (et < startTime || et > endTime) { + IString msg = "Ephemeris time passed to SampleOffsetFunctor is not within the image " + "cache bounds"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + m_camera->Sensor::setTime(et); + + // Set ground + if (!m_camera->Sensor::SetGround(surfacePoint, false)) { + IString msg = "Sensor::SetGround failed for surface point in SampleScanCameraGroundMap.cpp" + " SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + // Calculate the undistorted focal plane coordinates + + m_camera->Sensor::LookDirection(lookC); + ux = m_camera->FocalLength() * lookC[0] / lookC[2]; + uy = m_camera->FocalLength() * lookC[1] / lookC[2]; + + // Try to use SetUndistortedFocalPlane, if that does not work use the distorted x,y + // under the assumption (bad|good) that extrapolating the distortion + // is causing the distorted x to be way off the sensor, and thus not very good anyway. + if (m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { + // Get the natural (distorted focal plane coordinates) + dx = m_camera->DistortionMap()->FocalPlaneX(); + dy = m_camera->DistortionMap()->FocalPlaneY(); + } + else { + dx = ux; + dy = uy; + } + +// if (!m_camera->FocalPlaneMap()->SetFocalPlane(dx, dy)) { +// IString msg = "FocalPlaneMap::SetFocalPlane failed for surface point in " +// "SampleScanCameraGroundMap.cpp SampleOffsetFunctor"; +// throw IException(IException::Programmer, msg, _FILEINFO_); +// } + + // return sample offset in pixels + return (dx/0.005); + } + +/* + double operator()(double et) { + double lookC[3] = {0.0, 0.0, 0.0}; + double ux = 0.0; + double uy = 0.0; + double dx = 0.0; + double dy = 0.0; + + // Verify the time is with the cache bounds + double startTime = m_camera->cacheStartTime().Et(); + double endTime = m_camera->cacheEndTime().Et(); + if (et < startTime || et > endTime) { + IString msg = "Ephemeris time passed to SampleOffsetFunctor is not within the image " + "cache bounds"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + m_camera->Sensor::setTime(et); + + // Set ground + if (!m_camera->Sensor::SetGround(surfacePoint, false)) { + IString msg = "Sensor::SetGround failed for surface point in SampleScanCameraGroundMap.cpp" + " SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + // Calculate the undistorted focal plane coordinates + + m_camera->Sensor::LookDirection(lookC); + ux = m_camera->FocalLength() * lookC[0] / lookC[2]; + uy = m_camera->FocalLength() * lookC[1] / lookC[2]; + + // Try to use SetUndistortedFocalPlane, if that does not work use the distorted x,y + // under the assumption (bad|good) that extrapolating the distortion + // is causing the distorted x to be way off the sensor, and thus not very good anyway. + if (m_camera->DistortionMap()->SetUndistortedFocalPlane(ux, uy)) { + // Get the natural (distorted focal plane coordinates) + dx = m_camera->DistortionMap()->FocalPlaneX(); + dy = m_camera->DistortionMap()->FocalPlaneY(); + } + else { + dx = ux; + dy = uy; + } + + if (!m_camera->FocalPlaneMap()->SetFocalPlane(dx, dy)) { + IString msg = "FocalPlaneMap::SetFocalPlane failed for surface point in " + "SampleScanCameraGroundMap.cpp SampleOffsetFunctor"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + + // Return the offset +// return (m_camera->FocalPlaneMap()->DetectorSampleOffset() - +// m_camera->FocalPlaneMap()->DetectorSample()); + return (m_camera->FocalPlaneMap()->DetectorSampleOffset() - + m_camera->FocalPlaneMap()->DetectorSample()); + } +*/ + private: + SurfacePoint surfacePoint; + Camera* m_camera; +}; + + +/** + * @author 2012-05-09 Orrin Thomas + * + * @internal + */ +class SensorSurfacePointDistanceFunctor : + public std::unary_function<double, double > { + + public: + SensorSurfacePointDistanceFunctor(Isis::Camera *camera, const Isis::SurfacePoint &surPt) { + m_camera = camera; + surfacePoint = surPt; + } + + + ~SensorSurfacePointDistanceFunctor() {} + + + double operator()(double et) { + double s[3], p[3]; + + //verify the time is with the cache bounds + double startTime = m_camera->cacheStartTime().Et(); + double endTime = m_camera->cacheEndTime().Et(); + + if (et < startTime || et > endTime) { + IString msg = "Ephemeris time passed to SensorSurfacePointDistanceFunctor is not within the image " + "cache bounds"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + m_camera->Sensor::setTime(et); + if(!m_camera->Sensor::SetGround(surfacePoint, false)) { + IString msg = "Sensor::SetGround failed for surface point in SampleScanCameraGroundMap.cpp" + "SensorSurfacePointDistanceFunctor"; + } + m_camera->instrumentPosition(s); + m_camera->Coordinate(p); + return sqrt((s[0] - p[0]) * (s[0] - p[0]) + + (s[1] - p[1]) * (s[1] - p[1]) + + (s[2] - p[2]) * (s[2] - p[2]) ); //distance + } + + private: + SurfacePoint surfacePoint; + Camera* m_camera; +}; + + +namespace Isis { + + /** Constructor + * + * @param cam pointer to camera model + */ + SampleScanCameraGroundMap::SampleScanCameraGroundMap(Camera *cam) : CameraGroundMap(cam) {} + + + /** Destructor + * + */ + SampleScanCameraGroundMap::~SampleScanCameraGroundMap() {} + + /** Compute undistorted focal plane coordinate from ground position + * + * @param lat planetocentric latitude in degrees + * @param lon planetocentric longitude in degrees + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const Latitude &lat, + const Longitude &lon) { + Distance radius(p_camera->LocalRadius(lat, lon)); + + if (radius.isValid()) { + return SetGround(SurfacePoint(lat, lon, radius)); + } + else { + return false; + } + } + + + /** Compute undistorted focal plane coordinate from ground position + * + * @param lat planetocentric latitude in degrees + * @param lon planetocentric longitude in degrees + * @param radius local radius in meters + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const SurfacePoint &surfacePoint, + const int &approxSample) { + FindFocalPlaneStatus status = FindFocalPlane(approxSample, surfacePoint); + if (status == Success) + return true; + + return false; + } + + + /** Compute undistorted focal plane coordinate from ground position + * + * @param surfacePoint 3D point on the surface of the planet + * + * @return conversion was successful + */ + bool SampleScanCameraGroundMap::SetGround(const SurfacePoint &surfacePoint) { + FindFocalPlaneStatus status = FindFocalPlane(-1, surfacePoint); + + if (status == Success) + return true; + + return false; + } + + + double SampleScanCameraGroundMap::FindSpacecraftDistance(int sample, + const SurfacePoint &surfacePoint) { + + CameraDetectorMap *detectorMap = p_camera->DetectorMap(); + detectorMap->SetParent(sample, p_camera->ParentLines() / 2); + if (!p_camera->Sensor::SetGround(surfacePoint, false)) { + return DBL_MAX; + } + + return p_camera->SlantDistance(); + } + + + SampleScanCameraGroundMap::FindFocalPlaneStatus + SampleScanCameraGroundMap::FindFocalPlane(const int &approxSample, + const SurfacePoint &surfacePoint) { + + double approxTime=0; + double approxOffset=0; + double lookC[3] = {0.0, 0.0, 0.0}; + double ux = 0.0; + double uy = 0.0; + const double cacheStart = p_camera->Spice::cacheStartTime().Et(); + const double cacheEnd = p_camera->Spice::cacheEndTime().Et(); + + double sampleRate = ((SampleScanCameraDetectorMap *)p_camera->DetectorMap())->SampleRate(); + + if (sampleRate == 0.0) + return Failure; + + SampleOffsetFunctor offsetFunc(p_camera,surfacePoint); + SensorSurfacePointDistanceFunctor distanceFunc(p_camera,surfacePoint); + + // #1 try use secant method using midsample as start point + + // if an approximate point is given use that as a start point for the secant method root search + //if (approxSample > 0) { + //convert the approxSample to an approximate time and offset + double midSample = p_camera->ParentSamples()/2.0; + double midLine = p_camera->ParentLines()/2.0; + p_camera->DetectorMap()->SetParent(midSample, midLine); + approxTime = p_camera->time().Et(); + + approxOffset = offsetFunc(approxTime); + + if (fabs(approxOffset) < 1e-2) { //no need to iteratively improve this root, it's good enough + p_camera->Sensor::setTime(approxTime); + //check to make sure the point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) { + return Failure; + } + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } + + double fl, fh, xl, xh; + + //starting times for the secant method, kept within the domain of the cache + xh = approxTime; + if (xh + sampleRate < cacheEnd) { + xl = xh + sampleRate; + } + else { + xl = xh - sampleRate; + } +double etGuess; + //starting offsets + fh = approxOffset; //the first is already calculated + fl = offsetFunc(xl); + double fprevious = approxOffset; + + // Iterate to refine the given approximate time that the instrument imaged the ground point + for (int j=0; j < 10; j++) { + if (fl-fh == 0.0) + break; + + etGuess = xl + (xh - xl) * fl / (fl - fh); + + if (etGuess < cacheStart) + etGuess = cacheStart; + + if (etGuess > cacheEnd) + etGuess = cacheEnd; + + double f = offsetFunc(etGuess); + + // if f is not changing anymore, we stop iterating + double convergedcheck; + if (f != 0.0) + convergedcheck = fabs(f-fprevious)/fabs(f); + else + convergedcheck = fabs(f-fprevious); +// if (fabs(convergedcheck) < 1e-5) { + if (fabs(convergedcheck) < 1e-3) { + // now, if f is less than our tolerance, we're done + // if f is not less than our tolerance, we jump down to the next step, determining the + // coefficients of a quadratic with a "reasonable" interval, which we have hopefully + // narrowed down in the secant method +// if (fabs(f) < 1e-2) { + if (fabs(f) < 1.0) { + p_camera->Sensor::setTime(etGuess); + + // check to make sure the point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) + break; + + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } + else + break; + } + + // eliminate node farthest away from current best guess and continue + if (fabs( xl- etGuess) > fabs( xh - etGuess)) { + xl = etGuess; + fl = f; + } + else { + xh = etGuess; + fh = f; + } + fprevious = f; + } + + return Failure; + } + + + /* KLE 2016-09-12 below is the rest of the code from LineScanCameraGroundMap, hoping secant method + * is initially good enough for pan + // + // no estimate given for the approximate line--quadratic approximation root finding + // + // The offsets are typically quadratic, so three points will be used to approximate a quadratic + // as a first order attempt to find the root location(s) + + // The three nodes to be used to approximate the quadratic + double offsetNodes[3]; + double timeNodes[3]; + double timeAverage; + double scale; + QList<double> root; + QList<double> offset; + QList<double> dist; + + timeNodes[0] = cacheStart; + timeNodes[2] = cacheEnd; + timeNodes[1] = (cacheStart+cacheEnd) / 2.0; //middle time + + double quadPoly[3]; + double temp; + + for (int i=0; i<3; i++) { + offsetNodes[i] = offsetFunc(timeNodes[i]); + } + + //centralize and normalize the data for stability in root finding + timeAverage = (timeNodes[0] + timeNodes[1] + timeNodes[2]) / 3.0; + timeNodes[0] -= timeAverage; + timeNodes[1] -= timeAverage; + timeNodes[2] -= timeAverage; + + scale = 1.0 / sqrt((timeNodes[0] - timeNodes[2]) * + (timeNodes[0] - timeNodes[2]) + + (offsetNodes[0] - offsetNodes[2]) * + (offsetNodes[0] - offsetNodes[2])); + + timeNodes[0] *= scale; + timeNodes[1] *= scale; + timeNodes[2] *= scale; + + offsetNodes[0] *= scale; + offsetNodes[1] *= scale; + offsetNodes[2] *= scale; + + // Use lagrange interpolating polynomials to find the coefficients of the quadratic, + // there are many ways to do this; I chose to do it this way because it is pretty straight + // forward and cheap + quadPoly[0] = quadPoly[1] = quadPoly[2] = 0.0; + + temp = offsetNodes[0] / ((timeNodes[0] - timeNodes[1]) * (timeNodes[0] - timeNodes[2])); + quadPoly[0] += temp; + quadPoly[1] += temp * (-timeNodes[1] - timeNodes[2]); + quadPoly[2] += temp * timeNodes[1] * timeNodes[2]; + + temp = offsetNodes[1] / ((timeNodes[1] - timeNodes[0]) * (timeNodes[1] - timeNodes[2])); + quadPoly[0] += temp; + quadPoly[1] += temp * (-timeNodes[0] - timeNodes[2]); + quadPoly[2] += temp * timeNodes[0] * timeNodes[2]; + + temp = offsetNodes[2] / ((timeNodes[2] - timeNodes[0]) * (timeNodes[2] - timeNodes[1])); + quadPoly[0] += temp; + quadPoly[1] += temp * (-timeNodes[0] - timeNodes[1]); + quadPoly[2] += temp * timeNodes[0] * timeNodes[1]; + + // Now that we have the coefficients of the quadratic look for roots + // (see Numerical Recipes Third Edition page 227) + temp = quadPoly[1] * quadPoly[1] - 4.0 * quadPoly[0] * quadPoly[2]; //discriminant + if (temp < 0.0) { + return Failure; //there are apparently not any real roots on this image + } + + if (quadPoly[1] >= 0.0) { + temp = -0.5 * (quadPoly[1] + sqrt(temp)); + } + else { + temp = -0.5 * (quadPoly[1] - sqrt(temp)); + } + + if (quadPoly[0] != 0.0) { + root.push_back(temp/quadPoly[0]); + } + + if (quadPoly[2] != 0.0) { + root.push_back(quadPoly[2]/temp); + } + + //check to see if the roots are in the time interval of the cache + for (int i=root.size()-1; i>=0; i--) { + if ( root[i] < timeNodes[0] || root[i] > timeNodes[2] ) { + root.removeAt(i); + } + } + + //return the calculated roots to the original system + for (int i=0; i<root.size(); i++) { + root[i] = root[i]/scale + timeAverage; + } + + if (root.size() == 0) { + return Failure; //there are apparently not any roots on this image + } + + // At the time of this writing ISIS made no attempt to support any sensors that were not "1 to 1". + // Meaning that imaged the same point on the ground in multiple lines of the image + // therefore we must somehow reduce multiple possible roots to a single one, the legacy + // code (replaced with this code) did this based on distance from the sensor to the target + // the shortest distance being the winner. For legacy consistency I have used the same logic below. + + for (int i=0; i<root.size(); i++) { //Offset/dist calculation loop + dist << distanceFunc(root[i]); + offset << offsetFunc(root[i]); + } + + // Save the root with the smallest dist + int j=0; + for (int i=1, j=0; i<root.size(); i++) { + if (dist[i] < dist[j]) j=i; + } + + approxTime = root[j]; // Now we have our time + approxOffset = offset[j]; // The offsets are saved to avoid recalculating it later + + if (fabs(approxOffset) < 1.0e-2) { // No need to iteratively improve this root, it's good enough + p_camera->Sensor::setTime(approxTime); + + // Check to make sure the point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) { + return Failure; + } + + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } + + // + // no estimate given for the approximate line, quadratic approximation insufficient, use Brent's + // method + // + // The offsets are typically quadratic, so three points will be used to approximate a quadratic + // as a first order attempt to find the root location(s) + + // The above sections are sufficient for finding the correct times for the vast majority of + // back projection solutions. The following section exists for those few particularly + // stuborn problems. They are typically characterised by being significantly non-quadratic. + // Examples mostly include images with very long exposure times. + // + // Further, while the preceeding sections is intended to be fast, this section is intended to be + // thurough. Brents method (Numerical Recipies 454 - 456) will be used to find all the roots, + // that are bracketed by the five points defined in the quadratic solution method above. + // The root with the shortest distance to the camera will be returned + + // Get everything ordered for iteration combine and sort the five already defined points + QList <QList <double> > pts; + + for (int i=0; i<3; i++) { + QList <double> pt; + pt << timeNodes[i] / scale + timeAverage; + pt << offsetNodes[i] / scale; + pts << pt; + } + + for (int i=0; i<root.size(); i++) { + QList <double> pt; + pt << root[i]; + pt << offset[i]; + pts << pt; + } + + qSort(pts.begin(), pts.end(), ptXLessThan); + + root.clear(); + for (int i=1; i<pts.size(); i++) { + // If the signs of the two offsets are not the same they bracket at least one root + if ( (pts[i-1][1] > 0) - (pts[i-1][1] < 0) != (pts[i][1] > 0) - (pts[i][1] < 0) ) { + double temp; + if (FunctionTools::brentsRootFinder <LineOffsetFunctor> (offsetFunc, pts[i-1], pts[i], + 1.0e-3, 200, temp)) { + root << temp; + + } + } + } + + // Discard any roots that are looking through the planet + for (int i = root.size()-1; i>=0; i--) { + p_camera->Sensor::setTime(root[i]); + //check to make sure the point isn't behind the planet + if (!p_camera->Sensor::SetGround(surfacePoint, true)) { + root.removeAt(i); + } + } + + // If none of the roots remain... + if (root.size() == 0) { + return Failure; + } + + // Choose from the remaining roots, the solution with the smallest distance to target + dist.clear(); + offset.clear(); + for (int i=0; i<root.size(); i++) { // Offset/dist calculation loop + dist << distanceFunc(root[i]); + offset << offsetFunc(root[i]); + } + + // Save the root with the smallest dist + for (int i=1, j=0; i<root.size(); i++) { + if (dist[i] < dist[j]) j=i; + } + + p_camera->Sensor::setTime(root[j]); + + // No need to make sure the point isn't behind the planet, it was done above + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + p_focalPlaneX = ux; + p_focalPlaneY = uy; + + return Success; + } +*/ +} + + +//bool ptXLessThan(const QList<double> l1, const QList<double> l2) { +// return l1[0] < l2[0]; +//} + diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.h b/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.h new file mode 100644 index 0000000000000000000000000000000000000000..5f134d22944e1141ba68e6ce5703a9d57bf67fe3 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/backup/SampleScanCameraGroundMap.h @@ -0,0 +1,73 @@ +/** + * @file + * $Revision: 1.6 $ + * $Date: 2010/06/17 18:59:12 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#ifndef SampleScanCameraGroundMap_h +#define SampleScanCameraGroundMap_h + +#include "CameraGroundMap.h" + +namespace Isis { + /** Convert between undistorted focal plane and ground coordinates + * + * This class is used to convert between undistorted focal plane + * coordinates (x/y) in millimeters and ground coordinates lat/lon + * for sample scan cameras. + * + * @ingroup Camera + * + * @see Camera + * + * @author 2012-09-12 Ken Edmundson + * + * @internal + * + * @history 2012-09-12 Ken Edmundson - Original version + * + */ + class SampleScanCameraGroundMap : public CameraGroundMap { + public: + + //! Constructor + SampleScanCameraGroundMap(Camera *cam); + + //! Destructor + virtual ~SampleScanCameraGroundMap(); + + virtual bool SetGround(const Latitude &lat, const Longitude &lon); + virtual bool SetGround(const SurfacePoint &surfacePoint); + virtual bool SetGround(const SurfacePoint &surfacePoint, const int &approxSample); + + protected: + enum FindFocalPlaneStatus { + Success, + BoundingProblem, + Failure + }; + + FindFocalPlaneStatus FindFocalPlane(const int &approxSample, + const SurfacePoint &surfacePoint); + double FindSpacecraftDistance(int sample, const SurfacePoint &surfacePoint); + + }; +}; +#endif diff --git a/isis/src/base/objs/SampleScanCameraGroundMap/unitTest.cpp b/isis/src/base/objs/SampleScanCameraGroundMap/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..e46e87e23a65958e4295a715cfb1b39a3fbade87 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraGroundMap/unitTest.cpp @@ -0,0 +1,26 @@ +#include "Preference.h" +#include <iostream> +#include "Preference.h" +#include "IException.h" +#include "CameraPointInfo.h" + + +using namespace std; +using namespace Isis; +int main() { + Isis::Preference::Preferences(true); + cerr << "This class is mostly tested by the applications and the individual Camera models." << endl; + + //create a camera for the test cube + QString inputFile = "$base/testData/LRONAC_M139722912RE_cropped.cub"; + CameraPointInfo campt; + campt.SetCube(inputFile); + + cerr << "attempting to back project a point behind the planet into the image (this should throw an error)\n"; + try { + campt.SetGround(90.0, 0.0, true); + + }catch (IException &e) { + e.print(); + } +} diff --git a/isis/src/base/objs/SampleScanCameraSkyMap/Makefile b/isis/src/base/objs/SampleScanCameraSkyMap/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraSkyMap/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.cpp b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..db25f5b672aa1417496c2b37285c0759069d0428 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.cpp @@ -0,0 +1,153 @@ +/** + * @file + * $Revision: 1.1.1.1 $ + * $Date: 2006/10/31 23:18:08 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "SampleScanCameraSkyMap.h" +#include "CameraFocalPlaneMap.h" +#include "CameraDistortionMap.h" +#include "iTime.h" +#include "SampleScanCameraDetectorMap.h" + +namespace Isis { + + /** + * Constructor + * + * @param parent The parent camera + */ + SampleScanCameraSkyMap(Camera *parent) : CameraSkyMap(parent) {}; + + /** + * Destructor + */ + ~SampleScanCameraSkyMap() {}; + + /** Compute undistorted focal plane coordinate from ra/dec + * + * @param ra right ascension in degrees + * @param dec declination in degrees + * + * @return conversion was successful + * @todo what happens if we are looking behind the focal plane????? + * @todo what happens if we are looking parallel to the focal plane?? + * @todo can lookC[2] == zero imply parallel + * @todo can this all be solved by restricting the physical size of + * the focal plane? + */ + bool SampleScanCameraSkyMap::SetSky(const double ra, const double dec) { + // Get beginning bounding time and offset for iterative loop + p_camera->Sensor::setTime(p_camera->Spice::cacheStartTime()); + p_camera->Sensor::SetRightAscensionDeclination(ra, dec); + + double lookC[3]; + p_camera->Sensor::LookDirection(lookC); + double ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + double uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + CameraDistortionMap *distortionMap = p_camera->DistortionMap(); + if(!distortionMap->SetUndistortedFocalPlane(ux, uy)) return false; + double dx = distortionMap->FocalPlaneX(); + double dy = distortionMap->FocalPlaneY(); + + CameraFocalPlaneMap *focalMap = p_camera->FocalPlaneMap(); + if(!focalMap->SetFocalPlane(dx, dy)) return false; + double startOffset = focalMap->DetectorSampleOffset() - + focalMap->DetectorSample(); + + // Get ending bounding time and offset for iterative loop + p_camera->Sensor::setTime(p_camera->Spice::cacheEndTime()); + p_camera->Sensor::SetRightAscensionDeclination(ra, dec); + + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + if(!distortionMap->SetUndistortedFocalPlane(ux, uy)) return false; + dx = distortionMap->FocalPlaneX(); + dy = distortionMap->FocalPlaneY(); + + if(!focalMap->SetFocalPlane(dx, dy)) return false; + double endOffset = focalMap->DetectorSampleOffset() - + focalMap->DetectorSample(); + + // Make sure we are in the image + if((startOffset < 0.0) && (endOffset < 0.0)) return false; + if((startOffset > 0.0) && (endOffset > 0.0)) return false; + + // Get everything ordered for iteration + double fl, fh, xl, xh; + if(startOffset < endOffset) { + fl = startOffset; + fh = endOffset; + xl = p_camera->Spice::cacheStartTime().Et(); + xh = p_camera->Spice::cacheEndTime().Et(); + } + else { + fl = endOffset; + fh = startOffset; + xl = p_camera->Spice::cacheEndTime().Et(); + xh = p_camera->Spice::cacheStartTime().Et(); + } + + // Iterate to find the time at which the instrument imaged the ground point + SampleScanCameraDetectorMap *detectorMap = + (SampleScanCameraDetectorMap *) p_camera->DetectorMap(); + double timeTol = detectorMap->SampleRate() / 10.0; + for(int j = 0; j < 30; j++) { + double etGuess = xl + (xh - xl) * fl / (fl - fh); + p_camera->Sensor::setTime(etGuess); + p_camera->Sensor::SetRightAscensionDeclination(ra, dec); + p_camera->Sensor::LookDirection(lookC); + ux = p_camera->FocalLength() * lookC[0] / lookC[2]; + uy = p_camera->FocalLength() * lookC[1] / lookC[2]; + + if(!distortionMap->SetUndistortedFocalPlane(ux, uy)) return false; + dx = distortionMap->FocalPlaneX(); + dy = distortionMap->FocalPlaneY(); + + if(!focalMap->SetFocalPlane(dx, dy)) return false; + double f = focalMap->DetectorSampleOffset() - + focalMap->DetectorSample(); + + double delTime; + if(f < 0.0) { + delTime = xl - etGuess; + xl = etGuess; + fl = f; + } + else { + delTime = xh - etGuess; + xh = etGuess; + fh = f; + } + + // See if we converged on the point so set up the undistorted + // focal plane values and return + if(fabs(delTime) < timeTol || f == 0.0) { + p_focalPlaneX = ux; + p_focalPlaneY = uy; + return true; + } + } + return false; + } +} diff --git a/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.h b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.h new file mode 100644 index 0000000000000000000000000000000000000000..64e1e158ce33c4e856e2d5e3e5e4fb73345d511e --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.h @@ -0,0 +1,56 @@ +/** + * @file + * $Revision: 1.1.1.1 $ + * $Date: 2006/10/31 23:18:08 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#ifndef SampleScanCameraSkyMap_h +#define SampleScanCameraSkyMap_h + +#include "CameraSkyMap.h" + +namespace Isis { + /** Convert between undistorted focal plane and ra/dec coordinates + * + * This class is used to convert between undistorted focal plane + * coordinates (x/y) in millimeters and sky (ra/dec). This + * class handles the case of sample scan cameras. + * + * @ingroup Camera + * + * @see Camera + * + * @author 2012-09-12 Ken Edmundson + * + * @internal + * @history 2012-09-12 Ken Edmundson - Original version. + * + */ + class SampleScanCameraSkyMap : public CameraSkyMap { + public: + + SampleScanCameraSkyMap(Camera *parent) : CameraSkyMap(parent); + + virtual ~SampleScanCameraSkyMap(); + + virtual bool SetSky(const double ra, const double dec); + }; +}; +#endif diff --git a/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.truth b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.truth new file mode 100644 index 0000000000000000000000000000000000000000..6347fe6d38f458077e14c2efcd5624b000c19da3 --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraSkyMap/SampleScanCameraSkyMap.truth @@ -0,0 +1 @@ +This class will be tested by the applications and the individual Camera models. diff --git a/isis/src/base/objs/SampleScanCameraSkyMap/unitTest.cpp b/isis/src/base/objs/SampleScanCameraSkyMap/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..eddcf72b5c1d9bf5af9385cff2ee61cac3e8428d --- /dev/null +++ b/isis/src/base/objs/SampleScanCameraSkyMap/unitTest.cpp @@ -0,0 +1,8 @@ +#include "Preference.h" +#include <iostream> + +using namespace std; +int main() { + Isis::Preference::Preferences(true); + cout << "This class will be tested by the applications and the individual Camera models." << endl; +} diff --git a/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.cpp b/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.cpp index 93a0bc2538343ff0e54aeeeeaf76b931b9b617c3..0961f633b2416578d941d8719284822c761ad5b2 100644 --- a/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.cpp +++ b/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.cpp @@ -75,7 +75,7 @@ namespace Isis { double currEt = p_camera->time().Et(); int rateIndex = p_lineRates.size() - 1; - while (rateIndex >= 0 && currEt < p_lineRates[rateIndex].GetStartEt() - 0.5) { + while (rateIndex > 0 && currEt < p_lineRates[rateIndex].GetStartEt()) { rateIndex --; } diff --git a/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.h b/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.h index fa70680cab253f7ccd84a0b85275549be534f863..f18edad377b99ce5fe0b0c06e75d5b67f36dcdc0 100644 --- a/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.h +++ b/isis/src/base/objs/VariableLineScanCameraDetectorMap/VariableLineScanCameraDetectorMap.h @@ -61,6 +61,11 @@ namespace Isis { * #4476. * @history 2016-10-27 Jeannie Backer - Moved constructor documentation and destructor to * cpp file. References #4476. + * @history 2017-01-09 Ken Edmundson - In SetDetector method, in loop over line rates, 0.5 lines was + * being subtracted from the line rate starting ephemeris time. This is wrong + * and was probably copy/pasted from the SetParent method below. Supposedly + * this had been addressed by #4435 which was closed, but the correction was + * not in the code. References #4435. * */ class VariableLineScanCameraDetectorMap : public LineScanCameraDetectorMap { diff --git a/isis/src/base/objs/VariableSampleScanCameraDetectorMap/Makefile b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f122bc88227c5c7ebd108dea5d339d1d2e074d82 --- /dev/null +++ b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.objs +endif \ No newline at end of file diff --git a/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.cpp b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.cpp new file mode 100644 index 0000000000000000000000000000000000000000..2d12a49cf44e59bdc358084eac48406b20e1d701 --- /dev/null +++ b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.cpp @@ -0,0 +1,169 @@ +/** + * @file + * $Revision: 1.2 $ + * $Date: 2008/08/08 22:02:36 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#include "VariableSampleScanCameraDetectorMap.h" +#include "Affine.h" +#include "CameraFocalPlaneMap.h" +#include "iTime.h" + +namespace Isis { + VariableSampleScanCameraDetectorMap::VariableSampleScanCameraDetectorMap(Camera *parent, + std::vector< SampleRateChange > &sampleRates, Affine *fiducialMap) : + SampleScanCameraDetectorMap(parent, sampleRates[0].GetStartEt(), + sampleRates[0].GetSampleScanRate()), + p_sampleRates(sampleRates) { + + // transx, transy are affine coefficients transforming from parent (Sp,Lp) to fiducial coordinate + // system (Sf, Lf) + // get coefficients of forward transform + m_transx = fiducialMap->Coefficients(1); + m_transy = fiducialMap->Coefficients(2); + + // Correct the Affine order - move the constant to the front + m_transx.insert(m_transx.begin(), m_transx[2]); + m_transx.pop_back(); + m_transy.insert(m_transy.begin(), m_transy[2]); + m_transy.pop_back(); + + // transs, transl are affine coefficients transforming from detector (FSC) (S,L) to parent (S,L) + // get coefficients of inverse transform + m_transs = fiducialMap->InverseCoefficients(1); + m_transl = fiducialMap->InverseCoefficients(2); + + // Correct the Affine order - move the constant to the front + m_transs.insert(m_transs.begin(), m_transs[2]); + m_transs.pop_back(); + m_transl.insert(m_transl.begin(), m_transl[2]); + m_transl.pop_back(); + }; + + + /** Compute parent image sample/line from a detector sample/line + * + * This method computes parent sample/line from detector sample/line. + * + * TODO: modify/remove this comment - This method will compute a parent sample given a + * detector coordinate. The parent sample will be computed using the + * the time in the parent camera + * + * @param sample detector sample + * @param line detector line + * + * @return conversion successful + * + * NOTE: Calling base classes results in unnecessary computations. Just set detector sample/line + * directly. + */ + bool VariableSampleScanCameraDetectorMap::SetDetector(const double sample, const double line) { + + p_detectorSample = sample; + p_detectorLine = line; + + // currentEt is our known ephemeris time + double currentEt = p_camera->time().Et(); + int rateIndex = p_sampleRates.size() - 1; + + while(rateIndex >= 0 && currentEt > p_sampleRates[rateIndex].GetStartEt()) { + rateIndex --; + } + + if(rateIndex < 0) { + return false; + } + + int rateStartSample = p_sampleRates[rateIndex].GetStartSample(); + double rateStartEt = p_sampleRates[rateIndex].GetStartEt(); + double rate = p_sampleRates[rateIndex].GetSampleScanRate(); + + double etDiff = -(currentEt - rateStartEt); + + double fiducialSample = etDiff / rate + rateStartSample; + + // affine transformation from detector S/L to parent S/L + // detector is fiducial coordinate system in pixels + p_parentSample = m_transs[0] + fiducialSample * m_transs[1] + line * m_transs[2]; + p_parentLine = m_transl[0] + fiducialSample * m_transl[1] + line * m_transl[2]; + + SetSampleRate(rate); + + return true; + } + + /** Compute detector sample/line from a parent image sample/line + * + * This method computes detector sample/line from parent sample/line. The detector sample is used + * to retrieve time from the samplescantimes table stored in cube. + * + * TODO: samplescantimes table in cube needs to change to contain detector + * samples in fiducial coordinate system (FCS) instead of parent image samples + * + * @param sample parent image sample + * @param line parent image line + * + * @return conversion successful + * + * NOTE: Calling base classes results in unnecessary computations. Just set parent sample/line + * directly, then determine time. + */ + bool VariableSampleScanCameraDetectorMap::SetParent(const double sample, const double line) { + + p_parentSample = sample; + p_parentLine = line; + + // affine transformation from parent S/L to detector S/L + // detector is fiducial coordinate system in pixels + p_detectorSample = m_transx[0] + sample * m_transx[1] + line * m_transx[2]; + p_detectorLine = m_transy[0] + sample * m_transy[1] + line * m_transy[2]; + + int rateIndex = p_sampleRates.size() - 1; + +// while (rateIndex >= 0 && sample < p_sampleRates[rateIndex].GetStartSample() - 0.5) { +// rateIndex --; +// } + while (rateIndex >= 0 && p_detectorSample < p_sampleRates[rateIndex].GetStartSample() - 0.5) { + rateIndex --; + } + + if (rateIndex < 0) { + return false; + } + + int rateStartSample = p_sampleRates[rateIndex].GetStartSample(); + double rateStartEt = p_sampleRates[rateIndex].GetStartEt(); + double rate = p_sampleRates[rateIndex].GetSampleScanRate(); + + // TODO: confirm calculation of et, questions about application of 1/2 pixel here. + // double et = rateStartEt - (sample - rateStartSample + 0.5) * rate; +// double et = rateStartEt - (sample - rateStartSample) * rate; + double et = rateStartEt - (p_detectorSample - rateStartSample) * rate; + + // TODO: see Orrin's comment in ApolloPanoramicDetectorMap::SetParent() + p_detectorSample = 0.0; + + SetSampleRate(rate); + + p_camera->setTime(et); + + return true; + } +} diff --git a/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.h b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.h new file mode 100644 index 0000000000000000000000000000000000000000..c3c50db9863114e7c086c49249f9947e56d05f19 --- /dev/null +++ b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.h @@ -0,0 +1,114 @@ +/** + * @file + * $Revision: 1.3 $ + * $Date: 2009/03/07 18:02:33 $ + * + * Unless noted otherwise, the portions of Isis written by the USGS are + * public domain. See individual third-party library and package descriptions + * for intellectual property information, user agreements, and related + * information. + * + * Although Isis has been used by the USGS, no warranty, expressed or + * implied, is made by the USGS as to the accuracy and functioning of such + * software and related material nor shall the fact of distribution + * constitute any such warranty, and no responsibility is assumed by the + * USGS in connection therewith. + * + * For additional information, launch + * $ISISROOT/doc//documents/Disclaimers/Disclaimers.html + * in a browser or see the Privacy & Disclaimers page on the Isis website, + * http://isis.astrogeology.usgs.gov, and the USGS privacy and disclaimers on + * http://www.usgs.gov/privacy.html. + */ + +#ifndef VariableSampleScanCameraDetectorMap_h +#define VariableSampleScanCameraDetectorMap_h + +#include "SampleScanCameraDetectorMap.h" + +using namespace std; + +namespace Isis { + class Affine; + class SampleRateChange; + + /** Convert between parent image coordinates and detector coordinates + * + * This class is used to convert between parent detector coordinates + * (sample/line) and detector coordinates for a sample scan camera. + * + * @author 2016-09-07 Ken Edmundson + * + * @ingroup Camera + * @see Camera + * + * @internal + * @history 2008-08-08 Ken Edmundson Original version + * + */ + class VariableSampleScanCameraDetectorMap : public SampleScanCameraDetectorMap { + public: + /** + * Constructs a VariableSampleScanCameraDetectorMap. + * + * @param parent The camera + * @param p_sampleRates This should be a vector with an entry for every + * scan rate change in it. The pair consists of the sample number and + * ET of the changed time; the first entry should be sample 1 and the last + * entry should be one line past the end of the image. See + * HrscCamera for an example of a VariableLineScanCamera and Apollo Panoramic + * for an example of a VariableSampleScanCamera. + */ + VariableSampleScanCameraDetectorMap(Camera *parent, + std::vector< SampleRateChange > &sampleRates, + Affine *fiducialMap); + + //! Destructor + virtual ~VariableSampleScanCameraDetectorMap() {}; + + virtual bool SetParent(const double sample, const double line); + + virtual bool SetDetector(const double sample, const double line); + + private: + std::vector< SampleRateChange > &p_sampleRates; + + vector<double> m_transx; /**< affine transformation from parent S/L to detector S/L */ + vector<double> m_transy; /**< detector is fiducial coordinate system in pixels */ + + vector<double> m_transs; /**< affine transformation from detector S/L to parent S/L */ + vector<double> m_transl; + }; + + + /** + * + * @author ????-??-?? Unknown + * + * @internal + */ + class SampleRateChange { + public: + SampleRateChange(int sample, double stime, double rate) { + p_sample = sample; + p_stime = stime; + p_rate = rate; + }; + + int GetStartSample() { + return p_sample; + } + double GetStartEt() { + return p_stime; + } + double GetSampleScanRate() { + return p_rate; + } + + private: + int p_sample; + double p_stime; + double p_rate; + }; +}; +#endif diff --git a/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.truth b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.truth new file mode 100644 index 0000000000000000000000000000000000000000..6347fe6d38f458077e14c2efcd5624b000c19da3 --- /dev/null +++ b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/VariableSampleScanCameraDetectorMap.truth @@ -0,0 +1 @@ +This class will be tested by the applications and the individual Camera models. diff --git a/isis/src/base/objs/VariableSampleScanCameraDetectorMap/unitTest.cpp b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/unitTest.cpp new file mode 100644 index 0000000000000000000000000000000000000000..d29f6a0a3117f27e7834dbb1f64a8b2014ea3d9d --- /dev/null +++ b/isis/src/base/objs/VariableSampleScanCameraDetectorMap/unitTest.cpp @@ -0,0 +1,8 @@ +#include <iostream> +#include "Preference.h" + +using namespace std; +int main() { + Isis::Preference::Preferences(true); + cout << "This class will be tested by the applications and the individual Camera models." << endl; +} diff --git a/isis/src/qisis/objs/TrackTool/TrackTool.cpp b/isis/src/qisis/objs/TrackTool/TrackTool.cpp index 1a7a0cb148065f8588b483e5b3c695e16be55317..11d08c9c28c78dfb4e19f0d67ed5cababefcd074 100644 --- a/isis/src/qisis/objs/TrackTool/TrackTool.cpp +++ b/isis/src/qisis/objs/TrackTool/TrackTool.cpp @@ -6,6 +6,7 @@ #include "Camera.h" #include "Distance.h" +#include "CameraFocalPlaneMap.h" #include "MdiCubeViewport.h" #include "Projection.h" #include "RingPlaneProjection.h" @@ -26,6 +27,18 @@ namespace Isis { TrackTool::TrackTool(QStatusBar *parent) : Tool(parent) { p_sbar = parent; + p_xLabel = new QLabel(p_sbar); + p_xLabel->setText("W 999999"); + p_xLabel->setMinimumSize(p_xLabel->sizeHint()); + p_xLabel->setToolTip("x Image Coordinate"); + p_sbar->addPermanentWidget(p_xLabel); + + p_yLabel = new QLabel(p_sbar); + p_yLabel->setText("W 999999"); + p_yLabel->setMinimumSize(p_yLabel->sizeHint()); + p_yLabel->setToolTip("y Image Coordinate"); + p_sbar->addPermanentWidget(p_yLabel); + p_sampLabel = new QLabel(p_sbar); p_sampLabel->setText("W 999999"); p_sampLabel->setMinimumSize(p_sampLabel->sizeHint()); @@ -208,6 +221,10 @@ namespace Isis { double lon = cvp->camera()->UniversalLongitude(); p_latLabel->setText(QString("Lat %1").arg(lat)); p_lonLabel->setText(QString("Lon %1").arg(lon)); + double x = cvp->camera()->FocalPlaneMap()->FocalPlaneX(); + double y = cvp->camera()->FocalPlaneMap()->FocalPlaneY();; + p_xLabel->setText(QString("x %1").arg(x)); + p_yLabel->setText(QString("y %1").arg(y)); } else { double rad = cvp->camera()->LocalRadius().meters(); @@ -215,6 +232,8 @@ namespace Isis { //??? p_latLabel->setToolTip("Radius Position"); p_latLabel->setText(QString("Rad %1").arg(rad)); p_lonLabel->setText(QString("Lon %1").arg(lon)); + p_xLabel->setText("x n/a"); + p_yLabel->setText("y n/a"); } } else { @@ -331,6 +350,8 @@ namespace Isis { p_redLabel->setText("R N/A"); p_grnLabel->setText("G N/A"); p_bluLabel->setText("B N/A"); + p_xLabel->setText("x n/a"); + p_yLabel->setText("y n/a"); } diff --git a/isis/src/qisis/objs/TrackTool/TrackTool.h b/isis/src/qisis/objs/TrackTool/TrackTool.h index 3df567b71f42255be63df1b4fdaad159eab3fabc..911e08bf7ebd0dd819a979db35e61de092616d9a 100644 --- a/isis/src/qisis/objs/TrackTool/TrackTool.h +++ b/isis/src/qisis/objs/TrackTool/TrackTool.h @@ -72,6 +72,8 @@ namespace Isis { QLabel *p_redLabel; //!< Red label QLabel *p_grnLabel; //!< Green label QLabel *p_bluLabel; //!< Blue label + QLabel *p_xLabel; //!< x image coordinate label + QLabel *p_yLabel; //!< y image coordinate label WarningWidget *mWarningWidget; //!< Warning Widget }; }; diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..7578f0b21d038db6a5042c095cda9b34b6bb2570 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/Makefile @@ -0,0 +1,7 @@ +ifeq ($(ISISROOT), $(BLANK)) +.SILENT: +error: + echo "Please set ISISROOT"; +else + include $(ISISROOT)/make/isismake.apps +endif \ No newline at end of file diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.cpp b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.cpp new file mode 100644 index 0000000000000000000000000000000000000000..63453a5699a8f31d5618179233ac46b1c9bd154a --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.cpp @@ -0,0 +1,886 @@ +#include "Isis.h" + +#include <fstream> +#include <iomanip> +#include <iostream> +#include <math.h> +#include <sstream> +#include <stdlib.h> +#include <string> + +#include "Camera.h" +#include "CameraDetectorMap.h" +#include "CameraDistortionMap.h" +#include "CameraFocalPlaneMap.h" +#include "CameraGroundMap.h" +#include "Constants.h" +#include "Distance.h" +#include "FileName.h" +#include "IException.h" +#include "IString.h" +#include "iTime.h" +#include "LineScanCameraDetectorMap.h" +#include "NaifStatus.h" +#include "Process.h" +#include "TProjection.h" +#include "Pvl.h" +#include "Spice.h" +#include "Table.h" +#include "VariableLineScanCameraDetectorMap.h" + +using namespace std; +using namespace Isis; + +double GetHRSCLineRates(Cube *cube, vector<LineRateChange> &lineRates, double &HRSCNadirCenterTime); + +void IsisMain() { + + // Use a regular Process + Process p; + + // Get user parameters and error check + UserInterface &ui = Application::GetUserInterface(); + QString from = ui.GetFileName("FROM"); + QString to = FileName(ui.GetFileName("TO")).expanded(); + double HRSCNadirCenterTime = ui.GetDouble("HRSC_NADIRCENTERTIME"); + + // Open input cube and Make sure this is a lev1 image (ie, not map projected) + Cube cube; + cube.open(from); + + if (cube.isProjected()) { + QString msg = "Input images is a map projected cube ... not a level 1 image"; + throw IException(IException::User, msg, _FILEINFO_); + } + + // Initialize the camera + Cube *input = p.SetInputCube("FROM"); + Pvl *cubeHeader = input->label(); + Camera *cam = input->camera(); + CameraDetectorMap *detectorMap = cam->DetectorMap(); + CameraFocalPlaneMap *focalMap = cam->FocalPlaneMap(); + CameraDistortionMap *distortionMap = cam->DistortionMap(); + CameraGroundMap *groundMap = cam->GroundMap(); + + // Make sure the image contains the InstrumentPointing (aka CK) blob/table + PvlGroup test = cube.label()->findGroup("Kernels", Pvl::Traverse); + QString InstrumentPointing = (QString) test["InstrumentPointing"]; + if (InstrumentPointing != "Table") { + QString msg = "Input image does not contain needed SPICE blobs...run spiceinit with attach=yes."; + throw IException(IException::User, msg, _FILEINFO_); + } + + // Open output line scanner keyword file + ofstream toStrm; + toStrm.open(to.toLatin1().data(), ios::trunc); + if (toStrm.bad()) { + QString msg = "Unable to open output TO file"; + throw IException(IException::User, msg, _FILEINFO_); + } + + // Get required keywords from instrument and band groups + PvlGroup inst = cube.label()->findGroup("Instrument", Pvl::Traverse); + QString instrumentId = (QString) inst["InstrumentId"]; + + bool isMocNA = false; +//TO DO: UNCOMMENT THIS LINES ONCE MOC IS WORKING IN SS +// bool isMocWARed = false; + bool isHiRise = false; + bool isCTX = false; + bool isLroNACL = false; + bool isLroNACR = false; + bool isHRSC = false; +//TO DO: UNCOMMENT THESE LINE ONCE MOC IS WORKING IN SS +// if (instrumentId == "MOC") { +// PvlGroup band = cube.label()->findGroup("BandBin", Pvl::Traverse); +// QString filter = (QString) band["FilterName"]; +// +// if (strcmp(filter.toAscii().data(), "BROAD_BAND") == 0) +// isMocNA = true; +// else if (strcmp(filter.toAscii().data(), "RED") == 0) +// isMocWARed = true; +// else if (strcmp(filter.toAscii().data(), "BLUE") == 0) { +// QString msg = "MOC WA Blue filter images not supported for Socet Set mapping"; +// throw IException(IException::User, msg, _FILEINFO_); +// } +// } +// else if (instrumentId == "IdealCamera") { +//TO DO: DELETE THIS LINE ONCE MOC IS WORKING IN SS + if (instrumentId == "IdealCamera") { + PvlGroup orig = cube.label()->findGroup("OriginalInstrument", Pvl::Traverse); + QString origInstrumentId = (QString) orig["InstrumentId"]; + if (origInstrumentId == "HIRISE") { + isHiRise = true; + } + else { + QString msg = "Unsupported instrument: " + origInstrumentId; + throw IException(IException::User, msg, _FILEINFO_); + } + } + else if (instrumentId == "HIRISE") { + isHiRise = true; + } + else if (instrumentId == "CTX") { + isCTX = true; + } + else if (instrumentId == "NACL") { + isLroNACL = true; + } + else if (instrumentId == "NACR") { + isLroNACR = true; + } + else if (instrumentId == "HRSC") { + isHRSC = true; + } + else { + QString msg = "Unsupported instrument: " + instrumentId; + throw IException(IException::User, msg, _FILEINFO_); + } + + int ikCode = cam->naifIkCode(); + + // Get Focal Length. + // NOTE: + // For MOC Wide Angle, cam->focal_length returns the focal length + // in pixels, so we must convert from pixels to mm using the PIXEL_SIZE + // of 0.007 mm gotten from $ISIS3DATA/mgs/kernels/ik/moc20.ti. (The + // PIXEL_PITCH value gotten from cam->PixelPitch is 1.0 since the + // focal length used by ISIS in this case is in pixels) + // For reference: the MOC WA blue filter pixel size needs an adjustment + // of 1.000452 (see p_scale in MocWideAngleDistortionMap.cpp), so that + // the final blue filter pixel size = (0.007 / 1.000452) + // + // For all other cameras, cam->focal_length returns the focal + // length in mm, as needed by Socet Set + + double focal = cam->FocalLength(); // focal length returned in mm + +//NOTE: UNCOMMENT CODE BELOW WHEN MOC IS WORKING IN SS +// if (isMocWARed) +// focal = focal * 0.007; // pixel to mm conversion + + // Get instrument summing modes + int csum = (int) detectorMap->SampleScaleFactor(); + int dsum = (int) detectorMap->LineScaleFactor(); + + if (isLroNACL || isLroNACR || isHRSC) { + dsum = csum; + } + + // Calculate location of boresight in image space, these are zero-based values + // + // Note: For MOC NA, the boresight is at the image center + // For MOC WA, MRO HiRISE, MRO CTX, LRO_NACL, LRO_NACR and HRSC the + // boresight is not at the detector center, but the boresight is at the + // center of a NOPROJ'ED MRO HIRISE image + + // Get line/samp of boresight pixel in detector space (summing == 1) + focalMap->SetFocalPlane(0.0, 0.0); + double detectorBoresightSample = focalMap->DetectorSample(); + double detectorBoresightLine = focalMap->DetectorLine(); + + // Convert sample of boresight pixel in detector into image space + // (summing, etc., is accounted for.) + detectorMap->SetDetector(detectorBoresightSample, detectorBoresightLine); + double boresightSample = detectorMap->ParentSample(); + + // Set Atmospheric correction coefficients to 0 + double atmco[4] = {0.0, 0.0, 0.0, 0.0}; + + // Get totalLines, totalSamples and account for summed images + int totalLines = cube.lineCount(); + int totalSamples = cube.sampleCount(); + + // Get the Interval Time in seconds and calculate + // scan duration in seconds + double scanDuration = 0.0; + double intTime = 0.0; + + int numIntTimes = 0.0; + vector<LineRateChange> lineRates; + if (isHRSC) { + scanDuration = GetHRSCLineRates(&cube, lineRates, HRSCNadirCenterTime); + + numIntTimes = lineRates.size(); + + if (numIntTimes == 1) { + intTime = lineRates.at(0).GetLineScanRate(); + } + if (numIntTimes <= 0) { + QString msg = "HRSC: Invalid number of scan times"; + throw IException(IException::Programmer, msg, _FILEINFO_); + } + } + else { + intTime = detectorMap->LineRate(); //LineRate is in seconds + scanDuration = intTime * totalLines; + } + + // For reference, this is the code if calculating interval time + // via LineExposureDuration keyword off image labels: + // + // if (isMocNA || isMocWARed) + // intTime = exposureDuration * (double) dsum / 1000.0; + // else if (isHiRise) + // intTime = exposureDuration * (double) dsum / 1000000.0; + + // Get along and cross scan pixel size for NA and WA sensors. + // NOTE: + // 1) The MOC WA pixel size is gotten from moc20.ti and is 7 microns + // HRSC pixel size is from the Instrument Addendum file + // 2) For others, cam->PixelPitch() returns the pixel pitch (size) in mm. + double alongScanPxSize = 0.0; + double crossScanPxSize = 0.0; +//TO DO: UNCOMMENT THESE LINES ONCE MOC IS WORKING IN SS +// if (isMocWARed || isHRSC) { + if (isHRSC) { + alongScanPxSize = csum * 0.007; + crossScanPxSize = dsum * 0.007; + } + else { + crossScanPxSize = dsum * cam->PixelPitch(); + + // Get the ephemeris time, ground position and undistorted focal plane X + // coordinate at the center line/samp of image + cam->SetImage(cube.sampleCount() / 2.0, cube.lineCount() / 2.0); + + double tMid = cam->time().Et(); + + const double latCenter = cam->UniversalLatitude(); + const double lonCenter = cam->UniversalLongitude(); + const double radiusCenter = cam->LocalRadius().meters(); + + double uXCenter = distortionMap->UndistortedFocalPlaneX(); + + // from the ground position at the image center, increment the ephemeris + // time by the line rate and map the ground position into the sensor in + // undistorted focal plane coordinates + + cam->setTime(iTime(tMid + intTime)); + double uX, uY; + groundMap->GetXY(latCenter, lonCenter, radiusCenter, &uX, &uY); + + // the along scan pixel size is the difference in focal plane X coordinates + alongScanPxSize = abs(uXCenter - uX); + } + + // Now that we have totalLines, totalSamples, alongScanPxSize and + // crossScanPxSize, fill the Interior Orientation Coefficient arrays + double ioCoefLine[10]; + double ioCoefSample[10]; + for (int i = 0; i <= 9; i++) { + ioCoefLine[i] = 0.0; + ioCoefSample[i] = 0.0; + } + + ioCoefLine[0] = totalLines / 2.0; + ioCoefLine[1] = 1.0 / alongScanPxSize; + + ioCoefSample[0] = totalSamples / 2.0; + ioCoefSample[2] = 1.0 / crossScanPxSize; + + // Update the Rectification Terms found in the base sensor class + double rectificationTerms[6]; + rectificationTerms[0] = totalLines / 2.0; + rectificationTerms[1] = 0.0; + rectificationTerms[2] = 1.0; + rectificationTerms[3] = totalSamples / 2.0; + rectificationTerms[4] = 1.0; + rectificationTerms[5] = 0.0; + + // Fill the triangulation parameters array + double triParams[18]; + for (int i = 0; i <= 17; i++) + triParams[i] = 0.0; + + triParams[15] = focal; + + // Set the Center Ground Point at the SOCET Set image, in radians + double centerGp[3]; + double radii[3] = {0.0, 0.0, 0.0}; + Distance Dradii[3]; + + cam->radii(Dradii); + radii[0] = Dradii[0].kilometers(); + radii[1] = Dradii[1].kilometers(); + radii[2] = Dradii[2].kilometers(); + + cam->SetImage(boresightSample, totalLines / 2.0); + + centerGp[0] = DEG2RAD * + TProjection::ToPlanetographic(cam->UniversalLatitude(), radii[0], radii[2]); + centerGp[1] = DEG2RAD * TProjection::To180Domain(cam->UniversalLongitude()); + centerGp[2] = 0.0; + //**** NOTE: in the import_pushbroom SOCET SET program, centerGp[2] will be set to the SS + //**** project's gp_origin_z + + // Now get keyword values that depend on ephemeris data. + + // First get the ephemeris time and camera Lat Lon at image center line, boresight sample. + double centerLine = double(totalLines) / 2.0; + + cam->SetImage(boresightSample, centerLine); //set to boresight of image + double etCenter = cam->time().Et(); + + // Get the sensor position at the image center in ographic lat, + // +E lon domain 180 coordinates, radians, height in meters + double sensorPosition[3] = {0.0, 0.0, 0.0}; + double ocentricLat, e360Lon; + cam->subSpacecraftPoint(ocentricLat, e360Lon); + sensorPosition[0] = DEG2RAD * TProjection::ToPlanetographic(ocentricLat, radii[0], radii[2]); + sensorPosition[1] = DEG2RAD * TProjection::To180Domain(e360Lon); + sensorPosition[2] = cam->SpacecraftAltitude() * 1000.0; + + // Build the ephem data. If the image label contains the InstrumentPosition + // table, use it as a guide for number and spacing of Ephem points. + // Otherwise (i.e, for dejittered HiRISE images), the number and spacing of + // ephem points based on hardcoded dtEphem value + + // Using the InstrumentPosition table as a guide build the ephem data + QList< QList<double> > ephemPts; + QList< QList<double> > ephemRates; + + PvlGroup kernels = cube.label()->findGroup("Kernels", Pvl::Traverse); + QString InstrumentPosition = (QString) kernels["InstrumentPosition"]; + + int numEphem = 0; // number of ephemeris points + double dtEphem = 0.0; // delta time of ephemeris points, seconds + if (InstrumentPosition == "Table") { + printf("InstrumentPosition is from Table\n"); + // Labels contain SPK blob + // set up Ephem pts/rates number and spacing + Table tablePosition("InstrumentPosition", cubeHeader->fileName()); + numEphem = tablePosition.Records(); + + // increase the number of ephem nodes by 20%. This is somewhat random but + // generally intended to compensate for having equally time spaced nodes + // instead of of the potentially more efficient placement used by spiceinit + numEphem = int(double(numEphem) * 1.2); + + // if numEphem calculated from SPICE blobs is too sparse for SOCET Set, + // multiply it by a factor of 30 + // (30X was settled upon empirically. In the future, make this an input parameter) + if (numEphem <= 10) { + numEphem = tablePosition.Records() * 30; + } + + // make the number of nodes odd + numEphem = (numEphem % 2) == 1 ? numEphem : numEphem + 1; + + // SOCET has a max number of ephem pts of 10000, and we're going to add twenty... + if (numEphem > 10000 - 20) { + numEphem = 9979; + } + + dtEphem = scanDuration / double(numEphem); + +//WORKAROUND TO NOT EXTRAPOLATE (must increase numEphem after dtEphem established): +//ALSO: Pad by 22 so that we can get an ultimate pad of 20 points for pos AND vel +//because we must 'manually' compute velocities for now. + numEphem = numEphem + 22; + + // build tables of ephemeris points and velocities + double et = etCenter - (((numEphem - 1) / 2) * dtEphem); + for (int i = 0; i < numEphem; i++) { + cam->setTime(iTime(et)); + SpiceRotation *bodyRot = cam->bodyRotation(); + vector<double> pos = bodyRot->ReferenceVector(cam->instrumentPosition()->Coordinate()); +//TO DO: UNCOMMENT THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + //vector<double> vel = bodyRot->ReferenceVector(cam->instrumentPosition()->Velocity()); + + //Add the ephemeris position and velocity to their respective lists, in meters and meters/sec + QList<double> ephemPt; + QList<double> ephemRate; + ephemPts.append(ephemPt << pos[0] * 1000 << pos[1] * 1000 << pos[2] * 1000); +//TO DO: UNCOMMENT THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + //ephemRates.append(ephemRate << vel[0] * 1000 << vel[1] * 1000 << vel[2] * 1000); + + et += dtEphem; + } + +// WORK AROUND TO NOT EXTRAPOLATE - comment out the following: +////TO DO: WHEN VELOCITY BLOBS ARE CORRECT IN ISIS, linearly interpolate 10 nodes rather than 11 +//// (need 11 now for computation of velocity at first and last ephemeris point) +// // linearly interpolate 11 additional nodes before line 1 (SOCET requires this) +// for (int i = 0; i < 11; i++) { +// double vec[3] = {0.0, 0.0, 0.0}; +// vec[0] = ephemPts[0][0] + (ephemPts[0][0] - ephemPts[1][0]); +// vec[1] = ephemPts[0][1] + (ephemPts[0][1] - ephemPts[1][1]); +// vec[2] = ephemPts[0][2] + (ephemPts[0][2] - ephemPts[1][2]); +// QList<double> ephemPt; +// ephemPts.prepend (ephemPt << vec[0] << vec[1] << vec[2]); +// +////TO DO: UNCOMMENT THE FOLLOWING LINES WHEN VELOCITY BLOBS ARE CORRECT IN ISIS +// //vec[0] = ephemRates[0][0] + (ephemRates[0][0] - ephemRates[1][0]); +// //vec[1] = ephemRates[0][1] + (ephemRates[0][1] - ephemRates[1][1]); +// //vec[2] = ephemRates[0][2] + (ephemRates[0][2] - ephemRates[1][2]); +// //QList<double> ephemRate; +// //ephemRates.prepend (ephemRate << vec[0] << vec[1] << vec[2]); +// } +// +////TO DO: WHEN VELOCITY BLOBS ARE CORRECT IN ISIS, linearly interpolate 10 nodes rather than 11 +//// (need 11 now for computation of velocity at first and last ephemeris point) +// // linearly interpolate 11 additional nodes after the last line (SOCET requires this) +// for (int i = 0; i < 11; i++) { +// double vec[3] = {0.0, 0.0, 0.0}; +// int index = ephemPts.size() - 1; +// vec[0] = ephemPts[index][0] + (ephemPts[index][0] - ephemPts[index - 1][0]); +// vec[1] = ephemPts[index][1] + (ephemPts[index][1] - ephemPts[index - 1][1]); +// vec[2] = ephemPts[index][2] + (ephemPts[index][2] - ephemPts[index - 1][2]); +// QList<double> ephemPt; +// ephemPts.append(ephemPt << vec[0] << vec[1] << vec[2]); +// +////TO DO: UNCOMMENT THE FOLLOWING LINES WHEN VELOCITY BLOBS ARE CORRECT IN ISIS +// //vec[0] = ephemRates[index][0] + (ephemRates[index][0] - ephemRates[index - 1][0]); +// //vec[1] = ephemRates[index][1] + (ephemRates[index][1] - ephemRates[index - 1][1]); +// //vec[2] = ephemRates[index][2] + (ephemRates[index][2] - ephemRates[index - 1][2]); +// //QList<double> ephemRate; +// //ephemRates.append(ephemRate << vec[0] << vec[1] << vec[2]); +// } +// +// numEphem += 20; +// +//TO DO: DELETE THE FOLLOWING LINES WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + // Compute the spacecraft velocity at each ephemeris point + double deltaTime = 2.0 * dtEphem; + //WORKAROUND TO NOT EXTRAPOLATE (remove count of extra points to the position QList)): + numEphem = numEphem - 2; + for (int i = 0; i < numEphem; i++) { + double vec[3] = {0.0, 0.0, 0.0}; + vec[0] = (ephemPts[i+2][0] - ephemPts[i][0]) / deltaTime; + vec[1] = (ephemPts[i+2][1] - ephemPts[i][1]) / deltaTime; + vec[2] = (ephemPts[i+2][2] - ephemPts[i][2]) / deltaTime; + QList<double> ephemRate; + ephemRates.append(ephemRate << vec[0] << vec[1] << vec[2]); + } + + } + else { + printf("Instrument Position is NOT from Table\n"); + // Calculate the number of ephemeris points that are needed, based on the + // value of dtEphem (Delta-Time-Ephemeris). SOCET SET needs the ephemeris + // points to exceed the image range for interpolation. For now, attempt a + // padding of 10 ephemeris points on either side of the image. + + if (isMocNA || isHiRise || isCTX || isLroNACL || isLroNACR || isHRSC) { + // Try increment of every 300 image lines + dtEphem = 300 * intTime; // Make this a user definable increment? + } + else { // Set increment for WA images to one second + dtEphem = 1.0; + } + + // Pad by 10 ephem pts on each side of the image + numEphem = (int)(scanDuration / dtEphem) + 20; + + // if numEphem is even, make it odd so that the number of ephemeris points + // is equal on either side of T_CENTER + if ((numEphem % 2) == 0) { + numEphem++; + } + +//TO DO: DELETE THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + numEphem = numEphem + 2; // Add two for calculation of velocity vectors... + + // Find the ephemeris time for the first ephemeris point, and from that, get + // to_ephem needed by SOCET (to_ephem is relative to etCenter) + double et = etCenter - (((numEphem - 1) / 2) * dtEphem); + for (int i = 0; i < numEphem; i++) { + cam->setTime(iTime(et)); + SpiceRotation *bodyRot = cam->bodyRotation(); + vector<double> pos = bodyRot->ReferenceVector(cam->instrumentPosition()->Coordinate()); +//TO DO: UNCOMMENT THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + //vector<double> vel = bodyRot->ReferenceVector(cam->instrumentPosition()->Velocity()); + + //Add the ephemeris position and velocity to their respective lists, in meters and meters/sec + QList<double> ephemPt; + QList<double> ephemRate; + ephemPts.append(ephemPt << pos[0] * 1000 << pos[1] * 1000 << pos[2] * 1000); +//TO DO: UNCOMMENT THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + //ephemRates.append(ephemRate << vel[0] * 1000 << vel[1] * 1000 << vel[2] * 1000); + + et += dtEphem; + } +//TO DO: DELETE THE FOLLOWING LINES WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + // Compute the spacecraft velocity at each ephemeris point + // (We must do this when blobs are not attached because the Spice Class + // stores in memory the same data that would be in a blob...even when reading NAIF kernels) + double deltaTime = 2.0 * dtEphem; + numEphem = numEphem - 2; // set numEphem back to the number we need output + for (int i = 0; i < numEphem; i++) { + double vec[3] = {0.0, 0.0, 0.0}; + vec[0] = (ephemPts[i+2][0] - ephemPts[i][0]) / deltaTime; + vec[1] = (ephemPts[i+2][1] - ephemPts[i][1]) / deltaTime; + vec[2] = (ephemPts[i+2][2] - ephemPts[i][2]) / deltaTime; + QList<double> ephemRate; + ephemRates.append(ephemRate << vec[0] << vec[1] << vec[2]); + } + } + + //update ephem stats + double etFirstEphem = etCenter - (((numEphem - 1) / 2) * dtEphem); + double t0Ephem = etFirstEphem - etCenter; + + // Using the intrumentPointing table as a guide build the quarternions + // for simplicity sake we'll leave the mountingAngles as identity + // and store the complete rotation from body fixed to camera in the + // quarternions + + //set up quaternions number and spacing + Table tablePointing("InstrumentPointing", cubeHeader->fileName()); + + //number of quaternions + int numQuaternions = tablePointing.Records(); + + // increase the number of quaternions nodes by 20%. This is somewhat random but + // generally intended to compensate for having equally time spaced nodes + // instead of of the potentially more efficient placement used by spiceinit + numQuaternions = (int)(numQuaternions * 1.2); + + // if numQuaternions calculated from SPICE blobs is too sparse for SOCET Set, + // mulitiply it by a factor of 30 + // (30X was settled upon emperically. In the future, make this an input parameter) + if (numQuaternions <= 10) { + numQuaternions = tablePointing.Records() * 30; + } + + //make the number of nodes odd + numQuaternions = (numQuaternions % 2) == 1 ? numQuaternions : numQuaternions + 1; + + // SOCET has a max number of quaternions of 20000, and we're going to add twenty... + if (numQuaternions > 20000 - 20) { + numQuaternions = 19180; + } + + double dtQuat = scanDuration / double(numQuaternions); + +//WORKAROUND TO NOT EXTRAPOLATE (must increase numQuaterions after dtQtat established): + numQuaternions = numQuaternions + 20; + + // build the tables of values + QList< QList<double> > quaternions; + double et = etCenter - (((numQuaternions - 1) / 2) * dtQuat); + + for (int i = 0; i < numQuaternions; i++) { + cam->setTime(iTime(et)); + vector<double> j2000ToBodyFixedMatrixVector = cam->bodyRotation()->Matrix(); + vector<double> j2000ToCameraMatrixVector = cam->instrumentRotation()->Matrix(); + double quaternion[4] = {0.0, 0.0, 0.0, 0.0}; + + double j2000ToBodyFixedRotationMatrix[3][3], //rotation from J2000 to target (aka body, planet) + j2000ToCameraRotationMatrix[3][3], //rotation from J2000 to spacecraft + cameraToBodyFixedRotationMatrix[3][3]; //rotation from camera to target + + // reformat vectors to 3x3 rotation matricies + for (int j = 0; j < 3; j++) { + for (int k = 0; k < 3; k++) { + j2000ToBodyFixedRotationMatrix[j][k] = j2000ToBodyFixedMatrixVector[3 * j + k]; + j2000ToCameraRotationMatrix[j][k] = j2000ToCameraMatrixVector[3 * j + k]; + } + } + + // get the quaternion + mxmt_c(j2000ToBodyFixedRotationMatrix, j2000ToCameraRotationMatrix, + cameraToBodyFixedRotationMatrix); + m2q_c(cameraToBodyFixedRotationMatrix, quaternion); + + // add the quaternion to the list of quaternions + QList<double> quat; + quaternions.append(quat << quaternion[1] << quaternion[2] << quaternion[3] << + quaternion[0]); + //note also that the order is changed to match socet + + et += dtQuat; + } + +// WORK AROUND TO NOT EXTRAPOLATE - comment out the following: +// // linearly interpolate 10 additional nodes before the first quaternion (SOCET requires this) +// for (int i = 0; i < 10; i++) { +// double vec[4] = {0.0, 0.0, 0.0, 0.0}; +// vec[0] = quaternions[0][0] + (quaternions[0][0] - quaternions[1][0]); +// vec[1] = quaternions[0][1] + (quaternions[0][1] - quaternions[1][1]); +// vec[2] = quaternions[0][2] + (quaternions[0][2] - quaternions[1][2]); +// vec[3] = quaternions[0][3] + (quaternions[0][3] - quaternions[1][3]); +// QList<double> quat; +// quaternions.prepend (quat << vec[0] << vec[1] << vec[2] << vec[3]); +// } +// +// // linearly interpolate 10 additional nodes after the last quaternion (SOCET requires this) +// for (int i = 0; i < 10; i++) { +// double vec[4] = {0.0, 0.0, 0.0, 0.0}; +// int index = quaternions.size() - 1; +// vec[0] = quaternions[index][0] + (quaternions[index][0] - quaternions[index - 1][0]); +// vec[1] = quaternions[index][1] + (quaternions[index][1] - quaternions[index - 1][1]); +// vec[2] = quaternions[index][2] + (quaternions[index][2] - quaternions[index - 1][2]); +// vec[3] = quaternions[index][3] + (quaternions[index][3] - quaternions[index - 1][3]); +// QList<double> quat; +// quaternions.append(quat << vec[0] << vec[1] << vec[2] << vec[3]); +// } +// +// //update quaternions stats +// numQuaternions += 20; + + //ephemeris time of the first quarternion + double et0Quat = etCenter - (((numQuaternions - 1) / 2) * dtQuat); + + //quadratic time of the first quarternion + double qt0Quat = et0Quat - etCenter; + + //query remaining transformation parameters from Camera Classes + //transformation to distortionless focal plane + double zDirection = distortionMap->ZDirection(); + + //transformation from DistortionlessFocalPlane to FocalPlane + vector<double> opticalDistCoefs = distortionMap->OpticalDistortionCoefficients(); + + // For instruments with less than 3 distortion coefficients, set the + // unused ones to 0.0 + opticalDistCoefs.resize(3, 0); + + //transformation from focal plane to detector + const double *iTransS = focalMap->TransS(); + const double *iTransL = focalMap->TransL(); + double detectorSampleOrigin = focalMap->DetectorSampleOrigin(); + double detectorLineOrigin = focalMap->DetectorLineOrigin(); + + //transformation from detector to cube + double startingSample = detectorMap->AdjustedStartingSample(); + double startingLine = detectorMap->AdjustedStartingLine(); + double sampleSumming = detectorMap->SampleScaleFactor(); + double etStart = ((LineScanCameraDetectorMap *)detectorMap)->StartTime(); + double lineOffset = focalMap->DetectorLineOffset(); + + // We are done with computing keyword values, so output the Line Scanner + // Keyword file. + + // This is the SOCET SET base sensor class keywords portion of support file: + toStrm.setf(ios::scientific); + toStrm << "RECTIFICATION_TERMS" << endl; + toStrm << " " << setprecision(14) << rectificationTerms[0] << " " << + rectificationTerms[1] << " " << rectificationTerms[2] << endl; + toStrm << " " << rectificationTerms[3] << " " << rectificationTerms[4] << + " " << rectificationTerms[5] << endl; + + toStrm << "GROUND_ZERO "; + toStrm << centerGp[0] << " " << centerGp[1] << " " << centerGp[2] << endl; + + toStrm << "LOAD_PT "; + toStrm << centerGp[0] << " " << centerGp[1] << " " << centerGp[2] << endl; + + toStrm << "COORD_SYSTEM 1" << endl; + + toStrm << "IMAGE_MOTION 0" << endl; + + // This is the line scanner sensor model portion of support file: + toStrm << "SENSOR_TYPE USGSAstroLineScannerKLEv" << endl; + toStrm << "SENSOR_MODE UNKNOWN" << endl; + + toStrm << "FOCAL " << focal << endl; + + toStrm << "ATMCO"; + for (int i = 0; i < 4; i++) { + toStrm << " " << atmco[i]; + } + toStrm << endl; + + toStrm << "IOCOEF_LINE"; + for (int i = 0; i < 10; i++) { + toStrm << " " << ioCoefLine[i]; + } + toStrm << endl; + + toStrm << "IOCOEF_SAMPLE"; + for (int i = 0; i < 10; i++) { + toStrm << " " << ioCoefSample[i]; + } + toStrm << endl; + + toStrm << "ABERR 0" << endl; + toStrm << "ATMREF 0" << endl; + toStrm << "PLATFORM 1" << endl; + toStrm << "SOURCE_FLAG 1" << endl; + toStrm << "SINGLE_EPHEMERIDE 0" << endl; + + //Note, for TRI_PARAMETERS, we print the first element separate from the rest so that the array + //starts in the first column. Otherwise, SOCET Set will treat the array as a comment + toStrm << "TRI_PARAMETERS" << endl; + toStrm << triParams[0]; + for (int i = 1; i < 18; i++) { + toStrm << " " << triParams[i]; + } + toStrm << endl; + + toStrm << setprecision(25) << "T_CENTER "; + double tCenter = 0.0; + if (isHRSC) { + tCenter = etCenter - HRSCNadirCenterTime; + toStrm << tCenter << endl; + } + else { + toStrm << tCenter << endl; + } + + toStrm << "DT_EPHEM " << dtEphem << endl; + + toStrm << "T0_EPHEM "; + if (isHRSC) { + double t = tCenter + t0Ephem; + toStrm << t << endl; + } + else { + toStrm << t0Ephem << endl; + } + + toStrm << "NUMBER_OF_EPHEM " << numEphem << endl; + + toStrm << "EPHEM_PTS" << endl; +//TO DO: DELETE THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + for (int i = 1; i <= numEphem; i++) { +//TO DO: UNCOMMENT THE FOLLOWING LINE WHEN VELOCITY BLOBS ARE CORRECT IN ISIS + //for (int i = 0; i < numEphem; i++) { + toStrm << " " << ephemPts[i][0]; + toStrm << " " << ephemPts[i][1]; + toStrm << " " << ephemPts[i][2] << endl; + } + + toStrm << "\n\nEPHEM_RATES" << endl; + for (int i = 0; i < numEphem; i++) { + toStrm << " " << ephemRates[i][0]; + toStrm << " " << ephemRates[i][1]; + toStrm << " " << ephemRates[i][2] << endl; + } + + toStrm << "\n\nDT_QUAT " << dtQuat << endl; + + toStrm << "T0_QUAT "; + + if (isHRSC) { + double t = tCenter + qt0Quat; + toStrm << t << endl; + } + else { + toStrm << qt0Quat << endl; + } + + toStrm << "NUMBER_OF_QUATERNIONS " << numQuaternions << endl; + toStrm << "QUATERNIONS" << endl; + for (int i = 0; i < numQuaternions; i++) { + toStrm << " " << quaternions[i][0]; + toStrm << " " << quaternions[i][1]; + toStrm << " " << quaternions[i][2]; + toStrm << " " << quaternions[i][3] << endl; + } + + toStrm << "\n\nSCAN_DURATION " << scanDuration << endl; + + if (isHRSC && numIntTimes > 1) { + toStrm << "\nNUMBER_OF_INT_TIMES " << numIntTimes << endl; + toStrm << "INT_TIMES" << endl; + for (int i = 0; i < numIntTimes; i++) { + LineRateChange lr = lineRates.at(i); + toStrm << " " << lr.GetStartLine(); + //toStrm << " " << lr.GetStartEt() - tCenter; + toStrm << " " << lr.GetStartEt(); + toStrm << " " << lr.GetLineScanRate() << endl; + } + } + else { + toStrm << "INT_TIME " << intTime << endl; + } + + toStrm << "\nALONG_SCAN_PIXEL_SIZE " << alongScanPxSize << endl; + toStrm << "CROSS_SCAN_PIXEL_SIZE " << crossScanPxSize << endl; + + toStrm << "\nCENTER_GP"; + for (int i = 0; i < 3; i++) { + toStrm << " " << centerGp[i]; + } + toStrm << endl; + + toStrm << "SENSOR_POSITION"; + for (int i = 0; i < 3; i++) { + toStrm << " " << sensorPosition[i]; + } + toStrm << endl; + + toStrm << "MOUNTING_ANGLES"; + double mountingAngles[3] = {0.0, 0.0, 0.0}; + for (int i = 0; i < 3; i++) { + toStrm << " " << mountingAngles[i]; + } + toStrm << endl; + + toStrm << "\nTOTAL_LINES " << totalLines << endl; + toStrm << "TOTAL_SAMPLES " << totalSamples << endl; + toStrm << "\n\n\n" << endl; + + toStrm << "IKCODE " << ikCode << endl; + toStrm << "ISIS_Z_DIRECTION " << zDirection << endl; + + toStrm << "OPTICAL_DIST_COEF"; + for (int i = 0; i < 3; i++) { + toStrm << " " << opticalDistCoefs[i]; + } + toStrm << endl; + + toStrm << "ITRANSS"; + for (int i = 0; i < 3; i++) { + toStrm << " " << iTransS[i]; + } + toStrm << endl; + + toStrm << "ITRANSL"; + for (int i = 0; i < 3; i++) { + toStrm << " " << iTransL[i]; + } + toStrm << endl; + + toStrm << "DETECTOR_SAMPLE_ORIGIN " << detectorSampleOrigin << endl; + toStrm << "DETECTOR_LINE_ORIGIN " << detectorLineOrigin << endl; + toStrm << "DETECTOR_LINE_OFFSET " << lineOffset << endl; + toStrm << "DETECTOR_SAMPLE_SUMMING " << sampleSumming << endl; + + toStrm << "STARTING_SAMPLE " << startingSample << endl; + toStrm << "STARTING_LINE " << startingLine << endl; + + // if cube has been cropped, recompute etStart + if (cube.hasGroup("AlphaCube")) { + cube.camera()->SetImage(1, 0.5); + etStart = cube.camera()->time().Et(); + } + + toStrm << "STARTING_EPHEMERIS_TIME " << setprecision(25) << etStart + tCenter << endl; + toStrm << "CENTER_EPHEMERIS_TIME " << etCenter + tCenter << endl; +} // end main + +// method to retrieve line exposure rates from hrsc cube +double GetHRSCLineRates(Cube *cube, vector<LineRateChange> &lineRates, + double &HRSCNadirCenterTime) { + + Camera *cam = cube->camera(); + + double scanDuration = 0.0; + double lineRate; + double currentLineRate = -1.0; + + // loop over image lines + int nLines = cam->Lines(); + for (int i = 1; i <= nLines; i++) { + cam->SetImage(1, i); + + lineRate = cam->DetectorMap()->LineRate(); + + scanDuration += lineRate; + + if (lineRate == currentLineRate) { + continue; + } + + currentLineRate = lineRate; + + lineRates.push_back(LineRateChange(i, cam->time().Et()-HRSCNadirCenterTime, currentLineRate)); + } + + return scanDuration; +} // end GetHRSCLineRates + diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.xml b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.xml new file mode 100644 index 0000000000000000000000000000000000000000..270d5ab9ddef6a6508905492867a7c2d22804bec --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/socetlinescankeywords_noExtrapolation.xml @@ -0,0 +1,127 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<application name="socetlinescankeywords_noExtrapolation" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd"> + <brief> + Create the Line Scanner Sensor section of a SOCET Set Line Scanner support file + </brief> + + <description> + This is an ISIS to SOCET Set (trademark BAE Systems) translation program for Line Scanner + images. It calculates keyword values specific to SOCET Set's USGSAstro Line Scanner sensor + model and generates the USGSAstro Line Scanner section of a SOCET Set Support file for input + to the USGSAstro SOCET Set program 'import_pushbroom.' <br/> + <br/> + <i>With the exception of HiRISE jitter corrected images, the input cube must be a "level 1" + image <b>with SPICE data attached to the label</b> (see spiceinit).</i> HiRISE jitter + corrected images (see hijitter) do not have Spacecraft Position Kernel (SPK) data attached + to the label, so these are handled as a special case in the program.<br/> + <br/> + The following are supported instruments and derived products: + <pre> + MRO-HiRISE + MRO-HiRISE IDEAL (i.e., noproj'ed images) + MRO-HiRISE IDEAL Jitter Corrected (i.e., hijitter'ed images) + MRO-CTX + LRO-NACL + LRO-NACR + MEX-HRSC +<!-- + MGS-MOC +--> + </pre> + </description> + + <category> + <categoryItem>SOCET Set Translation</categoryItem> + </category> + + <seeAlso> + <applications> + <item>spiceinit</item> + <item>hijitter</item> + </applications> + </seeAlso> + + <history> + <change name="E. Howington-Kraus" date="2008-10-23"> + Original version + </change> + <change name="K. Edmundson" date="2011-05-13"> + Added NADIR_CENTER_TIME parameter + </change> + <change name="E. Howington-Kraus" date="2011-08-04"> + Changed default NADIR_CENTER_TIME from None to 0.0 + </change> + <change name="E. Howington-Kraus" date="2012-04-26"> + Added MOUNT_ANG_TBL option + </change> + <change name="O. Thomas" date="2012-08-23"> + Renamed program from calc_pushbroom_keywords to socetlinescankeywords, added quaternions, made + changes from SOCET Set Generic Pushbroom sensor model to the USGSAsro Line Scanner sensor + model, and removed the MOUNT_ANG_TBL option. Started modifications to meet ISIS coding + standards. + </change> + <change name="E. Howington-Kraus" date="2013-02-20"> + Completed modifications to meet ISIS coding standards for formal installation into ISIS3. + Added support for HiRISE jitter-corrected images created at U of A. Added check for needed + SPICE data (blobs) attached to the cube label. Renamed parameter PUSHKEY to TO. Temporarily + removed support for MEX-HSRC and MGS-MOC sensors until they are tested and working under the + SOCET Set USGSAstro Line Scanner sensor model. References #1490. + </change> + <change name="E. Howington-Kraus" date="2013-06-21"> + Modified to (1) generate ephemeris points and quaternions at a closer time interval if the + spacing of the attached SPICE data are too sparse for the SOCET Set USGSAstro Line Scanner + sensor model; (2) increase the precision of the output SOCET Set keyword values; (3) redefine + the pixel-location of the input image's center ephemeris time, and (4) compute spacecraft + velocity values instead of using SPICE velocity data blobs. Fixes #1672. + </change> + <change name="K. Edmundson" date="2017-01-09"> + Hopefully final updates to handle HRSC images with both constant and variable line exposure rates. + Also brought up to ISIS3 coding standards. References #5278. + </change> + </history> + + <groups> + <group name="Files"> + <parameter name="FROM"> + <type>cube</type> + <fileMode>input</fileMode> + <brief> + Filename of a cube + </brief> + <description> + Level 1 Input Line Scanner cube with SPICE data attached. Supported instruments and + derived products are MRO-HiRISE, MRO-HiRISE IDEAL, MRO-HiRISE IDEAL Jitter Corrected, + MRO-CTX, LRO-NACL, and LRO-NACR. + </description> + <filter> + *.cub + </filter> + </parameter> + + <parameter name="TO"> + <type>filename</type> + <fileMode>output</fileMode> + <brief>SOCET Set Support file keywords</brief> + <internalDefault>None</internalDefault> + <description> + Output text file of the SOCET Set USGSAstro Line Scaner section of a SOCET Set support + file. This output file is one of the input files to USGSAstro SOCET Set program + 'import_pushbroom.' + </description> + </parameter> + + <parameter name="HRSC_NADIRCENTERTIME"> + <brief>Ephemeris time at center of HRSC nadir image + </brief> + <description> + Ephemeris time at center of HRSC nadir image. This is + used so that the SOCET Set keyword T0_CENTER value references + the same absolute ephemeris time in an HRSC image set. + </description> + <type>double</type> + <default><item>0.0</item></default> + </parameter> + </group> + </groups> +</application> diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..46d84c74c297304e943452a44e06b111f179a92b --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/Makefile @@ -0,0 +1,4 @@ +BLANKS = "%-6s" +LENGTH = "%-40s" + +include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..9c0e3d5b6c1c9809e26d15e30d11639e6a5d74b9 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/Makefile @@ -0,0 +1,30 @@ +APPNAME = socetlinescankeywords + +include $(ISISROOT)/make/isismake.tsts + +#Use sed to lower output precision to 5 decimal places in output txt files + +commands: +#Test HiRISE noproj'ed (Ideal Camera) cube + $(APPNAME) from=$(INPUT)/ESP_028449_1700_REDmos_hijitreged.balance.noproj.8bit.cub \ + to=$(OUTPUT)/ESP_028449_1700_REDmos_hijitreged_keywords.txt > /dev/null; + cat $(OUTPUT)/ESP_028449_1700_REDmos_hijitreged_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_ESP_028449_1700_REDmos_hijitreged_keywords.txt + $(RM) $(OUTPUT)/ESP_028449_1700_REDmos_hijitreged_keywords.txt + +#Test HiRISE hijitter'ed (Ideal Camera) cube + $(APPNAME) from=$(INPUT)/ESP_026339_1700_RED_DEJITTERED.8bit.cub \ + to=$(OUTPUT)/ESP_026339_1700_RED_DEJITTERED_keywords.txt > /dev/null; + cat $(OUTPUT)/ESP_026339_1700_RED_DEJITTERED_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_ESP_026339_1700_RED_DEJITTERED_keywords.txt + $(RM) $(OUTPUT)/ESP_026339_1700_RED_DEJITTERED_keywords.txt + +#Test HiRISE CCD (HiRISE Camera) cube + $(APPNAME) from=$(INPUT)/ESP_028449_1700_RED5.balance.cub \ + to=$(OUTPUT)/ESP_028449_1700_RED5_keywords.txt > /dev/null; + cat $(OUTPUT)/ESP_028449_1700_RED5_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_ESP_028449_1700_RED5_keywords.txt + $(RM) $(OUTPUT)/ESP_028449_1700_RED5_keywords.txt diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_026339_1700_RED_DEJITTERED_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_026339_1700_RED_DEJITTERED_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..d07d0cf1368eef391e920166aacfb08c2f18f18d --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_026339_1700_RED_DEJITTERED_keywords.txt @@ -0,0 +1,648 @@ +RECTIFICATION_TERMS + 3.00000e+04 0.00000e+00 1.00000e+00 + 1.00000e+04 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.74024e-01 -1.60194e+00 0.00000e+00 +LOAD_PT -1.74024e-01 -1.60194e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 1.19949e+04 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 3.00000e+04 8.34013e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 1.00000e+04 0.00000e+00 8.33333e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.19949e+04 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 2.43749e-02 +T0_EPHEM -2.68124e+00 +NUMBER_OF_EPHEM 221 +EPHEM_PTS + -6.90396e+04 -3.60169e+06 -6.30370e+05 + -6.90501e+04 -3.60171e+06 -6.30288e+05 + -6.90606e+04 -3.60172e+06 -6.30206e+05 + -6.90711e+04 -3.60174e+06 -6.30124e+05 + -6.90816e+04 -3.60175e+06 -6.30042e+05 + -6.90921e+04 -3.60177e+06 -6.29960e+05 + -6.91027e+04 -3.60178e+06 -6.29878e+05 + -6.91132e+04 -3.60179e+06 -6.29796e+05 + -6.91237e+04 -3.60181e+06 -6.29714e+05 + -6.91342e+04 -3.60182e+06 -6.29632e+05 + -6.91447e+04 -3.60184e+06 -6.29550e+05 + -6.91552e+04 -3.60185e+06 -6.29468e+05 + -6.91657e+04 -3.60187e+06 -6.29386e+05 + -6.91762e+04 -3.60188e+06 -6.29304e+05 + -6.91867e+04 -3.60190e+06 -6.29222e+05 + -6.91973e+04 -3.60191e+06 -6.29139e+05 + -6.92078e+04 -3.60193e+06 -6.29057e+05 + -6.92183e+04 -3.60194e+06 -6.28975e+05 + -6.92288e+04 -3.60196e+06 -6.28893e+05 + -6.92393e+04 -3.60197e+06 -6.28811e+05 + -6.92498e+04 -3.60199e+06 -6.28729e+05 + -6.92603e+04 -3.60200e+06 -6.28647e+05 + -6.92708e+04 -3.60202e+06 -6.28565e+05 + -6.92813e+04 -3.60203e+06 -6.28483e+05 + -6.92919e+04 -3.60205e+06 -6.28401e+05 + -6.93024e+04 -3.60206e+06 -6.28319e+05 + -6.93129e+04 -3.60208e+06 -6.28237e+05 + -6.93234e+04 -3.60209e+06 -6.28155e+05 + -6.93339e+04 -3.60211e+06 -6.28073e+05 + -6.93444e+04 -3.60212e+06 -6.27991e+05 + -6.93549e+04 -3.60214e+06 -6.27908e+05 + -6.93654e+04 -3.60215e+06 -6.27826e+05 + -6.93759e+04 -3.60217e+06 -6.27744e+05 + -6.93865e+04 -3.60218e+06 -6.27662e+05 + -6.93970e+04 -3.60220e+06 -6.27580e+05 + -6.94075e+04 -3.60221e+06 -6.27498e+05 + -6.94180e+04 -3.60223e+06 -6.27416e+05 + -6.94285e+04 -3.60224e+06 -6.27334e+05 + -6.94390e+04 -3.60226e+06 -6.27252e+05 + -6.94495e+04 -3.60227e+06 -6.27170e+05 + -6.94600e+04 -3.60229e+06 -6.27088e+05 + -6.94706e+04 -3.60230e+06 -6.27006e+05 + -6.94811e+04 -3.60232e+06 -6.26924e+05 + -6.94916e+04 -3.60233e+06 -6.26842e+05 + -6.95021e+04 -3.60234e+06 -6.26759e+05 + -6.95126e+04 -3.60236e+06 -6.26677e+05 + -6.95231e+04 -3.60237e+06 -6.26595e+05 + -6.95336e+04 -3.60239e+06 -6.26513e+05 + -6.95441e+04 -3.60240e+06 -6.26431e+05 + -6.95547e+04 -3.60242e+06 -6.26349e+05 + -6.95652e+04 -3.60243e+06 -6.26267e+05 + -6.95757e+04 -3.60245e+06 -6.26185e+05 + -6.95862e+04 -3.60246e+06 -6.26103e+05 + -6.95967e+04 -3.60248e+06 -6.26021e+05 + -6.96072e+04 -3.60249e+06 -6.25939e+05 + -6.96177e+04 -3.60251e+06 -6.25857e+05 + -6.96282e+04 -3.60252e+06 -6.25775e+05 + -6.96387e+04 -3.60254e+06 -6.25692e+05 + -6.96493e+04 -3.60255e+06 -6.25610e+05 + -6.96598e+04 -3.60257e+06 -6.25528e+05 + -6.96703e+04 -3.60258e+06 -6.25446e+05 + -6.96808e+04 -3.60260e+06 -6.25364e+05 + -6.96913e+04 -3.60261e+06 -6.25282e+05 + -6.97018e+04 -3.60263e+06 -6.25200e+05 + -6.97123e+04 -3.60264e+06 -6.25118e+05 + -6.97228e+04 -3.60266e+06 -6.25036e+05 + -6.97334e+04 -3.60267e+06 -6.24954e+05 + -6.97439e+04 -3.60269e+06 -6.24872e+05 + -6.97544e+04 -3.60270e+06 -6.24790e+05 + -6.97649e+04 -3.60271e+06 -6.24707e+05 + -6.97754e+04 -3.60273e+06 -6.24625e+05 + -6.97859e+04 -3.60274e+06 -6.24543e+05 + -6.97964e+04 -3.60276e+06 -6.24461e+05 + -6.98069e+04 -3.60277e+06 -6.24379e+05 + -6.98175e+04 -3.60279e+06 -6.24297e+05 + -6.98280e+04 -3.60280e+06 -6.24215e+05 + -6.98385e+04 -3.60282e+06 -6.24133e+05 + -6.98490e+04 -3.60283e+06 -6.24051e+05 + -6.98595e+04 -3.60285e+06 -6.23969e+05 + -6.98700e+04 -3.60286e+06 -6.23887e+05 + -6.98805e+04 -3.60288e+06 -6.23805e+05 + -6.98910e+04 -3.60289e+06 -6.23722e+05 + -6.99016e+04 -3.60291e+06 -6.23640e+05 + -6.99121e+04 -3.60292e+06 -6.23558e+05 + -6.99226e+04 -3.60294e+06 -6.23476e+05 + -6.99331e+04 -3.60295e+06 -6.23394e+05 + -6.99436e+04 -3.60297e+06 -6.23312e+05 + -6.99541e+04 -3.60298e+06 -6.23230e+05 + -6.99646e+04 -3.60300e+06 -6.23148e+05 + -6.99751e+04 -3.60301e+06 -6.23066e+05 + -6.99857e+04 -3.60302e+06 -6.22984e+05 + -6.99962e+04 -3.60304e+06 -6.22902e+05 + -7.00067e+04 -3.60305e+06 -6.22819e+05 + -7.00172e+04 -3.60307e+06 -6.22737e+05 + -7.00277e+04 -3.60308e+06 -6.22655e+05 + -7.00382e+04 -3.60310e+06 -6.22573e+05 + -7.00487e+04 -3.60311e+06 -6.22491e+05 + -7.00592e+04 -3.60313e+06 -6.22409e+05 + -7.00698e+04 -3.60314e+06 -6.22327e+05 + -7.00803e+04 -3.60316e+06 -6.22245e+05 + -7.00908e+04 -3.60317e+06 -6.22163e+05 + -7.01013e+04 -3.60319e+06 -6.22081e+05 + -7.01118e+04 -3.60320e+06 -6.21999e+05 + -7.01223e+04 -3.60322e+06 -6.21916e+05 + -7.01328e+04 -3.60323e+06 -6.21834e+05 + -7.01433e+04 -3.60325e+06 -6.21752e+05 + -7.01539e+04 -3.60326e+06 -6.21670e+05 + -7.01644e+04 -3.60328e+06 -6.21588e+05 + -7.01749e+04 -3.60329e+06 -6.21506e+05 + -7.01854e+04 -3.60330e+06 -6.21424e+05 + -7.01959e+04 -3.60332e+06 -6.21342e+05 + -7.02064e+04 -3.60333e+06 -6.21260e+05 + -7.02169e+04 -3.60335e+06 -6.21178e+05 + -7.02274e+04 -3.60336e+06 -6.21095e+05 + -7.02380e+04 -3.60338e+06 -6.21013e+05 + -7.02485e+04 -3.60339e+06 -6.20931e+05 + -7.02590e+04 -3.60341e+06 -6.20849e+05 + -7.02695e+04 -3.60342e+06 -6.20767e+05 + -7.02800e+04 -3.60344e+06 -6.20685e+05 + -7.02905e+04 -3.60345e+06 -6.20603e+05 + -7.03010e+04 -3.60347e+06 -6.20521e+05 + -7.03116e+04 -3.60348e+06 -6.20439e+05 + -7.03221e+04 -3.60350e+06 -6.20357e+05 + -7.03326e+04 -3.60351e+06 -6.20274e+05 + -7.03431e+04 -3.60352e+06 -6.20192e+05 + -7.03536e+04 -3.60354e+06 -6.20110e+05 + -7.03641e+04 -3.60355e+06 -6.20028e+05 + -7.03746e+04 -3.60357e+06 -6.19946e+05 + -7.03851e+04 -3.60358e+06 -6.19864e+05 + -7.03957e+04 -3.60360e+06 -6.19782e+05 + -7.04062e+04 -3.60361e+06 -6.19700e+05 + -7.04167e+04 -3.60363e+06 -6.19618e+05 + -7.04272e+04 -3.60364e+06 -6.19536e+05 + -7.04377e+04 -3.60366e+06 -6.19453e+05 + -7.04482e+04 -3.60367e+06 -6.19371e+05 + -7.04587e+04 -3.60369e+06 -6.19289e+05 + -7.04692e+04 -3.60370e+06 -6.19207e+05 + -7.04798e+04 -3.60372e+06 -6.19125e+05 + -7.04903e+04 -3.60373e+06 -6.19043e+05 + -7.05008e+04 -3.60374e+06 -6.18961e+05 + -7.05113e+04 -3.60376e+06 -6.18879e+05 + -7.05218e+04 -3.60377e+06 -6.18797e+05 + -7.05323e+04 -3.60379e+06 -6.18714e+05 + -7.05428e+04 -3.60380e+06 -6.18632e+05 + -7.05534e+04 -3.60382e+06 -6.18550e+05 + -7.05639e+04 -3.60383e+06 -6.18468e+05 + -7.05744e+04 -3.60385e+06 -6.18386e+05 + -7.05849e+04 -3.60386e+06 -6.18304e+05 + -7.05954e+04 -3.60388e+06 -6.18222e+05 + -7.06059e+04 -3.60389e+06 -6.18140e+05 + -7.06164e+04 -3.60391e+06 -6.18058e+05 + -7.06269e+04 -3.60392e+06 -6.17976e+05 + -7.06375e+04 -3.60394e+06 -6.17893e+05 + -7.06480e+04 -3.60395e+06 -6.17811e+05 + -7.06585e+04 -3.60396e+06 -6.17729e+05 + -7.06690e+04 -3.60398e+06 -6.17647e+05 + -7.06795e+04 -3.60399e+06 -6.17565e+05 + -7.06900e+04 -3.60401e+06 -6.17483e+05 + -7.07005e+04 -3.60402e+06 -6.17401e+05 + -7.07111e+04 -3.60404e+06 -6.17319e+05 + -7.07216e+04 -3.60405e+06 -6.17236e+05 + -7.07321e+04 -3.60407e+06 -6.17154e+05 + -7.07426e+04 -3.60408e+06 -6.17072e+05 + -7.07531e+04 -3.60410e+06 -6.16990e+05 + -7.07636e+04 -3.60411e+06 -6.16908e+05 + -7.07741e+04 -3.60413e+06 -6.16826e+05 + -7.07847e+04 -3.60414e+06 -6.16744e+05 + -7.07952e+04 -3.60415e+06 -6.16662e+05 + -7.08057e+04 -3.60417e+06 -6.16580e+05 + -7.08162e+04 -3.60418e+06 -6.16497e+05 + -7.08267e+04 -3.60420e+06 -6.16415e+05 + -7.08372e+04 -3.60421e+06 -6.16333e+05 + -7.08477e+04 -3.60423e+06 -6.16251e+05 + -7.08583e+04 -3.60424e+06 -6.16169e+05 + -7.08688e+04 -3.60426e+06 -6.16087e+05 + -7.08793e+04 -3.60427e+06 -6.16005e+05 + -7.08898e+04 -3.60429e+06 -6.15923e+05 + -7.09003e+04 -3.60430e+06 -6.15841e+05 + -7.09108e+04 -3.60431e+06 -6.15758e+05 + -7.09213e+04 -3.60433e+06 -6.15676e+05 + -7.09318e+04 -3.60434e+06 -6.15594e+05 + -7.09424e+04 -3.60436e+06 -6.15512e+05 + -7.09529e+04 -3.60437e+06 -6.15430e+05 + -7.09634e+04 -3.60439e+06 -6.15348e+05 + -7.09739e+04 -3.60440e+06 -6.15266e+05 + -7.09844e+04 -3.60442e+06 -6.15184e+05 + -7.09949e+04 -3.60443e+06 -6.15101e+05 + -7.10054e+04 -3.60445e+06 -6.15019e+05 + -7.10160e+04 -3.60446e+06 -6.14937e+05 + -7.10265e+04 -3.60447e+06 -6.14855e+05 + -7.10370e+04 -3.60449e+06 -6.14773e+05 + -7.10475e+04 -3.60450e+06 -6.14691e+05 + -7.10580e+04 -3.60452e+06 -6.14609e+05 + -7.10685e+04 -3.60453e+06 -6.14527e+05 + -7.10790e+04 -3.60455e+06 -6.14444e+05 + -7.10896e+04 -3.60456e+06 -6.14362e+05 + -7.11001e+04 -3.60458e+06 -6.14280e+05 + -7.11106e+04 -3.60459e+06 -6.14198e+05 + -7.11211e+04 -3.60461e+06 -6.14116e+05 + -7.11316e+04 -3.60462e+06 -6.14034e+05 + -7.11421e+04 -3.60463e+06 -6.13952e+05 + -7.11526e+04 -3.60465e+06 -6.13870e+05 + -7.11632e+04 -3.60466e+06 -6.13787e+05 + -7.11737e+04 -3.60468e+06 -6.13705e+05 + -7.11842e+04 -3.60469e+06 -6.13623e+05 + -7.11947e+04 -3.60471e+06 -6.13541e+05 + -7.12052e+04 -3.60472e+06 -6.13459e+05 + -7.12157e+04 -3.60474e+06 -6.13377e+05 + -7.12262e+04 -3.60475e+06 -6.13295e+05 + -7.12368e+04 -3.60477e+06 -6.13213e+05 + -7.12473e+04 -3.60478e+06 -6.13130e+05 + -7.12578e+04 -3.60479e+06 -6.13048e+05 + -7.12683e+04 -3.60481e+06 -6.12966e+05 + -7.12788e+04 -3.60482e+06 -6.12884e+05 + -7.12893e+04 -3.60484e+06 -6.12802e+05 + -7.12998e+04 -3.60485e+06 -6.12720e+05 + -7.13104e+04 -3.60487e+06 -6.12638e+05 + -7.13209e+04 -3.60488e+06 -6.12556e+05 + -7.13314e+04 -3.60490e+06 -6.12473e+05 + -7.13419e+04 -3.60491e+06 -6.12391e+05 + -7.13524e+04 -3.60493e+06 -6.12309e+05 + + +EPHEM_RATES + -4.31226e+02 -6.11764e+02 3.36659e+03 + -4.31227e+02 -6.11686e+02 3.36661e+03 + -4.31227e+02 -6.11608e+02 3.36662e+03 + -4.31228e+02 -6.11530e+02 3.36663e+03 + -4.31229e+02 -6.11452e+02 3.36665e+03 + -4.31229e+02 -6.11374e+02 3.36666e+03 + -4.31230e+02 -6.11296e+02 3.36667e+03 + -4.31231e+02 -6.11217e+02 3.36669e+03 + -4.31231e+02 -6.11139e+02 3.36670e+03 + -4.31232e+02 -6.11061e+02 3.36672e+03 + -4.31233e+02 -6.10983e+02 3.36673e+03 + -4.31233e+02 -6.10905e+02 3.36674e+03 + -4.31234e+02 -6.10827e+02 3.36676e+03 + -4.31235e+02 -6.10748e+02 3.36677e+03 + -4.31235e+02 -6.10670e+02 3.36678e+03 + -4.31236e+02 -6.10592e+02 3.36680e+03 + -4.31237e+02 -6.10514e+02 3.36681e+03 + -4.31237e+02 -6.10436e+02 3.36682e+03 + -4.31238e+02 -6.10358e+02 3.36684e+03 + -4.31239e+02 -6.10280e+02 3.36685e+03 + -4.31240e+02 -6.10201e+02 3.36686e+03 + -4.31240e+02 -6.10123e+02 3.36688e+03 + -4.31241e+02 -6.10045e+02 3.36689e+03 + -4.31242e+02 -6.09967e+02 3.36690e+03 + -4.31242e+02 -6.09889e+02 3.36692e+03 + -4.31243e+02 -6.09811e+02 3.36693e+03 + -4.31244e+02 -6.09732e+02 3.36695e+03 + -4.31244e+02 -6.09654e+02 3.36696e+03 + -4.31245e+02 -6.09576e+02 3.36697e+03 + -4.31246e+02 -6.09498e+02 3.36699e+03 + -4.31246e+02 -6.09420e+02 3.36700e+03 + -4.31247e+02 -6.09342e+02 3.36701e+03 + -4.31248e+02 -6.09264e+02 3.36703e+03 + -4.31248e+02 -6.09185e+02 3.36704e+03 + -4.31249e+02 -6.09107e+02 3.36705e+03 + -4.31250e+02 -6.09029e+02 3.36707e+03 + -4.31250e+02 -6.08951e+02 3.36708e+03 + -4.31251e+02 -6.08873e+02 3.36709e+03 + -4.31252e+02 -6.08795e+02 3.36711e+03 + -4.31252e+02 -6.08716e+02 3.36712e+03 + -4.31253e+02 -6.08638e+02 3.36713e+03 + -4.31254e+02 -6.08560e+02 3.36715e+03 + -4.31254e+02 -6.08482e+02 3.36716e+03 + -4.31255e+02 -6.08404e+02 3.36718e+03 + -4.31255e+02 -6.08326e+02 3.36719e+03 + -4.31256e+02 -6.08247e+02 3.36720e+03 + -4.31257e+02 -6.08169e+02 3.36722e+03 + -4.31257e+02 -6.08091e+02 3.36723e+03 + -4.31258e+02 -6.08013e+02 3.36724e+03 + -4.31259e+02 -6.07935e+02 3.36726e+03 + -4.31259e+02 -6.07857e+02 3.36727e+03 + -4.31260e+02 -6.07778e+02 3.36728e+03 + -4.31261e+02 -6.07700e+02 3.36730e+03 + -4.31261e+02 -6.07622e+02 3.36731e+03 + -4.31262e+02 -6.07544e+02 3.36732e+03 + -4.31263e+02 -6.07466e+02 3.36734e+03 + -4.31263e+02 -6.07388e+02 3.36735e+03 + -4.31264e+02 -6.07310e+02 3.36736e+03 + -4.31265e+02 -6.07231e+02 3.36738e+03 + -4.31265e+02 -6.07153e+02 3.36739e+03 + -4.31266e+02 -6.07075e+02 3.36740e+03 + -4.31267e+02 -6.06997e+02 3.36742e+03 + -4.31267e+02 -6.06919e+02 3.36743e+03 + -4.31268e+02 -6.06841e+02 3.36744e+03 + -4.31269e+02 -6.06762e+02 3.36746e+03 + -4.31269e+02 -6.06684e+02 3.36747e+03 + -4.31270e+02 -6.06606e+02 3.36749e+03 + -4.31271e+02 -6.06528e+02 3.36750e+03 + -4.31271e+02 -6.06450e+02 3.36751e+03 + -4.31272e+02 -6.06372e+02 3.36753e+03 + -4.31272e+02 -6.06293e+02 3.36754e+03 + -4.31273e+02 -6.06215e+02 3.36755e+03 + -4.31274e+02 -6.06137e+02 3.36757e+03 + -4.31274e+02 -6.06059e+02 3.36758e+03 + -4.31275e+02 -6.05981e+02 3.36759e+03 + -4.31276e+02 -6.05903e+02 3.36761e+03 + -4.31276e+02 -6.05824e+02 3.36762e+03 + -4.31277e+02 -6.05746e+02 3.36763e+03 + -4.31278e+02 -6.05668e+02 3.36765e+03 + -4.31278e+02 -6.05590e+02 3.36766e+03 + -4.31279e+02 -6.05512e+02 3.36767e+03 + -4.31280e+02 -6.05434e+02 3.36769e+03 + -4.31280e+02 -6.05355e+02 3.36770e+03 + -4.31281e+02 -6.05277e+02 3.36771e+03 + -4.31281e+02 -6.05199e+02 3.36773e+03 + -4.31282e+02 -6.05121e+02 3.36774e+03 + -4.31283e+02 -6.05043e+02 3.36775e+03 + -4.31283e+02 -6.04965e+02 3.36777e+03 + -4.31284e+02 -6.04886e+02 3.36778e+03 + -4.31285e+02 -6.04808e+02 3.36779e+03 + -4.31285e+02 -6.04730e+02 3.36781e+03 + -4.31286e+02 -6.04652e+02 3.36782e+03 + -4.31286e+02 -6.04574e+02 3.36783e+03 + -4.31287e+02 -6.04496e+02 3.36785e+03 + -4.31288e+02 -6.04417e+02 3.36786e+03 + -4.31288e+02 -6.04339e+02 3.36787e+03 + -4.31289e+02 -6.04261e+02 3.36789e+03 + -4.31290e+02 -6.04183e+02 3.36790e+03 + -4.31290e+02 -6.04105e+02 3.36791e+03 + -4.31291e+02 -6.04026e+02 3.36793e+03 + -4.31292e+02 -6.03948e+02 3.36794e+03 + -4.31292e+02 -6.03870e+02 3.36795e+03 + -4.31293e+02 -6.03792e+02 3.36797e+03 + -4.31293e+02 -6.03714e+02 3.36798e+03 + -4.31294e+02 -6.03636e+02 3.36800e+03 + -4.31295e+02 -6.03557e+02 3.36801e+03 + -4.31295e+02 -6.03479e+02 3.36802e+03 + -4.31296e+02 -6.03401e+02 3.36804e+03 + -4.31297e+02 -6.03323e+02 3.36805e+03 + -4.31297e+02 -6.03245e+02 3.36806e+03 + -4.31298e+02 -6.03167e+02 3.36808e+03 + -4.31298e+02 -6.03088e+02 3.36809e+03 + -4.31299e+02 -6.03010e+02 3.36810e+03 + -4.31300e+02 -6.02932e+02 3.36812e+03 + -4.31300e+02 -6.02854e+02 3.36813e+03 + -4.31301e+02 -6.02776e+02 3.36814e+03 + -4.31302e+02 -6.02697e+02 3.36816e+03 + -4.31302e+02 -6.02619e+02 3.36817e+03 + -4.31303e+02 -6.02541e+02 3.36818e+03 + -4.31303e+02 -6.02463e+02 3.36820e+03 + -4.31304e+02 -6.02385e+02 3.36821e+03 + -4.31305e+02 -6.02307e+02 3.36822e+03 + -4.31305e+02 -6.02228e+02 3.36824e+03 + -4.31306e+02 -6.02150e+02 3.36825e+03 + -4.31307e+02 -6.02072e+02 3.36826e+03 + -4.31307e+02 -6.01994e+02 3.36828e+03 + -4.31308e+02 -6.01916e+02 3.36829e+03 + -4.31308e+02 -6.01837e+02 3.36830e+03 + -4.31309e+02 -6.01759e+02 3.36832e+03 + -4.31310e+02 -6.01681e+02 3.36833e+03 + -4.31310e+02 -6.01603e+02 3.36834e+03 + -4.31311e+02 -6.01525e+02 3.36836e+03 + -4.31312e+02 -6.01446e+02 3.36837e+03 + -4.31312e+02 -6.01368e+02 3.36838e+03 + -4.31313e+02 -6.01290e+02 3.36840e+03 + -4.31313e+02 -6.01212e+02 3.36841e+03 + -4.31314e+02 -6.01134e+02 3.36842e+03 + -4.31315e+02 -6.01056e+02 3.36844e+03 + -4.31315e+02 -6.00977e+02 3.36845e+03 + -4.31316e+02 -6.00899e+02 3.36846e+03 + -4.31316e+02 -6.00821e+02 3.36848e+03 + -4.31317e+02 -6.00743e+02 3.36849e+03 + -4.31318e+02 -6.00665e+02 3.36850e+03 + -4.31318e+02 -6.00586e+02 3.36852e+03 + -4.31319e+02 -6.00508e+02 3.36853e+03 + -4.31319e+02 -6.00430e+02 3.36854e+03 + -4.31320e+02 -6.00352e+02 3.36856e+03 + -4.31321e+02 -6.00274e+02 3.36857e+03 + -4.31321e+02 -6.00196e+02 3.36858e+03 + -4.31322e+02 -6.00117e+02 3.36860e+03 + -4.31322e+02 -6.00039e+02 3.36861e+03 + -4.31323e+02 -5.99961e+02 3.36862e+03 + -4.31324e+02 -5.99883e+02 3.36864e+03 + -4.31324e+02 -5.99805e+02 3.36865e+03 + -4.31325e+02 -5.99726e+02 3.36866e+03 + -4.31325e+02 -5.99648e+02 3.36868e+03 + -4.31326e+02 -5.99570e+02 3.36869e+03 + -4.31327e+02 -5.99492e+02 3.36870e+03 + -4.31327e+02 -5.99414e+02 3.36872e+03 + -4.31328e+02 -5.99336e+02 3.36873e+03 + -4.31328e+02 -5.99257e+02 3.36874e+03 + -4.31329e+02 -5.99179e+02 3.36876e+03 + -4.31330e+02 -5.99101e+02 3.36877e+03 + -4.31330e+02 -5.99023e+02 3.36878e+03 + -4.31331e+02 -5.98945e+02 3.36880e+03 + -4.31331e+02 -5.98867e+02 3.36881e+03 + -4.31332e+02 -5.98789e+02 3.36882e+03 + -4.31332e+02 -5.98711e+02 3.36883e+03 + -4.31333e+02 -5.98632e+02 3.36885e+03 + -4.31333e+02 -5.98554e+02 3.36886e+03 + -4.31334e+02 -5.98476e+02 3.36887e+03 + -4.31334e+02 -5.98398e+02 3.36889e+03 + -4.31335e+02 -5.98320e+02 3.36890e+03 + -4.31335e+02 -5.98242e+02 3.36891e+03 + -4.31336e+02 -5.98164e+02 3.36893e+03 + -4.31337e+02 -5.98085e+02 3.36894e+03 + -4.31337e+02 -5.98007e+02 3.36895e+03 + -4.31338e+02 -5.97929e+02 3.36897e+03 + -4.31338e+02 -5.97851e+02 3.36898e+03 + -4.31339e+02 -5.97773e+02 3.36899e+03 + -4.31339e+02 -5.97695e+02 3.36901e+03 + -4.31340e+02 -5.97616e+02 3.36902e+03 + -4.31341e+02 -5.97538e+02 3.36903e+03 + -4.31341e+02 -5.97460e+02 3.36905e+03 + -4.31342e+02 -5.97382e+02 3.36906e+03 + -4.31342e+02 -5.97304e+02 3.36907e+03 + -4.31343e+02 -5.97225e+02 3.36909e+03 + -4.31343e+02 -5.97147e+02 3.36910e+03 + -4.31344e+02 -5.97069e+02 3.36911e+03 + -4.31345e+02 -5.96991e+02 3.36913e+03 + -4.31345e+02 -5.96913e+02 3.36914e+03 + -4.31346e+02 -5.96834e+02 3.36915e+03 + -4.31346e+02 -5.96756e+02 3.36917e+03 + -4.31347e+02 -5.96678e+02 3.36918e+03 + -4.31348e+02 -5.96600e+02 3.36919e+03 + -4.31348e+02 -5.96521e+02 3.36921e+03 + -4.31349e+02 -5.96443e+02 3.36922e+03 + -4.31350e+02 -5.96365e+02 3.36923e+03 + -4.31350e+02 -5.96287e+02 3.36925e+03 + -4.31351e+02 -5.96208e+02 3.36926e+03 + -4.31351e+02 -5.96130e+02 3.36927e+03 + -4.31352e+02 -5.96052e+02 3.36929e+03 + -4.31353e+02 -5.95974e+02 3.36930e+03 + -4.31353e+02 -5.95895e+02 3.36931e+03 + -4.31354e+02 -5.95817e+02 3.36932e+03 + -4.31355e+02 -5.95739e+02 3.36934e+03 + -4.31355e+02 -5.95661e+02 3.36935e+03 + -4.31356e+02 -5.95582e+02 3.36936e+03 + -4.31357e+02 -5.95504e+02 3.36938e+03 + -4.31357e+02 -5.95426e+02 3.36939e+03 + -4.31358e+02 -5.95347e+02 3.36940e+03 + -4.31359e+02 -5.95269e+02 3.36942e+03 + -4.31359e+02 -5.95191e+02 3.36943e+03 + -4.31360e+02 -5.95113e+02 3.36944e+03 + -4.31361e+02 -5.95034e+02 3.36946e+03 + -4.31361e+02 -5.94956e+02 3.36947e+03 + -4.31362e+02 -5.94878e+02 3.36948e+03 + -4.31363e+02 -5.94799e+02 3.36950e+03 + -4.31363e+02 -5.94721e+02 3.36951e+03 + -4.31364e+02 -5.94643e+02 3.36952e+03 + -4.31365e+02 -5.94564e+02 3.36954e+03 + + +DT_QUAT 4.02892e-02 +T0_QUAT -2.82024e+00 +NUMBER_OF_QUATERNIONS 141 +QUATERNIONS + -3.89055e-01 -5.17688e-01 -5.42201e-01 5.35399e-01 + -3.89067e-01 -5.17697e-01 -5.42193e-01 5.35390e-01 + -3.89078e-01 -5.17706e-01 -5.42184e-01 5.35382e-01 + -3.89090e-01 -5.17715e-01 -5.42175e-01 5.35373e-01 + -3.89102e-01 -5.17724e-01 -5.42167e-01 5.35364e-01 + -3.89113e-01 -5.17733e-01 -5.42158e-01 5.35356e-01 + -3.89125e-01 -5.17743e-01 -5.42149e-01 5.35347e-01 + -3.89137e-01 -5.17752e-01 -5.42141e-01 5.35339e-01 + -3.89148e-01 -5.17761e-01 -5.42132e-01 5.35330e-01 + -3.89160e-01 -5.17770e-01 -5.42123e-01 5.35321e-01 + -3.89172e-01 -5.17779e-01 -5.42115e-01 5.35313e-01 + -3.89183e-01 -5.17788e-01 -5.42106e-01 5.35304e-01 + -3.89195e-01 -5.17798e-01 -5.42097e-01 5.35296e-01 + -3.89207e-01 -5.17807e-01 -5.42088e-01 5.35287e-01 + -3.89218e-01 -5.17816e-01 -5.42080e-01 5.35279e-01 + -3.89230e-01 -5.17825e-01 -5.42071e-01 5.35270e-01 + -3.89242e-01 -5.17834e-01 -5.42062e-01 5.35261e-01 + -3.89254e-01 -5.17843e-01 -5.42054e-01 5.35253e-01 + -3.89265e-01 -5.17853e-01 -5.42045e-01 5.35244e-01 + -3.89277e-01 -5.17862e-01 -5.42036e-01 5.35236e-01 + -3.89289e-01 -5.17871e-01 -5.42028e-01 5.35227e-01 + -3.89300e-01 -5.17880e-01 -5.42019e-01 5.35218e-01 + -3.89312e-01 -5.17889e-01 -5.42010e-01 5.35210e-01 + -3.89324e-01 -5.17898e-01 -5.42002e-01 5.35201e-01 + -3.89335e-01 -5.17908e-01 -5.41993e-01 5.35193e-01 + -3.89347e-01 -5.17917e-01 -5.41984e-01 5.35184e-01 + -3.89359e-01 -5.17926e-01 -5.41976e-01 5.35176e-01 + -3.89371e-01 -5.17935e-01 -5.41967e-01 5.35167e-01 + -3.89382e-01 -5.17944e-01 -5.41958e-01 5.35158e-01 + -3.89394e-01 -5.17953e-01 -5.41950e-01 5.35150e-01 + -3.89406e-01 -5.17962e-01 -5.41941e-01 5.35141e-01 + -3.89417e-01 -5.17972e-01 -5.41932e-01 5.35133e-01 + -3.89429e-01 -5.17981e-01 -5.41924e-01 5.35124e-01 + -3.89441e-01 -5.17990e-01 -5.41915e-01 5.35115e-01 + -3.89453e-01 -5.17999e-01 -5.41906e-01 5.35107e-01 + -3.89464e-01 -5.18008e-01 -5.41898e-01 5.35098e-01 + -3.89476e-01 -5.18017e-01 -5.41889e-01 5.35089e-01 + -3.89488e-01 -5.18026e-01 -5.41880e-01 5.35081e-01 + -3.89500e-01 -5.18035e-01 -5.41872e-01 5.35072e-01 + -3.89511e-01 -5.18045e-01 -5.41863e-01 5.35064e-01 + -3.89523e-01 -5.18054e-01 -5.41854e-01 5.35055e-01 + -3.89535e-01 -5.18063e-01 -5.41846e-01 5.35046e-01 + -3.89547e-01 -5.18072e-01 -5.41837e-01 5.35038e-01 + -3.89558e-01 -5.18081e-01 -5.41829e-01 5.35029e-01 + -3.89570e-01 -5.18090e-01 -5.41820e-01 5.35021e-01 + -3.89582e-01 -5.18099e-01 -5.41811e-01 5.35012e-01 + -3.89594e-01 -5.18108e-01 -5.41803e-01 5.35003e-01 + -3.89605e-01 -5.18117e-01 -5.41794e-01 5.34995e-01 + -3.89617e-01 -5.18127e-01 -5.41785e-01 5.34986e-01 + -3.89629e-01 -5.18136e-01 -5.41777e-01 5.34977e-01 + -3.89641e-01 -5.18145e-01 -5.41768e-01 5.34969e-01 + -3.89652e-01 -5.18154e-01 -5.41759e-01 5.34960e-01 + -3.89664e-01 -5.18163e-01 -5.41751e-01 5.34952e-01 + -3.89676e-01 -5.18172e-01 -5.41742e-01 5.34943e-01 + -3.89688e-01 -5.18181e-01 -5.41733e-01 5.34934e-01 + -3.89700e-01 -5.18190e-01 -5.41725e-01 5.34926e-01 + -3.89711e-01 -5.18199e-01 -5.41716e-01 5.34917e-01 + -3.89723e-01 -5.18209e-01 -5.41707e-01 5.34908e-01 + -3.89735e-01 -5.18218e-01 -5.41699e-01 5.34900e-01 + -3.89747e-01 -5.18227e-01 -5.41690e-01 5.34891e-01 + -3.89759e-01 -5.18236e-01 -5.41681e-01 5.34882e-01 + -3.89770e-01 -5.18245e-01 -5.41673e-01 5.34874e-01 + -3.89782e-01 -5.18254e-01 -5.41664e-01 5.34865e-01 + -3.89794e-01 -5.18263e-01 -5.41655e-01 5.34856e-01 + -3.89806e-01 -5.18272e-01 -5.41647e-01 5.34848e-01 + -3.89818e-01 -5.18281e-01 -5.41638e-01 5.34839e-01 + -3.89829e-01 -5.18290e-01 -5.41630e-01 5.34831e-01 + -3.89841e-01 -5.18299e-01 -5.41621e-01 5.34822e-01 + -3.89853e-01 -5.18308e-01 -5.41612e-01 5.34813e-01 + -3.89865e-01 -5.18318e-01 -5.41604e-01 5.34805e-01 + -3.89877e-01 -5.18327e-01 -5.41595e-01 5.34796e-01 + -3.89888e-01 -5.18336e-01 -5.41586e-01 5.34787e-01 + -3.89900e-01 -5.18345e-01 -5.41578e-01 5.34779e-01 + -3.89912e-01 -5.18354e-01 -5.41569e-01 5.34770e-01 + -3.89924e-01 -5.18363e-01 -5.41560e-01 5.34761e-01 + -3.89936e-01 -5.18372e-01 -5.41552e-01 5.34753e-01 + -3.89948e-01 -5.18381e-01 -5.41543e-01 5.34744e-01 + -3.89959e-01 -5.18390e-01 -5.41534e-01 5.34735e-01 + -3.89971e-01 -5.18399e-01 -5.41526e-01 5.34727e-01 + -3.89983e-01 -5.18408e-01 -5.41517e-01 5.34718e-01 + -3.89995e-01 -5.18417e-01 -5.41509e-01 5.34709e-01 + -3.90007e-01 -5.18426e-01 -5.41500e-01 5.34701e-01 + -3.90019e-01 -5.18435e-01 -5.41491e-01 5.34692e-01 + -3.90030e-01 -5.18444e-01 -5.41483e-01 5.34683e-01 + -3.90042e-01 -5.18454e-01 -5.41474e-01 5.34675e-01 + -3.90054e-01 -5.18463e-01 -5.41465e-01 5.34666e-01 + -3.90066e-01 -5.18472e-01 -5.41457e-01 5.34657e-01 + -3.90078e-01 -5.18481e-01 -5.41448e-01 5.34649e-01 + -3.90090e-01 -5.18490e-01 -5.41439e-01 5.34640e-01 + -3.90101e-01 -5.18499e-01 -5.41431e-01 5.34631e-01 + -3.90113e-01 -5.18508e-01 -5.41422e-01 5.34622e-01 + -3.90125e-01 -5.18517e-01 -5.41414e-01 5.34614e-01 + -3.90137e-01 -5.18526e-01 -5.41405e-01 5.34605e-01 + -3.90149e-01 -5.18535e-01 -5.41396e-01 5.34596e-01 + -3.90161e-01 -5.18544e-01 -5.41388e-01 5.34588e-01 + -3.90173e-01 -5.18553e-01 -5.41379e-01 5.34579e-01 + -3.90185e-01 -5.18562e-01 -5.41370e-01 5.34570e-01 + -3.90196e-01 -5.18571e-01 -5.41362e-01 5.34562e-01 + -3.90208e-01 -5.18580e-01 -5.41353e-01 5.34553e-01 + -3.90220e-01 -5.18589e-01 -5.41345e-01 5.34544e-01 + -3.90232e-01 -5.18598e-01 -5.41336e-01 5.34536e-01 + -3.90244e-01 -5.18607e-01 -5.41327e-01 5.34527e-01 + -3.90256e-01 -5.18616e-01 -5.41319e-01 5.34518e-01 + -3.90268e-01 -5.18625e-01 -5.41310e-01 5.34509e-01 + -3.90280e-01 -5.18634e-01 -5.41301e-01 5.34501e-01 + -3.90291e-01 -5.18643e-01 -5.41293e-01 5.34492e-01 + -3.90303e-01 -5.18652e-01 -5.41284e-01 5.34483e-01 + -3.90315e-01 -5.18661e-01 -5.41276e-01 5.34475e-01 + -3.90327e-01 -5.18670e-01 -5.41267e-01 5.34466e-01 + -3.90339e-01 -5.18679e-01 -5.41258e-01 5.34457e-01 + -3.90351e-01 -5.18688e-01 -5.41250e-01 5.34449e-01 + -3.90363e-01 -5.18697e-01 -5.41241e-01 5.34440e-01 + -3.90375e-01 -5.18706e-01 -5.41232e-01 5.34431e-01 + -3.90387e-01 -5.18715e-01 -5.41224e-01 5.34422e-01 + -3.90399e-01 -5.18724e-01 -5.41215e-01 5.34414e-01 + -3.90411e-01 -5.18733e-01 -5.41207e-01 5.34405e-01 + -3.90422e-01 -5.18742e-01 -5.41198e-01 5.34396e-01 + -3.90434e-01 -5.18751e-01 -5.41189e-01 5.34388e-01 + -3.90446e-01 -5.18760e-01 -5.41181e-01 5.34379e-01 + -3.90458e-01 -5.18769e-01 -5.41172e-01 5.34370e-01 + -3.90470e-01 -5.18778e-01 -5.41164e-01 5.34361e-01 + -3.90482e-01 -5.18787e-01 -5.41155e-01 5.34353e-01 + -3.90494e-01 -5.18796e-01 -5.41146e-01 5.34344e-01 + -3.90506e-01 -5.18805e-01 -5.41138e-01 5.34335e-01 + -3.90518e-01 -5.18814e-01 -5.41129e-01 5.34326e-01 + -3.90530e-01 -5.18823e-01 -5.41120e-01 5.34318e-01 + -3.90542e-01 -5.18832e-01 -5.41112e-01 5.34309e-01 + -3.90554e-01 -5.18841e-01 -5.41103e-01 5.34300e-01 + -3.90566e-01 -5.18850e-01 -5.41095e-01 5.34292e-01 + -3.90578e-01 -5.18859e-01 -5.41086e-01 5.34283e-01 + -3.90589e-01 -5.18868e-01 -5.41077e-01 5.34274e-01 + -3.90601e-01 -5.18877e-01 -5.41069e-01 5.34265e-01 + -3.90613e-01 -5.18886e-01 -5.41060e-01 5.34257e-01 + -3.90625e-01 -5.18895e-01 -5.41052e-01 5.34248e-01 + -3.90637e-01 -5.18904e-01 -5.41043e-01 5.34239e-01 + -3.90649e-01 -5.18913e-01 -5.41034e-01 5.34230e-01 + -3.90661e-01 -5.18922e-01 -5.41026e-01 5.34222e-01 + -3.90673e-01 -5.18931e-01 -5.41017e-01 5.34213e-01 + -3.90685e-01 -5.18940e-01 -5.41009e-01 5.34204e-01 + -3.90697e-01 -5.18949e-01 -5.41000e-01 5.34195e-01 + -3.90709e-01 -5.18958e-01 -5.40991e-01 5.34187e-01 + + +SCAN_DURATION 4.87500e+00 +INT_TIME 8.12499e-05 + +ALONG_SCAN_PIXEL_SIZE 1.19902e-02 +CROSS_SCAN_PIXEL_SIZE 1.20000e-02 + +CENTER_GP -1.74024e-01 -1.60194e+00 0.00000e+00 +SENSOR_POSITION -1.72712e-01 -1.59027e+00 2.58254e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 60000 +TOTAL_SAMPLES 20000 + + + + +IKCODE -74699 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 0.00000e+00 0.00000e+00 0.00000e+00 +ITRANSS 0.00000e+00 0.00000e+00 -8.33333e+01 +ITRANSL 7.74982e+03 8.33333e+01 0.00000e+00 +DETECTOR_SAMPLE_ORIGIN 1.00005e+04 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 3.84597e+08 +CENTER_EPHEMERIS_TIME 3.84597e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_RED5_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_RED5_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..26b9255867c85e23e073f60ad8ab38f326b9862c --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_RED5_keywords.txt @@ -0,0 +1,428 @@ +RECTIFICATION_TERMS + 1.75000e+04 0.00000e+00 1.00000e+00 + 5.12000e+02 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.73935e-01 -1.60673e+00 0.00000e+00 +LOAD_PT -1.73935e-01 -1.60673e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 1.19949e+04 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 1.75000e+04 4.17314e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 5.12000e+02 0.00000e+00 4.16666e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.19949e+04 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 6.23557e-02 +T0_EPHEM -3.42956e+00 +NUMBER_OF_EPHEM 111 +EPHEM_PTS + -9.14824e+04 -3.60021e+06 -6.33221e+05 + -9.15095e+04 -3.60025e+06 -6.33011e+05 + -9.15367e+04 -3.60029e+06 -6.32801e+05 + -9.15638e+04 -3.60032e+06 -6.32591e+05 + -9.15909e+04 -3.60036e+06 -6.32381e+05 + -9.16181e+04 -3.60040e+06 -6.32171e+05 + -9.16452e+04 -3.60044e+06 -6.31961e+05 + -9.16724e+04 -3.60048e+06 -6.31751e+05 + -9.16995e+04 -3.60051e+06 -6.31541e+05 + -9.17267e+04 -3.60055e+06 -6.31331e+05 + -9.17538e+04 -3.60059e+06 -6.31121e+05 + -9.17810e+04 -3.60063e+06 -6.30912e+05 + -9.18081e+04 -3.60067e+06 -6.30702e+05 + -9.18352e+04 -3.60070e+06 -6.30492e+05 + -9.18624e+04 -3.60074e+06 -6.30282e+05 + -9.18895e+04 -3.60078e+06 -6.30072e+05 + -9.19167e+04 -3.60082e+06 -6.29862e+05 + -9.19438e+04 -3.60086e+06 -6.29652e+05 + -9.19710e+04 -3.60089e+06 -6.29442e+05 + -9.19981e+04 -3.60093e+06 -6.29232e+05 + -9.20253e+04 -3.60097e+06 -6.29022e+05 + -9.20524e+04 -3.60101e+06 -6.28812e+05 + -9.20795e+04 -3.60105e+06 -6.28602e+05 + -9.21067e+04 -3.60108e+06 -6.28392e+05 + -9.21338e+04 -3.60112e+06 -6.28182e+05 + -9.21610e+04 -3.60116e+06 -6.27972e+05 + -9.21881e+04 -3.60120e+06 -6.27762e+05 + -9.22153e+04 -3.60124e+06 -6.27552e+05 + -9.22424e+04 -3.60127e+06 -6.27342e+05 + -9.22696e+04 -3.60131e+06 -6.27132e+05 + -9.22967e+04 -3.60135e+06 -6.26922e+05 + -9.23238e+04 -3.60139e+06 -6.26712e+05 + -9.23510e+04 -3.60143e+06 -6.26502e+05 + -9.23781e+04 -3.60146e+06 -6.26292e+05 + -9.24053e+04 -3.60150e+06 -6.26083e+05 + -9.24324e+04 -3.60154e+06 -6.25873e+05 + -9.24596e+04 -3.60158e+06 -6.25663e+05 + -9.24867e+04 -3.60161e+06 -6.25453e+05 + -9.25139e+04 -3.60165e+06 -6.25243e+05 + -9.25410e+04 -3.60169e+06 -6.25033e+05 + -9.25682e+04 -3.60173e+06 -6.24823e+05 + -9.25953e+04 -3.60176e+06 -6.24613e+05 + -9.26224e+04 -3.60180e+06 -6.24403e+05 + -9.26496e+04 -3.60184e+06 -6.24193e+05 + -9.26767e+04 -3.60188e+06 -6.23983e+05 + -9.27039e+04 -3.60192e+06 -6.23773e+05 + -9.27310e+04 -3.60195e+06 -6.23563e+05 + -9.27582e+04 -3.60199e+06 -6.23353e+05 + -9.27853e+04 -3.60203e+06 -6.23143e+05 + -9.28125e+04 -3.60207e+06 -6.22933e+05 + -9.28396e+04 -3.60210e+06 -6.22723e+05 + -9.28668e+04 -3.60214e+06 -6.22513e+05 + -9.28939e+04 -3.60218e+06 -6.22302e+05 + -9.29210e+04 -3.60222e+06 -6.22092e+05 + -9.29482e+04 -3.60225e+06 -6.21882e+05 + -9.29753e+04 -3.60229e+06 -6.21672e+05 + -9.30025e+04 -3.60233e+06 -6.21462e+05 + -9.30296e+04 -3.60237e+06 -6.21252e+05 + -9.30568e+04 -3.60240e+06 -6.21042e+05 + -9.30839e+04 -3.60244e+06 -6.20832e+05 + -9.31111e+04 -3.60248e+06 -6.20622e+05 + -9.31382e+04 -3.60252e+06 -6.20412e+05 + -9.31654e+04 -3.60255e+06 -6.20202e+05 + -9.31925e+04 -3.60259e+06 -6.19992e+05 + -9.32196e+04 -3.60263e+06 -6.19782e+05 + -9.32468e+04 -3.60267e+06 -6.19572e+05 + -9.32739e+04 -3.60270e+06 -6.19362e+05 + -9.33011e+04 -3.60274e+06 -6.19152e+05 + -9.33282e+04 -3.60278e+06 -6.18942e+05 + -9.33554e+04 -3.60282e+06 -6.18732e+05 + -9.33825e+04 -3.60285e+06 -6.18522e+05 + -9.34097e+04 -3.60289e+06 -6.18312e+05 + -9.34368e+04 -3.60293e+06 -6.18102e+05 + -9.34640e+04 -3.60296e+06 -6.17892e+05 + -9.34911e+04 -3.60300e+06 -6.17682e+05 + -9.35182e+04 -3.60304e+06 -6.17471e+05 + -9.35454e+04 -3.60308e+06 -6.17261e+05 + -9.35725e+04 -3.60311e+06 -6.17051e+05 + -9.35997e+04 -3.60315e+06 -6.16841e+05 + -9.36268e+04 -3.60319e+06 -6.16631e+05 + -9.36540e+04 -3.60323e+06 -6.16421e+05 + -9.36811e+04 -3.60326e+06 -6.16211e+05 + -9.37083e+04 -3.60330e+06 -6.16001e+05 + -9.37354e+04 -3.60334e+06 -6.15791e+05 + -9.37626e+04 -3.60337e+06 -6.15581e+05 + -9.37897e+04 -3.60341e+06 -6.15371e+05 + -9.38169e+04 -3.60345e+06 -6.15161e+05 + -9.38440e+04 -3.60349e+06 -6.14950e+05 + -9.38711e+04 -3.60352e+06 -6.14740e+05 + -9.38983e+04 -3.60356e+06 -6.14530e+05 + -9.39254e+04 -3.60360e+06 -6.14320e+05 + -9.39526e+04 -3.60363e+06 -6.14110e+05 + -9.39797e+04 -3.60367e+06 -6.13900e+05 + -9.40069e+04 -3.60371e+06 -6.13690e+05 + -9.40340e+04 -3.60375e+06 -6.13480e+05 + -9.40612e+04 -3.60378e+06 -6.13270e+05 + -9.40883e+04 -3.60382e+06 -6.13060e+05 + -9.41155e+04 -3.60386e+06 -6.12849e+05 + -9.41426e+04 -3.60389e+06 -6.12639e+05 + -9.41698e+04 -3.60393e+06 -6.12429e+05 + -9.41969e+04 -3.60397e+06 -6.12219e+05 + -9.42240e+04 -3.60400e+06 -6.12009e+05 + -9.42512e+04 -3.60404e+06 -6.11799e+05 + -9.42783e+04 -3.60408e+06 -6.11589e+05 + -9.43055e+04 -3.60412e+06 -6.11379e+05 + -9.43326e+04 -3.60415e+06 -6.11168e+05 + -9.43598e+04 -3.60419e+06 -6.10958e+05 + -9.43869e+04 -3.60423e+06 -6.10748e+05 + -9.44141e+04 -3.60426e+06 -6.10538e+05 + -9.44412e+04 -3.60430e+06 -6.10328e+05 + -9.44684e+04 -3.60434e+06 -6.10118e+05 + + +EPHEM_RATES + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35315e+02 -6.10547e+02 3.36668e+03 + -4.35315e+02 -6.10347e+02 3.36671e+03 + -4.35316e+02 -6.10147e+02 3.36675e+03 + -4.35316e+02 -6.09947e+02 3.36678e+03 + -4.35316e+02 -6.09747e+02 3.36682e+03 + -4.35317e+02 -6.09547e+02 3.36685e+03 + -4.35317e+02 -6.09347e+02 3.36689e+03 + -4.35318e+02 -6.09147e+02 3.36692e+03 + -4.35318e+02 -6.08947e+02 3.36696e+03 + -4.35319e+02 -6.08747e+02 3.36699e+03 + -4.35319e+02 -6.08547e+02 3.36702e+03 + -4.35320e+02 -6.08347e+02 3.36706e+03 + -4.35320e+02 -6.08147e+02 3.36709e+03 + -4.35321e+02 -6.07947e+02 3.36713e+03 + -4.35321e+02 -6.07747e+02 3.36716e+03 + -4.35321e+02 -6.07547e+02 3.36720e+03 + -4.35322e+02 -6.07347e+02 3.36723e+03 + -4.35322e+02 -6.07147e+02 3.36727e+03 + -4.35323e+02 -6.06947e+02 3.36730e+03 + -4.35323e+02 -6.06747e+02 3.36734e+03 + -4.35324e+02 -6.06547e+02 3.36737e+03 + -4.35324e+02 -6.06347e+02 3.36740e+03 + -4.35324e+02 -6.06147e+02 3.36744e+03 + -4.35325e+02 -6.05947e+02 3.36747e+03 + -4.35325e+02 -6.05747e+02 3.36751e+03 + -4.35326e+02 -6.05547e+02 3.36754e+03 + -4.35326e+02 -6.05347e+02 3.36758e+03 + -4.35327e+02 -6.05147e+02 3.36761e+03 + -4.35327e+02 -6.04947e+02 3.36765e+03 + -4.35327e+02 -6.04747e+02 3.36768e+03 + -4.35328e+02 -6.04547e+02 3.36771e+03 + -4.35328e+02 -6.04347e+02 3.36775e+03 + -4.35328e+02 -6.04147e+02 3.36778e+03 + -4.35329e+02 -6.03947e+02 3.36782e+03 + -4.35329e+02 -6.03747e+02 3.36785e+03 + -4.35330e+02 -6.03547e+02 3.36789e+03 + -4.35330e+02 -6.03347e+02 3.36792e+03 + -4.35330e+02 -6.03147e+02 3.36796e+03 + -4.35331e+02 -6.02946e+02 3.36799e+03 + -4.35331e+02 -6.02746e+02 3.36802e+03 + -4.35331e+02 -6.02546e+02 3.36806e+03 + -4.35332e+02 -6.02346e+02 3.36809e+03 + -4.35332e+02 -6.02146e+02 3.36813e+03 + -4.35333e+02 -6.01946e+02 3.36816e+03 + -4.35333e+02 -6.01746e+02 3.36820e+03 + -4.35333e+02 -6.01546e+02 3.36823e+03 + -4.35334e+02 -6.01346e+02 3.36826e+03 + -4.35334e+02 -6.01146e+02 3.36830e+03 + -4.35334e+02 -6.00946e+02 3.36833e+03 + -4.35335e+02 -6.00746e+02 3.36837e+03 + -4.35335e+02 -6.00546e+02 3.36840e+03 + -4.35335e+02 -6.00346e+02 3.36843e+03 + -4.35336e+02 -6.00146e+02 3.36847e+03 + -4.35336e+02 -5.99946e+02 3.36850e+03 + -4.35336e+02 -5.99745e+02 3.36854e+03 + -4.35336e+02 -5.99545e+02 3.36857e+03 + -4.35337e+02 -5.99345e+02 3.36861e+03 + -4.35337e+02 -5.99145e+02 3.36864e+03 + -4.35337e+02 -5.98945e+02 3.36867e+03 + -4.35338e+02 -5.98745e+02 3.36871e+03 + -4.35338e+02 -5.98545e+02 3.36874e+03 + -4.35338e+02 -5.98345e+02 3.36878e+03 + -4.35339e+02 -5.98145e+02 3.36881e+03 + -4.35339e+02 -5.97945e+02 3.36884e+03 + -4.35339e+02 -5.97745e+02 3.36888e+03 + -4.35339e+02 -5.97545e+02 3.36891e+03 + -4.35340e+02 -5.97344e+02 3.36895e+03 + -4.35340e+02 -5.97144e+02 3.36898e+03 + -4.35340e+02 -5.96944e+02 3.36901e+03 + -4.35341e+02 -5.96744e+02 3.36905e+03 + -4.35341e+02 -5.96544e+02 3.36908e+03 + -4.35341e+02 -5.96344e+02 3.36912e+03 + -4.35341e+02 -5.96144e+02 3.36915e+03 + -4.35342e+02 -5.95944e+02 3.36918e+03 + -4.35342e+02 -5.95744e+02 3.36922e+03 + -4.35342e+02 -5.95544e+02 3.36925e+03 + -4.35342e+02 -5.95343e+02 3.36928e+03 + -4.35343e+02 -5.95143e+02 3.36932e+03 + -4.35343e+02 -5.94943e+02 3.36935e+03 + -4.35343e+02 -5.94743e+02 3.36939e+03 + -4.35343e+02 -5.94543e+02 3.36942e+03 + -4.35343e+02 -5.94343e+02 3.36945e+03 + -4.35344e+02 -5.94143e+02 3.36949e+03 + -4.35344e+02 -5.93943e+02 3.36952e+03 + -4.35344e+02 -5.93742e+02 3.36956e+03 + -4.35344e+02 -5.93542e+02 3.36959e+03 + -4.35345e+02 -5.93342e+02 3.36962e+03 + -4.35345e+02 -5.93142e+02 3.36966e+03 + -4.35345e+02 -5.92942e+02 3.36969e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + + +DT_QUAT 4.68956e-02 +T0_QUAT -3.28269e+00 +NUMBER_OF_QUATERNIONS 141 +QUATERNIONS + -3.95791e-01 -5.10895e-01 -5.49196e-01 5.29827e-01 + -3.95805e-01 -5.10906e-01 -5.49186e-01 5.29817e-01 + -3.95818e-01 -5.10917e-01 -5.49176e-01 5.29807e-01 + -3.95831e-01 -5.10928e-01 -5.49166e-01 5.29797e-01 + -3.95845e-01 -5.10938e-01 -5.49156e-01 5.29787e-01 + -3.95858e-01 -5.10949e-01 -5.49146e-01 5.29777e-01 + -3.95872e-01 -5.10960e-01 -5.49136e-01 5.29767e-01 + -3.95885e-01 -5.10971e-01 -5.49126e-01 5.29757e-01 + -3.95899e-01 -5.10982e-01 -5.49116e-01 5.29747e-01 + -3.95912e-01 -5.10992e-01 -5.49106e-01 5.29737e-01 + -3.95926e-01 -5.11003e-01 -5.49096e-01 5.29726e-01 + -3.95939e-01 -5.11014e-01 -5.49086e-01 5.29716e-01 + -3.95953e-01 -5.11025e-01 -5.49076e-01 5.29706e-01 + -3.95966e-01 -5.11036e-01 -5.49066e-01 5.29696e-01 + -3.95980e-01 -5.11046e-01 -5.49056e-01 5.29686e-01 + -3.95993e-01 -5.11057e-01 -5.49046e-01 5.29676e-01 + -3.96007e-01 -5.11068e-01 -5.49036e-01 5.29666e-01 + -3.96020e-01 -5.11079e-01 -5.49026e-01 5.29656e-01 + -3.96034e-01 -5.11090e-01 -5.49016e-01 5.29646e-01 + -3.96047e-01 -5.11100e-01 -5.49006e-01 5.29636e-01 + -3.96061e-01 -5.11111e-01 -5.48996e-01 5.29626e-01 + -3.96074e-01 -5.11122e-01 -5.48986e-01 5.29616e-01 + -3.96088e-01 -5.11133e-01 -5.48976e-01 5.29605e-01 + -3.96101e-01 -5.11143e-01 -5.48965e-01 5.29595e-01 + -3.96115e-01 -5.11154e-01 -5.48955e-01 5.29585e-01 + -3.96128e-01 -5.11165e-01 -5.48945e-01 5.29575e-01 + -3.96142e-01 -5.11176e-01 -5.48935e-01 5.29565e-01 + -3.96155e-01 -5.11186e-01 -5.48925e-01 5.29555e-01 + -3.96169e-01 -5.11197e-01 -5.48915e-01 5.29545e-01 + -3.96182e-01 -5.11208e-01 -5.48905e-01 5.29535e-01 + -3.96196e-01 -5.11219e-01 -5.48895e-01 5.29525e-01 + -3.96209e-01 -5.11229e-01 -5.48885e-01 5.29515e-01 + -3.96223e-01 -5.11240e-01 -5.48875e-01 5.29504e-01 + -3.96236e-01 -5.11251e-01 -5.48865e-01 5.29494e-01 + -3.96250e-01 -5.11262e-01 -5.48855e-01 5.29484e-01 + -3.96263e-01 -5.11272e-01 -5.48846e-01 5.29474e-01 + -3.96277e-01 -5.11283e-01 -5.48836e-01 5.29464e-01 + -3.96290e-01 -5.11294e-01 -5.48826e-01 5.29454e-01 + -3.96304e-01 -5.11305e-01 -5.48816e-01 5.29444e-01 + -3.96317e-01 -5.11315e-01 -5.48806e-01 5.29434e-01 + -3.96331e-01 -5.11326e-01 -5.48796e-01 5.29423e-01 + -3.96344e-01 -5.11337e-01 -5.48786e-01 5.29413e-01 + -3.96358e-01 -5.11347e-01 -5.48776e-01 5.29403e-01 + -3.96371e-01 -5.11358e-01 -5.48766e-01 5.29393e-01 + -3.96385e-01 -5.11369e-01 -5.48756e-01 5.29383e-01 + -3.96398e-01 -5.11380e-01 -5.48746e-01 5.29373e-01 + -3.96412e-01 -5.11390e-01 -5.48736e-01 5.29363e-01 + -3.96425e-01 -5.11401e-01 -5.48726e-01 5.29352e-01 + -3.96439e-01 -5.11412e-01 -5.48716e-01 5.29342e-01 + -3.96452e-01 -5.11422e-01 -5.48706e-01 5.29332e-01 + -3.96466e-01 -5.11433e-01 -5.48696e-01 5.29322e-01 + -3.96479e-01 -5.11444e-01 -5.48686e-01 5.29312e-01 + -3.96493e-01 -5.11455e-01 -5.48676e-01 5.29302e-01 + -3.96506e-01 -5.11465e-01 -5.48666e-01 5.29292e-01 + -3.96520e-01 -5.11476e-01 -5.48656e-01 5.29281e-01 + -3.96533e-01 -5.11487e-01 -5.48646e-01 5.29271e-01 + -3.96547e-01 -5.11497e-01 -5.48636e-01 5.29261e-01 + -3.96560e-01 -5.11508e-01 -5.48626e-01 5.29251e-01 + -3.96574e-01 -5.11519e-01 -5.48617e-01 5.29241e-01 + -3.96587e-01 -5.11529e-01 -5.48607e-01 5.29231e-01 + -3.96601e-01 -5.11540e-01 -5.48597e-01 5.29220e-01 + -3.96614e-01 -5.11551e-01 -5.48587e-01 5.29210e-01 + -3.96628e-01 -5.11561e-01 -5.48577e-01 5.29200e-01 + -3.96641e-01 -5.11572e-01 -5.48567e-01 5.29190e-01 + -3.96655e-01 -5.11583e-01 -5.48557e-01 5.29180e-01 + -3.96669e-01 -5.11593e-01 -5.48547e-01 5.29169e-01 + -3.96682e-01 -5.11604e-01 -5.48537e-01 5.29159e-01 + -3.96696e-01 -5.11615e-01 -5.48527e-01 5.29149e-01 + -3.96709e-01 -5.11625e-01 -5.48517e-01 5.29139e-01 + -3.96723e-01 -5.11636e-01 -5.48508e-01 5.29129e-01 + -3.96736e-01 -5.11647e-01 -5.48498e-01 5.29119e-01 + -3.96750e-01 -5.11657e-01 -5.48488e-01 5.29108e-01 + -3.96763e-01 -5.11668e-01 -5.48478e-01 5.29098e-01 + -3.96777e-01 -5.11679e-01 -5.48468e-01 5.29088e-01 + -3.96790e-01 -5.11689e-01 -5.48458e-01 5.29078e-01 + -3.96804e-01 -5.11700e-01 -5.48448e-01 5.29068e-01 + -3.96817e-01 -5.11711e-01 -5.48438e-01 5.29057e-01 + -3.96831e-01 -5.11721e-01 -5.48428e-01 5.29047e-01 + -3.96845e-01 -5.11732e-01 -5.48419e-01 5.29037e-01 + -3.96858e-01 -5.11742e-01 -5.48409e-01 5.29027e-01 + -3.96872e-01 -5.11753e-01 -5.48399e-01 5.29016e-01 + -3.96885e-01 -5.11764e-01 -5.48389e-01 5.29006e-01 + -3.96899e-01 -5.11774e-01 -5.48379e-01 5.28996e-01 + -3.96912e-01 -5.11785e-01 -5.48369e-01 5.28986e-01 + -3.96926e-01 -5.11796e-01 -5.48359e-01 5.28976e-01 + -3.96939e-01 -5.11806e-01 -5.48350e-01 5.28965e-01 + -3.96953e-01 -5.11817e-01 -5.48340e-01 5.28955e-01 + -3.96966e-01 -5.11827e-01 -5.48330e-01 5.28945e-01 + -3.96980e-01 -5.11838e-01 -5.48320e-01 5.28935e-01 + -3.96994e-01 -5.11849e-01 -5.48310e-01 5.28924e-01 + -3.97007e-01 -5.11859e-01 -5.48300e-01 5.28914e-01 + -3.97021e-01 -5.11870e-01 -5.48290e-01 5.28904e-01 + -3.97034e-01 -5.11881e-01 -5.48281e-01 5.28894e-01 + -3.97048e-01 -5.11891e-01 -5.48271e-01 5.28883e-01 + -3.97061e-01 -5.11902e-01 -5.48261e-01 5.28873e-01 + -3.97075e-01 -5.11912e-01 -5.48251e-01 5.28863e-01 + -3.97088e-01 -5.11923e-01 -5.48241e-01 5.28853e-01 + -3.97102e-01 -5.11934e-01 -5.48231e-01 5.28842e-01 + -3.97116e-01 -5.11944e-01 -5.48222e-01 5.28832e-01 + -3.97129e-01 -5.11955e-01 -5.48212e-01 5.28822e-01 + -3.97143e-01 -5.11965e-01 -5.48202e-01 5.28812e-01 + -3.97156e-01 -5.11976e-01 -5.48192e-01 5.28801e-01 + -3.97170e-01 -5.11986e-01 -5.48182e-01 5.28791e-01 + -3.97183e-01 -5.11997e-01 -5.48172e-01 5.28781e-01 + -3.97197e-01 -5.12008e-01 -5.48163e-01 5.28771e-01 + -3.97211e-01 -5.12018e-01 -5.48153e-01 5.28760e-01 + -3.97224e-01 -5.12029e-01 -5.48143e-01 5.28750e-01 + -3.97238e-01 -5.12039e-01 -5.48133e-01 5.28740e-01 + -3.97251e-01 -5.12050e-01 -5.48123e-01 5.28730e-01 + -3.97265e-01 -5.12061e-01 -5.48114e-01 5.28719e-01 + -3.97278e-01 -5.12071e-01 -5.48104e-01 5.28709e-01 + -3.97292e-01 -5.12082e-01 -5.48094e-01 5.28699e-01 + -3.97306e-01 -5.12092e-01 -5.48084e-01 5.28688e-01 + -3.97319e-01 -5.12103e-01 -5.48075e-01 5.28678e-01 + -3.97333e-01 -5.12113e-01 -5.48065e-01 5.28668e-01 + -3.97346e-01 -5.12124e-01 -5.48055e-01 5.28658e-01 + -3.97360e-01 -5.12134e-01 -5.48045e-01 5.28647e-01 + -3.97373e-01 -5.12145e-01 -5.48035e-01 5.28637e-01 + -3.97387e-01 -5.12156e-01 -5.48026e-01 5.28627e-01 + -3.97401e-01 -5.12166e-01 -5.48016e-01 5.28616e-01 + -3.97414e-01 -5.12177e-01 -5.48006e-01 5.28606e-01 + -3.97428e-01 -5.12187e-01 -5.47996e-01 5.28596e-01 + -3.97441e-01 -5.12198e-01 -5.47987e-01 5.28586e-01 + -3.97455e-01 -5.12208e-01 -5.47977e-01 5.28575e-01 + -3.97469e-01 -5.12219e-01 -5.47967e-01 5.28565e-01 + -3.97482e-01 -5.12229e-01 -5.47957e-01 5.28555e-01 + -3.97496e-01 -5.12240e-01 -5.47947e-01 5.28544e-01 + -3.97509e-01 -5.12250e-01 -5.47938e-01 5.28534e-01 + -3.97523e-01 -5.12261e-01 -5.47928e-01 5.28524e-01 + -3.97536e-01 -5.12271e-01 -5.47918e-01 5.28513e-01 + -3.97550e-01 -5.12282e-01 -5.47908e-01 5.28503e-01 + -3.97564e-01 -5.12292e-01 -5.47899e-01 5.28493e-01 + -3.97577e-01 -5.12303e-01 -5.47889e-01 5.28482e-01 + -3.97591e-01 -5.12313e-01 -5.47879e-01 5.28472e-01 + -3.97604e-01 -5.12324e-01 -5.47870e-01 5.28462e-01 + -3.97618e-01 -5.12335e-01 -5.47860e-01 5.28451e-01 + -3.97632e-01 -5.12345e-01 -5.47850e-01 5.28441e-01 + -3.97645e-01 -5.12356e-01 -5.47840e-01 5.28431e-01 + -3.97659e-01 -5.12366e-01 -5.47831e-01 5.28420e-01 + -3.97672e-01 -5.12377e-01 -5.47821e-01 5.28410e-01 + -3.97686e-01 -5.12387e-01 -5.47811e-01 5.28400e-01 + + +SCAN_DURATION 5.67437e+00 +INT_TIME 1.62124e-04 + +ALONG_SCAN_PIXEL_SIZE 2.39627e-02 +CROSS_SCAN_PIXEL_SIZE 2.40000e-02 + +CENTER_GP -1.73935e-01 -1.60673e+00 0.00000e+00 +SENSOR_POSITION -1.72826e-01 -1.59660e+00 2.57395e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 35000 +TOTAL_SAMPLES 1024 + + + + +IKCODE -74699 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF -4.85090e-03 2.41311e-07 -1.62368e-13 +ITRANSS -1.00086e+03 -8.69999e-03 -8.33332e+01 +ITRANSL 7.45789e+03 8.33332e+01 -8.69999e-03 +DETECTOR_SAMPLE_ORIGIN 1.02450e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET -3.20000e+01 +DETECTOR_SAMPLE_SUMMING 2.00000e+00 +STARTING_SAMPLE 1.50000e+00 +STARTING_LINE 1.50000e+00 +STARTING_EPHEMERIS_TIME 3.98801e+08 +CENTER_EPHEMERIS_TIME 3.98801e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_REDmos_hijitreged_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_REDmos_hijitreged_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..d09ecf6714e4617b3f65ea0763571e1c18fe7722 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hirise/truth/sed_ESP_028449_1700_REDmos_hijitreged_keywords.txt @@ -0,0 +1,428 @@ +RECTIFICATION_TERMS + 1.75000e+04 0.00000e+00 1.00000e+00 + 5.00000e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.73953e-01 -1.60673e+00 0.00000e+00 +LOAD_PT -1.73953e-01 -1.60673e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 1.19949e+04 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 1.75000e+04 4.17227e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 5.00000e+03 0.00000e+00 4.16666e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.19949e+04 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 6.23557e-02 +T0_EPHEM -3.42956e+00 +NUMBER_OF_EPHEM 111 +EPHEM_PTS + -9.14824e+04 -3.60021e+06 -6.33221e+05 + -9.15095e+04 -3.60025e+06 -6.33011e+05 + -9.15367e+04 -3.60029e+06 -6.32801e+05 + -9.15638e+04 -3.60032e+06 -6.32591e+05 + -9.15909e+04 -3.60036e+06 -6.32381e+05 + -9.16181e+04 -3.60040e+06 -6.32171e+05 + -9.16452e+04 -3.60044e+06 -6.31961e+05 + -9.16724e+04 -3.60048e+06 -6.31751e+05 + -9.16995e+04 -3.60051e+06 -6.31541e+05 + -9.17267e+04 -3.60055e+06 -6.31331e+05 + -9.17538e+04 -3.60059e+06 -6.31121e+05 + -9.17810e+04 -3.60063e+06 -6.30912e+05 + -9.18081e+04 -3.60067e+06 -6.30702e+05 + -9.18352e+04 -3.60070e+06 -6.30492e+05 + -9.18624e+04 -3.60074e+06 -6.30282e+05 + -9.18895e+04 -3.60078e+06 -6.30072e+05 + -9.19167e+04 -3.60082e+06 -6.29862e+05 + -9.19438e+04 -3.60086e+06 -6.29652e+05 + -9.19710e+04 -3.60089e+06 -6.29442e+05 + -9.19981e+04 -3.60093e+06 -6.29232e+05 + -9.20253e+04 -3.60097e+06 -6.29022e+05 + -9.20524e+04 -3.60101e+06 -6.28812e+05 + -9.20795e+04 -3.60105e+06 -6.28602e+05 + -9.21067e+04 -3.60108e+06 -6.28392e+05 + -9.21338e+04 -3.60112e+06 -6.28182e+05 + -9.21610e+04 -3.60116e+06 -6.27972e+05 + -9.21881e+04 -3.60120e+06 -6.27762e+05 + -9.22153e+04 -3.60124e+06 -6.27552e+05 + -9.22424e+04 -3.60127e+06 -6.27342e+05 + -9.22696e+04 -3.60131e+06 -6.27132e+05 + -9.22967e+04 -3.60135e+06 -6.26922e+05 + -9.23238e+04 -3.60139e+06 -6.26712e+05 + -9.23510e+04 -3.60143e+06 -6.26502e+05 + -9.23781e+04 -3.60146e+06 -6.26292e+05 + -9.24053e+04 -3.60150e+06 -6.26082e+05 + -9.24324e+04 -3.60154e+06 -6.25873e+05 + -9.24596e+04 -3.60158e+06 -6.25663e+05 + -9.24867e+04 -3.60161e+06 -6.25453e+05 + -9.25139e+04 -3.60165e+06 -6.25243e+05 + -9.25410e+04 -3.60169e+06 -6.25033e+05 + -9.25682e+04 -3.60173e+06 -6.24823e+05 + -9.25953e+04 -3.60176e+06 -6.24613e+05 + -9.26224e+04 -3.60180e+06 -6.24403e+05 + -9.26496e+04 -3.60184e+06 -6.24193e+05 + -9.26767e+04 -3.60188e+06 -6.23983e+05 + -9.27039e+04 -3.60192e+06 -6.23773e+05 + -9.27310e+04 -3.60195e+06 -6.23563e+05 + -9.27582e+04 -3.60199e+06 -6.23353e+05 + -9.27853e+04 -3.60203e+06 -6.23143e+05 + -9.28125e+04 -3.60207e+06 -6.22933e+05 + -9.28396e+04 -3.60210e+06 -6.22723e+05 + -9.28668e+04 -3.60214e+06 -6.22512e+05 + -9.28939e+04 -3.60218e+06 -6.22302e+05 + -9.29210e+04 -3.60222e+06 -6.22092e+05 + -9.29482e+04 -3.60225e+06 -6.21882e+05 + -9.29753e+04 -3.60229e+06 -6.21672e+05 + -9.30025e+04 -3.60233e+06 -6.21462e+05 + -9.30296e+04 -3.60237e+06 -6.21252e+05 + -9.30568e+04 -3.60240e+06 -6.21042e+05 + -9.30839e+04 -3.60244e+06 -6.20832e+05 + -9.31111e+04 -3.60248e+06 -6.20622e+05 + -9.31382e+04 -3.60252e+06 -6.20412e+05 + -9.31654e+04 -3.60255e+06 -6.20202e+05 + -9.31925e+04 -3.60259e+06 -6.19992e+05 + -9.32196e+04 -3.60263e+06 -6.19782e+05 + -9.32468e+04 -3.60267e+06 -6.19572e+05 + -9.32739e+04 -3.60270e+06 -6.19362e+05 + -9.33011e+04 -3.60274e+06 -6.19152e+05 + -9.33282e+04 -3.60278e+06 -6.18942e+05 + -9.33554e+04 -3.60282e+06 -6.18732e+05 + -9.33825e+04 -3.60285e+06 -6.18522e+05 + -9.34097e+04 -3.60289e+06 -6.18312e+05 + -9.34368e+04 -3.60293e+06 -6.18102e+05 + -9.34640e+04 -3.60296e+06 -6.17892e+05 + -9.34911e+04 -3.60300e+06 -6.17682e+05 + -9.35183e+04 -3.60304e+06 -6.17471e+05 + -9.35454e+04 -3.60308e+06 -6.17261e+05 + -9.35725e+04 -3.60311e+06 -6.17051e+05 + -9.35997e+04 -3.60315e+06 -6.16841e+05 + -9.36268e+04 -3.60319e+06 -6.16631e+05 + -9.36540e+04 -3.60323e+06 -6.16421e+05 + -9.36811e+04 -3.60326e+06 -6.16211e+05 + -9.37083e+04 -3.60330e+06 -6.16001e+05 + -9.37354e+04 -3.60334e+06 -6.15791e+05 + -9.37626e+04 -3.60337e+06 -6.15581e+05 + -9.37897e+04 -3.60341e+06 -6.15371e+05 + -9.38169e+04 -3.60345e+06 -6.15161e+05 + -9.38440e+04 -3.60349e+06 -6.14950e+05 + -9.38711e+04 -3.60352e+06 -6.14740e+05 + -9.38983e+04 -3.60356e+06 -6.14530e+05 + -9.39254e+04 -3.60360e+06 -6.14320e+05 + -9.39526e+04 -3.60363e+06 -6.14110e+05 + -9.39797e+04 -3.60367e+06 -6.13900e+05 + -9.40069e+04 -3.60371e+06 -6.13690e+05 + -9.40340e+04 -3.60375e+06 -6.13480e+05 + -9.40612e+04 -3.60378e+06 -6.13270e+05 + -9.40883e+04 -3.60382e+06 -6.13060e+05 + -9.41155e+04 -3.60386e+06 -6.12849e+05 + -9.41426e+04 -3.60389e+06 -6.12639e+05 + -9.41698e+04 -3.60393e+06 -6.12429e+05 + -9.41969e+04 -3.60397e+06 -6.12219e+05 + -9.42240e+04 -3.60400e+06 -6.12009e+05 + -9.42512e+04 -3.60404e+06 -6.11799e+05 + -9.42783e+04 -3.60408e+06 -6.11589e+05 + -9.43055e+04 -3.60412e+06 -6.11379e+05 + -9.43326e+04 -3.60415e+06 -6.11168e+05 + -9.43598e+04 -3.60419e+06 -6.10958e+05 + -9.43869e+04 -3.60423e+06 -6.10748e+05 + -9.44141e+04 -3.60426e+06 -6.10538e+05 + -9.44412e+04 -3.60430e+06 -6.10328e+05 + -9.44684e+04 -3.60434e+06 -6.10118e+05 + + +EPHEM_RATES + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35314e+02 -6.10647e+02 3.36666e+03 + -4.35315e+02 -6.10547e+02 3.36668e+03 + -4.35315e+02 -6.10347e+02 3.36671e+03 + -4.35316e+02 -6.10147e+02 3.36675e+03 + -4.35316e+02 -6.09947e+02 3.36678e+03 + -4.35316e+02 -6.09747e+02 3.36682e+03 + -4.35317e+02 -6.09547e+02 3.36685e+03 + -4.35317e+02 -6.09347e+02 3.36689e+03 + -4.35318e+02 -6.09147e+02 3.36692e+03 + -4.35318e+02 -6.08947e+02 3.36696e+03 + -4.35319e+02 -6.08747e+02 3.36699e+03 + -4.35319e+02 -6.08547e+02 3.36702e+03 + -4.35320e+02 -6.08347e+02 3.36706e+03 + -4.35320e+02 -6.08147e+02 3.36709e+03 + -4.35321e+02 -6.07947e+02 3.36713e+03 + -4.35321e+02 -6.07747e+02 3.36716e+03 + -4.35321e+02 -6.07547e+02 3.36720e+03 + -4.35322e+02 -6.07347e+02 3.36723e+03 + -4.35322e+02 -6.07147e+02 3.36727e+03 + -4.35323e+02 -6.06947e+02 3.36730e+03 + -4.35323e+02 -6.06747e+02 3.36734e+03 + -4.35324e+02 -6.06547e+02 3.36737e+03 + -4.35324e+02 -6.06347e+02 3.36740e+03 + -4.35324e+02 -6.06147e+02 3.36744e+03 + -4.35325e+02 -6.05947e+02 3.36747e+03 + -4.35325e+02 -6.05747e+02 3.36751e+03 + -4.35326e+02 -6.05547e+02 3.36754e+03 + -4.35326e+02 -6.05347e+02 3.36758e+03 + -4.35327e+02 -6.05147e+02 3.36761e+03 + -4.35327e+02 -6.04947e+02 3.36765e+03 + -4.35327e+02 -6.04747e+02 3.36768e+03 + -4.35328e+02 -6.04547e+02 3.36771e+03 + -4.35328e+02 -6.04347e+02 3.36775e+03 + -4.35328e+02 -6.04147e+02 3.36778e+03 + -4.35329e+02 -6.03947e+02 3.36782e+03 + -4.35329e+02 -6.03747e+02 3.36785e+03 + -4.35330e+02 -6.03547e+02 3.36789e+03 + -4.35330e+02 -6.03347e+02 3.36792e+03 + -4.35330e+02 -6.03147e+02 3.36796e+03 + -4.35331e+02 -6.02946e+02 3.36799e+03 + -4.35331e+02 -6.02746e+02 3.36802e+03 + -4.35331e+02 -6.02546e+02 3.36806e+03 + -4.35332e+02 -6.02346e+02 3.36809e+03 + -4.35332e+02 -6.02146e+02 3.36813e+03 + -4.35333e+02 -6.01946e+02 3.36816e+03 + -4.35333e+02 -6.01746e+02 3.36820e+03 + -4.35333e+02 -6.01546e+02 3.36823e+03 + -4.35334e+02 -6.01346e+02 3.36826e+03 + -4.35334e+02 -6.01146e+02 3.36830e+03 + -4.35334e+02 -6.00946e+02 3.36833e+03 + -4.35335e+02 -6.00746e+02 3.36837e+03 + -4.35335e+02 -6.00546e+02 3.36840e+03 + -4.35335e+02 -6.00346e+02 3.36843e+03 + -4.35336e+02 -6.00146e+02 3.36847e+03 + -4.35336e+02 -5.99946e+02 3.36850e+03 + -4.35336e+02 -5.99745e+02 3.36854e+03 + -4.35336e+02 -5.99545e+02 3.36857e+03 + -4.35337e+02 -5.99345e+02 3.36861e+03 + -4.35337e+02 -5.99145e+02 3.36864e+03 + -4.35337e+02 -5.98945e+02 3.36867e+03 + -4.35338e+02 -5.98745e+02 3.36871e+03 + -4.35338e+02 -5.98545e+02 3.36874e+03 + -4.35338e+02 -5.98345e+02 3.36878e+03 + -4.35339e+02 -5.98145e+02 3.36881e+03 + -4.35339e+02 -5.97945e+02 3.36884e+03 + -4.35339e+02 -5.97745e+02 3.36888e+03 + -4.35339e+02 -5.97545e+02 3.36891e+03 + -4.35340e+02 -5.97344e+02 3.36895e+03 + -4.35340e+02 -5.97144e+02 3.36898e+03 + -4.35340e+02 -5.96944e+02 3.36901e+03 + -4.35341e+02 -5.96744e+02 3.36905e+03 + -4.35341e+02 -5.96544e+02 3.36908e+03 + -4.35341e+02 -5.96344e+02 3.36912e+03 + -4.35341e+02 -5.96144e+02 3.36915e+03 + -4.35342e+02 -5.95944e+02 3.36918e+03 + -4.35342e+02 -5.95744e+02 3.36922e+03 + -4.35342e+02 -5.95544e+02 3.36925e+03 + -4.35342e+02 -5.95343e+02 3.36928e+03 + -4.35343e+02 -5.95143e+02 3.36932e+03 + -4.35343e+02 -5.94943e+02 3.36935e+03 + -4.35343e+02 -5.94743e+02 3.36939e+03 + -4.35343e+02 -5.94543e+02 3.36942e+03 + -4.35343e+02 -5.94343e+02 3.36945e+03 + -4.35344e+02 -5.94143e+02 3.36949e+03 + -4.35344e+02 -5.93943e+02 3.36952e+03 + -4.35344e+02 -5.93742e+02 3.36956e+03 + -4.35344e+02 -5.93542e+02 3.36959e+03 + -4.35345e+02 -5.93342e+02 3.36962e+03 + -4.35345e+02 -5.93142e+02 3.36966e+03 + -4.35345e+02 -5.92942e+02 3.36969e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + -4.35345e+02 -5.92842e+02 3.36971e+03 + + +DT_QUAT 4.68956e-02 +T0_QUAT -3.28269e+00 +NUMBER_OF_QUATERNIONS 141 +QUATERNIONS + -3.95791e-01 -5.10895e-01 -5.49196e-01 5.29827e-01 + -3.95805e-01 -5.10906e-01 -5.49186e-01 5.29817e-01 + -3.95818e-01 -5.10917e-01 -5.49176e-01 5.29807e-01 + -3.95831e-01 -5.10928e-01 -5.49166e-01 5.29797e-01 + -3.95845e-01 -5.10938e-01 -5.49156e-01 5.29787e-01 + -3.95858e-01 -5.10949e-01 -5.49146e-01 5.29777e-01 + -3.95872e-01 -5.10960e-01 -5.49136e-01 5.29767e-01 + -3.95885e-01 -5.10971e-01 -5.49126e-01 5.29757e-01 + -3.95899e-01 -5.10982e-01 -5.49116e-01 5.29747e-01 + -3.95912e-01 -5.10992e-01 -5.49106e-01 5.29737e-01 + -3.95926e-01 -5.11003e-01 -5.49096e-01 5.29726e-01 + -3.95939e-01 -5.11014e-01 -5.49086e-01 5.29716e-01 + -3.95953e-01 -5.11025e-01 -5.49076e-01 5.29706e-01 + -3.95966e-01 -5.11036e-01 -5.49066e-01 5.29696e-01 + -3.95980e-01 -5.11046e-01 -5.49056e-01 5.29686e-01 + -3.95993e-01 -5.11057e-01 -5.49046e-01 5.29676e-01 + -3.96007e-01 -5.11068e-01 -5.49036e-01 5.29666e-01 + -3.96020e-01 -5.11079e-01 -5.49026e-01 5.29656e-01 + -3.96034e-01 -5.11090e-01 -5.49016e-01 5.29646e-01 + -3.96047e-01 -5.11100e-01 -5.49006e-01 5.29636e-01 + -3.96061e-01 -5.11111e-01 -5.48996e-01 5.29626e-01 + -3.96074e-01 -5.11122e-01 -5.48986e-01 5.29616e-01 + -3.96088e-01 -5.11133e-01 -5.48976e-01 5.29605e-01 + -3.96101e-01 -5.11143e-01 -5.48965e-01 5.29595e-01 + -3.96115e-01 -5.11154e-01 -5.48955e-01 5.29585e-01 + -3.96128e-01 -5.11165e-01 -5.48945e-01 5.29575e-01 + -3.96142e-01 -5.11176e-01 -5.48935e-01 5.29565e-01 + -3.96155e-01 -5.11186e-01 -5.48925e-01 5.29555e-01 + -3.96169e-01 -5.11197e-01 -5.48915e-01 5.29545e-01 + -3.96182e-01 -5.11208e-01 -5.48905e-01 5.29535e-01 + -3.96196e-01 -5.11219e-01 -5.48895e-01 5.29525e-01 + -3.96209e-01 -5.11229e-01 -5.48885e-01 5.29515e-01 + -3.96223e-01 -5.11240e-01 -5.48875e-01 5.29504e-01 + -3.96236e-01 -5.11251e-01 -5.48865e-01 5.29494e-01 + -3.96250e-01 -5.11262e-01 -5.48855e-01 5.29484e-01 + -3.96263e-01 -5.11272e-01 -5.48846e-01 5.29474e-01 + -3.96277e-01 -5.11283e-01 -5.48836e-01 5.29464e-01 + -3.96290e-01 -5.11294e-01 -5.48826e-01 5.29454e-01 + -3.96304e-01 -5.11305e-01 -5.48816e-01 5.29444e-01 + -3.96317e-01 -5.11315e-01 -5.48806e-01 5.29434e-01 + -3.96331e-01 -5.11326e-01 -5.48796e-01 5.29423e-01 + -3.96344e-01 -5.11337e-01 -5.48786e-01 5.29413e-01 + -3.96358e-01 -5.11347e-01 -5.48776e-01 5.29403e-01 + -3.96371e-01 -5.11358e-01 -5.48766e-01 5.29393e-01 + -3.96385e-01 -5.11369e-01 -5.48756e-01 5.29383e-01 + -3.96398e-01 -5.11380e-01 -5.48746e-01 5.29373e-01 + -3.96412e-01 -5.11390e-01 -5.48736e-01 5.29363e-01 + -3.96425e-01 -5.11401e-01 -5.48726e-01 5.29352e-01 + -3.96439e-01 -5.11412e-01 -5.48716e-01 5.29342e-01 + -3.96452e-01 -5.11422e-01 -5.48706e-01 5.29332e-01 + -3.96466e-01 -5.11433e-01 -5.48696e-01 5.29322e-01 + -3.96479e-01 -5.11444e-01 -5.48686e-01 5.29312e-01 + -3.96493e-01 -5.11455e-01 -5.48676e-01 5.29302e-01 + -3.96506e-01 -5.11465e-01 -5.48666e-01 5.29292e-01 + -3.96520e-01 -5.11476e-01 -5.48656e-01 5.29281e-01 + -3.96533e-01 -5.11487e-01 -5.48646e-01 5.29271e-01 + -3.96547e-01 -5.11497e-01 -5.48636e-01 5.29261e-01 + -3.96560e-01 -5.11508e-01 -5.48626e-01 5.29251e-01 + -3.96574e-01 -5.11519e-01 -5.48617e-01 5.29241e-01 + -3.96587e-01 -5.11529e-01 -5.48607e-01 5.29231e-01 + -3.96601e-01 -5.11540e-01 -5.48597e-01 5.29220e-01 + -3.96614e-01 -5.11551e-01 -5.48587e-01 5.29210e-01 + -3.96628e-01 -5.11561e-01 -5.48577e-01 5.29200e-01 + -3.96641e-01 -5.11572e-01 -5.48567e-01 5.29190e-01 + -3.96655e-01 -5.11583e-01 -5.48557e-01 5.29180e-01 + -3.96669e-01 -5.11593e-01 -5.48547e-01 5.29169e-01 + -3.96682e-01 -5.11604e-01 -5.48537e-01 5.29159e-01 + -3.96696e-01 -5.11615e-01 -5.48527e-01 5.29149e-01 + -3.96709e-01 -5.11625e-01 -5.48517e-01 5.29139e-01 + -3.96723e-01 -5.11636e-01 -5.48508e-01 5.29129e-01 + -3.96736e-01 -5.11647e-01 -5.48498e-01 5.29119e-01 + -3.96750e-01 -5.11657e-01 -5.48488e-01 5.29108e-01 + -3.96763e-01 -5.11668e-01 -5.48478e-01 5.29098e-01 + -3.96777e-01 -5.11679e-01 -5.48468e-01 5.29088e-01 + -3.96790e-01 -5.11689e-01 -5.48458e-01 5.29078e-01 + -3.96804e-01 -5.11700e-01 -5.48448e-01 5.29068e-01 + -3.96817e-01 -5.11711e-01 -5.48438e-01 5.29057e-01 + -3.96831e-01 -5.11721e-01 -5.48428e-01 5.29047e-01 + -3.96845e-01 -5.11732e-01 -5.48419e-01 5.29037e-01 + -3.96858e-01 -5.11742e-01 -5.48409e-01 5.29027e-01 + -3.96872e-01 -5.11753e-01 -5.48399e-01 5.29016e-01 + -3.96885e-01 -5.11764e-01 -5.48389e-01 5.29006e-01 + -3.96899e-01 -5.11774e-01 -5.48379e-01 5.28996e-01 + -3.96912e-01 -5.11785e-01 -5.48369e-01 5.28986e-01 + -3.96926e-01 -5.11796e-01 -5.48359e-01 5.28976e-01 + -3.96939e-01 -5.11806e-01 -5.48350e-01 5.28965e-01 + -3.96953e-01 -5.11817e-01 -5.48340e-01 5.28955e-01 + -3.96966e-01 -5.11827e-01 -5.48330e-01 5.28945e-01 + -3.96980e-01 -5.11838e-01 -5.48320e-01 5.28935e-01 + -3.96994e-01 -5.11849e-01 -5.48310e-01 5.28924e-01 + -3.97007e-01 -5.11859e-01 -5.48300e-01 5.28914e-01 + -3.97021e-01 -5.11870e-01 -5.48290e-01 5.28904e-01 + -3.97034e-01 -5.11881e-01 -5.48281e-01 5.28894e-01 + -3.97048e-01 -5.11891e-01 -5.48271e-01 5.28883e-01 + -3.97061e-01 -5.11902e-01 -5.48261e-01 5.28873e-01 + -3.97075e-01 -5.11912e-01 -5.48251e-01 5.28863e-01 + -3.97088e-01 -5.11923e-01 -5.48241e-01 5.28853e-01 + -3.97102e-01 -5.11934e-01 -5.48231e-01 5.28842e-01 + -3.97116e-01 -5.11944e-01 -5.48222e-01 5.28832e-01 + -3.97129e-01 -5.11955e-01 -5.48212e-01 5.28822e-01 + -3.97143e-01 -5.11965e-01 -5.48202e-01 5.28812e-01 + -3.97156e-01 -5.11976e-01 -5.48192e-01 5.28801e-01 + -3.97170e-01 -5.11986e-01 -5.48182e-01 5.28791e-01 + -3.97183e-01 -5.11997e-01 -5.48172e-01 5.28781e-01 + -3.97197e-01 -5.12008e-01 -5.48163e-01 5.28771e-01 + -3.97211e-01 -5.12018e-01 -5.48153e-01 5.28760e-01 + -3.97224e-01 -5.12029e-01 -5.48143e-01 5.28750e-01 + -3.97238e-01 -5.12039e-01 -5.48133e-01 5.28740e-01 + -3.97251e-01 -5.12050e-01 -5.48123e-01 5.28730e-01 + -3.97265e-01 -5.12061e-01 -5.48114e-01 5.28719e-01 + -3.97278e-01 -5.12071e-01 -5.48104e-01 5.28709e-01 + -3.97292e-01 -5.12082e-01 -5.48094e-01 5.28699e-01 + -3.97306e-01 -5.12092e-01 -5.48084e-01 5.28688e-01 + -3.97319e-01 -5.12103e-01 -5.48075e-01 5.28678e-01 + -3.97333e-01 -5.12113e-01 -5.48065e-01 5.28668e-01 + -3.97346e-01 -5.12124e-01 -5.48055e-01 5.28658e-01 + -3.97360e-01 -5.12134e-01 -5.48045e-01 5.28647e-01 + -3.97373e-01 -5.12145e-01 -5.48035e-01 5.28637e-01 + -3.97387e-01 -5.12156e-01 -5.48026e-01 5.28627e-01 + -3.97401e-01 -5.12166e-01 -5.48016e-01 5.28616e-01 + -3.97414e-01 -5.12177e-01 -5.48006e-01 5.28606e-01 + -3.97428e-01 -5.12187e-01 -5.47996e-01 5.28596e-01 + -3.97441e-01 -5.12198e-01 -5.47987e-01 5.28586e-01 + -3.97455e-01 -5.12208e-01 -5.47977e-01 5.28575e-01 + -3.97469e-01 -5.12219e-01 -5.47967e-01 5.28565e-01 + -3.97482e-01 -5.12229e-01 -5.47957e-01 5.28555e-01 + -3.97496e-01 -5.12240e-01 -5.47947e-01 5.28544e-01 + -3.97509e-01 -5.12250e-01 -5.47938e-01 5.28534e-01 + -3.97523e-01 -5.12261e-01 -5.47928e-01 5.28524e-01 + -3.97536e-01 -5.12271e-01 -5.47918e-01 5.28513e-01 + -3.97550e-01 -5.12282e-01 -5.47908e-01 5.28503e-01 + -3.97564e-01 -5.12292e-01 -5.47899e-01 5.28493e-01 + -3.97577e-01 -5.12303e-01 -5.47889e-01 5.28482e-01 + -3.97591e-01 -5.12313e-01 -5.47879e-01 5.28472e-01 + -3.97604e-01 -5.12324e-01 -5.47870e-01 5.28462e-01 + -3.97618e-01 -5.12335e-01 -5.47860e-01 5.28451e-01 + -3.97632e-01 -5.12345e-01 -5.47850e-01 5.28441e-01 + -3.97645e-01 -5.12356e-01 -5.47840e-01 5.28431e-01 + -3.97659e-01 -5.12366e-01 -5.47831e-01 5.28420e-01 + -3.97672e-01 -5.12377e-01 -5.47821e-01 5.28410e-01 + -3.97686e-01 -5.12387e-01 -5.47811e-01 5.28400e-01 + + +SCAN_DURATION 5.67437e+00 +INT_TIME 1.62124e-04 + +ALONG_SCAN_PIXEL_SIZE 2.39677e-02 +CROSS_SCAN_PIXEL_SIZE 2.40000e-02 + +CENTER_GP -1.73953e-01 -1.60673e+00 0.00000e+00 +SENSOR_POSITION -1.72826e-01 -1.59660e+00 2.57395e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 35000 +TOTAL_SAMPLES 10000 + + + + +IKCODE -74699 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 0.00000e+00 0.00000e+00 0.00000e+00 +ITRANSS 0.00000e+00 0.00000e+00 -4.16666e+01 +ITRANSL 3.87491e+03 4.16666e+01 0.00000e+00 +DETECTOR_SAMPLE_ORIGIN 5.00050e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 3.98801e+08 +CENTER_EPHEMERIS_TIME 3.98801e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..be54e104e73e0292e063f9fbd906a71775fba417 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/Makefile @@ -0,0 +1,33 @@ +APPNAME = socetlinescankeywords_noExtrapolation + +include $(ISISROOT)/make/isismake.tsts + +#Use sed to lower output precision to 5 decimal places in output txt files + +commands: +#Test HRSC image with constant exposure rate. H1235 nd2, Vallis Marineris. + $(APPNAME) from=$(INPUT)/h1235_0001_nd2_crop.8bit.cub \ + to=$(OUTPUT)/h1235_0001_nd2_crop_keywords.txt \ + hrsc_nadircentertime=158030857.34364 > /dev/null; + cat $(OUTPUT)/h1235_0001_nd2_crop_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_h1235_0001_nd2_crop_keywords.txt + $(RM) $(OUTPUT)/h1235_0001_nd2_crop_keywords.txt + +#Test HRSC image with variable exposure rate. H0894 nd2, Nanedi Vallis. + $(APPNAME) from=$(INPUT)/h0894_0000_nd2_crop.8bit.cub \ + to=$(OUTPUT)/h0894_0000_nd2_crop_keywords.txt \ + hrsc_nadircentertime=149781543.44398 > /dev/null; + cat $(OUTPUT)/h0894_0000_nd2_crop_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_h0894_0000_nd2_crop_keywords.txt + $(RM) $(OUTPUT)/h0894_0000_nd2_crop_keywords.txt + +#Test HRSC image with exactly two exposure rates throughout image. H4235 s22, Gale Crater. + $(APPNAME) from=$(INPUT)/h4235_0001_s22_crop.8bit.cub \ + to=$(OUTPUT)/h4235_0001_s22_crop_keywords.txt \ + hrsc_nadircentertime=230605329.82915 > /dev/null; + cat $(OUTPUT)/h4235_0001_s22_crop_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_h4235_0001_s22_crop_keywords.txt + $(RM) $(OUTPUT)/h4235_0001_s22_crop_keywords.txt diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h0894_0000_nd2_crop_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h0894_0000_nd2_crop_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..a6ff37553b52e02ea1c9755ba3c1af79ee772e65 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h0894_0000_nd2_crop_keywords.txt @@ -0,0 +1,713 @@ +RECTIFICATION_TERMS + 1.09695e+04 0.00000e+00 1.00000e+00 + 2.58800e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO 8.90145e-02 -8.17809e-01 0.00000e+00 +LOAD_PT 8.90145e-02 -8.17809e-01 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScannerKLEv +SENSOR_MODE UNKNOWN +FOCAL 1.75010e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 1.09695e+04 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 2.58800e+03 0.00000e+00 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.75010e+02 0.00000e+00 0.00000e+00 +T_CENTER 2.23648e-03 +DT_EPHEM 1.93639e+00 +T0_EPHEM -6.77716e+01 +NUMBER_OF_EPHEM 71 +EPHEM_PTS + 2.62450e+06 -2.82068e+06 6.15448e+05 + 2.62415e+06 -2.82039e+06 6.07492e+05 + 2.62380e+06 -2.82009e+06 5.99535e+05 + 2.62344e+06 -2.81979e+06 5.91577e+05 + 2.62308e+06 -2.81948e+06 5.83616e+05 + 2.62271e+06 -2.81916e+06 5.75654e+05 + 2.62233e+06 -2.81883e+06 5.67691e+05 + 2.62194e+06 -2.81849e+06 5.59726e+05 + 2.62155e+06 -2.81815e+06 5.51759e+05 + 2.62115e+06 -2.81780e+06 5.43791e+05 + 2.62074e+06 -2.81744e+06 5.35822e+05 + 2.62033e+06 -2.81707e+06 5.27851e+05 + 2.61991e+06 -2.81670e+06 5.19878e+05 + 2.61948e+06 -2.81631e+06 5.11904e+05 + 2.61904e+06 -2.81592e+06 5.03929e+05 + 2.61860e+06 -2.81552e+06 4.95952e+05 + 2.61815e+06 -2.81512e+06 4.87974e+05 + 2.61769e+06 -2.81470e+06 4.79995e+05 + 2.61723e+06 -2.81428e+06 4.72014e+05 + 2.61676e+06 -2.81385e+06 4.64032e+05 + 2.61628e+06 -2.81342e+06 4.56048e+05 + 2.61579e+06 -2.81297e+06 4.48064e+05 + 2.61530e+06 -2.81252e+06 4.40078e+05 + 2.61480e+06 -2.81206e+06 4.32090e+05 + 2.61430e+06 -2.81159e+06 4.24102e+05 + 2.61378e+06 -2.81111e+06 4.16113e+05 + 2.61326e+06 -2.81062e+06 4.08122e+05 + 2.61273e+06 -2.81013e+06 4.00130e+05 + 2.61220e+06 -2.80963e+06 3.92137e+05 + 2.61166e+06 -2.80912e+06 3.84143e+05 + 2.61111e+06 -2.80860e+06 3.76148e+05 + 2.61055e+06 -2.80808e+06 3.68151e+05 + 2.60999e+06 -2.80755e+06 3.60154e+05 + 2.60942e+06 -2.80700e+06 3.52156e+05 + 2.60884e+06 -2.80646e+06 3.44156e+05 + 2.60825e+06 -2.80590e+06 3.36156e+05 + 2.60766e+06 -2.80533e+06 3.28155e+05 + 2.60706e+06 -2.80476e+06 3.20153e+05 + 2.60646e+06 -2.80418e+06 3.12149e+05 + 2.60584e+06 -2.80359e+06 3.04145e+05 + 2.60522e+06 -2.80299e+06 2.96141e+05 + 2.60459e+06 -2.80239e+06 2.88135e+05 + 2.60396e+06 -2.80177e+06 2.80128e+05 + 2.60331e+06 -2.80115e+06 2.72121e+05 + 2.60266e+06 -2.80052e+06 2.64113e+05 + 2.60201e+06 -2.79988e+06 2.56104e+05 + 2.60134e+06 -2.79924e+06 2.48094e+05 + 2.60067e+06 -2.79858e+06 2.40084e+05 + 2.59999e+06 -2.79792e+06 2.32073e+05 + 2.59931e+06 -2.79725e+06 2.24061e+05 + 2.59861e+06 -2.79657e+06 2.16049e+05 + 2.59791e+06 -2.79588e+06 2.08036e+05 + 2.59720e+06 -2.79519e+06 2.00022e+05 + 2.59649e+06 -2.79448e+06 1.92008e+05 + 2.59577e+06 -2.79377e+06 1.83993e+05 + 2.59504e+06 -2.79305e+06 1.75978e+05 + 2.59430e+06 -2.79232e+06 1.67962e+05 + 2.59356e+06 -2.79159e+06 1.59946e+05 + 2.59281e+06 -2.79084e+06 1.51930e+05 + 2.59205e+06 -2.79009e+06 1.43912e+05 + 2.59128e+06 -2.78933e+06 1.35895e+05 + 2.59051e+06 -2.78856e+06 1.27877e+05 + 2.58973e+06 -2.78778e+06 1.19858e+05 + 2.58894e+06 -2.78700e+06 1.11840e+05 + 2.58814e+06 -2.78620e+06 1.03821e+05 + 2.58734e+06 -2.78540e+06 9.58018e+04 + 2.58653e+06 -2.78459e+06 8.77822e+04 + 2.58572e+06 -2.78377e+06 7.97624e+04 + 2.58489e+06 -2.78294e+06 7.17423e+04 + 2.58406e+06 -2.78211e+06 6.37219e+04 + 2.58322e+06 -2.78126e+06 5.57014e+04 + + +EPHEM_RATES + -1.75944e+02 1.47590e+02 -4.10790e+03 + -1.79552e+02 1.51558e+02 -4.10876e+03 + -1.83163e+02 1.55533e+02 -4.10961e+03 + -1.86778e+02 1.59513e+02 -4.11045e+03 + -1.90396e+02 1.63500e+02 -4.11128e+03 + -1.94017e+02 1.67491e+02 -4.11210e+03 + -1.97641e+02 1.71489e+02 -4.11290e+03 + -2.01268e+02 1.75492e+02 -4.11370e+03 + -2.04898e+02 1.79500e+02 -4.11449e+03 + -2.08532e+02 1.83515e+02 -4.11527e+03 + -2.12168e+02 1.87535e+02 -4.11604e+03 + -2.15808e+02 1.91560e+02 -4.11680e+03 + -2.19450e+02 1.95591e+02 -4.11754e+03 + -2.23096e+02 1.99628e+02 -4.11828e+03 + -2.26745e+02 2.03670e+02 -4.11901e+03 + -2.30396e+02 2.07717e+02 -4.11972e+03 + -2.34051e+02 2.11770e+02 -4.12043e+03 + -2.37708e+02 2.15829e+02 -4.12112e+03 + -2.41368e+02 2.19893e+02 -4.12181e+03 + -2.45032e+02 2.23962e+02 -4.12248e+03 + -2.48698e+02 2.28037e+02 -4.12314e+03 + -2.52367e+02 2.32117e+02 -4.12380e+03 + -2.56038e+02 2.36203e+02 -4.12444e+03 + -2.59713e+02 2.40293e+02 -4.12507e+03 + -2.63390e+02 2.44389e+02 -4.12569e+03 + -2.67070e+02 2.48491e+02 -4.12630e+03 + -2.70753e+02 2.52598e+02 -4.12689e+03 + -2.74439e+02 2.56710e+02 -4.12748e+03 + -2.78127e+02 2.60827e+02 -4.12806e+03 + -2.81818e+02 2.64949e+02 -4.12862e+03 + -2.85512e+02 2.69077e+02 -4.12918e+03 + -2.89208e+02 2.73209e+02 -4.12972e+03 + -2.92907e+02 2.77347e+02 -4.13025e+03 + -2.96608e+02 2.81490e+02 -4.13078e+03 + -3.00312e+02 2.85638e+02 -4.13129e+03 + -3.04019e+02 2.89791e+02 -4.13178e+03 + -3.07728e+02 2.93950e+02 -4.13227e+03 + -3.11439e+02 2.98113e+02 -4.13275e+03 + -3.15153e+02 3.02281e+02 -4.13321e+03 + -3.18869e+02 3.06454e+02 -4.13367e+03 + -3.22588e+02 3.10632e+02 -4.13411e+03 + -3.26310e+02 3.14816e+02 -4.13454e+03 + -3.30033e+02 3.19003e+02 -4.13496e+03 + -3.33759e+02 3.23196e+02 -4.13537e+03 + -3.37487e+02 3.27394e+02 -4.13577e+03 + -3.41218e+02 3.31597e+02 -4.13616e+03 + -3.44951e+02 3.35804e+02 -4.13653e+03 + -3.48686e+02 3.40016e+02 -4.13689e+03 + -3.52423e+02 3.44233e+02 -4.13725e+03 + -3.56163e+02 3.48455e+02 -4.13759e+03 + -3.59904e+02 3.52681e+02 -4.13791e+03 + -3.63648e+02 3.56912e+02 -4.13823e+03 + -3.67394e+02 3.61148e+02 -4.13854e+03 + -3.71142e+02 3.65388e+02 -4.13883e+03 + -3.74892e+02 3.69633e+02 -4.13911e+03 + -3.78644e+02 3.73883e+02 -4.13938e+03 + -3.82399e+02 3.78137e+02 -4.13964e+03 + -3.86155e+02 3.82396e+02 -4.13989e+03 + -3.89913e+02 3.86659e+02 -4.14012e+03 + -3.93673e+02 3.90926e+02 -4.14035e+03 + -3.97435e+02 3.95199e+02 -4.14056e+03 + -4.01199e+02 3.99475e+02 -4.14076e+03 + -4.04965e+02 4.03756e+02 -4.14094e+03 + -4.08733e+02 4.08041e+02 -4.14112e+03 + -4.12502e+02 4.12331e+02 -4.14128e+03 + -4.16273e+02 4.16625e+02 -4.14143e+03 + -4.20046e+02 4.20923e+02 -4.14157e+03 + -4.23821e+02 4.25226e+02 -4.14170e+03 + -4.27597e+02 4.29532e+02 -4.14182e+03 + -4.31375e+02 4.33843e+02 -4.14192e+03 + -4.35155e+02 4.38158e+02 -4.14201e+03 + + +DT_QUAT 2.07907e-01 +T0_QUAT -5.13510e+01 +NUMBER_OF_QUATERNIONS 495 +QUATERNIONS + -7.06162e-01 -2.64771e-01 2.32684e-01 6.14075e-01 + -7.06097e-01 -2.64742e-01 2.32711e-01 6.14152e-01 + -7.06033e-01 -2.64712e-01 2.32737e-01 6.14229e-01 + -7.05968e-01 -2.64682e-01 2.32763e-01 6.14306e-01 + -7.05904e-01 -2.64653e-01 2.32790e-01 6.14383e-01 + -7.05839e-01 -2.64623e-01 2.32816e-01 6.14460e-01 + -7.05774e-01 -2.64594e-01 2.32842e-01 6.14537e-01 + -7.05710e-01 -2.64564e-01 2.32868e-01 6.14614e-01 + -7.05645e-01 -2.64534e-01 2.32895e-01 6.14691e-01 + -7.05580e-01 -2.64505e-01 2.32921e-01 6.14768e-01 + -7.05516e-01 -2.64475e-01 2.32947e-01 6.14845e-01 + -7.05451e-01 -2.64445e-01 2.32974e-01 6.14922e-01 + -7.05386e-01 -2.64416e-01 2.33000e-01 6.14999e-01 + -7.05322e-01 -2.64386e-01 2.33026e-01 6.15076e-01 + -7.05257e-01 -2.64356e-01 2.33052e-01 6.15153e-01 + -7.05192e-01 -2.64327e-01 2.33079e-01 6.15230e-01 + -7.05127e-01 -2.64297e-01 2.33105e-01 6.15307e-01 + -7.05062e-01 -2.64267e-01 2.33131e-01 6.15384e-01 + -7.04998e-01 -2.64238e-01 2.33158e-01 6.15461e-01 + -7.04933e-01 -2.64208e-01 2.33184e-01 6.15538e-01 + -7.04868e-01 -2.64178e-01 2.33210e-01 6.15615e-01 + -7.04803e-01 -2.64149e-01 2.33236e-01 6.15692e-01 + -7.04738e-01 -2.64119e-01 2.33263e-01 6.15769e-01 + -7.04673e-01 -2.64089e-01 2.33289e-01 6.15846e-01 + -7.04609e-01 -2.64059e-01 2.33315e-01 6.15923e-01 + -7.04544e-01 -2.64030e-01 2.33342e-01 6.16000e-01 + -7.04479e-01 -2.64000e-01 2.33368e-01 6.16077e-01 + -7.04414e-01 -2.63970e-01 2.33394e-01 6.16154e-01 + -7.04349e-01 -2.63940e-01 2.33420e-01 6.16232e-01 + -7.04284e-01 -2.63911e-01 2.33447e-01 6.16309e-01 + -7.04219e-01 -2.63881e-01 2.33473e-01 6.16386e-01 + -7.04154e-01 -2.63851e-01 2.33499e-01 6.16463e-01 + -7.04089e-01 -2.63821e-01 2.33525e-01 6.16540e-01 + -7.04024e-01 -2.63792e-01 2.33552e-01 6.16617e-01 + -7.03959e-01 -2.63762e-01 2.33578e-01 6.16694e-01 + -7.03894e-01 -2.63732e-01 2.33604e-01 6.16771e-01 + -7.03829e-01 -2.63702e-01 2.33630e-01 6.16848e-01 + -7.03764e-01 -2.63672e-01 2.33657e-01 6.16925e-01 + -7.03699e-01 -2.63643e-01 2.33683e-01 6.17002e-01 + -7.03634e-01 -2.63613e-01 2.33709e-01 6.17079e-01 + -7.03568e-01 -2.63583e-01 2.33735e-01 6.17156e-01 + -7.03503e-01 -2.63553e-01 2.33761e-01 6.17233e-01 + -7.03438e-01 -2.63523e-01 2.33788e-01 6.17310e-01 + -7.03373e-01 -2.63493e-01 2.33814e-01 6.17387e-01 + -7.03308e-01 -2.63464e-01 2.33840e-01 6.17464e-01 + -7.03243e-01 -2.63434e-01 2.33866e-01 6.17541e-01 + -7.03177e-01 -2.63404e-01 2.33893e-01 6.17618e-01 + -7.03112e-01 -2.63374e-01 2.33919e-01 6.17695e-01 + -7.03047e-01 -2.63344e-01 2.33945e-01 6.17772e-01 + -7.02982e-01 -2.63314e-01 2.33971e-01 6.17849e-01 + -7.02917e-01 -2.63284e-01 2.33997e-01 6.17926e-01 + -7.02851e-01 -2.63254e-01 2.34024e-01 6.18003e-01 + -7.02786e-01 -2.63225e-01 2.34050e-01 6.18080e-01 + -7.02721e-01 -2.63195e-01 2.34076e-01 6.18157e-01 + -7.02655e-01 -2.63165e-01 2.34102e-01 6.18235e-01 + -7.02590e-01 -2.63135e-01 2.34129e-01 6.18312e-01 + -7.02525e-01 -2.63105e-01 2.34155e-01 6.18389e-01 + -7.02459e-01 -2.63075e-01 2.34181e-01 6.18466e-01 + -7.02394e-01 -2.63045e-01 2.34207e-01 6.18543e-01 + -7.02329e-01 -2.63015e-01 2.34233e-01 6.18620e-01 + -7.02263e-01 -2.62985e-01 2.34260e-01 6.18697e-01 + -7.02198e-01 -2.62955e-01 2.34286e-01 6.18774e-01 + -7.02132e-01 -2.62925e-01 2.34312e-01 6.18851e-01 + -7.02067e-01 -2.62895e-01 2.34338e-01 6.18928e-01 + -7.02002e-01 -2.62865e-01 2.34364e-01 6.19005e-01 + -7.01936e-01 -2.62835e-01 2.34391e-01 6.19082e-01 + -7.01871e-01 -2.62805e-01 2.34417e-01 6.19159e-01 + -7.01805e-01 -2.62775e-01 2.34443e-01 6.19236e-01 + -7.01740e-01 -2.62745e-01 2.34469e-01 6.19313e-01 + -7.01674e-01 -2.62715e-01 2.34495e-01 6.19390e-01 + -7.01609e-01 -2.62685e-01 2.34521e-01 6.19467e-01 + -7.01543e-01 -2.62655e-01 2.34548e-01 6.19544e-01 + -7.01477e-01 -2.62625e-01 2.34574e-01 6.19621e-01 + -7.01412e-01 -2.62595e-01 2.34600e-01 6.19698e-01 + -7.01346e-01 -2.62565e-01 2.34626e-01 6.19775e-01 + -7.01281e-01 -2.62535e-01 2.34652e-01 6.19853e-01 + -7.01215e-01 -2.62505e-01 2.34678e-01 6.19930e-01 + -7.01149e-01 -2.62475e-01 2.34705e-01 6.20007e-01 + -7.01084e-01 -2.62445e-01 2.34731e-01 6.20084e-01 + -7.01018e-01 -2.62415e-01 2.34757e-01 6.20161e-01 + -7.00952e-01 -2.62385e-01 2.34783e-01 6.20238e-01 + -7.00887e-01 -2.62355e-01 2.34809e-01 6.20315e-01 + -7.00821e-01 -2.62325e-01 2.34835e-01 6.20392e-01 + -7.00755e-01 -2.62295e-01 2.34862e-01 6.20469e-01 + -7.00690e-01 -2.62265e-01 2.34888e-01 6.20546e-01 + -7.00624e-01 -2.62235e-01 2.34914e-01 6.20623e-01 + -7.00558e-01 -2.62204e-01 2.34940e-01 6.20700e-01 + -7.00492e-01 -2.62174e-01 2.34966e-01 6.20777e-01 + -7.00427e-01 -2.62144e-01 2.34992e-01 6.20854e-01 + -7.00361e-01 -2.62114e-01 2.35018e-01 6.20931e-01 + -7.00295e-01 -2.62084e-01 2.35045e-01 6.21008e-01 + -7.00229e-01 -2.62054e-01 2.35071e-01 6.21085e-01 + -7.00163e-01 -2.62024e-01 2.35097e-01 6.21162e-01 + -7.00097e-01 -2.61994e-01 2.35123e-01 6.21239e-01 + -7.00032e-01 -2.61963e-01 2.35149e-01 6.21316e-01 + -6.99966e-01 -2.61933e-01 2.35175e-01 6.21393e-01 + -6.99900e-01 -2.61903e-01 2.35201e-01 6.21471e-01 + -6.99834e-01 -2.61873e-01 2.35227e-01 6.21548e-01 + -6.99768e-01 -2.61843e-01 2.35254e-01 6.21625e-01 + -6.99702e-01 -2.61812e-01 2.35280e-01 6.21702e-01 + -6.99636e-01 -2.61782e-01 2.35306e-01 6.21779e-01 + -6.99570e-01 -2.61752e-01 2.35332e-01 6.21856e-01 + -6.99504e-01 -2.61722e-01 2.35358e-01 6.21933e-01 + -6.99438e-01 -2.61692e-01 2.35384e-01 6.22010e-01 + -6.99372e-01 -2.61661e-01 2.35410e-01 6.22087e-01 + -6.99306e-01 -2.61631e-01 2.35436e-01 6.22164e-01 + -6.99240e-01 -2.61601e-01 2.35462e-01 6.22241e-01 + -6.99174e-01 -2.61571e-01 2.35489e-01 6.22318e-01 + -6.99108e-01 -2.61541e-01 2.35515e-01 6.22395e-01 + -6.99042e-01 -2.61510e-01 2.35541e-01 6.22472e-01 + -6.98976e-01 -2.61480e-01 2.35567e-01 6.22549e-01 + -6.98910e-01 -2.61450e-01 2.35593e-01 6.22626e-01 + -6.98844e-01 -2.61420e-01 2.35619e-01 6.22703e-01 + -6.98777e-01 -2.61389e-01 2.35645e-01 6.22780e-01 + -6.98711e-01 -2.61359e-01 2.35671e-01 6.22857e-01 + -6.98645e-01 -2.61329e-01 2.35697e-01 6.22934e-01 + -6.98579e-01 -2.61298e-01 2.35723e-01 6.23012e-01 + -6.98513e-01 -2.61268e-01 2.35749e-01 6.23089e-01 + -6.98446e-01 -2.61238e-01 2.35776e-01 6.23166e-01 + -6.98380e-01 -2.61208e-01 2.35802e-01 6.23243e-01 + -6.98314e-01 -2.61177e-01 2.35828e-01 6.23320e-01 + -6.98248e-01 -2.61147e-01 2.35854e-01 6.23397e-01 + -6.98182e-01 -2.61117e-01 2.35880e-01 6.23474e-01 + -6.98115e-01 -2.61086e-01 2.35906e-01 6.23551e-01 + -6.98049e-01 -2.61056e-01 2.35932e-01 6.23628e-01 + -6.97983e-01 -2.61026e-01 2.35958e-01 6.23705e-01 + -6.97916e-01 -2.60995e-01 2.35984e-01 6.23782e-01 + -6.97850e-01 -2.60965e-01 2.36010e-01 6.23859e-01 + -6.97784e-01 -2.60934e-01 2.36036e-01 6.23936e-01 + -6.97717e-01 -2.60904e-01 2.36062e-01 6.24013e-01 + -6.97651e-01 -2.60874e-01 2.36088e-01 6.24090e-01 + -6.97584e-01 -2.60843e-01 2.36114e-01 6.24167e-01 + -6.97518e-01 -2.60813e-01 2.36140e-01 6.24244e-01 + -6.97452e-01 -2.60783e-01 2.36166e-01 6.24321e-01 + -6.97385e-01 -2.60752e-01 2.36193e-01 6.24398e-01 + -6.97319e-01 -2.60722e-01 2.36219e-01 6.24475e-01 + -6.97252e-01 -2.60691e-01 2.36245e-01 6.24553e-01 + -6.97186e-01 -2.60661e-01 2.36271e-01 6.24630e-01 + -6.97119e-01 -2.60631e-01 2.36297e-01 6.24707e-01 + -6.97053e-01 -2.60600e-01 2.36323e-01 6.24784e-01 + -6.96986e-01 -2.60570e-01 2.36349e-01 6.24861e-01 + -6.96920e-01 -2.60539e-01 2.36375e-01 6.24938e-01 + -6.96853e-01 -2.60509e-01 2.36401e-01 6.25015e-01 + -6.96787e-01 -2.60478e-01 2.36427e-01 6.25092e-01 + -6.96720e-01 -2.60448e-01 2.36453e-01 6.25169e-01 + -6.96654e-01 -2.60417e-01 2.36479e-01 6.25246e-01 + -6.96587e-01 -2.60387e-01 2.36505e-01 6.25323e-01 + -6.96520e-01 -2.60356e-01 2.36531e-01 6.25400e-01 + -6.96454e-01 -2.60326e-01 2.36557e-01 6.25477e-01 + -6.96387e-01 -2.60295e-01 2.36583e-01 6.25554e-01 + -6.96320e-01 -2.60265e-01 2.36609e-01 6.25631e-01 + -6.96254e-01 -2.60234e-01 2.36635e-01 6.25708e-01 + -6.96187e-01 -2.60204e-01 2.36661e-01 6.25785e-01 + -6.96120e-01 -2.60173e-01 2.36687e-01 6.25862e-01 + -6.96054e-01 -2.60143e-01 2.36713e-01 6.25939e-01 + -6.95987e-01 -2.60112e-01 2.36739e-01 6.26016e-01 + -6.95920e-01 -2.60082e-01 2.36765e-01 6.26093e-01 + -6.95853e-01 -2.60051e-01 2.36791e-01 6.26171e-01 + -6.95787e-01 -2.60021e-01 2.36817e-01 6.26248e-01 + -6.95720e-01 -2.59990e-01 2.36843e-01 6.26325e-01 + -6.95653e-01 -2.59960e-01 2.36869e-01 6.26402e-01 + -6.95586e-01 -2.59929e-01 2.36895e-01 6.26479e-01 + -6.95519e-01 -2.59899e-01 2.36921e-01 6.26556e-01 + -6.95453e-01 -2.59868e-01 2.36947e-01 6.26633e-01 + -6.95386e-01 -2.59837e-01 2.36973e-01 6.26710e-01 + -6.95319e-01 -2.59807e-01 2.36999e-01 6.26787e-01 + -6.95252e-01 -2.59776e-01 2.37025e-01 6.26864e-01 + -6.95185e-01 -2.59746e-01 2.37051e-01 6.26941e-01 + -6.95118e-01 -2.59715e-01 2.37077e-01 6.27018e-01 + -6.95051e-01 -2.59684e-01 2.37103e-01 6.27095e-01 + -6.94984e-01 -2.59654e-01 2.37129e-01 6.27172e-01 + -6.94917e-01 -2.59623e-01 2.37155e-01 6.27249e-01 + -6.94850e-01 -2.59593e-01 2.37181e-01 6.27326e-01 + -6.94783e-01 -2.59562e-01 2.37207e-01 6.27403e-01 + -6.94716e-01 -2.59531e-01 2.37233e-01 6.27480e-01 + -6.94649e-01 -2.59501e-01 2.37259e-01 6.27557e-01 + -6.94582e-01 -2.59470e-01 2.37285e-01 6.27634e-01 + -6.94515e-01 -2.59439e-01 2.37311e-01 6.27711e-01 + -6.94448e-01 -2.59409e-01 2.37337e-01 6.27788e-01 + -6.94381e-01 -2.59378e-01 2.37362e-01 6.27865e-01 + -6.94314e-01 -2.59347e-01 2.37388e-01 6.27942e-01 + -6.94247e-01 -2.59317e-01 2.37414e-01 6.28020e-01 + -6.94180e-01 -2.59286e-01 2.37440e-01 6.28097e-01 + -6.94113e-01 -2.59255e-01 2.37466e-01 6.28174e-01 + -6.94046e-01 -2.59224e-01 2.37492e-01 6.28251e-01 + -6.93979e-01 -2.59194e-01 2.37518e-01 6.28328e-01 + -6.93911e-01 -2.59163e-01 2.37544e-01 6.28405e-01 + -6.93844e-01 -2.59132e-01 2.37570e-01 6.28482e-01 + -6.93777e-01 -2.59102e-01 2.37596e-01 6.28559e-01 + -6.93710e-01 -2.59071e-01 2.37622e-01 6.28636e-01 + -6.93643e-01 -2.59040e-01 2.37648e-01 6.28713e-01 + -6.93575e-01 -2.59009e-01 2.37674e-01 6.28790e-01 + -6.93508e-01 -2.58979e-01 2.37700e-01 6.28867e-01 + -6.93441e-01 -2.58948e-01 2.37726e-01 6.28944e-01 + -6.93374e-01 -2.58917e-01 2.37752e-01 6.29021e-01 + -6.93306e-01 -2.58886e-01 2.37777e-01 6.29098e-01 + -6.93239e-01 -2.58856e-01 2.37803e-01 6.29175e-01 + -6.93172e-01 -2.58825e-01 2.37829e-01 6.29252e-01 + -6.93104e-01 -2.58794e-01 2.37855e-01 6.29329e-01 + -6.93037e-01 -2.58763e-01 2.37881e-01 6.29406e-01 + -6.92970e-01 -2.58732e-01 2.37907e-01 6.29483e-01 + -6.92902e-01 -2.58702e-01 2.37933e-01 6.29560e-01 + -6.92835e-01 -2.58671e-01 2.37959e-01 6.29637e-01 + -6.92767e-01 -2.58640e-01 2.37985e-01 6.29714e-01 + -6.92700e-01 -2.58609e-01 2.38011e-01 6.29791e-01 + -6.92633e-01 -2.58578e-01 2.38037e-01 6.29868e-01 + -6.92565e-01 -2.58547e-01 2.38062e-01 6.29945e-01 + -6.92498e-01 -2.58517e-01 2.38088e-01 6.30022e-01 + -6.92430e-01 -2.58486e-01 2.38114e-01 6.30099e-01 + -6.92363e-01 -2.58455e-01 2.38140e-01 6.30176e-01 + -6.92295e-01 -2.58424e-01 2.38166e-01 6.30253e-01 + -6.92228e-01 -2.58393e-01 2.38192e-01 6.30330e-01 + -6.92160e-01 -2.58362e-01 2.38218e-01 6.30408e-01 + -6.92093e-01 -2.58331e-01 2.38244e-01 6.30485e-01 + -6.92025e-01 -2.58300e-01 2.38270e-01 6.30562e-01 + -6.91958e-01 -2.58270e-01 2.38295e-01 6.30639e-01 + -6.91890e-01 -2.58239e-01 2.38321e-01 6.30716e-01 + -6.91822e-01 -2.58208e-01 2.38347e-01 6.30793e-01 + -6.91755e-01 -2.58177e-01 2.38373e-01 6.30870e-01 + -6.91687e-01 -2.58146e-01 2.38399e-01 6.30947e-01 + -6.91620e-01 -2.58115e-01 2.38425e-01 6.31024e-01 + -6.91552e-01 -2.58084e-01 2.38451e-01 6.31101e-01 + -6.91484e-01 -2.58053e-01 2.38476e-01 6.31178e-01 + -6.91417e-01 -2.58022e-01 2.38502e-01 6.31255e-01 + -6.91349e-01 -2.57991e-01 2.38528e-01 6.31332e-01 + -6.91281e-01 -2.57960e-01 2.38554e-01 6.31409e-01 + -6.91213e-01 -2.57929e-01 2.38580e-01 6.31486e-01 + -6.91146e-01 -2.57898e-01 2.38606e-01 6.31563e-01 + -6.91078e-01 -2.57867e-01 2.38632e-01 6.31640e-01 + -6.91010e-01 -2.57836e-01 2.38657e-01 6.31717e-01 + -6.90942e-01 -2.57805e-01 2.38683e-01 6.31794e-01 + -6.90875e-01 -2.57774e-01 2.38709e-01 6.31871e-01 + -6.90807e-01 -2.57743e-01 2.38735e-01 6.31948e-01 + -6.90739e-01 -2.57712e-01 2.38761e-01 6.32025e-01 + -6.90671e-01 -2.57681e-01 2.38787e-01 6.32102e-01 + -6.90603e-01 -2.57650e-01 2.38812e-01 6.32179e-01 + -6.90535e-01 -2.57619e-01 2.38838e-01 6.32256e-01 + -6.90467e-01 -2.57588e-01 2.38864e-01 6.32333e-01 + -6.90400e-01 -2.57557e-01 2.38890e-01 6.32410e-01 + -6.90332e-01 -2.57526e-01 2.38916e-01 6.32487e-01 + -6.90264e-01 -2.57495e-01 2.38942e-01 6.32564e-01 + -6.90196e-01 -2.57464e-01 2.38967e-01 6.32641e-01 + -6.90128e-01 -2.57433e-01 2.38993e-01 6.32718e-01 + -6.90060e-01 -2.57402e-01 2.39019e-01 6.32795e-01 + -6.89992e-01 -2.57371e-01 2.39045e-01 6.32872e-01 + -6.89924e-01 -2.57340e-01 2.39071e-01 6.32949e-01 + -6.89856e-01 -2.57309e-01 2.39097e-01 6.33026e-01 + -6.89788e-01 -2.57278e-01 2.39122e-01 6.33103e-01 + -6.89720e-01 -2.57247e-01 2.39148e-01 6.33180e-01 + -6.89652e-01 -2.57216e-01 2.39174e-01 6.33257e-01 + -6.89584e-01 -2.57184e-01 2.39200e-01 6.33334e-01 + -6.89516e-01 -2.57153e-01 2.39226e-01 6.33411e-01 + -6.89448e-01 -2.57122e-01 2.39251e-01 6.33488e-01 + -6.89380e-01 -2.57091e-01 2.39277e-01 6.33565e-01 + -6.89311e-01 -2.57060e-01 2.39303e-01 6.33642e-01 + -6.89243e-01 -2.57029e-01 2.39329e-01 6.33719e-01 + -6.89175e-01 -2.56998e-01 2.39355e-01 6.33796e-01 + -6.89107e-01 -2.56966e-01 2.39380e-01 6.33873e-01 + -6.89039e-01 -2.56935e-01 2.39406e-01 6.33950e-01 + -6.88971e-01 -2.56904e-01 2.39432e-01 6.34027e-01 + -6.88902e-01 -2.56873e-01 2.39458e-01 6.34104e-01 + -6.88834e-01 -2.56842e-01 2.39483e-01 6.34181e-01 + -6.88766e-01 -2.56811e-01 2.39509e-01 6.34258e-01 + -6.88698e-01 -2.56779e-01 2.39535e-01 6.34335e-01 + -6.88629e-01 -2.56748e-01 2.39561e-01 6.34412e-01 + -6.88561e-01 -2.56717e-01 2.39587e-01 6.34489e-01 + -6.88493e-01 -2.56686e-01 2.39612e-01 6.34566e-01 + -6.88425e-01 -2.56655e-01 2.39638e-01 6.34643e-01 + -6.88356e-01 -2.56623e-01 2.39664e-01 6.34720e-01 + -6.88288e-01 -2.56592e-01 2.39690e-01 6.34797e-01 + -6.88220e-01 -2.56561e-01 2.39715e-01 6.34874e-01 + -6.88151e-01 -2.56530e-01 2.39741e-01 6.34951e-01 + -6.88083e-01 -2.56498e-01 2.39767e-01 6.35028e-01 + -6.88014e-01 -2.56467e-01 2.39793e-01 6.35105e-01 + -6.87946e-01 -2.56436e-01 2.39818e-01 6.35182e-01 + -6.87878e-01 -2.56405e-01 2.39844e-01 6.35259e-01 + -6.87809e-01 -2.56373e-01 2.39870e-01 6.35336e-01 + -6.87741e-01 -2.56342e-01 2.39896e-01 6.35413e-01 + -6.87672e-01 -2.56311e-01 2.39921e-01 6.35490e-01 + -6.87604e-01 -2.56280e-01 2.39947e-01 6.35567e-01 + -6.87535e-01 -2.56248e-01 2.39973e-01 6.35644e-01 + -6.87467e-01 -2.56217e-01 2.39999e-01 6.35721e-01 + -6.87398e-01 -2.56186e-01 2.40024e-01 6.35798e-01 + -6.87330e-01 -2.56154e-01 2.40050e-01 6.35875e-01 + -6.87261e-01 -2.56123e-01 2.40076e-01 6.35952e-01 + -6.87193e-01 -2.56092e-01 2.40101e-01 6.36029e-01 + -6.87124e-01 -2.56060e-01 2.40127e-01 6.36106e-01 + -6.87056e-01 -2.56029e-01 2.40153e-01 6.36183e-01 + -6.86987e-01 -2.55998e-01 2.40179e-01 6.36260e-01 + -6.86918e-01 -2.55966e-01 2.40204e-01 6.36337e-01 + -6.86850e-01 -2.55935e-01 2.40230e-01 6.36414e-01 + -6.86781e-01 -2.55904e-01 2.40256e-01 6.36491e-01 + -6.86713e-01 -2.55872e-01 2.40281e-01 6.36568e-01 + -6.86644e-01 -2.55841e-01 2.40307e-01 6.36645e-01 + -6.86575e-01 -2.55810e-01 2.40333e-01 6.36722e-01 + -6.86506e-01 -2.55778e-01 2.40359e-01 6.36798e-01 + -6.86438e-01 -2.55747e-01 2.40384e-01 6.36875e-01 + -6.86369e-01 -2.55715e-01 2.40410e-01 6.36952e-01 + -6.86300e-01 -2.55684e-01 2.40436e-01 6.37029e-01 + -6.86232e-01 -2.55653e-01 2.40461e-01 6.37106e-01 + -6.86163e-01 -2.55621e-01 2.40487e-01 6.37183e-01 + -6.86094e-01 -2.55590e-01 2.40513e-01 6.37260e-01 + -6.86025e-01 -2.55558e-01 2.40538e-01 6.37337e-01 + -6.85956e-01 -2.55527e-01 2.40564e-01 6.37414e-01 + -6.85888e-01 -2.55495e-01 2.40590e-01 6.37491e-01 + -6.85819e-01 -2.55464e-01 2.40615e-01 6.37568e-01 + -6.85750e-01 -2.55433e-01 2.40641e-01 6.37645e-01 + -6.85681e-01 -2.55401e-01 2.40667e-01 6.37722e-01 + -6.85612e-01 -2.55370e-01 2.40692e-01 6.37799e-01 + -6.85543e-01 -2.55338e-01 2.40718e-01 6.37876e-01 + -6.85474e-01 -2.55307e-01 2.40744e-01 6.37953e-01 + -6.85406e-01 -2.55275e-01 2.40770e-01 6.38030e-01 + -6.85337e-01 -2.55244e-01 2.40795e-01 6.38107e-01 + -6.85268e-01 -2.55212e-01 2.40821e-01 6.38184e-01 + -6.85199e-01 -2.55181e-01 2.40846e-01 6.38261e-01 + -6.85130e-01 -2.55149e-01 2.40872e-01 6.38338e-01 + -6.85061e-01 -2.55118e-01 2.40898e-01 6.38415e-01 + -6.84992e-01 -2.55086e-01 2.40923e-01 6.38492e-01 + -6.84923e-01 -2.55055e-01 2.40949e-01 6.38569e-01 + -6.84854e-01 -2.55023e-01 2.40975e-01 6.38645e-01 + -6.84785e-01 -2.54992e-01 2.41000e-01 6.38722e-01 + -6.84716e-01 -2.54960e-01 2.41026e-01 6.38799e-01 + -6.84646e-01 -2.54928e-01 2.41052e-01 6.38876e-01 + -6.84577e-01 -2.54897e-01 2.41077e-01 6.38953e-01 + -6.84508e-01 -2.54865e-01 2.41103e-01 6.39030e-01 + -6.84439e-01 -2.54834e-01 2.41129e-01 6.39107e-01 + -6.84370e-01 -2.54802e-01 2.41154e-01 6.39184e-01 + -6.84301e-01 -2.54771e-01 2.41180e-01 6.39261e-01 + -6.84232e-01 -2.54739e-01 2.41206e-01 6.39338e-01 + -6.84163e-01 -2.54707e-01 2.41231e-01 6.39415e-01 + -6.84093e-01 -2.54676e-01 2.41257e-01 6.39492e-01 + -6.84024e-01 -2.54644e-01 2.41282e-01 6.39569e-01 + -6.83955e-01 -2.54613e-01 2.41308e-01 6.39646e-01 + -6.83886e-01 -2.54581e-01 2.41334e-01 6.39723e-01 + -6.83817e-01 -2.54549e-01 2.41359e-01 6.39800e-01 + -6.83747e-01 -2.54518e-01 2.41385e-01 6.39876e-01 + -6.83678e-01 -2.54486e-01 2.41410e-01 6.39953e-01 + -6.83609e-01 -2.54454e-01 2.41436e-01 6.40030e-01 + -6.83539e-01 -2.54423e-01 2.41462e-01 6.40107e-01 + -6.83470e-01 -2.54391e-01 2.41487e-01 6.40184e-01 + -6.83401e-01 -2.54360e-01 2.41513e-01 6.40261e-01 + -6.83331e-01 -2.54328e-01 2.41539e-01 6.40338e-01 + -6.83262e-01 -2.54296e-01 2.41564e-01 6.40415e-01 + -6.83193e-01 -2.54265e-01 2.41590e-01 6.40492e-01 + -6.83123e-01 -2.54233e-01 2.41615e-01 6.40569e-01 + -6.83054e-01 -2.54201e-01 2.41641e-01 6.40646e-01 + -6.82985e-01 -2.54169e-01 2.41666e-01 6.40723e-01 + -6.82915e-01 -2.54138e-01 2.41692e-01 6.40800e-01 + -6.82846e-01 -2.54106e-01 2.41718e-01 6.40876e-01 + -6.82776e-01 -2.54074e-01 2.41743e-01 6.40953e-01 + -6.82707e-01 -2.54043e-01 2.41769e-01 6.41030e-01 + -6.82637e-01 -2.54011e-01 2.41794e-01 6.41107e-01 + -6.82568e-01 -2.53979e-01 2.41820e-01 6.41184e-01 + -6.82498e-01 -2.53947e-01 2.41846e-01 6.41261e-01 + -6.82429e-01 -2.53916e-01 2.41871e-01 6.41338e-01 + -6.82359e-01 -2.53884e-01 2.41897e-01 6.41415e-01 + -6.82290e-01 -2.53852e-01 2.41922e-01 6.41492e-01 + -6.82220e-01 -2.53820e-01 2.41948e-01 6.41569e-01 + -6.82151e-01 -2.53789e-01 2.41973e-01 6.41646e-01 + -6.82081e-01 -2.53757e-01 2.41999e-01 6.41722e-01 + -6.82011e-01 -2.53725e-01 2.42024e-01 6.41799e-01 + -6.81942e-01 -2.53693e-01 2.42050e-01 6.41876e-01 + -6.81872e-01 -2.53661e-01 2.42076e-01 6.41953e-01 + -6.81803e-01 -2.53630e-01 2.42101e-01 6.42030e-01 + -6.81733e-01 -2.53598e-01 2.42127e-01 6.42107e-01 + -6.81663e-01 -2.53566e-01 2.42152e-01 6.42184e-01 + -6.81593e-01 -2.53534e-01 2.42178e-01 6.42261e-01 + -6.81524e-01 -2.53502e-01 2.42203e-01 6.42338e-01 + -6.81454e-01 -2.53471e-01 2.42229e-01 6.42414e-01 + -6.81384e-01 -2.53439e-01 2.42254e-01 6.42491e-01 + -6.81315e-01 -2.53407e-01 2.42280e-01 6.42568e-01 + -6.81245e-01 -2.53375e-01 2.42305e-01 6.42645e-01 + -6.81175e-01 -2.53343e-01 2.42331e-01 6.42722e-01 + -6.81105e-01 -2.53311e-01 2.42357e-01 6.42799e-01 + -6.81035e-01 -2.53279e-01 2.42382e-01 6.42876e-01 + -6.80966e-01 -2.53248e-01 2.42408e-01 6.42953e-01 + -6.80896e-01 -2.53216e-01 2.42433e-01 6.43030e-01 + -6.80826e-01 -2.53184e-01 2.42459e-01 6.43106e-01 + -6.80756e-01 -2.53152e-01 2.42484e-01 6.43183e-01 + -6.80686e-01 -2.53120e-01 2.42510e-01 6.43260e-01 + -6.80616e-01 -2.53088e-01 2.42535e-01 6.43337e-01 + -6.80546e-01 -2.53056e-01 2.42561e-01 6.43414e-01 + -6.80477e-01 -2.53024e-01 2.42586e-01 6.43491e-01 + -6.80407e-01 -2.52992e-01 2.42612e-01 6.43568e-01 + -6.80337e-01 -2.52960e-01 2.42637e-01 6.43645e-01 + -6.80267e-01 -2.52929e-01 2.42663e-01 6.43721e-01 + -6.80197e-01 -2.52897e-01 2.42688e-01 6.43798e-01 + -6.80127e-01 -2.52865e-01 2.42714e-01 6.43875e-01 + -6.80057e-01 -2.52833e-01 2.42739e-01 6.43952e-01 + -6.79987e-01 -2.52801e-01 2.42765e-01 6.44029e-01 + -6.79917e-01 -2.52769e-01 2.42790e-01 6.44106e-01 + -6.79847e-01 -2.52737e-01 2.42816e-01 6.44183e-01 + -6.79777e-01 -2.52705e-01 2.42841e-01 6.44259e-01 + -6.79707e-01 -2.52673e-01 2.42867e-01 6.44336e-01 + -6.79637e-01 -2.52641e-01 2.42892e-01 6.44413e-01 + -6.79566e-01 -2.52609e-01 2.42918e-01 6.44490e-01 + -6.79496e-01 -2.52577e-01 2.42943e-01 6.44567e-01 + -6.79426e-01 -2.52545e-01 2.42969e-01 6.44644e-01 + -6.79356e-01 -2.52513e-01 2.42994e-01 6.44721e-01 + -6.79286e-01 -2.52481e-01 2.43020e-01 6.44797e-01 + -6.79216e-01 -2.52449e-01 2.43045e-01 6.44874e-01 + -6.79146e-01 -2.52417e-01 2.43070e-01 6.44951e-01 + -6.79075e-01 -2.52385e-01 2.43096e-01 6.45028e-01 + -6.79005e-01 -2.52353e-01 2.43121e-01 6.45105e-01 + -6.78935e-01 -2.52321e-01 2.43147e-01 6.45182e-01 + -6.78865e-01 -2.52289e-01 2.43172e-01 6.45258e-01 + -6.78795e-01 -2.52257e-01 2.43198e-01 6.45335e-01 + -6.78724e-01 -2.52224e-01 2.43223e-01 6.45412e-01 + -6.78654e-01 -2.52192e-01 2.43249e-01 6.45489e-01 + -6.78584e-01 -2.52160e-01 2.43274e-01 6.45566e-01 + -6.78513e-01 -2.52128e-01 2.43300e-01 6.45643e-01 + -6.78443e-01 -2.52096e-01 2.43325e-01 6.45720e-01 + -6.78373e-01 -2.52064e-01 2.43350e-01 6.45796e-01 + -6.78302e-01 -2.52032e-01 2.43376e-01 6.45873e-01 + -6.78232e-01 -2.52000e-01 2.43401e-01 6.45950e-01 + -6.78162e-01 -2.51968e-01 2.43427e-01 6.46027e-01 + -6.78091e-01 -2.51936e-01 2.43452e-01 6.46104e-01 + -6.78021e-01 -2.51903e-01 2.43478e-01 6.46180e-01 + -6.77950e-01 -2.51871e-01 2.43503e-01 6.46257e-01 + -6.77880e-01 -2.51839e-01 2.43528e-01 6.46334e-01 + -6.77810e-01 -2.51807e-01 2.43554e-01 6.46411e-01 + -6.77739e-01 -2.51775e-01 2.43579e-01 6.46488e-01 + -6.77669e-01 -2.51743e-01 2.43605e-01 6.46565e-01 + -6.77598e-01 -2.51711e-01 2.43630e-01 6.46641e-01 + -6.77528e-01 -2.51678e-01 2.43656e-01 6.46718e-01 + -6.77457e-01 -2.51646e-01 2.43681e-01 6.46795e-01 + -6.77387e-01 -2.51614e-01 2.43706e-01 6.46872e-01 + -6.77316e-01 -2.51582e-01 2.43732e-01 6.46949e-01 + -6.77246e-01 -2.51550e-01 2.43757e-01 6.47025e-01 + -6.77175e-01 -2.51517e-01 2.43783e-01 6.47102e-01 + -6.77104e-01 -2.51485e-01 2.43808e-01 6.47179e-01 + -6.77034e-01 -2.51453e-01 2.43833e-01 6.47256e-01 + -6.76963e-01 -2.51421e-01 2.43859e-01 6.47333e-01 + -6.76893e-01 -2.51389e-01 2.43884e-01 6.47409e-01 + -6.76822e-01 -2.51356e-01 2.43910e-01 6.47486e-01 + -6.76751e-01 -2.51324e-01 2.43935e-01 6.47563e-01 + -6.76681e-01 -2.51292e-01 2.43960e-01 6.47640e-01 + -6.76610e-01 -2.51260e-01 2.43986e-01 6.47717e-01 + -6.76539e-01 -2.51227e-01 2.44011e-01 6.47793e-01 + -6.76469e-01 -2.51195e-01 2.44036e-01 6.47870e-01 + -6.76398e-01 -2.51163e-01 2.44062e-01 6.47947e-01 + -6.76327e-01 -2.51131e-01 2.44087e-01 6.48024e-01 + -6.76256e-01 -2.51098e-01 2.44113e-01 6.48101e-01 + -6.76186e-01 -2.51066e-01 2.44138e-01 6.48177e-01 + -6.76115e-01 -2.51034e-01 2.44163e-01 6.48254e-01 + -6.76044e-01 -2.51001e-01 2.44189e-01 6.48331e-01 + -6.75973e-01 -2.50969e-01 2.44214e-01 6.48408e-01 + -6.75902e-01 -2.50937e-01 2.44239e-01 6.48484e-01 + -6.75832e-01 -2.50905e-01 2.44265e-01 6.48561e-01 + -6.75761e-01 -2.50872e-01 2.44290e-01 6.48638e-01 + -6.75690e-01 -2.50840e-01 2.44315e-01 6.48715e-01 + -6.75619e-01 -2.50808e-01 2.44341e-01 6.48791e-01 + -6.75548e-01 -2.50775e-01 2.44366e-01 6.48868e-01 + -6.75477e-01 -2.50743e-01 2.44391e-01 6.48945e-01 + -6.75406e-01 -2.50710e-01 2.44417e-01 6.49022e-01 + -6.75335e-01 -2.50678e-01 2.44442e-01 6.49099e-01 + -6.75264e-01 -2.50646e-01 2.44468e-01 6.49175e-01 + -6.75193e-01 -2.50613e-01 2.44493e-01 6.49252e-01 + -6.75122e-01 -2.50581e-01 2.44518e-01 6.49329e-01 + -6.75051e-01 -2.50549e-01 2.44544e-01 6.49406e-01 + -6.74980e-01 -2.50516e-01 2.44569e-01 6.49482e-01 + -6.74909e-01 -2.50484e-01 2.44594e-01 6.49559e-01 + -6.74838e-01 -2.50451e-01 2.44620e-01 6.49636e-01 + -6.74767e-01 -2.50419e-01 2.44645e-01 6.49713e-01 + -6.74696e-01 -2.50387e-01 2.44670e-01 6.49789e-01 + -6.74625e-01 -2.50354e-01 2.44695e-01 6.49866e-01 + -6.74554e-01 -2.50322e-01 2.44721e-01 6.49943e-01 + -6.74483e-01 -2.50289e-01 2.44746e-01 6.50020e-01 + -6.74412e-01 -2.50257e-01 2.44771e-01 6.50096e-01 + -6.74341e-01 -2.50225e-01 2.44797e-01 6.50173e-01 + -6.74270e-01 -2.50192e-01 2.44822e-01 6.50250e-01 + -6.74198e-01 -2.50160e-01 2.44847e-01 6.50326e-01 + -6.74127e-01 -2.50127e-01 2.44873e-01 6.50403e-01 + -6.74056e-01 -2.50095e-01 2.44898e-01 6.50480e-01 + -6.73985e-01 -2.50062e-01 2.44923e-01 6.50557e-01 + -6.73914e-01 -2.50030e-01 2.44949e-01 6.50633e-01 + -6.73842e-01 -2.49997e-01 2.44974e-01 6.50710e-01 + -6.73771e-01 -2.49965e-01 2.44999e-01 6.50787e-01 + -6.73700e-01 -2.49932e-01 2.45024e-01 6.50864e-01 + -6.73629e-01 -2.49900e-01 2.45050e-01 6.50940e-01 + -6.73557e-01 -2.49867e-01 2.45075e-01 6.51017e-01 + -6.73486e-01 -2.49835e-01 2.45100e-01 6.51094e-01 + -6.73415e-01 -2.49802e-01 2.45126e-01 6.51170e-01 + -6.73344e-01 -2.49770e-01 2.45151e-01 6.51247e-01 + -6.73272e-01 -2.49737e-01 2.45176e-01 6.51324e-01 + -6.73201e-01 -2.49705e-01 2.45201e-01 6.51401e-01 + -6.73129e-01 -2.49672e-01 2.45227e-01 6.51477e-01 + -6.73058e-01 -2.49640e-01 2.45252e-01 6.51554e-01 + -6.72987e-01 -2.49607e-01 2.45277e-01 6.51631e-01 + -6.72915e-01 -2.49574e-01 2.45302e-01 6.51707e-01 + -6.72844e-01 -2.49542e-01 2.45328e-01 6.51784e-01 + -6.72772e-01 -2.49509e-01 2.45353e-01 6.51861e-01 + -6.72701e-01 -2.49477e-01 2.45378e-01 6.51937e-01 + -6.72630e-01 -2.49444e-01 2.45403e-01 6.52014e-01 + -6.72558e-01 -2.49412e-01 2.45429e-01 6.52091e-01 + + +SCAN_DURATION 9.87562e+01 + +NUMBER_OF_INT_TIMES 9 +INT_TIMES + 1 -5.16686e+01 4.90674e-03 + 2238 -4.06923e+01 4.80008e-03 + 4606 -2.93258e+01 4.69342e-03 + 7102 -1.76111e+01 4.58676e-03 + 9790 -5.28205e+00 4.48010e-03 + 12542 7.04710e+00 4.37344e-03 + 15486 1.99224e+01 4.26679e-03 + 18558 3.30299e+01 4.16013e-03 + 21822 4.66084e+01 4.05347e-03 + +ALONG_SCAN_PIXEL_SIZE 7.00000e-03 +CROSS_SCAN_PIXEL_SIZE 7.00000e-03 + +CENTER_GP 8.90145e-02 -8.17809e-01 0.00000e+00 +SENSOR_POSITION 8.85576e-02 -8.21886e-01 4.49624e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 21939 +TOTAL_SAMPLES 5176 + + + + +IKCODE -41215 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 0.00000e+00 0.00000e+00 0.00000e+00 +ITRANSS 4.83755e+00 -1.42857e+02 -8.57704e-03 +ITRANSL 7.85714e-01 -8.57704e-03 1.42857e+02 +DETECTOR_SAMPLE_ORIGIN 2.59250e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 1.49781e+08 +CENTER_EPHEMERIS_TIME 1.49781e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h1235_0001_nd2_crop_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h1235_0001_nd2_crop_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..1009eeebebd0aa9810b4f89e32dd626dcc405aec --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h1235_0001_nd2_crop_keywords.txt @@ -0,0 +1,822 @@ +RECTIFICATION_TERMS + 1.30665e+04 0.00000e+00 1.00000e+00 + 2.58800e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -9.76327e-02 -1.33743e+00 0.00000e+00 +LOAD_PT -9.76327e-02 -1.33743e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScannerKLEv +SENSOR_MODE UNKNOWN +FOCAL 1.75010e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 1.30665e+04 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 2.58800e+03 0.00000e+00 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.75010e+02 0.00000e+00 0.00000e+00 +T_CENTER -3.69548e-06 +DT_EPHEM 1.67259e+00 +T0_EPHEM -6.18860e+01 +NUMBER_OF_EPHEM 75 +EPHEM_PTS + 9.46653e+05 -3.89155e+06 -1.52360e+05 + 9.46889e+05 -3.89289e+06 -1.58985e+05 + 9.47123e+05 -3.89422e+06 -1.65611e+05 + 9.47354e+05 -3.89554e+06 -1.72236e+05 + 9.47584e+05 -3.89686e+06 -1.78860e+05 + 9.47812e+05 -3.89817e+06 -1.85485e+05 + 9.48037e+05 -3.89947e+06 -1.92109e+05 + 9.48261e+05 -3.90076e+06 -1.98732e+05 + 9.48482e+05 -3.90205e+06 -2.05356e+05 + 9.48701e+05 -3.90333e+06 -2.11978e+05 + 9.48919e+05 -3.90461e+06 -2.18601e+05 + 9.49134e+05 -3.90587e+06 -2.25223e+05 + 9.49347e+05 -3.90713e+06 -2.31845e+05 + 9.49558e+05 -3.90838e+06 -2.38466e+05 + 9.49768e+05 -3.90963e+06 -2.45087e+05 + 9.49975e+05 -3.91087e+06 -2.51707e+05 + 9.50180e+05 -3.91210e+06 -2.58327e+05 + 9.50383e+05 -3.91332e+06 -2.64946e+05 + 9.50584e+05 -3.91454e+06 -2.71565e+05 + 9.50783e+05 -3.91575e+06 -2.78184e+05 + 9.50980e+05 -3.91695e+06 -2.84802e+05 + 9.51175e+05 -3.91815e+06 -2.91419e+05 + 9.51368e+05 -3.91934e+06 -2.98036e+05 + 9.51559e+05 -3.92052e+06 -3.04652e+05 + 9.51748e+05 -3.92170e+06 -3.11268e+05 + 9.51936e+05 -3.92286e+06 -3.17883e+05 + 9.52121e+05 -3.92403e+06 -3.24498e+05 + 9.52304e+05 -3.92518e+06 -3.31112e+05 + 9.52485e+05 -3.92633e+06 -3.37725e+05 + 9.52664e+05 -3.92747e+06 -3.44338e+05 + 9.52841e+05 -3.92860e+06 -3.50950e+05 + 9.53016e+05 -3.92973e+06 -3.57562e+05 + 9.53190e+05 -3.93085e+06 -3.64173e+05 + 9.53361e+05 -3.93196e+06 -3.70783e+05 + 9.53530e+05 -3.93306e+06 -3.77393e+05 + 9.53698e+05 -3.93416e+06 -3.84002e+05 + 9.53863e+05 -3.93525e+06 -3.90610e+05 + 9.54027e+05 -3.93634e+06 -3.97217e+05 + 9.54188e+05 -3.93742e+06 -4.03824e+05 + 9.54348e+05 -3.93849e+06 -4.10430e+05 + 9.54505e+05 -3.93955e+06 -4.17036e+05 + 9.54661e+05 -3.94061e+06 -4.23640e+05 + 9.54815e+05 -3.94166e+06 -4.30244e+05 + 9.54967e+05 -3.94270e+06 -4.36847e+05 + 9.55117e+05 -3.94374e+06 -4.43450e+05 + 9.55265e+05 -3.94477e+06 -4.50051e+05 + 9.55411e+05 -3.94579e+06 -4.56652e+05 + 9.55555e+05 -3.94680e+06 -4.63252e+05 + 9.55697e+05 -3.94781e+06 -4.69851e+05 + 9.55837e+05 -3.94881e+06 -4.76449e+05 + 9.55976e+05 -3.94981e+06 -4.83047e+05 + 9.56112e+05 -3.95080e+06 -4.89643e+05 + 9.56247e+05 -3.95178e+06 -4.96239e+05 + 9.56380e+05 -3.95275e+06 -5.02834e+05 + 9.56511e+05 -3.95372e+06 -5.09428e+05 + 9.56640e+05 -3.95468e+06 -5.16021e+05 + 9.56767e+05 -3.95564e+06 -5.22613e+05 + 9.56892e+05 -3.95659e+06 -5.29205e+05 + 9.57015e+05 -3.95753e+06 -5.35795e+05 + 9.57137e+05 -3.95846e+06 -5.42385e+05 + 9.57257e+05 -3.95939e+06 -5.48973e+05 + 9.57374e+05 -3.96031e+06 -5.55561e+05 + 9.57490e+05 -3.96122e+06 -5.62147e+05 + 9.57604e+05 -3.96213e+06 -5.68733e+05 + 9.57716e+05 -3.96303e+06 -5.75317e+05 + 9.57827e+05 -3.96392e+06 -5.81901e+05 + 9.57935e+05 -3.96481e+06 -5.88484e+05 + 9.58042e+05 -3.96569e+06 -5.95065e+05 + 9.58147e+05 -3.96656e+06 -6.01646e+05 + 9.58250e+05 -3.96743e+06 -6.08225e+05 + 9.58351e+05 -3.96829e+06 -6.14804e+05 + 9.58450e+05 -3.96914e+06 -6.21381e+05 + 9.58548e+05 -3.96999e+06 -6.27958e+05 + 9.58643e+05 -3.97083e+06 -6.34533e+05 + 9.58737e+05 -3.97166e+06 -6.41107e+05 + + +EPHEM_RATES + 1.41611e+02 -8.01984e+02 -3.96134e+03 + 1.40372e+02 -7.97712e+02 -3.96117e+03 + 1.39135e+02 -7.93444e+02 -3.96098e+03 + 1.37900e+02 -7.89179e+02 -3.96080e+03 + 1.36668e+02 -7.84918e+02 -3.96060e+03 + 1.35437e+02 -7.80660e+02 -3.96040e+03 + 1.34209e+02 -7.76406e+02 -3.96019e+03 + 1.32982e+02 -7.72156e+02 -3.95997e+03 + 1.31758e+02 -7.67909e+02 -3.95975e+03 + 1.30535e+02 -7.63666e+02 -3.95952e+03 + 1.29315e+02 -7.59426e+02 -3.95928e+03 + 1.28097e+02 -7.55190e+02 -3.95903e+03 + 1.26881e+02 -7.50957e+02 -3.95878e+03 + 1.25666e+02 -7.46728e+02 -3.95852e+03 + 1.24454e+02 -7.42503e+02 -3.95825e+03 + 1.23244e+02 -7.38281e+02 -3.95798e+03 + 1.22036e+02 -7.34064e+02 -3.95770e+03 + 1.20830e+02 -7.29849e+02 -3.95741e+03 + 1.19627e+02 -7.25639e+02 -3.95712e+03 + 1.18425e+02 -7.21432e+02 -3.95682e+03 + 1.17225e+02 -7.17229e+02 -3.95651e+03 + 1.16027e+02 -7.13030e+02 -3.95620e+03 + 1.14832e+02 -7.08834e+02 -3.95588e+03 + 1.13639e+02 -7.04642e+02 -3.95555e+03 + 1.12447e+02 -7.00454e+02 -3.95521e+03 + 1.11258e+02 -6.96270e+02 -3.95487e+03 + 1.10071e+02 -6.92089e+02 -3.95452e+03 + 1.08886e+02 -6.87913e+02 -3.95417e+03 + 1.07703e+02 -6.83740e+02 -3.95381e+03 + 1.06522e+02 -6.79571e+02 -3.95344e+03 + 1.05343e+02 -6.75406e+02 -3.95306e+03 + 1.04166e+02 -6.71245e+02 -3.95268e+03 + 1.02992e+02 -6.67087e+02 -3.95229e+03 + 1.01819e+02 -6.62934e+02 -3.95190e+03 + 1.00649e+02 -6.58784e+02 -3.95149e+03 + 9.94811e+01 -6.54638e+02 -3.95109e+03 + 9.83150e+01 -6.50497e+02 -3.95067e+03 + 9.71510e+01 -6.46359e+02 -3.95025e+03 + 9.59891e+01 -6.42225e+02 -3.94982e+03 + 9.48292e+01 -6.38095e+02 -3.94939e+03 + 9.36714e+01 -6.33969e+02 -3.94895e+03 + 9.25158e+01 -6.29847e+02 -3.94850e+03 + 9.13623e+01 -6.25729e+02 -3.94804e+03 + 9.02110e+01 -6.21615e+02 -3.94758e+03 + 8.90618e+01 -6.17505e+02 -3.94712e+03 + 8.79147e+01 -6.13399e+02 -3.94664e+03 + 8.67697e+01 -6.09297e+02 -3.94617e+03 + 8.56269e+01 -6.05199e+02 -3.94568e+03 + 8.44862e+01 -6.01105e+02 -3.94519e+03 + 8.33476e+01 -5.97016e+02 -3.94469e+03 + 8.22111e+01 -5.92930e+02 -3.94418e+03 + 8.10767e+01 -5.88848e+02 -3.94367e+03 + 7.99445e+01 -5.84771e+02 -3.94316e+03 + 7.88144e+01 -5.80697e+02 -3.94263e+03 + 7.76865e+01 -5.76628e+02 -3.94210e+03 + 7.65608e+01 -5.72563e+02 -3.94157e+03 + 7.54371e+01 -5.68502e+02 -3.94102e+03 + 7.43157e+01 -5.64445e+02 -3.94048e+03 + 7.31963e+01 -5.60392e+02 -3.93992e+03 + 7.20790e+01 -5.56343e+02 -3.93936e+03 + 7.09639e+01 -5.52299e+02 -3.93880e+03 + 6.98509e+01 -5.48258e+02 -3.93822e+03 + 6.87401e+01 -5.44222e+02 -3.93764e+03 + 6.76315e+01 -5.40190e+02 -3.93706e+03 + 6.65250e+01 -5.36163e+02 -3.93647e+03 + 6.54207e+01 -5.32139e+02 -3.93587e+03 + 6.43184e+01 -5.28120e+02 -3.93527e+03 + 6.32184e+01 -5.24105e+02 -3.93466e+03 + 6.21205e+01 -5.20094e+02 -3.93404e+03 + 6.10248e+01 -5.16088e+02 -3.93342e+03 + 5.99312e+01 -5.12086e+02 -3.93280e+03 + 5.88397e+01 -5.08088e+02 -3.93217e+03 + 5.77504e+01 -5.04094e+02 -3.93153e+03 + 5.66633e+01 -5.00104e+02 -3.93088e+03 + 5.55782e+01 -4.96119e+02 -3.93023e+03 + + +DT_QUAT 1.56716e-01 +T0_QUAT -4.74852e+01 +NUMBER_OF_QUATERNIONS 607 +QUATERNIONS + -6.80811e-01 -8.54969e-02 9.96244e-02 7.20598e-01 + -6.80756e-01 -8.54869e-02 9.96292e-02 7.20650e-01 + -6.80701e-01 -8.54770e-02 9.96340e-02 7.20702e-01 + -6.80647e-01 -8.54670e-02 9.96388e-02 7.20754e-01 + -6.80592e-01 -8.54570e-02 9.96436e-02 7.20806e-01 + -6.80537e-01 -8.54471e-02 9.96484e-02 7.20858e-01 + -6.80483e-01 -8.54371e-02 9.96532e-02 7.20910e-01 + -6.80428e-01 -8.54272e-02 9.96580e-02 7.20962e-01 + -6.80373e-01 -8.54172e-02 9.96628e-02 7.21014e-01 + -6.80319e-01 -8.54073e-02 9.96676e-02 7.21067e-01 + -6.80264e-01 -8.53973e-02 9.96724e-02 7.21119e-01 + -6.80209e-01 -8.53874e-02 9.96772e-02 7.21171e-01 + -6.80155e-01 -8.53774e-02 9.96820e-02 7.21223e-01 + -6.80100e-01 -8.53675e-02 9.96868e-02 7.21275e-01 + -6.80045e-01 -8.53575e-02 9.96916e-02 7.21327e-01 + -6.79991e-01 -8.53476e-02 9.96964e-02 7.21379e-01 + -6.79936e-01 -8.53376e-02 9.97012e-02 7.21431e-01 + -6.79882e-01 -8.53277e-02 9.97060e-02 7.21483e-01 + -6.79827e-01 -8.53178e-02 9.97108e-02 7.21535e-01 + -6.79772e-01 -8.53078e-02 9.97155e-02 7.21587e-01 + -6.79718e-01 -8.52979e-02 9.97203e-02 7.21639e-01 + -6.79663e-01 -8.52879e-02 9.97251e-02 7.21691e-01 + -6.79608e-01 -8.52780e-02 9.97299e-02 7.21743e-01 + -6.79554e-01 -8.52681e-02 9.97347e-02 7.21795e-01 + -6.79499e-01 -8.52581e-02 9.97395e-02 7.21847e-01 + -6.79444e-01 -8.52482e-02 9.97443e-02 7.21899e-01 + -6.79390e-01 -8.52383e-02 9.97491e-02 7.21951e-01 + -6.79335e-01 -8.52283e-02 9.97539e-02 7.22003e-01 + -6.79280e-01 -8.52184e-02 9.97586e-02 7.22054e-01 + -6.79226e-01 -8.52085e-02 9.97634e-02 7.22106e-01 + -6.79171e-01 -8.51985e-02 9.97682e-02 7.22158e-01 + -6.79117e-01 -8.51886e-02 9.97730e-02 7.22210e-01 + -6.79062e-01 -8.51787e-02 9.97778e-02 7.22262e-01 + -6.79007e-01 -8.51688e-02 9.97825e-02 7.22314e-01 + -6.78953e-01 -8.51588e-02 9.97873e-02 7.22366e-01 + -6.78898e-01 -8.51489e-02 9.97921e-02 7.22418e-01 + -6.78843e-01 -8.51390e-02 9.97969e-02 7.22470e-01 + -6.78789e-01 -8.51291e-02 9.98017e-02 7.22521e-01 + -6.78734e-01 -8.51191e-02 9.98064e-02 7.22573e-01 + -6.78679e-01 -8.51092e-02 9.98112e-02 7.22625e-01 + -6.78625e-01 -8.50993e-02 9.98160e-02 7.22677e-01 + -6.78570e-01 -8.50894e-02 9.98208e-02 7.22729e-01 + -6.78515e-01 -8.50795e-02 9.98255e-02 7.22781e-01 + -6.78461e-01 -8.50696e-02 9.98303e-02 7.22832e-01 + -6.78406e-01 -8.50596e-02 9.98351e-02 7.22884e-01 + -6.78352e-01 -8.50497e-02 9.98398e-02 7.22936e-01 + -6.78297e-01 -8.50398e-02 9.98446e-02 7.22988e-01 + -6.78242e-01 -8.50299e-02 9.98494e-02 7.23039e-01 + -6.78188e-01 -8.50200e-02 9.98541e-02 7.23091e-01 + -6.78133e-01 -8.50101e-02 9.98589e-02 7.23143e-01 + -6.78078e-01 -8.50002e-02 9.98637e-02 7.23195e-01 + -6.78024e-01 -8.49903e-02 9.98684e-02 7.23246e-01 + -6.77969e-01 -8.49804e-02 9.98732e-02 7.23298e-01 + -6.77914e-01 -8.49705e-02 9.98780e-02 7.23350e-01 + -6.77860e-01 -8.49606e-02 9.98827e-02 7.23402e-01 + -6.77805e-01 -8.49507e-02 9.98875e-02 7.23453e-01 + -6.77750e-01 -8.49408e-02 9.98923e-02 7.23505e-01 + -6.77696e-01 -8.49309e-02 9.98970e-02 7.23557e-01 + -6.77641e-01 -8.49210e-02 9.99018e-02 7.23608e-01 + -6.77587e-01 -8.49111e-02 9.99065e-02 7.23660e-01 + -6.77532e-01 -8.49012e-02 9.99113e-02 7.23712e-01 + -6.77477e-01 -8.48913e-02 9.99160e-02 7.23763e-01 + -6.77423e-01 -8.48814e-02 9.99208e-02 7.23815e-01 + -6.77368e-01 -8.48715e-02 9.99256e-02 7.23867e-01 + -6.77313e-01 -8.48616e-02 9.99303e-02 7.23918e-01 + -6.77259e-01 -8.48517e-02 9.99351e-02 7.23970e-01 + -6.77204e-01 -8.48418e-02 9.99398e-02 7.24022e-01 + -6.77149e-01 -8.48319e-02 9.99446e-02 7.24073e-01 + -6.77095e-01 -8.48220e-02 9.99493e-02 7.24125e-01 + -6.77040e-01 -8.48121e-02 9.99541e-02 7.24176e-01 + -6.76986e-01 -8.48022e-02 9.99588e-02 7.24228e-01 + -6.76931e-01 -8.47924e-02 9.99636e-02 7.24279e-01 + -6.76876e-01 -8.47825e-02 9.99683e-02 7.24331e-01 + -6.76822e-01 -8.47726e-02 9.99731e-02 7.24383e-01 + -6.76767e-01 -8.47627e-02 9.99778e-02 7.24434e-01 + -6.76712e-01 -8.47528e-02 9.99826e-02 7.24486e-01 + -6.76658e-01 -8.47430e-02 9.99873e-02 7.24537e-01 + -6.76603e-01 -8.47331e-02 9.99920e-02 7.24589e-01 + -6.76548e-01 -8.47232e-02 9.99968e-02 7.24640e-01 + -6.76494e-01 -8.47133e-02 1.00001e-01 7.24692e-01 + -6.76439e-01 -8.47034e-02 1.00006e-01 7.24743e-01 + -6.76385e-01 -8.46936e-02 1.00011e-01 7.24795e-01 + -6.76330e-01 -8.46837e-02 1.00015e-01 7.24846e-01 + -6.76275e-01 -8.46738e-02 1.00020e-01 7.24898e-01 + -6.76221e-01 -8.46640e-02 1.00025e-01 7.24949e-01 + -6.76166e-01 -8.46541e-02 1.00030e-01 7.25001e-01 + -6.76111e-01 -8.46442e-02 1.00034e-01 7.25052e-01 + -6.76057e-01 -8.46344e-02 1.00039e-01 7.25103e-01 + -6.76002e-01 -8.46245e-02 1.00044e-01 7.25155e-01 + -6.75947e-01 -8.46146e-02 1.00048e-01 7.25206e-01 + -6.75893e-01 -8.46048e-02 1.00053e-01 7.25258e-01 + -6.75838e-01 -8.45949e-02 1.00058e-01 7.25309e-01 + -6.75784e-01 -8.45850e-02 1.00063e-01 7.25361e-01 + -6.75729e-01 -8.45752e-02 1.00067e-01 7.25412e-01 + -6.75674e-01 -8.45653e-02 1.00072e-01 7.25463e-01 + -6.75620e-01 -8.45554e-02 1.00077e-01 7.25515e-01 + -6.75565e-01 -8.45456e-02 1.00082e-01 7.25566e-01 + -6.75510e-01 -8.45357e-02 1.00086e-01 7.25617e-01 + -6.75456e-01 -8.45259e-02 1.00091e-01 7.25669e-01 + -6.75401e-01 -8.45160e-02 1.00096e-01 7.25720e-01 + -6.75346e-01 -8.45062e-02 1.00100e-01 7.25771e-01 + -6.75292e-01 -8.44963e-02 1.00105e-01 7.25823e-01 + -6.75237e-01 -8.44865e-02 1.00110e-01 7.25874e-01 + -6.75183e-01 -8.44766e-02 1.00115e-01 7.25925e-01 + -6.75128e-01 -8.44668e-02 1.00119e-01 7.25977e-01 + -6.75073e-01 -8.44569e-02 1.00124e-01 7.26028e-01 + -6.75019e-01 -8.44471e-02 1.00129e-01 7.26079e-01 + -6.74964e-01 -8.44372e-02 1.00133e-01 7.26131e-01 + -6.74909e-01 -8.44274e-02 1.00138e-01 7.26182e-01 + -6.74855e-01 -8.44175e-02 1.00143e-01 7.26233e-01 + -6.74800e-01 -8.44077e-02 1.00148e-01 7.26284e-01 + -6.74746e-01 -8.43979e-02 1.00152e-01 7.26336e-01 + -6.74691e-01 -8.43880e-02 1.00157e-01 7.26387e-01 + -6.74636e-01 -8.43782e-02 1.00162e-01 7.26438e-01 + -6.74582e-01 -8.43683e-02 1.00166e-01 7.26489e-01 + -6.74527e-01 -8.43585e-02 1.00171e-01 7.26540e-01 + -6.74472e-01 -8.43487e-02 1.00176e-01 7.26592e-01 + -6.74418e-01 -8.43388e-02 1.00181e-01 7.26643e-01 + -6.74363e-01 -8.43290e-02 1.00185e-01 7.26694e-01 + -6.74309e-01 -8.43192e-02 1.00190e-01 7.26745e-01 + -6.74254e-01 -8.43093e-02 1.00195e-01 7.26796e-01 + -6.74199e-01 -8.42995e-02 1.00199e-01 7.26848e-01 + -6.74145e-01 -8.42897e-02 1.00204e-01 7.26899e-01 + -6.74090e-01 -8.42798e-02 1.00209e-01 7.26950e-01 + -6.74035e-01 -8.42700e-02 1.00214e-01 7.27001e-01 + -6.73981e-01 -8.42602e-02 1.00218e-01 7.27052e-01 + -6.73926e-01 -8.42504e-02 1.00223e-01 7.27103e-01 + -6.73872e-01 -8.42405e-02 1.00228e-01 7.27154e-01 + -6.73817e-01 -8.42307e-02 1.00232e-01 7.27206e-01 + -6.73762e-01 -8.42209e-02 1.00237e-01 7.27257e-01 + -6.73708e-01 -8.42111e-02 1.00242e-01 7.27308e-01 + -6.73653e-01 -8.42013e-02 1.00246e-01 7.27359e-01 + -6.73598e-01 -8.41914e-02 1.00251e-01 7.27410e-01 + -6.73544e-01 -8.41816e-02 1.00256e-01 7.27461e-01 + -6.73489e-01 -8.41718e-02 1.00261e-01 7.27512e-01 + -6.73435e-01 -8.41620e-02 1.00265e-01 7.27563e-01 + -6.73380e-01 -8.41522e-02 1.00270e-01 7.27614e-01 + -6.73325e-01 -8.41424e-02 1.00275e-01 7.27665e-01 + -6.73271e-01 -8.41325e-02 1.00279e-01 7.27716e-01 + -6.73216e-01 -8.41227e-02 1.00284e-01 7.27767e-01 + -6.73162e-01 -8.41129e-02 1.00289e-01 7.27818e-01 + -6.73107e-01 -8.41031e-02 1.00293e-01 7.27869e-01 + -6.73052e-01 -8.40933e-02 1.00298e-01 7.27920e-01 + -6.72998e-01 -8.40835e-02 1.00303e-01 7.27971e-01 + -6.72943e-01 -8.40737e-02 1.00307e-01 7.28022e-01 + -6.72888e-01 -8.40639e-02 1.00312e-01 7.28073e-01 + -6.72834e-01 -8.40541e-02 1.00317e-01 7.28124e-01 + -6.72779e-01 -8.40443e-02 1.00321e-01 7.28175e-01 + -6.72725e-01 -8.40345e-02 1.00326e-01 7.28226e-01 + -6.72670e-01 -8.40247e-02 1.00331e-01 7.28277e-01 + -6.72615e-01 -8.40149e-02 1.00336e-01 7.28328e-01 + -6.72561e-01 -8.40051e-02 1.00340e-01 7.28379e-01 + -6.72506e-01 -8.39953e-02 1.00345e-01 7.28430e-01 + -6.72452e-01 -8.39855e-02 1.00350e-01 7.28481e-01 + -6.72397e-01 -8.39757e-02 1.00354e-01 7.28531e-01 + -6.72342e-01 -8.39659e-02 1.00359e-01 7.28582e-01 + -6.72288e-01 -8.39561e-02 1.00364e-01 7.28633e-01 + -6.72233e-01 -8.39463e-02 1.00368e-01 7.28684e-01 + -6.72178e-01 -8.39365e-02 1.00373e-01 7.28735e-01 + -6.72124e-01 -8.39268e-02 1.00378e-01 7.28786e-01 + -6.72069e-01 -8.39170e-02 1.00382e-01 7.28837e-01 + -6.72015e-01 -8.39072e-02 1.00387e-01 7.28887e-01 + -6.71960e-01 -8.38974e-02 1.00392e-01 7.28938e-01 + -6.71905e-01 -8.38876e-02 1.00396e-01 7.28989e-01 + -6.71851e-01 -8.38778e-02 1.00401e-01 7.29040e-01 + -6.71796e-01 -8.38680e-02 1.00406e-01 7.29091e-01 + -6.71742e-01 -8.38583e-02 1.00410e-01 7.29141e-01 + -6.71687e-01 -8.38485e-02 1.00415e-01 7.29192e-01 + -6.71632e-01 -8.38387e-02 1.00420e-01 7.29243e-01 + -6.71578e-01 -8.38289e-02 1.00424e-01 7.29294e-01 + -6.71523e-01 -8.38191e-02 1.00429e-01 7.29345e-01 + -6.71469e-01 -8.38094e-02 1.00434e-01 7.29395e-01 + -6.71414e-01 -8.37996e-02 1.00438e-01 7.29446e-01 + -6.71359e-01 -8.37898e-02 1.00443e-01 7.29497e-01 + -6.71305e-01 -8.37800e-02 1.00448e-01 7.29548e-01 + -6.71250e-01 -8.37703e-02 1.00452e-01 7.29598e-01 + -6.71196e-01 -8.37605e-02 1.00457e-01 7.29649e-01 + -6.71141e-01 -8.37507e-02 1.00462e-01 7.29700e-01 + -6.71086e-01 -8.37410e-02 1.00466e-01 7.29750e-01 + -6.71032e-01 -8.37312e-02 1.00471e-01 7.29801e-01 + -6.70977e-01 -8.37214e-02 1.00476e-01 7.29852e-01 + -6.70922e-01 -8.37117e-02 1.00480e-01 7.29902e-01 + -6.70868e-01 -8.37019e-02 1.00485e-01 7.29953e-01 + -6.70813e-01 -8.36921e-02 1.00489e-01 7.30004e-01 + -6.70759e-01 -8.36824e-02 1.00494e-01 7.30054e-01 + -6.70704e-01 -8.36726e-02 1.00499e-01 7.30105e-01 + -6.70649e-01 -8.36629e-02 1.00503e-01 7.30156e-01 + -6.70595e-01 -8.36531e-02 1.00508e-01 7.30206e-01 + -6.70540e-01 -8.36434e-02 1.00513e-01 7.30257e-01 + -6.70486e-01 -8.36336e-02 1.00517e-01 7.30308e-01 + -6.70431e-01 -8.36238e-02 1.00522e-01 7.30358e-01 + -6.70376e-01 -8.36141e-02 1.00527e-01 7.30409e-01 + -6.70322e-01 -8.36043e-02 1.00531e-01 7.30459e-01 + -6.70267e-01 -8.35946e-02 1.00536e-01 7.30510e-01 + -6.70213e-01 -8.35848e-02 1.00541e-01 7.30560e-01 + -6.70158e-01 -8.35751e-02 1.00545e-01 7.30611e-01 + -6.70103e-01 -8.35653e-02 1.00550e-01 7.30662e-01 + -6.70049e-01 -8.35556e-02 1.00555e-01 7.30712e-01 + -6.69994e-01 -8.35458e-02 1.00559e-01 7.30763e-01 + -6.69940e-01 -8.35361e-02 1.00564e-01 7.30813e-01 + -6.69885e-01 -8.35264e-02 1.00568e-01 7.30864e-01 + -6.69830e-01 -8.35166e-02 1.00573e-01 7.30914e-01 + -6.69776e-01 -8.35069e-02 1.00578e-01 7.30965e-01 + -6.69721e-01 -8.34971e-02 1.00582e-01 7.31015e-01 + -6.69667e-01 -8.34874e-02 1.00587e-01 7.31066e-01 + -6.69612e-01 -8.34777e-02 1.00592e-01 7.31116e-01 + -6.69558e-01 -8.34679e-02 1.00596e-01 7.31167e-01 + -6.69503e-01 -8.34582e-02 1.00601e-01 7.31217e-01 + -6.69448e-01 -8.34485e-02 1.00605e-01 7.31268e-01 + -6.69394e-01 -8.34387e-02 1.00610e-01 7.31318e-01 + -6.69339e-01 -8.34290e-02 1.00615e-01 7.31368e-01 + -6.69285e-01 -8.34193e-02 1.00619e-01 7.31419e-01 + -6.69230e-01 -8.34095e-02 1.00624e-01 7.31469e-01 + -6.69175e-01 -8.33998e-02 1.00629e-01 7.31520e-01 + -6.69121e-01 -8.33901e-02 1.00633e-01 7.31570e-01 + -6.69066e-01 -8.33803e-02 1.00638e-01 7.31621e-01 + -6.69012e-01 -8.33706e-02 1.00642e-01 7.31671e-01 + -6.68957e-01 -8.33609e-02 1.00647e-01 7.31721e-01 + -6.68902e-01 -8.33512e-02 1.00652e-01 7.31772e-01 + -6.68848e-01 -8.33414e-02 1.00656e-01 7.31822e-01 + -6.68793e-01 -8.33317e-02 1.00661e-01 7.31872e-01 + -6.68739e-01 -8.33220e-02 1.00666e-01 7.31923e-01 + -6.68684e-01 -8.33123e-02 1.00670e-01 7.31973e-01 + -6.68630e-01 -8.33026e-02 1.00675e-01 7.32023e-01 + -6.68575e-01 -8.32928e-02 1.00679e-01 7.32074e-01 + -6.68520e-01 -8.32831e-02 1.00684e-01 7.32124e-01 + -6.68466e-01 -8.32734e-02 1.00689e-01 7.32174e-01 + -6.68411e-01 -8.32637e-02 1.00693e-01 7.32225e-01 + -6.68357e-01 -8.32540e-02 1.00698e-01 7.32275e-01 + -6.68302e-01 -8.32443e-02 1.00702e-01 7.32325e-01 + -6.68247e-01 -8.32346e-02 1.00707e-01 7.32376e-01 + -6.68193e-01 -8.32249e-02 1.00712e-01 7.32426e-01 + -6.68138e-01 -8.32152e-02 1.00716e-01 7.32476e-01 + -6.68084e-01 -8.32054e-02 1.00721e-01 7.32526e-01 + -6.68029e-01 -8.31957e-02 1.00726e-01 7.32577e-01 + -6.67974e-01 -8.31860e-02 1.00730e-01 7.32627e-01 + -6.67920e-01 -8.31763e-02 1.00735e-01 7.32677e-01 + -6.67865e-01 -8.31666e-02 1.00739e-01 7.32727e-01 + -6.67811e-01 -8.31569e-02 1.00744e-01 7.32777e-01 + -6.67756e-01 -8.31472e-02 1.00749e-01 7.32828e-01 + -6.67702e-01 -8.31375e-02 1.00753e-01 7.32878e-01 + -6.67647e-01 -8.31278e-02 1.00758e-01 7.32928e-01 + -6.67592e-01 -8.31181e-02 1.00762e-01 7.32978e-01 + -6.67538e-01 -8.31084e-02 1.00767e-01 7.33028e-01 + -6.67483e-01 -8.30987e-02 1.00772e-01 7.33079e-01 + -6.67429e-01 -8.30891e-02 1.00776e-01 7.33129e-01 + -6.67374e-01 -8.30794e-02 1.00781e-01 7.33179e-01 + -6.67320e-01 -8.30697e-02 1.00785e-01 7.33229e-01 + -6.67265e-01 -8.30600e-02 1.00790e-01 7.33279e-01 + -6.67210e-01 -8.30503e-02 1.00795e-01 7.33329e-01 + -6.67156e-01 -8.30406e-02 1.00799e-01 7.33379e-01 + -6.67101e-01 -8.30309e-02 1.00804e-01 7.33430e-01 + -6.67047e-01 -8.30212e-02 1.00808e-01 7.33480e-01 + -6.66992e-01 -8.30115e-02 1.00813e-01 7.33530e-01 + -6.66938e-01 -8.30019e-02 1.00817e-01 7.33580e-01 + -6.66883e-01 -8.29922e-02 1.00822e-01 7.33630e-01 + -6.66828e-01 -8.29825e-02 1.00827e-01 7.33680e-01 + -6.66774e-01 -8.29728e-02 1.00831e-01 7.33730e-01 + -6.66719e-01 -8.29631e-02 1.00836e-01 7.33780e-01 + -6.66665e-01 -8.29535e-02 1.00840e-01 7.33830e-01 + -6.66610e-01 -8.29438e-02 1.00845e-01 7.33880e-01 + -6.66556e-01 -8.29341e-02 1.00850e-01 7.33930e-01 + -6.66501e-01 -8.29244e-02 1.00854e-01 7.33980e-01 + -6.66446e-01 -8.29148e-02 1.00859e-01 7.34030e-01 + -6.66392e-01 -8.29051e-02 1.00863e-01 7.34080e-01 + -6.66337e-01 -8.28954e-02 1.00868e-01 7.34130e-01 + -6.66283e-01 -8.28857e-02 1.00872e-01 7.34180e-01 + -6.66228e-01 -8.28761e-02 1.00877e-01 7.34230e-01 + -6.66174e-01 -8.28664e-02 1.00882e-01 7.34280e-01 + -6.66119e-01 -8.28567e-02 1.00886e-01 7.34330e-01 + -6.66064e-01 -8.28471e-02 1.00891e-01 7.34380e-01 + -6.66010e-01 -8.28374e-02 1.00895e-01 7.34430e-01 + -6.65955e-01 -8.28278e-02 1.00900e-01 7.34480e-01 + -6.65901e-01 -8.28181e-02 1.00905e-01 7.34530e-01 + -6.65846e-01 -8.28084e-02 1.00909e-01 7.34580e-01 + -6.65792e-01 -8.27988e-02 1.00914e-01 7.34630e-01 + -6.65737e-01 -8.27891e-02 1.00918e-01 7.34680e-01 + -6.65683e-01 -8.27795e-02 1.00923e-01 7.34729e-01 + -6.65628e-01 -8.27698e-02 1.00927e-01 7.34779e-01 + -6.65573e-01 -8.27601e-02 1.00932e-01 7.34829e-01 + -6.65519e-01 -8.27505e-02 1.00936e-01 7.34879e-01 + -6.65464e-01 -8.27408e-02 1.00941e-01 7.34929e-01 + -6.65410e-01 -8.27312e-02 1.00946e-01 7.34979e-01 + -6.65355e-01 -8.27215e-02 1.00950e-01 7.35029e-01 + -6.65301e-01 -8.27119e-02 1.00955e-01 7.35079e-01 + -6.65246e-01 -8.27022e-02 1.00959e-01 7.35128e-01 + -6.65192e-01 -8.26926e-02 1.00964e-01 7.35178e-01 + -6.65137e-01 -8.26829e-02 1.00968e-01 7.35228e-01 + -6.65082e-01 -8.26733e-02 1.00973e-01 7.35278e-01 + -6.65028e-01 -8.26636e-02 1.00978e-01 7.35328e-01 + -6.64973e-01 -8.26540e-02 1.00982e-01 7.35377e-01 + -6.64919e-01 -8.26444e-02 1.00987e-01 7.35427e-01 + -6.64864e-01 -8.26347e-02 1.00991e-01 7.35477e-01 + -6.64810e-01 -8.26251e-02 1.00996e-01 7.35527e-01 + -6.64755e-01 -8.26154e-02 1.01000e-01 7.35576e-01 + -6.64701e-01 -8.26058e-02 1.01005e-01 7.35626e-01 + -6.64646e-01 -8.25962e-02 1.01009e-01 7.35676e-01 + -6.64591e-01 -8.25865e-02 1.01014e-01 7.35726e-01 + -6.64537e-01 -8.25769e-02 1.01019e-01 7.35775e-01 + -6.64482e-01 -8.25673e-02 1.01023e-01 7.35825e-01 + -6.64428e-01 -8.25576e-02 1.01028e-01 7.35875e-01 + -6.64373e-01 -8.25480e-02 1.01032e-01 7.35925e-01 + -6.64319e-01 -8.25384e-02 1.01037e-01 7.35974e-01 + -6.64264e-01 -8.25288e-02 1.01041e-01 7.36024e-01 + -6.64210e-01 -8.25191e-02 1.01046e-01 7.36074e-01 + -6.64155e-01 -8.25095e-02 1.01050e-01 7.36123e-01 + -6.64101e-01 -8.24999e-02 1.01055e-01 7.36173e-01 + -6.64046e-01 -8.24902e-02 1.01059e-01 7.36223e-01 + -6.63991e-01 -8.24806e-02 1.01064e-01 7.36272e-01 + -6.63937e-01 -8.24710e-02 1.01069e-01 7.36322e-01 + -6.63882e-01 -8.24614e-02 1.01073e-01 7.36372e-01 + -6.63828e-01 -8.24518e-02 1.01078e-01 7.36421e-01 + -6.63773e-01 -8.24421e-02 1.01082e-01 7.36471e-01 + -6.63719e-01 -8.24325e-02 1.01087e-01 7.36520e-01 + -6.63664e-01 -8.24229e-02 1.01091e-01 7.36570e-01 + -6.63610e-01 -8.24133e-02 1.01096e-01 7.36620e-01 + -6.63555e-01 -8.24037e-02 1.01100e-01 7.36669e-01 + -6.63501e-01 -8.23941e-02 1.01105e-01 7.36719e-01 + -6.63446e-01 -8.23845e-02 1.01109e-01 7.36768e-01 + -6.63392e-01 -8.23749e-02 1.01114e-01 7.36818e-01 + -6.63337e-01 -8.23652e-02 1.01118e-01 7.36867e-01 + -6.63282e-01 -8.23556e-02 1.01123e-01 7.36917e-01 + -6.63228e-01 -8.23460e-02 1.01127e-01 7.36966e-01 + -6.63173e-01 -8.23364e-02 1.01132e-01 7.37016e-01 + -6.63119e-01 -8.23268e-02 1.01136e-01 7.37066e-01 + -6.63064e-01 -8.23172e-02 1.01141e-01 7.37115e-01 + -6.63010e-01 -8.23076e-02 1.01146e-01 7.37165e-01 + -6.62955e-01 -8.22980e-02 1.01150e-01 7.37214e-01 + -6.62901e-01 -8.22884e-02 1.01155e-01 7.37264e-01 + -6.62846e-01 -8.22788e-02 1.01159e-01 7.37313e-01 + -6.62792e-01 -8.22692e-02 1.01164e-01 7.37362e-01 + -6.62737e-01 -8.22596e-02 1.01168e-01 7.37412e-01 + -6.62683e-01 -8.22500e-02 1.01173e-01 7.37461e-01 + -6.62628e-01 -8.22404e-02 1.01177e-01 7.37511e-01 + -6.62574e-01 -8.22308e-02 1.01182e-01 7.37560e-01 + -6.62519e-01 -8.22212e-02 1.01186e-01 7.37610e-01 + -6.62464e-01 -8.22116e-02 1.01191e-01 7.37659e-01 + -6.62410e-01 -8.22021e-02 1.01195e-01 7.37709e-01 + -6.62355e-01 -8.21925e-02 1.01200e-01 7.37758e-01 + -6.62301e-01 -8.21829e-02 1.01204e-01 7.37807e-01 + -6.62246e-01 -8.21733e-02 1.01209e-01 7.37857e-01 + -6.62192e-01 -8.21637e-02 1.01213e-01 7.37906e-01 + -6.62137e-01 -8.21541e-02 1.01218e-01 7.37955e-01 + -6.62083e-01 -8.21445e-02 1.01222e-01 7.38005e-01 + -6.62028e-01 -8.21350e-02 1.01227e-01 7.38054e-01 + -6.61974e-01 -8.21254e-02 1.01231e-01 7.38104e-01 + -6.61919e-01 -8.21158e-02 1.01236e-01 7.38153e-01 + -6.61865e-01 -8.21062e-02 1.01240e-01 7.38202e-01 + -6.61810e-01 -8.20966e-02 1.01245e-01 7.38252e-01 + -6.61756e-01 -8.20871e-02 1.01249e-01 7.38301e-01 + -6.61701e-01 -8.20775e-02 1.01254e-01 7.38350e-01 + -6.61647e-01 -8.20679e-02 1.01258e-01 7.38399e-01 + -6.61592e-01 -8.20583e-02 1.01263e-01 7.38449e-01 + -6.61538e-01 -8.20488e-02 1.01267e-01 7.38498e-01 + -6.61483e-01 -8.20392e-02 1.01272e-01 7.38547e-01 + -6.61429e-01 -8.20296e-02 1.01276e-01 7.38597e-01 + -6.61374e-01 -8.20201e-02 1.01281e-01 7.38646e-01 + -6.61320e-01 -8.20105e-02 1.01285e-01 7.38695e-01 + -6.61265e-01 -8.20009e-02 1.01290e-01 7.38744e-01 + -6.61211e-01 -8.19914e-02 1.01294e-01 7.38794e-01 + -6.61156e-01 -8.19818e-02 1.01299e-01 7.38843e-01 + -6.61102e-01 -8.19722e-02 1.01303e-01 7.38892e-01 + -6.61047e-01 -8.19627e-02 1.01308e-01 7.38941e-01 + -6.60993e-01 -8.19531e-02 1.01312e-01 7.38990e-01 + -6.60938e-01 -8.19436e-02 1.01317e-01 7.39040e-01 + -6.60883e-01 -8.19340e-02 1.01321e-01 7.39089e-01 + -6.60829e-01 -8.19244e-02 1.01326e-01 7.39138e-01 + -6.60774e-01 -8.19149e-02 1.01330e-01 7.39187e-01 + -6.60720e-01 -8.19053e-02 1.01335e-01 7.39236e-01 + -6.60665e-01 -8.18958e-02 1.01339e-01 7.39286e-01 + -6.60611e-01 -8.18862e-02 1.01344e-01 7.39335e-01 + -6.60556e-01 -8.18767e-02 1.01348e-01 7.39384e-01 + -6.60502e-01 -8.18671e-02 1.01353e-01 7.39433e-01 + -6.60447e-01 -8.18576e-02 1.01357e-01 7.39482e-01 + -6.60393e-01 -8.18480e-02 1.01362e-01 7.39531e-01 + -6.60338e-01 -8.18385e-02 1.01366e-01 7.39580e-01 + -6.60284e-01 -8.18289e-02 1.01371e-01 7.39629e-01 + -6.60229e-01 -8.18194e-02 1.01375e-01 7.39678e-01 + -6.60175e-01 -8.18098e-02 1.01380e-01 7.39728e-01 + -6.60120e-01 -8.18003e-02 1.01384e-01 7.39777e-01 + -6.60066e-01 -8.17908e-02 1.01389e-01 7.39826e-01 + -6.60011e-01 -8.17812e-02 1.01393e-01 7.39875e-01 + -6.59957e-01 -8.17717e-02 1.01397e-01 7.39924e-01 + -6.59902e-01 -8.17621e-02 1.01402e-01 7.39973e-01 + -6.59848e-01 -8.17526e-02 1.01406e-01 7.40022e-01 + -6.59793e-01 -8.17431e-02 1.01411e-01 7.40071e-01 + -6.59739e-01 -8.17335e-02 1.01415e-01 7.40120e-01 + -6.59684e-01 -8.17240e-02 1.01420e-01 7.40169e-01 + -6.59630e-01 -8.17145e-02 1.01424e-01 7.40218e-01 + -6.59575e-01 -8.17049e-02 1.01429e-01 7.40267e-01 + -6.59521e-01 -8.16954e-02 1.01433e-01 7.40316e-01 + -6.59467e-01 -8.16859e-02 1.01438e-01 7.40365e-01 + -6.59412e-01 -8.16764e-02 1.01442e-01 7.40414e-01 + -6.59358e-01 -8.16668e-02 1.01447e-01 7.40463e-01 + -6.59303e-01 -8.16573e-02 1.01451e-01 7.40512e-01 + -6.59249e-01 -8.16478e-02 1.01456e-01 7.40561e-01 + -6.59194e-01 -8.16383e-02 1.01460e-01 7.40610e-01 + -6.59140e-01 -8.16287e-02 1.01464e-01 7.40659e-01 + -6.59085e-01 -8.16192e-02 1.01469e-01 7.40708e-01 + -6.59031e-01 -8.16097e-02 1.01473e-01 7.40756e-01 + -6.58976e-01 -8.16002e-02 1.01478e-01 7.40805e-01 + -6.58922e-01 -8.15907e-02 1.01482e-01 7.40854e-01 + -6.58867e-01 -8.15811e-02 1.01487e-01 7.40903e-01 + -6.58813e-01 -8.15716e-02 1.01491e-01 7.40952e-01 + -6.58758e-01 -8.15621e-02 1.01496e-01 7.41001e-01 + -6.58704e-01 -8.15526e-02 1.01500e-01 7.41050e-01 + -6.58649e-01 -8.15431e-02 1.01505e-01 7.41099e-01 + -6.58595e-01 -8.15336e-02 1.01509e-01 7.41148e-01 + -6.58540e-01 -8.15241e-02 1.01513e-01 7.41196e-01 + -6.58486e-01 -8.15146e-02 1.01518e-01 7.41245e-01 + -6.58431e-01 -8.15051e-02 1.01522e-01 7.41294e-01 + -6.58377e-01 -8.14956e-02 1.01527e-01 7.41343e-01 + -6.58322e-01 -8.14861e-02 1.01531e-01 7.41392e-01 + -6.58268e-01 -8.14765e-02 1.01536e-01 7.41440e-01 + -6.58213e-01 -8.14670e-02 1.01540e-01 7.41489e-01 + -6.58159e-01 -8.14575e-02 1.01545e-01 7.41538e-01 + -6.58104e-01 -8.14480e-02 1.01549e-01 7.41587e-01 + -6.58050e-01 -8.14385e-02 1.01553e-01 7.41636e-01 + -6.57996e-01 -8.14290e-02 1.01558e-01 7.41684e-01 + -6.57941e-01 -8.14196e-02 1.01562e-01 7.41733e-01 + -6.57887e-01 -8.14101e-02 1.01567e-01 7.41782e-01 + -6.57832e-01 -8.14006e-02 1.01571e-01 7.41831e-01 + -6.57778e-01 -8.13911e-02 1.01576e-01 7.41879e-01 + -6.57723e-01 -8.13816e-02 1.01580e-01 7.41928e-01 + -6.57669e-01 -8.13721e-02 1.01585e-01 7.41977e-01 + -6.57614e-01 -8.13626e-02 1.01589e-01 7.42025e-01 + -6.57560e-01 -8.13531e-02 1.01593e-01 7.42074e-01 + -6.57505e-01 -8.13436e-02 1.01598e-01 7.42123e-01 + -6.57451e-01 -8.13341e-02 1.01602e-01 7.42172e-01 + -6.57396e-01 -8.13246e-02 1.01607e-01 7.42220e-01 + -6.57342e-01 -8.13152e-02 1.01611e-01 7.42269e-01 + -6.57287e-01 -8.13057e-02 1.01616e-01 7.42318e-01 + -6.57233e-01 -8.12962e-02 1.01620e-01 7.42366e-01 + -6.57179e-01 -8.12867e-02 1.01624e-01 7.42415e-01 + -6.57124e-01 -8.12772e-02 1.01629e-01 7.42464e-01 + -6.57070e-01 -8.12678e-02 1.01633e-01 7.42512e-01 + -6.57015e-01 -8.12583e-02 1.01638e-01 7.42561e-01 + -6.56961e-01 -8.12488e-02 1.01642e-01 7.42609e-01 + -6.56906e-01 -8.12393e-02 1.01646e-01 7.42658e-01 + -6.56852e-01 -8.12299e-02 1.01651e-01 7.42707e-01 + -6.56797e-01 -8.12204e-02 1.01655e-01 7.42755e-01 + -6.56743e-01 -8.12109e-02 1.01660e-01 7.42804e-01 + -6.56688e-01 -8.12014e-02 1.01664e-01 7.42852e-01 + -6.56634e-01 -8.11920e-02 1.01669e-01 7.42901e-01 + -6.56580e-01 -8.11825e-02 1.01673e-01 7.42949e-01 + -6.56525e-01 -8.11730e-02 1.01677e-01 7.42998e-01 + -6.56471e-01 -8.11636e-02 1.01682e-01 7.43047e-01 + -6.56416e-01 -8.11541e-02 1.01686e-01 7.43095e-01 + -6.56362e-01 -8.11446e-02 1.01691e-01 7.43144e-01 + -6.56307e-01 -8.11352e-02 1.01695e-01 7.43192e-01 + -6.56253e-01 -8.11257e-02 1.01699e-01 7.43241e-01 + -6.56198e-01 -8.11163e-02 1.01704e-01 7.43289e-01 + -6.56144e-01 -8.11068e-02 1.01708e-01 7.43338e-01 + -6.56089e-01 -8.10973e-02 1.01713e-01 7.43386e-01 + -6.56035e-01 -8.10879e-02 1.01717e-01 7.43435e-01 + -6.55981e-01 -8.10784e-02 1.01722e-01 7.43483e-01 + -6.55926e-01 -8.10690e-02 1.01726e-01 7.43531e-01 + -6.55872e-01 -8.10595e-02 1.01730e-01 7.43580e-01 + -6.55817e-01 -8.10501e-02 1.01735e-01 7.43628e-01 + -6.55763e-01 -8.10406e-02 1.01739e-01 7.43677e-01 + -6.55708e-01 -8.10312e-02 1.01744e-01 7.43725e-01 + -6.55654e-01 -8.10217e-02 1.01748e-01 7.43774e-01 + -6.55599e-01 -8.10123e-02 1.01752e-01 7.43822e-01 + -6.55545e-01 -8.10028e-02 1.01757e-01 7.43870e-01 + -6.55491e-01 -8.09934e-02 1.01761e-01 7.43919e-01 + -6.55436e-01 -8.09839e-02 1.01766e-01 7.43967e-01 + -6.55382e-01 -8.09745e-02 1.01770e-01 7.44016e-01 + -6.55327e-01 -8.09651e-02 1.01774e-01 7.44064e-01 + -6.55273e-01 -8.09556e-02 1.01779e-01 7.44112e-01 + -6.55218e-01 -8.09462e-02 1.01783e-01 7.44161e-01 + -6.55164e-01 -8.09367e-02 1.01788e-01 7.44209e-01 + -6.55110e-01 -8.09273e-02 1.01792e-01 7.44257e-01 + -6.55055e-01 -8.09179e-02 1.01796e-01 7.44306e-01 + -6.55001e-01 -8.09084e-02 1.01801e-01 7.44354e-01 + -6.54946e-01 -8.08990e-02 1.01805e-01 7.44402e-01 + -6.54892e-01 -8.08896e-02 1.01809e-01 7.44451e-01 + -6.54837e-01 -8.08801e-02 1.01814e-01 7.44499e-01 + -6.54783e-01 -8.08707e-02 1.01818e-01 7.44547e-01 + -6.54729e-01 -8.08613e-02 1.01823e-01 7.44596e-01 + -6.54674e-01 -8.08519e-02 1.01827e-01 7.44644e-01 + -6.54620e-01 -8.08424e-02 1.01831e-01 7.44692e-01 + -6.54565e-01 -8.08330e-02 1.01836e-01 7.44740e-01 + -6.54511e-01 -8.08236e-02 1.01840e-01 7.44789e-01 + -6.54456e-01 -8.08142e-02 1.01845e-01 7.44837e-01 + -6.54402e-01 -8.08047e-02 1.01849e-01 7.44885e-01 + -6.54348e-01 -8.07953e-02 1.01853e-01 7.44933e-01 + -6.54293e-01 -8.07859e-02 1.01858e-01 7.44982e-01 + -6.54239e-01 -8.07765e-02 1.01862e-01 7.45030e-01 + -6.54184e-01 -8.07671e-02 1.01866e-01 7.45078e-01 + -6.54130e-01 -8.07576e-02 1.01871e-01 7.45126e-01 + -6.54075e-01 -8.07482e-02 1.01875e-01 7.45174e-01 + -6.54021e-01 -8.07388e-02 1.01880e-01 7.45223e-01 + -6.53967e-01 -8.07294e-02 1.01884e-01 7.45271e-01 + -6.53912e-01 -8.07200e-02 1.01888e-01 7.45319e-01 + -6.53858e-01 -8.07106e-02 1.01893e-01 7.45367e-01 + -6.53803e-01 -8.07012e-02 1.01897e-01 7.45415e-01 + -6.53749e-01 -8.06918e-02 1.01901e-01 7.45463e-01 + -6.53695e-01 -8.06823e-02 1.01906e-01 7.45512e-01 + -6.53640e-01 -8.06729e-02 1.01910e-01 7.45560e-01 + -6.53586e-01 -8.06635e-02 1.01914e-01 7.45608e-01 + -6.53531e-01 -8.06541e-02 1.01919e-01 7.45656e-01 + -6.53477e-01 -8.06447e-02 1.01923e-01 7.45704e-01 + -6.53423e-01 -8.06353e-02 1.01928e-01 7.45752e-01 + -6.53368e-01 -8.06259e-02 1.01932e-01 7.45800e-01 + -6.53314e-01 -8.06165e-02 1.01936e-01 7.45848e-01 + -6.53259e-01 -8.06071e-02 1.01941e-01 7.45896e-01 + -6.53205e-01 -8.05977e-02 1.01945e-01 7.45944e-01 + -6.53151e-01 -8.05883e-02 1.01949e-01 7.45992e-01 + -6.53096e-01 -8.05789e-02 1.01954e-01 7.46040e-01 + -6.53042e-01 -8.05696e-02 1.01958e-01 7.46089e-01 + -6.52987e-01 -8.05602e-02 1.01962e-01 7.46137e-01 + -6.52933e-01 -8.05508e-02 1.01967e-01 7.46185e-01 + -6.52879e-01 -8.05414e-02 1.01971e-01 7.46233e-01 + -6.52824e-01 -8.05320e-02 1.01975e-01 7.46281e-01 + -6.52770e-01 -8.05226e-02 1.01980e-01 7.46329e-01 + -6.52715e-01 -8.05132e-02 1.01984e-01 7.46377e-01 + -6.52661e-01 -8.05038e-02 1.01989e-01 7.46425e-01 + -6.52607e-01 -8.04945e-02 1.01993e-01 7.46473e-01 + -6.52552e-01 -8.04851e-02 1.01997e-01 7.46521e-01 + -6.52498e-01 -8.04757e-02 1.02002e-01 7.46568e-01 + -6.52443e-01 -8.04663e-02 1.02006e-01 7.46616e-01 + -6.52389e-01 -8.04569e-02 1.02010e-01 7.46664e-01 + -6.52335e-01 -8.04475e-02 1.02015e-01 7.46712e-01 + -6.52280e-01 -8.04382e-02 1.02019e-01 7.46760e-01 + -6.52226e-01 -8.04288e-02 1.02023e-01 7.46808e-01 + -6.52171e-01 -8.04194e-02 1.02028e-01 7.46856e-01 + -6.52117e-01 -8.04100e-02 1.02032e-01 7.46904e-01 + -6.52063e-01 -8.04007e-02 1.02036e-01 7.46952e-01 + -6.52008e-01 -8.03913e-02 1.02041e-01 7.47000e-01 + -6.51954e-01 -8.03819e-02 1.02045e-01 7.47048e-01 + -6.51900e-01 -8.03726e-02 1.02049e-01 7.47096e-01 + -6.51845e-01 -8.03632e-02 1.02054e-01 7.47143e-01 + -6.51791e-01 -8.03538e-02 1.02058e-01 7.47191e-01 + -6.51736e-01 -8.03445e-02 1.02062e-01 7.47239e-01 + -6.51682e-01 -8.03351e-02 1.02067e-01 7.47287e-01 + -6.51628e-01 -8.03257e-02 1.02071e-01 7.47335e-01 + -6.51573e-01 -8.03164e-02 1.02075e-01 7.47383e-01 + -6.51519e-01 -8.03070e-02 1.02080e-01 7.47430e-01 + -6.51464e-01 -8.02977e-02 1.02084e-01 7.47478e-01 + -6.51410e-01 -8.02883e-02 1.02088e-01 7.47526e-01 + -6.51356e-01 -8.02789e-02 1.02093e-01 7.47574e-01 + -6.51301e-01 -8.02696e-02 1.02097e-01 7.47622e-01 + -6.51247e-01 -8.02602e-02 1.02101e-01 7.47669e-01 + -6.51193e-01 -8.02509e-02 1.02106e-01 7.47717e-01 + -6.51138e-01 -8.02415e-02 1.02110e-01 7.47765e-01 + -6.51084e-01 -8.02322e-02 1.02114e-01 7.47813e-01 + -6.51029e-01 -8.02228e-02 1.02119e-01 7.47860e-01 + -6.50975e-01 -8.02135e-02 1.02123e-01 7.47908e-01 + -6.50921e-01 -8.02041e-02 1.02127e-01 7.47956e-01 + -6.50866e-01 -8.01948e-02 1.02131e-01 7.48004e-01 + -6.50812e-01 -8.01854e-02 1.02136e-01 7.48051e-01 + -6.50758e-01 -8.01761e-02 1.02140e-01 7.48099e-01 + -6.50703e-01 -8.01667e-02 1.02144e-01 7.48147e-01 + -6.50649e-01 -8.01574e-02 1.02149e-01 7.48194e-01 + -6.50595e-01 -8.01481e-02 1.02153e-01 7.48242e-01 + -6.50540e-01 -8.01387e-02 1.02157e-01 7.48290e-01 + -6.50486e-01 -8.01294e-02 1.02162e-01 7.48337e-01 + -6.50431e-01 -8.01200e-02 1.02166e-01 7.48385e-01 + -6.50377e-01 -8.01107e-02 1.02170e-01 7.48433e-01 + -6.50323e-01 -8.01014e-02 1.02175e-01 7.48480e-01 + -6.50268e-01 -8.00920e-02 1.02179e-01 7.48528e-01 + -6.50214e-01 -8.00827e-02 1.02183e-01 7.48576e-01 + -6.50160e-01 -8.00734e-02 1.02188e-01 7.48623e-01 + -6.50105e-01 -8.00640e-02 1.02192e-01 7.48671e-01 + -6.50051e-01 -8.00547e-02 1.02196e-01 7.48718e-01 + -6.49997e-01 -8.00454e-02 1.02200e-01 7.48766e-01 + -6.49942e-01 -8.00361e-02 1.02205e-01 7.48814e-01 + -6.49888e-01 -8.00267e-02 1.02209e-01 7.48861e-01 + -6.49834e-01 -8.00174e-02 1.02213e-01 7.48909e-01 + -6.49779e-01 -8.00081e-02 1.02218e-01 7.48956e-01 + -6.49725e-01 -7.99988e-02 1.02222e-01 7.49004e-01 + -6.49671e-01 -7.99894e-02 1.02226e-01 7.49051e-01 + -6.49616e-01 -7.99801e-02 1.02231e-01 7.49099e-01 + -6.49562e-01 -7.99708e-02 1.02235e-01 7.49147e-01 + -6.49508e-01 -7.99615e-02 1.02239e-01 7.49194e-01 + -6.49453e-01 -7.99522e-02 1.02243e-01 7.49242e-01 + -6.49399e-01 -7.99428e-02 1.02248e-01 7.49289e-01 + -6.49344e-01 -7.99335e-02 1.02252e-01 7.49337e-01 + -6.49290e-01 -7.99242e-02 1.02256e-01 7.49384e-01 + -6.49236e-01 -7.99149e-02 1.02261e-01 7.49432e-01 + -6.49181e-01 -7.99056e-02 1.02265e-01 7.49479e-01 + -6.49127e-01 -7.98963e-02 1.02269e-01 7.49527e-01 + -6.49073e-01 -7.98870e-02 1.02273e-01 7.49574e-01 + -6.49018e-01 -7.98777e-02 1.02278e-01 7.49621e-01 + -6.48964e-01 -7.98684e-02 1.02282e-01 7.49669e-01 + -6.48910e-01 -7.98591e-02 1.02286e-01 7.49716e-01 + -6.48855e-01 -7.98498e-02 1.02291e-01 7.49764e-01 + -6.48801e-01 -7.98405e-02 1.02295e-01 7.49811e-01 + -6.48747e-01 -7.98311e-02 1.02299e-01 7.49859e-01 + -6.48692e-01 -7.98218e-02 1.02303e-01 7.49906e-01 + -6.48638e-01 -7.98125e-02 1.02308e-01 7.49953e-01 + -6.48584e-01 -7.98033e-02 1.02312e-01 7.50001e-01 + -6.48529e-01 -7.97940e-02 1.02316e-01 7.50048e-01 + -6.48475e-01 -7.97847e-02 1.02321e-01 7.50096e-01 + -6.48421e-01 -7.97754e-02 1.02325e-01 7.50143e-01 + -6.48367e-01 -7.97661e-02 1.02329e-01 7.50190e-01 + -6.48312e-01 -7.97568e-02 1.02333e-01 7.50238e-01 + -6.48258e-01 -7.97475e-02 1.02338e-01 7.50285e-01 + -6.48204e-01 -7.97382e-02 1.02342e-01 7.50332e-01 + -6.48149e-01 -7.97289e-02 1.02346e-01 7.50380e-01 + -6.48095e-01 -7.97196e-02 1.02350e-01 7.50427e-01 + -6.48041e-01 -7.97103e-02 1.02355e-01 7.50474e-01 + -6.47986e-01 -7.97010e-02 1.02359e-01 7.50522e-01 + -6.47932e-01 -7.96918e-02 1.02363e-01 7.50569e-01 + -6.47878e-01 -7.96825e-02 1.02367e-01 7.50616e-01 + -6.47823e-01 -7.96732e-02 1.02372e-01 7.50663e-01 + -6.47769e-01 -7.96639e-02 1.02376e-01 7.50711e-01 + + +SCAN_DURATION 9.19928e+01 +INT_TIME 3.52017e-03 + +ALONG_SCAN_PIXEL_SIZE 7.00000e-03 +CROSS_SCAN_PIXEL_SIZE 7.00000e-03 + +CENTER_GP -9.76327e-02 -1.33743e+00 0.00000e+00 +SENSOR_POSITION -9.89120e-02 -1.33301e+00 6.73737e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 26133 +TOTAL_SAMPLES 5176 + + + + +IKCODE -41215 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 0.00000e+00 0.00000e+00 0.00000e+00 +ITRANSS 4.83755e+00 -1.42857e+02 -8.57704e-03 +ITRANSL 7.85714e-01 -8.57704e-03 1.42857e+02 +DETECTOR_SAMPLE_ORIGIN 2.59250e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 1.58030e+08 +CENTER_EPHEMERIS_TIME 1.58030e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h4235_0001_s22_crop_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h4235_0001_s22_crop_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..36544f85291c0ca894abc59d327217ae887c72a4 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/hrsc/truth/sed_h4235_0001_s22_crop_keywords.txt @@ -0,0 +1,662 @@ +RECTIFICATION_TERMS + 3.81600e+03 0.00000e+00 1.00000e+00 + 2.58800e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -7.94589e-02 2.39466e+00 0.00000e+00 +LOAD_PT -7.94589e-02 2.39466e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScannerKLEv +SENSOR_MODE UNKNOWN +FOCAL 1.74800e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 3.81600e+03 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 2.58800e+03 0.00000e+00 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 1.74800e+02 0.00000e+00 0.00000e+00 +T_CENTER -3.57778e+01 +DT_EPHEM 1.42758e-01 +T0_EPHEM -5.21951e+01 +NUMBER_OF_EPHEM 231 +EPHEM_PTS + -2.72727e+06 2.55493e+06 -5.14151e+05 + -2.72738e+06 2.55504e+06 -5.13572e+05 + -2.72750e+06 2.55515e+06 -5.12992e+05 + -2.72761e+06 2.55525e+06 -5.12412e+05 + -2.72772e+06 2.55536e+06 -5.11833e+05 + -2.72783e+06 2.55547e+06 -5.11253e+05 + -2.72794e+06 2.55558e+06 -5.10673e+05 + -2.72806e+06 2.55569e+06 -5.10094e+05 + -2.72817e+06 2.55580e+06 -5.09514e+05 + -2.72828e+06 2.55591e+06 -5.08934e+05 + -2.72839e+06 2.55602e+06 -5.08355e+05 + -2.72850e+06 2.55612e+06 -5.07775e+05 + -2.72861e+06 2.55623e+06 -5.07195e+05 + -2.72873e+06 2.55634e+06 -5.06616e+05 + -2.72884e+06 2.55645e+06 -5.06036e+05 + -2.72895e+06 2.55656e+06 -5.05456e+05 + -2.72906e+06 2.55667e+06 -5.04876e+05 + -2.72917e+06 2.55678e+06 -5.04297e+05 + -2.72928e+06 2.55688e+06 -5.03717e+05 + -2.72939e+06 2.55699e+06 -5.03137e+05 + -2.72950e+06 2.55710e+06 -5.02557e+05 + -2.72962e+06 2.55721e+06 -5.01978e+05 + -2.72973e+06 2.55732e+06 -5.01398e+05 + -2.72984e+06 2.55743e+06 -5.00818e+05 + -2.72995e+06 2.55753e+06 -5.00238e+05 + -2.73006e+06 2.55764e+06 -4.99658e+05 + -2.73017e+06 2.55775e+06 -4.99079e+05 + -2.73028e+06 2.55786e+06 -4.98499e+05 + -2.73039e+06 2.55797e+06 -4.97919e+05 + -2.73050e+06 2.55807e+06 -4.97339e+05 + -2.73061e+06 2.55818e+06 -4.96759e+05 + -2.73072e+06 2.55829e+06 -4.96179e+05 + -2.73083e+06 2.55840e+06 -4.95599e+05 + -2.73094e+06 2.55851e+06 -4.95019e+05 + -2.73106e+06 2.55861e+06 -4.94440e+05 + -2.73117e+06 2.55872e+06 -4.93860e+05 + -2.73128e+06 2.55883e+06 -4.93280e+05 + -2.73139e+06 2.55894e+06 -4.92700e+05 + -2.73150e+06 2.55904e+06 -4.92120e+05 + -2.73161e+06 2.55915e+06 -4.91540e+05 + -2.73172e+06 2.55926e+06 -4.90960e+05 + -2.73183e+06 2.55937e+06 -4.90380e+05 + -2.73194e+06 2.55947e+06 -4.89800e+05 + -2.73205e+06 2.55958e+06 -4.89220e+05 + -2.73216e+06 2.55969e+06 -4.88640e+05 + -2.73227e+06 2.55980e+06 -4.88060e+05 + -2.73238e+06 2.55990e+06 -4.87480e+05 + -2.73249e+06 2.56001e+06 -4.86900e+05 + -2.73260e+06 2.56012e+06 -4.86320e+05 + -2.73271e+06 2.56022e+06 -4.85740e+05 + -2.73282e+06 2.56033e+06 -4.85160e+05 + -2.73293e+06 2.56044e+06 -4.84580e+05 + -2.73304e+06 2.56055e+06 -4.84000e+05 + -2.73315e+06 2.56065e+06 -4.83420e+05 + -2.73326e+06 2.56076e+06 -4.82840e+05 + -2.73337e+06 2.56087e+06 -4.82260e+05 + -2.73347e+06 2.56097e+06 -4.81680e+05 + -2.73358e+06 2.56108e+06 -4.81100e+05 + -2.73369e+06 2.56119e+06 -4.80520e+05 + -2.73380e+06 2.56129e+06 -4.79940e+05 + -2.73391e+06 2.56140e+06 -4.79360e+05 + -2.73402e+06 2.56151e+06 -4.78779e+05 + -2.73413e+06 2.56161e+06 -4.78199e+05 + -2.73424e+06 2.56172e+06 -4.77619e+05 + -2.73435e+06 2.56183e+06 -4.77039e+05 + -2.73446e+06 2.56193e+06 -4.76459e+05 + -2.73457e+06 2.56204e+06 -4.75879e+05 + -2.73468e+06 2.56215e+06 -4.75299e+05 + -2.73478e+06 2.56225e+06 -4.74719e+05 + -2.73489e+06 2.56236e+06 -4.74138e+05 + -2.73500e+06 2.56247e+06 -4.73558e+05 + -2.73511e+06 2.56257e+06 -4.72978e+05 + -2.73522e+06 2.56268e+06 -4.72398e+05 + -2.73533e+06 2.56279e+06 -4.71818e+05 + -2.73544e+06 2.56289e+06 -4.71237e+05 + -2.73555e+06 2.56300e+06 -4.70657e+05 + -2.73565e+06 2.56310e+06 -4.70077e+05 + -2.73576e+06 2.56321e+06 -4.69497e+05 + -2.73587e+06 2.56332e+06 -4.68916e+05 + -2.73598e+06 2.56342e+06 -4.68336e+05 + -2.73609e+06 2.56353e+06 -4.67756e+05 + -2.73620e+06 2.56363e+06 -4.67176e+05 + -2.73630e+06 2.56374e+06 -4.66595e+05 + -2.73641e+06 2.56385e+06 -4.66015e+05 + -2.73652e+06 2.56395e+06 -4.65435e+05 + -2.73663e+06 2.56406e+06 -4.64855e+05 + -2.73674e+06 2.56416e+06 -4.64274e+05 + -2.73685e+06 2.56427e+06 -4.63694e+05 + -2.73695e+06 2.56437e+06 -4.63114e+05 + -2.73706e+06 2.56448e+06 -4.62533e+05 + -2.73717e+06 2.56459e+06 -4.61953e+05 + -2.73728e+06 2.56469e+06 -4.61373e+05 + -2.73738e+06 2.56480e+06 -4.60792e+05 + -2.73749e+06 2.56490e+06 -4.60212e+05 + -2.73760e+06 2.56501e+06 -4.59632e+05 + -2.73771e+06 2.56511e+06 -4.59051e+05 + -2.73782e+06 2.56522e+06 -4.58471e+05 + -2.73792e+06 2.56532e+06 -4.57890e+05 + -2.73803e+06 2.56543e+06 -4.57310e+05 + -2.73814e+06 2.56553e+06 -4.56730e+05 + -2.73825e+06 2.56564e+06 -4.56149e+05 + -2.73835e+06 2.56574e+06 -4.55569e+05 + -2.73846e+06 2.56585e+06 -4.54988e+05 + -2.73857e+06 2.56595e+06 -4.54408e+05 + -2.73868e+06 2.56606e+06 -4.53828e+05 + -2.73878e+06 2.56616e+06 -4.53247e+05 + -2.73889e+06 2.56627e+06 -4.52667e+05 + -2.73900e+06 2.56637e+06 -4.52086e+05 + -2.73910e+06 2.56648e+06 -4.51506e+05 + -2.73921e+06 2.56658e+06 -4.50925e+05 + -2.73932e+06 2.56669e+06 -4.50345e+05 + -2.73942e+06 2.56679e+06 -4.49764e+05 + -2.73953e+06 2.56690e+06 -4.49184e+05 + -2.73964e+06 2.56700e+06 -4.48603e+05 + -2.73975e+06 2.56711e+06 -4.48023e+05 + -2.73985e+06 2.56721e+06 -4.47442e+05 + -2.73996e+06 2.56732e+06 -4.46862e+05 + -2.74007e+06 2.56742e+06 -4.46281e+05 + -2.74017e+06 2.56753e+06 -4.45701e+05 + -2.74028e+06 2.56763e+06 -4.45120e+05 + -2.74038e+06 2.56773e+06 -4.44540e+05 + -2.74049e+06 2.56784e+06 -4.43959e+05 + -2.74060e+06 2.56794e+06 -4.43379e+05 + -2.74070e+06 2.56805e+06 -4.42798e+05 + -2.74081e+06 2.56815e+06 -4.42217e+05 + -2.74092e+06 2.56826e+06 -4.41637e+05 + -2.74102e+06 2.56836e+06 -4.41056e+05 + -2.74113e+06 2.56846e+06 -4.40476e+05 + -2.74124e+06 2.56857e+06 -4.39895e+05 + -2.74134e+06 2.56867e+06 -4.39314e+05 + -2.74145e+06 2.56878e+06 -4.38734e+05 + -2.74155e+06 2.56888e+06 -4.38153e+05 + -2.74166e+06 2.56898e+06 -4.37573e+05 + -2.74177e+06 2.56909e+06 -4.36992e+05 + -2.74187e+06 2.56919e+06 -4.36411e+05 + -2.74198e+06 2.56930e+06 -4.35831e+05 + -2.74208e+06 2.56940e+06 -4.35250e+05 + -2.74219e+06 2.56950e+06 -4.34669e+05 + -2.74229e+06 2.56961e+06 -4.34089e+05 + -2.74240e+06 2.56971e+06 -4.33508e+05 + -2.74251e+06 2.56981e+06 -4.32927e+05 + -2.74261e+06 2.56992e+06 -4.32346e+05 + -2.74272e+06 2.57002e+06 -4.31766e+05 + -2.74282e+06 2.57012e+06 -4.31185e+05 + -2.74293e+06 2.57023e+06 -4.30604e+05 + -2.74303e+06 2.57033e+06 -4.30024e+05 + -2.74314e+06 2.57043e+06 -4.29443e+05 + -2.74324e+06 2.57054e+06 -4.28862e+05 + -2.74335e+06 2.57064e+06 -4.28281e+05 + -2.74345e+06 2.57074e+06 -4.27701e+05 + -2.74356e+06 2.57085e+06 -4.27120e+05 + -2.74366e+06 2.57095e+06 -4.26539e+05 + -2.74377e+06 2.57105e+06 -4.25958e+05 + -2.74387e+06 2.57116e+06 -4.25378e+05 + -2.74398e+06 2.57126e+06 -4.24797e+05 + -2.74408e+06 2.57136e+06 -4.24216e+05 + -2.74419e+06 2.57147e+06 -4.23635e+05 + -2.74429e+06 2.57157e+06 -4.23054e+05 + -2.74440e+06 2.57167e+06 -4.22473e+05 + -2.74450e+06 2.57177e+06 -4.21893e+05 + -2.74461e+06 2.57188e+06 -4.21312e+05 + -2.74471e+06 2.57198e+06 -4.20731e+05 + -2.74482e+06 2.57208e+06 -4.20150e+05 + -2.74492e+06 2.57219e+06 -4.19569e+05 + -2.74503e+06 2.57229e+06 -4.18988e+05 + -2.74513e+06 2.57239e+06 -4.18408e+05 + -2.74523e+06 2.57249e+06 -4.17827e+05 + -2.74534e+06 2.57260e+06 -4.17246e+05 + -2.74544e+06 2.57270e+06 -4.16665e+05 + -2.74555e+06 2.57280e+06 -4.16084e+05 + -2.74565e+06 2.57290e+06 -4.15503e+05 + -2.74576e+06 2.57301e+06 -4.14922e+05 + -2.74586e+06 2.57311e+06 -4.14341e+05 + -2.74596e+06 2.57321e+06 -4.13760e+05 + -2.74607e+06 2.57331e+06 -4.13179e+05 + -2.74617e+06 2.57342e+06 -4.12599e+05 + -2.74628e+06 2.57352e+06 -4.12018e+05 + -2.74638e+06 2.57362e+06 -4.11437e+05 + -2.74648e+06 2.57372e+06 -4.10856e+05 + -2.74659e+06 2.57382e+06 -4.10275e+05 + -2.74669e+06 2.57393e+06 -4.09694e+05 + -2.74680e+06 2.57403e+06 -4.09113e+05 + -2.74690e+06 2.57413e+06 -4.08532e+05 + -2.74700e+06 2.57423e+06 -4.07951e+05 + -2.74711e+06 2.57433e+06 -4.07370e+05 + -2.74721e+06 2.57444e+06 -4.06789e+05 + -2.74731e+06 2.57454e+06 -4.06208e+05 + -2.74742e+06 2.57464e+06 -4.05627e+05 + -2.74752e+06 2.57474e+06 -4.05046e+05 + -2.74762e+06 2.57484e+06 -4.04465e+05 + -2.74773e+06 2.57494e+06 -4.03884e+05 + -2.74783e+06 2.57505e+06 -4.03303e+05 + -2.74793e+06 2.57515e+06 -4.02722e+05 + -2.74804e+06 2.57525e+06 -4.02141e+05 + -2.74814e+06 2.57535e+06 -4.01560e+05 + -2.74824e+06 2.57545e+06 -4.00978e+05 + -2.74835e+06 2.57555e+06 -4.00397e+05 + -2.74845e+06 2.57566e+06 -3.99816e+05 + -2.74855e+06 2.57576e+06 -3.99235e+05 + -2.74865e+06 2.57586e+06 -3.98654e+05 + -2.74876e+06 2.57596e+06 -3.98073e+05 + -2.74886e+06 2.57606e+06 -3.97492e+05 + -2.74896e+06 2.57616e+06 -3.96911e+05 + -2.74907e+06 2.57626e+06 -3.96330e+05 + -2.74917e+06 2.57636e+06 -3.95749e+05 + -2.74927e+06 2.57646e+06 -3.95167e+05 + -2.74937e+06 2.57657e+06 -3.94586e+05 + -2.74948e+06 2.57667e+06 -3.94005e+05 + -2.74958e+06 2.57677e+06 -3.93424e+05 + -2.74968e+06 2.57687e+06 -3.92843e+05 + -2.74978e+06 2.57697e+06 -3.92262e+05 + -2.74989e+06 2.57707e+06 -3.91681e+05 + -2.74999e+06 2.57717e+06 -3.91099e+05 + -2.75009e+06 2.57727e+06 -3.90518e+05 + -2.75019e+06 2.57737e+06 -3.89937e+05 + -2.75029e+06 2.57747e+06 -3.89356e+05 + -2.75040e+06 2.57757e+06 -3.88775e+05 + -2.75050e+06 2.57767e+06 -3.88193e+05 + -2.75060e+06 2.57778e+06 -3.87612e+05 + -2.75070e+06 2.57788e+06 -3.87031e+05 + -2.75080e+06 2.57798e+06 -3.86450e+05 + -2.75091e+06 2.57808e+06 -3.85869e+05 + -2.75101e+06 2.57818e+06 -3.85287e+05 + -2.75111e+06 2.57828e+06 -3.84706e+05 + -2.75121e+06 2.57838e+06 -3.84125e+05 + -2.75131e+06 2.57848e+06 -3.83544e+05 + -2.75141e+06 2.57858e+06 -3.82962e+05 + -2.75152e+06 2.57868e+06 -3.82381e+05 + -2.75162e+06 2.57878e+06 -3.81800e+05 + -2.75172e+06 2.57888e+06 -3.81218e+05 + -2.75182e+06 2.57898e+06 -3.80637e+05 + + +EPHEM_RATES + -7.84879e+02 7.64007e+02 4.06010e+03 + -7.84554e+02 7.63733e+02 4.06016e+03 + -7.84229e+02 7.63459e+02 4.06022e+03 + -7.83904e+02 7.63185e+02 4.06028e+03 + -7.83579e+02 7.62912e+02 4.06034e+03 + -7.83254e+02 7.62638e+02 4.06040e+03 + -7.82930e+02 7.62364e+02 4.06046e+03 + -7.82605e+02 7.62090e+02 4.06051e+03 + -7.82280e+02 7.61816e+02 4.06057e+03 + -7.81955e+02 7.61542e+02 4.06063e+03 + -7.81630e+02 7.61268e+02 4.06069e+03 + -7.81305e+02 7.60994e+02 4.06075e+03 + -7.80981e+02 7.60720e+02 4.06081e+03 + -7.80656e+02 7.60446e+02 4.06086e+03 + -7.80331e+02 7.60172e+02 4.06092e+03 + -7.80006e+02 7.59899e+02 4.06098e+03 + -7.79682e+02 7.59625e+02 4.06104e+03 + -7.79357e+02 7.59351e+02 4.06110e+03 + -7.79032e+02 7.59077e+02 4.06115e+03 + -7.78708e+02 7.58803e+02 4.06121e+03 + -7.78383e+02 7.58529e+02 4.06127e+03 + -7.78058e+02 7.58255e+02 4.06133e+03 + -7.77733e+02 7.57981e+02 4.06138e+03 + -7.77409e+02 7.57707e+02 4.06144e+03 + -7.77084e+02 7.57433e+02 4.06150e+03 + -7.76760e+02 7.57159e+02 4.06156e+03 + -7.76435e+02 7.56885e+02 4.06161e+03 + -7.76110e+02 7.56611e+02 4.06167e+03 + -7.75786e+02 7.56337e+02 4.06173e+03 + -7.75461e+02 7.56064e+02 4.06178e+03 + -7.75137e+02 7.55790e+02 4.06184e+03 + -7.74812e+02 7.55516e+02 4.06190e+03 + -7.74487e+02 7.55242e+02 4.06195e+03 + -7.74163e+02 7.54968e+02 4.06201e+03 + -7.73838e+02 7.54694e+02 4.06207e+03 + -7.73514e+02 7.54420e+02 4.06212e+03 + -7.73189e+02 7.54146e+02 4.06218e+03 + -7.72865e+02 7.53872e+02 4.06224e+03 + -7.72540e+02 7.53598e+02 4.06229e+03 + -7.72216e+02 7.53324e+02 4.06235e+03 + -7.71891e+02 7.53050e+02 4.06241e+03 + -7.71567e+02 7.52776e+02 4.06246e+03 + -7.71242e+02 7.52502e+02 4.06252e+03 + -7.70918e+02 7.52228e+02 4.06257e+03 + -7.70594e+02 7.51954e+02 4.06263e+03 + -7.70269e+02 7.51680e+02 4.06269e+03 + -7.69945e+02 7.51406e+02 4.06274e+03 + -7.69620e+02 7.51132e+02 4.06280e+03 + -7.69296e+02 7.50858e+02 4.06285e+03 + -7.68972e+02 7.50585e+02 4.06291e+03 + -7.68647e+02 7.50311e+02 4.06296e+03 + -7.68323e+02 7.50037e+02 4.06302e+03 + -7.67999e+02 7.49763e+02 4.06307e+03 + -7.67674e+02 7.49489e+02 4.06313e+03 + -7.67350e+02 7.49215e+02 4.06318e+03 + -7.67026e+02 7.48941e+02 4.06324e+03 + -7.66701e+02 7.48667e+02 4.06329e+03 + -7.66377e+02 7.48393e+02 4.06335e+03 + -7.66053e+02 7.48119e+02 4.06340e+03 + -7.65729e+02 7.47845e+02 4.06346e+03 + -7.65405e+02 7.47571e+02 4.06351e+03 + -7.65080e+02 7.47297e+02 4.06357e+03 + -7.64756e+02 7.47023e+02 4.06362e+03 + -7.64432e+02 7.46749e+02 4.06368e+03 + -7.64108e+02 7.46475e+02 4.06373e+03 + -7.63784e+02 7.46201e+02 4.06379e+03 + -7.63459e+02 7.45927e+02 4.06384e+03 + -7.63135e+02 7.45653e+02 4.06390e+03 + -7.62811e+02 7.45379e+02 4.06395e+03 + -7.62487e+02 7.45105e+02 4.06400e+03 + -7.62163e+02 7.44831e+02 4.06406e+03 + -7.61839e+02 7.44557e+02 4.06411e+03 + -7.61515e+02 7.44283e+02 4.06417e+03 + -7.61191e+02 7.44009e+02 4.06422e+03 + -7.60867e+02 7.43735e+02 4.06427e+03 + -7.60543e+02 7.43461e+02 4.06433e+03 + -7.60219e+02 7.43187e+02 4.06438e+03 + -7.59895e+02 7.42913e+02 4.06444e+03 + -7.59571e+02 7.42639e+02 4.06449e+03 + -7.59247e+02 7.42365e+02 4.06454e+03 + -7.58923e+02 7.42092e+02 4.06460e+03 + -7.58599e+02 7.41818e+02 4.06465e+03 + -7.58275e+02 7.41544e+02 4.06470e+03 + -7.57951e+02 7.41270e+02 4.06476e+03 + -7.57627e+02 7.40996e+02 4.06481e+03 + -7.57303e+02 7.40722e+02 4.06486e+03 + -7.56979e+02 7.40448e+02 4.06491e+03 + -7.56655e+02 7.40174e+02 4.06497e+03 + -7.56332e+02 7.39900e+02 4.06502e+03 + -7.56008e+02 7.39626e+02 4.06507e+03 + -7.55684e+02 7.39352e+02 4.06513e+03 + -7.55360e+02 7.39078e+02 4.06518e+03 + -7.55036e+02 7.38804e+02 4.06523e+03 + -7.54712e+02 7.38530e+02 4.06528e+03 + -7.54389e+02 7.38256e+02 4.06534e+03 + -7.54065e+02 7.37982e+02 4.06539e+03 + -7.53741e+02 7.37708e+02 4.06544e+03 + -7.53417e+02 7.37434e+02 4.06549e+03 + -7.53094e+02 7.37160e+02 4.06554e+03 + -7.52770e+02 7.36886e+02 4.06560e+03 + -7.52446e+02 7.36612e+02 4.06565e+03 + -7.52123e+02 7.36338e+02 4.06570e+03 + -7.51799e+02 7.36064e+02 4.06575e+03 + -7.51475e+02 7.35790e+02 4.06580e+03 + -7.51152e+02 7.35516e+02 4.06586e+03 + -7.50828e+02 7.35242e+02 4.06591e+03 + -7.50504e+02 7.34968e+02 4.06596e+03 + -7.50181e+02 7.34694e+02 4.06601e+03 + -7.49857e+02 7.34420e+02 4.06606e+03 + -7.49533e+02 7.34146e+02 4.06611e+03 + -7.49210e+02 7.33872e+02 4.06616e+03 + -7.48886e+02 7.33598e+02 4.06622e+03 + -7.48563e+02 7.33324e+02 4.06627e+03 + -7.48239e+02 7.33050e+02 4.06632e+03 + -7.47916e+02 7.32776e+02 4.06637e+03 + -7.47592e+02 7.32502e+02 4.06642e+03 + -7.47269e+02 7.32228e+02 4.06647e+03 + -7.46945e+02 7.31954e+02 4.06652e+03 + -7.46622e+02 7.31680e+02 4.06657e+03 + -7.46298e+02 7.31406e+02 4.06662e+03 + -7.45975e+02 7.31132e+02 4.06667e+03 + -7.45651e+02 7.30858e+02 4.06672e+03 + -7.45328e+02 7.30584e+02 4.06678e+03 + -7.45005e+02 7.30310e+02 4.06683e+03 + -7.44681e+02 7.30036e+02 4.06688e+03 + -7.44358e+02 7.29762e+02 4.06693e+03 + -7.44034e+02 7.29488e+02 4.06698e+03 + -7.43711e+02 7.29214e+02 4.06703e+03 + -7.43388e+02 7.28940e+02 4.06708e+03 + -7.43064e+02 7.28666e+02 4.06713e+03 + -7.42741e+02 7.28392e+02 4.06718e+03 + -7.42418e+02 7.28118e+02 4.06723e+03 + -7.42095e+02 7.27844e+02 4.06728e+03 + -7.41771e+02 7.27570e+02 4.06733e+03 + -7.41448e+02 7.27296e+02 4.06738e+03 + -7.41125e+02 7.27022e+02 4.06743e+03 + -7.40801e+02 7.26748e+02 4.06747e+03 + -7.40478e+02 7.26474e+02 4.06752e+03 + -7.40155e+02 7.26200e+02 4.06757e+03 + -7.39832e+02 7.25927e+02 4.06762e+03 + -7.39509e+02 7.25653e+02 4.06767e+03 + -7.39185e+02 7.25379e+02 4.06772e+03 + -7.38862e+02 7.25105e+02 4.06777e+03 + -7.38539e+02 7.24831e+02 4.06782e+03 + -7.38216e+02 7.24557e+02 4.06787e+03 + -7.37893e+02 7.24283e+02 4.06792e+03 + -7.37570e+02 7.24009e+02 4.06797e+03 + -7.37247e+02 7.23735e+02 4.06801e+03 + -7.36924e+02 7.23461e+02 4.06806e+03 + -7.36601e+02 7.23187e+02 4.06811e+03 + -7.36277e+02 7.22913e+02 4.06816e+03 + -7.35954e+02 7.22639e+02 4.06821e+03 + -7.35631e+02 7.22365e+02 4.06826e+03 + -7.35308e+02 7.22091e+02 4.06831e+03 + -7.34985e+02 7.21817e+02 4.06835e+03 + -7.34662e+02 7.21543e+02 4.06840e+03 + -7.34339e+02 7.21269e+02 4.06845e+03 + -7.34016e+02 7.20995e+02 4.06850e+03 + -7.33693e+02 7.20721e+02 4.06855e+03 + -7.33371e+02 7.20447e+02 4.06859e+03 + -7.33048e+02 7.20173e+02 4.06864e+03 + -7.32725e+02 7.19899e+02 4.06869e+03 + -7.32402e+02 7.19625e+02 4.06874e+03 + -7.32079e+02 7.19351e+02 4.06879e+03 + -7.31756e+02 7.19077e+02 4.06883e+03 + -7.31433e+02 7.18803e+02 4.06888e+03 + -7.31110e+02 7.18529e+02 4.06893e+03 + -7.30788e+02 7.18255e+02 4.06898e+03 + -7.30465e+02 7.17981e+02 4.06902e+03 + -7.30142e+02 7.17707e+02 4.06907e+03 + -7.29819e+02 7.17433e+02 4.06912e+03 + -7.29496e+02 7.17159e+02 4.06916e+03 + -7.29174e+02 7.16885e+02 4.06921e+03 + -7.28851e+02 7.16611e+02 4.06926e+03 + -7.28528e+02 7.16337e+02 4.06931e+03 + -7.28205e+02 7.16063e+02 4.06935e+03 + -7.27883e+02 7.15789e+02 4.06940e+03 + -7.27560e+02 7.15515e+02 4.06945e+03 + -7.27237e+02 7.15241e+02 4.06949e+03 + -7.26915e+02 7.14968e+02 4.06954e+03 + -7.26592e+02 7.14694e+02 4.06958e+03 + -7.26269e+02 7.14420e+02 4.06963e+03 + -7.25947e+02 7.14146e+02 4.06968e+03 + -7.25624e+02 7.13872e+02 4.06972e+03 + -7.25302e+02 7.13598e+02 4.06977e+03 + -7.24979e+02 7.13324e+02 4.06982e+03 + -7.24657e+02 7.13050e+02 4.06986e+03 + -7.24334e+02 7.12776e+02 4.06991e+03 + -7.24012e+02 7.12502e+02 4.06995e+03 + -7.23689e+02 7.12228e+02 4.07000e+03 + -7.23366e+02 7.11954e+02 4.07005e+03 + -7.23044e+02 7.11680e+02 4.07009e+03 + -7.22722e+02 7.11406e+02 4.07014e+03 + -7.22399e+02 7.11132e+02 4.07018e+03 + -7.22077e+02 7.10858e+02 4.07023e+03 + -7.21754e+02 7.10584e+02 4.07027e+03 + -7.21432e+02 7.10310e+02 4.07032e+03 + -7.21109e+02 7.10036e+02 4.07036e+03 + -7.20787e+02 7.09762e+02 4.07041e+03 + -7.20465e+02 7.09488e+02 4.07045e+03 + -7.20142e+02 7.09214e+02 4.07050e+03 + -7.19820e+02 7.08941e+02 4.07054e+03 + -7.19498e+02 7.08667e+02 4.07059e+03 + -7.19175e+02 7.08393e+02 4.07063e+03 + -7.18853e+02 7.08119e+02 4.07068e+03 + -7.18531e+02 7.07845e+02 4.07072e+03 + -7.18208e+02 7.07571e+02 4.07077e+03 + -7.17886e+02 7.07297e+02 4.07081e+03 + -7.17564e+02 7.07023e+02 4.07086e+03 + -7.17242e+02 7.06749e+02 4.07090e+03 + -7.16920e+02 7.06475e+02 4.07095e+03 + -7.16597e+02 7.06201e+02 4.07099e+03 + -7.16275e+02 7.05927e+02 4.07104e+03 + -7.15953e+02 7.05653e+02 4.07108e+03 + -7.15631e+02 7.05379e+02 4.07112e+03 + -7.15309e+02 7.05105e+02 4.07117e+03 + -7.14987e+02 7.04831e+02 4.07121e+03 + -7.14664e+02 7.04558e+02 4.07126e+03 + -7.14342e+02 7.04284e+02 4.07130e+03 + -7.14020e+02 7.04010e+02 4.07134e+03 + -7.13698e+02 7.03736e+02 4.07139e+03 + -7.13376e+02 7.03462e+02 4.07143e+03 + -7.13054e+02 7.03188e+02 4.07147e+03 + -7.12732e+02 7.02914e+02 4.07152e+03 + -7.12410e+02 7.02640e+02 4.07156e+03 + -7.12088e+02 7.02366e+02 4.07161e+03 + -7.11766e+02 7.02092e+02 4.07165e+03 + -7.11444e+02 7.01818e+02 4.07169e+03 + -7.11122e+02 7.01544e+02 4.07173e+03 + -7.10800e+02 7.01271e+02 4.07178e+03 + -7.10478e+02 7.00997e+02 4.07182e+03 + + +DT_QUAT 2.61931e-01 +T0_QUAT -5.33272e+01 +NUMBER_OF_QUATERNIONS 135 +QUATERNIONS + -2.42564e-01 6.07767e-01 -7.01531e-01 2.82196e-01 + -2.42620e-01 6.07862e-01 -7.01444e-01 2.82158e-01 + -2.42676e-01 6.07958e-01 -7.01358e-01 2.82120e-01 + -2.42731e-01 6.08053e-01 -7.01271e-01 2.82082e-01 + -2.42787e-01 6.08148e-01 -7.01184e-01 2.82045e-01 + -2.42843e-01 6.08243e-01 -7.01098e-01 2.82007e-01 + -2.42899e-01 6.08338e-01 -7.01011e-01 2.81969e-01 + -2.42954e-01 6.08433e-01 -7.00924e-01 2.81931e-01 + -2.43010e-01 6.08529e-01 -7.00838e-01 2.81894e-01 + -2.43066e-01 6.08624e-01 -7.00751e-01 2.81856e-01 + -2.43121e-01 6.08719e-01 -7.00664e-01 2.81818e-01 + -2.43177e-01 6.08814e-01 -7.00577e-01 2.81780e-01 + -2.43233e-01 6.08909e-01 -7.00491e-01 2.81743e-01 + -2.43288e-01 6.09004e-01 -7.00404e-01 2.81705e-01 + -2.43344e-01 6.09099e-01 -7.00317e-01 2.81667e-01 + -2.43400e-01 6.09194e-01 -7.00230e-01 2.81630e-01 + -2.43455e-01 6.09289e-01 -7.00143e-01 2.81592e-01 + -2.43511e-01 6.09384e-01 -7.00057e-01 2.81554e-01 + -2.43567e-01 6.09479e-01 -6.99970e-01 2.81516e-01 + -2.43622e-01 6.09574e-01 -6.99883e-01 2.81479e-01 + -2.43678e-01 6.09669e-01 -6.99796e-01 2.81441e-01 + -2.43733e-01 6.09763e-01 -6.99709e-01 2.81403e-01 + -2.43789e-01 6.09858e-01 -6.99622e-01 2.81365e-01 + -2.43844e-01 6.09953e-01 -6.99536e-01 2.81328e-01 + -2.43900e-01 6.10048e-01 -6.99449e-01 2.81290e-01 + -2.43955e-01 6.10143e-01 -6.99362e-01 2.81252e-01 + -2.44011e-01 6.10238e-01 -6.99275e-01 2.81215e-01 + -2.44066e-01 6.10332e-01 -6.99188e-01 2.81177e-01 + -2.44122e-01 6.10427e-01 -6.99101e-01 2.81139e-01 + -2.44177e-01 6.10522e-01 -6.99014e-01 2.81102e-01 + -2.44233e-01 6.10617e-01 -6.98927e-01 2.81064e-01 + -2.44288e-01 6.10711e-01 -6.98840e-01 2.81026e-01 + -2.44344e-01 6.10806e-01 -6.98753e-01 2.80988e-01 + -2.44399e-01 6.10901e-01 -6.98666e-01 2.80951e-01 + -2.44454e-01 6.10995e-01 -6.98579e-01 2.80913e-01 + -2.44510e-01 6.11090e-01 -6.98492e-01 2.80875e-01 + -2.44565e-01 6.11184e-01 -6.98405e-01 2.80838e-01 + -2.44621e-01 6.11279e-01 -6.98318e-01 2.80800e-01 + -2.44676e-01 6.11374e-01 -6.98231e-01 2.80762e-01 + -2.44731e-01 6.11468e-01 -6.98144e-01 2.80725e-01 + -2.44787e-01 6.11563e-01 -6.98057e-01 2.80687e-01 + -2.44842e-01 6.11657e-01 -6.97970e-01 2.80649e-01 + -2.44897e-01 6.11752e-01 -6.97883e-01 2.80611e-01 + -2.44953e-01 6.11846e-01 -6.97796e-01 2.80574e-01 + -2.45008e-01 6.11941e-01 -6.97709e-01 2.80536e-01 + -2.45063e-01 6.12035e-01 -6.97622e-01 2.80498e-01 + -2.45118e-01 6.12129e-01 -6.97535e-01 2.80461e-01 + -2.45174e-01 6.12224e-01 -6.97447e-01 2.80423e-01 + -2.45229e-01 6.12318e-01 -6.97360e-01 2.80385e-01 + -2.45284e-01 6.12413e-01 -6.97273e-01 2.80348e-01 + -2.45339e-01 6.12507e-01 -6.97186e-01 2.80310e-01 + -2.45394e-01 6.12601e-01 -6.97099e-01 2.80272e-01 + -2.45450e-01 6.12696e-01 -6.97012e-01 2.80235e-01 + -2.45505e-01 6.12790e-01 -6.96924e-01 2.80197e-01 + -2.45560e-01 6.12884e-01 -6.96837e-01 2.80159e-01 + -2.45615e-01 6.12978e-01 -6.96750e-01 2.80122e-01 + -2.45670e-01 6.13073e-01 -6.96663e-01 2.80084e-01 + -2.45725e-01 6.13167e-01 -6.96576e-01 2.80046e-01 + -2.45781e-01 6.13261e-01 -6.96488e-01 2.80009e-01 + -2.45836e-01 6.13355e-01 -6.96401e-01 2.79971e-01 + -2.45891e-01 6.13449e-01 -6.96314e-01 2.79933e-01 + -2.45946e-01 6.13544e-01 -6.96227e-01 2.79896e-01 + -2.46001e-01 6.13638e-01 -6.96139e-01 2.79858e-01 + -2.46056e-01 6.13732e-01 -6.96052e-01 2.79820e-01 + -2.46111e-01 6.13826e-01 -6.95965e-01 2.79783e-01 + -2.46166e-01 6.13920e-01 -6.95878e-01 2.79745e-01 + -2.46221e-01 6.14014e-01 -6.95790e-01 2.79707e-01 + -2.46276e-01 6.14108e-01 -6.95703e-01 2.79670e-01 + -2.46331e-01 6.14202e-01 -6.95616e-01 2.79632e-01 + -2.46386e-01 6.14296e-01 -6.95528e-01 2.79594e-01 + -2.46441e-01 6.14390e-01 -6.95441e-01 2.79557e-01 + -2.46496e-01 6.14484e-01 -6.95354e-01 2.79519e-01 + -2.46551e-01 6.14578e-01 -6.95266e-01 2.79482e-01 + -2.46606e-01 6.14672e-01 -6.95179e-01 2.79444e-01 + -2.46661e-01 6.14766e-01 -6.95091e-01 2.79406e-01 + -2.46716e-01 6.14860e-01 -6.95004e-01 2.79369e-01 + -2.46770e-01 6.14953e-01 -6.94917e-01 2.79331e-01 + -2.46825e-01 6.15047e-01 -6.94829e-01 2.79293e-01 + -2.46880e-01 6.15141e-01 -6.94742e-01 2.79256e-01 + -2.46935e-01 6.15235e-01 -6.94654e-01 2.79218e-01 + -2.46990e-01 6.15329e-01 -6.94567e-01 2.79180e-01 + -2.47045e-01 6.15422e-01 -6.94479e-01 2.79143e-01 + -2.47099e-01 6.15516e-01 -6.94392e-01 2.79105e-01 + -2.47154e-01 6.15610e-01 -6.94304e-01 2.79068e-01 + -2.47209e-01 6.15704e-01 -6.94217e-01 2.79030e-01 + -2.47264e-01 6.15797e-01 -6.94129e-01 2.78992e-01 + -2.47319e-01 6.15891e-01 -6.94042e-01 2.78955e-01 + -2.47373e-01 6.15985e-01 -6.93954e-01 2.78917e-01 + -2.47428e-01 6.16078e-01 -6.93867e-01 2.78879e-01 + -2.47483e-01 6.16172e-01 -6.93779e-01 2.78842e-01 + -2.47538e-01 6.16266e-01 -6.93692e-01 2.78804e-01 + -2.47592e-01 6.16359e-01 -6.93604e-01 2.78767e-01 + -2.47647e-01 6.16453e-01 -6.93517e-01 2.78729e-01 + -2.47702e-01 6.16546e-01 -6.93429e-01 2.78691e-01 + -2.47756e-01 6.16640e-01 -6.93342e-01 2.78654e-01 + -2.47811e-01 6.16733e-01 -6.93254e-01 2.78616e-01 + -2.47866e-01 6.16827e-01 -6.93166e-01 2.78579e-01 + -2.47920e-01 6.16920e-01 -6.93079e-01 2.78541e-01 + -2.47975e-01 6.17014e-01 -6.92991e-01 2.78503e-01 + -2.48029e-01 6.17107e-01 -6.92903e-01 2.78466e-01 + -2.48084e-01 6.17201e-01 -6.92816e-01 2.78428e-01 + -2.48139e-01 6.17294e-01 -6.92728e-01 2.78391e-01 + -2.48193e-01 6.17387e-01 -6.92641e-01 2.78353e-01 + -2.48248e-01 6.17481e-01 -6.92553e-01 2.78315e-01 + -2.48302e-01 6.17574e-01 -6.92465e-01 2.78278e-01 + -2.48357e-01 6.17667e-01 -6.92377e-01 2.78240e-01 + -2.48411e-01 6.17761e-01 -6.92290e-01 2.78203e-01 + -2.48466e-01 6.17854e-01 -6.92202e-01 2.78165e-01 + -2.48520e-01 6.17947e-01 -6.92114e-01 2.78127e-01 + -2.48575e-01 6.18040e-01 -6.92027e-01 2.78090e-01 + -2.48629e-01 6.18134e-01 -6.91939e-01 2.78052e-01 + -2.48684e-01 6.18227e-01 -6.91851e-01 2.78015e-01 + -2.48738e-01 6.18320e-01 -6.91763e-01 2.77977e-01 + -2.48792e-01 6.18413e-01 -6.91676e-01 2.77939e-01 + -2.48847e-01 6.18506e-01 -6.91588e-01 2.77902e-01 + -2.48901e-01 6.18600e-01 -6.91500e-01 2.77864e-01 + -2.48956e-01 6.18693e-01 -6.91412e-01 2.77827e-01 + -2.49010e-01 6.18786e-01 -6.91324e-01 2.77789e-01 + -2.49064e-01 6.18879e-01 -6.91237e-01 2.77751e-01 + -2.49119e-01 6.18972e-01 -6.91149e-01 2.77714e-01 + -2.49173e-01 6.19065e-01 -6.91061e-01 2.77676e-01 + -2.49227e-01 6.19158e-01 -6.90973e-01 2.77639e-01 + -2.49282e-01 6.19251e-01 -6.90885e-01 2.77601e-01 + -2.49336e-01 6.19344e-01 -6.90797e-01 2.77564e-01 + -2.49390e-01 6.19437e-01 -6.90710e-01 2.77526e-01 + -2.49444e-01 6.19530e-01 -6.90622e-01 2.77488e-01 + -2.49499e-01 6.19623e-01 -6.90534e-01 2.77451e-01 + -2.49553e-01 6.19716e-01 -6.90446e-01 2.77413e-01 + -2.49607e-01 6.19809e-01 -6.90358e-01 2.77376e-01 + -2.49661e-01 6.19902e-01 -6.90270e-01 2.77338e-01 + -2.49716e-01 6.19994e-01 -6.90182e-01 2.77301e-01 + -2.49770e-01 6.20087e-01 -6.90094e-01 2.77263e-01 + -2.49824e-01 6.20180e-01 -6.90006e-01 2.77225e-01 + -2.49878e-01 6.20273e-01 -6.89918e-01 2.77188e-01 + -2.49932e-01 6.20366e-01 -6.89830e-01 2.77150e-01 + + +SCAN_DURATION 3.01221e+01 +INT_TIME 3.94681e-03 + +ALONG_SCAN_PIXEL_SIZE 7.00000e-03 +CROSS_SCAN_PIXEL_SIZE 7.00000e-03 + +CENTER_GP -7.94589e-02 2.39466e+00 0.00000e+00 +SENSOR_POSITION -1.20006e-01 2.38871e+00 3.85312e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 7632 +TOTAL_SAMPLES 5176 + + + + +IKCODE -41211 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 0.00000e+00 0.00000e+00 0.00000e+00 +ITRANSS -2.79413e+00 -1.42857e+02 1.57079e-02 +ITRANSL 8.57038e+03 1.57079e-02 1.42857e+02 +DETECTOR_SAMPLE_ORIGIN 2.59250e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 2.30605e+08 +CENTER_EPHEMERIS_TIME 2.30605e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..76ff7738faf2cb8c8af89b04b1ddc87234ea9ea8 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/Makefile @@ -0,0 +1,8 @@ +APPNAME = socetlinescankeywords + +include $(ISISROOT)/make/isismake.tsts + +commands: + $(APPNAME) from=$(INPUT)/PSP_001488_1750_REDmos_hijitreged_1km_o.cub \ + to=$(OUTPUT)/PSP_001488_1750_REDmos_keywords.txt >& \ + $(OUTPUT)/error.txt || true; diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/truth/error.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/truth/error.txt new file mode 100644 index 0000000000000000000000000000000000000000..edd5102867447142f5cf73d2581009f421697db1 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lev2/truth/error.txt @@ -0,0 +1 @@ +**USER ERROR** Input images is a map projected cube ... not a level 1 image. diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..cda222c50d483e184f5042ca04a24fb2f17b0157 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/Makefile @@ -0,0 +1,20 @@ +APPNAME = socetlinescankeywords + +include $(ISISROOT)/make/isismake.tsts + +commands: +#Test LRO-NACR, pole image + $(APPNAME) from=$(INPUT)/M139722912RE.lev1.8bit.cub \ + to=$(OUTPUT)/M139722912RE_keywords.txt > /dev/null; + cat $(OUTPUT)/M139722912RE_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_M139722912RE_keywords.txt + $(RM) $(OUTPUT)/M139722912RE_keywords.txt + +#Test LRO-NACL, image aquired while rotating the camera + $(APPNAME) from=$(INPUT)/M140944356LE.lev1.8bit.cub \ + to=$(OUTPUT)/M140944356LE_keywords.txt > /dev/null; + cat $(OUTPUT)/M140944356LE_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_M140944356LE_keywords.txt + $(RM) $(OUTPUT)/M140944356LE_keywords.txt diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M139722912RE_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M139722912RE_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..84cb659c6ce59d23bb0a20b61e22b8b225f30c99 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M139722912RE_keywords.txt @@ -0,0 +1,444 @@ +RECTIFICATION_TERMS + 2.61120e+04 0.00000e+00 1.00000e+00 + 1.26600e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.56952e+00 -2.81024e+00 0.00000e+00 +LOAD_PT -1.56952e+00 -2.81024e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 7.01570e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 2.61120e+04 6.49727e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 1.26600e+03 0.00000e+00 7.14285e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 7.01570e+02 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 1.49055e+00 +T0_EPHEM -3.57733e+01 +NUMBER_OF_EPHEM 49 +EPHEM_PTS + 5.01820e+04 2.60536e+04 -1.79779e+06 + 4.80229e+04 2.48896e+04 -1.79784e+06 + 4.58637e+04 2.37256e+04 -1.79789e+06 + 4.37045e+04 2.25616e+04 -1.79793e+06 + 4.15454e+04 2.13976e+04 -1.79798e+06 + 3.93862e+04 2.02336e+04 -1.79803e+06 + 3.72271e+04 1.90696e+04 -1.79807e+06 + 3.50679e+04 1.79056e+04 -1.79812e+06 + 3.29088e+04 1.67416e+04 -1.79817e+06 + 3.07496e+04 1.55776e+04 -1.79821e+06 + 2.85904e+04 1.44136e+04 -1.79826e+06 + 2.64313e+04 1.32496e+04 -1.79831e+06 + 2.42721e+04 1.20856e+04 -1.79835e+06 + 2.21128e+04 1.09216e+04 -1.79839e+06 + 1.99535e+04 9.75763e+03 -1.79842e+06 + 1.77941e+04 8.59361e+03 -1.79846e+06 + 1.56347e+04 7.42959e+03 -1.79849e+06 + 1.34753e+04 6.26557e+03 -1.79851e+06 + 1.13158e+04 5.10156e+03 -1.79854e+06 + 9.15635e+03 3.93756e+03 -1.79856e+06 + 6.99682e+03 2.77357e+03 -1.79857e+06 + 4.83726e+03 1.60958e+03 -1.79859e+06 + 2.67769e+03 4.45619e+02 -1.79859e+06 + 5.18117e+02 -7.18332e+02 -1.79860e+06 + -1.64147e+03 -1.88226e+03 -1.79860e+06 + -3.80106e+03 -3.04617e+03 -1.79860e+06 + -5.96066e+03 -4.21006e+03 -1.79860e+06 + -8.12025e+03 -5.37393e+03 -1.79859e+06 + -1.02798e+04 -6.53776e+03 -1.79858e+06 + -1.24394e+04 -7.70157e+03 -1.79857e+06 + -1.45989e+04 -8.86534e+03 -1.79855e+06 + -1.67585e+04 -1.00290e+04 -1.79853e+06 + -1.89180e+04 -1.11928e+04 -1.79851e+06 + -2.10775e+04 -1.23564e+04 -1.79848e+06 + -2.32369e+04 -1.35201e+04 -1.79845e+06 + -2.53964e+04 -1.46836e+04 -1.79841e+06 + -2.75557e+04 -1.58472e+04 -1.79837e+06 + -2.97151e+04 -1.70107e+04 -1.79833e+06 + -3.18744e+04 -1.81741e+04 -1.79829e+06 + -3.40337e+04 -1.93376e+04 -1.79825e+06 + -3.61930e+04 -2.05010e+04 -1.79820e+06 + -3.83523e+04 -2.16645e+04 -1.79816e+06 + -4.05116e+04 -2.28279e+04 -1.79811e+06 + -4.26708e+04 -2.39914e+04 -1.79807e+06 + -4.48301e+04 -2.51548e+04 -1.79802e+06 + -4.69894e+04 -2.63183e+04 -1.79798e+06 + -4.91487e+04 -2.74817e+04 -1.79794e+06 + -5.13080e+04 -2.86452e+04 -1.79789e+06 + -5.34673e+04 -2.98086e+04 -1.79785e+06 + + +EPHEM_RATES + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44855e+03 -7.80916e+02 -3.12378e+01 + -1.44857e+03 -7.80919e+02 -3.01086e+01 + -1.44861e+03 -7.80923e+02 -2.78498e+01 + -1.44864e+03 -7.80927e+02 -2.55905e+01 + -1.44867e+03 -7.80928e+02 -2.33314e+01 + -1.44870e+03 -7.80928e+02 -2.10734e+01 + -1.44873e+03 -7.80928e+02 -1.88160e+01 + -1.44875e+03 -7.80925e+02 -1.65584e+01 + -1.44877e+03 -7.80920e+02 -1.42998e+01 + -1.44879e+03 -7.80915e+02 -1.20404e+01 + -1.44881e+03 -7.80908e+02 -9.78131e+00 + -1.44882e+03 -7.80899e+02 -7.52270e+00 + -1.44883e+03 -7.80889e+02 -5.26433e+00 + -1.44884e+03 -7.80877e+02 -3.00579e+00 + -1.44884e+03 -7.80864e+02 -7.47090e-01 + -1.44885e+03 -7.80849e+02 1.51136e+00 + -1.44885e+03 -7.80832e+02 3.76963e+00 + -1.44884e+03 -7.80814e+02 6.02804e+00 + -1.44884e+03 -7.80795e+02 8.28660e+00 + -1.44883e+03 -7.80776e+02 1.05448e+01 + -1.44882e+03 -7.80755e+02 1.28026e+01 + -1.44880e+03 -7.80732e+02 1.50606e+01 + -1.44878e+03 -7.80707e+02 1.73195e+01 + -1.44876e+03 -7.80680e+02 1.95789e+01 + -1.44874e+03 -7.80652e+02 2.18378e+01 + -1.44872e+03 -7.80623e+02 2.40956e+01 + -1.44869e+03 -7.80593e+02 2.63528e+01 + -1.44866e+03 -7.80561e+02 2.86104e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + -1.44864e+03 -7.80545e+02 2.97393e+01 + + +DT_QUAT 1.65617e-01 +T0_QUAT -2.31864e+01 +NUMBER_OF_QUATERNIONS 281 +QUATERNIONS + 1.15074e-02 -7.70676e-03 -9.69548e-01 2.44510e-01 + 1.14339e-02 -7.72456e-03 -9.69547e-01 2.44516e-01 + 1.13604e-02 -7.74235e-03 -9.69546e-01 2.44521e-01 + 1.12869e-02 -7.76014e-03 -9.69545e-01 2.44526e-01 + 1.12134e-02 -7.77793e-03 -9.69545e-01 2.44532e-01 + 1.11399e-02 -7.79573e-03 -9.69544e-01 2.44537e-01 + 1.10664e-02 -7.81352e-03 -9.69543e-01 2.44543e-01 + 1.09929e-02 -7.83131e-03 -9.69543e-01 2.44548e-01 + 1.09194e-02 -7.84911e-03 -9.69542e-01 2.44554e-01 + 1.08459e-02 -7.86690e-03 -9.69541e-01 2.44559e-01 + 1.07724e-02 -7.88469e-03 -9.69541e-01 2.44564e-01 + 1.06989e-02 -7.90248e-03 -9.69540e-01 2.44570e-01 + 1.06265e-02 -7.92085e-03 -9.69541e-01 2.44568e-01 + 1.05539e-02 -7.93862e-03 -9.69543e-01 2.44564e-01 + 1.04811e-02 -7.95586e-03 -9.69543e-01 2.44565e-01 + 1.04088e-02 -7.97355e-03 -9.69542e-01 2.44571e-01 + 1.03362e-02 -7.99234e-03 -9.69542e-01 2.44573e-01 + 1.02618e-02 -8.01115e-03 -9.69544e-01 2.44568e-01 + 1.01856e-02 -8.03320e-03 -9.69545e-01 2.44568e-01 + 1.01116e-02 -8.05298e-03 -9.69544e-01 2.44572e-01 + 1.00405e-02 -8.06875e-03 -9.69544e-01 2.44576e-01 + 9.96989e-03 -8.08367e-03 -9.69545e-01 2.44573e-01 + 9.89460e-03 -8.10475e-03 -9.69547e-01 2.44568e-01 + 9.82075e-03 -8.12431e-03 -9.69546e-01 2.44573e-01 + 9.74777e-03 -8.14110e-03 -9.69546e-01 2.44578e-01 + 9.67275e-03 -8.16148e-03 -9.69546e-01 2.44578e-01 + 9.59647e-03 -8.18516e-03 -9.69548e-01 2.44574e-01 + 9.52397e-03 -8.20318e-03 -9.69548e-01 2.44574e-01 + 9.45450e-03 -8.21476e-03 -9.69548e-01 2.44580e-01 + 9.38048e-03 -8.23417e-03 -9.69548e-01 2.44580e-01 + 9.30511e-03 -8.25562e-03 -9.69549e-01 2.44577e-01 + 9.23152e-03 -8.27340e-03 -9.69550e-01 2.44576e-01 + 9.15948e-03 -8.28806e-03 -9.69550e-01 2.44580e-01 + 9.08350e-03 -8.30998e-03 -9.69550e-01 2.44583e-01 + 9.00326e-03 -8.33705e-03 -9.69551e-01 2.44581e-01 + 8.93202e-03 -8.35240e-03 -9.69551e-01 2.44581e-01 + 8.86387e-03 -8.36445e-03 -9.69551e-01 2.44583e-01 + 8.79256e-03 -8.38099e-03 -9.69551e-01 2.44584e-01 + 8.71597e-03 -8.40411e-03 -9.69552e-01 2.44584e-01 + 8.64125e-03 -8.42422e-03 -9.69552e-01 2.44584e-01 + 8.57315e-03 -8.43539e-03 -9.69552e-01 2.44586e-01 + 8.50084e-03 -8.45318e-03 -9.69553e-01 2.44586e-01 + 8.42603e-03 -8.47403e-03 -9.69554e-01 2.44585e-01 + 8.35191e-03 -8.49278e-03 -9.69554e-01 2.44586e-01 + 8.28076e-03 -8.50700e-03 -9.69554e-01 2.44588e-01 + 8.21015e-03 -8.52471e-03 -9.69554e-01 2.44589e-01 + 8.13377e-03 -8.54466e-03 -9.69555e-01 2.44586e-01 + 8.06053e-03 -8.56268e-03 -9.69555e-01 2.44587e-01 + 7.98931e-03 -8.57913e-03 -9.69555e-01 2.44589e-01 + 7.91694e-03 -8.59665e-03 -9.69556e-01 2.44590e-01 + 7.84107e-03 -8.61751e-03 -9.69557e-01 2.44588e-01 + 7.76786e-03 -8.63545e-03 -9.69557e-01 2.44588e-01 + 7.69612e-03 -8.65142e-03 -9.69557e-01 2.44591e-01 + 7.62315e-03 -8.67027e-03 -9.69557e-01 2.44591e-01 + 7.54889e-03 -8.68976e-03 -9.69558e-01 2.44590e-01 + 7.47464e-03 -8.70812e-03 -9.69558e-01 2.44590e-01 + 7.40228e-03 -8.72550e-03 -9.69558e-01 2.44591e-01 + 7.32924e-03 -8.74390e-03 -9.69558e-01 2.44593e-01 + 7.25363e-03 -8.76370e-03 -9.69559e-01 2.44592e-01 + 7.18057e-03 -8.78260e-03 -9.69559e-01 2.44592e-01 + 7.10808e-03 -8.80061e-03 -9.69559e-01 2.44593e-01 + 7.03379e-03 -8.81884e-03 -9.69559e-01 2.44594e-01 + 6.95768e-03 -8.83886e-03 -9.69559e-01 2.44595e-01 + 6.88556e-03 -8.85751e-03 -9.69560e-01 2.44595e-01 + 6.81213e-03 -8.87575e-03 -9.69560e-01 2.44595e-01 + 6.73792e-03 -8.89454e-03 -9.69560e-01 2.44596e-01 + 6.66357e-03 -8.91388e-03 -9.69560e-01 2.44597e-01 + 6.58970e-03 -8.93311e-03 -9.69561e-01 2.44597e-01 + 6.51683e-03 -8.95107e-03 -9.69561e-01 2.44598e-01 + 6.44206e-03 -8.97026e-03 -9.69561e-01 2.44598e-01 + 6.36578e-03 -8.99031e-03 -9.69561e-01 2.44599e-01 + 6.29195e-03 -9.00981e-03 -9.69561e-01 2.44599e-01 + 6.21878e-03 -9.02839e-03 -9.69562e-01 2.44600e-01 + 6.14440e-03 -9.04659e-03 -9.69562e-01 2.44600e-01 + 6.07137e-03 -9.06582e-03 -9.69562e-01 2.44600e-01 + 5.99819e-03 -9.08459e-03 -9.69562e-01 2.44602e-01 + 5.92464e-03 -9.10288e-03 -9.69562e-01 2.44602e-01 + 5.85034e-03 -9.12208e-03 -9.69563e-01 2.44601e-01 + 5.77573e-03 -9.14208e-03 -9.69563e-01 2.44602e-01 + 5.70172e-03 -9.16166e-03 -9.69563e-01 2.44603e-01 + 5.62856e-03 -9.17966e-03 -9.69563e-01 2.44604e-01 + 5.55384e-03 -9.19926e-03 -9.69563e-01 2.44604e-01 + 5.48022e-03 -9.21868e-03 -9.69563e-01 2.44604e-01 + 5.40701e-03 -9.23783e-03 -9.69563e-01 2.44606e-01 + 5.33313e-03 -9.25682e-03 -9.69563e-01 2.44607e-01 + 5.25797e-03 -9.27582e-03 -9.69563e-01 2.44607e-01 + 5.18336e-03 -9.29541e-03 -9.69563e-01 2.44607e-01 + 5.11093e-03 -9.31451e-03 -9.69563e-01 2.44608e-01 + 5.03663e-03 -9.33350e-03 -9.69563e-01 2.44609e-01 + 4.96205e-03 -9.35285e-03 -9.69563e-01 2.44609e-01 + 4.88824e-03 -9.37252e-03 -9.69563e-01 2.44609e-01 + 4.81438e-03 -9.39183e-03 -9.69564e-01 2.44610e-01 + 4.73999e-03 -9.40924e-03 -9.69564e-01 2.44610e-01 + 4.66576e-03 -9.42985e-03 -9.69564e-01 2.44611e-01 + 4.59196e-03 -9.44923e-03 -9.69564e-01 2.44611e-01 + 4.51838e-03 -9.46744e-03 -9.69564e-01 2.44612e-01 + 4.44455e-03 -9.48598e-03 -9.69564e-01 2.44612e-01 + 4.36983e-03 -9.50642e-03 -9.69564e-01 2.44613e-01 + 4.29574e-03 -9.52498e-03 -9.69564e-01 2.44613e-01 + 4.22230e-03 -9.54377e-03 -9.69564e-01 2.44613e-01 + 4.14858e-03 -9.56273e-03 -9.69564e-01 2.44614e-01 + 4.07468e-03 -9.58206e-03 -9.69564e-01 2.44615e-01 + 4.00094e-03 -9.60159e-03 -9.69564e-01 2.44616e-01 + 3.92721e-03 -9.62013e-03 -9.69564e-01 2.44616e-01 + 3.85326e-03 -9.63833e-03 -9.69564e-01 2.44617e-01 + 3.77936e-03 -9.65812e-03 -9.69564e-01 2.44617e-01 + 3.70574e-03 -9.67686e-03 -9.69564e-01 2.44618e-01 + 3.63212e-03 -9.69495e-03 -9.69563e-01 2.44619e-01 + 3.55823e-03 -9.71403e-03 -9.69564e-01 2.44619e-01 + 3.48496e-03 -9.73331e-03 -9.69563e-01 2.44620e-01 + 3.41050e-03 -9.75241e-03 -9.69563e-01 2.44620e-01 + 3.33674e-03 -9.77096e-03 -9.69563e-01 2.44621e-01 + 3.26304e-03 -9.78983e-03 -9.69563e-01 2.44621e-01 + 3.18919e-03 -9.80903e-03 -9.69563e-01 2.44621e-01 + 3.11545e-03 -9.82792e-03 -9.69563e-01 2.44622e-01 + 3.04196e-03 -9.84605e-03 -9.69563e-01 2.44624e-01 + 2.96799e-03 -9.86572e-03 -9.69563e-01 2.44624e-01 + 2.89459e-03 -9.88422e-03 -9.69563e-01 2.44624e-01 + 2.82083e-03 -9.90247e-03 -9.69563e-01 2.44625e-01 + 2.74667e-03 -9.92129e-03 -9.69562e-01 2.44626e-01 + 2.67324e-03 -9.94065e-03 -9.69562e-01 2.44627e-01 + 2.60051e-03 -9.95954e-03 -9.69562e-01 2.44627e-01 + 2.52672e-03 -9.97780e-03 -9.69562e-01 2.44628e-01 + 2.45321e-03 -9.99674e-03 -9.69562e-01 2.44629e-01 + 2.37967e-03 -1.00157e-02 -9.69561e-01 2.44630e-01 + 2.30599e-03 -1.00341e-02 -9.69561e-01 2.44630e-01 + 2.23274e-03 -1.00518e-02 -9.69561e-01 2.44631e-01 + 2.15922e-03 -1.00716e-02 -9.69561e-01 2.44632e-01 + 2.08590e-03 -1.00899e-02 -9.69560e-01 2.44633e-01 + 2.01251e-03 -1.01085e-02 -9.69560e-01 2.44634e-01 + 1.93941e-03 -1.01270e-02 -9.69560e-01 2.44635e-01 + 1.86661e-03 -1.01451e-02 -9.69560e-01 2.44635e-01 + 1.79311e-03 -1.01639e-02 -9.69559e-01 2.44637e-01 + 1.71965e-03 -1.01823e-02 -9.69559e-01 2.44637e-01 + 1.64587e-03 -1.02002e-02 -9.69559e-01 2.44638e-01 + 1.57269e-03 -1.02190e-02 -9.69558e-01 2.44639e-01 + 1.49967e-03 -1.02380e-02 -9.69558e-01 2.44640e-01 + 1.42610e-03 -1.02562e-02 -9.69558e-01 2.44641e-01 + 1.35261e-03 -1.02748e-02 -9.69558e-01 2.44641e-01 + 1.27989e-03 -1.02939e-02 -9.69557e-01 2.44642e-01 + 1.20622e-03 -1.03124e-02 -9.69557e-01 2.44642e-01 + 1.13272e-03 -1.03305e-02 -9.69557e-01 2.44643e-01 + 1.05957e-03 -1.03487e-02 -9.69557e-01 2.44644e-01 + 9.86248e-04 -1.03675e-02 -9.69556e-01 2.44645e-01 + 9.12660e-04 -1.03859e-02 -9.69556e-01 2.44645e-01 + 8.40174e-04 -1.04044e-02 -9.69556e-01 2.44646e-01 + 7.66800e-04 -1.04229e-02 -9.69555e-01 2.44647e-01 + 6.93082e-04 -1.04414e-02 -9.69555e-01 2.44647e-01 + 6.19696e-04 -1.04597e-02 -9.69555e-01 2.44648e-01 + 5.46910e-04 -1.04777e-02 -9.69554e-01 2.44649e-01 + 4.73409e-04 -1.04965e-02 -9.69554e-01 2.44649e-01 + 4.00187e-04 -1.05145e-02 -9.69554e-01 2.44650e-01 + 3.26975e-04 -1.05327e-02 -9.69553e-01 2.44651e-01 + 2.53516e-04 -1.05513e-02 -9.69553e-01 2.44651e-01 + 1.79844e-04 -1.05701e-02 -9.69553e-01 2.44652e-01 + 1.06339e-04 -1.05885e-02 -9.69552e-01 2.44652e-01 + 3.33209e-05 -1.06058e-02 -9.69552e-01 2.44653e-01 + -3.95138e-05 -1.06247e-02 -9.69552e-01 2.44653e-01 + -1.13041e-04 -1.06429e-02 -9.69551e-01 2.44654e-01 + -1.87148e-04 -1.06609e-02 -9.69551e-01 2.44654e-01 + -2.61226e-04 -1.06794e-02 -9.69551e-01 2.44654e-01 + -3.34422e-04 -1.06977e-02 -9.69551e-01 2.44655e-01 + -4.08212e-04 -1.07161e-02 -9.69550e-01 2.44655e-01 + -4.81571e-04 -1.07345e-02 -9.69550e-01 2.44655e-01 + -5.55838e-04 -1.07527e-02 -9.69550e-01 2.44655e-01 + -6.30363e-04 -1.07711e-02 -9.69549e-01 2.44656e-01 + -7.04094e-04 -1.07895e-02 -9.69549e-01 2.44656e-01 + -7.77188e-04 -1.08074e-02 -9.69549e-01 2.44657e-01 + -8.51228e-04 -1.08254e-02 -9.69548e-01 2.44657e-01 + -9.24386e-04 -1.08439e-02 -9.69548e-01 2.44657e-01 + -9.98120e-04 -1.08623e-02 -9.69548e-01 2.44657e-01 + -1.07238e-03 -1.08805e-02 -9.69547e-01 2.44657e-01 + -1.14637e-03 -1.08986e-02 -9.69547e-01 2.44658e-01 + -1.22001e-03 -1.09171e-02 -9.69547e-01 2.44657e-01 + -1.29348e-03 -1.09354e-02 -9.69546e-01 2.44658e-01 + -1.36674e-03 -1.09535e-02 -9.69546e-01 2.44658e-01 + -1.44037e-03 -1.09719e-02 -9.69546e-01 2.44658e-01 + -1.51424e-03 -1.09904e-02 -9.69545e-01 2.44658e-01 + -1.58778e-03 -1.10082e-02 -9.69545e-01 2.44659e-01 + -1.66114e-03 -1.10271e-02 -9.69544e-01 2.44659e-01 + -1.73465e-03 -1.10451e-02 -9.69544e-01 2.44660e-01 + -1.80804e-03 -1.10636e-02 -9.69544e-01 2.44660e-01 + -1.88191e-03 -1.10820e-02 -9.69543e-01 2.44660e-01 + -1.95599e-03 -1.11002e-02 -9.69543e-01 2.44661e-01 + -2.02917e-03 -1.11187e-02 -9.69542e-01 2.44661e-01 + -2.10169e-03 -1.11372e-02 -9.69542e-01 2.44662e-01 + -2.17536e-03 -1.11550e-02 -9.69541e-01 2.44662e-01 + -2.24886e-03 -1.11734e-02 -9.69541e-01 2.44662e-01 + -2.32220e-03 -1.11918e-02 -9.69540e-01 2.44663e-01 + -2.39568e-03 -1.12100e-02 -9.69540e-01 2.44663e-01 + -2.46954e-03 -1.12289e-02 -9.69539e-01 2.44663e-01 + -2.54469e-03 -1.12472e-02 -9.69539e-01 2.44664e-01 + -2.61826e-03 -1.12655e-02 -9.69538e-01 2.44664e-01 + -2.69161e-03 -1.12842e-02 -9.69538e-01 2.44665e-01 + -2.76422e-03 -1.13026e-02 -9.69537e-01 2.44665e-01 + -2.83627e-03 -1.13208e-02 -9.69537e-01 2.44666e-01 + -2.91007e-03 -1.13397e-02 -9.69536e-01 2.44666e-01 + -2.98330e-03 -1.13579e-02 -9.69536e-01 2.44666e-01 + -3.05708e-03 -1.13763e-02 -9.69535e-01 2.44666e-01 + -3.13034e-03 -1.13950e-02 -9.69535e-01 2.44666e-01 + -3.20364e-03 -1.14135e-02 -9.69534e-01 2.44666e-01 + -3.27762e-03 -1.14318e-02 -9.69534e-01 2.44666e-01 + -3.35070e-03 -1.14506e-02 -9.69533e-01 2.44667e-01 + -3.42433e-03 -1.14691e-02 -9.69533e-01 2.44667e-01 + -3.49785e-03 -1.14879e-02 -9.69532e-01 2.44668e-01 + -3.57090e-03 -1.15064e-02 -9.69531e-01 2.44668e-01 + -3.64392e-03 -1.15246e-02 -9.69531e-01 2.44668e-01 + -3.71760e-03 -1.15428e-02 -9.69530e-01 2.44668e-01 + -3.79154e-03 -1.15619e-02 -9.69530e-01 2.44669e-01 + -3.86441e-03 -1.15802e-02 -9.69529e-01 2.44669e-01 + -3.93808e-03 -1.15990e-02 -9.69529e-01 2.44669e-01 + -4.01167e-03 -1.16178e-02 -9.69528e-01 2.44669e-01 + -4.08514e-03 -1.16364e-02 -9.69528e-01 2.44669e-01 + -4.15927e-03 -1.16554e-02 -9.69527e-01 2.44669e-01 + -4.23256e-03 -1.16734e-02 -9.69526e-01 2.44670e-01 + -4.30618e-03 -1.16925e-02 -9.69526e-01 2.44670e-01 + -4.37946e-03 -1.17111e-02 -9.69525e-01 2.44670e-01 + -4.45276e-03 -1.17297e-02 -9.69525e-01 2.44670e-01 + -4.52616e-03 -1.17484e-02 -9.69524e-01 2.44670e-01 + -4.59922e-03 -1.17668e-02 -9.69523e-01 2.44671e-01 + -4.67280e-03 -1.17856e-02 -9.69523e-01 2.44671e-01 + -4.74606e-03 -1.18040e-02 -9.69522e-01 2.44672e-01 + -4.81990e-03 -1.18223e-02 -9.69521e-01 2.44672e-01 + -4.89375e-03 -1.18410e-02 -9.69521e-01 2.44672e-01 + -4.96716e-03 -1.18600e-02 -9.69520e-01 2.44673e-01 + -5.04065e-03 -1.18780e-02 -9.69519e-01 2.44673e-01 + -5.11402e-03 -1.18969e-02 -9.69519e-01 2.44673e-01 + -5.18707e-03 -1.19149e-02 -9.69518e-01 2.44674e-01 + -5.26060e-03 -1.19331e-02 -9.69517e-01 2.44674e-01 + -5.33431e-03 -1.19518e-02 -9.69516e-01 2.44675e-01 + -5.40772e-03 -1.19705e-02 -9.69515e-01 2.44675e-01 + -5.48121e-03 -1.19890e-02 -9.69515e-01 2.44675e-01 + -5.55455e-03 -1.20070e-02 -9.69514e-01 2.44675e-01 + -5.62764e-03 -1.20256e-02 -9.69513e-01 2.44676e-01 + -5.70100e-03 -1.20442e-02 -9.69513e-01 2.44676e-01 + -5.77481e-03 -1.20626e-02 -9.69512e-01 2.44676e-01 + -5.84873e-03 -1.20811e-02 -9.69511e-01 2.44677e-01 + -5.92169e-03 -1.20999e-02 -9.69510e-01 2.44677e-01 + -5.99533e-03 -1.21176e-02 -9.69509e-01 2.44678e-01 + -6.06850e-03 -1.21364e-02 -9.69509e-01 2.44678e-01 + -6.14171e-03 -1.21550e-02 -9.69508e-01 2.44678e-01 + -6.21534e-03 -1.21731e-02 -9.69507e-01 2.44679e-01 + -6.28930e-03 -1.21918e-02 -9.69506e-01 2.44679e-01 + -6.36280e-03 -1.22107e-02 -9.69506e-01 2.44679e-01 + -6.43647e-03 -1.22289e-02 -9.69505e-01 2.44680e-01 + -6.51003e-03 -1.22475e-02 -9.69504e-01 2.44680e-01 + -6.58341e-03 -1.22658e-02 -9.69503e-01 2.44680e-01 + -6.65680e-03 -1.22841e-02 -9.69502e-01 2.44681e-01 + -6.73054e-03 -1.23030e-02 -9.69502e-01 2.44681e-01 + -6.80366e-03 -1.23205e-02 -9.69501e-01 2.44682e-01 + -6.87755e-03 -1.23389e-02 -9.69500e-01 2.44682e-01 + -6.95077e-03 -1.23579e-02 -9.69499e-01 2.44682e-01 + -7.02375e-03 -1.23766e-02 -9.69498e-01 2.44683e-01 + -7.09706e-03 -1.23948e-02 -9.69497e-01 2.44684e-01 + -7.17076e-03 -1.24138e-02 -9.69496e-01 2.44684e-01 + -7.24327e-03 -1.24318e-02 -9.69495e-01 2.44685e-01 + -7.31718e-03 -1.24508e-02 -9.69494e-01 2.44685e-01 + -7.39045e-03 -1.24694e-02 -9.69493e-01 2.44686e-01 + -7.46347e-03 -1.24878e-02 -9.69492e-01 2.44686e-01 + -7.53679e-03 -1.25062e-02 -9.69492e-01 2.44687e-01 + -7.60937e-03 -1.25240e-02 -9.69491e-01 2.44687e-01 + -7.68277e-03 -1.25432e-02 -9.69490e-01 2.44688e-01 + -7.75663e-03 -1.25619e-02 -9.69489e-01 2.44688e-01 + -7.82981e-03 -1.25800e-02 -9.69488e-01 2.44688e-01 + -7.90248e-03 -1.25982e-02 -9.69487e-01 2.44689e-01 + -7.97552e-03 -1.26172e-02 -9.69486e-01 2.44689e-01 + -8.04955e-03 -1.26349e-02 -9.69485e-01 2.44689e-01 + -8.12309e-03 -1.26535e-02 -9.69484e-01 2.44690e-01 + -8.19666e-03 -1.26720e-02 -9.69483e-01 2.44690e-01 + -8.27023e-03 -1.26904e-02 -9.69482e-01 2.44691e-01 + -8.34383e-03 -1.27089e-02 -9.69481e-01 2.44691e-01 + -8.41742e-03 -1.27275e-02 -9.69481e-01 2.44691e-01 + -8.49102e-03 -1.27460e-02 -9.69480e-01 2.44690e-01 + -8.56462e-03 -1.27645e-02 -9.69479e-01 2.44690e-01 + -8.63821e-03 -1.27831e-02 -9.69478e-01 2.44690e-01 + -8.71181e-03 -1.28016e-02 -9.69477e-01 2.44690e-01 + -8.78540e-03 -1.28201e-02 -9.69476e-01 2.44690e-01 + -8.85900e-03 -1.28387e-02 -9.69475e-01 2.44690e-01 + -8.93260e-03 -1.28572e-02 -9.69474e-01 2.44690e-01 + -9.00619e-03 -1.28757e-02 -9.69474e-01 2.44690e-01 + -9.07979e-03 -1.28943e-02 -9.69473e-01 2.44690e-01 + + +SCAN_DURATION 4.32261e+01 +INT_TIME 8.27706e-04 + +ALONG_SCAN_PIXEL_SIZE 1.53910e-02 +CROSS_SCAN_PIXEL_SIZE 1.40000e-02 + +CENTER_GP -1.56952e+00 -2.81024e+00 0.00000e+00 +SENSOR_POSITION -1.56940e+00 -2.28796e+00 5.98310e+04 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 52224 +TOTAL_SAMPLES 2532 + + + + +IKCODE -85610 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 1.83000e-05 0.00000e+00 0.00000e+00 +ITRANSS 0.00000e+00 0.00000e+00 -1.42857e+02 +ITRANSL 0.00000e+00 -1.42857e+02 0.00000e+00 +DETECTOR_SAMPLE_ORIGIN 2.56800e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 2.00000e+00 +STARTING_SAMPLE 1.50000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 3.38355e+08 +CENTER_EPHEMERIS_TIME 3.38355e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M140944356LE_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M140944356LE_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..ec01703fadf0dd8c4fd496dbc4415663d409fb78 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/lronac/truth/sed_M140944356LE_keywords.txt @@ -0,0 +1,386 @@ +RECTIFICATION_TERMS + 2.61120e+04 0.00000e+00 1.00000e+00 + 1.26600e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.56032e+00 -3.00333e+00 0.00000e+00 +LOAD_PT -1.56032e+00 -3.00333e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 6.99620e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 2.61120e+04 6.48457e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 1.26600e+03 0.00000e+00 7.14285e+01 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 6.99620e+02 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 1.38883e+00 +T0_EPHEM -3.05543e+01 +NUMBER_OF_EPHEM 45 +EPHEM_PTS + -6.62237e+04 -1.95644e+04 -1.78568e+06 + -6.40789e+04 -1.87320e+04 -1.78573e+06 + -6.19341e+04 -1.78996e+04 -1.78577e+06 + -5.97893e+04 -1.70672e+04 -1.78582e+06 + -5.76446e+04 -1.62348e+04 -1.78586e+06 + -5.54998e+04 -1.54024e+04 -1.78590e+06 + -5.33550e+04 -1.45699e+04 -1.78595e+06 + -5.12102e+04 -1.37375e+04 -1.78599e+06 + -4.90655e+04 -1.29051e+04 -1.78604e+06 + -4.69207e+04 -1.20727e+04 -1.78608e+06 + -4.47759e+04 -1.12403e+04 -1.78613e+06 + -4.26311e+04 -1.04079e+04 -1.78617e+06 + -4.04863e+04 -9.57551e+03 -1.78621e+06 + -3.83413e+04 -8.74309e+03 -1.78625e+06 + -3.61963e+04 -7.91068e+03 -1.78629e+06 + -3.40513e+04 -7.07827e+03 -1.78632e+06 + -3.19062e+04 -6.24586e+03 -1.78635e+06 + -2.97610e+04 -5.41346e+03 -1.78637e+06 + -2.76157e+04 -4.58106e+03 -1.78640e+06 + -2.54704e+04 -3.74867e+03 -1.78642e+06 + -2.33251e+04 -2.91630e+03 -1.78644e+06 + -2.11797e+04 -2.08393e+03 -1.78645e+06 + -1.90342e+04 -1.25158e+03 -1.78646e+06 + -1.68888e+04 -4.19243e+02 -1.78647e+06 + -1.47433e+04 4.13078e+02 -1.78648e+06 + -1.25977e+04 1.24538e+03 -1.78648e+06 + -1.04521e+04 2.07767e+03 -1.78648e+06 + -8.30659e+03 2.90994e+03 -1.78648e+06 + -6.16098e+03 3.74219e+03 -1.78647e+06 + -4.01534e+03 4.57442e+03 -1.78646e+06 + -1.86969e+03 5.40662e+03 -1.78645e+06 + 2.75958e+02 6.23880e+03 -1.78643e+06 + 2.42162e+03 7.07095e+03 -1.78642e+06 + 4.56728e+03 7.90308e+03 -1.78640e+06 + 6.71295e+03 8.73517e+03 -1.78637e+06 + 8.85862e+03 9.56726e+03 -1.78635e+06 + 1.10042e+04 1.03993e+04 -1.78632e+06 + 1.31499e+04 1.12314e+04 -1.78630e+06 + 1.52956e+04 1.20635e+04 -1.78628e+06 + 1.74412e+04 1.28956e+04 -1.78625e+06 + 1.95869e+04 1.37277e+04 -1.78623e+06 + 2.17326e+04 1.45598e+04 -1.78620e+06 + 2.38782e+04 1.53919e+04 -1.78618e+06 + 2.60239e+04 1.62240e+04 -1.78616e+06 + 2.81696e+04 1.70561e+04 -1.78613e+06 + + +EPHEM_RATES + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54430e+03 5.99362e+02 -3.18832e+01 + 1.54432e+03 5.99362e+02 -3.08176e+01 + 1.54438e+03 5.99362e+02 -2.86861e+01 + 1.54443e+03 5.99361e+02 -2.65536e+01 + 1.54448e+03 5.99361e+02 -2.44204e+01 + 1.54453e+03 5.99359e+02 -2.22872e+01 + 1.54457e+03 5.99355e+02 -2.01545e+01 + 1.54461e+03 5.99351e+02 -1.80230e+01 + 1.54465e+03 5.99345e+02 -1.58917e+01 + 1.54469e+03 5.99339e+02 -1.37597e+01 + 1.54472e+03 5.99331e+02 -1.16268e+01 + 1.54476e+03 5.99323e+02 -9.49342e+00 + 1.54479e+03 5.99312e+02 -7.36016e+00 + 1.54481e+03 5.99301e+02 -5.22721e+00 + 1.54484e+03 5.99290e+02 -3.09442e+00 + 1.54486e+03 5.99278e+02 -9.61755e-01 + 1.54488e+03 5.99266e+02 1.17096e+00 + 1.54489e+03 5.99251e+02 3.30402e+00 + 1.54491e+03 5.99235e+02 5.43754e+00 + 1.54492e+03 5.99218e+02 7.57134e+00 + 1.54493e+03 5.99201e+02 9.70490e+00 + 1.54493e+03 5.99182e+02 1.18378e+01 + 1.54494e+03 5.99162e+02 1.39703e+01 + 1.54494e+03 5.99142e+02 1.61029e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + 1.54494e+03 5.99131e+02 1.71694e+01 + + +DT_QUAT 1.64553e-01 +T0_QUAT -1.89236e+01 +NUMBER_OF_QUATERNIONS 231 +QUATERNIONS + 1.43734e-02 1.73633e-02 1.84012e-01 9.82666e-01 + 1.43396e-02 1.72508e-02 1.84037e-01 9.82663e-01 + 1.43059e-02 1.71384e-02 1.84061e-01 9.82661e-01 + 1.42721e-02 1.70260e-02 1.84086e-01 9.82659e-01 + 1.42384e-02 1.69135e-02 1.84111e-01 9.82657e-01 + 1.42046e-02 1.68011e-02 1.84136e-01 9.82654e-01 + 1.41709e-02 1.66887e-02 1.84160e-01 9.82652e-01 + 1.41371e-02 1.65762e-02 1.84185e-01 9.82650e-01 + 1.41034e-02 1.64638e-02 1.84210e-01 9.82647e-01 + 1.40696e-02 1.63514e-02 1.84235e-01 9.82645e-01 + 1.40358e-02 1.62390e-02 1.84259e-01 9.82643e-01 + 1.40021e-02 1.61265e-02 1.84284e-01 9.82640e-01 + 1.39624e-02 1.60106e-02 1.84314e-01 9.82637e-01 + 1.39217e-02 1.58910e-02 1.84339e-01 9.82635e-01 + 1.38876e-02 1.57708e-02 1.84350e-01 9.82635e-01 + 1.38596e-02 1.56523e-02 1.84349e-01 9.82638e-01 + 1.38269e-02 1.55363e-02 1.84361e-01 9.82638e-01 + 1.37930e-02 1.54244e-02 1.84383e-01 9.82636e-01 + 1.37655e-02 1.53194e-02 1.84406e-01 9.82634e-01 + 1.37485e-02 1.52214e-02 1.84421e-01 9.82633e-01 + 1.37368e-02 1.51252e-02 1.84421e-01 9.82634e-01 + 1.37214e-02 1.50246e-02 1.84427e-01 9.82635e-01 + 1.36952e-02 1.49194e-02 1.84445e-01 9.82634e-01 + 1.36659e-02 1.48115e-02 1.84464e-01 9.82632e-01 + 1.36410e-02 1.47042e-02 1.84475e-01 9.82632e-01 + 1.36253e-02 1.46006e-02 1.84472e-01 9.82634e-01 + 1.36166e-02 1.45012e-02 1.84465e-01 9.82637e-01 + 1.36013e-02 1.44026e-02 1.84473e-01 9.82637e-01 + 1.35825e-02 1.43060e-02 1.84487e-01 9.82636e-01 + 1.35681e-02 1.42118e-02 1.84498e-01 9.82636e-01 + 1.35623e-02 1.41210e-02 1.84499e-01 9.82637e-01 + 1.35633e-02 1.40352e-02 1.84489e-01 9.82640e-01 + 1.35634e-02 1.39513e-02 1.84490e-01 9.82641e-01 + 1.35555e-02 1.38668e-02 1.84502e-01 9.82640e-01 + 1.35454e-02 1.37779e-02 1.84511e-01 9.82640e-01 + 1.35385e-02 1.36860e-02 1.84508e-01 9.82642e-01 + 1.35368e-02 1.35936e-02 1.84493e-01 9.82646e-01 + 1.35361e-02 1.35018e-02 1.84477e-01 9.82650e-01 + 1.35296e-02 1.34120e-02 1.84479e-01 9.82651e-01 + 1.35268e-02 1.33327e-02 1.84485e-01 9.82651e-01 + 1.35338e-02 1.32607e-02 1.84485e-01 9.82652e-01 + 1.35490e-02 1.31914e-02 1.84474e-01 9.82655e-01 + 1.35653e-02 1.31201e-02 1.84458e-01 9.82659e-01 + 1.35716e-02 1.30431e-02 1.84451e-01 9.82661e-01 + 1.35656e-02 1.29600e-02 1.84453e-01 9.82662e-01 + 1.35643e-02 1.28782e-02 1.84450e-01 9.82663e-01 + 1.35721e-02 1.27992e-02 1.84436e-01 9.82667e-01 + 1.35869e-02 1.27230e-02 1.84412e-01 9.82672e-01 + 1.35999e-02 1.26492e-02 1.84392e-01 9.82677e-01 + 1.36059e-02 1.25749e-02 1.84390e-01 9.82678e-01 + 1.36117e-02 1.25034e-02 1.84389e-01 9.82679e-01 + 1.36255e-02 1.24350e-02 1.84378e-01 9.82682e-01 + 1.36467e-02 1.23695e-02 1.84359e-01 9.82686e-01 + 1.36694e-02 1.23056e-02 1.84339e-01 9.82690e-01 + 1.36843e-02 1.22406e-02 1.84332e-01 9.82692e-01 + 1.36908e-02 1.21716e-02 1.84334e-01 9.82692e-01 + 1.37005e-02 1.20990e-02 1.84325e-01 9.82695e-01 + 1.37165e-02 1.20249e-02 1.84303e-01 9.82700e-01 + 1.37344e-02 1.19500e-02 1.84277e-01 9.82705e-01 + 1.37458e-02 1.18741e-02 1.84259e-01 9.82709e-01 + 1.37508e-02 1.18005e-02 1.84258e-01 9.82710e-01 + 1.37657e-02 1.17372e-02 1.84256e-01 9.82711e-01 + 1.37903e-02 1.16775e-02 1.84244e-01 9.82714e-01 + 1.38185e-02 1.16182e-02 1.84224e-01 9.82718e-01 + 1.38416e-02 1.15551e-02 1.84207e-01 9.82721e-01 + 1.38508e-02 1.14835e-02 1.84204e-01 9.82723e-01 + 1.38535e-02 1.14051e-02 1.84205e-01 9.82723e-01 + 1.38639e-02 1.13304e-02 1.84193e-01 9.82726e-01 + 1.38825e-02 1.12572e-02 1.84171e-01 9.82731e-01 + 1.39028e-02 1.11849e-02 1.84149e-01 9.82736e-01 + 1.39172e-02 1.11136e-02 1.84138e-01 9.82738e-01 + 1.39244e-02 1.10439e-02 1.84141e-01 9.82739e-01 + 1.39418e-02 1.09797e-02 1.84139e-01 9.82739e-01 + 1.39660e-02 1.09160e-02 1.84123e-01 9.82743e-01 + 1.39917e-02 1.08523e-02 1.84106e-01 9.82746e-01 + 1.40125e-02 1.07873e-02 1.84096e-01 9.82749e-01 + 1.40231e-02 1.07194e-02 1.84098e-01 9.82749e-01 + 1.40301e-02 1.06467e-02 1.84102e-01 9.82749e-01 + 1.40459e-02 1.05714e-02 1.84087e-01 9.82752e-01 + 1.40655e-02 1.04953e-02 1.84065e-01 9.82757e-01 + 1.40815e-02 1.04185e-02 1.84049e-01 9.82760e-01 + 1.40904e-02 1.03422e-02 1.84045e-01 9.82762e-01 + 1.40958e-02 1.02705e-02 1.84051e-01 9.82761e-01 + 1.41151e-02 1.02077e-02 1.84049e-01 9.82762e-01 + 1.41437e-02 1.01461e-02 1.84035e-01 9.82765e-01 + 1.41689e-02 1.00814e-02 1.84023e-01 9.82768e-01 + 1.41834e-02 1.00115e-02 1.84019e-01 9.82769e-01 + 1.41868e-02 9.93614e-03 1.84025e-01 9.82768e-01 + 1.41901e-02 9.85670e-03 1.84028e-01 9.82769e-01 + 1.42062e-02 9.77881e-03 1.84012e-01 9.82772e-01 + 1.42256e-02 9.70239e-03 1.83994e-01 9.82776e-01 + 1.42402e-02 9.62657e-03 1.83984e-01 9.82778e-01 + 1.42489e-02 9.55261e-03 1.83986e-01 9.82779e-01 + 1.42581e-02 9.48347e-03 1.83996e-01 9.82777e-01 + 1.42778e-02 9.41747e-03 1.83992e-01 9.82778e-01 + 1.43043e-02 9.35021e-03 1.83980e-01 9.82781e-01 + 1.43261e-02 9.28165e-03 1.83973e-01 9.82782e-01 + 1.43385e-02 9.21073e-03 1.83977e-01 9.82782e-01 + 1.43439e-02 9.13692e-03 1.83988e-01 9.82781e-01 + 1.43548e-02 9.06132e-03 1.83992e-01 9.82781e-01 + 1.43762e-02 8.98451e-03 1.83976e-01 9.82784e-01 + 1.43952e-02 8.90604e-03 1.83964e-01 9.82787e-01 + 1.44054e-02 8.82640e-03 1.83962e-01 9.82788e-01 + 1.44105e-02 8.74841e-03 1.83969e-01 9.82787e-01 + 1.44203e-02 8.67574e-03 1.83979e-01 9.82785e-01 + 1.44445e-02 8.61071e-03 1.83975e-01 9.82786e-01 + 1.44730e-02 8.54562e-03 1.83964e-01 9.82789e-01 + 1.44934e-02 8.47817e-03 1.83964e-01 9.82789e-01 + 1.45025e-02 8.40539e-03 1.83973e-01 9.82788e-01 + 1.45051e-02 8.32708e-03 1.83983e-01 9.82787e-01 + 1.45135e-02 8.24651e-03 1.83982e-01 9.82787e-01 + 1.45333e-02 8.16660e-03 1.83965e-01 9.82791e-01 + 1.45499e-02 8.08591e-03 1.83953e-01 9.82793e-01 + 1.45584e-02 8.00759e-03 1.83955e-01 9.82794e-01 + 1.45656e-02 7.93488e-03 1.83965e-01 9.82792e-01 + 1.45804e-02 7.86840e-03 1.83972e-01 9.82791e-01 + 1.46067e-02 7.80270e-03 1.83964e-01 9.82793e-01 + 1.46306e-02 7.73452e-03 1.83953e-01 9.82795e-01 + 1.46440e-02 7.66144e-03 1.83954e-01 9.82795e-01 + 1.46491e-02 7.58561e-03 1.83963e-01 9.82794e-01 + 1.46538e-02 7.50812e-03 1.83969e-01 9.82793e-01 + 1.46676e-02 7.42951e-03 1.83963e-01 9.82795e-01 + 1.46901e-02 7.35278e-03 1.83945e-01 9.82799e-01 + 1.47042e-02 7.27389e-03 1.83938e-01 9.82800e-01 + 1.47090e-02 7.19494e-03 1.83942e-01 9.82800e-01 + 1.47149e-02 7.12076e-03 1.83950e-01 9.82799e-01 + 1.47305e-02 7.05271e-03 1.83951e-01 9.82799e-01 + 1.47577e-02 6.98691e-03 1.83940e-01 9.82801e-01 + 1.47822e-02 6.92012e-03 1.83932e-01 9.82803e-01 + 1.47919e-02 6.84848e-03 1.83937e-01 9.82802e-01 + 1.47962e-02 6.77356e-03 1.83946e-01 9.82801e-01 + 1.48036e-02 6.69634e-03 1.83948e-01 9.82801e-01 + 1.48192e-02 6.61778e-03 1.83937e-01 9.82803e-01 + 1.48410e-02 6.53908e-03 1.83919e-01 9.82807e-01 + 1.48517e-02 6.45936e-03 1.83915e-01 9.82808e-01 + 1.48557e-02 6.38171e-03 1.83922e-01 9.82807e-01 + 1.48647e-02 6.31040e-03 1.83928e-01 9.82807e-01 + 1.48843e-02 6.24401e-03 1.83925e-01 9.82807e-01 + 1.49125e-02 6.17725e-03 1.83913e-01 9.82809e-01 + 1.49340e-02 6.10873e-03 1.83907e-01 9.82811e-01 + 1.49409e-02 6.03561e-03 1.83914e-01 9.82810e-01 + 1.49463e-02 5.96064e-03 1.83922e-01 9.82809e-01 + 1.49588e-02 5.88499e-03 1.83920e-01 9.82809e-01 + 1.49799e-02 5.80888e-03 1.83907e-01 9.82812e-01 + 1.50013e-02 5.73161e-03 1.83891e-01 9.82815e-01 + 1.50089e-02 5.65031e-03 1.83890e-01 9.82815e-01 + 1.50121e-02 5.57152e-03 1.83896e-01 9.82815e-01 + 1.50244e-02 5.49942e-03 1.83897e-01 9.82815e-01 + 1.50485e-02 5.43246e-03 1.83889e-01 9.82816e-01 + 1.50785e-02 5.36659e-03 1.83876e-01 9.82819e-01 + 1.50985e-02 5.29843e-03 1.83872e-01 9.82819e-01 + 1.51027e-02 5.22474e-03 1.83880e-01 9.82818e-01 + 1.51091e-02 5.14751e-03 1.83884e-01 9.82818e-01 + 1.51240e-02 5.06860e-03 1.83875e-01 9.82820e-01 + 1.51455e-02 4.98891e-03 1.83858e-01 9.82823e-01 + 1.51648e-02 4.90837e-03 1.83844e-01 9.82826e-01 + 1.51699e-02 4.82704e-03 1.83844e-01 9.82826e-01 + 1.51770e-02 4.75223e-03 1.83852e-01 9.82825e-01 + 1.51943e-02 4.68236e-03 1.83851e-01 9.82825e-01 + 1.52197e-02 4.61394e-03 1.83842e-01 9.82826e-01 + 1.52457e-02 4.54402e-03 1.83833e-01 9.82828e-01 + 1.52603e-02 4.47180e-03 1.83834e-01 9.82828e-01 + 1.52631e-02 4.39540e-03 1.83846e-01 9.82826e-01 + 1.52728e-02 4.31883e-03 1.83850e-01 9.82826e-01 + 1.52920e-02 4.24185e-03 1.83842e-01 9.82827e-01 + 1.53145e-02 4.16362e-03 1.83829e-01 9.82829e-01 + 1.53304e-02 4.08316e-03 1.83822e-01 9.82831e-01 + 1.53316e-02 3.99994e-03 1.83829e-01 9.82830e-01 + 1.53376e-02 3.92200e-03 1.83838e-01 9.82828e-01 + 1.53569e-02 3.85098e-03 1.83837e-01 9.82829e-01 + 1.53838e-02 3.78321e-03 1.83830e-01 9.82830e-01 + 1.54084e-02 3.71521e-03 1.83827e-01 9.82830e-01 + 1.54205e-02 3.64473e-03 1.83835e-01 9.82829e-01 + 1.54214e-02 3.56852e-03 1.83849e-01 9.82826e-01 + 1.54322e-02 3.48857e-03 1.83851e-01 9.82826e-01 + 1.54516e-02 3.40841e-03 1.83842e-01 9.82828e-01 + 1.54714e-02 3.32755e-03 1.83831e-01 9.82830e-01 + 1.54836e-02 3.24587e-03 1.83829e-01 9.82830e-01 + 1.54851e-02 3.16602e-03 1.83839e-01 9.82829e-01 + 1.54951e-02 3.09392e-03 1.83849e-01 9.82827e-01 + 1.55182e-02 3.02525e-03 1.83847e-01 9.82827e-01 + 1.55443e-02 2.95631e-03 1.83841e-01 9.82828e-01 + 1.55631e-02 2.88443e-03 1.83840e-01 9.82828e-01 + 1.55689e-02 2.80865e-03 1.83851e-01 9.82826e-01 + 1.55710e-02 2.73198e-03 1.83863e-01 9.82824e-01 + 1.55873e-02 2.65490e-03 1.83862e-01 9.82824e-01 + 1.56098e-02 2.57800e-03 1.83852e-01 9.82826e-01 + 1.56283e-02 2.49811e-03 1.83845e-01 9.82827e-01 + 1.56362e-02 2.41576e-03 1.83847e-01 9.82827e-01 + 1.56358e-02 2.33603e-03 1.83858e-01 9.82825e-01 + 1.56480e-02 2.26297e-03 1.83864e-01 9.82824e-01 + 1.56740e-02 2.19444e-03 1.83859e-01 9.82825e-01 + 1.56995e-02 2.12657e-03 1.83855e-01 9.82825e-01 + 1.57150e-02 2.05554e-03 1.83858e-01 9.82824e-01 + 1.57187e-02 1.97970e-03 1.83871e-01 9.82822e-01 + 1.57220e-02 1.90253e-03 1.83882e-01 9.82820e-01 + 1.57423e-02 1.82631e-03 1.83877e-01 9.82821e-01 + 1.57657e-02 1.74870e-03 1.83866e-01 9.82823e-01 + 1.57813e-02 1.66927e-03 1.83862e-01 9.82823e-01 + 1.57864e-02 1.58798e-03 1.83867e-01 9.82822e-01 + 1.57870e-02 1.50611e-03 1.83877e-01 9.82821e-01 + 1.58017e-02 1.43123e-03 1.83879e-01 9.82820e-01 + 1.58291e-02 1.36149e-03 1.83871e-01 9.82821e-01 + 1.58512e-02 1.29170e-03 1.83869e-01 9.82822e-01 + 1.58632e-02 1.22019e-03 1.83876e-01 9.82820e-01 + 1.58680e-02 1.14655e-03 1.83888e-01 9.82818e-01 + 1.58762e-02 1.07144e-03 1.83895e-01 9.82816e-01 + 1.58994e-02 9.97186e-04 1.83886e-01 9.82818e-01 + 1.59221e-02 9.19390e-04 1.83878e-01 9.82819e-01 + 1.59342e-02 8.38526e-04 1.83877e-01 9.82819e-01 + 1.59376e-02 7.56274e-04 1.83883e-01 9.82818e-01 + 1.59411e-02 6.75582e-04 1.83889e-01 9.82817e-01 + 1.59590e-02 6.01794e-04 1.83888e-01 9.82817e-01 + 1.59881e-02 5.34803e-04 1.83882e-01 9.82818e-01 + 1.60080e-02 4.66328e-04 1.83883e-01 9.82817e-01 + 1.60168e-02 3.94550e-04 1.83892e-01 9.82815e-01 + 1.60213e-02 3.19733e-04 1.83902e-01 9.82813e-01 + 1.60322e-02 2.43257e-04 1.83904e-01 9.82813e-01 + 1.60573e-02 1.65265e-04 1.83893e-01 9.82814e-01 + 1.60773e-02 8.66788e-05 1.83883e-01 9.82816e-01 + 1.60864e-02 5.21656e-06 1.83883e-01 9.82816e-01 + 1.60956e-02 -7.62457e-05 1.83882e-01 9.82816e-01 + 1.61047e-02 -1.57707e-04 1.83881e-01 9.82816e-01 + 1.61139e-02 -2.39170e-04 1.83881e-01 9.82816e-01 + 1.61231e-02 -3.20632e-04 1.83880e-01 9.82816e-01 + 1.61322e-02 -4.02094e-04 1.83880e-01 9.82816e-01 + 1.61414e-02 -4.83557e-04 1.83879e-01 9.82816e-01 + 1.61505e-02 -5.65019e-04 1.83879e-01 9.82816e-01 + 1.61597e-02 -6.46481e-04 1.83878e-01 9.82816e-01 + 1.61688e-02 -7.27943e-04 1.83877e-01 9.82816e-01 + 1.61780e-02 -8.09406e-04 1.83877e-01 9.82816e-01 + + +SCAN_DURATION 3.47208e+01 +INT_TIME 6.64844e-04 + +ALONG_SCAN_PIXEL_SIZE 1.54211e-02 +CROSS_SCAN_PIXEL_SIZE 1.40000e-02 + +CENTER_GP -1.56032e+00 -3.00333e+00 0.00000e+00 +SENSOR_POSITION -1.56011e+00 -3.07593e+00 4.88615e+04 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 52224 +TOTAL_SAMPLES 2532 + + + + +IKCODE -85600 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF 1.80999e-05 0.00000e+00 0.00000e+00 +ITRANSS 0.00000e+00 0.00000e+00 1.42856e+02 +ITRANSL 0.00000e+00 1.42856e+02 0.00000e+00 +DETECTOR_SAMPLE_ORIGIN 2.54800e+03 +DETECTOR_LINE_ORIGIN 0.00000e+00 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 2.00000e+00 +STARTING_SAMPLE 1.50000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 3.39577e+08 +CENTER_EPHEMERIS_TIME 3.39577e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..35df07d6f65a82ca2647f2aef6cef6319702a53c --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/Makefile @@ -0,0 +1,13 @@ +APPNAME = socetlinescankeywords + +include $(ISISROOT)/make/isismake.tsts + +#Use sed to lower output precision to 5 decimal places in output txt files + +commands: + $(APPNAME) from=$(INPUT)/P01_001602_1701_XI_09S091W.8bit.cub \ + to=$(OUTPUT)/P01_001602_1701_XI_09S091W_keywords.txt > /dev/null; + cat $(OUTPUT)/P01_001602_1701_XI_09S091W_keywords.txt | \ + sed 's/\([0-9]\.[0-9][0-9][0-9][0-9][0-9]\)\([0-9]*\)/\1/g' > \ + $(OUTPUT)/sed_P01_001602_1701_XI_09S091W_keywords.txt + $(RM) $(OUTPUT)/P01_001602_1701_XI_09S091W_keywords.txt diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/truth/sed_P01_001602_1701_XI_09S091W_keywords.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/truth/sed_P01_001602_1701_XI_09S091W_keywords.txt new file mode 100644 index 0000000000000000000000000000000000000000..0c2ed3482d590fbf845009aafdf87aed398bbb3f --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/mroctx/truth/sed_P01_001602_1701_XI_09S091W_keywords.txt @@ -0,0 +1,470 @@ +RECTIFICATION_TERMS + 3.58400e+03 0.00000e+00 1.00000e+00 + 2.50000e+03 1.00000e+00 0.00000e+00 +GROUND_ZERO -1.74751e-01 -1.60303e+00 0.00000e+00 +LOAD_PT -1.74751e-01 -1.60303e+00 0.00000e+00 +COORD_SYSTEM 1 +IMAGE_MOTION 0 +SENSOR_TYPE USGSAstroLineScanner +SENSOR_MODE UNKNOWN +FOCAL 3.52927e+02 +ATMCO 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_LINE 3.58400e+03 1.20751e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +IOCOEF_SAMPLE 2.50000e+03 0.00000e+00 1.42857e+02 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 +ABERR 0 +ATMREF 0 +PLATFORM 1 +SOURCE_FLAG 1 +SINGLE_EPHEMERIDE 0 +TRI_PARAMETERS +0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 0.00000e+00 3.52927e+02 0.00000e+00 0.00000e+00 +T_CENTER 0.00000e+00 +DT_EPHEM 1.47849e-01 +T0_EPHEM -8.13174e+00 +NUMBER_OF_EPHEM 111 +EPHEM_PTS + -1.00376e+05 -3.59490e+06 -6.54358e+05 + -1.00441e+05 -3.59499e+06 -6.53861e+05 + -1.00505e+05 -3.59509e+06 -6.53364e+05 + -1.00570e+05 -3.59518e+06 -6.52866e+05 + -1.00634e+05 -3.59527e+06 -6.52369e+05 + -1.00699e+05 -3.59537e+06 -6.51872e+05 + -1.00764e+05 -3.59546e+06 -6.51374e+05 + -1.00828e+05 -3.59555e+06 -6.50877e+05 + -1.00893e+05 -3.59564e+06 -6.50380e+05 + -1.00957e+05 -3.59574e+06 -6.49882e+05 + -1.01022e+05 -3.59583e+06 -6.49385e+05 + -1.01086e+05 -3.59592e+06 -6.48888e+05 + -1.01151e+05 -3.59601e+06 -6.48390e+05 + -1.01216e+05 -3.59611e+06 -6.47893e+05 + -1.01280e+05 -3.59620e+06 -6.47396e+05 + -1.01345e+05 -3.59629e+06 -6.46898e+05 + -1.01409e+05 -3.59638e+06 -6.46401e+05 + -1.01474e+05 -3.59648e+06 -6.45903e+05 + -1.01539e+05 -3.59657e+06 -6.45406e+05 + -1.01603e+05 -3.59666e+06 -6.44909e+05 + -1.01668e+05 -3.59675e+06 -6.44411e+05 + -1.01732e+05 -3.59685e+06 -6.43914e+05 + -1.01797e+05 -3.59694e+06 -6.43416e+05 + -1.01862e+05 -3.59703e+06 -6.42919e+05 + -1.01926e+05 -3.59712e+06 -6.42421e+05 + -1.01991e+05 -3.59721e+06 -6.41924e+05 + -1.02055e+05 -3.59730e+06 -6.41426e+05 + -1.02120e+05 -3.59740e+06 -6.40929e+05 + -1.02185e+05 -3.59749e+06 -6.40431e+05 + -1.02249e+05 -3.59758e+06 -6.39934e+05 + -1.02314e+05 -3.59767e+06 -6.39436e+05 + -1.02378e+05 -3.59776e+06 -6.38939e+05 + -1.02443e+05 -3.59785e+06 -6.38441e+05 + -1.02508e+05 -3.59794e+06 -6.37943e+05 + -1.02572e+05 -3.59804e+06 -6.37446e+05 + -1.02637e+05 -3.59813e+06 -6.36948e+05 + -1.02701e+05 -3.59822e+06 -6.36451e+05 + -1.02766e+05 -3.59831e+06 -6.35953e+05 + -1.02831e+05 -3.59840e+06 -6.35455e+05 + -1.02895e+05 -3.59849e+06 -6.34958e+05 + -1.02960e+05 -3.59858e+06 -6.34460e+05 + -1.03024e+05 -3.59867e+06 -6.33962e+05 + -1.03089e+05 -3.59876e+06 -6.33465e+05 + -1.03154e+05 -3.59885e+06 -6.32967e+05 + -1.03218e+05 -3.59894e+06 -6.32469e+05 + -1.03283e+05 -3.59903e+06 -6.31971e+05 + -1.03347e+05 -3.59912e+06 -6.31474e+05 + -1.03412e+05 -3.59921e+06 -6.30976e+05 + -1.03477e+05 -3.59930e+06 -6.30478e+05 + -1.03541e+05 -3.59939e+06 -6.29980e+05 + -1.03606e+05 -3.59948e+06 -6.29482e+05 + -1.03670e+05 -3.59957e+06 -6.28985e+05 + -1.03735e+05 -3.59966e+06 -6.28487e+05 + -1.03800e+05 -3.59975e+06 -6.27989e+05 + -1.03864e+05 -3.59984e+06 -6.27491e+05 + -1.03929e+05 -3.59993e+06 -6.26993e+05 + -1.03993e+05 -3.60002e+06 -6.26495e+05 + -1.04058e+05 -3.60011e+06 -6.25997e+05 + -1.04123e+05 -3.60020e+06 -6.25500e+05 + -1.04187e+05 -3.60029e+06 -6.25002e+05 + -1.04252e+05 -3.60038e+06 -6.24504e+05 + -1.04316e+05 -3.60047e+06 -6.24006e+05 + -1.04381e+05 -3.60056e+06 -6.23508e+05 + -1.04445e+05 -3.60065e+06 -6.23010e+05 + -1.04510e+05 -3.60074e+06 -6.22512e+05 + -1.04575e+05 -3.60083e+06 -6.22014e+05 + -1.04639e+05 -3.60092e+06 -6.21516e+05 + -1.04704e+05 -3.60100e+06 -6.21018e+05 + -1.04768e+05 -3.60109e+06 -6.20520e+05 + -1.04833e+05 -3.60118e+06 -6.20022e+05 + -1.04898e+05 -3.60127e+06 -6.19524e+05 + -1.04962e+05 -3.60136e+06 -6.19026e+05 + -1.05027e+05 -3.60145e+06 -6.18528e+05 + -1.05091e+05 -3.60154e+06 -6.18030e+05 + -1.05156e+05 -3.60162e+06 -6.17532e+05 + -1.05221e+05 -3.60171e+06 -6.17033e+05 + -1.05285e+05 -3.60180e+06 -6.16535e+05 + -1.05350e+05 -3.60189e+06 -6.16037e+05 + -1.05414e+05 -3.60198e+06 -6.15539e+05 + -1.05479e+05 -3.60207e+06 -6.15041e+05 + -1.05544e+05 -3.60215e+06 -6.14543e+05 + -1.05608e+05 -3.60224e+06 -6.14045e+05 + -1.05673e+05 -3.60233e+06 -6.13546e+05 + -1.05737e+05 -3.60242e+06 -6.13048e+05 + -1.05802e+05 -3.60250e+06 -6.12550e+05 + -1.05867e+05 -3.60259e+06 -6.12052e+05 + -1.05931e+05 -3.60268e+06 -6.11554e+05 + -1.05996e+05 -3.60277e+06 -6.11055e+05 + -1.06060e+05 -3.60285e+06 -6.10557e+05 + -1.06125e+05 -3.60294e+06 -6.10059e+05 + -1.06189e+05 -3.60303e+06 -6.09560e+05 + -1.06254e+05 -3.60312e+06 -6.09062e+05 + -1.06319e+05 -3.60320e+06 -6.08564e+05 + -1.06383e+05 -3.60329e+06 -6.08066e+05 + -1.06448e+05 -3.60338e+06 -6.07567e+05 + -1.06512e+05 -3.60346e+06 -6.07069e+05 + -1.06577e+05 -3.60355e+06 -6.06571e+05 + -1.06642e+05 -3.60364e+06 -6.06072e+05 + -1.06706e+05 -3.60372e+06 -6.05574e+05 + -1.06771e+05 -3.60381e+06 -6.05075e+05 + -1.06835e+05 -3.60390e+06 -6.04577e+05 + -1.06900e+05 -3.60398e+06 -6.04079e+05 + -1.06965e+05 -3.60407e+06 -6.03580e+05 + -1.07029e+05 -3.60416e+06 -6.03082e+05 + -1.07094e+05 -3.60424e+06 -6.02583e+05 + -1.07158e+05 -3.60433e+06 -6.02085e+05 + -1.07223e+05 -3.60442e+06 -6.01587e+05 + -1.07288e+05 -3.60450e+06 -6.01088e+05 + -1.07352e+05 -3.60459e+06 -6.00590e+05 + -1.07417e+05 -3.60468e+06 -6.00091e+05 + -1.07481e+05 -3.60476e+06 -5.99593e+05 + + +EPHEM_RATES + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27400e+02 3.36369e+03 + -4.36903e+02 -6.27163e+02 3.36373e+03 + -4.36903e+02 -6.26689e+02 3.36381e+03 + -4.36903e+02 -6.26215e+02 3.36390e+03 + -4.36904e+02 -6.25741e+02 3.36398e+03 + -4.36904e+02 -6.25267e+02 3.36407e+03 + -4.36904e+02 -6.24793e+02 3.36415e+03 + -4.36904e+02 -6.24319e+02 3.36424e+03 + -4.36904e+02 -6.23845e+02 3.36432e+03 + -4.36905e+02 -6.23371e+02 3.36441e+03 + -4.36905e+02 -6.22896e+02 3.36449e+03 + -4.36905e+02 -6.22422e+02 3.36457e+03 + -4.36905e+02 -6.21948e+02 3.36466e+03 + -4.36905e+02 -6.21474e+02 3.36474e+03 + -4.36905e+02 -6.21000e+02 3.36483e+03 + -4.36905e+02 -6.20526e+02 3.36491e+03 + -4.36905e+02 -6.20051e+02 3.36499e+03 + -4.36905e+02 -6.19577e+02 3.36508e+03 + -4.36905e+02 -6.19103e+02 3.36516e+03 + -4.36905e+02 -6.18629e+02 3.36525e+03 + -4.36905e+02 -6.18154e+02 3.36533e+03 + -4.36905e+02 -6.17680e+02 3.36541e+03 + -4.36905e+02 -6.17206e+02 3.36550e+03 + -4.36905e+02 -6.16732e+02 3.36558e+03 + -4.36905e+02 -6.16257e+02 3.36566e+03 + -4.36905e+02 -6.15783e+02 3.36575e+03 + -4.36904e+02 -6.15309e+02 3.36583e+03 + -4.36904e+02 -6.14834e+02 3.36591e+03 + -4.36904e+02 -6.14360e+02 3.36600e+03 + -4.36904e+02 -6.13886e+02 3.36608e+03 + -4.36904e+02 -6.13411e+02 3.36616e+03 + -4.36903e+02 -6.12937e+02 3.36625e+03 + -4.36903e+02 -6.12463e+02 3.36633e+03 + -4.36903e+02 -6.11988e+02 3.36641e+03 + -4.36903e+02 -6.11514e+02 3.36649e+03 + -4.36902e+02 -6.11039e+02 3.36658e+03 + -4.36902e+02 -6.10565e+02 3.36666e+03 + -4.36902e+02 -6.10090e+02 3.36674e+03 + -4.36901e+02 -6.09616e+02 3.36682e+03 + -4.36901e+02 -6.09142e+02 3.36691e+03 + -4.36900e+02 -6.08667e+02 3.36699e+03 + -4.36900e+02 -6.08193e+02 3.36707e+03 + -4.36899e+02 -6.07718e+02 3.36715e+03 + -4.36899e+02 -6.07244e+02 3.36723e+03 + -4.36899e+02 -6.06769e+02 3.36732e+03 + -4.36898e+02 -6.06295e+02 3.36740e+03 + -4.36897e+02 -6.05820e+02 3.36748e+03 + -4.36897e+02 -6.05346e+02 3.36756e+03 + -4.36896e+02 -6.04871e+02 3.36764e+03 + -4.36896e+02 -6.04397e+02 3.36773e+03 + -4.36895e+02 -6.03922e+02 3.36781e+03 + -4.36895e+02 -6.03447e+02 3.36789e+03 + -4.36894e+02 -6.02973e+02 3.36797e+03 + -4.36893e+02 -6.02498e+02 3.36805e+03 + -4.36893e+02 -6.02024e+02 3.36813e+03 + -4.36892e+02 -6.01549e+02 3.36822e+03 + -4.36891e+02 -6.01074e+02 3.36830e+03 + -4.36891e+02 -6.00600e+02 3.36838e+03 + -4.36890e+02 -6.00125e+02 3.36846e+03 + -4.36889e+02 -5.99651e+02 3.36854e+03 + -4.36888e+02 -5.99176e+02 3.36862e+03 + -4.36888e+02 -5.98701e+02 3.36870e+03 + -4.36887e+02 -5.98227e+02 3.36878e+03 + -4.36886e+02 -5.97752e+02 3.36886e+03 + -4.36885e+02 -5.97277e+02 3.36894e+03 + -4.36884e+02 -5.96802e+02 3.36903e+03 + -4.36883e+02 -5.96328e+02 3.36911e+03 + -4.36882e+02 -5.95853e+02 3.36919e+03 + -4.36881e+02 -5.95378e+02 3.36927e+03 + -4.36881e+02 -5.94904e+02 3.36935e+03 + -4.36880e+02 -5.94429e+02 3.36943e+03 + -4.36879e+02 -5.93954e+02 3.36951e+03 + -4.36878e+02 -5.93479e+02 3.36959e+03 + -4.36877e+02 -5.93004e+02 3.36967e+03 + -4.36876e+02 -5.92530e+02 3.36975e+03 + -4.36874e+02 -5.92055e+02 3.36983e+03 + -4.36873e+02 -5.91580e+02 3.36991e+03 + -4.36872e+02 -5.91105e+02 3.36999e+03 + -4.36871e+02 -5.90630e+02 3.37007e+03 + -4.36870e+02 -5.90156e+02 3.37015e+03 + -4.36869e+02 -5.89681e+02 3.37023e+03 + -4.36868e+02 -5.89206e+02 3.37031e+03 + -4.36867e+02 -5.88731e+02 3.37039e+03 + -4.36865e+02 -5.88256e+02 3.37047e+03 + -4.36864e+02 -5.87781e+02 3.37055e+03 + -4.36863e+02 -5.87306e+02 3.37063e+03 + -4.36862e+02 -5.86831e+02 3.37070e+03 + -4.36860e+02 -5.86357e+02 3.37078e+03 + -4.36859e+02 -5.85882e+02 3.37086e+03 + -4.36858e+02 -5.85407e+02 3.37094e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + -4.36857e+02 -5.85169e+02 3.37098e+03 + + +DT_QUAT 8.25419e-02 +T0_QUAT -7.51131e+00 +NUMBER_OF_QUATERNIONS 183 +QUATERNIONS + -4.20014e-01 -4.86677e-01 -5.71338e-01 5.10201e-01 + -4.20038e-01 -4.86696e-01 -5.71320e-01 5.10183e-01 + -4.20061e-01 -4.86715e-01 -5.71303e-01 5.10164e-01 + -4.20084e-01 -4.86735e-01 -5.71286e-01 5.10146e-01 + -4.20107e-01 -4.86754e-01 -5.71269e-01 5.10128e-01 + -4.20130e-01 -4.86773e-01 -5.71252e-01 5.10110e-01 + -4.20154e-01 -4.86792e-01 -5.71235e-01 5.10092e-01 + -4.20177e-01 -4.86811e-01 -5.71218e-01 5.10073e-01 + -4.20200e-01 -4.86830e-01 -5.71201e-01 5.10055e-01 + -4.20223e-01 -4.86849e-01 -5.71183e-01 5.10037e-01 + -4.20246e-01 -4.86868e-01 -5.71166e-01 5.10019e-01 + -4.20269e-01 -4.86887e-01 -5.71149e-01 5.10001e-01 + -4.20293e-01 -4.86907e-01 -5.71132e-01 5.09982e-01 + -4.20315e-01 -4.86926e-01 -5.71115e-01 5.09964e-01 + -4.20337e-01 -4.86944e-01 -5.71099e-01 5.09947e-01 + -4.20360e-01 -4.86964e-01 -5.71082e-01 5.09928e-01 + -4.20383e-01 -4.86985e-01 -5.71065e-01 5.09909e-01 + -4.20405e-01 -4.87005e-01 -5.71048e-01 5.09890e-01 + -4.20428e-01 -4.87025e-01 -5.71031e-01 5.09871e-01 + -4.20452e-01 -4.87045e-01 -5.71014e-01 5.09851e-01 + -4.20475e-01 -4.87065e-01 -5.70997e-01 5.09832e-01 + -4.20499e-01 -4.87083e-01 -5.70981e-01 5.09814e-01 + -4.20522e-01 -4.87103e-01 -5.70964e-01 5.09795e-01 + -4.20544e-01 -4.87123e-01 -5.70947e-01 5.09776e-01 + -4.20567e-01 -4.87142e-01 -5.70931e-01 5.09757e-01 + -4.20590e-01 -4.87162e-01 -5.70913e-01 5.09739e-01 + -4.20614e-01 -4.87182e-01 -5.70896e-01 5.09719e-01 + -4.20637e-01 -4.87202e-01 -5.70879e-01 5.09701e-01 + -4.20660e-01 -4.87220e-01 -5.70862e-01 5.09683e-01 + -4.20682e-01 -4.87238e-01 -5.70845e-01 5.09666e-01 + -4.20705e-01 -4.87258e-01 -5.70828e-01 5.09648e-01 + -4.20727e-01 -4.87278e-01 -5.70811e-01 5.09629e-01 + -4.20750e-01 -4.87298e-01 -5.70794e-01 5.09610e-01 + -4.20772e-01 -4.87319e-01 -5.70777e-01 5.09590e-01 + -4.20795e-01 -4.87339e-01 -5.70760e-01 5.09571e-01 + -4.20819e-01 -4.87358e-01 -5.70743e-01 5.09553e-01 + -4.20843e-01 -4.87376e-01 -5.70725e-01 5.09536e-01 + -4.20866e-01 -4.87396e-01 -5.70708e-01 5.09517e-01 + -4.20890e-01 -4.87415e-01 -5.70691e-01 5.09498e-01 + -4.20913e-01 -4.87435e-01 -5.70673e-01 5.09479e-01 + -4.20935e-01 -4.87456e-01 -5.70657e-01 5.09459e-01 + -4.20958e-01 -4.87476e-01 -5.70641e-01 5.09439e-01 + -4.20980e-01 -4.87496e-01 -5.70624e-01 5.09421e-01 + -4.21003e-01 -4.87516e-01 -5.70607e-01 5.09401e-01 + -4.21026e-01 -4.87536e-01 -5.70590e-01 5.09382e-01 + -4.21048e-01 -4.87555e-01 -5.70574e-01 5.09364e-01 + -4.21070e-01 -4.87575e-01 -5.70557e-01 5.09346e-01 + -4.21093e-01 -4.87595e-01 -5.70540e-01 5.09327e-01 + -4.21116e-01 -4.87615e-01 -5.70523e-01 5.09308e-01 + -4.21139e-01 -4.87634e-01 -5.70506e-01 5.09290e-01 + -4.21162e-01 -4.87654e-01 -5.70490e-01 5.09271e-01 + -4.21185e-01 -4.87673e-01 -5.70472e-01 5.09252e-01 + -4.21208e-01 -4.87692e-01 -5.70455e-01 5.09233e-01 + -4.21231e-01 -4.87711e-01 -5.70439e-01 5.09215e-01 + -4.21254e-01 -4.87730e-01 -5.70422e-01 5.09196e-01 + -4.21277e-01 -4.87753e-01 -5.70405e-01 5.09174e-01 + -4.21300e-01 -4.87773e-01 -5.70388e-01 5.09155e-01 + -4.21324e-01 -4.87793e-01 -5.70371e-01 5.09136e-01 + -4.21348e-01 -4.87813e-01 -5.70353e-01 5.09116e-01 + -4.21371e-01 -4.87833e-01 -5.70336e-01 5.09097e-01 + -4.21395e-01 -4.87850e-01 -5.70319e-01 5.09080e-01 + -4.21418e-01 -4.87869e-01 -5.70302e-01 5.09062e-01 + -4.21443e-01 -4.87887e-01 -5.70284e-01 5.09044e-01 + -4.21467e-01 -4.87906e-01 -5.70266e-01 5.09027e-01 + -4.21491e-01 -4.87926e-01 -5.70249e-01 5.09007e-01 + -4.21514e-01 -4.87946e-01 -5.70231e-01 5.08988e-01 + -4.21537e-01 -4.87966e-01 -5.70214e-01 5.08969e-01 + -4.21562e-01 -4.87983e-01 -5.70197e-01 5.08951e-01 + -4.21585e-01 -4.88002e-01 -5.70180e-01 5.08933e-01 + -4.21610e-01 -4.88021e-01 -5.70162e-01 5.08914e-01 + -4.21634e-01 -4.88040e-01 -5.70144e-01 5.08897e-01 + -4.21658e-01 -4.88059e-01 -5.70127e-01 5.08878e-01 + -4.21682e-01 -4.88079e-01 -5.70109e-01 5.08859e-01 + -4.21705e-01 -4.88098e-01 -5.70092e-01 5.08840e-01 + -4.21729e-01 -4.88117e-01 -5.70074e-01 5.08822e-01 + -4.21752e-01 -4.88136e-01 -5.70057e-01 5.08804e-01 + -4.21775e-01 -4.88156e-01 -5.70040e-01 5.08785e-01 + -4.21798e-01 -4.88174e-01 -5.70021e-01 5.08769e-01 + -4.21821e-01 -4.88194e-01 -5.70005e-01 5.08750e-01 + -4.21846e-01 -4.88213e-01 -5.69986e-01 5.08731e-01 + -4.21870e-01 -4.88233e-01 -5.69969e-01 5.08712e-01 + -4.21893e-01 -4.88253e-01 -5.69951e-01 5.08693e-01 + -4.21916e-01 -4.88273e-01 -5.69934e-01 5.08675e-01 + -4.21940e-01 -4.88292e-01 -5.69916e-01 5.08656e-01 + -4.21963e-01 -4.88311e-01 -5.69899e-01 5.08638e-01 + -4.21987e-01 -4.88330e-01 -5.69882e-01 5.08620e-01 + -4.22010e-01 -4.88350e-01 -5.69864e-01 5.08602e-01 + -4.22033e-01 -4.88369e-01 -5.69846e-01 5.08584e-01 + -4.22056e-01 -4.88389e-01 -5.69829e-01 5.08565e-01 + -4.22078e-01 -4.88409e-01 -5.69812e-01 5.08546e-01 + -4.22101e-01 -4.88429e-01 -5.69795e-01 5.08528e-01 + -4.22123e-01 -4.88449e-01 -5.69778e-01 5.08509e-01 + -4.22146e-01 -4.88469e-01 -5.69761e-01 5.08489e-01 + -4.22170e-01 -4.88489e-01 -5.69743e-01 5.08470e-01 + -4.22193e-01 -4.88509e-01 -5.69726e-01 5.08450e-01 + -4.22217e-01 -4.88529e-01 -5.69709e-01 5.08432e-01 + -4.22239e-01 -4.88549e-01 -5.69691e-01 5.08413e-01 + -4.22261e-01 -4.88570e-01 -5.69674e-01 5.08394e-01 + -4.22283e-01 -4.88589e-01 -5.69658e-01 5.08375e-01 + -4.22305e-01 -4.88609e-01 -5.69642e-01 5.08356e-01 + -4.22328e-01 -4.88629e-01 -5.69625e-01 5.08337e-01 + -4.22351e-01 -4.88648e-01 -5.69608e-01 5.08319e-01 + -4.22374e-01 -4.88667e-01 -5.69591e-01 5.08300e-01 + -4.22397e-01 -4.88687e-01 -5.69574e-01 5.08281e-01 + -4.22421e-01 -4.88707e-01 -5.69556e-01 5.08261e-01 + -4.22444e-01 -4.88727e-01 -5.69539e-01 5.08242e-01 + -4.22467e-01 -4.88745e-01 -5.69522e-01 5.08225e-01 + -4.22490e-01 -4.88765e-01 -5.69505e-01 5.08206e-01 + -4.22512e-01 -4.88785e-01 -5.69488e-01 5.08187e-01 + -4.22535e-01 -4.88805e-01 -5.69471e-01 5.08168e-01 + -4.22558e-01 -4.88825e-01 -5.69454e-01 5.08149e-01 + -4.22581e-01 -4.88846e-01 -5.69436e-01 5.08129e-01 + -4.22604e-01 -4.88865e-01 -5.69419e-01 5.08111e-01 + -4.22627e-01 -4.88885e-01 -5.69402e-01 5.08092e-01 + -4.22649e-01 -4.88905e-01 -5.69385e-01 5.08074e-01 + -4.22672e-01 -4.88924e-01 -5.69368e-01 5.08056e-01 + -4.22695e-01 -4.88943e-01 -5.69351e-01 5.08037e-01 + -4.22718e-01 -4.88963e-01 -5.69333e-01 5.08018e-01 + -4.22740e-01 -4.88982e-01 -5.69317e-01 5.07999e-01 + -4.22763e-01 -4.89002e-01 -5.69300e-01 5.07980e-01 + -4.22786e-01 -4.89022e-01 -5.69283e-01 5.07960e-01 + -4.22810e-01 -4.89042e-01 -5.69266e-01 5.07941e-01 + -4.22833e-01 -4.89062e-01 -5.69249e-01 5.07922e-01 + -4.22855e-01 -4.89080e-01 -5.69233e-01 5.07904e-01 + -4.22877e-01 -4.89100e-01 -5.69216e-01 5.07885e-01 + -4.22899e-01 -4.89122e-01 -5.69199e-01 5.07865e-01 + -4.22922e-01 -4.89143e-01 -5.69182e-01 5.07845e-01 + -4.22945e-01 -4.89162e-01 -5.69165e-01 5.07826e-01 + -4.22968e-01 -4.89183e-01 -5.69148e-01 5.07806e-01 + -4.22991e-01 -4.89203e-01 -5.69131e-01 5.07787e-01 + -4.23012e-01 -4.89222e-01 -5.69115e-01 5.07769e-01 + -4.23035e-01 -4.89242e-01 -5.69098e-01 5.07750e-01 + -4.23057e-01 -4.89262e-01 -5.69081e-01 5.07731e-01 + -4.23079e-01 -4.89281e-01 -5.69065e-01 5.07712e-01 + -4.23102e-01 -4.89301e-01 -5.69048e-01 5.07693e-01 + -4.23124e-01 -4.89322e-01 -5.69031e-01 5.07672e-01 + -4.23147e-01 -4.89342e-01 -5.69014e-01 5.07653e-01 + -4.23169e-01 -4.89361e-01 -5.68999e-01 5.07634e-01 + -4.23190e-01 -4.89380e-01 -5.68983e-01 5.07616e-01 + -4.23212e-01 -4.89400e-01 -5.68967e-01 5.07597e-01 + -4.23234e-01 -4.89420e-01 -5.68950e-01 5.07577e-01 + -4.23257e-01 -4.89440e-01 -5.68933e-01 5.07558e-01 + -4.23279e-01 -4.89460e-01 -5.68915e-01 5.07540e-01 + -4.23302e-01 -4.89480e-01 -5.68898e-01 5.07521e-01 + -4.23325e-01 -4.89499e-01 -5.68881e-01 5.07503e-01 + -4.23347e-01 -4.89518e-01 -5.68865e-01 5.07484e-01 + -4.23370e-01 -4.89538e-01 -5.68848e-01 5.07465e-01 + -4.23394e-01 -4.89558e-01 -5.68830e-01 5.07446e-01 + -4.23417e-01 -4.89578e-01 -5.68813e-01 5.07427e-01 + -4.23440e-01 -4.89598e-01 -5.68796e-01 5.07407e-01 + -4.23463e-01 -4.89619e-01 -5.68779e-01 5.07386e-01 + -4.23485e-01 -4.89638e-01 -5.68762e-01 5.07368e-01 + -4.23510e-01 -4.89657e-01 -5.68746e-01 5.07348e-01 + -4.23533e-01 -4.89676e-01 -5.68728e-01 5.07329e-01 + -4.23555e-01 -4.89695e-01 -5.68712e-01 5.07311e-01 + -4.23578e-01 -4.89715e-01 -5.68695e-01 5.07292e-01 + -4.23600e-01 -4.89735e-01 -5.68678e-01 5.07272e-01 + -4.23622e-01 -4.89756e-01 -5.68662e-01 5.07252e-01 + -4.23645e-01 -4.89776e-01 -5.68645e-01 5.07233e-01 + -4.23668e-01 -4.89795e-01 -5.68629e-01 5.07213e-01 + -4.23691e-01 -4.89815e-01 -5.68612e-01 5.07194e-01 + -4.23714e-01 -4.89834e-01 -5.68595e-01 5.07174e-01 + -4.23737e-01 -4.89853e-01 -5.68579e-01 5.07155e-01 + -4.23760e-01 -4.89872e-01 -5.68562e-01 5.07137e-01 + -4.23783e-01 -4.89893e-01 -5.68545e-01 5.07117e-01 + -4.23806e-01 -4.89913e-01 -5.68528e-01 5.07098e-01 + -4.23829e-01 -4.89933e-01 -5.68510e-01 5.07079e-01 + -4.23852e-01 -4.89953e-01 -5.68493e-01 5.07060e-01 + -4.23875e-01 -4.89972e-01 -5.68476e-01 5.07041e-01 + -4.23896e-01 -4.89990e-01 -5.68459e-01 5.07025e-01 + -4.23918e-01 -4.90010e-01 -5.68442e-01 5.07006e-01 + -4.23942e-01 -4.90029e-01 -5.68425e-01 5.06988e-01 + -4.23966e-01 -4.90047e-01 -5.68407e-01 5.06969e-01 + -4.23989e-01 -4.90066e-01 -5.68390e-01 5.06951e-01 + -4.24013e-01 -4.90085e-01 -5.68373e-01 5.06932e-01 + -4.24036e-01 -4.90104e-01 -5.68355e-01 5.06914e-01 + -4.24059e-01 -4.90123e-01 -5.68338e-01 5.06896e-01 + -4.24083e-01 -4.90142e-01 -5.68320e-01 5.06877e-01 + -4.24106e-01 -4.90161e-01 -5.68303e-01 5.06859e-01 + -4.24130e-01 -4.90180e-01 -5.68285e-01 5.06840e-01 + -4.24153e-01 -4.90199e-01 -5.68268e-01 5.06822e-01 + -4.24177e-01 -4.90218e-01 -5.68251e-01 5.06804e-01 + -4.24200e-01 -4.90237e-01 -5.68233e-01 5.06785e-01 + + +SCAN_DURATION 1.34543e+01 +INT_TIME 1.87699e-03 + +ALONG_SCAN_PIXEL_SIZE 8.28148e-03 +CROSS_SCAN_PIXEL_SIZE 7.00000e-03 + +CENTER_GP -1.74751e-01 -1.60303e+00 0.00000e+00 +SENSOR_POSITION -1.74373e-01 -1.59965e+00 2.55325e+05 +MOUNTING_ANGLES 0.00000e+00 0.00000e+00 0.00000e+00 + +TOTAL_LINES 7168 +TOTAL_SAMPLES 5000 + + + + +IKCODE -74021 +ISIS_Z_DIRECTION 1.00000e+00 +OPTICAL_DIST_COEF -7.34339e-03 2.83758e-05 1.28419e-08 +ITRANSS 0.00000e+00 0.00000e+00 1.42857e+02 +ITRANSL 0.00000e+00 1.42857e+02 0.00000e+00 +DETECTOR_SAMPLE_ORIGIN 2.54346e+03 +DETECTOR_LINE_ORIGIN 4.30442e-01 +DETECTOR_LINE_OFFSET 0.00000e+00 +DETECTOR_SAMPLE_SUMMING 1.00000e+00 +STARTING_SAMPLE 1.00000e+00 +STARTING_LINE 1.00000e+00 +STARTING_EPHEMERIS_TIME 2.18055e+08 +CENTER_EPHEMERIS_TIME 2.18055e+08 diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/Makefile b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..f6686c52d9e19002a9f4898657d1427b271c187e --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/Makefile @@ -0,0 +1,8 @@ +APPNAME = socetlinescankeywords + +include $(ISISROOT)/make/isismake.tsts + +commands: + $(APPNAME) from=$(INPUT)/P01_001602_1701_XI_09S091W.noblobs.cub \ + to=$(OUTPUT)/P01_001602_1701_XI_09S091W.txt >& \ + $(OUTPUT)/error.txt || true; diff --git a/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/truth/error.txt b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/truth/error.txt new file mode 100644 index 0000000000000000000000000000000000000000..d836889773aae5415328f468fd0a2747d55148a9 --- /dev/null +++ b/isis/src/socet/apps/socetlinescankeywords_noExtrapolation/tsts/noblobs/truth/error.txt @@ -0,0 +1 @@ +**USER ERROR** Input image does not contain needed SPICE blobs...run spiceinit with attach=yes.