USGS

Isis 3.0 Object Programmers' Reference

Home

AlphaCube.cpp

Go to the documentation of this file.
00001 
00023 #include "AlphaCube.h"
00024 
00025 using namespace std;
00026 namespace Isis {
00028   AlphaCube::AlphaCube (Isis::Pvl &pvl) {
00029     Isis::PvlObject &isiscube = pvl.FindObject("IsisCube");
00030     if (isiscube.HasGroup("AlphaCube")) {
00031       Isis::PvlGroup &alpha = isiscube.FindGroup("AlphaCube");
00032       p_alphaSamples        = alpha["AlphaSamples"];
00033       p_alphaLines          = alpha["AlphaLines"];
00034       p_alphaStartingSample = alpha["AlphaStartingSample"];
00035       p_alphaStartingLine   = alpha["AlphaStartingLine"];
00036       p_alphaEndingSample   = alpha["AlphaEndingSample"];
00037       p_alphaEndingLine     = alpha["AlphaEndingLine"];
00038       p_betaSamples         = alpha["BetaSamples"];
00039       p_betaLines           = alpha["BetaLines"];
00040     }
00041     else {
00042     Isis::PvlGroup &dims = isiscube.FindGroup("Dimensions",Isis::Pvl::Traverse);
00043       p_alphaSamples        = dims["Samples"];
00044       p_alphaLines          = dims["Lines"];
00045       p_alphaStartingSample = 0.5;
00046       p_alphaStartingLine   = 0.5; 
00047       p_alphaEndingSample   = (double) p_alphaSamples + 0.5; 
00048       p_alphaEndingLine     = (double) p_alphaLines + 0.5;
00049       p_betaSamples         = p_alphaSamples;
00050       p_betaLines           = p_alphaLines;
00051     }
00052   
00053     ComputeSlope();
00054   }
00055 
00060   AlphaCube::AlphaCube (int alphaSamples, int alphaLines,
00061                                 int betaSamples, int betaLines,
00062                                 double alphaSs, double alphaSl, 
00063                                 double alphaEs, double alphaEl) {
00064     p_alphaSamples        = alphaSamples;
00065     p_alphaLines          = alphaLines;
00066     p_alphaStartingSample = alphaSs;
00067     p_alphaStartingLine   = alphaSl; 
00068     p_alphaEndingSample   = alphaEs; 
00069     p_alphaEndingLine     = alphaEl;
00070   
00071     p_betaSamples = betaSamples;
00072     p_betaLines = betaLines;
00073   
00074     ComputeSlope();
00075   }
00076 
00080   AlphaCube::AlphaCube (int alphaSamples, int alphaLines,
00081                                 int betaSamples, int betaLines) {
00082     p_alphaSamples        = alphaSamples;
00083     p_alphaLines          = alphaLines;
00084     p_alphaStartingSample = 0.5;
00085     p_alphaStartingLine   = 0.5; 
00086     p_alphaEndingSample   = (double) alphaSamples + 0.5; 
00087     p_alphaEndingLine     = (double) alphaLines + 0.5;
00088   
00089     p_betaSamples = betaSamples;
00090     p_betaLines = betaLines;
00091   
00092     ComputeSlope();
00093   }
00094 
00101   void AlphaCube::Rehash (AlphaCube &add) {
00102     double sl = AlphaLine(add.AlphaLine(0.5));
00103     double ss = AlphaSample(add.AlphaSample(0.5));
00104     double el = AlphaLine(add.AlphaLine(add.BetaLines()+0.5));
00105     double es = AlphaSample(add.AlphaSample(add.BetaSamples()+0.5));
00106   
00107     p_alphaStartingLine = sl;
00108     p_alphaStartingSample = ss;
00109     p_alphaEndingLine = el;
00110     p_alphaEndingSample = es;
00111     p_betaLines = add.BetaLines();
00112     p_betaSamples = add.BetaSamples();
00113   
00114     ComputeSlope();
00115   }
00116 
00127   void AlphaCube::UpdateGroup (Isis::Pvl &pvl) {
00128     // If we have a mapping group we do not want to update the alpha cube
00129     // group as it represents the dimensions and sub-area of the raw instrument
00130     // cube
00131     Isis::PvlObject &cube = pvl.FindObject("IsisCube");
00132     if (cube.HasGroup("Mapping")) return;
00133     
00134     // Add the labels to the pvl
00135     if (cube.HasGroup("AlphaCube")) {
00136       AlphaCube temp(pvl);
00137       temp.Rehash(*this);
00138       *this = temp;
00139   
00140       Isis::PvlGroup &alpha = cube.FindGroup("AlphaCube");
00141       alpha["AlphaSamples"] = p_alphaSamples;
00142       alpha["AlphaLines"] = p_alphaLines;
00143       alpha["AlphaStartingSample"] = p_alphaStartingSample;
00144       alpha["AlphaStartingLine"] = p_alphaStartingLine;
00145       alpha["AlphaEndingSample"] = p_alphaEndingSample;
00146       alpha["AlphaEndingLine"] = p_alphaEndingLine;
00147       alpha["BetaSamples"] = p_betaSamples;
00148       alpha["BetaLines"] = p_betaLines;
00149     }
00150     else {
00151       Isis::PvlGroup alpha("AlphaCube");
00152       alpha += Isis::PvlKeyword("AlphaSamples",p_alphaSamples);
00153       alpha += Isis::PvlKeyword("AlphaLines",p_alphaLines);
00154       alpha += Isis::PvlKeyword("AlphaStartingSample",p_alphaStartingSample);
00155       alpha += Isis::PvlKeyword("AlphaStartingLine",p_alphaStartingLine);
00156       alpha += Isis::PvlKeyword("AlphaEndingSample",p_alphaEndingSample);
00157       alpha += Isis::PvlKeyword("AlphaEndingLine",p_alphaEndingLine);
00158       alpha += Isis::PvlKeyword("BetaSamples",p_betaSamples);
00159       alpha += Isis::PvlKeyword("BetaLines",p_betaLines);
00160       cube.AddGroup(alpha);
00161     }
00162   }
00163 
00171   void AlphaCube::ComputeSlope () {
00172     p_lineSlope = double (p_alphaEndingLine - p_alphaStartingLine) /
00173                   double ((p_betaLines + 0.5)       - 0.5);
00174     p_sampSlope = double (p_alphaEndingSample - p_alphaStartingSample) /
00175                   double ((p_betaSamples + 0.5)       - 0.5);
00176   }
00177 }