|
Isis 3.0 Object Programmers' Reference |
Home |
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 }