44 template <
typename T>
inline T
MIN(
const T &A,
const T &B) {
45 if ( A < B ) {
return (A); }
49 template <
typename T>
inline T
MAX(
const T &A,
const T &B) {
50 if ( A > B ) {
return (A); }
61 for (
int i = 0 ; i < v.dim() ; i++) {
74 for (
int i = 0 ; i < v.dim() ; i++) {
86 const int cpmm2ccd[] = {0,1,2,3,12,4,10,11,5,13,6,7,8,9};
87 if ( (cpmm < 0) || (cpmm >= (
int)(
sizeof(cpmm2ccd)/
sizeof(
int))) ) {
88 QString mess =
"CpmmToCdd: Bad CpmmNumber (" +
toString(cpmm) +
")";
91 return (cpmm2ccd[cpmm]);
101 if ( (ccd < 0) || (ccd > 13) ) {
102 QString mess =
"CcdToFilter: Bad Ccd Number (" +
toString(ccd) +
")";
107 if ( ccd <= 9 ) { filter =
"RED"; }
108 else if (ccd <= 11) { filter =
"IR"; }
109 else { filter =
"BG"; }
126 int nlines(eline-sline+1);
128 for (
int l = 0 ; l < nlines ; l++) {
129 for (
int s = 0 ; s < m.dim2() ; s++) {
130 mcrop[l][s] = m[l+sline][s];
149 int nsamps(esamp-ssamp+1);
151 for (
int l = 0 ; l < m.dim1() ; l++) {
152 for (
int s = 0 ; s < nsamps ; s++) {
153 mcrop[l][s] = m[l][s+ssamp];
172 eline = (eline == -1) ? m.dim1() - 1 : eline;
174 for (
int s = 0 ; s < m.dim2() ; s++) {
176 for (
int l = sline ; l <= eline ; l++) {
198 esamp = (esamp == -1) ? m.dim2() - 1 : esamp;
200 for (
int l = 0 ; l < m.dim1() ; l++) {
202 for (
int s = ssamp ; s <= esamp ; s++) {
218 template <
typename T>
221 if (!conf.
exists(keyname)) {
return (defval); }
222 if (conf.
count(keyname) < index) {
return (defval); }
223 QString iValue(conf.
value(keyname, index));
237 return toInt(QString(value).trimmed());
248 template <
typename T>
double ToDouble(
const T &value) {
249 return toDouble(QString(value).trimmed());
260 template <
typename T> QString
ToString(
const T &value) {
272 inline bool IsEqual(
const QString &v1,
const QString &v2 =
"TRUE") {
273 return (v1.toUpper() == v2.toUpper());
291 const QString &value =
"TRUE") {
293 return (
IsEqual(prof(key), value));
310 return (
IsTrueValue(prof,
"Debug::SkipModule",
"TRUE"));
316 if (top.dim2() != bottom.dim2()) {
317 std::ostringstream mess;
318 mess <<
"Top buffer samples (" << top.dim2()
319 <<
") do not match bottom buffer samples (" << bottom.dim2()
324 int nlines(top.dim1()+bottom.dim1());
326 for (
int lt = 0 ; lt < top.dim1() ; lt++) {
327 for (
int s = 0 ; s < top.dim2() ; s++) {
328 mat[lt][s] = top[lt][s];
332 int topl = top.dim1();
333 for (
int lb = 0 ; lb < bottom.dim1() ; lb++) {
334 for (
int s = 0 ; s < top.dim2() ; s++) {
335 mat[topl+lb][s] = bottom[lb][s];
343 if (right.dim1() != right.dim1()) {
344 std::ostringstream mess;
345 mess <<
"Left buffer lines (" << left.dim1()
346 <<
") do not match right buffer lines (" << right.dim1()
351 int nsamps(left.dim2()+right.dim2());
353 for (
int ll = 0 ; ll < left.dim1() ; ll++) {
354 for (
int s = 0 ; s < left.dim2() ; s++) {
355 mat[ll][s] = left[ll][s];
359 int lefts = left.dim2();
360 for (
int lr = 0 ; lr < right.dim1() ; lr++) {
361 for (
int s = 0 ; s < right.dim2() ; s++) {
362 mat[lr][lefts+s] = right[lr][s];
383 double Time(
const double line)
const {
384 return (line * (_bin * _ltime * 1.0
E-6));
405 inline double HiTempEqn(
const double temperature,
const double napcm2 = 2.0,
406 const double px = 12.0) {
407 double temp = temperature + 273.0;
408 double eg = 1.1557 - (7.021E-4 * temp * temp) / (1108.0 + temp);
409 const double K = 1.38E-23;
410 const double Q = 1.6E-19;
411 return (napcm2*(px*px)*2.55E7*std::pow(temp,1.5)*std::exp(-eg*Q/2.0/K/temp));
431 if ( n == v.dim() ) {
return (v); }
433 double mag((
double) v.dim()/ (double) n);
435 for (
int i = 0 ; i < v.dim() ; i++ ) {
436 double x((
double) i);
444 for (
int j = 0 ; j < n ; j++ ) {
445 double x = (double) j * mag;
460 for (
int blob = 0 ; blob < label.
objects() ; blob++ ) {
462 QString name = label.
object(blob)[
"Name"][0];
463 if ( name.toLower() ==
"hirise calibration ancillary" ||
464 name.toLower() ==
"hirise calibration images" ||
465 name.toLower() ==
"hirise ancillary") {
491 if (data.size() == 0)
return (
Null);
492 if (data.size() == 1)
return (data[0]);
494 #if defined(USE_AVERAGE) 496 stats.
AddData(&data[0], data.size());
497 return (stat.Average());
499 std::sort(data.begin(), data.end());
500 int meanIndex = data.size()/2;
501 if ((data.size() % 2) == 1)
return data[meanIndex];
502 return ((data[meanIndex-1]+data[meanIndex])/2.0);
PvlObject & object(const int index)
Return the object at the specified index.
Definition: PvlObject.cpp:460
const double Null
Value for an Isis Null pixel.
Definition: SpecialPixel.h:110
int CpmmToCcd(int cpmm)
Convert HiRISE Cpmm number to Ccd number.
Definition: HiCalUtil.h:85
bool SkipModule(const DbProfile &prof)
Checks profile flag to skip the current Module.
Definition: HiCalUtil.h:309
Compute HiRISE line times.
Definition: HiCalUtil.h:375
int count(const QString &key) const
Report number of values in keyword.
Definition: DbProfile.cpp:141
int objects() const
Returns the number of objects.
Definition: PvlObject.h:231
HiVector averageSamples(const HiMatrix &m, int ssamp=0, int esamp=-1)
Reduces by averaging specified samples from a buffer.
Definition: HiCalUtil.h:196
double HiTempEqn(const double temperature, const double napcm2=2.0, const double px=12.0)
Implements (classic) HiRISE temperature equation.
Definition: HiCalUtil.h:405
int InValidCount(const HiVector &v)
Counts number of invalid pixels in vector.
Definition: HiCalUtil.h:72
HiLineTimeEqn(int bin, double ltime)
Definition: HiCalUtil.h:378
int toInt(const QString &string)
Global function to convert from a string to an integer.
Definition: IString.cpp:108
bool exists(const QString &key) const
Checks for the existance of a keyword.
Definition: DbProfile.h:129
void RemoveHiBlobs(Pvl &label)
Deletes HiRISE specific BLOBS from cube file.
Definition: HiCalUtil.h:459
NumericalApproximation provides various numerical analysis methods of interpolation, extrapolation and approximation of a tabulated set of x, y data.
Definition: NumericalApproximation.h:720
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
Definition: IString.cpp:226
Evaluate() returns the y-value of the nearest endpoint if a is outside of the domain.
Definition: NumericalApproximation.h:811
double toDouble(const QString &string)
Global function to convert from a string to a double.
Definition: IString.cpp:164
Cubic Spline interpolation with natural boundary conditions.
Definition: NumericalApproximation.h:728
A DbProfile is a container for access parameters to a database.
Definition: DbProfile.h:65
bool IsEqual(const QString &v1, const QString &v2="TRUE")
Shortened string equality test.
Definition: HiCalUtil.h:272
void setLineTime(double ltime)
Definition: HiCalUtil.h:381
This class is used to accumulate statistics on double arrays.
Definition: Statistics.h:107
virtual ~HiLineTimeEqn()
Definition: HiCalUtil.h:379
HiMatrix appendLines(const HiMatrix &top, const HiMatrix &bottom)
Definition: HiCalUtil.h:314
double Evaluate(const double a, const ExtrapType &etype=ThrowError)
Calculates interpolated or extrapolated value of tabulated data set for given domain value...
Definition: NumericalApproximation.cpp:830
int ToInteger(const T &value)
Helper function to convert values to Integers.
Definition: HiCalUtil.h:236
bool IsTrueValue(const DbProfile &prof, const QString &key, const QString &value="TRUE")
Determines if the keyword value is the expected value.
Definition: HiCalUtil.h:290
int ValidCount(const HiVector &v)
Counts number of valid pixels in vector.
Definition: HiCalUtil.h:59
QString CcdToFilter(int ccd)
Convert HiRISE Ccd number to string filter name.
Definition: HiCalUtil.h:100
QString value(const QString &key, int nth=0) const
Returns the specified value for the given keyword.
Definition: DbProfile.cpp:160
#define _FILEINFO_
Macro for the filename and line number.
Definition: IException.h:40
A type of error that could only have occurred due to a mistake on the user's part (e...
Definition: IException.h:142
double Time(const double line) const
Definition: HiCalUtil.h:383
bool IsSpecial(const double d)
Returns if the input pixel is special.
Definition: SpecialPixel.h:212
HiVector rebin(const HiVector &v, int n)
Rebins a vector to a different size.
Definition: HiCalUtil.h:430
HiMatrix appendSamples(const HiMatrix &left, const HiMatrix &right)
Definition: HiCalUtil.h:341
Container for cube-like labels.
Definition: Pvl.h:135
const double E
Sets some basic constants for use in ISIS programming.
Definition: Constants.h:55
double ToDouble(const T &value)
Helper function to convert values to doubles.
Definition: HiCalUtil.h:248
void deleteObject(const QString &name)
Remove an object from the current PvlObject.
Definition: PvlObject.cpp:337
HiVector averageLines(const HiMatrix &m, int sline=0, int eline=-1)
Reduces by averaging specified lines from a buffer.
Definition: HiCalUtil.h:171
bool isNamed(const QString &match) const
Returns whether the given string is equal to the container name or not.
Definition: PvlContainer.h:86
void AddData(const double x, const double y)
Add a datapoint to the set.
Definition: NumericalApproximation.cpp:434
Isis exception class.
Definition: IException.h:107
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
T ConfKey(const DbProfile &conf, const QString &keyname, const T &defval, int index=0)
Find a keyword in a profile using default for non-existant keywords.
Definition: HiCalUtil.h:219
void setBin(int bin)
Definition: HiCalUtil.h:382
HiLineTimeEqn()
Definition: HiCalUtil.h:377
HiMatrix cropSamples(const HiMatrix &m, int ssamp, int esamp)
Crop specified samples from a buffer.
Definition: HiCalUtil.h:148
double GainLineStat(std::vector< double > &data)
Return the statistics for a vector of data.
Definition: HiCalUtil.h:488
HiMatrix cropLines(const HiMatrix &m, int sline, int eline)
Crop specified lines from a buffer.
Definition: HiCalUtil.h:125
void AddData(const double *data, const unsigned int count)
Add an array of doubles to the accumulators and counters.
Definition: Statistics.cpp:154
QString ToString(const T &value)
Helper function to convert values to strings.
Definition: HiCalUtil.h:260
double Average() const
Computes and returns the average.
Definition: Statistics.cpp:313
double operator()(const double line) const
Definition: HiCalUtil.h:386
TNT::Array2D< double > HiMatrix
2-D buffer
Definition: HiCalTypes.h:41
T MIN(const T &A, const T &B)
Implement templatized MIN fumnction.
Definition: PhotometricFunction.h:26
T MAX(const T &A, const T &B)
Implement templatized MAX fumnction.
Definition: PhotometricFunction.h:46
TNT::Array1D< double > HiVector
1-D Buffer
Definition: HiCalTypes.h:40