diff --git a/isis/src/local/Makefile b/isis/src/local/Makefile deleted file mode 100644 index 6d2b3727025ae72c62fe568187d8340cba50a233..0000000000000000000000000000000000000000 --- a/isis/src/local/Makefile +++ /dev/null @@ -1,2 +0,0 @@ -include $(ISISROOT)/make/isismake.cat - diff --git a/isis/src/local/apps/Makefile b/isis/src/local/apps/Makefile deleted file mode 100644 index 381219893122eb5737084b3de80de2bd2d298df6..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/Makefile +++ /dev/null @@ -1 +0,0 @@ -include $(ISISROOT)/make/isismake.appstree diff --git a/isis/src/local/apps/apinit/Makefile b/isis/src/local/apps/apinit/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/apinit/apinit.cpp b/isis/src/local/apps/apinit/apinit.cpp deleted file mode 100644 index 2525d5de1a085988588b8acc99ce2ffe286ff853..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/apinit.cpp +++ /dev/null @@ -1,483 +0,0 @@ -#include "Isis.h" - -#include - -#include -#include - -#include -#include -#include - -#include "Brick.h" -#include "Cube.h" -#include "FileName.h" -#include "History.h" -#include "IString.h" -#include "Projection.h" -#include "Pvl.h" -#include "PvlGroup.h" -#include "PvlKeyword.h" -#include "PvlObject.h" -#include "SpecialPixel.h" -#include "SpicePosition.h" -#include "SpiceRotation.h" -#include "Table.h" -#include "TProjection.h" -#include "NaifStatus.h" - -using namespace Isis; -using namespace std; - -PvlKeyword getArrayValues(const QString ¶meter, const QString &keyword, int count); - - -void IsisMain() { - // Fire up the user interface - UserInterface &ui = Application::GetUserInterface(); - - // Get the name of the cube to initialize - Cube cube(ui.GetFileName("FROM"),"rw"); - - // Create archive group with the following information: - // Roll Number - // Frame Number - // Camera Identification - // Lens Identification - // Camera calibration date - PvlGroup archiveGroup("Archive"); - - PvlKeyword keyword; - keyword.setName("RollNumber"); - keyword.setValue(ui.GetString("RollNumber") ); - archiveGroup.addKeyword(keyword); - - keyword.setName("FrameNumber"); - keyword.setValue(ui.GetString("FrameNumber") ); - archiveGroup.addKeyword(keyword); - - keyword.setName("CameraSerialNumber"); - keyword.setValue(ui.GetString("CameraSN") ); - archiveGroup.addKeyword(keyword); - - keyword.setName("LenseSerialNumber"); - keyword.setValue(ui.GetString("LenseSN") ); - archiveGroup.addKeyword(keyword); - - keyword.setName("CalibrationReport"); - keyword.setValue(ui.GetString("CalReport") ); - archiveGroup.addKeyword(keyword); - - cube.putGroup(archiveGroup); - - // Create instrument group with the following information: - // Mission/spacecraft name - // Target name - // Date and time of observation - // Ephemeris time - // Center longitude/latitude - // Altitude above mean radius - // Focal length - // Fidicual measurements in image - // Fidicual locations in focal plane - // Optical distortion information - PvlGroup instrumentGroup("Instrument"); - - keyword.setName("SpacecraftName"); - keyword.setValue("Aircraft"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("InstrumentId"); - keyword.setValue("AerialPhoto"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("TargetName"); - keyword.setValue("Earth"); - instrumentGroup.addKeyword(keyword); - - QString startTime = ui.GetString("DateTime"); - // Validate the observation date format. See naif required reading for time format - // http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/cspice/str2et_c.html - ConstSpiceChar *spiceStartTime = startTime.toLatin1().data(); - SpiceDouble junk; - SpiceChar errmsg[500]; - tparse_c (spiceStartTime, 500, &junk, errmsg); - if (errmsg[0] != 0) { - QString msg = "Invalid date/time format [" + startTime + "]. See NAIF required reading " - "for acceptable formats at http://naif.jpl.nasa.gov/pub/naif/toolkit_docs/C/req/time.html"; - msg += ". Naif error message is [" + QString((char*) errmsg) + "]"; - - throw IException(IException::User, msg, _FILEINFO_); - } - keyword.setName("StartTime"); - keyword.setValue(startTime); - instrumentGroup.addKeyword(keyword); - - FileName lsk("$base/kernels/lsk/naif0010.tls"); - - NaifStatus::CheckErrors(); - furnsh_c(lsk.expanded().toLatin1().constData()); - - double et; - spiceStartTime = startTime.toLatin1().data(); - str2et_c(spiceStartTime, &et); - - keyword.setName("EphemerisTime"); - keyword.setValue(toString(et),"seconds"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("EstimatedAltitude"); - keyword.setValue(toString(ui.GetDouble("Altitude")), "meters"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("EstimatedCenterLatitude"); - keyword.setValue(toString(ui.GetDouble("CenterLat")), "degrees"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("EstimatedCenterLongitude"); - keyword.setValue(toString(ui.GetDouble("CenterLon")), "degrees"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("FocalLength"); - keyword.setValue(toString(ui.GetDouble("FocalLength")), "millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("FiducialX", "FiducialX", 8); - keyword.setUnits("millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("FiducialY", "FiducialY", 8); - keyword.setUnits("millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("FiducialSample", "FiducialSample", 8); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("FiducialLine", "FiducialLine", 8); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("RadialDistortionCoefficients", "KCoefs", 5); - instrumentGroup.addKeyword(keyword); - - keyword = getArrayValues("DecenteringDistortionCoefficients", "PCoefs", 4); - instrumentGroup.addKeyword(keyword); - - keyword.setName("XCalibratedPrincipalPoint"); - keyword.setValue(toString(ui.GetDouble("XP")), "millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("YCalibratedPrincipalPoint"); - keyword.setValue(toString(ui.GetDouble("YP")), "millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("XIndicatedPrincipalPoint"); - keyword.setValue(toString(ui.GetDouble("XIPP")), "millimeters"); - instrumentGroup.addKeyword(keyword); - - keyword.setName("YIndicatedPrincipalPoint"); - keyword.setValue(toString(ui.GetDouble("YIPP")), "millimeters"); - instrumentGroup.addKeyword(keyword); - - cube.putGroup(instrumentGroup); - - // Create kernels group - PvlGroup kernelsGroup("Kernels"); - - keyword.setName("NaifFrameCode"); - keyword.setValue("-2000001"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("LeapSecond"); - keyword.setValue("$base/kernels/lsk/naif0010.tls"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("TargetAttitudeShape"); - keyword.setValue("$base/kernels/pck/pck00009.tpc"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("TargetPosition"); - keyword.setValue("Table"); - keyword.addValue("$base/kernels/spk/de405.bsp"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("InstrumentPointing"); - keyword.setValue("Table"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("Instrument"); - keyword.clear(); - kernelsGroup.addKeyword(keyword); - - keyword.setName("SpacecraftClock"); - keyword.clear(); - kernelsGroup.addKeyword(keyword); - - keyword.setName("InstrumentPosition"); - keyword.setValue("Table"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("InstrumentAddendum"); - keyword.clear(); - kernelsGroup.addKeyword(keyword); - - keyword.setName("ShapeModel"); - keyword.setValue(ui.GetAsString("ShapeModel")); - kernelsGroup.addKeyword(keyword); - - keyword.setName("InstrumentPositionQuality"); - keyword.setValue("Predict"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("InstrumentPointingQuality"); - keyword.setValue("Predict"); - kernelsGroup.addKeyword(keyword); - - keyword.setName("CameraVersion"); - keyword.setValue("1"); - kernelsGroup.addKeyword(keyword); - - cube.putGroup(kernelsGroup); - -// Write out the naif keywords group. This must be done because the camera model -// needs to know the earth's frame number and radii. This is typically done by the spiceinit program -// but there are no SPICE kernels for aerial photos other than those that define the -// rotation matrix from j2000 to body-fixed for the earth. Our group should look something -// like this in the labels -// -// Object = NaifKeywords -// BODY_FRAME_CODE = 10013 -// BODY399_RADII = (6378.14, 6378.14, 6356.75) -// End_Object - - PvlObject naifKeywords; - naifKeywords.setName("NaifKeywords"); - - keyword.setName("BODY_FRAME_CODE"); - keyword.setValue("10013"); - naifKeywords.addKeyword(keyword); - - keyword.setName("BODY399_RADII"); - keyword.setValue("6378.14"); - keyword.addValue("6378.14"); - keyword.addValue("6356.75"); - keyword.setUnits("kilometers"); - naifKeywords.addKeyword(keyword); - - cube.label()->addObject(naifKeywords); - - // Create table with rotation matrices from bodyfixed to J2000 and write to the labels. - // Need to load the appropriatespk and pck kernels for this to work. - FileName pck("$base/kernels/pck/pck00009.tpc"); - furnsh_c(pck.expanded().toLatin1().constData()); - FileName tspk("$base/kernels/spk/de405.bsp"); - furnsh_c(tspk.expanded().toLatin1().constData()); - - SpiceRotation bodyRotation(10013); - bodyRotation.LoadCache(et-1.0, et+1.0, 2); // Get a small window about the observation time - - Table bodyTable = bodyRotation.Cache("BodyRotation"); - bodyTable.Label() += PvlKeyword("Description", "Created by apinit"); - bodyTable.Label() += PvlKeyword("Kernels"); - bodyTable.Label()["Kernels"].addValue("$base/kernels/spk/de405.bsp"); - bodyTable.Label()["Kernels"].addValue("$base/kernels/pck/pck00009.tpc"); - bodyTable.Label() += PvlKeyword("SolarLongitude","-9999"); // TODO: Need to compute the solar longitude - - cube.write(bodyTable); - - - // Create table with position of sun relative to earth. - SpicePosition sunPosition(10, 399); - sunPosition.LoadCache(et-1.0, et+1.0, 2); // Get a small window about the observation time - - Table sunTable = sunPosition.Cache("SunPosition"); - sunTable.Label() += PvlKeyword("Description", "Created by apinit"); - sunTable.Label() += PvlKeyword("Kernels"); - bodyTable.Label()["Kernels"].addValue("$base/kernels/spk/de405.bsp"); - - cube.write(sunTable); - - // Create a table with apriori position of aircraft relative to earth in J2000. - // This will take several steps. First we need the radius for the aerial photo. - // The user supplied a lat/lon and DTM. We will use the lat/lon to get a radius from - // the DTM. Those three values will be converted from polar coordinates (lat,lon,rad) to - // P(x,y,z). Then we will get a unit vector of P and multiply it by the - // altitude to get Pa = (xhat*alt, yhat*alt, zhat*alt). Then we will add P and Pa to - // estimate the aircraft position in body fixed. Finally we will rotation Pa into J2000 - // using the bodyRotation object (SpiceRotation class). The velocity is unknown so we will not - // write it out to our table. We could improve the estimate of the spacecraft position by - // computing the surface normal at P off of an ellipsoid. We won't go to this level of accuracy - // because using jigsaw will be a requirement to improvement the pointing of the camera and the - // aircraft position should also be refined at that time. - - Cube dtm; - dtm.open(ui.GetAsString("ShapeModel")); - TProjection *mapproj = (TProjection *) dtm.projection(); - mapproj->SetGround(ui.GetDouble("CenterLat"), ui.GetDouble("CenterLon")); - int line = mapproj->WorldY() + 0.5; - int samp = mapproj->WorldX() + 0.5; - Brick buf(1,1,1,dtm.pixelType()); - buf.SetBasePosition(samp, line, 1); - dtm.read(buf); - - if (IsSpecial(buf[0]) || buf[0] < 6300000) { - QString msg = "DTM [" + ui.GetAsString("ShapeModel") + "] does not contain valid radius " - " at user specified latitude/longitude. Read [" + toString(buf[0]) + "] at " - "sample/line [" + toString(samp) + "," + toString(line) + "]"; - throw IException(IException::Unknown, msg, _FILEINFO_); - } - - SpiceDouble radius = buf[0] / 1000.0; - SpiceDouble ulat = mapproj->UniversalLatitude() * Isis::PI / 180.0; - SpiceDouble ulon = mapproj->UniversalLongitude() * Isis::PI / 180.0; - - SpiceDouble xyz[3]; - latrec_c(radius, ulon, ulat, xyz); - - SpiceDouble xyzhat[3]; - vhat_c(xyz, xyzhat); - - std::vector apposB; // Position of aircraft in body fixed - apposB.push_back(xyz[0] + xyzhat[0] * ui.GetDouble("Altitude") / 1000.0); - apposB.push_back(xyz[1] + xyzhat[1] * ui.GetDouble("Altitude") / 1000.0); - apposB.push_back(xyz[2] + xyzhat[2] * ui.GetDouble("Altitude") / 1000.0); - - bodyRotation.SetEphemerisTime(et); - std::vector apposJ = bodyRotation.J2000Vector(apposB); - - TableRecord spkRecord; - TableField x("J2000X", TableField::Double); - TableField y("J2000Y", TableField::Double); - TableField z("J2000Z", TableField::Double); - TableField t("ET", TableField::Double); - spkRecord += x; - spkRecord += y; - spkRecord += z; - spkRecord += t; - - Table spkTable("InstrumentPosition", spkRecord); - spkRecord[0] = apposJ[0]; - spkRecord[1] = apposJ[1]; - spkRecord[2] = apposJ[2]; - spkRecord[3] = et - 1.0; - spkTable += spkRecord; - - spkRecord[3] = et + 1.0; - spkTable += spkRecord; - - spkTable.Label() += PvlKeyword("Description", "Created by apinit"); - spkTable.Label() += PvlKeyword("Kernels"); - - cube.write(spkTable); - dtm.close(); - - // Now we must write out the camera to J2000 rotation matrices. Unfortunately - // nothing exists that defines this information. However, we can create the camera - // pointing using photogramettric techniques by finding tie points between an aerial - // photo and a basemap that covers the same area of the photo. - // A basemap example is a DOQQ image that is map projected. We won't do that work - // here since we already have programs that can help determine the tie points and pointing - // (findfeatures and jigsaw). Instead we will just write out the identity rotation - // such that we assume the aircraft is pointing straight down (roll and pitch of 0) which is - // probably correct. What we really lack is the yaw/twist to know if the aircraft is - // flying north-south, south-north, or along some other track. We will just assume - // the aircraft has no twist too. It will be wrong but findfeatures and jigsaw will - // figure it out. (CJ is the J2000 to camera rotation matrix. We'll set it to the - // identity and then convert to a quaternion so we can write out our table file. - - SpiceDouble CJ[9] = { 1.0, 0.0, 0.0, - 0.0, 1.0, 0.0, - 0.0, 0.0, 1.0 }; - SpiceDouble minusApposJ[3]; - //minusApposJ[0] = -apposJ[0]; - //minusApposJ[0] = -apposJ[0]; - //minusApposJ[1] = -apposJ[1]; - minusApposJ[0] = apposJ[0]; - minusApposJ[1] = apposJ[1]; - minusApposJ[2] = apposJ[2]; - - SpiceDouble perpVec[3]; - SpiceDouble axis[3] = {0.0, 1.0, 0.0}; - vrotv_c(minusApposJ, axis, 90.0, perpVec); - - twovec_c (minusApposJ, 3, perpVec, 2, (SpiceDouble( *)[3]) &CJ[0]); - - SpiceDouble quat[4]; - m2q_c(CJ, quat); - NaifStatus::CheckErrors(); - - TableField q0("J2000Q0", TableField::Double); - TableField q1("J2000Q1", TableField::Double); - TableField q2("J2000Q2", TableField::Double); - TableField q3("J2000Q3", TableField::Double); - TableField qt("ET", TableField::Double); - - TableRecord ckRecord; - ckRecord += q0; - ckRecord += q1; - ckRecord += q2; - ckRecord += q3; - ckRecord += qt; - - Table ckTable("InstrumentPointing", ckRecord); - - ckRecord[0] = quat[0]; - ckRecord[1] = quat[1]; - ckRecord[2] = quat[2]; - ckRecord[3] = quat[3]; - ckRecord[4] = et - 1.0; - ckTable += ckRecord; - - ckTable.Label() += PvlKeyword("Description", "Created by apinit"); - ckTable.Label() += PvlKeyword("Kernels"); - - cube.write(ckTable); - - - // Write out the history to the cube so we have a record of what the user ran - History hist = History("IsisCube"); - try { - cube.read(hist); - } - catch(IException &e) { - // No history exist but don't throw an error. just add a history object - } - hist.AddEntry(); - cube.write(hist); - - // clean up - cube.close(); -} - - - -PvlKeyword getArrayValues(const QString ¶meter, const QString &uiKeyword, int count) { - - UserInterface &ui = Application::GetUserInterface(); - QString value = ui.GetString(uiKeyword); - - PvlKeyword keyword; - keyword.setName(parameter); - - QStringList tokens = value.split(","); - if (tokens.size() != count) { - QString msg = "Invalid value for [" + uiKeyword.toUpper() + "]. Expecting exactly " + - QString::number(count) + " comma " - "separated values and found only [" + QString::number(tokens.size()) + "]"; - throw IException(IException::User, msg, _FILEINFO_); - } - - for (int i=0; i - - - Initialize aerial photo with interior and exterior orientation information. - - - - This program is used to initialize the interior and exterior orientation of film-based aerial photographs. Interior orientation information such as the focal length, optical distortion, and fiducial - locations are input by the user and recorded on the label of the cube in the Instrument group. This information is typical found in a USGS Report of Calibration that is specific for the camera - flown during the particular aerial survey. Apriori exterior orientation information such as the position of the aircraft and it's attitude are - computed from user input such as altitude and latitude/longitude at the center of the image. The computed exterior orientation is stored as binary tables in the cube. - - This program mimics the capabilities of the "spiceinit" program which is used for initalized interior/exterior orientation information for NASA space instruments observing other than Earth - targets. Once the interior/exterior information is added to a cube, other ISIS cartography programs can be used such as cam2map (orthorectification), caminfo (image georeferencing information), - qmos (mosaicking tools), and jigsaw (bundle adjustments to the aircraft position/attitude for creating seamless mosaics). - - The results of this program should not be immediately used until the exterior orientation has been corrected. That is, do not run cam2map and expect proper - georeferencing/orthorectification. There will be an error in attitude because there is not enough user information to determine the twist/yaw of the aircraft. Instead run - "findfeatures" to automatically generate a ground control network and then jigsaw to solve for the actual aircraft position and attitude. - - - Aerial Photos - - - - - Original Version - - - Added NaifStatus::CheckErrors() to see if any NAIF errors were signaled. References #2248. - - - Made sure that the minusApposJ array has all its values initialized. Caused CentOS7 app test to fail. References #4809. - - - - - - - cube - input - - The filename of the input cube to have the interior/exterior orientation added - - - The input file which will have new group labels that indicate information about the aerial photograph. The information provided by the user should be sufficient enough to - create a functioning camera model so that the interior/exterior orientation information can be solved for in jigsaw.. - - *.cub - - - - - - string - Date and time of the obseration - - Date and time in format ?????. Important to get this information correct if plan to compute phase incidence and emission angles. - - - - - double - Estimated altitude - - Estimated mean altitude above terrian in meters??????? - - 0 - - - - double - Estimated latitude at center of image - - ??? - - -90 - 90 - - - - double - Estimated longitude at center of image - - ??? - - -360 - 360 - - - - cube - Shape model of earth - - ??? - - - - - - - double - Camera focal length - - Focal length of the camera in millimeters. This is often referred to as the calibrated focal length in the camera calibration report. - - 0 - - - - string - X position of the eight fiducials in the focal plane - - ??? - - - - - string - Y position of the eight fiducials in the focal plane - - ??? - - - - - string - Sample positions of the eight fiducials in the image - - ??? - - - - - string - Line positions of the eight fiducials in the image - - ??? - - - - - cube - Template cube containing average example of the eight fiducials - - ??? - - None - - - - string - Five radial optical distortion coefficients (k0-k4) - - ??? - - - - - string - Four decentering distortion coefficients (p1-p4) - - ??? - - - - - double - X coordinate for calibrated principal point - - ??? - - - - - double - Y coordinate for calibrated principal point - - ??? - - - - - double - X coordinate for indicated principal point - - ??? - - - - - double - Y coordinate for indicated principal point - - ??? - - - - - - - - - string - Unknown - Roll number containing the image - - The film roll number that contained this image. This can typically be found on the image. - - - - - string - Unknown - Frame number of the image - - The frame number on the roll. This can typically be found on the image. - - - - - string - Unknown - Camera serial number - - The serial number of the camera. Often found in the calibration report. - - - - - string - Unknown - Lense serial number - - The serial number of the lense. Often found in the calibration report. - - - - - string - Unknown - Calibration report - - The USGS Report No. that contains the information used to define the interior orientation including focal length, optical distortion coefficients, and fiducial mark locations. - - - - - - diff --git a/isis/src/local/apps/apinit/assets/NAPP6666.pdf b/isis/src/local/apps/apinit/assets/NAPP6666.pdf deleted file mode 100644 index 50f408797117387f65e161386729ea42a3a218ec..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/apinit/assets/NAPP6666.pdf and /dev/null differ diff --git a/isis/src/local/apps/apinit/assets/apinit.csh b/isis/src/local/apps/apinit/assets/apinit.csh deleted file mode 100755 index 65f4988f3b130dd77b686d3490ea5e3f0fa3bbae..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/assets/apinit.csh +++ /dev/null @@ -1,2 +0,0 @@ -std2isis from=N10NAPPW06666039.tif to=ap.cub -./apinit FROM=ap.cub DATETIME="1999-06-12T12:05" ALTITUDE=6096 CENTERLAT=39.9363 CENTERLON=255.285823 SHAPEMODEL=dtm.cub FOCALLENGTH=152.818 FIDUCIALX="-106.0, -0.003, 105.999, -110.005, 109.999, -106.008, -0.003, 105.998" FIDUCIALY="106.000, 109.999, 105.994, 0.002, 0.002, -105.999, -110.004, -105.999" FIDUCIALSAMPLE="574, 2040, 3500, 513, 3562, 578, 2039, 3497" FIDUCIALLINE="255, 194, 261, 1721, 1721, 3182, 3245, 3180" KCOEFS="1.27485E-05, 3.73255E-09, -6.95721E-13, 2.3884E-17, 0.0" PCOEFS="0, 0, 0, 0" XP=-0.004 YP=0 XIPP=-0.002 YIPP=0.001 diff --git a/isis/src/local/apps/apinit/assets/fidicualLocations.txt b/isis/src/local/apps/apinit/assets/fidicualLocations.txt deleted file mode 100644 index 45a4fa204402ce898939cd52be7009bdffb9d1d1..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/assets/fidicualLocations.txt +++ /dev/null @@ -1,9 +0,0 @@ -"Sample","Line","Pixel","FileName","Notes" -574.129,254.98,48,ap.cub,upper left -2040.01,194.034,39,ap.cub,upper middle -3500.48,260.738,57,ap.cub,upper right -512.694,1720.96,44,ap.cub,Middle left -3562.02,1721.35,55,ap.cub,Middle right -578.203,3182.05,42,ap.cub,Lower left -2039.45,3244.69,36,ap.cub,Lower middle -3496.69,3179.83,42,ap.cub,Lower right diff --git a/isis/src/local/apps/apinit/assets/handMade.net b/isis/src/local/apps/apinit/assets/handMade.net deleted file mode 100644 index e075deca2170573208e5794e3781b5f19642f016..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/assets/handMade.net +++ /dev/null @@ -1,115 +0,0 @@ -Object = ControlNetwork - NetworkId = ApTest - NetworkType = ImageToGround - TargetName = Earth - UserName = janderson - Created = 2014-03-27T08:20:55 - LastModified = Null - Description = "Test using hand made control points" - - Object = ControlPoint - PointType = Ground - PointId = jigTest01 - Latitude = 39.896561 - Longitude = 255.313117 - Radius = 6378140 - - Group = ControlMeasure - SerialNumber = Aircraft/AerialPhoto/-17538835.815374 - MeasureType = Estimated - Sample = 3465 - Line = 868 - ErrorLine = 0.0 - ErrorSample = 0.0 - ErrorMagnitude = 0.0 - DateTime = 2008-01-03T15:20:26 - ChooserName = "Handmade" - Reference = True - End_Group - End_Object - - Object = ControlPoint - PointType = Ground - PointId = jigTest02 - Latitude = 39.958793 - Longitude = 255.244731 - Radius = 6378140 - - Group = ControlMeasure - SerialNumber = Aircraft/AerialPhoto/-17538835.815374 - MeasureType = Estimated - Sample = 1270 - Line = 2695 - ErrorLine = 0.0 - ErrorSample = 0.0 - ErrorMagnitude = 0.0 - DateTime = 2008-01-03T15:20:26 - ChooserName = "Handmade" - Reference = True - End_Group - End_Object - - Object = ControlPoint - PointType = Ground - PointId = jigTest03 - Latitude = 39.972394 - Longitude = 255.302624 - Radius = 6378140 - - Group = ControlMeasure - SerialNumber = Aircraft/AerialPhoto/-17538835.815374 - MeasureType = Estimated - Sample = 808 - Line = 1144 - ErrorLine = 0.0 - ErrorSample = 0.0 - ErrorMagnitude = 0.0 - DateTime = 2008-01-03T15:20:26 - ChooserName = "Handmade" - Reference = True - End_Group - End_Object - - Object = ControlPoint - PointType = Ground - PointId = jigTest04 - Latitude = 39.967181 - Longitude = -104.700273 - Radius = 6378140 - - Group = ControlMeasure - SerialNumber = Aircraft/AerialPhoto/-17538835.815374 - MeasureType = Estimated - Sample = 991 - Line = 1212 - ErrorLine = 0.0 - ErrorSample = 0.0 - ErrorMagnitude = 0.0 - DateTime = 2008-01-03T15:20:26 - ChooserName = "Handmade" - Reference = True - End_Group - End_Object - - Object = ControlPoint - PointType = Ground - PointId = jigTest05 - Latitude = 39.907384 - Longitude = -104.761052 - Radius = 6378140 - - Group = ControlMeasure - SerialNumber = Aircraft/AerialPhoto/-17538835.815374 - MeasureType = Estimated - Sample = 3068 - Line = 2873 - ErrorLine = 0.0 - ErrorSample = 0.0 - ErrorMagnitude = 0.0 - DateTime = 2008-01-03T15:20:26 - ChooserName = "Handmade" - Reference = True - End_Group - End_Object -End_Object -End diff --git a/isis/src/local/apps/apinit/tsts/Makefile b/isis/src/local/apps/apinit/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/apinit/tsts/default/Makefile b/isis/src/local/apps/apinit/tsts/default/Makefile deleted file mode 100644 index 1825fef55d029eda5cd619d7fa0ee9ddd7ee3616..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/apinit/tsts/default/Makefile +++ /dev/null @@ -1,29 +0,0 @@ -APPNAME = apinit - -include $(ISISROOT)/make/isismake.tsts - -commands: - std2isis from=$(INPUT)/N10NAPPW06666039.tif \ - to=$(OUTPUT)/N10NAPPW06666039.cub \ - > /dev/null; - $(APPNAME) from=$(OUTPUT)/N10NAPPW06666039.cub \ - DATETIME="1999-06-12T12:05" \ - ALTITUDE=6096 \ - CENTERLAT=39.9363 \ - CENTERLON=255.285823 \ - SHAPEMODEL=$(INPUT)/dtm.cub \ - FOCALLENGTH=152.818 \ - FIDUCIALX="-106.0, -0.003, 105.999, -110.005, 109.999, -106.008, -0.003, 105.998" \ - FIDUCIALY="106.000, 109.999, 105.994, 0.002, 0.002, -105.999, -110.004, -105.999" \ - FIDUCIALSAMPLE="574, 2040, 3500, 513, 3562, 578, 2039, 3497" \ - FIDUCIALLINE="255, 194, 261, 1721, 1721, 3182, 3245, 3180" \ - KCOEFS="1.27485E-05, 3.73255E-09, -6.95721E-13, 2.3884E-17, 0.0" \ - PCOEFS="0, 0, 0, 0" \ - XP=-0.004 \ - YP=0 \ - XIPP=-0.002 \ - YIPP=0.001 \ - > /dev/null; - catlab from=$(OUTPUT)/N10NAPPW06666039.cub \ - to=$(OUTPUT)/N10NAPPW06666039.pvl \ - > /dev/null; diff --git a/isis/src/local/apps/basemapmos/Makefile b/isis/src/local/apps/basemapmos/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/basemapmos/assets/cubes.lis b/isis/src/local/apps/basemapmos/assets/cubes.lis deleted file mode 100644 index 29a2c43943159ba6b611382680bc23c3b9d8413b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/assets/cubes.lis +++ /dev/null @@ -1,3 +0,0 @@ -cube1.cub -cube2.cub -cube3.cub diff --git a/isis/src/local/apps/basemapmos/assets/images/basemapresult.jpg b/isis/src/local/apps/basemapmos/assets/images/basemapresult.jpg deleted file mode 100644 index 60852b5a7be3a2f0d0833feb4fc3fe80875bb9c6..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/basemapmos/assets/images/basemapresult.jpg and /dev/null differ diff --git a/isis/src/local/apps/basemapmos/assets/images/cube1.jpg b/isis/src/local/apps/basemapmos/assets/images/cube1.jpg deleted file mode 100644 index e58ee74562b3091503529e9c6eaea99d4f8c492a..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/basemapmos/assets/images/cube1.jpg and /dev/null differ diff --git a/isis/src/local/apps/basemapmos/assets/images/cube2.jpg b/isis/src/local/apps/basemapmos/assets/images/cube2.jpg deleted file mode 100644 index be87b7148e3c858df9e5276e15c8f66eac84338e..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/basemapmos/assets/images/cube2.jpg and /dev/null differ diff --git a/isis/src/local/apps/basemapmos/assets/images/cube3.jpg b/isis/src/local/apps/basemapmos/assets/images/cube3.jpg deleted file mode 100644 index 37e71a4195bc2e76b4faf7a6892a4e6f58ca5782..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/basemapmos/assets/images/cube3.jpg and /dev/null differ diff --git a/isis/src/local/apps/basemapmos/assets/thumbs/basemapresultthumb.jpg b/isis/src/local/apps/basemapmos/assets/thumbs/basemapresultthumb.jpg deleted file mode 100644 index 8ecd741953cdead23e7b6a6343f9688531e54b9b..0000000000000000000000000000000000000000 Binary files a/isis/src/local/apps/basemapmos/assets/thumbs/basemapresultthumb.jpg and /dev/null differ diff --git a/isis/src/local/apps/basemapmos/basemapmos.cpp b/isis/src/local/apps/basemapmos/basemapmos.cpp deleted file mode 100644 index 91c2cc68023ff94bc7d0dc89e18c91314906837f..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/basemapmos.cpp +++ /dev/null @@ -1,158 +0,0 @@ -#include "Isis.h" - -#include -#include - -#include - -#include "Application.h" -#include "Cube.h" -#include "FileList.h" -#include "ProgramLauncher.h" - -using namespace std; -using namespace Isis; - -void IsisMain() { - - //Get user parameters - UserInterface &ui = Application::GetUserInterface(); - FileList cubes; - cubes.read(ui.GetFileName("FROMLIST")); - QString PRIORITY = ui.GetString("PRIORITY"); - QString HNS1 = ui.GetAsString("HNS1"); - QString HNL1 = ui.GetAsString("HNL1"); - QString HNS2 = ui.GetAsString("HNS2"); - QString HNL2 = ui.GetAsString("HNL2"); - QString LNS = ui.GetAsString("LNS"); - QString LNL = ui.GetAsString("LNL"); - QString GRANGE = ui.GetString("GRANGE"); - QString MINLAT, MAXLAT, MINLON, MAXLON; - if(GRANGE == "USER") { - MINLAT = ui.GetAsString("MINLAT"); - MAXLAT = ui.GetAsString("MAXLAT"); - MINLON = ui.GetAsString("MINLON"); - MAXLON = ui.GetAsString("MAXLON"); - } - QString MATCHBANDBIN = ui.GetAsString("MATCHBANDBIN"); - - // Sets up the pathName to be used for most application calls - QString pathName = FileName("$TEMPORARY/").path() + "/"; - QString cubeListBaseName = pathName + FileName(ui.GetFileName("FROMLIST")).baseName(); - - //Creates the first highpass cubes - std::ofstream firstHighPassList; - QString firstHighPass(cubeListBaseName + "_FirstHighPassList.lis"); - firstHighPassList.open(firstHighPass.toLatin1().data()); - for (int i = 0; i < cubes.size(); i++) { - FileName inFile = cubes[i]; - QString outParam = pathName + inFile.baseName() + "_hpffirst.cub"; - QString parameters = "FROM=" + inFile.expanded() - + " TO=" + outParam - + " SAMPLES= " + HNS1 - + " LINES= " + HNL1; - ProgramLauncher::RunIsisProgram("highpass", parameters); - //Reads the just created highpass cube into a list file for automos - firstHighPassList << outParam << endl; - } - firstHighPassList.close(); - - //Creates the second highpass cubes - std::ofstream secondHighPassList; - QString secondHighPass(cubeListBaseName + "_SecondHighPassList.lis"); - secondHighPassList.open(secondHighPass.toLatin1().data()); - for(int i = 0; i < cubes.size(); i++) { - FileName inFile = cubes[i]; - QString outParam = pathName + inFile.baseName() + "_hpfsecond.cub"; - QString parameters = "FROM=" + inFile.expanded() - + " TO=" + outParam - + " SAMPLES= " + HNS2 - + " LINES= " + HNL2; - ProgramLauncher::RunIsisProgram("highpass", parameters); - //Reads the just created highpass cube into a list file for automos - secondHighPassList << outParam << endl; - } - secondHighPassList.close(); - - //Makes a mosaic out of the first highpass cube filelist - QString parameters = "FROM= " + cubeListBaseName + "_FirstHighPassList.lis MOSAIC=" - + cubeListBaseName + "_newmosFirst.cub" - + " MATCHBANDBIN=" + MATCHBANDBIN - + " GRANGE= " + GRANGE; - if(PRIORITY == "BENEATH") { - parameters += " PRIORITY=beneath"; - } - if(GRANGE == "USER") { - parameters += " MINLAT= " + MINLAT - + " MINLON= " + MINLON - + " MAXLAT= " + MAXLAT - + " MAXLON= " + MAXLON; - } - ProgramLauncher::RunIsisProgram("automos", parameters); - - //Makes a mosaic out of the second highpass cube filelist - parameters = "FROM= " + cubeListBaseName + "_SecondHighPassList.lis MOSAIC=" - + cubeListBaseName + "_newmosSecond.cub" - + " MATCHBANDBIN=" + MATCHBANDBIN - + " GRANGE= " + GRANGE; - if(PRIORITY == "BENEATH") { - parameters += " PRIORITY=beneath"; - } - if(GRANGE == "USER") { - parameters += " MINLAT= " + MINLAT - + " MINLON= " + MINLON - + " MAXLAT= " + MAXLAT - + " MAXLON= " + MAXLON; - } - ProgramLauncher::RunIsisProgram("automos", parameters); - - //Does a lowpass on the Second highpass - parameters = "FROM=" + cubeListBaseName + "_newmosSecond.cub" - + " TO=" + cubeListBaseName + "_lpfmos.cub" - + " SAMPLES=" + LNS - + " LINES=" + LNL - + " FILTER=inside"; - ProgramLauncher::RunIsisProgram("lowpass", parameters); - - //Finally combines the first highpass and lowpass mosaics - parameters = "FROM=" + cubeListBaseName + "_newmosFirst.cub" + - " FROM2=" + cubeListBaseName + "_lpfmos.cub" + - " TO= " + cubeListBaseName + "_untrimmedmoc.cub" + - " OPERATOR= add"; - ProgramLauncher::RunIsisProgram("algebra", parameters); - - //Concludes with a maptrim of the final product - parameters = "FROM=" + cubeListBaseName + "_untrimmedmoc.cub" + - " TO=" + ui.GetAsString("TO"); - if(GRANGE == "USER") { - parameters += " MINLAT= " + MINLAT - + " MINLON= " + MINLON - + " MAXLAT= " + MAXLAT - + " MAXLON= " + MAXLON; - } - ProgramLauncher::RunIsisProgram("maptrim", parameters); - - - //Will remove all of the temp files by default - if(ui.GetBoolean("REMOVETEMP")) { - QString newmosFirst(cubeListBaseName + "_newmosFirst.cub"); - QString newmosSecond(cubeListBaseName + "_newmosSecond.cub"); - QString lpfmos(cubeListBaseName + "_lpfmos.cub"); - QString untrimmedmoc(cubeListBaseName + "_untrimmedmoc.cub"); - QFile::remove(firstHighPass); - QFile::remove(secondHighPass); - QFile::remove(newmosFirst); - QFile::remove(newmosSecond); - QFile::remove(lpfmos); - QFile::remove(untrimmedmoc); - for(int i = 0; i < cubes.size(); i++) { - FileName inFile = cubes[i]; - QString hpffirst(pathName + inFile.baseName() + "_hpffirst.cub"); - QString hpfsecond(pathName + inFile.baseName() + "_hpfsecond.cub"); - QFile::remove(hpffirst); - QFile::remove(hpfsecond); - } - } - - -} diff --git a/isis/src/local/apps/basemapmos/basemapmos.xml b/isis/src/local/apps/basemapmos/basemapmos.xml deleted file mode 100644 index b55b3ea45976c36a6100d119a25911e6ce953b83..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/basemapmos.xml +++ /dev/null @@ -1,368 +0,0 @@ - - - - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="http://isis.astrogeology.usgs.gov/Schemas/Application/application.xsd"> - - Creates a flattened mosaic using a list of map projected cubes - - - This program uses a text-based list of cubes, all in the same map projection - and equivalent projection parameters (PixelResolution, CenterLongitude, - LatitudeSystem, etc), to generate a flattened mosaic. The size of the - mosaic will be determined automatically unless specified by the user. In - addition, this final mosaic will be trimmed as a final step. This trim will - be determined automatically unless specified by the user. - - - - Mosaicking - - - - - Original version - - - Added a maptrim execution to the final product. - - - Added the Priority parameter. - - - Fixed handling of temporary files - - - - - - - - filename - input - - List of cubes to mosaic - - - A list of map projected cubes to mosaic and flatten. The Mapping - groups must match in order to mosaic the cubes. Also, this list - should be in the same directory as the input cubes listed by the list. - - - *.txt *.lis *.lst - - - - cube - output - - Mosaic output cube - - - The trimmed flattened mosaic cube which is created from the cubes - listed by the input list. - - - *.cub - - - - - string - - ONTOP - - The priority of pixel placement - - This parameter is used to select one of two ways to mosaic the - pixels in areas of overlap. - - - - - - - - - - - - integer - 101 - - Number of samples in the first high frequency data boxcar - - This is the total number of samples in the first high frequency data - boxcar. It must be odd and can not exceed twice the number of samples - in the input cubes. In general, the size of the boxcar should be specified and does not cause - the program to operate significantly slower. - - - 1 - - - integer - 101 - - Number of lines in the first high frequency data boxcar - - This is the total number of lines in the second high - frequency data boxcar. It must be odd and can not exceed twice the - number of lines in the input cubes. In general, the size of the - boxcar should be specified and does not cause the program to operate - significantly slower. - - - 1should be specified and - - - integer - 501 - Number of samples in the second high frequency data boxcar - - This is the total number of samples in the second high - frequency data boxcar. It must be odd and can not exceed twice the - number of samples in the input cubes. In general, the size of the - boxcar should be specified and does not cause the program to operate significantly slower. - - - 1 - - - integer - 501 - - Number of lines in the second high frequency data boxcar - - This is the total number of lines in the second high - frequency data boxcar. It must be odd and can not exceed twice the - number of lines in the input cubes. In general, the size of the - boxcar should be specified and does not cause the program to operate significantly slower. - - - 1 - - - integer - 101 - - Number of samples in low frequency data boxcar - - - This is the total number of samples in the low frequency data boxcar. - It must be odd and can not exceed twice the number of samples in the - output mosaic. In general, the size of the boxcar should be specified - and does not cause the program to operate significantly slower. - - - 1 - - - integer - 101 - - Number of lines in low frequency data boxcar - - - This is the total number of lines in the low frequency data boxcar. It - must be odd and can not exceed twice the number of lines in the output - mosaic. In general, the size of the boxcar should be specified and - does not cause the program to operate significantly slower. - - - 1 - - - - - - string - AUTO - Ground Range Options - - The ground range can either be calculated automatically or entered by the user. - If the USER option is selected, values must be entered for the MINLAT, MAXLAT, - MINLON, and MAXLON parameters. AUTO is the default for this parameter. - - - - - - - - double - Minimum Latitude - - The minimum latitude value to use in the mosaic. - - - - double - Maximum Latitude - - The maximum latitude value to use in the mosaic. - - - - double - Minimum Longitude - - The minimum longitude value to use in the mosaic. - - - - double - Maximum Longitude - - The maximum longitude value to use in the mosaic. - - - - - - - boolean - TRUE - Enforce BandBin Group Match - - This option causes the application to fail if the input bandbin group does not - match the mosaic bandbin group.

NOTE: In the case of failure, - intermediate data may not be removed. - - - - - - - boolean - - TRUE - - - Destroy intermediate data - - - Multiple cube images as well as lists are created durring the - production of the final flattened mosaic. If this parameter is - changed to false, those temporary cubes and lists will not be removed. - REMOVETEMP should only be set to false when your current directory - contains the input list as well as all of the input cubes. Otherwise, - all intermediate lists will be created in the current directory, and - all of the intermediate cubes will be created in the same directory as - the input cubes. - - - - - - - - - - Basemapmos Result - - This example shows how basemapmos works upon a small mosaic. - - - - FROMLIST=cubes.lis - TO=final.cub HNS1=73 HNL1=73 HNS2=103 HNL2=103 LNS=83 - LNL=83 - - Runs basemapmos with the first highpass filter being 73x73, - the second highpass filter being 103x103, and a 83x83 - lowpass filter. - - - - - - cubes.lis - - This is a simple file that lists all of the cubes to mosaic. - This list as well as the cubes to be mosaiced should - be within the current directory when noseam is executed. - - FROMLIST - - - - - - First listed cube - - This is the first cube listed in cubes.lis - - - - - Second listed cube - - This is the second cube listed in cubes.lis - - - - - Third listed cube - - This is the third cube listed in cubes.lis - - - - - - - - The resulting mosaic - - This is the resulting mosaic final.cub. - - - TO - - - - - - - - diff --git a/isis/src/local/apps/basemapmos/tsts/Makefile b/isis/src/local/apps/basemapmos/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/basemapmos/tsts/default/Makefile b/isis/src/local/apps/basemapmos/tsts/default/Makefile deleted file mode 100644 index 0e098352663ba74adbedf70585e47cf871e4bb5c..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/basemapmos/tsts/default/Makefile +++ /dev/null @@ -1,14 +0,0 @@ -APPNAME = basemapmos - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(LS) $(INPUT)/* > $(OUTPUT)/cubes.lis; - $(APPNAME) FROMLIST=$(OUTPUT)/cubes.lis \ - TO=$(OUTPUT)/result.cub \ - HNS1=73 HNL1=73 HNS2=103 HNL2=103 LNS=83 LNL=83 > /dev/null; - $(APPNAME) FROMLIST=$(OUTPUT)/cubes.lis \ - TO=$(OUTPUT)/userrangeresult.cub \ - GRANGE=USER MINLAT=18 MAXLAT=37 MINLON=12 MAXLON=28 \ - HNS1=73 HNL1=73 HNS2=103 HNL2=103 LNS=83 LNL=83 > /dev/null; - $(RM) $(OUTPUT)/cubes.lis; diff --git a/isis/src/local/apps/camcoeffs/Makefile b/isis/src/local/apps/camcoeffs/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/camcoeffs/assets/output.txt b/isis/src/local/apps/camcoeffs/assets/output.txt deleted file mode 100644 index 8904b421f6590928e017395ee0c46dfe4dbbbe63..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/assets/output.txt +++ /dev/null @@ -1,6 +0,0 @@ -Results - INS-41219_TRANSX = (0.2589180702, -0.0069999992, 3.3598e-06) - INS-41219_TRANSY = (-59.9867757282, 3.3598e-06, -0.0069999992) - INS-41219_TRANSS = (32.875172540392, -142.85719209406, -0.068567378407362) - INS-41219_TRANSL = (-8569.5245899736, -0.068567378407362, -142.85719209406) -End_Group diff --git a/isis/src/local/apps/camcoeffs/camcoeffs.cpp b/isis/src/local/apps/camcoeffs/camcoeffs.cpp deleted file mode 100644 index 989ab9d8e1b3939fa5b72d1b135482414522cc77..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/camcoeffs.cpp +++ /dev/null @@ -1,185 +0,0 @@ -#include "Isis.h" - -#include -#include - -#include "IException.h" - -using namespace std; -using namespace Isis; - -void IsisMain() { - UserInterface &ui = Application::GetUserInterface(); - - double eq1[] = { - ui.GetDouble("XCONSTCOEF"), - ui.GetDouble("XSAMPLECOEF"), - ui.GetDouble("XLINECOEF"), - }; - double eq2[] = { - ui.GetDouble("YCONSTCOEF"), - ui.GetDouble("YSAMPLECOEF"), - ui.GetDouble("YLINECOEF"), - }; - - double res1[3] = {0.0, 0.0, 0.0}; - double res2[3] = {0.0, 0.0, 0.0}; - - bool solutionFound = false; - - /** - * Do this loop in order to shorten the number of solutions we have - * to program in. This halves the number of cases by saying "What if equation 1 - * is really equation 2, and equation 2 is really equation 1?" The solution - * will also be flipped, which is handled if order becomes 1. - * - * order = 0 means the equations are in their original form, order = 1 means - * they were swapped. - */ - for(int order = 0; !solutionFound && order < 2; order++) { - double A = eq1[0]; - double B = eq1[1]; - double C = eq1[2]; - double D = eq2[0]; - double E = eq2[1]; - double F = eq2[2]; - - if(order == 1) { - A = eq2[0]; - B = eq2[1]; - C = eq2[2]; - D = eq1[0]; - E = eq1[1]; - F = eq1[2]; - } - - solutionFound = true; - - // These are used to test solution dependencies, they become zero if the - // equations are parallel and thus unsolvable - double denomX = (F == 0) ? 0.0 : B - (E * C / F); - double denomY = (E == 0) ? 0.0 : C - (F * B / E); - if(B != 0 && E != 0 && F != 0 && denomX != 0 && denomY != 0) { - /** - * Input Equations: - * X = A + BS + CL - * Y = D + ES + FL - * - * Dependencies: - * B != 0, E != 0, F != 0, (B-EC/F) != 0, (C-FB/E) != 0 - * - * Inverses: - * S = ((DC/F-A)/(B-EC/F)) + (1/(B-EC/F))X + ((-C/F)/(B-EC/F))Y - * L = (DB/E-A)/(C-FB/E) + (1/(C-FB/E))X + ((-B/E)/(C-FB/E))Y - */ - res1[0] = (D * C / F - A) / denomX; - res1[1] = 1.0 / denomX; - res1[2] = -(C / F) / denomX; - res2[0] = (D * B / E - A) / denomY; - res2[1] = 1.0 / denomY; - res2[2] = (-B / E) / denomY; - } - else if(C != 0 && E != 0 && B == 0) { - /** - * Input Equations: - * X = A + CL - * Y = D + ES + FL - * - * Dependencies: - * C != 0, E != 0, B == 0 - * - * Inverses: - * S = ((FA)/(CE) - D/E) + (-F/(CE))X + (1/E)Y - * L = (-A/C) + (1/C)X + 0.0Y - */ - res1[0] = (F * A) / (C * E) - D / E; - res1[1] = -F / (C * E); - res1[2] = 1.0 / E; - res2[0] = -A / C; - res2[1] = 1.0 / C; - res2[2] = 0.0; - } - else { - solutionFound = false; - } - - // If we found a swapped sol'n, the x coefficient is really - // the y coefficient at this point. The constants are correct. - if(order == 1 && solutionFound) { - double tmp = res1[1]; - res1[1] = res1[2]; - res1[2] = tmp; - - tmp = res2[1]; - res2[1] = res2[2]; - res2[2] = tmp; - } - } - - if(!solutionFound) { - throw IException(IException::Unknown, "Not enough information", _FILEINFO_); - } - - QString inEquationX = "X = " + toString(eq1[0]); - inEquationX += " + " + toString(eq1[1]) + "S"; - inEquationX += " + " + toString(eq1[2]) + "L"; - QString inEquationY = "Y = " + toString(eq2[0]); - inEquationY += " + " + toString(eq2[1]) + "S"; - inEquationY += " + " + toString(eq2[2]) + "L"; - QString outEquationS = "S = " + toString(res1[0]); - outEquationS += " + " + toString(res1[1]) + "X"; - outEquationS += " + " + toString(res1[2]) + "Y"; - QString outEquationL = "L = " + toString(res2[0]); - outEquationL += " + " + toString(res2[1]) + "X"; - outEquationL += " + " + toString(res2[2]) + "Y"; - - // check.... - /* - double rndS = 12; - double rndL = 534; - - double x = eq1[0] + rndS*eq1[1] + rndL*eq1[2]; - double y = eq2[0] + rndS*eq2[1] + rndL*eq2[2]; - double s = res1[0] + x*res1[1] + y*res1[2]; - double l = res2[0] + x*res2[1] + y*res2[2]; - - if(fabs(rndS - s) > 1E-12 || fabs(rndL - l) > 1E-12) { - std::cerr << "Equation Fails!" << std::endl; - std::cerr << "Differences: " << fabs(rndS - s) << "," << fabs(rndL - l) << std::endl; - } - */ - - PvlGroup res("Results"); - - if(ui.WasEntered("IAKCODE")) { - PvlKeyword naifFormatX("INS" + ui.GetString("IAKCODE") + "_TRANSX"); - naifFormatX += toString(eq1[0]); - naifFormatX += toString(eq1[1]); - naifFormatX += toString(eq1[2]); - PvlKeyword naifFormatY("INS" + ui.GetString("IAKCODE") + "_TRANSY"); - naifFormatY += toString(eq2[0]); - naifFormatY += toString(eq2[1]); - naifFormatY += toString(eq2[2]); - PvlKeyword naifFormatS("INS" + ui.GetString("IAKCODE") + "_ITRANSS"); - naifFormatS += toString(res1[0]); - naifFormatS += toString(res1[1]); - naifFormatS += toString(res1[2]); - PvlKeyword naifFormatL("INS" + ui.GetString("IAKCODE") + "_ITRANSL"); - naifFormatL += toString(res2[0]); - naifFormatL += toString(res2[1]); - naifFormatL += toString(res2[2]); - - res += naifFormatX; - res += naifFormatY; - res += naifFormatS; - res += naifFormatL; - } - else { - res += PvlKeyword("EquationX", inEquationX); - res += PvlKeyword("EquationY", inEquationY); - res += PvlKeyword("EquationS", outEquationS); - res += PvlKeyword("EquationL", outEquationL); - } - - Application::Log(res); -} diff --git a/isis/src/local/apps/camcoeffs/camcoeffs.xml b/isis/src/local/apps/camcoeffs/camcoeffs.xml deleted file mode 100644 index a7152c0d77f9e4591f4143cf782619c28d08f3de..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/camcoeffs.xml +++ /dev/null @@ -1,126 +0,0 @@ - - - - - This program calculates TRANSX,TRANSY from TRANSS, TRANSL for iak kernels - - - - This program outputs the exact IAK Kernel keywords that should be added to the kernel. The - TRANSX,TRANSY keywords are the result of the input (no processing done, this should be known information). - These values were provides as parameters to this program. The TRANSS,TRANSL keywords are calculated based on - the TRANSX,TRANSY keywords and are the result of this program. The keywords can be copied directly into the - pertinent IAK kernel. - - - - System - - - - - Original Version - - - - - - - string - Output Equations - - The IAK code of the TRANS values - - - This IAK code of the TRANS values, a negative number (such as -41210) is expected. - - - - - - double - - Focal Plane X Constant Coefficient - - - This is the first value in the TRANSY keyword, which represents the focal plane X constant coefficient. - - - - double - - Focal Plane X Sample Coefficient - - - This is the second value in the TRANSY keyword, which represents the focal plane X sample coefficient. - - - - double - - Focal Plane X Line Coefficient - - - This is the third value in the TRANSY keyword, which represents the focal plane X line coefficient. - - - - double - - Focal Plane Y Constant Coefficient - - - This is the first value in the TRANSY keyword, which represents the focal plane Y constant coefficient. - - - - double - - Focal Plane Y Sample Coefficient - - - This is the second value in the TRANSY keyword, which represents the focal plane Y sample coefficient. - - - - double - - Focal Plane Y Line Coefficient - - - This is the third value in the TRANSY keyword, which represents the focal plane Y line coefficient. - - - - - - - - Getting the TRANSX,TRANSY keywords for an IAK Kernel - - This example shows how to get the TRANSX,TRANSY keywords for an IAK - Kernel when given the TRANSS, TRANSL keywords - - - - iakcode=-41219 xc=0.2589180702 xs=-0.0069999992 xl=0.0000033598 yc=-59.9867757282 ys=0.0000033598 yl=-0.0069999992 - - - This is a typical run - - - - - The Output - - This program outputs the exact IAK Kernel keywords that should be added to the kernel. The - TRANSX,TRANSY keywords are the result of the input (no processing done, this should be known information). - These values were provides as parameters to this program. The TRANSS,TRANSL keywords are calculated based on - the TRANSX,TRANSY keywords and are the result of this program. The keywords can be copied directly into the - pertinent IAK kernel. - - - - - - diff --git a/isis/src/local/apps/camcoeffs/tsts/Makefile b/isis/src/local/apps/camcoeffs/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/camcoeffs/tsts/default/Makefile b/isis/src/local/apps/camcoeffs/tsts/default/Makefile deleted file mode 100644 index 7912c159e560cdaee037e6fe19f444e613a8f20b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/tsts/default/Makefile +++ /dev/null @@ -1,15 +0,0 @@ -APPNAME = camcoeffs - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) XCONSTCOEF=0 XSAMPLECOEF=4 XLINECOEF=0 \ - YCONSTCOEF=0 YSAMPLECOEF=0 YLINECOEF=2 > $(OUTPUT)/simple.txt; - $(APPNAME) XCONSTCOEF=0 XSAMPLECOEF=0 XLINECOEF=4 \ - YCONSTCOEF=0 YSAMPLECOEF=2 YLINECOEF=0 > $(OUTPUT)/simple2.txt; - $(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=4 \ - YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=0 > $(OUTPUT)/missingLineCoef.txt; - $(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=0 \ - YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=4 > $(OUTPUT)/missingLineCoef2.txt; - $(APPNAME) XCONSTCOEF=10 XSAMPLECOEF=1 XLINECOEF=6 \ - YCONSTCOEF=5 YSAMPLECOEF=2 YLINECOEF=4 > $(OUTPUT)/complicated.txt; diff --git a/isis/src/local/apps/camcoeffs/tsts/naifFormat/Makefile b/isis/src/local/apps/camcoeffs/tsts/naifFormat/Makefile deleted file mode 100644 index 04f15f656caa918408954c4c323eee8d5b72fc1c..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camcoeffs/tsts/naifFormat/Makefile +++ /dev/null @@ -1,9 +0,0 @@ -APPNAME = camcoeffs - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) IAKCODE=-41219 XCONSTCOEF=0.2589180702 \ - XSAMPLECOEF=-0.0069999992 XLINECOEF=0.0000033598 \ - YCONSTCOEF=-59.9867757282 YSAMPLECOEF=0.0000033598 \ - YLINECOEF=-0.0069999992 > $(OUTPUT)/naif.txt; diff --git a/isis/src/local/apps/camdev/Makefile b/isis/src/local/apps/camdev/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/camdev/camdev.cpp b/isis/src/local/apps/camdev/camdev.cpp deleted file mode 100644 index e2b9923a9e06d78d6b640904dd866303ed0dc3f4..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/camdev.cpp +++ /dev/null @@ -1,761 +0,0 @@ -#include "Isis.h" - -#include - -#include "Angle.h" -#include "Camera.h" -#include "CameraDistortionMap.h" -#include "CameraFocalPlaneMap.h" -#include "Cube.h" -#include "CubeManager.h" -#include "Distance.h" -#include "FileName.h" -#include "IException.h" -#include "iTime.h" -#include "Longitude.h" -#include "ProjectionFactory.h" -#include "ProcessByBrick.h" -#include "ProcessByLine.h" -#include "SpecialPixel.h" -#include "TProjection.h" - -using namespace std; -using namespace Isis; - -// Global variables -Camera *cam; -TProjection *projection; -int nbands; -bool noCamera; - -bool dn; -bool ra; -bool declination; -bool planetocentricLatitude; -bool planetographicLatitude; -bool positiveEast360Longitude; -bool positiveEast180Longitude; -bool positiveWest360Longitude; -bool positiveWest180Longitude; -bool bodyFixedX; -bool bodyFixedY; -bool bodyFixedZ; -bool localRadius; -bool pixelResolution; -bool lineResolution; -bool sampleResolution; -bool detectorResolution; -bool spacecraftPositionX; -bool spacecraftPositionY; -bool spacecraftPositionZ; -bool spacecraftAzimuth; -bool slantDistance; -bool targetCenterDistance; -bool subSpacecraftLatitude; -bool subSpacecraftLongitude; -bool subSpacecraftGroundAzimuth; -bool spacecraftAltitude; -bool offnadirAngle; -bool sunPositionX; -bool sunPositionY; -bool sunPositionZ; -bool sunAzimuth; -bool solarDistance; -bool subSolarLatitude; -bool subSolarLongitude; -bool subSolarGroundAzimuth; -bool phase; -bool emission; -bool incidence; -bool localEmission; -bool localIncidence; -bool northAzimuth; -bool distortedFocalPlaneX; -bool distortedFocalPlaneY; -bool undistortedFocalPlaneX; -bool undistortedFocalPlaneY; -bool undistortedFocalPlaneZ; -bool ephemerisTime; -bool UTC; -bool localSolarTime; -bool solarLongitude; -bool morphologyRank; -bool albedoRank; - - - -void camdevDN(Buffer &in, Buffer &out); -void camdev(Buffer &out); - - -// Function to create a keyword with same values of a specified count -template PvlKeyword makeKey(const QString &name, - const int &nvals, - const T &value); - -// Structure containing new mosaic planes -struct MosData { - MosData() : m_morph(Null), m_albedo(Null) { } - double m_morph; - double m_albedo; -}; - -// Computes the special MORPHOLOGYRANK and ALBEDORANK planes -MosData *getMosaicIndicies(Camera &camera, MosData &md); -// Updates BandBin keyword -void UpdateBandKey(const QString &keyname, PvlGroup &bb, const int &nvals, - const QString &default_value = "Null"); - - - -void IsisMain() { - UserInterface &ui = Application::GetUserInterface(); - - // Get the camera information if this is not a mosaic. Otherwise, get the - // projection information - Process p1; - Cube *icube = p1.SetInputCube("FROM", OneBand); - if (ui.GetString("SOURCE") == "CAMERA") { - noCamera = false; - } - else { - noCamera = true; - } - - if(noCamera) { - try { - projection = (TProjection *) icube->projection(); - } - catch(IException &e) { - QString msg = "Mosaic files must contain mapping labels"; - throw IException(e, IException::User, msg, _FILEINFO_); - } - } - else { - try { - cam = icube->camera(); - } - catch(IException &e) { - QString msg = "If " + FileName(ui.GetFileName("FROM")).name() + " is a mosaic, make sure the SOURCE " - "option is set to PROJECTION"; - throw IException(e, IException::User, msg, _FILEINFO_); - } - } - - // We will be processing by brick. - ProcessByBrick p; - - // Find out which bands are to be created - nbands = 0; - ra = false; - declination = false; - planetographicLatitude = false; - positiveEast180Longitude = false; - positiveWest360Longitude = false; - positiveWest180Longitude = false; - bodyFixedX = false; - bodyFixedY = false; - bodyFixedZ = false; - localRadius = false; - lineResolution = false; - sampleResolution = false; - detectorResolution = false; - spacecraftPositionX = false; - spacecraftPositionY = false; - spacecraftPositionZ = false; - spacecraftAzimuth = false; - slantDistance = false; - targetCenterDistance = false; - subSpacecraftLatitude = false; - subSpacecraftLongitude = false; - subSpacecraftGroundAzimuth = false; - spacecraftAltitude = false; - offnadirAngle = false; - sunPositionX = false; - sunPositionY = false; - sunPositionZ = false; - sunAzimuth = false; - solarDistance = false; - subSolarLatitude = false; - subSolarLongitude = false; - subSolarGroundAzimuth = false; - phase = false; - emission = false; - incidence = false; - localEmission = false; - localIncidence = false; - northAzimuth = false; - distortedFocalPlaneX = false; - distortedFocalPlaneY = false; - undistortedFocalPlaneX = false; - undistortedFocalPlaneY = false; - undistortedFocalPlaneZ = false; - ephemerisTime = false; - UTC = false; - localSolarTime = false; - solarLongitude = false; - morphologyRank = false; - albedoRank = false; - - - if (!noCamera) { - if ((ra = ui.GetBoolean("RADEC"))) nbands++; - if ((declination = ui.GetBoolean("RADEC"))) nbands++; - if ((planetographicLatitude = ui.GetBoolean("PLANETOGRAPHICLATITUDE"))) nbands++; - if ((positiveEast180Longitude = ui.GetBoolean("POSITIVEEAST180LONGITUDE"))) nbands++; - if ((positiveWest360Longitude = ui.GetBoolean("POSITIVEWEST360LONGITUDE"))) nbands++; - if ((positiveWest180Longitude = ui.GetBoolean("POSITIVEWEST180LONGITUDE"))) nbands++; - if ((bodyFixedX = ui.GetBoolean("BODYFIXED"))) nbands++; - if ((bodyFixedY = ui.GetBoolean("BODYFIXED"))) nbands++; - if ((bodyFixedZ = ui.GetBoolean("BODYFIXED"))) nbands++; - if ((localRadius = ui.GetBoolean("LOCALRADIUS"))) nbands++; - if ((lineResolution = ui.GetBoolean("LINERESOLUTION"))) nbands++; - if ((sampleResolution = ui.GetBoolean("SAMPLERESOLUTION"))) nbands++; - if ((detectorResolution = ui.GetBoolean("DETECTORRESOLUTION"))) nbands++; - if ((spacecraftPositionX = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++; - if ((spacecraftPositionY = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++; - if ((spacecraftPositionZ = ui.GetBoolean("SPACECRAFTPOSITION"))) nbands++; - if ((spacecraftAzimuth = ui.GetBoolean("SPACECRAFTAZIMUTH"))) nbands++; - if ((slantDistance = ui.GetBoolean("SLANTDISTANCE"))) nbands++; - if ((targetCenterDistance = ui.GetBoolean("TARGETCENTERDISTANCE"))) nbands++; - if ((subSpacecraftLatitude = ui.GetBoolean("SUBSPACECRAFTLATITUDE"))) nbands++; - if ((subSpacecraftLongitude = ui.GetBoolean("SUBSPACECRAFTLONGITUDE"))) nbands++; - if ((subSpacecraftGroundAzimuth = ui.GetBoolean("SUBSPACECRAFTGROUNDAZIMUTH"))) nbands++; - if ((spacecraftAltitude = ui.GetBoolean("SPACECRAFTALTITUDE"))) nbands++; - if ((offnadirAngle = ui.GetBoolean("OFFNADIRANGLE"))) nbands++; - if ((sunPositionX = ui.GetBoolean("SUNPOSITION"))) nbands++; - if ((sunPositionY = ui.GetBoolean("SUNPOSITION"))) nbands++; - if ((sunPositionZ = ui.GetBoolean("SUNPOSITION"))) nbands++; - if ((sunAzimuth = ui.GetBoolean("SUNAZIMUTH"))) nbands++; - if ((solarDistance = ui.GetBoolean("SOLARDISTANCE"))) nbands++; - if ((subSolarLatitude = ui.GetBoolean("SUBSOLARLATITUDE"))) nbands++; - if ((subSolarLongitude = ui.GetBoolean("SUBSOLARLONGITUDE"))) nbands++; - if ((subSolarGroundAzimuth = ui.GetBoolean("SUBSOLARGROUNDAZIMUTH"))) nbands++; - if ((phase = ui.GetBoolean("PHASE"))) nbands++; - if ((incidence = ui.GetBoolean("INCIDENCE"))) nbands++; - if ((emission = ui.GetBoolean("EMISSION"))) nbands++; - if ((localEmission = ui.GetBoolean("LOCALEMISSION"))) nbands++; - if ((localIncidence = ui.GetBoolean("LOCALINCIDENCE"))) nbands++; - if ((northAzimuth = ui.GetBoolean("NORTHAZIMUTH"))) nbands++; - if ((distortedFocalPlaneX = ui.GetBoolean("DISTORTEDFOCALPLANE"))) nbands++; - if ((distortedFocalPlaneY = ui.GetBoolean("DISTORTEDFOCALPLANE"))) nbands++; - if ((undistortedFocalPlaneX = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++; - if ((undistortedFocalPlaneY = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++; - if ((undistortedFocalPlaneZ = ui.GetBoolean("UNDISTORTEDFOCALPLANE"))) nbands++; - if ((ephemerisTime = ui.GetBoolean("EPHEMERISTIME"))) nbands++; - if ((UTC = ui.GetBoolean("UTC"))) nbands++; - if ((localSolarTime = ui.GetBoolean("LOCALSOLARTIME"))) nbands++; - if ((solarLongitude = ui.GetBoolean("SOLARLONGITUDE"))) nbands++; - if ((morphologyRank = ui.GetBoolean("MORPHOLOGYRANK"))) nbands++; - if ((albedoRank = ui.GetBoolean("ALBEDORANK"))) nbands++; - - } - if((dn = ui.GetBoolean("DN"))) nbands++; - if((planetocentricLatitude = ui.GetBoolean("PLANETOCENTRICLATITUDE"))) nbands++; - if((positiveEast360Longitude = ui.GetBoolean("POSITIVEEAST360LONGITUDE"))) nbands++; - if((pixelResolution = ui.GetBoolean("PIXELRESOLUTION"))) nbands++; - - if(nbands < 1) { - QString message = "At least one parameter must be entered" - "[PHASE, EMISSION, INCIDENCE, LATITUDE, LONGITUDE...]"; - throw IException(IException::User, message, _FILEINFO_); - } - - // If outputting a a dn band, retrieve the orignal values for the filter name from the input cube, - // if it exists. Otherwise, the default will be "DN" - QString bname = "DN"; - if ( dn && icube->hasGroup("BandBin") ) { - PvlGroup &mybb = icube->group("BandBin"); - if ( mybb.hasKeyword("Name") ) { - bname = mybb["Name"][0]; - } - else if ( mybb.hasKeyword("FilterName") ) { - bname = mybb["FilterName"][0]; - } - } - - // Create a bandbin group for the output label - PvlKeyword name("Name"); - if (dn) name += bname; - if (ra) name += "Right Ascension"; - if (declination) name += "Declination"; - if (planetocentricLatitude) name += "Planetocentric Latitude"; - if (planetographicLatitude) name += "Planetographic Latitude"; - if (positiveEast360Longitude) name += "Positive East 360 Longitude"; - if (positiveEast180Longitude) name += "Positive East 180 Longitude"; - if (positiveWest360Longitude) name += "Positive West 360 Longitude"; - if (positiveWest180Longitude) name += "Positive West 180 Longitude"; - if (bodyFixedX) name += "Body Fixed X"; - if (bodyFixedY) name += "Body Fixed Y"; - if (bodyFixedZ) name += "Body Fixed Z"; - if (localRadius) name += "Local Radius"; - if (pixelResolution) name += "Pixel Resolution"; - if (lineResolution) name += "Line Resolution"; - if (sampleResolution) name += "Sample Resolution"; - if (detectorResolution) name += "Detector Resolution"; - if (spacecraftPositionX) name += "Spacecraft Position X"; - if (spacecraftPositionY) name += "Spacecraft Position Y"; - if (spacecraftPositionZ) name += "Spacecraft Position Z"; - if (spacecraftAzimuth) name += "Spacecraft Azimuth"; - if (slantDistance) name += "Slant Distance"; - if (targetCenterDistance) name += "Target Center Distance"; - if (subSpacecraftLatitude) name += "Sub Spacecraft Latitude"; - if (subSpacecraftLongitude) name += "Sub Spacecraft Longitude"; - if (subSpacecraftGroundAzimuth) name += "Sub Spacecraft Ground Azimuth"; - if (spacecraftAltitude) name += "Spacecraft Altitude"; - if (offnadirAngle) name += "OffNadir Angle"; - if (sunPositionX) name += "Sun Position X"; - if (sunPositionY) name += "Sun Position Y"; - if (sunPositionZ) name += "Sun Position Z"; - if (sunAzimuth) name += "Sun Azimuth"; - if (solarDistance) name += "Solar Distance"; - if (subSolarLatitude) name += "Sub Solar Latitude"; - if (subSolarLongitude) name += "Sub Solar Longitude"; - if (subSolarGroundAzimuth) name += "Sub Solar Ground Azimuth"; - if (phase) name += "Phase Angle"; - if (incidence) name += "Incidence Angle"; - if (emission) name += "Emission Angle"; - if (localEmission) name += "Local Emission Angle"; - if (localIncidence) name += "Local Incidence Angle"; - if (northAzimuth) name += "North Azimuth"; - if (distortedFocalPlaneX) name += "Distorted Focal Plane X"; - if (distortedFocalPlaneY) name += "Distorted Focal Plane Y"; - if (undistortedFocalPlaneX) name += "Undistorted Focal Plane X"; - if (undistortedFocalPlaneY) name += "Undistorted Focal Plane Y"; - if (undistortedFocalPlaneZ) name += "Undistorted Focal Plane Z"; - if (ephemerisTime) name += "Ephemeris Time"; - if (UTC) name += "Coordinated Universal Time"; - if (localSolarTime) name += "Local Solar Time"; - if (solarLongitude) name += "Solar Longitude"; - if (morphologyRank) name += "morphologyRank"; - if (albedoRank) name += "albedoRank"; - - - - - // Create the output cube. Note we add the input cube to expedite propagation - // of input cube elements (label, blobs, etc...). It will be cleared - // prior to systematic processing only if the DN option is not selected. - // If DN is chosen by the user, then we propagate the input buffer with a - // different function - one that accepts both input and output buffers. - (void) p.SetInputCube("FROM", OneBand); - Cube *ocube = p.SetOutputCube("TO", icube->sampleCount(), - icube->lineCount(), nbands); - p.SetBrickSize(64, 64, nbands); - - if (dn) { - // Process with input and output buffers - p.StartProcess(camdevDN); - } - else { - // Toss the input file as stated above - p.ClearInputCubes(); - - // Start the processing - p.StartProcess(camdev); - } - - // Add the bandbin group to the output label. If a BandBin group already - // exists, remove all existing keywords and add the keywords for this app. - // Otherwise, just put the group in. - PvlObject &cobj = ocube->label()->findObject("IsisCube"); - if(!cobj.hasGroup("BandBin")) { - cobj.addGroup(PvlGroup("BandBin")); - } - - PvlGroup &bb = cobj.findGroup("BandBin"); - bb.addKeyword(name, PvlContainer::Replace); - int nvals = name.size(); - UpdateBandKey("Center", bb, nvals, "1.0"); - - if ( bb.hasKeyword("OriginalBand") ) { - UpdateBandKey("OriginalBand", bb, nvals, "1.0"); - } - - if ( bb.hasKeyword("Number") ) { - UpdateBandKey("Number", bb, nvals, "1.0"); - } - - UpdateBandKey("Width", bb, nvals, "1.0"); - - - - p.EndProcess(); -} - - -// This propagates the input plane to the output plane, then passes it off to -// the general routine -void camdevDN(Buffer &in, Buffer &out) { - for (int i = 0 ; i < in.size() ; i++) { - out[i] = in[i]; - } - camdev(out); -} - - -// Computes all the geometric properties for the output buffer. Certain -// knowledge of the buffers size is assumed below, so ensure the buffer -// is still of the expected size. -void camdev(Buffer &out) { - - - // If the DN option is selected, it is already added by the camdevDN - // function. We must compute the offset to start at the second band. - int skipDN = (dn) ? 64 * 64 : 0; - - for(int i = 0; i < 64; i++) { - for(int j = 0; j < 64; j++) { - - MosData mosd, *p_mosd(0); // For special mosaic angles - - int index = i * 64 + j + skipDN; - double samp = out.Sample(index); - double line = out.Line(index); - - bool isGood=false; - if (noCamera) { - isGood = projection->SetWorld(samp, line); - } - else { - isGood = cam->SetImage(samp, line); - } - - if (isGood) { - if (ra) { - out[index] = cam->RightAscension(); - index += 64 * 64; - } - if (declination) { - out[index] = cam->Declination(); - index += 64 * 64; - } - if(planetocentricLatitude) { - if(noCamera) { - out[index] = projection->UniversalLatitude(); - } - else { - out[index] = cam->UniversalLatitude(); - } - index += 64 * 64; - } - if (!noCamera) { - if (planetographicLatitude) { - Distance radii[3]; - cam->radii(radii); - double ocentricLat; - ocentricLat = cam->UniversalLatitude(); - out[index] = TProjection::ToPlanetographic(ocentricLat, radii[0].kilometers(), - radii[2].kilometers()); - index += 64 * 64; - } - } - double pe360Lon, pw360Lon; - if (positiveEast360Longitude) { - if(noCamera) { - pe360Lon = projection->UniversalLongitude(); - } - else { - pe360Lon = cam->UniversalLongitude(); - } - out[index] = pe360Lon; - index += 64 * 64; - } - if (!noCamera) { - pe360Lon = cam->UniversalLongitude(); - pw360Lon = TProjection::ToPositiveWest(pe360Lon, 360); - if (positiveEast180Longitude) { - out[index] = TProjection::To180Domain(pe360Lon); - index += 64 * 64; - } - if (positiveWest360Longitude) { - out[index] = pw360Lon; - index += 64 * 64; - } - if (positiveWest180Longitude) { - out[index] = TProjection::To180Domain(pw360Lon); - index += 64 * 64; - } - } - //If bodyFixedX is true, Y and Z are true as well so compute them all - if (bodyFixedX) { - double pB[3]; - cam->Coordinate(pB); - out[index] = pB[0]; - index += 64 * 64; - out[index] = pB[1]; - index += 64 * 64; - out[index] = pB[2]; - index += 64 * 64; - } - if (localRadius) { - out[index] = cam->LocalRadius().meters(); - index += 64 * 64; - } - if (pixelResolution) { - if (noCamera) { - out[index] = projection->Resolution(); - } - else { - out[index] = cam->PixelResolution(); - } - index += 64 * 64; - } - if(lineResolution) { - out[index] = cam->LineResolution(); - index += 64 * 64; - } - if(sampleResolution) { - out[index] = cam->SampleResolution(); - index += 64 * 64; - } - if(detectorResolution) { - out[index] = cam->DetectorResolution(); - index += 64 * 64; - } - //If spacecraftPositionX is true, Y and Z are true as well so compute them all - if(spacecraftPositionX) { - double spB[3]; - cam->instrumentPosition(spB); - out[index] = spB[0]; - index += 64 * 64; - out[index] = spB[1]; - index += 64 * 64; - out[index] = spB[2]; - index += 64 * 64; - } - if(spacecraftAzimuth) { - out[index] = cam->SpacecraftAzimuth(); - index += 64 * 64; - } - if(slantDistance) { - out[index] = cam->SlantDistance(); - index += 64 * 64; - } - if(targetCenterDistance) { - out[index] = cam->targetCenterDistance(); - index += 64 * 64; - } - if(!noCamera) { - double ssplat, ssplon; - ssplat = 0.0; - ssplon = 0.0; - cam->subSpacecraftPoint(ssplat, ssplon); - if(subSpacecraftLatitude) { - out[index] = ssplat; - index += 64 * 64; - } - if(subSpacecraftLongitude) { - out[index] = ssplon; - index += 64 * 64; - } - if(subSpacecraftGroundAzimuth) { - out[index] = cam->GroundAzimuth(cam->UniversalLatitude(), - cam->UniversalLongitude(), ssplat, ssplon); - index += 64 * 64; - } - } - if(spacecraftAltitude) { - out[index] = cam->SpacecraftAltitude(); - index += 64 * 64; - } - if(offnadirAngle) { - out[index] = cam->OffNadirAngle(); - index += 64 * 64; - } - //If sunPositionX is true, Y and Z are true as well so compute them all - if(sunPositionX) { - double sB[3]; - cam->sunPosition(sB); - out[index] = sB[0]; - index += 64 * 64; - out[index] = sB[1]; - index += 64 * 64; - out[index] = sB[2]; - index += 64 * 64; - } - if(sunAzimuth) { - out[index] = cam->SunAzimuth(); - index += 64 * 64; - } - if(solarDistance) { - out[index] = cam->SolarDistance(); - index += 64 * 64; - } - if(!noCamera) { - double sslat, sslon; - sslat = 0.0; - sslon = 0.0; - cam->subSolarPoint(sslat, sslon); - if(subSolarLatitude) { - out[index] = sslat; - index += 64 * 64; - } - if(subSolarLongitude) { - out[index] = sslon; - index += 64 * 64; - } - if(subSolarGroundAzimuth) { - out[index] = cam->GroundAzimuth(cam->UniversalLatitude(), - cam->UniversalLongitude(), sslat, sslon); - index += 64 * 64; - } - } - if(phase) { - out[index] = cam->PhaseAngle(); - index += 64 * 64; - } - if(incidence) { - out[index] = cam->IncidenceAngle(); - index += 64 * 64; - } - if(emission) { - out[index] = cam->EmissionAngle(); - index += 64 * 64; - } - if(localEmission || localIncidence) { - Angle phase; - Angle incidence; - Angle emission; - bool success; - cam->LocalPhotometricAngles(phase, incidence, emission, success); - - if (localEmission) { - out[index] = emission.degrees(); - index += 64 * 64; - } - - if (localIncidence) { - out[index] = incidence.degrees(); - index += 64 * 64; - } - } - if(northAzimuth) { - out[index] = cam->NorthAzimuth(); - index += 64 * 64; - } - //If distortedFocalPlaneX is true, Y is true as well so compute both - if(distortedFocalPlaneX) { - CameraFocalPlaneMap *focalPlaneMap = cam->FocalPlaneMap(); - out[index] = focalPlaneMap->FocalPlaneX(); - index += 64 * 64; - out[index] = focalPlaneMap->FocalPlaneY(); - index += 64 * 64; - } - //If undistortedFocalPlaneX is true, Y and Z are true as well so compute them all - if(undistortedFocalPlaneX) { - CameraDistortionMap *distortedMap = cam->DistortionMap(); - out[index] = distortedMap->UndistortedFocalPlaneX(); - index += 64 * 64; - out[index] = distortedMap->UndistortedFocalPlaneY(); - index += 64 * 64; - out[index] = distortedMap->UndistortedFocalPlaneZ(); - index += 64 * 64; - } - if(ephemerisTime) { - out[index] = cam->time().Et(); - index += 64 * 64; - } - if(UTC) { - QString utcDouble = cam->time().UTC(); - out[index] = utcDouble.toDouble(); - index += 64 * 64; - } - if(localSolarTime) { - out[index] = cam->LocalSolarTime(); - index += 64 * 64; - } - if(solarLongitude) { - out[index] = cam->solarLongitude().degrees(); - index += 64 * 64; - } - // Special Mosaic indexes - if (morphologyRank) { - if (!p_mosd) { p_mosd = getMosaicIndicies(*cam, mosd); } - out[index] = mosd.m_morph; - index += 64 * 64; - } - - if (albedoRank) { - if (!p_mosd) { p_mosd = getMosaicIndicies(*cam, mosd); } - out[index] = mosd.m_albedo; - index += 64 * 64; - } - } - // Trim outerspace - else { - for(int b = (skipDN) ? 1 : 0; b < nbands; b++) { - out[index] = Isis::NULL8; - index += 64 * 64; - } - } - } - } -} - - -// Function to create a keyword with same values of a specified count -template - PvlKeyword makeKey(const QString &name, const int &nvals, - const T &value) { - PvlKeyword key(name); - for (int i = 0 ; i < nvals ; i++) { - key += value; - } - return (key); - } - - -// Computes the special morphologyRank and albedoRank planes -MosData *getMosaicIndicies(Camera &camera, MosData &md) { - const double Epsilon(1.0E-8); - Angle myphase; - Angle myincidence; - Angle myemission; - bool mysuccess; - camera.LocalPhotometricAngles(myphase, myincidence, myemission, mysuccess); - if (!mysuccess) { - myemission.setDegrees(camera.EmissionAngle()); - myincidence.setDegrees(camera.IncidenceAngle()); - } - double res = camera.PixelResolution(); - if (fabs(res) < Epsilon) res = Epsilon; - - md = MosData(); // Nullifies the data - if (myemission.isValid()) { - // Compute morphologyRank - double cose = cos(myemission.radians()); - if (fabs(cose) < Epsilon) cose = Epsilon; - // Convert resolution to units of KM - md.m_morph = (res / 1000.0) / cose; - - if (myincidence.isValid()) { - // Compute albedoRank - double cosi = cos(myincidence.radians()); - if (fabs(cosi) < Epsilon) cosi = Epsilon; - // Convert resolution to KM - md.m_albedo = (res / 1000.0 ) * ( (1.0 / cose) + (1.0 / cosi) ); - } - } - - return (&md); -} - - -// Updates existing BandBin keywords with additional values to ensure -// label compilancy (which should support Camera models). It checks for the -// existance of the keyword and uses its (assumed) first value to set nvals -// values to a constant. If the keyword doesn't exist, it uses the default -// value. -void UpdateBandKey(const QString &keyname, PvlGroup &bb, const int &nvals, - const QString &default_value) { - - QString defVal(default_value); - if ( bb.hasKeyword(keyname) ) { - defVal = bb[keyname][0]; - } - - bb.addKeyword(makeKey(keyname, nvals, defVal), PvlContainer::Replace); - return; -} - diff --git a/isis/src/local/apps/camdev/camdev.xml b/isis/src/local/apps/camdev/camdev.xml deleted file mode 100644 index 1c7bbb6aa51d0442f83720915f366bca8e23b557..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/camdev.xml +++ /dev/null @@ -1,879 +0,0 @@ - - - - - - Creates photometric and geometric information bands for an image cube - - - -

- This program, camdev, creates backplane bands that contain photometric, geometric, and - spacecraft instrument information for an image file. The parameter options - range from photometric angles (incidence, emission, and phase) to various - azimuth angles, and options based on spatial - (latitude, longitude, and resolution) information. This program will - not work on Level1 images without a camera model, or on mosaics. - The input image pixels are not propagated to the output file unless the - user selects the "DN" option. The following is a partial list of how users have made use of - band output: -

    -
  • Evaluate the individual bands in order to establish subsequent - image processing steps
  • -
  • Specify as input to other ISIS3 programs such as fx and photomet
  • -
  • Demonstrate the result of each selected option
  • -
  • Determine how the images are mosaicked together after the - Level2 images are created from the Level1 images with backplanes
  • -
-

-

- All ISIS3 applications default to the following geometric reference if a camera model exists: -

    -
  • Longitude Domain = 360, longitude range reported from 0 to 360
  • -
  • Latitude System = Ocentric
  • -
  • Longitude Direction = East, longitude increases to the east
  • -
-

-

- There are instances where the local emission angle and the local incidence angle will have - values over 90 degrees. ISIS allows the computation of emission and incidence angles greater - than 90 degrees. This feature allows representation of viewing and illumination conditions - where there is actual target body surface data beyond the limb or deep terminator boundary - areas. Applications such as photomet that applies photometric functions honor the 90 degree - boundary. Applications such as photrim can be applied to the camdev output to replace the - angle values above 90 degrees to NULL. There are certain processes that need these data, - therefore it is allowed. -

-

- This program requires a Level1 file that has a successful - "spiceinit" applied to it, or a Level2 image - cube file. For every valid input pixel, an output pixel is computed - based on either the SPICE information, or the - map projected spatial information, - or a pre-defined equation. -

-

- The parameters "morphology" and "albedo" are specifically designed to be used - by the ISIS3 mosaic programs. A mosaic program will automatically compare - two pixel values to determine how each pixel is mosaicked into an output - file, which depends on whether a morphology-based or an albedo-based - product is desired. The program computes a - DN value for every input pixel based on - the formulas listed below and outputs the value to a backplane band. - These backplane bands are used by the ISIS3 mosaic programs. The following are - equations for "morphology" and "albedo" options: -

-
-
Morphology
-
Equation = PixelResolution/cos(EmissionAngle)
-
Albedo
-
Equation = PixelResolution * [(1/cos(EmissionAngle)) + - (1/cos(IncidenceAngle))]
-
-
-

-

- All the options in camdev are applicable if the input file is a Level1 - image and has a camera model associated with the file. If the input file - is a map-projected Level2 image, only a few options are appropriate - and available for selection.

- - The following options are available for Level1 images that contain a camera model: -

    -
  • DN
  • -
  • RADEC
  • -
  • PLANETOCENTRICLATITUDE
  • -
  • PLANETOGRAPHICLATITUDE
  • -
  • POSITIVEEAST360LONGITUDE
  • -
  • POSITIVEEAST180LONGITUDE
  • -
  • POSITIVEWEST360LONGITUDE
  • -
  • POSITIVEWEST180LONGITUDE
  • -
  • BODYFIXED
  • -
  • LOCALRADIUS
  • -
  • PIXELRESOLUTION
  • -
  • LINERESOLUTION
  • -
  • SAMPLERESOLUTION
  • -
  • DETECTORRESOLUTION
  • -
  • SPACECRAFTPOSITION
  • -
  • SPACECRAFTAZIMUTH
  • -
  • SLANTDISTANCE
  • -
  • TARGETCENTERDISTANCE
  • -
  • SUBSPACECRAFTLATITUDE
  • -
  • SUBSPACECRAFTLONGITUDE
  • -
  • SUBSPACECRAFTGROUNDAZIMUTH
  • -
  • SPACECRAFTALTITUDE
  • -
  • OFFNADIRANGLE
  • -
  • SUNPOSITION
  • -
  • SUNAZIMUTH
  • -
  • SOLARDISTANCE
  • -
  • SUBSOLARLATITUDE
  • -
  • SUBSOLARLONGITUDE
  • -
  • SUBSOLARGROUNDAZIMUTH
  • -
  • PHASE
  • -
  • EMISSION
  • -
  • INCIDENCE
  • -
  • LOCALEMISSION
  • -
  • LOCALINCIDENCE
  • -
  • NORTHAZIMUTH
  • -
  • DISTORTEDFOCALPLANE
  • -
  • UNDISTORTEDFOCALPLANE
  • -
  • EPHEMERISTIME
  • -
  • UTC
  • -
  • LOCALSOLARTIME
  • -
  • SOLARLONGITUDE
  • -
  • MORPHOLOGYRANK
  • -
  • ALBEDORANK
  • -
- The following options are available for Level2 images: -
    -
  • DN
  • -
  • RADEC
  • -
  • PLANETOCENTRICLATITUDE
  • -
  • POSITIVEEAST360LONGITUDE
  • -
  • PIXELRESOLUTION
  • -
  • DISTORTEDFOCALPLANE
  • -
  • UNDISTORTEDFOCALPLANE
  • -
  • EPHEMERISTIME
  • -
  • UTC
  • -
  • SPACECRAFTPOSITION
  • -
-

-

- The BandBin group keywords are updated in the labels of the output cube - file. The keyword "Name" within the BandBin group, - shown below, is populated with the name of each option selected by the - user as bands. These bands can be referenced by their names in - applications such as - "mapmos" - and - "qview." -

-
-    Example:
-    
-    camdev from=EW0131773041G_cal.cub to=EW0131773041G_cal.pho.cub morph=true dn=true
-     
-    Sample of image label:
-    
-    Group = Dimensions
-      Samples = 1024
-      Lines   = 1024
-      Bands   = 7   
-    End_Group
-    
-    Group = BandBin
-      Name   = ("750 BW 5", "Phase Angle", "Emission Angle", "Incidence Angle",
-        	Latitude, Longitude, Morphology)
-      Number = (7, 7, 7, 7, 7, 7, 7)
-      Center = (748.7, 748.7, 748.7, 748.7, 748.7, 748.7, 748.7)
-      Width  = (5.1, 5.1, 5.1, 5.1, 5.1, 5.1, 5.1)
-    End_Group
-    
-    
-    Note:  The first band retained the BandBin Name value from the input file.
-    The program has "Phase Angle," "Emission Angle," "Incidence Angle,"
-    "Latitude," and "Longitude" options pre-selected.
-    
-
-

-

- If the backplane bands generated by camdev are used in the mosaic - programs and the mosaic requires the input image pixel, the "DN" - parameter name must be set to "true" in camdev. When backplane - bands are used in the - "fx" - or - "photomet" - program, it is not necessary to propagate the input image to the output - file. -

-
- - - lev1geoplane - levgeoplane - geoback - - - - - spiceinit - mapmos - qview - fx - photomet - automos - phocube - - - - - Add resolution to possible outputs - Convert to a IsisProcessBySpectra when it gets written - - - - - Original version. - - - Renamed albedo to albedoRank, renamed morph (or morphology) to morphRank (or morphologyRank). Ref #4008. - - - - - Radiometric and Photometric Correction - Cameras - - - - - - cube - input - - Input cube file - - - This is the input filename. The input image cube can be a Level1 - or Level2 file. For a Level1 image, spiceinit - must be successfully applied before running camdev. - - - *.cub - - - - - cube - real - output - - Output cube file - - - This is the output file name. The cube file will contain a band for - each of the selected options. The BandBin Group in the image labels - of the output cube file will be updated with the "Name" keyword - containing the output band names (options) in the order that they are - stacked within the cube. - - - - - string - Specifies the source of the geometric information - CAMERA - - Specifies whether the geometric information will be obtained from the - camera model or from the map projection. If this parameter is set to CAMERA, - all band options are available for the user to select. If this - parameter is set to PROJECTION, then only DN, LATITUDE, LONGITUDE, and - PIXELRESOLUTION band options are available and all other options - will be greyed out. If the user sets this parameter to CAMERA and - the input file does not contain a camera model or SPICE information, - then an error message will occur. - - - - - - - - - - - boolean - FALSE - Propagate the input pixel to the output file - - This parameter specifies whether the input image pixel value - (DN) will be propagated to - the output file. The DN parameter must be set to "true," - if the output product created is expected to contain the input - image information. - - - - boolean - FALSE - Create bands for Right Ascention and Declination - - If this parameter is true, the Right Ascension, and the - Declination will be calculated for every pixel and each will be placed into - their respective bands in the output cube. The output cube labels will contain - "Right Ascension" and "Declination" in the BandBin group, in the band sequence of the - output file. Right Ascension and Declination are in degrees. - - - - boolean - TRUE - Create a Planetocentic Latitude band - - If this parameter is true, the Planetocentric Latitude value will be computed for - every pixel and placed in a band in the output cube. The output cube - labels will contain "Planetocentric Latitude" in the BandBin group, in band sequence - of the output file. Planetocentric Latitude is in degrees. - - - - boolean - FALSE - Create a Planetographic Latitude band - - If this parameter is true, the Planetographic Latitude value will be computed for - every pixel and placed in a band in the output cube. The output cube - labels will contain "Planetographic Latitude" in the BandBin group, in band sequence - of the output file. Planetographic Latitude is in degrees. - - - - boolean - FALSE - Create a Positive East 360 Longitude band - - If this parameter is true, the Positive East 360 Longitude value will be computed for - every pixel placed in a band in the output cube. The output cube - labels will contain "Positive East 360 Longitude" in the BandBin group, in band - sequence of the output file. Positive East 360 Longitude is in degrees. - - - - boolean - FALSE - Create a Positive East 180 Longitude band - - If this parameter is true, the Positive East 180 Longitude value will be computed for - every pixel placed in a band in the output cube. The output cube - labels will contain "Positive East 180 Longitude" in the BandBin group, in band - sequence of the output file. Positive East 180 Longitude is in degrees. - - - - boolean - FALSE - Create a Positive West 360 Longitude band - - If this parameter is true, the Positive West 360 Longitude value will be computed for - every pixel placed in a band in the output cube. The output cube - labels will contain "Positive West 360 Longitude" in the BandBin group, in band - sequence of the output file. Positive West 360 Longitude is in degrees. - - - - boolean - FALSE - Create a Positive West 180 Longitude band - - !If this parameter is true, the Positive West 180 Longitude value will be computed for - every pixel placed in a band in the output cube. The output cube - labels will contain "Positive West 180 Longitude" in the BandBin group, in band - sequence of the output file. Positive West 180 Longitude is in degrees. - - - - boolean - FALSE - Create bands for the X, Y, and Z Body Fixed Coordinates - - If this parameter is true, the Body Fixed Coordinates will be calculated for - every pixel and the values for X, Y, and Z will each be placed into their own bands in - the output cube. The output cube labels will contain "Body Fixed X", "Body Fixed Y", - and "Body Fixed Z" in the BandBin group, in the band sequence of the output file. - Body Fixed Coordinates are in kilometers. - - - - boolean - FALSE - Create a Local Radius band - - If this parameter is true, the Local Radius will be calculated for - every pixel and the values for X, Y, and Z will each be placed in a band in - the output cube. The output cube labels will contain "Local Radius" in the BandBin group, - in the band sequence of the output file. Local Radius is in meters. - - - - boolean - FALSE - Create a Pixel Resolution band - - If this parameter is true, the Pixel Resolution - will be computed for every pixel and placed in a band in the output - cube. The output cube labels will contain "Pixel Resolution" in the - BandBin group, in band sequence of the output file. PixelResolution - is in meters. - - - - boolean - FALSE - Create a Line Resolution band - - If this parameter is true, the Line Resolution will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Line Resolution" in the BandBin - group, in band sequence of the output file. LineResolution is in meters. - - - - boolean - FALSE - Create a Sample Resolution band - - If this parameter is true, the Sample Resolution will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Sample Resolution" in the - BandBin group, in band sequence of the output file. SampleResolution - is in meters. - - - - boolean - FALSE - Create a Detector Resolution band - - If this parameter is true, the Detector Resolution will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "Detector Resolution" in the BandBin - group, in band sequence of the output file. DetectorResolution is - in millimeters. - - - - boolean - FALSE - Create bands for the X, Y, and Z Spacecraft Position - - If this parameter is true, the Spacecraft Position will be calculated for - every pixel and the values for X, Y, and Z will each be placed into their own bands in - the output cube. The output cube labels will contain "Spacecraft Position X", - "Spacecraft Position Y", and "Spacecraft Position Z" in the BandBin group, in the band - sequence of the output file. Spacecraft Position is in body-fixed frame kilometer units. - - - - boolean - FALSE - Create a Spacecraft Azimuth band - - If this parameter is true, the Spacecraft Azimuth will - be computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Spacecraft Azimuth" in the - BandBin group, in band sequence of the output file. SpacecraftAzimuth - is in degrees. - - - - boolean - FALSE - Create a Slant Distance band - - If this parameter is true, the Slant Distance will be calculated for - every pixel and place in a band in the output cube. The output cube labels will contain - "Slant Distance", in the BandBin group, in the band sequence of the output file. - Slant Distance is reported in kilometers. - - - - boolean - FALSE - Create a Target Center Distance band - - If this parameter is true, the Target Center Distance will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Target Center Distance" in the BandBin - group, in band sequence of the output file. Target Center Distance is - in kilometers. - - - - boolean - FALSE - Create a SubSpacecraft Latitude band - - If this parameter is true, the SubSpacecraft Latitude will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "SubSpacecraft Laitiude" in the BandBin - group, in band sequence of the output file. SubSpacecraft Latitude is in degrees. - - - - boolean - FALSE - Create a SubSpacecraft Longitude band - - If this parameter is true, the SubSpacecraft Longitude will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "SubSpacecraft Longitude" in the BandBin - group, in band sequence of the output file. SubSpacecraft Longitude is - in degrees. - - - - boolean - FALSE - Create a Spacecraft Altitude band - - If this parameter is true, the Spacecraft Altitude will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Spacecraft Altitude" in the BandBin - group, in band sequence of the output file. Spacecraft Altitude is - in kilometers. - - - - boolean - FALSE - Create an Off Nadir Angle band - - If this parameter is true, the Off Nadir Angle will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Off Nadir Angle" in the BandBin - group, in band sequence of the output file. Off Nadir Angle is - in degrees. - - - - boolean - FALSE - Create a SubSpacecraft Ground Azimuth band - - If this parameter is true, the SubSpacecraft Ground Azimuth - will be computed for every pixel and placed in a band in the output - cube. The output cube labels will contain "SubSpacecraft Ground - Azimuth" in the BandBin group, in band sequence of the output file. - SubSpacecraftGround Azimuth is in degrees. - - - - boolean - FALSE - Create bands for the X, Y, and Z of the Sun Position - - If this parameter is true, the Sun Position will be calculated for - every pixel and the values for X, Y, and Z will each be placed into their own bands in - the output cube. The output cube labels will contain "Sun Position X", - "Sun Position Y", and "Sun Position Z" in the BandBin group, in the band - sequence of the output file. Sun Position is in kilometers. - - - - boolean - FALSE - Create a Sun Azimuth band - - If this parameter is true, the Sun Azimuth will be computed - for every pixel and placed in a band in the output cube. The output - cube labels will contain "Sun Azimuth" in the BandBin group, in band - sequence of the output file. SunAzimuth is in degrees. - - - - boolean - FALSE - Create a Solar Distance band - - If this parameter is true, the Solar Distance will be computed - for every pixel and placed in a band in the output cube. The output - cube labels will contain "Solar Distance" in the BandBin group, in band - sequence of the output file. Solar Distance is in astronomical units. - - - - boolean - FALSE - Create a SubSolar Latitude band - - If this parameter is true, the SubSolar Latitude will be computed - for every pixel and placed in a band in the output cube. The output - cube labels will contain "SubSolar Latitude" in the BandBin group, in band - sequence of the output file. SubSolar Latitude is in degrees. - - - - boolean - FALSE - Create a SubSolar Longitude band - - If this parameter is true, the SubSolar Longitude will be computed - for every pixel and placed in a band in the output cube. The output - cube labels will contain "SubSolar Longitude" in the BandBin group, in band - sequence of the output file. SubSolar Longitude is in degrees. - - - - boolean - FALSE - Create a SubSolar Ground Azimuth band - - If this parameter is true, the SubSolar Ground Azimuth - will be computed for every pixel and placed in a band in the output - cube. The output cube labels will contain "Sub Solar Ground Azimuth" - in the BandBin group, in band sequence of the output file. - SubSolarGroundAzimuth is in degrees. - - - - boolean - FALSE - Create a Phase Angle band - - If this parameter is true, the Phase Angle will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Phase Angle" in the BandBin - group, in band sequence of the output file. Phase angles are in degrees. - - - - boolean - FALSE - Create an Emission Angle band - - If this parameter is true, the Emission Angle will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Emission Angle" in the BandBin - group, in band sequence of the output file. Emission angles are in degrees. There are - certain cases where the emission angle is over 90 degrees. This is allowed as there - are processes that need these data. See main description for details. - - - - boolean - FALSE - Create an Incidence Angle band - - If this parameter is true, the Incidence Angle will be - computed for every pixel and placed in a band in the output cube. - The output cube labels will contain "Incidence Angle" in the BandBin - group, in band sequence of the output file. Incidence angles are in degrees. There are - certain cases where the incidence angle is over 90 degrees. This is allowed as there - are processes that need these data. See main description for details. - - - - boolean - FALSE - Create a Local Emission Angle band - - If this parameter is true, the Local Emission Angle will be computed for every pixel - and placed in a band in the output cube. The output cube labels - will contain "Local Emission Angle" in the BandBin group, in band - sequence of the output file. LocalEmissionAngle is in degrees. There are certain - cases where the local emission angle is over 90 degrees. This is allowed as there - are processes that need these data. See main description for details. - - - - boolean - FALSE - Create a Local Incidence Angle band - - If this parameter is true, the Local - Incidence Angle will be computed for every pixel and placed in - a band in the output cube. The output cube labels will contain - "Local Incidence Angle" in the BandBin group, in band sequence - of the output file. LocalIncidenceAngle is in degrees. There are certain - cases where the local incidence angle is over 90 degrees. This is allowed as there - are processes that need these data. See main description for details. - - - - boolean - FALSE - Create a North Azimuth band - - If this parameter is true, the North Azimuth will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "North Azimuth" in the BandBin group, - in band sequence of the output file. NorthAzimuth is in degrees. - - - - boolean - FALSE - Create bands for the X, and Y of the Distorted Focal Plane - - If this parameter is true, the Distorted Focal Plane will be calculated for - every pixel and the values for X, and Y will each be placed into their own bands in - the output cube. The output cube labels will contain "Distorted Focal Plane X", - and "Distorted Focal Plane Y" in the BandBin group, in the - band sequence of the output file. Distorted Focal Plane is in millimeters. - - - - boolean - FALSE - Create bands for the X, Y, and Z of the Undistorted Focal Plane - - If this parameter is true, the Undistorted Focal Plane will be calculated for - every pixel and the values for X, Y, and Z will each be placed into their own bands in - the output cube. The output cube labels will contain "Undistorted Focal Plane X", - "Undistorted Focal Plane Y", and "Undistorted Focal Plane Z" in the BandBin group, in the - band sequence of the output file. Undistorted Focal Plane is in millimeters. - - - - boolean - FALSE - Create an Ephemeris Time band - - If this parameter is true, the Ephemeris Time will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "Ephemeris Time" in the BandBin group, - in band sequence of the output file. Ephemeris is in seconds. - - - - boolean - FALSE - Create an UTC band - - If this parameter is true, the UTC will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "UTC" in the BandBin group, - in band sequence of the output file. UTC format consists of year, month, day, hour, - minutes, and seconds, and is output in string format. - - - - boolean - FALSE - Create a Local Solar Time band - - If this parameter is true, the Local Solar Time will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "Local Solar Time" in the BandBin group, - in band sequence of the output file. Local Solar Time is in degrees. - - - - boolean - FALSE - Create a Solar Longitude band - - If this parameter is true, the Solar Longitude will be - computed for every pixel and placed in a band in the output cube. The - output cube labels will contain "Solar Longitude" in the BandBin group, - in band sequence of the output file. Solar Longitude is in degrees. - - - - boolean - FALSE - Create a Morphology rank band, used for ranking images based on favorable local emission angles. - -

- This band is computed from the pixel resolution - and emission angle using the following formula:
-
MorphologyRank = PixelResolution / cos(EmissionAngle)

- The resulting output band can be used by automos to create a - morphologyRank-based mosaic product. This option uses the - local emission angle if the input file - is initialized (spiceinit) with an elevation model (DEM); otherwise, it - uses the default calculation (from the ellipsoid). All computed cosines are - tested for zero. If the result is zero, then the value is set to a constant - value very close to zero. -

-

-

-
- Append the following parameters to the automos command line to utilize this backplane band: -
-
- priority=band type=keyword keyname=Name keyvalue=morphologyRank criteria=lesser. -
-
- See automos documentation for further details. -

-
-
- - boolean - FALSE - Create an Albedo rank band, used for ranking images based on favorable emission and incidence angles. - -

- This band is computed from the pixel resolution, - incidence angle and emission angle - using the following formula:

- AlbedoRank = PixelResolution * [(1 / cos(EmissionAngle)) + (1 / cos(IncidenceAngle))]

- The resulting output band can be used by automos to create an albedoRank-based - mosaic product. This option always uses the - local emission angle and - local incidence angle if the input file - is initialized (spiceinit) with an elevation model (DEM); otherwise, it - uses the default calculation (from the ellipsoid). All computed cosines are - tested for zero. If the result is zero, then the value is set to a constant - value very close to zero. -

-

-

-
- Append the following parameters to the automos command line to utilize this backplane band: -
-
- priority=band type=keyword keyname=Name keyvalue=albedoRank - criteria=lesser. -
-
- See automos documentation for further details. -

-
-
-
-
- -
diff --git a/isis/src/local/apps/camdev/tsts/Makefile b/isis/src/local/apps/camdev/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/camdev/tsts/all/Makefile b/isis/src/local/apps/camdev/tsts/all/Makefile deleted file mode 100644 index 6e9579fe1480cf5c02244055f2c023ea48d64015..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/tsts/all/Makefile +++ /dev/null @@ -1,53 +0,0 @@ -APPNAME = camdev - -# 1.52587890625e-05 -all_camdev_bands.cub.TOLERANCE = .0000153 - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/camdevInput.cub \ - to=$(OUTPUT)/all_camdev_bands.cub \ - dn=yes \ - radec=yes \ - planetographiclatitude=yes \ - positiveeast360longitude=yes \ - positiveeast180longitude=yes \ - positivewest360longitude=yes \ - positivewest180longitude=yes \ - bodyfixed=yes \ - localradius=yes \ - pixelresolution=yes \ - lineresolution=yes \ - sampleresolution=yes \ - detectorresolution=yes \ - spacecraftposition=yes \ - spacecraftazimuth=yes \ - slantdistance=yes \ - targetcenterdistance=yes \ - subspacecraftlatitude=yes \ - subspacecraftlongitude=yes \ - spacecraftaltitude=yes \ - offnadirangle=yes \ - subspacecraftgroundazimuth=yes \ - sunposition=yes \ - sunazimuth=yes \ - solardistance=yes \ - subsolarlatitude=yes \ - subsolarlongitude=yes \ - subsolargroundazimuth=yes \ - phase=yes \ - emission=yes \ - incidence=yes \ - localemission=yes \ - localincidence=yes \ - northazimuth=yes \ - distortedfocalplane=yes \ - undistortedfocalplane=yes \ - ephemeristime=yes \ - utc=yes \ - localsolartime=yes \ - solarlongitude=yes \ - morphology=yes \ - albedo=yes > /dev/null; - $(RM) print.prt > /dev/null; \ No newline at end of file diff --git a/isis/src/local/apps/camdev/tsts/projected/Makefile b/isis/src/local/apps/camdev/tsts/projected/Makefile deleted file mode 100644 index d0f7851be5601e839697fb0aee12d6a968eb5a0e..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camdev/tsts/projected/Makefile +++ /dev/null @@ -1,21 +0,0 @@ -APPNAME = camdev - -# 1.52587890625e-05 -camdev_projected_bands.cub.TOLERANCE = .0000153 - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/camdevProjectedInput.cub \ - to=$(OUTPUT)/camdev_projected_bands.cub \ - source=projection \ - dn=yes \ - radec=yes \ - positiveeast360longitude=yes \ - pixelresolution=yes \ - spacecraftposition=yes \ - distortedfocalplane=yes \ - undistortedfocalplane=yes \ - ephemeristime=yes \ - utc=yes > /dev/null; - $(RM) print.prt > /dev/null; \ No newline at end of file diff --git a/isis/src/local/apps/camtest/Makefile b/isis/src/local/apps/camtest/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/camtest/camtest.cpp b/isis/src/local/apps/camtest/camtest.cpp deleted file mode 100644 index 4484d7054e8d66b935f8169c0f6bcd690ad2710f..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/camtest.cpp +++ /dev/null @@ -1,203 +0,0 @@ -#include "Isis.h" -#include "ProcessByLine.h" -#include "Camera.h" -#include "SpecialPixel.h" -#include "Pvl.h" - -using namespace std; -using namespace Isis; - -// Globals and prototypes - -//void doIt(Buffer &in, Buffer &out); - -enum OutputType { - Lat, - Lon, - Err, - Samp, - Line -}; - -/** - * Functor for collecting camera statistics. - * - * @author 2016-11-16 Jesse Mapel - * @internal - * @history 2016-11-16 Original Version. - */ -class CamTestFunctor { -public: - CamTestFunctor() {}; - ~CamTestFunctor() {}; - void setCamera(Camera* cam); - void setOutType(OutputType outType); - void setResults(Statistics* results); - void operator()(Buffer &in, Buffer &out) const; - -private: - Camera* m_cam; - OutputType m_outType; - Statistics* m_resultsStats; -}; - -void IsisMain() { - UserInterface &ui = Application::GetUserInterface(); - - ProcessByBrick p; - - // Open the input cube - Cube *iCube = p.SetInputCube("FROM"); - Camera *cam = iCube->camera(); - p.SetOutputCube("TO"); - - // Set to process by line - p.SetBrickSize(iCube->sampleCount(), 1, 1); - - IString format = ui.GetString("FORMAT"); - - OutputType outFormat = Lat; - if (format == "LAT") { - outFormat = Lat; - } - else if (format == "LON") { - outFormat = Lon; - } - else if (format == "ERR") { - outFormat = Err; - } - else if (format == "SAMP") { - outFormat = Samp; - } - else if (format == "LINE") { - outFormat = Line; - } - - // Create process functor - CamTestFunctor func; - func.setCamera(cam); - func.setOutType(outFormat); - Statistics resultsStats; - func.setResults(&resultsStats); - - p.ProcessCube(func, false); - - // Collect results - PvlGroup results = PvlGroup("CamTestResults"); - results += PvlKeyword("FailedConversionsToLatLong", toString(resultsStats.LrsPixels())); - results += PvlKeyword("FailedConversionsToSampleLine", toString(resultsStats.HrsPixels())); - results += PvlKeyword("SuccessfulConversions", toString(resultsStats.ValidPixels())); - if (outFormat == Err) { - results += PvlKeyword("Average", toString(resultsStats.Average())); - results += PvlKeyword("StandardDeviation", toString(resultsStats.StandardDeviation())); - results += PvlKeyword("Minimum", toString(resultsStats.Minimum())); - results += PvlKeyword("Maximum", toString(resultsStats.Maximum())); - } - - // Log output results - Application::Log(results); - - p.EndProcess(); -} - -// Functor Definitions - -void CamTestFunctor::setCamera(Camera* cam) { - m_cam = cam; -} - -void CamTestFunctor::setOutType(OutputType outType) { - m_outType = outType; -} - -void CamTestFunctor::setResults(Statistics* resultsStats) { - m_resultsStats = resultsStats; -} - -void CamTestFunctor::operator()(Buffer &in, Buffer &out) const { - if (in.Line() == 1) { - m_cam->SetBand(in.Band()); - } - - double line = in.Line(); - for (int samp = 0; samp < in.SampleDimension(); samp++) { - double sample = in.Sample(samp); - if (!m_cam->SetImage(sample, line)) { - out[samp] = Lrs; - continue; - } - - if (m_outType == Lat) { - out[samp] = m_cam->UniversalLatitude(); - } - else if (m_outType == Lon) { - out[samp] = m_cam->UniversalLongitude(); - } - else { - if (!m_cam->SetUniversalGround(m_cam->UniversalLatitude(), m_cam->UniversalLongitude())) { - out[samp] = Hrs; - continue; - } - - - if (m_outType == Samp) { - out[samp] = m_cam->Sample(); - } - else if (m_outType == Line) { - out[samp] = m_cam->Line(); - } - else { - double deltaS = m_cam->Sample() - sample; - double deltaL = m_cam->Line() - line; - out[samp] = sqrt(deltaS * deltaS + deltaL * deltaL); - } - - } - } - - m_resultsStats->AddData(out.DoubleBuffer(), out.size()); -} -/* Old Processing Routine -// Line processing routine -void doIt(Buffer &in, Buffer &out) { - if(in.Line() == 1) { - cam->SetBand(in.Band()); - } - - double line = in.Line(); - for(int samp = 0; samp < in.SampleDimension(); samp++) { - double sample = in.Sample(samp); - if(!cam->SetImage(sample, line)) { - out[samp] = Lrs; - continue; - } - - if(OutputFormat == Lat) { - out[samp] = cam->UniversalLatitude(); - } - else if(OutputFormat == Lon) { - out[samp] = cam->UniversalLongitude(); - } - else { - if(!cam->SetUniversalGround(cam->UniversalLatitude(), cam->UniversalLongitude())) { - out[samp] = Hrs; - continue; - } - - - if(OutputFormat == Samp) { - out[samp] = cam->Sample(); - } - else if(OutputFormat == Line) { - out[samp] = cam->Line(); - } - else { - double deltaS = cam->Sample() - sample; - double deltaL = cam->Line() - line; - out[samp] = sqrt(deltaS * deltaS + deltaL * deltaL); - } - - } - } -} -*/ \ No newline at end of file diff --git a/isis/src/local/apps/camtest/camtest.xml b/isis/src/local/apps/camtest/camtest.xml deleted file mode 100644 index b95b24d004697b9787f5937a701e78b7c5155d92..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/camtest.xml +++ /dev/null @@ -1,125 +0,0 @@ - - - - Perform basic camera accuracy tests - - - This program will do basic tests for new camera models. There are calls - to SetImage(sample, line) and SetUniversalGround(lat, lon) that are used - to test translations from image coordinates to geometric coordinates and - back. Either one of these calls can fail and are indicated by unique - special pixel values. If a call to SetImage(sample, line) fails, the - output image is set to the Low Representation Saturation (Lrs) special - value. Failures in calls to SetUniversalGround(lat, lon) are set to High - Representation Saturation (Hrs) value. The number of pixels for which - SetImage(sample, line) fails is output as FailedConversionsToLatLong. - The number of pixels for which SetImage(sample, line) succeeded but then - SetUniversalGround(lat, lon) failed is output as - FailedConversionsToSampleLine. If ERROR is chosen for FORMAT, then - statistics on the error will also be output. - - - - System - - - - - Original Version - - - Now tests the center of each pixel instead - of edges - this upset pushframe tests a lot and - produced inaccurate results. - - - Corrected a bug where the sample was off by one (used as a 0-based - index instead of 1-based); Set failures in calls to SetImage (Lrs) - and SetUniversalGround (Hrs) to special pixel values so they are - distinguishable. Documented this behaviour. - - - Now outputs statistics on the number of failed calls to SetImage and - SetUniversalGround. For FROMAT=ERROR, statistics on the - error are also output. - - - - - - - cube - input - - Input cube - - - The cube which needs to be tested - - - *.cub - - - - - cube - real - output - - Output cube - - - - - *.cub - - - - - - - string - Units of the output cube - - - - ERR - - - - - - - - - - - - diff --git a/isis/src/local/apps/camtest/tsts/Makefile b/isis/src/local/apps/camtest/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/camtest/tsts/dummy/Makefile b/isis/src/local/apps/camtest/tsts/dummy/Makefile deleted file mode 100644 index c9005c3a648d5d24233509a857d7f11687e07cd0..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/dummy/Makefile +++ /dev/null @@ -1,8 +0,0 @@ -APPNAME = camtest - -include $(ISISROOT)/make/isismake.tsts - -commands: - echo "This program has a dummy test to prevent " \ - "errors on camera model changes, and because" \ - "this program is only for internal testing." > $(OUTPUT)/truth.txt; diff --git a/isis/src/local/apps/camtest/tsts/error/Makefile b/isis/src/local/apps/camtest/tsts/error/Makefile deleted file mode 100644 index 8b6b8c885fe412c004c63d121bd7238b31092ba5..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/error/Makefile +++ /dev/null @@ -1,19 +0,0 @@ -APPNAME = camtest - -camtestTruth.cub.TOLERANCE = 1.0e-10 - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \ - to= $(OUTPUT)/camtestTruth.cub \ - format="ERR" \ - -log=$(OUTPUT)/results.pvl > /dev/null; \ - FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \ - STARTLINE=`expr "$$FIRST" - 1`; \ - `cat $(OUTPUT)/results.pvl | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \ - LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \ - ENDLINE=`expr "$$LASTLINE" + 1`; \ - EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \ - `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \ - $(RM) $(OUTPUT)/temp.pvl; diff --git a/isis/src/local/apps/camtest/tsts/latitude/Makefile b/isis/src/local/apps/camtest/tsts/latitude/Makefile deleted file mode 100644 index c1510a900cb6f289ded0568695617bca64b6e4df..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/latitude/Makefile +++ /dev/null @@ -1,17 +0,0 @@ -APPNAME = camtest - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \ - to= $(OUTPUT)/camtestTruth.cub \ - format="LAT" \ - -log=$(OUTPUT)/results.pvl > /dev/null; \ - FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \ - STARTLINE=`expr "$$FIRST" - 1`; \ - `cat $(OUTPUT)/results.pvl | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \ - LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \ - ENDLINE=`expr "$$LASTLINE" + 1`; \ - EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \ - `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \ - $(RM) $(OUTPUT)/temp.pvl; diff --git a/isis/src/local/apps/camtest/tsts/line/Makefile b/isis/src/local/apps/camtest/tsts/line/Makefile deleted file mode 100644 index e266fbd7264295f2922057488e1a576228ab946f..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/line/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -APPNAME = camtest - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \ - to= $(OUTPUT)/camtestTruth.cub \ - format="LINE" \ - -log=$(OUTPUT)/results.pvl > /dev/null; \ - FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \ - STARTLINE=`expr "$$FIRST" - 1`; \ - `cat $(OUTPUT)/results.pvl | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \ - LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \ - ENDLINE=`expr "$$LASTLINE" + 1`; \ - EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \ - `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \ - $(RM) $(OUTPUT)/temp.pvl; - diff --git a/isis/src/local/apps/camtest/tsts/longitude/Makefile b/isis/src/local/apps/camtest/tsts/longitude/Makefile deleted file mode 100644 index e1baa2e3ab4d0b5c602b1a8e45d0e34791a4b1cb..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/longitude/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -APPNAME = camtest - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \ - to= $(OUTPUT)/camtestTruth.cub \ - format="LON" \ - -log=$(OUTPUT)/results.pvl > /dev/null; \ - FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \ - STARTLINE=`expr "$$FIRST" - 1`; \ - `cat $(OUTPUT)/results.pvl | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \ - LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \ - ENDLINE=`expr "$$LASTLINE" + 1`; \ - EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \ - `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \ - $(RM) $(OUTPUT)/temp.pvl; - diff --git a/isis/src/local/apps/camtest/tsts/sample/Makefile b/isis/src/local/apps/camtest/tsts/sample/Makefile deleted file mode 100644 index ed195ab9479a4131e79e507757af4e6a46065a15..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/camtest/tsts/sample/Makefile +++ /dev/null @@ -1,18 +0,0 @@ -APPNAME = camtest - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/lor_0034974380_0x630_sci_1.cub \ - to= $(OUTPUT)/camtestTruth.cub \ - format="SAMP" \ - -log=$(OUTPUT)/results.pvl > /dev/null; \ - FIRST=`grep -m 1 -n "CamTestResults" $(OUTPUT)/results.pvl | sed 's/:.*//'`; \ - STARTLINE=`expr "$$FIRST" - 1`; \ - `cat $(OUTPUT)/results.pvl | sed "1,$${STARTLINE}d" > $(OUTPUT)/temp.pvl`; \ - LASTLINE=`grep -m 1 -n "End_Group" $(OUTPUT)/temp.pvl | sed 's/:.*//'`; \ - ENDLINE=`expr "$$LASTLINE" + 1`; \ - EOF=`wc -l $(OUTPUT)/temp.pvl | sed 's/\(^ *\)\([0-9]*\)\( .*\$\)/\2/'`; \ - `cat $(OUTPUT)/temp.pvl | sed "$${ENDLINE},$${EOF}d" > $(OUTPUT)/results.pvl`; \ - $(RM) $(OUTPUT)/temp.pvl; - diff --git a/isis/src/local/apps/cissua2isis/Makefile b/isis/src/local/apps/cissua2isis/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/cissua2isis/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/cissua2isis/cissua2isis.cpp b/isis/src/local/apps/cissua2isis/cissua2isis.cpp deleted file mode 100644 index 37061f4144dfdd6d44d4e2cbc7718a4dac83914b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/cissua2isis/cissua2isis.cpp +++ /dev/null @@ -1,216 +0,0 @@ -#include "Isis.h" - -#include - -#include "ProcessImportPds.h" -#include "Pvl.h" -#include "UserInterface.h" -#include "TextFile.h" -#include "Stretch.h" -#include "Table.h" -#include "TableRecord.h" - -using namespace std; -using namespace Isis; - -void TranslateUoACassiniLabels(Pvl &labelPvl, Cube *ocube); -vector ConvertLinePrefixPixels(Isis::PixelType pixelType, - unsigned char *data); -void FixDns8(Buffer &buf); -Stretch stretch; -void CreateStretchPairs(); - -void IsisMain() { - - ProcessImportPds p; - UserInterface &ui = Application::GetUserInterface(); - - // Get the input - FileName inFile = ui.GetFileName("FROM"); - Pvl pdsLabel; - p.SetPdsFile(inFile.expanded(), "", pdsLabel); - - CubeAttributeOutput &outAtt = ui.GetOutputAttribute("TO"); - Cube *ocube = p.SetOutputCube(ui.GetFileName("TO"), outAtt); - - // Process - p.StartProcess(); - TranslateUoACassiniLabels(pdsLabel, ocube); - - // Fix the StartTime and StopTime keywords from having the 'Z' value at the end - Pvl *outLabel = ocube->label(); - PvlGroup &inst = outLabel->findGroup("Instrument", Isis::PvlObject::Traverse); - PvlKeyword &start = inst.findKeyword("StartTime"); - PvlKeyword &stop = inst.findKeyword("StopTime"); - QString startValue = start[0]; - QString stopValue = stop[0]; - start[0] = startValue.remove(QRegExp("Z$")); - stop[0] = stopValue.remove(QRegExp("Z$")); - - // All finished with the ImportPds object - p.EndProcess(); - -} - -vector ConvertLinePrefixPixels(Isis::PixelType pixelType, - unsigned char *data) { - Isis::Buffer pixelBuf(1, 1, 1, Isis::SignedWord); - - vector calibrationPixels; - //***CHECK LABEL FOR ACTUAL ENDIAN VALUE RATHER THAN ASSUMING MSB***??? - EndianSwapper swapper("MSB"); - - vector pixel; - //12 is start byte for First Overclocked Pixel Sum in Binary Line Prefix, see SIS pg 83 - pixel.push_back(swapper.ShortInt(& (data[12]))); - //22 is start byte for Last Overclocked Pixel Sum in Binary Line Prefix, see SIS pg 83 - pixel.push_back(swapper.ShortInt(& (data[22]))); - for(int i = 0; i < (int)pixel.size(); i++) { - pixelBuf[0] = pixel[i]; - FixDns8(pixelBuf); - double pix = pixelBuf[0]; - if(pix == NULL8) calibrationPixels.push_back(NULL2); - else if(pix == LOW_REPR_SAT8) calibrationPixels.push_back(LOW_REPR_SAT2); - else if(pix == LOW_INSTR_SAT8) calibrationPixels.push_back(LOW_INSTR_SAT2); - else if(pix == HIGH_INSTR_SAT8) calibrationPixels.push_back(HIGH_INSTR_SAT2); - else if(pix == HIGH_REPR_SAT8) calibrationPixels.push_back(HIGH_REPR_SAT2); - else calibrationPixels.push_back((int)(pix + 0.5)); - } - - return calibrationPixels; -} - -void FixDns8(Buffer &buf) { - for(int i = 0; i < buf.size(); i++) { - if(buf[i] != 0) { - buf[i] = stretch.Map(buf[i]); - } - else { - buf[i] = Isis::Null; - } - } -} - -void CreateStretchPairs() { - // Set up the strech for the 8 to 12 bit conversion from file - FileName *temp = new FileName("$cassini/calibration/cisslog_???.lut"); - *temp = temp->highestVersion(); - TextFile *stretchPairs = new TextFile(temp->expanded()); - - // Create the stretch pairs - stretch.ClearPairs(); - for(int i = 0; i < stretchPairs->LineCount(); i++) { - QString line; - stretchPairs->GetLine(line, true); //assigns value to line - QStringList pairStrings = line.split(" "); - stretch.AddPair(toInt(pairStrings[0]), toInt(pairStrings[1])); - } - stretchPairs->Close(); - - // Clean up - delete temp; - delete stretchPairs; - -} - - -void TranslateUoACassiniLabels(Pvl &labelPvl, Cube *ocube) { - - //Create a PVL to store the translated labels - Pvl *outLabel = ocube->label(); - - // Get the directory where the CISS translation tables are. - PvlGroup dataDir(Preference::Preferences().findGroup("DataDirectory")); - QString transDir = (QString) dataDir["Cassini"] + "/translations/"; - - // Translate - FileName transFile(transDir + "cissua2isis.trn"); - PvlToPvlTranslationManager instrumentXlater(labelPvl, transFile.expanded()); - instrumentXlater.Auto((*outLabel)); - - PvlGroup &inst = outLabel->findGroup("Instrument", Isis::PvlObject::Traverse); - - // Create the correct SpacecraftClockCount value - PvlGroup &inInst = labelPvl.findGroup("ISIS_INSTRUMENT", Pvl::Traverse); - QString scc = inInst.findKeyword("SPACECRAFT_CLOCK_CNT_PARTITION"); - scc += "/" + (QString) inInst.findKeyword("ORIGINAL_SPACECRAFT_CLOCK_START_COUN"); - inst.addKeyword(PvlKeyword("SpacecraftClockCount", scc)); - - // dataConv is used later - QString dataConv = inInst.findKeyword("DATA_CONVERSION_TYPE"); - inst.addKeyword(PvlKeyword("DataConversionType", dataConv)); - - //to add an array of values - PvlKeyword opticsTemp(inInst.findKeyword("OPTICS_TEMPERATURE")); - opticsTemp.setName("OpticsTemperature"); - inst.addKeyword(opticsTemp); - - //two possible label names for same keyword - if(labelPvl.hasKeyword("ENCODING_TYPE")) { - QString encodingType = labelPvl.findKeyword("ENCODING_TYPE", Pvl::Traverse); - inst.addKeyword(PvlKeyword("CompressionType", encodingType)); - } - else { - QString instCmprsType = labelPvl.findKeyword("INST_CMPRS_TYPE", Pvl::Traverse); - inst.addKeyword(PvlKeyword("CompressionType", instCmprsType)); - } - - QString flightSoftware = labelPvl.findKeyword("FLIGHT_SOFTWARE_VERSION_ID", Pvl::Traverse); - inst.addKeyword(PvlKeyword("FlightSoftwareVersionId", flightSoftware)); - - // Sets the needed Kernel FrameCode - QString instrumentID = inst.findKeyword("InstrumentId"); - PvlGroup kerns("Kernels"); - if(instrumentID == "ISSNA") { - kerns += PvlKeyword("NaifFrameCode", toString(-82360)); - } - else if(instrumentID == "ISSWA") { - kerns += PvlKeyword("NaifFrameCode", toString(-82361)); - } - else { - QString msg = "CISS2ISIS only imports Cassini ISS narrow "; - msg += "angle or wide angle images"; - throw IException(IException::User, msg, _FILEINFO_); - } - outLabel->findObject("IsisCube").addGroup(kerns); - - // Create BandBin group - QString filter = labelPvl.findKeyword("BAND_BIN_FILTER_NAME", Isis::PvlObject::Traverse)[0]; - filter = filter.mid(0, 3) + "/" + filter.mid(4); - QString cameraAngleDefs; - if(instrumentID.at(3) == 'N') { - cameraAngleDefs = transDir + "narrowAngle.def"; - } - else if(instrumentID.at(3) == 'W') { - cameraAngleDefs = transDir + "wideAngle.def"; - } - double center = 0; - double width = 0; - TextFile cameraAngle(cameraAngleDefs); - int numLines = cameraAngle.LineCount(); - bool foundfilter = false; - for(int i = 0; i < numLines; i++) { - QString line; - cameraAngle.GetLine(line, true); - QStringList tokens = line.simplified().trimmed().split(" "); - - if (tokens.count() > 2 && tokens[0] == filter) { - center = toDouble(tokens[1]); - width = toDouble(tokens[2]); - foundfilter = true; - break; - } - } - if(!foundfilter) { - QString msg = "Camera Angle Lookup Failed: "; - msg += "Filter combination " + filter + " unknown."; - throw IException(IException::User, msg, _FILEINFO_); - } - PvlGroup bandBin("BandBin"); - bandBin += PvlKeyword("FilterName", filter); - bandBin += PvlKeyword("OriginalBand", "1"); - bandBin += PvlKeyword("Center", toString(center)); - bandBin += PvlKeyword("Width", toString(width)); - outLabel->findObject("IsisCube").addGroup(bandBin); - -} diff --git a/isis/src/local/apps/cissua2isis/cissua2isis.xml b/isis/src/local/apps/cissua2isis/cissua2isis.xml deleted file mode 100644 index ea2dc2786d24d6628908565ef4548214ce5d11b4..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/cissua2isis/cissua2isis.xml +++ /dev/null @@ -1,59 +0,0 @@ - - - - - - Imports a U of A cassini Isis2 cube to an Isis3 cube. - - - - Imports a University of Arizona's Isis2 cube to an Isis3 cube. - - - - - Original version, heavily based off of ciss2isis - - - Fixed name for history and removed prefix data. - - - - - Cassini - - - - - - cube - input - - Input UA cube - - - A University of Arizona Isis2 cube to be imported to an Isis3 cube. - - - *.cub - - - - - cube - real - output - - Output Isis3 cube - - - The output Isis3 cube file for the imported Isis2 cube. - - - *.cub - - - - - - diff --git a/isis/src/local/apps/cissua2isis/tsts/Makefile b/isis/src/local/apps/cissua2isis/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/cissua2isis/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/cissua2isis/tsts/default/Makefile b/isis/src/local/apps/cissua2isis/tsts/default/Makefile deleted file mode 100644 index c94d2e02e5102c8a873cb06c0251d64d76edc0f4..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/cissua2isis/tsts/default/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -APPNAME = cissua2isis - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from=$(INPUT)/N1509133834_1.IMG.cal.lev1.cub \ - to=$(OUTPUT)/N1509133834_1.IMG.cal.lev1.cub > /dev/null; - catlab from=$(OUTPUT)/N1509133834_1.IMG.cal.lev1.cub \ - to=$(OUTPUT)/N1509133834_1.IMG.cal.lev1.pvl > /dev/null; - $(APPNAME) from=$(INPUT)/N1509135639_1.IMG.cal.lev1.cub \ - to=$(OUTPUT)/N1509135639_1.IMG.cal.lev1.cub > /dev/null; - catlab from=$(OUTPUT)/N1509135639_1.IMG.cal.lev1.cub \ - to=$(OUTPUT)/N1509135639_1.IMG.cal.lev1.pvl > /dev/null; diff --git a/isis/src/local/apps/ipce/IpceMainWindow.cpp b/isis/src/local/apps/ipce/IpceMainWindow.cpp deleted file mode 100644 index 09ddcda0abbaac78dfda2e89991420415327756c..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/IpceMainWindow.cpp +++ /dev/null @@ -1,954 +0,0 @@ -/** - * @file - * $Revision: 1.19 $ - * $Date: 2010/03/22 19:44:53 $ - * - * 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 "IpceMainWindow.h" - -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include -#include - -#include "AbstractProjectItemView.h" -#include "Directory.h" -#include "FileName.h" -#include "IException.h" -#include "IString.h" -#include "MosaicSceneWidget.h" -#include "ProgressWidget.h" -#include "Project.h" -#include "ProjectItemModel.h" -#include "ProjectItemTreeView.h" -#include "SensorInfoWidget.h" -#include "TargetInfoWidget.h" - -namespace Isis { - /** - * Construct the main window. This will create a Directory, the menus, and the dock areas. - * - * @param parent The Qt-relationship parent widget (usually NULL in this case) - * - * @internal - * @history 2016-11-09 Tyler Wilson - Moved the if-block which loads a project from the - * command line from the start of the constructor to the end - * because if there were warnings and errors, they were not - * being output to the Warnings widget since the project is loaded - * before the GUI is constructed. Fixes #4488 - * @history 2016-11-09 Ian Humphrey - Added default readSettings() call to load initial - * default project window state. References #4358. - */ - IpceMainWindow::IpceMainWindow(QWidget *parent) : - QMainWindow(parent) { - m_maxThreadCount = -1; - - QMdiArea *centralWidget = new QMdiArea; - centralWidget->setActivationOrder(QMdiArea::StackingOrder); - - connect(centralWidget, SIGNAL( subWindowActivated(QMdiSubWindow *) ), - this, SLOT( onSubWindowActivated(QMdiSubWindow *) ) ); - - setCentralWidget(centralWidget); - setDockNestingEnabled(true); - - m_activeView = NULL; - - try { - m_directory = new Directory(this); - connect(m_directory, SIGNAL( newWidgetAvailable(QWidget *) ), - this, SLOT( addView(QWidget *) ) ); - connect(m_directory, SIGNAL( directoryCleaned() ), - this, SLOT( removeAllViews() ) ); - connect(m_directory->project(), SIGNAL(projectLoaded(Project *)), - this, SLOT(readSettings(Project *))); - connect(m_directory, SIGNAL( newWarning() ), - this, SLOT( raiseWarningTab() ) ); - } - catch (IException &e) { - throw IException(e, IException::Programmer, - "Could not create Directory.", _FILEINFO_); - } - - QStringList args = QCoreApplication::arguments(); -/** - if (args.count() == 2) { - qDebug() << args.last(); - m_directory->project()->open(args.last()); - } -*/ - m_projectDock = new QDockWidget("Project", this, Qt::SubWindow); - m_projectDock->setObjectName("projectDock"); - m_projectDock->setFeatures(QDockWidget::DockWidgetMovable | - QDockWidget::DockWidgetFloatable); - m_projectDock->setAllowedAreas(Qt::LeftDockWidgetArea | Qt::RightDockWidgetArea); - - ProjectItemTreeView *projectTreeView = m_directory->addProjectItemTreeView(); - projectTreeView->setInternalModel( m_directory->model() ); - projectTreeView->treeView()->expandAll(); - projectTreeView->installEventFilter(this); - m_projectDock->setWidget(projectTreeView); - - addDockWidget(Qt::LeftDockWidgetArea, m_projectDock, Qt::Horizontal); - - m_warningsDock = new QDockWidget("Warnings", this, Qt::SubWindow); - m_warningsDock->setObjectName("m_warningsDock"); - m_warningsDock->setFeatures(QDockWidget::DockWidgetClosable | - QDockWidget::DockWidgetMovable | - QDockWidget::DockWidgetFloatable); - m_warningsDock->setWhatsThis(tr("This shows notices and warnings from all operations " - "on the current project.")); - m_warningsDock->setAllowedAreas(Qt::BottomDockWidgetArea); - m_directory->setWarningContainer(m_warningsDock); - addDockWidget(Qt::BottomDockWidgetArea, m_warningsDock); - - QDockWidget *historyDock = new QDockWidget("History", this, Qt::SubWindow); - historyDock->setObjectName("historyDock"); - historyDock->setFeatures(QDockWidget::DockWidgetClosable | - QDockWidget::DockWidgetMovable | - QDockWidget::DockWidgetFloatable); - historyDock->setWhatsThis(tr("This shows all operations performed on the current project.")); - historyDock->setAllowedAreas(Qt::BottomDockWidgetArea); - addDockWidget(Qt::BottomDockWidgetArea, historyDock); - m_directory->setHistoryContainer(historyDock); - tabifyDockWidget(m_warningsDock, historyDock); - - QDockWidget *progressDock = new QDockWidget("Progress", this, Qt::SubWindow); - progressDock->setObjectName("progressDock"); - progressDock->setFeatures(QDockWidget::DockWidgetClosable | - QDockWidget::DockWidgetMovable | - QDockWidget::DockWidgetFloatable); - progressDock->setAllowedAreas(Qt::BottomDockWidgetArea); - //m_directory->setProgressContainer(progressDock); - addDockWidget(Qt::BottomDockWidgetArea, progressDock); - tabifyDockWidget(historyDock, progressDock); - - m_warningsDock->raise(); - - // Read settings from the default project, "Project" - readSettings(m_directory->project()); - - setTabPosition(Qt::TopDockWidgetArea, QTabWidget::North); - setCorner(Qt::TopLeftCorner, Qt::LeftDockWidgetArea); - setCorner(Qt::TopRightCorner, Qt::RightDockWidgetArea); - setCorner(Qt::BottomLeftCorner, Qt::BottomDockWidgetArea); - setCorner(Qt::BottomRightCorner, Qt::BottomDockWidgetArea); - - statusBar()->showMessage("Ready"); - statusBar()->addWidget(m_directory->project()->progress()); - - foreach (QProgressBar *progressBar, m_directory->progressBars()) { - statusBar()->addWidget(progressBar); - } - - createMenus(); - initializeActions(); - updateMenuActions(); - - m_permToolBar = new QToolBar(this); - m_activeToolBar = new QToolBar(this); - m_toolPad = new QToolBar(this); - - QSize iconSize(25, 45); - - m_permToolBar->setIconSize(iconSize); - m_activeToolBar->setIconSize(iconSize); - m_toolPad->setIconSize(iconSize); - - m_permToolBar->setObjectName("PermanentToolBar"); - m_activeToolBar->setObjectName("ActiveToolBar"); - m_toolPad->setObjectName("ToolPad"); - - addToolBar(m_permToolBar); - addToolBar(m_activeToolBar); - addToolBar(m_toolPad); - updateToolBarActions(); - - setTabbedViewMode(); - centralWidget->setTabsMovable(true); - centralWidget->setTabsClosable(true); - - if (args.count() == 2) { - m_directory->project()->open(args.last()); - } - - // ken testing If this is used, we will not need to call updateMenuActions() or updateToolBar() - // above. They are both called from setActiveView. - // setActiveView(projectTreeView); - // ken testing - } - - - /** - * This is connected from Directory's newWidgetAvailable signal and called when re-attaching a - * view which was detached from the MDI main window. - * - * @param[in] newWidget (QWidget *) - */ - void IpceMainWindow::addView(QWidget *newWidget) { - if ( qobject_cast(newWidget) || - qobject_cast(newWidget) ) { - QDockWidget *dock = new QDockWidget( newWidget->windowTitle() ); - dock->setAttribute(Qt::WA_DeleteOnClose, true); - dock->setWidget(newWidget); - dock->setObjectName(newWidget->windowTitle()); - splitDockWidget(m_projectDock, dock, Qt::Vertical); - } - else { - if ( QMdiArea *mdiArea = qobject_cast( centralWidget() ) ) { - mdiArea->addSubWindow(newWidget); - newWidget->show(); - mdiArea->setActiveSubWindow(qobject_cast(newWidget)); - setActiveView(qobject_cast(newWidget)); - } - } - } - /** - * Removes All Views in main window, connected to directory signal directoryCleaned() - */ - void IpceMainWindow::removeAllViews() { - setWindowTitle("ipce"); - QMdiArea *mdiArea = qobject_cast( centralWidget() ); - if (mdiArea){ - QMdiSubWindow* window = new QMdiSubWindow(); - window->show(); - window->activateWindow(); - mdiArea->addSubWindow(window); - mdiArea->closeAllSubWindows(); - delete window; - } - if (!m_detachedViews.isEmpty()) { - foreach ( QMainWindow* view, m_detachedViews ) { - view->close(); - } - } - - QList docks = tabifiedDockWidgets(m_projectDock); - if(docks.count() > 1) { - foreach ( QDockWidget* widget, docks ) { - if(widget != m_projectDock) { - delete widget; - } - } - } - } - - - /** - * Cleans up the directory. - */ - IpceMainWindow::~IpceMainWindow() { - m_directory->deleteLater(); - } - - - /** - * Sets the active view and updates the toolbars and menus. - * - * @param[in] view (AbstractProjectItemView *) The active view. - */ - void IpceMainWindow::setActiveView(AbstractProjectItemView *view) { - m_activeView = view; - updateMenuActions(); - updateToolBarActions(); - } - - - /** - * Clears all the menus, then populates the menus with QActions from - * several sources. The QActions come from an internal list of - * QActions, the Directory, and the active view. - */ - void IpceMainWindow::updateMenuActions() { - - m_fileMenu->clear(); - // Get Directory FileMenu actions - foreach ( QAction *action, m_directory->fileMenuActions() ) { - m_fileMenu->addAction(action); - } - m_fileMenu->addSeparator(); - // Get FileMenu actions for the active view (eg. CubeDnView, Footprint2DView) - if (m_activeView) { - foreach ( QAction *action, m_activeView->fileMenuActions() ) { - m_fileMenu->addAction(action); - } - } - m_fileMenu->addSeparator(); - // Get FileMenu actions from the ipceMainWindow, Exit is the only action - foreach ( QAction *action, m_fileMenuActions ) { - m_fileMenu->addAction(action); - } - - m_projectMenu->clear(); - // Get Project menu actions from Directory - foreach ( QAction *action, m_directory->projectMenuActions() ) { - m_projectMenu->addAction(action); - } - m_projectMenu->addSeparator(); - // Get Project menu actions from the active view - if (m_activeView) { - foreach ( QAction *action, m_activeView->projectMenuActions() ) { - m_projectMenu->addAction(action); - } - } - m_projectMenu->addSeparator(); - // Get Project menu actions from IpceMainWindow - foreach ( QAction *action, m_projectMenuActions ) { - m_projectMenu->addAction(action); - } - - m_editMenu->clear(); - // Get Edit menu actions from Directory - foreach ( QAction *action, m_directory->editMenuActions() ) { - m_editMenu->addAction(action); - } - m_editMenu->addSeparator(); - // Get Edit menu actions from active view - if (m_activeView) { - foreach ( QAction *action, m_activeView->editMenuActions() ) { - m_editMenu->addAction(action); - } - } - m_editMenu->addSeparator(); - // Get Edit menu actions from IpceMainWindow - foreach ( QAction *action, m_editMenuActions ) { - m_editMenu->addAction(action); - } - - m_viewMenu->clear(); - // Get View menu actions from Directory - foreach ( QAction *action, m_directory->viewMenuActions() ) { - m_viewMenu->addAction(action); - } - m_viewMenu->addSeparator(); - // Get View menu actions from IpceMainWindow - foreach ( QAction *action, m_viewMenuActions ) { - m_viewMenu->addAction(action); - } - m_viewMenu->addSeparator(); - // Get View menu actions from active view - if (m_activeView) { - foreach ( QAction *action, m_activeView->viewMenuActions() ) { - m_viewMenu->addAction(action); - } - } - - m_settingsMenu->clear(); - // Get Settings menu actions from Directory - foreach ( QAction *action, m_directory->settingsMenuActions() ) { - m_settingsMenu->addAction(action); - } - m_settingsMenu->addSeparator(); - // Get Settings menu actions from active view - if (m_activeView) { - foreach ( QAction *action, m_activeView->settingsMenuActions() ) { - m_settingsMenu->addAction(action); - } - } - m_settingsMenu->addSeparator(); - // Get Settings menu actions from IpceMainWindow - foreach ( QAction *action, m_settingsMenuActions ) { - m_settingsMenu->addAction(action); - } - - m_helpMenu->clear(); - // Get Help menu actions from Directory - foreach ( QAction *action, m_directory->helpMenuActions() ) { - m_helpMenu->addAction(action); - } - m_helpMenu->addSeparator(); - // Get Help menu actions from active view - if (m_activeView) { - foreach ( QAction *action, m_activeView->helpMenuActions() ) { - m_helpMenu->addAction(action); - } - } - m_helpMenu->addSeparator(); - // Get Help menu actions from IpceMainWindow - foreach ( QAction *action, m_helpMenuActions ) { - m_helpMenu->addAction(action); - } - } - - - /** - * Clears the tool bars and repopulates them with QActions from - * several sources. Actions are taken from an internal list of - * QActions, the Directory, and the active view. - */ - void IpceMainWindow::updateToolBarActions() { - - m_permToolBar->clear(); - foreach ( QAction *action, m_directory->permToolBarActions() ) { - m_permToolBar->addAction(action); - } - foreach (QAction *action, m_permToolBarActions) { - m_permToolBar->addAction(action); - } - m_permToolBar->addSeparator(); - if (m_activeView) { - foreach ( QAction *action, m_activeView->permToolBarActions() ) { - m_permToolBar->addAction(action); - } - } - - m_activeToolBar->clear(); - if (m_activeView) { - foreach ( QAction *action, m_activeView->activeToolBarActions() ) { - m_activeToolBar->addAction(action); - } - } - - m_toolPad->clear(); - if (m_activeView) { - foreach ( QAction *action, m_activeView->toolPadActions() ) { - m_toolPad->addAction(action); - } - } - } - - - /** - * Filters out events from views so they can be handled by the main - * window. Filters out DragEnter Drop and ContextMenu events from - * views. - * - * @param[in] watched (QObject *) The object being filtered. - * @param[in] event (QEvent *) The event that may be filtered. - */ - bool IpceMainWindow::eventFilter(QObject *watched, QEvent *event) { - if ( AbstractProjectItemView *view = qobject_cast(watched) ) { - if (event->type() == QEvent::DragEnter) { - return true; - } - else if (event->type() == QEvent::Drop) { - return true; - } - else if (event->type() == QEvent::ContextMenu) { - QMenu contextMenu; - - QList viewActions = view->contextMenuActions(); - - if ( !viewActions.isEmpty() ) { - foreach (QAction *action, viewActions) { - if (action) { - contextMenu.addAction(action); - } - else { - contextMenu.addSeparator(); - } - } - contextMenu.addSeparator(); - } - - QList workOrders = m_directory->supportedActions( view->currentItem() ); - - if ( !workOrders.isEmpty() ) { - foreach (QAction *action, workOrders) { - contextMenu.addAction(action); - } - contextMenu.addSeparator(); - } - - contextMenu.exec( static_cast(event)->globalPos() ); - - return true; - } - } - - return QMainWindow::eventFilter(watched, event); - } - - - /** - * This method takes the max thread count setting and asks - * QtConcurrent to respect it. - */ - void IpceMainWindow::applyMaxThreadCount() { - if (m_maxThreadCount <= 1) { - // Allow QtConcurrent to use every core and starve the GUI thread - QThreadPool::globalInstance()->setMaxThreadCount(QThread::idealThreadCount()); - } - else { - // subtract 1 to account for the GUI thread - QThreadPool::globalInstance()->setMaxThreadCount(m_maxThreadCount - 1); - } - } - - - /** - * Initializes the internal lists of actions of the main window for - * use in the menus and toolbars. - */ - void IpceMainWindow::initializeActions() { - QAction *exitAction = new QAction("E&xit", this); - exitAction->setIcon( QIcon::fromTheme("window-close") ); - connect(exitAction, SIGNAL(triggered()), this, SLOT(close())); - m_fileMenuActions.append(exitAction); - m_permToolBarActions.append(exitAction); - - QAction *undoAction = m_directory->undoAction(); - undoAction->setShortcut(Qt::Key_Z | Qt::CTRL); - - QAction *redoAction = m_directory->redoAction(); - redoAction->setShortcut(Qt::Key_Z | Qt::CTRL | Qt::SHIFT); - - m_editMenuActions.append(undoAction); - m_editMenuActions.append(redoAction); - - - QAction *viewModeAction = new QAction("Toggle View Mode", this); - connect(viewModeAction, SIGNAL( triggered() ), - this, SLOT( toggleViewMode() ) ); - m_viewMenuActions.append(viewModeAction); - - m_cascadeViewsAction = new QAction("Cascade Views", this); - connect(m_cascadeViewsAction, SIGNAL( triggered() ), - centralWidget(), SLOT( cascadeSubWindows() ) ); - m_viewMenuActions.append(m_cascadeViewsAction); - - m_tileViewsAction = new QAction("Tile Views", this); - connect(m_tileViewsAction, SIGNAL( triggered() ), - centralWidget(), SLOT( tileSubWindows() ) ); - m_viewMenuActions.append(m_tileViewsAction); - - QAction *detachActiveViewAction = new QAction("Detach Active View", this); - connect(detachActiveViewAction, SIGNAL( triggered() ), - this, SLOT( detachActiveView() ) ); - m_viewMenuActions.append(detachActiveViewAction); - - QAction *threadLimitAction = new QAction("Set Thread &Limit", this); - connect(threadLimitAction, SIGNAL(triggered()), - this, SLOT(configureThreadLimit())); - - m_settingsMenuActions.append(m_directory->project()->userPreferenceActions()); - m_settingsMenuActions.append(threadLimitAction); - - QAction *activateWhatsThisAct = new QAction("&What's This", this); - activateWhatsThisAct->setShortcut(Qt::SHIFT | Qt::Key_F1); - activateWhatsThisAct->setIcon( - QPixmap(FileName("$base/icons/contexthelp.png").expanded())); - activateWhatsThisAct->setToolTip("Activate What's This and click on parts " - "this program to see more information about them"); - connect(activateWhatsThisAct, SIGNAL(triggered()), this, SLOT(enterWhatsThisMode())); - - m_helpMenuActions.append(activateWhatsThisAct); - } - - - /** - * Creates the main menus of the menu bar. - */ - void IpceMainWindow::createMenus() { - m_fileMenu = menuBar()->addMenu(tr("&File")); - m_fileMenu->setObjectName("fileMenu"); - - m_projectMenu = menuBar()->addMenu(tr("&Project")); - m_projectMenu->setObjectName("projectMenu"); - - // Allow tool tips to be displayed for the project menu's actions (e.g. "Bundle Adjustment") - // This is a work around for Qt's what this text not working on disabled actions - // (even though the Qt documentation says it should work on disabled QAction's). - m_projectMenu->setToolTipsVisible(true); - - m_editMenu = menuBar()->addMenu(tr("&Edit")); - m_editMenu->setObjectName("editMenu"); - - m_viewMenu = menuBar()->addMenu("&View"); - m_viewMenu->setObjectName("viewMenu"); - - m_settingsMenu = menuBar()->addMenu("&Settings"); - m_settingsMenu->setObjectName("settingsMenu"); - - m_helpMenu = menuBar()->addMenu("&Help"); - m_helpMenu->setObjectName("helpMenu"); - } - - - /** - * Write the window positioning and state information out to a - * config file. This allows us to restore the settings when we - * create another main window (the next time this program is run). - * - * The state will be saved according to the currently loaded project and its name. - * - * When no project is loaded (i.e. the default "Project" is open), the config file used is - * $HOME/.Isis/$APPNAME/$APPNAME_Project.config. - * When a project, ProjectName, is loaded, the config file used is - * $HOME/.Isis/$APPNAME/$APPNAME_ProjectName.config. - * - * @param[in] project Pointer to the project that is currently loaded (default is "Project") - * - * @internal - * @history 2016-11-09 Ian Humphrey - Settings are now written according to the loaded project. - * References #4358. - */ - void IpceMainWindow::writeSettings(const Project *project) const { - // Ensure that we are not using a NULL pointer - if (!project) { - QString msg = "Cannot write settings with a NULL Project pointer."; - throw IException(IException::Programmer, msg, _FILEINFO_); - } - QString appName = QApplication::applicationName(); - QSettings settings( - FileName("$HOME/.Isis/" + appName + "/" + appName + "_" + project->name() + ".config") - .expanded(), - QSettings::NativeFormat); - - settings.setValue("geometry", saveGeometry()); - settings.setValue("windowState", saveState()); - settings.setValue("size", size()); - settings.setValue("pos", pos()); - - settings.setValue("maxThreadCount", m_maxThreadCount); - } - - - /** - * Read the window positioning and state information from the config file. - * - * When running ipce without opening a project, the config file read is - * $HOME/.Isis/$APPNAME/$APPNAME_Project.config - * Otherwise, when running ipce and opening a project (ProjectName), the config file read is - * $HOME/.Isis/$APPNAME/$APPNAME_ProjectName.config - * - * @param[in] project (Project *) The project that was loaded. - * - * @internal - * @history Ian Humphrey - Settings are now read on a project name basis. References #4358. - */ - void IpceMainWindow::readSettings(Project *project) { - // Ensure that the Project pointer is not NULL - if (!project) { - QString msg = "Cannot read settings with a NULL Project pointer."; - throw IException(IException::Programmer, msg, _FILEINFO_); - } - if (project->name() == "Project") { - setWindowTitle("ipce"); - } - else { - setWindowTitle( project->name() ); - } - QString appName = QApplication::applicationName(); - QSettings settings( - FileName("$HOME/.Isis/" + appName + "/" + appName + "_" + project->name() + ".config") - .expanded(), - QSettings::NativeFormat); - - restoreGeometry(settings.value("geometry").toByteArray()); - restoreState(settings.value("windowState").toByteArray()); - - // The geom/state isn't enough for main windows to correctly remember - // their position and size, so let's restore those on top of - // the geom and state. - if (!settings.value("pos").toPoint().isNull()) - move(settings.value("pos").toPoint()); - - resize(settings.value("size", QSize(800, 600)).toSize()); - m_maxThreadCount = settings.value("maxThreadCount", m_maxThreadCount).toInt(); - applyMaxThreadCount(); - } - - - /** - * Handle the close event by writing the window positioning and - * state information before forwarding the event to the QMainWindow. - */ - void IpceMainWindow::closeEvent(QCloseEvent *event) { - if (!m_directory->project()->isClean()) { - QMessageBox *box = new QMessageBox(QMessageBox::NoIcon, QString("Current Project Has Unsaved Changes"), - QString("Would you like to save your current project?"), - NULL, qobject_cast(parent()), Qt::Dialog); - QPushButton *save = box->addButton("Save", QMessageBox::AcceptRole); - box->addButton("Don't Save", QMessageBox::RejectRole); - QPushButton *cancel = box->addButton("Cancel", QMessageBox::NoRole); - box->exec(); - - if (box->clickedButton() == (QAbstractButton*)cancel) { - event->ignore(); - return; - } - else if (box->clickedButton() == (QAbstractButton*)save) { - m_directory->project()->save(); - } - } - m_directory->project()->clear(); - writeSettings(m_directory->project()); - QMainWindow::closeEvent(event); - - } - - - /** - * Ask the user how many threads to use in this program. This - * includes the GUI thread. - */ - void IpceMainWindow::configureThreadLimit() { - bool ok = false; - - QStringList options; - - int current = 0; - options << tr("Use all available"); - - for(int i = 1; i < 24; i++) { - QString option = tr("Use %1 threads").arg(i + 1); - - options << option; - if(m_maxThreadCount == i + 1) - current = i; - } - - QString res = QInputDialog::getItem(NULL, tr("Concurrency"), - tr("Set the number of threads to use"), - options, current, false, &ok); - - if (ok) { - m_maxThreadCount = options.indexOf(res) + 1; - - if (m_maxThreadCount <= 1) - m_maxThreadCount = -1; - - applyMaxThreadCount(); - } - } - - - /** - * Activate the What's This? cursor. This is useful for he What's - * This? action in the help menu. - */ - void IpceMainWindow::enterWhatsThisMode() { - QWhatsThis::enterWhatsThisMode(); - } - - - /** - * Slot to connect to the subWindowActivated signal from the central - * QMdiArea. Updates the active view to the active sub window, or - * sets it to null if the active window is not an AbstractProjectItemView. - * - * @param[in] window (QMdiSubWindow *) The active sub window. - */ - void IpceMainWindow::onSubWindowActivated(QMdiSubWindow * window) { - if (window) { - setActiveView( qobject_cast( window->widget() ) ); - } - else { - setActiveView(0); - } - } - - - /** - * Toggles the view mode of the central QMdiArea between tabbed and - * sub window mode. - */ - void IpceMainWindow::toggleViewMode() { - QMdiArea *mdiArea = qobject_cast( centralWidget() ); - if (mdiArea->viewMode() == QMdiArea::SubWindowView) { - setTabbedViewMode(); - } - else { - setSubWindowViewMode(); - } - } - - - /** - * Sets the QMdiArea in the central widget to the tabbed view mode - * and updates the appropriate actions. - */ - void IpceMainWindow::setTabbedViewMode() { - QMdiArea *mdiArea = qobject_cast( centralWidget() ); - mdiArea->setViewMode(QMdiArea::TabbedView); - m_cascadeViewsAction->setEnabled(false); - m_tileViewsAction->setEnabled(false); - } - - - /** - * Sets the QMdiArea in the central widget to the sub window view - * mode and updates the appropriate actions. - */ - void IpceMainWindow::setSubWindowViewMode() { - QMdiArea *mdiArea = qobject_cast( centralWidget() ); - mdiArea->setViewMode(QMdiArea::SubWindowView); - m_cascadeViewsAction->setEnabled(true); - m_tileViewsAction->setEnabled(true); - } - - - /** - * Moves the active view from the mdi area to its own independent - * window. The view, its toolbars, and menu actions, are removed - * from the main window and placed in an independent - * QMainWindow. The new window contains the view as well as its - * toolbars and menu actions. A detached view will not be set as the - * active view when it is activated. - */ - void IpceMainWindow::detachActiveView() { - AbstractProjectItemView *view = m_activeView; - - if (!m_activeView) { - return; - } - - QMdiArea *mdiArea = qobject_cast( centralWidget() ); - if (mdiArea) { - mdiArea->removeSubWindow(view); - mdiArea->closeActiveSubWindow(); - } - - QMainWindow *newWindow = new QMainWindow(this, Qt::Window); - m_detachedViews.append(newWindow); - newWindow->setCentralWidget(view); - newWindow->setWindowTitle( view->windowTitle() ); - - if ( !view->permToolBarActions().isEmpty() ) { - QToolBar *permToolBar = new QToolBar(newWindow); - foreach ( QAction *action, view->permToolBarActions() ) { - permToolBar->addAction(action); - } - newWindow->addToolBar(permToolBar); - } - - if ( !view->activeToolBarActions().isEmpty() ) { - QToolBar *activeToolBar = new QToolBar(newWindow); - foreach ( QAction *action, view->activeToolBarActions() ) { - activeToolBar->addAction(action); - } - newWindow->addToolBar(activeToolBar); - } - - if ( !view->toolPadActions().isEmpty() ) { - QToolBar *toolPad = new QToolBar(newWindow); - foreach ( QAction *action, view->toolPadActions() ) { - toolPad->addAction(action); - } - newWindow->addToolBar(Qt::RightToolBarArea, toolPad); - } - - QMenuBar *menuBar = new QMenuBar(newWindow); - newWindow->setMenuBar(menuBar); - - if ( !view->fileMenuActions().isEmpty() ) { - QMenu *fileMenu = new QMenu("&File", newWindow); - foreach ( QAction *action, view->fileMenuActions() ) { - fileMenu->addAction(action); - } - menuBar->addMenu(fileMenu); - } - - if ( !view->projectMenuActions().isEmpty() ) { - QMenu *projectMenu = new QMenu("&Project", newWindow); - foreach ( QAction *action, view->projectMenuActions() ) { - projectMenu->addAction(action); - } - menuBar->addMenu(projectMenu); - } - - if ( !view->editMenuActions().isEmpty() ) { - QMenu *editMenu = new QMenu("&Edit", newWindow); - foreach ( QAction *action, view->editMenuActions() ) { - editMenu->addAction(action); - } - menuBar->addMenu(editMenu); - } - - QAction *reattachAction = new QAction("Reattach View", newWindow); - connect( reattachAction, SIGNAL( triggered() ), - this, SLOT( reattachView() ) ); - - QMenu *viewMenu = new QMenu("&View", newWindow); - - viewMenu->addAction(reattachAction); - - if ( !view->viewMenuActions().isEmpty() ) { - foreach ( QAction *action, view->viewMenuActions() ) { - viewMenu->addAction(action); - } - } - menuBar->addMenu(viewMenu); - - if ( !view->settingsMenuActions().isEmpty() ) { - QMenu *settingsMenu = new QMenu("&Settings", newWindow); - foreach ( QAction *action, view->settingsMenuActions() ) { - settingsMenu->addAction(action); - } - menuBar->addMenu(settingsMenu); - } - - if ( !view->helpMenuActions().isEmpty() ) { - QMenu *helpMenu = new QMenu("&Help", newWindow); - foreach ( QAction *action, view->helpMenuActions() ) { - helpMenu->addAction(action); - } - menuBar->addMenu(helpMenu); - } - newWindow->show(); - - } - - - /** - * Reattaches a detached view. This slot can only be called by a QAction - * from a QMainWindow that contains the view. The view is added to - * the main window and the window that previously contained it is - * deleted. - */ - void IpceMainWindow::reattachView() { - QAction *reattachAction = qobject_cast( sender() ); - if (!reattachAction) { - return; - } - - QMainWindow *viewWindow = qobject_cast( reattachAction->parent() ); - if (!viewWindow) { - return; - } - - AbstractProjectItemView *view = qobject_cast( viewWindow->centralWidget() ); - if (!view) { - return; - } - - view->setParent(this); - viewWindow->deleteLater(); - - addView(view); - } - - -/** - * Raises the warningWidget to the front of the tabs. Connected to warning signal from directory. - */ - void IpceMainWindow::raiseWarningTab() { - m_warningsDock->raise(); - } - -} diff --git a/isis/src/local/apps/ipce/IpceMainWindow.h b/isis/src/local/apps/ipce/IpceMainWindow.h deleted file mode 100644 index 629cee400d3c8c23a7c40b414b54a9c24d36d57d..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/IpceMainWindow.h +++ /dev/null @@ -1,193 +0,0 @@ -#ifndef IpceMainWindow_H -#define IpceMainWindow_H -/** - * @file - * $Revision: 1.19 $ - * $Date: 2010/03/22 19:44:53 $ - * - * 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 -#include -#include -#include - -namespace Isis { - class AbstractProjectItemView; - class Directory; - class Project; - - /** - * The main window for the ipce appication. This handles most of the top-level GUI aspects of the program. - * - * @author 2012-??-?? Steven Lambright and Stuart Sides - * - * @internal - * @history 2012-07-27 Kimberly Oyama and Steven Lambright - Removed progress and warnings - * tab widgets. They are now dock widgets. - * @history 2012-08-28 Tracie Sucharski - The Directory no longer takes a container it its - * constructor. - * @history 2012-09-17 Steven Lambright - Dock widgets now delete themselves on close. This - * gives the user the correct options when proceeding in the interface, - * but undo/redo are not implemented (it needs to eventually be - * encapsulated in a work order). The undo/redo didn't work correctly - * anyways before setting this flag, so it's an improvement. Example - * change: If I close Footprint View 1, I'm no longer asked if I want - * to view images in footprint view 1. - * @history 2015-10-05 Jeffrey Covington - Replaced the ProjectTreeWidget - * with a ProjectItemTreeView. Added the - * eventFilter() method for intercepting some - * events from views. - * @history 2016-01-04 Jeffrey Covington - Added a QMdiArea as the central widget - * of the main window. The menus and toolbars are now solely - * handled by the main window. Menus, context menus, and - * toolbars are populated with actions recieved from the Directory - * the active view, and the main window. Both WorkOrders and - * regular QActions can be used in menus and toolbars. Views can - * now be detached from the main window into their own independent - * window with internalized menus and toolbars. - * @history 2016-10-20 Tracie Sucharski - Clean up included headers that are commented out, - * updated for Qt5, comment call to saveState for window which caused - * errors. TODO: Determine problem with saveState call. - * @history 2016-11-09 Tyler Wilson - Move a segment of code in the constructor from the beginning - * to the end. This code loads a project from the command line instead of the - * GUI, and it wasn't outputting warnings/errors to the warnings/error tab - * when the project was loaded because it was being called before the GUI - * was created. Fixes #4488. References #4526, ##4487. - * @history 2016-11-09 Ian Humphrey - Modified readSettings() and writeSettings() to take in - * Project pointers to be used to properly read and write settings - * for the IpceMainWindow. Note that when running ipce without - * opening a Project, the config file ipce_Project.config is used. - * Otherwise, when a project is open, the config file - * ipce_ProjectName will be used to restore window geom. - * The m_permToolBar, m_activeToolBar, and m_toolPad now have object - * names set, so the saveState() call within writeSettings() now works. - * Fixes #4358. - * @history 2016-12-09 Tracie Sucharski - One of the previous 2 changes caused a problem with - * view toolbars not to be restored. Added setActiveSubWindow and - * show to the ::addView method. Fixes #4546. - * @history 2017-04-17 Ian Humphrey - Updated createMenus() to set tool tips (hover text) - * visible so the JigsawWorkOrder tool tip can be displayed to user - * (which indicates why it is disabled by default). Fixes #4749. - * @history 2017-06-22 Tracie Sucharski - Renamed from CNetSuiteMainWindow when application was - * renamed to ipce from cnetsuite. - * @history 2017-07-12 Cole Neubauer - Added removeAllViews function and m_detachedViews member - * variable. Needed to clear out an old projects views from the window - * when opening a new project. Fixes #4969 - * @history 2017-07-14 Cole Neubauer - Added private slot raiseWarningTab to be able to raise - * the warning tab when a new warning happens. - * Fixes #5041 - * @history 2017-07-14 Cole Neubauer - Set Object name for Target/Sensor Widgets in addView - * Fixes #5059 - * Fixes #5041 - * @history 2017-07-26 Cole Neubauer - Changed the closevent funtion to check if a project is - * and prompt user accordingly Fixes #4960 - * @history 2017-08-09 Marjorie Hahn - Hard-coded the size of the icons in the toolbar to - * temporarily fix the shift in size when switching between views - * until docked widgets are implemented. Fixes #5084. - */ - class IpceMainWindow : public QMainWindow { - Q_OBJECT - public: - explicit IpceMainWindow(QWidget *parent = 0); - ~IpceMainWindow(); - - public slots: - void addView(QWidget *newWidget); - void removeAllViews(); - - void setActiveView(AbstractProjectItemView *view); - void updateMenuActions(); - void updateToolBarActions(); - void readSettings(Project *); - - protected: - void closeEvent(QCloseEvent *event); - bool eventFilter(QObject *watched, QEvent *event); - - private slots: - void configureThreadLimit(); - void enterWhatsThisMode(); - void onSubWindowActivated(QMdiSubWindow *); - - void toggleViewMode(); - void setTabbedViewMode(); - void setSubWindowViewMode(); - - void detachActiveView(); - void reattachView(); - - void raiseWarningTab(); - private: - Q_DISABLE_COPY(IpceMainWindow); - - void applyMaxThreadCount(); - void createMenus(); - void writeSettings(const Project *project) const; - - void initializeActions(); - - private: - /** - * The directory stores all of the work orders that this program is capable of doing. This - * drives most of the functionality. - */ - QPointer m_directory; - - QDockWidget *m_projectDock; - QList m_detachedViews; //!< List to keep track of any detached main windows - QDockWidget *m_warningsDock; - /** - * This is the "goal" or "estimated" maximum number of active threads running in this program - * at once. For now, the GUI consumes 1 thread and QtConcurrent - * (QThreadPool::globalInstance) consumes the remaining threads. Anything <= 1 means that we - * should perform a best-guess for best perfomance. - */ - int m_maxThreadCount; - - QToolBar *m_permToolBar; //!< The toolbar for actions that rarely need to be changed. - QToolBar *m_activeToolBar; // m_fileMenuActions; //!< Internal list of file actions - QList m_projectMenuActions;//!< Internal list of project actions - QList m_editMenuActions;//!< Internal list of edit actions - QList m_viewMenuActions;//!< Internal list of view actions - QList m_settingsMenuActions;//!< Internal list of settings actions - QList m_helpMenuActions;//!< Internal list of help actions - - QList m_permToolBarActions;//!< Internal list of permanent toolbar actions - QList m_activeToolBarActions;//!< Internal list of active toolbar actions - QList m_toolPadActions;//!< Internal list of toolpad actions - - QAction *m_cascadeViewsAction; //!< Action that cascades the mdi area - QAction *m_tileViewsAction; //!< Action that tiles the mdi area - - AbstractProjectItemView *m_activeView; //!< The active view - }; -} - -#endif // IpceMainWindow_H diff --git a/isis/src/local/apps/ipce/Makefile b/isis/src/local/apps/ipce/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/ipce/ProgressWidget.cpp b/isis/src/local/apps/ipce/ProgressWidget.cpp deleted file mode 100644 index 08c264ae23ee04cad1c597f0914d504286f0cfe8..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/ProgressWidget.cpp +++ /dev/null @@ -1,17 +0,0 @@ -#include "ProgressWidget.h" - -#include - -#include - -namespace Isis { - ProgressWidget::ProgressWidget(QWidget *parent) : QWidget(parent) { - - } - - - - ProgressWidget::~ProgressWidget() { - - } -} diff --git a/isis/src/local/apps/ipce/ProgressWidget.h b/isis/src/local/apps/ipce/ProgressWidget.h deleted file mode 100644 index 0e1ade1528f1ff2fa1c45b07a4bccaf00669a3bc..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/ProgressWidget.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef ProgressWidget_H -#define ProgressWidget_H - -#include - -namespace Isis { - - /** - * @brief Warning Widget for ipce - * - * @author 2012-05-29 Steven Lambright and Tracie Sucharski - * - * @internal - */ - class ProgressWidget : public QWidget { - Q_OBJECT - public: - ProgressWidget(QWidget *parent = 0); - virtual ~ProgressWidget(); - - - private: - Q_DISABLE_COPY(ProgressWidget); - QList m_progressBars; - }; -} - -#endif - diff --git a/isis/src/local/apps/ipce/WarningTreeWidget.cpp b/isis/src/local/apps/ipce/WarningTreeWidget.cpp deleted file mode 100644 index 9e8549fd18e9ce57706dac46529429b68d578757..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/WarningTreeWidget.cpp +++ /dev/null @@ -1,34 +0,0 @@ -#include "WarningTreeWidget.h" - -#include - -#include - -namespace Isis { - /** - * Create a warning tree widget for the given project. - * - * @param parent The widget that goes along with the warnings. - */ - WarningTreeWidget::WarningTreeWidget(QWidget *parent) : QTreeWidget(parent) { - - setHeaderHidden(true); - } - - - WarningTreeWidget::~WarningTreeWidget() { - - } - - - /** - * Creates a new warning item with the given text. - * - * @param text The text of the warning. - */ - void WarningTreeWidget::showWarning(QString text) { - - QTreeWidgetItem *warningItem = new QTreeWidgetItem(this); - warningItem->setText(0, text); - } -} diff --git a/isis/src/local/apps/ipce/WarningTreeWidget.h b/isis/src/local/apps/ipce/WarningTreeWidget.h deleted file mode 100644 index 9ff48100da05658bfaf410062b7abca1d7cdeb3e..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/WarningTreeWidget.h +++ /dev/null @@ -1,30 +0,0 @@ -#ifndef WarningTreeWidget_H -#define WarningTreeWidget_H - -#include - -namespace Isis { - - /** - * @brief Warning Widget for ipce - * - * @author 2012-05-29 Steven Lambright and Tracie Sucharski - * - * @internal - * @histroy 2012-07-31 Kimberly Oyama - Added comments to some of the methods. - */ - class WarningTreeWidget : public QTreeWidget { - Q_OBJECT - public: - WarningTreeWidget(QWidget *parent = 0); - virtual ~WarningTreeWidget(); - - void showWarning(QString text); - - private: - Q_DISABLE_COPY(WarningTreeWidget); - }; -} - -#endif - diff --git a/isis/src/local/apps/ipce/ipce.cpp b/isis/src/local/apps/ipce/ipce.cpp deleted file mode 100644 index 481d0536b9cab3c0c846db65fcbb6596ef8c919d..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/ipce.cpp +++ /dev/null @@ -1,63 +0,0 @@ -/** - * @file - * $Revision: 1.19 $ - * $Date: 2010/03/22 19:44:53 $ - * - * 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 "IsisDebug.h" - -#include -#include -#include - -#include "Gui.h" -#include "IException.h" -#include "IpceMainWindow.h" -#include "QIsisApplication.h" - -using namespace std; -using namespace Isis; - -int main(int argc, char *argv[]) { - - Gui::checkX11(); - - try { - QApplication *app = new QIsisApplication(argc, argv); - QApplication::setApplicationName("ipce"); - - IpceMainWindow *mainWindow = new IpceMainWindow(); - - // We do not want a showMaximized call, as that will negate the settings read during the main - // window's initialization. References #4358. - mainWindow->show(); - int status = app->exec(); - - delete mainWindow; - delete app; - - return status; - } - catch(IException &e) { - e.print(); - } - -} - - diff --git a/isis/src/local/apps/ipce/ipce.xml b/isis/src/local/apps/ipce/ipce.xml deleted file mode 100644 index 99cacf50238cb254cfb7346b711bf7ed98367bec..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/ipce.xml +++ /dev/null @@ -1,38 +0,0 @@ - - - - - - - - - - - - Display - - - - - Original version - - - The main window state is now saved properly when running ipce. If running ipce - without opening a project, the config files are saved as ipce_Project.config (Project is - the default project name). Otherwise, when a project is loaded, config files are saved as - ipce_ProjectName.config, where ProjectName is the name of the loaded project. - Fixes #4358. - - - Changed the alias reference for the data_management.png icon from 'data' to 'data-management'. - Annoying errors were showing up on the command line when the application was launched due - to a naming conflict. Fixes #3982. - - - Changed name of application from cnetsuite to ipce. - - - Updated ipce to only include licensed or open source images and icons. Fixes #5105. - - - diff --git a/isis/src/local/apps/ipce/tsts/Makefile b/isis/src/local/apps/ipce/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/ipce/tsts/default/Makefile b/isis/src/local/apps/ipce/tsts/default/Makefile deleted file mode 100644 index 2408ca3c360d4ce856a1059efc28ad230657fd80..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/ipce/tsts/default/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -APPNAME = ipce - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(ECHO) "This should be tested by qisis cat test" > $(OUTPUT)/truth.txt; - diff --git a/isis/src/local/apps/m3loc2net/Makefile b/isis/src/local/apps/m3loc2net/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/m3loc2net/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/m3loc2net/m3loc2net.cpp b/isis/src/local/apps/m3loc2net/m3loc2net.cpp deleted file mode 100644 index 3f923128ef6a43621cbb1f86837e1e9335a1ebec..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/m3loc2net/m3loc2net.cpp +++ /dev/null @@ -1,129 +0,0 @@ -#include "Isis.h" - -#include "Brick.h" -#include "Camera.h" -#include "ControlMeasure.h" -#include "ControlNet.h" -#include "ControlPoint.h" -#include "Cube.h" -#include "Distance.h" -#include "ID.h" -#include "IException.h" -#include "Latitude.h" -#include "Longitude.h" -#include "Progress.h" -#include "SerialNumber.h" -#include "SpecialPixel.h" -#include "SurfacePoint.h" -#include "UserInterface.h" - -using namespace std; -using namespace Isis; - -void IsisMain() { - - UserInterface &ui = Application::GetUserInterface(); - - ControlNet cnet; - if (ui.WasEntered("NETWORKID")) { - cnet.SetNetworkId(ui.GetString("NETWORKID")); - } - if (ui.WasEntered("DESCRIPTION")) { - cnet.SetDescription(ui.GetString("DESCRIPTION")); - } - cnet.SetUserName(Application::Name()); - - QString filename = ui.GetFileName("FROM"); - Cube inputCube; - inputCube.open(filename, "r"); - - QString locFilename = ui.GetFileName("LOC"); - Cube locCube; - locCube.open(locFilename, "r"); - - if (inputCube.label()->hasKeyword("TargetName", PvlObject::Traverse)) { - PvlGroup inst = inputCube.label()->findGroup("Instrument", PvlObject::Traverse); - QString targetName = inst["TargetName"]; - cnet.SetTarget(targetName); - } - else { - QString msg = "Input cube does not have target."; - throw IException(IException::User, msg, _FILEINFO_); - } - - // Create serial number list - QString serialNumber = SerialNumber::Compose(inputCube); - - int sampInc = ui.GetInteger("SAMPLEINC"); - int lineInc = ui.GetInteger("LINEINC"); - - // Set up an automatic id generator for the point ids - ID pointId = ID(ui.GetString("POINTID")); - -//Progress gridStatus; -// -//int maxSteps = (inputCube.sampleCount() / sampInc + 1) * (inputCube.lineCount() / lineInc + 1)+100; -// -//if (maxSteps > 0) { -// gridStatus.SetMaximumSteps(maxSteps); -// gridStatus.SetText("Creating Ground Points"); -// gridStatus.CheckStatus(); -//} - - // Set up brick to read a line from the LOC file - Brick locBrick(locCube, locCube.sampleCount(), 1, 3); - - for (int line = 0; line < inputCube.lineCount(); line += lineInc) { - locBrick.SetBasePosition(1, line + 1, 1); - locCube.read(locBrick); - for (int samp = 0; samp < inputCube.sampleCount(); samp += sampInc) { - qDebug()<<"samp : line = "<SetId(pointId.Next()); - point->SetType(ControlPoint::Fixed); - double lon = locBrick.at(samp); - double lat = locBrick.at(locCube.sampleCount() + samp); - double radius = locBrick.at((locCube.sampleCount() * 2) + samp); - - if (!IsValidPixel(lon) || !IsValidPixel(lat) || !IsValidPixel(radius)) { - continue; - } - - try { - SurfacePoint pt(Latitude(lat, Angle::Degrees), - Longitude(lon, Angle::Degrees), - Distance(radius, Distance::Meters)); - point->SetAprioriSurfacePoint(pt); - } - catch (IException &e) { - continue; - } - - ControlMeasure *measure = new ControlMeasure; - measure->SetCubeSerialNumber(serialNumber); - measure->SetCoordinate(samp + 1, line + 1); - measure->SetType(ControlMeasure::Candidate); - measure->SetDateTime(); - measure->SetChooserName(Application::Name()); - point->Add(measure); - - cnet.AddPoint(point); - - // Make sure last sample is always included - if ((samp != (inputCube.sampleCount() - 1)) && ((samp + sampInc) >= inputCube.sampleCount())) { - samp = inputCube.sampleCount() - sampInc - 1; - qDebug()<<"lastSamp = "<= inputCube.lineCount())) { - line = inputCube.lineCount() - lineInc - 1; - qDebug()<<"lastLine = "< - - - - - Creates a control network containing ground points either using a Chandrayaan LOC file - or the image camera for lat/lon/radii values. - - - -

- This program creates a control network containing ground points using - either the Chandrayaan LOC file or the image camera for latitute, longitude - and radii values. -

-
- - - Control Networks - - - - - Original version - - - Make sure control points are always included for last line and last sample in cube. - - - - - - - cube - - Level 1 cube - - - Ground point will be created for this cube - - - *.cub - - - - cube - - Chandrayaan M3 Location cube - - - Chandrayaan M3 Location cube containing 3 bands: Longitude, Latitude, Radius - - - *.cub - - - - filename - output - - Output control network - - - This file will contain the control network that is created. - - - - - - - integer - - Sample Increment - - - Sample Increment - - - - integer - - Line Increment - - - Line Increment - - - - - - - string - - Name of this control network - - - The ID or name of the control network that is created. This string - should be unique. - - - No Id - - - - - string - - The pattern to be used to create point ids - - - A string with one and only one set of question marks ("?"). - This string will be used to create unique IDs for each control - point created by this program. The question marks will be replaced - with a number beginning with zero. For example the pattern - "User????" would create point IDs "User0001" through - "User9999". Note: Make sure there are enough "?"s for all the - control points that may be created during this run. If all question - marks are exausted the program will throw an error. - - - - - string - - The description of the network - - - A string describing the purpose of this control network. For - example, a description might be "LROC NAC MareSmythii GRID NETWORK". - This description indicates that the control network is for the LROC - mission using the narrow angle camera instrument, and the feature of - interest is Mare Smythii. The description string can be literally - anything, but it is helpful to make it something that is descriptive - of the control network. - - - No Description - - - - -
diff --git a/isis/src/local/apps/m3loc2net/tsts/Makefile b/isis/src/local/apps/m3loc2net/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/m3loc2net/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/m3loc2net/tsts/dummy/Makefile b/isis/src/local/apps/m3loc2net/tsts/dummy/Makefile deleted file mode 100644 index 3b53d5ae8e4f9d52991b3164bdae835c79a880df..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/m3loc2net/tsts/dummy/Makefile +++ /dev/null @@ -1,6 +0,0 @@ -APPNAME = m3loc2net - -include $(ISISROOT)/make/isismake.tsts - -commands: - echo "This program has a dummy test for now " > $(OUTPUT)/truth.txt; diff --git a/isis/src/local/apps/polytool/Makefile b/isis/src/local/apps/polytool/Makefile deleted file mode 100644 index 7578f0b21d038db6a5042c095cda9b34b6bb2570..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/polytool/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/apps/polytool/polytool.cpp b/isis/src/local/apps/polytool/polytool.cpp deleted file mode 100644 index 0640f5dc0e828436f030fbb801fcdf14c1cb2d5e..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/polytool/polytool.cpp +++ /dev/null @@ -1,103 +0,0 @@ -#include "Isis.h" - -#include "PvlGroup.h" -#include "PvlKeyword.h" - -#include -#include - -#include "geos/io/WKTReader.h" - -#include "PolygonTools.h" - -using namespace std; -using namespace Isis; - -geos::geom::Geometry *GetPolygon(QString name); - -void IsisMain() { - UserInterface &ui = Application::GetUserInterface(); - - std::string result; - if(ui.GetString("PROCESS").compare("DESPIKE") == 0) { - geos::geom::MultiPolygon *polygon1 = PolygonTools::MakeMultiPolygon(GetPolygon(ui.GetFileName("FROM1"))); - - geos::geom::MultiPolygon *outpoly = PolygonTools::Despike(polygon1); - - result = outpoly->toString(); - } - else if(ui.GetString("PROCESS").compare("DIFFERENCE") == 0) { - geos::geom::Geometry *polygon1 = GetPolygon(ui.GetFileName("FROM1")); - geos::geom::Geometry *polygon2 = GetPolygon(ui.GetFileName("FROM2")); - - geos::geom::Geometry *outgeom = PolygonTools::Difference(polygon1, polygon2); - - result = outgeom->toString(); - } - else if(ui.GetString("PROCESS").compare("EQUAL") == 0) { - geos::geom::Geometry *geom1 = GetPolygon(ui.GetFileName("FROM1")); - geos::geom::MultiPolygon *polygon1 = PolygonTools::MakeMultiPolygon(geom1); - - geos::geom::Geometry *geom2 = GetPolygon(ui.GetFileName("FROM2")); - geos::geom::MultiPolygon *polygon2 = PolygonTools::MakeMultiPolygon(geom2); - - PvlGroup grp("Results"); - if(PolygonTools::Equal(polygon1, polygon2)) { - grp += PvlKeyword("Equal", "true"); - } - else { - grp += PvlKeyword("Equal", "false"); - } - - delete geom1; - delete geom2; - delete polygon1; - delete polygon2; - - Application::Log(grp); - } - else if(ui.GetString("PROCESS").compare("INTERSECT") == 0) { - geos::geom::Geometry *polygon1 = GetPolygon(ui.GetFileName("FROM1")); - geos::geom::Geometry *polygon2 = GetPolygon(ui.GetFileName("FROM2")); - - geos::geom::Geometry *outgeom = PolygonTools::Intersect(polygon1, polygon2); - - result = outgeom->toString(); - } - - if(!result.empty()) { - // Output the resultant polygon - QString outname = ui.GetFileName("TO"); - std::ofstream outfile; - outfile.open(outname.toLatin1().data()); - outfile << result; - outfile.close(); - if(outfile.fail()) { - IString msg = "Unable to write the polygon to [" + outname + "]"; - throw IException(IException::Io, msg, _FILEINFO_); - } - } -} - - -/** - * Grabs the first line of a file and attempts to create a Multipolygon to from - * it. - * - * @param name The filename containing the multipolygon in its first line - * - * @return geos::geom::MultiPolygon* - */ -geos::geom::Geometry *GetPolygon(QString name) { - ifstream is; - is.open(name.toLatin1().data()); - - std::string fileData = ""; - while(is.good()) { - fileData += is.get(); - } - const std::string fileContents = fileData; - - geos::io::WKTReader geosReader; - return geosReader.read(fileContents); -} diff --git a/isis/src/local/apps/polytool/polytool.xml b/isis/src/local/apps/polytool/polytool.xml deleted file mode 100644 index 2f4d51384233fb9149c9617a61847e487efa8fc9..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/polytool/polytool.xml +++ /dev/null @@ -1,113 +0,0 @@ - - - - - A tool for looking at polygon processing - - This is a debugging tool made for the purpose of being able to see one or - more polygons processed by various ISIS 3 processes. - - - - Geometry - - - - - Original version - - - Added the EQUAL option - - - Removed memory leaks in this program in order to do - memory leak checking for PolygonTools - - - - - - - - - filename - input - Input 1 - - This input should be a file containing a single multipolygon. - - - - - filename - input - Input 2 - - This input should be a file containing a single multipolygon. - - - - - - - - - string - DESPIKE - Which process to execute - - Used to determine which process should be ran on the input - multipolygon(s) - - - - - - - - - - - - - - - filename - output - Output multipolygon - - The resultant polygon from the process ran. - - - - - - - - diff --git a/isis/src/local/apps/polytool/tsts/Makefile b/isis/src/local/apps/polytool/tsts/Makefile deleted file mode 100644 index 46d84c74c297304e943452a44e06b111f179a92b..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/polytool/tsts/Makefile +++ /dev/null @@ -1,4 +0,0 @@ -BLANKS = "%-6s" -LENGTH = "%-40s" - -include $(ISISROOT)/make/isismake.tststree diff --git a/isis/src/local/apps/polytool/tsts/default/Makefile b/isis/src/local/apps/polytool/tsts/default/Makefile deleted file mode 100644 index df2f163bb325d8b112ab2cebbc999f8c2136bcc8..0000000000000000000000000000000000000000 --- a/isis/src/local/apps/polytool/tsts/default/Makefile +++ /dev/null @@ -1,13 +0,0 @@ -APPNAME = polytool - -include $(ISISROOT)/make/isismake.tsts - -commands: - $(APPNAME) from1=$(INPUT)/multipolygon1.txt \ - to=$(OUTPUT)/despiked.txt > /dev/null; - $(APPNAME) from1=$(INPUT)/multipolygon1.txt \ - from2=$(INPUT)/multipolygon2.txt process=difference \ - to=$(OUTPUT)/differenced.txt > /dev/null; - $(APPNAME) from1=$(INPUT)/multipolygon1.txt \ - from2=$(INPUT)/multipolygon2.txt process=intersect \ - to=$(OUTPUT)/intersected.txt > /dev/null; diff --git a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.cpp b/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.cpp deleted file mode 100644 index e5906b122b60c129b78575550b72c121fee4a317..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.cpp +++ /dev/null @@ -1,225 +0,0 @@ -/** - * @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 "AerialPhotoCamera.h" - -#include -#include - -#include "Affine.h" -#include "CameraDetectorMap.h" -#include "CameraDistortionMap.h" -#include "CameraFocalPlaneMap.h" -#include "CameraGroundMap.h" -#include "CameraSkyMap.h" -#include "FileName.h" -#include "IException.h" -#include "IString.h" -#include "iTime.h" -#include "NaifStatus.h" - -using namespace std; -namespace Isis { - /** - * Constructs a generic aerial photo camera object using the image labels. - * - * @param cube An aerial photo image. - * - * @internal - * @history 2014-01-14 Jeff Anderson - Original version - */ - AerialPhotoCamera::AerialPhotoCamera(Cube &cube) : FramingCamera(cube) { - NaifStatus::CheckErrors(); - - m_instrumentNameLong = "Aerial Photo"; - m_instrumentNameShort = "Aerial"; - m_spacecraftNameLong = "Aircraft"; - m_spacecraftNameShort = "Aircraft"; - - // Prep for getting information from cube labels - Pvl &lab = *cube.label(); - const PvlGroup &inst = lab.findGroup("Instrument", Pvl::Traverse); - - // Set camera focal length - double focalLength = inst["FocalLength"]; - SetFocalLength(focalLength); - - // Get the fidicual locations which will be needed for the focal plane map - double fiducialX[8], fiducialY[8], fiducialS[8], fiducialL[8]; - for (int i=0; i<8; i++) { - fiducialX[i] = inst["FiducialX"][i].toDouble(); - fiducialY[i] = inst["FiducialY"][i].toDouble(); - fiducialS[i] = inst["FiducialSample"][i].toDouble(); - fiducialL[i] = inst["FiducialLine"][i].toDouble(); - } - - // Get the min/max range of the fiducial locations so we can estimate the pixel pitch - double minX = fiducialX[0]; - double maxX = fiducialX[0]; - double minY = fiducialY[0]; - double maxY = fiducialY[0]; - - double minS = fiducialS[0]; - double maxS = fiducialS[0]; - double minL = fiducialL[0]; - double maxL = fiducialL[0]; - - for (int i=1; i<8; i++) { - if (fiducialX[i] < minX) minX = fiducialX[i]; - if (fiducialX[i] > maxX) maxX = fiducialX[i]; - if (fiducialY[i] < minY) minY = fiducialY[i]; - if (fiducialY[i] > maxY) maxY = fiducialY[i]; - - if (fiducialS[i] < minS) minS = fiducialS[i]; - if (fiducialS[i] > maxS) maxS = fiducialS[i]; - if (fiducialL[i] < minL) minL = fiducialL[i]; - if (fiducialL[i] > maxL) maxL = fiducialL[i]; - } - - double XYrange = (maxX - minX) > (maxY - minY) ? maxX - minX : maxY - minY; - double pixelRange = (maxS - minS) > (maxL - minL) ? maxS - minS : maxL - minL; - - double pixelPitch = XYrange / pixelRange; - SetPixelPitch(pixelPitch); // Just the estimated pixel pitch. Not perfect but should work in - // cam2map when computing pixel resolution for output map. - - - // Setup detector map. There is no summing or starting sample/line so this map should be the - // identity (image sample/line == detector sample/line) - new CameraDetectorMap(this); - - // Setup focal plane map. This maps image line/samples to focal plane mm using the fiducials - Affine affine; - affine.Solve(fiducialS, fiducialL, fiducialX, fiducialY, 8); - new CameraFocalPlaneMap(this, affine); - - // Setup the optical distortion model. Use the Apollo metric distortion model which allows for decentering. -#if 0 - double xCalPP = inst["XCalibratedPrinicpalPoint"][0].toDouble(); - double yCalPP = inst["XCalibratedPrinicpalPoint"][0].toDouble(); - - double odk0 = inst["RadialDistortionCoefficients"][0].toDouble(); - double odk1 = inst["RadialDistortionCoefficients"][1].toDouble(); - double odk2 = inst["RadialDistortionCoefficients"][2].toDouble(); - - double dc0 = inst["DecenteringDistortionCoefficients"][0].toDouble(); - double dc1 = inst["DecenteringDistortionCoefficients"][1].toDouble(); - double dc2 = inst["DecenteringDistortionCoefficients"][2].toDouble(); - - new ApolloMetricDistortionMap(this, xCalpp, yCalpp, odk0, odk1, odk2, dc0, dc1, dc2); -#endif - new CameraDistortionMap(this, -1.0); -// new CameraDistortionMap(this); - - // Setup the ground and sky map - new CameraGroundMap(this); - new CameraSkyMap(this); - - // Create a cache and grab spice info since it does not change for - // a framing camera (fixed spacecraft position and pointing) - setTime(inst["EphemerisTime"][0].toDouble()); - LoadCache(); - NaifStatus::CheckErrors(); - } - - /** - * Returns the shutter open and close times. The user should pass in the - * exposure duration in seconds and the StartTime keyword value, converted to - * ephemeris time. The StartTime keyword value from the labels represents the - * shutter center time of the observation. To find the shutter open and close - * times, half of the exposure duration is subtracted from and added to the - * input time parameter, respectively. This method overrides the - * FramingCamera class method. - * @b Note: Apollo did not provide exposure duration in the support data. - * - * @param exposureDuration Exposure duration, in seconds. - * @param time The StartTime keyword value from the labels, converted to - * ephemeris time. - * - * @return @b pair < @b iTime, @b iTime > The first value is the shutter - * open time and the second is the shutter close time. - * - * @author 2011-05-03 Jeannie Walldren - * @internal - * @history 2011-05-03 Jeannie Walldren - Original version. - */ - pair AerialPhotoCamera::ShutterOpenCloseTimes(double time, - double exposureDuration) { - pair shuttertimes; - // To get shutter start (open) time, subtract half exposure duration - shuttertimes.first = time - (exposureDuration / 2.0); - // To get shutter end (close) time, add half exposure duration - shuttertimes.second = time + (exposureDuration / 2.0); - return shuttertimes; - } - - - /** - * This method returns the full instrument name. - * - * @return QString - */ - QString AerialPhotoCamera::instrumentNameLong() const { - return m_instrumentNameLong; - } - - - /** - * This method returns the shortened instrument name. - * - * @return QString - */ - QString AerialPhotoCamera::instrumentNameShort() const { - return m_instrumentNameShort; - } - - - /** - * This method returns the full spacecraft name. - * - * @return QString - */ - QString AerialPhotoCamera::spacecraftNameLong() const { - return m_spacecraftNameLong; - } - - - /** - * This method returns the shortened spacecraft name. - * - * @return QString - */ - QString AerialPhotoCamera::spacecraftNameShort() const { - return m_spacecraftNameShort; - } -} - - -/** - * This is the function that is called in order to instantiate an - * AerialPhotoCamera object. - * - * @param lab Cube labels - * - * @return Camera* AerialPhotoCamera - * @internal - */ -extern "C" Isis::Camera *AerialPhotoCameraPlugin(Isis::Cube &cube) { - return new Isis::AerialPhotoCamera(cube); -} diff --git a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.h b/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.h deleted file mode 100644 index 04e727169ba99cb949a4ff3d7b80a9d11e211081..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.h +++ /dev/null @@ -1,101 +0,0 @@ -#ifndef AerialPhotoCamera_h -#define AerialPhotoCamera_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 "FramingCamera.h" - -#include - -namespace Isis { - /** - * @brief Aerial Camera Model - * - * This is the camera model for generic aerial photos. - * - * @ingroup AerialPhoto - * - * @author 2014-03-25 Jeff Anderson - * - * @internal - * @history 2014-03-25 Jeff Anderson - Original Version - * @history 2015-08-25 Ian Humphrey and Makayla Shepherd - Added new data members and methods - * to get spacecraft and instrument names. Extended unit test to test - * these methods. - - */ - class AerialPhotoCamera : public FramingCamera { - public: - AerialPhotoCamera(Cube &cube); - - ~AerialPhotoCamera() {}; - - virtual std::pair ShutterOpenCloseTimes(double time, - double exposureDuration); - - /** - * CK frame ID - - * Naif assigns frame ids. Since aerial photos aren't tied to NASA - * missions we don't really have a frame id. We will us numbers that the - * NAIF team allows as documented in their NAIF ID required reading - * manual. This means that we can really can't create NAIF kernels using - * spkwriter or ckwriter. - * - * @return @b int Return generic frame id - */ - virtual int CkFrameId() const { return -2000001; } - - /** - * CK Reference ID - - * - * @return @b int The appropriate instrument code for the "Camera-matrix" Kernel - * Reference ID - */ - virtual int CkReferenceId() const { return -2000000; } - - /** - * SPK Target Body ID - - * - * @return @b int The appropriate instrument code for the Spacecraft - * Kernel Target ID - */ - virtual int SpkTargetId() const { return -2000; } - - /** - * SPK Reference ID - J2000 - * - * @return @b int The appropriate instrument code for the Spacecraft - * Kernel Reference ID, - */ - virtual int SpkReferenceId() const { return (1); } - - virtual QString instrumentNameLong() const; - virtual QString instrumentNameShort() const; - virtual QString spacecraftNameLong() const; - virtual QString spacecraftNameShort() const; - - private: - QString m_instrumentNameLong; //!< Full instrument name - QString m_instrumentNameShort; //!< Shortened instrument name - QString m_spacecraftNameLong; //!< Full spacecraft name - QString m_spacecraftNameShort; //!< Shortened spacecraft name - - }; -}; -#endif diff --git a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.truth b/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.truth deleted file mode 100644 index d5063c9346de2f9acd28c23df8a98094f0e5c02c..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/AerialPhotoCamera.truth +++ /dev/null @@ -1,38 +0,0 @@ -Unit Test for AerialPhotoCamera... -FileName: eros_ap.lbl -CK Frame: -2000001 - -Kernel IDs: -CK Frame ID = -2000001 -CK Reference ID = -2000000 -SPK Target ID = -2000 -SPK Reference ID = 1 - -Spacecraft Name Long: Aircraft -Spacecraft Name Short: Aircraft -Instrument Name Long: Aerial Photo -Instrument Name Short: Aerial - -Shutter open = -17538835.815374449 -Shutter close = -17538835.815374449 -Focal Length = 152.818000000 - -For upper left corner ... -DeltaSample = 0.000000000 -DeltaLine = 0.000000000 - -For upper right corner ... -DeltaSample = 0.000000000 -DeltaLine = 0.000000000 - -For lower left corner ... -DeltaSample = 0.000000000 -DeltaLine = 0.000000000 - -For lower right corner ... -DeltaSample = 0.000000000 -DeltaLine = 0.000000000 - -For center pixel position ... -Latitude OK -Longitude OK diff --git a/isis/src/local/objs/AerialPhotoCamera/Camera.plugin b/isis/src/local/objs/AerialPhotoCamera/Camera.plugin deleted file mode 100644 index db75c41038792b0c3cdac47723dd0be70b390722..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/Camera.plugin +++ /dev/null @@ -1,6 +0,0 @@ - -Group = Aircraft/AerialPhoto - Library = AerialPhotoCamera - Routine = AerialPhotoCameraPlugin - Version = 1 -EndGroup diff --git a/isis/src/local/objs/AerialPhotoCamera/Makefile b/isis/src/local/objs/AerialPhotoCamera/Makefile deleted file mode 100644 index f122bc88227c5c7ebd108dea5d339d1d2e074d82..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -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/local/objs/AerialPhotoCamera/data/eros_ap.History.IsisCube b/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.History.IsisCube deleted file mode 100644 index 24eb64addab29c24098d9eb7fa65c3abff66b6bb..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.History.IsisCube +++ /dev/null @@ -1,148 +0,0 @@ -Object = std2isis - IsisVersion = "3.4.6.0 alpha | 2014-01-14" - ProgramVersion = 2014-01-17 - ProgramPath = /work/projects/isis/latest/m01813/isis/bin - ExecutionDateTime = 2014-03-28T17:02:46 - HostName = prog6 - UserName = janderson - Description = "Imports a cube from PNG, JPEG, JP2, BMP or TIFF format" - - Group = UserParameters - FROM = N10NAPPW06666039.tif - TO = ap.cub - MODE = AUTO - SETNULLRANGE = NO - SETHRSRANGE = NO - SETLRSRANGE = NO - End_Group -End_Object - -Object = apinit - IsisVersion = "3.4.6.0 alpha | 2014-01-14" - ProgramVersion = 2013-11-15 - ProgramPath = /work/projects/isis/latest/m01813/isis/src/local/apps/a- - pinit - ExecutionDateTime = 2014-03-28T17:02:46 - HostName = prog6 - UserName = janderson - Description = "Initialize aerial photo with interior and exterior - orientation information." - - Group = UserParameters - FROM = ap.cub - DATETIME = 1999-06-12T12:05 - ALTITUDE = 6096 - CENTERLAT = 39.9363 - CENTERLON = 255.285823 - SHAPEMODEL = dtm.cub - FOCALLENGTH = 152.818 - FIDUCIALX = "-106.0, -0.003, 105.999, -110.005, 109.999, -106.008, - -0.003, 105.998" - FIDUCIALY = "106.000, 109.999, 105.994, 0.002, 0.002, -105.999, - -110.004, -105.999" - FIDUCIALSAMPLE = "574, 2040, 3500, 513, 3562, 578, 2039, 3497" - FIDUCIALLINE = "255, 194, 261, 1721, 1721, 3182, 3245, 3180" - FIDUCIALTEMPLATE = None - KCOEFS = "1.27485E-05, 3.73255E-09, -6.95721E-13, 2.3884E-17, - 0.0" - PCOEFS = "0, 0, 0, 0" - XP = -0.004 - YP = 0 - XIPP = -0.002 - YIPP = 0.001 - ROLLNUMBER = Unknown - FRAMENUMBER = Unknown - CAMERASN = Unknown - LENSESN = Unknown - CALREPORT = Unknown - End_Group -End_Object - -Object = jigsaw - IsisVersion = "3.4.6.0 alpha | 2014-01-14" - ProgramVersion = 2014-02-13 - ProgramPath = /work/projects/isis/latest/m01813/isis/bin - ExecutionDateTime = 2014-03-28T17:05:36 - HostName = prog6 - UserName = janderson - Description = "Improves camera pointing and a whole lot more!" - - Group = UserParameters - FROMLIST = ap.lis - CNET = handMade.net - ONET = o.net - OBSERVATIONS = No - RADIUS = No - UPDATE = YES - METHOD = SPARSE - OUTLIER_REJECTION = No - REJECTION_MULTIPLIER = 3.0 - ERRORPROPAGATION = No - MODEL1 = NONE - SIGMA0 = 1.0e-10 - MAXITS = 50 - CKDEGREE = 2 - CKSOLVEDEGREE = 2 - CAMSOLVE = ANGLES - TWIST = Yes - OVEREXISTING = No - SPSOLVE = NONE - BUNDLEOUT_TXT = yes - OUTPUT_CSV = yes - RESIDUALS_CSV = yes - End_Group -End_Object - -Object = jigsaw - IsisVersion = "3.4.6.0 alpha | 2014-01-14" - ProgramVersion = 2014-02-13 - ProgramPath = /work/projects/isis/latest/m01813/isis/bin - ExecutionDateTime = 2014-03-28T17:09:51 - HostName = prog6 - UserName = janderson - Description = "Improves camera pointing and a whole lot more!" - - Group = UserParameters - FROMLIST = ap.lis - CNET = handMade.net - ONET = o.net - OBSERVATIONS = No - RADIUS = No - UPDATE = YES - METHOD = SPARSE - OUTLIER_REJECTION = No - REJECTION_MULTIPLIER = 3.0 - ERRORPROPAGATION = No - MODEL1 = NONE - SIGMA0 = 1.0e-10 - MAXITS = 50 - CKDEGREE = 2 - CKSOLVEDEGREE = 2 - CAMSOLVE = ANGLES - TWIST = Yes - OVEREXISTING = No - SPKDEGREE = 2 - SPKSOLVEDEGREE = 2 - SPSOLVE = POSITION - OVERHERMITE = No - BUNDLEOUT_TXT = yes - OUTPUT_CSV = yes - RESIDUALS_CSV = yes - End_Group -End_Object - -Object = cubeatt - IsisVersion = "3.4.6.5759 alpha | 2014-01-14" - ProgramVersion = 2012-07-03 - ProgramPath = /usgs/pkgs/isis3beta2014-04-04/isis/bin - ExecutionDateTime = 2014-04-04T16:23:43 - HostName = prog6 - UserName = kbecker - Description = "Cube attribute editor" - - Group = UserParameters - FROM = ap.cub - TO = eros_ap.cub+detached - PROPTABLES = true - End_Group -End_Object diff --git a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.BodyRotation b/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.BodyRotation deleted file mode 100644 index b42486d37c477e49e27c150bd8d8b2b81dd64f61..0000000000000000000000000000000000000000 Binary files a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.BodyRotation and /dev/null differ diff --git a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPointing b/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPointing deleted file mode 100644 index 1d846dcee86bed3f78a4bf0d0afdbcb8a1aaab7b..0000000000000000000000000000000000000000 Binary files a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPointing and /dev/null differ diff --git a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPosition b/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPosition deleted file mode 100644 index a611ad81c6d90ba26ab68d2d40f87f8a95957ab9..0000000000000000000000000000000000000000 Binary files a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.InstrumentPosition and /dev/null differ diff --git a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.SunPosition b/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.SunPosition deleted file mode 100644 index 40f8df59d1f07d2c037511f0f6ed0f66671d994b..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/data/eros_ap.Table.SunPosition +++ /dev/null @@ -1 +0,0 @@ -{]؍evA%CejA_T&wAd *<gU@,a? Mp79evAUejA<8wAf)* - EstimatedAltitude = 6096.0 - EstimatedCenterLatitude = 39.9363 - EstimatedCenterLongitude = 255.285823 - FocalLength = 152.818 - FiducialX = (-106.0, -0.003, 105.999, -110.005, - 109.999, -106.008, -0.003, - 105.998) - FiducialY = (106.000, 109.999, 105.994, 0.002, - 0.002, -105.999, -110.004, - -105.999) - FiducialSample = (574, 2040, 3500, 513, 3562, 578, - 2039, 3497) - FiducialLine = (255, 194, 261, 1721, 1721, 3182, - 3245, 3180) - RadialDistortionCoefficients = (1.27485E-05, 3.73255E-09, - -6.95721E-13, 2.3884E-17, 0.0) - DecenteringDistortionCoefficients = (0, 0, 0, 0) - XCalibratedPrincipalPoint = -0.004 - YCalibratedPrincipalPoint = 0.0 - XIndicatedPrincipalPoint = -0.002 - YIndicatedPrincipalPoint = 0.001 - End_Group - - Group = Archive - RollNumber = Unknown - FrameNumber = Unknown - CameraSerialNumber = Unknown - LenseSerialNumber = Unknown - CalibrationReport = Unknown - End_Group - - Group = BandBin - Name = Gray - End_Group - - Group = Kernels - NaifFrameCode = -2000001 - LeapSecond = $base/kernels/lsk/naif0010.tls - TargetAttitudeShape = $base/kernels/pck/pck00009.tpc - TargetPosition = (Table, $base/kernels/spk/de405.bsp) - InstrumentPointing = Table - Instrument = Null - SpacecraftClock = Null - InstrumentPosition = Table - InstrumentAddendum = Null -# ShapeModel = dtm.cub - ShapeModel = Null - InstrumentPositionQuality = Predict - InstrumentPointingQuality = Predict - CameraVersion = 1 - End_Group -End_Object - -Object = Label - Bytes = 65536 -End_Object - -Object = Table - Name = BodyRotation - StartByte = 1 - Bytes = 128 - Records = 2 - ByteOrder = Lsb - TimeDependentFrames = (10013, 1) - CkTableStartTime = -17538836.815374 - CkTableEndTime = -17538834.815374 - CkTableOriginalSize = 2 - Description = "Created by apinit" - Kernels = ($base/kernels/spk/de405.bsp, - $base/kernels/pck/pck00009.tpc) - SolarLongitude = -9999 - ^Table = data/eros_ap.Table.BodyRotation - - Group = Field - Name = J2000Q0 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Q1 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Q2 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Q3 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = AV1 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = AV2 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = AV3 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = ET - Type = Double - Size = 1 - End_Group -End_Object - -Object = Table - Name = SunPosition - StartByte = 1 - Bytes = 112 - Records = 2 - ByteOrder = Lsb - CacheType = Linear - SpkTableStartTime = -17538836.815374 - SpkTableEndTime = -17538834.815374 - SpkTableOriginalSize = 2.0 - Description = "Created by apinit" - Kernels = Null - ^Table = data/eros_ap.Table.SunPosition - - Group = Field - Name = J2000X - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Y - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Z - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000XV - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000YV - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000ZV - Type = Double - Size = 1 - End_Group - - Group = Field - Name = ET - Type = Double - Size = 1 - End_Group -End_Object - -# Jigged = 2014-03-28T17:09:51 -Object = Table - Name = InstrumentPosition - StartByte = 1 - Bytes = 96 - Records = 4 - ByteOrder = Lsb - CacheType = PolyFunction - ^Table = data/eros_ap.Table.InstrumentPosition - - Group = Field - Name = J2000SVX - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000SVY - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000SVZ - Type = Double - Size = 1 - End_Group -End_Object - -# Jigged = 2014-03-28T17:09:51 -Object = Table - Name = InstrumentPointing - StartByte = 1 - Bytes = 96 - Records = 4 - ByteOrder = Lsb - TimeDependentFrames = (-2000001, 1) - ^Table = data/eros_ap.Table.InstrumentPointing - - Group = Field - Name = J2000Ang1 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Ang2 - Type = Double - Size = 1 - End_Group - - Group = Field - Name = J2000Ang3 - Type = Double - Size = 1 - End_Group -End_Object - -Object = History - Name = IsisCube - StartByte = 1 - Bytes = 4784 - ^History = data/eros_ap.History.IsisCube -End_Object - -Object = NaifKeywords - BODY_FRAME_CODE = 10013 - BODY399_RADII = (6378.14, 6378.14, 6356.75) -End_Object -End diff --git a/isis/src/local/objs/AerialPhotoCamera/unitTest.cpp b/isis/src/local/objs/AerialPhotoCamera/unitTest.cpp deleted file mode 100644 index 7f5a262a9ab51a9b00400e20bc707d7a1333d884..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/AerialPhotoCamera/unitTest.cpp +++ /dev/null @@ -1,141 +0,0 @@ -/** - * @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 -#include - -#include "AerialPhotoCamera.h" -#include "Camera.h" -#include "CameraFactory.h" -#include "FileName.h" -#include "IException.h" -#include "iTime.h" -#include "Preference.h" -#include "Pvl.h" -#include "PvlGroup.h" - -using namespace std; -using namespace Isis; - -void TestLineSamp(Camera *cam, double samp, double line); - -int main(void) { - Preference::Preferences(true); - - cout << "Unit Test for AerialPhotoCamera..." << endl; - try { - // These should be lat/lon at center of image. To obtain these numbers for a new cube/camera, - // set both the known lat and known lon to zero and copy the unit test output "Latitude off by: " - // and "Longitude off by: " values directly into these variables. - double knownLat = 39.9435108139423818; - double knownLon = 255.2778747310457561; - - Cube c("data/eros_ap.lbl", "r"); - AerialPhotoCamera *cam = (AerialPhotoCamera *) CameraFactory::Create(c); - cout << "FileName: " << FileName(c.fileName()).name() << endl; - cout << "CK Frame: " << cam->instrumentRotation()->Frame() << endl << endl; - cout.setf(std::ios::fixed); - cout << setprecision(9); - - // Test kernel IDs - cout << "Kernel IDs: " << endl; - cout << "CK Frame ID = " << cam->CkFrameId() << endl; - cout << "CK Reference ID = " << cam->CkReferenceId() << endl; - cout << "SPK Target ID = " << cam->SpkTargetId() << endl; - cout << "SPK Reference ID = " << cam->SpkReferenceId() << endl << endl; - - // Test name methods - cout << "Spacecraft Name Long: " << cam->spacecraftNameLong() << endl; - cout << "Spacecraft Name Short: " << cam->spacecraftNameShort() << endl; - cout << "Instrument Name Long: " << cam->instrumentNameLong() << endl; - cout << "Instrument Name Short: " << cam->instrumentNameShort() << endl << endl; - - // Test Shutter Open/Close - const PvlGroup &inst = c.label()->findGroup("Instrument", Pvl::Traverse); - double exposureDuration = 0.0; - QString stime = inst["StartTime"]; - double et; // StartTime keyword is the center exposure time - str2et_c(stime.toLatin1().data(), &et); - pair shuttertimes = cam->ShutterOpenCloseTimes(et, exposureDuration); - cout << "Shutter open = " << shuttertimes.first.Et() << endl; - cout << "Shutter close = " << shuttertimes.second.Et() << endl; - cout << "Focal Length = " << cam->FocalLength() << endl << endl; - - // Test all four corners to make sure the conversions are right - cout << "For upper left corner ..." << endl; - TestLineSamp(cam, 1.0, 1.0); - - cout << "For upper right corner ..." << endl; - TestLineSamp(cam, cam->Samples(), 1.0); - - cout << "For lower left corner ..." << endl; - TestLineSamp(cam, 1.0, cam->Lines()); - - cout << "For lower right corner ..." << endl; - TestLineSamp(cam, cam->Samples(), cam->Lines()); - - double samp = cam->Samples() / 2; - double line = cam->Lines() / 2; - cout << "For center pixel position ..." << endl; - - if(!cam->SetImage(samp, line)) { - cout << "ERROR" << endl; - return 0; - } - - if(abs(cam->UniversalLatitude() - knownLat) < 1E-10) { - cout << "Latitude OK" << endl; - } - else { - cout << setprecision(16) << "Latitude off by: " << cam->UniversalLatitude() - knownLat << endl; - } - - if(abs(cam->UniversalLongitude() - knownLon) < 1E-10) { - cout << "Longitude OK" << endl; - } - else { - cout << setprecision(16) << "Longitude off by: " << cam->UniversalLongitude() - knownLon << endl; - } - } - catch(IException &e) { - e.print(); - } -} - -void TestLineSamp(Camera *cam, double samp, double line) { - bool success = cam->SetImage(samp, line); - - if(success) { - success = cam->SetUniversalGround(cam->UniversalLatitude(), cam->UniversalLongitude()); - } - - if(success) { - double deltaSamp = samp - cam->Sample(); - double deltaLine = line - cam->Line(); - if(fabs(deltaSamp) < 0.001) deltaSamp = 0; - if(fabs(deltaLine) < 0.001) deltaLine = 0; - cout << "DeltaSample = " << deltaSamp << endl; - cout << "DeltaLine = " << deltaLine << endl << endl; - } - else { - cout << "DeltaSample = ERROR" << endl; - cout << "DeltaLine = ERROR" << endl << endl; - } -} - diff --git a/isis/src/local/objs/Makefile b/isis/src/local/objs/Makefile deleted file mode 100644 index 59557620183f7dd7697fa322e68819e8bad1884a..0000000000000000000000000000000000000000 --- a/isis/src/local/objs/Makefile +++ /dev/null @@ -1 +0,0 @@ -include $(ISISROOT)/make/isismake.objstree