28 #include <QStringList>
91 #if ISIS_LITTLE_ENDIAN
92 # define DBL_INIT(a,b) {(b), (a)}
94 # define DBL_INIT(a,b) {(a), (b)}
99 const DBL_UNION IVALID_MIN8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFA) };
100 const double VALID_MIN8 = IVALID_MIN8.d;
107 const DBL_UNION INULL8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFB) };
108 const double NULL8 = INULL8.d;
111 const DBL_UNION ILOW_REPR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFC) };
112 const double LOW_REPR_SAT8 = ILOW_REPR_SAT8.d;
113 const double Lrs = ILOW_REPR_SAT8.d;
117 const DBL_UNION ILOW_INSTR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFD) };
118 const double LOW_INSTR_SAT8 = ILOW_INSTR_SAT8.d;
119 const double Lis = ILOW_INSTR_SAT8.d;
123 const DBL_UNION IHIGH_INSTR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFE) };
124 const double HIGH_INSTR_SAT8 = IHIGH_INSTR_SAT8.d;
125 const double His = IHIGH_INSTR_SAT8.d;
129 const DBL_UNION IHIGH_REPR_SAT8 = { DBL_INIT(0xFFEFFFFF, 0xFFFFFFFF) };
130 const double HIGH_REPR_SAT8 = IHIGH_REPR_SAT8.d;
131 const double Hrs = IHIGH_REPR_SAT8.d;
135 const double VALID_MAX8 = DBL_MAX;
143 const int IVALID_MIN4 = 0xFF7FFFFA;
144 const float VALID_MIN4 = (*((
const float *) &IVALID_MIN4));
146 const int INULL4 = 0xFF7FFFFB;
147 const float NULL4 = (*((
const float *) &INULL4));
149 const int ILOW_REPR_SAT4 = 0xFF7FFFFC;
150 const float LOW_REPR_SAT4 = (*((
const float *) &ILOW_REPR_SAT4));
152 const int ILOW_INSTR_SAT4 = 0xFF7FFFFD;
153 const float LOW_INSTR_SAT4 = (*((
const float *) &ILOW_INSTR_SAT4));
155 const int IHIGH_INSTR_SAT4 = 0xFF7FFFFE;
156 const float HIGH_INSTR_SAT4 = (*((
const float *) &IHIGH_INSTR_SAT4));
158 const int IHIGH_REPR_SAT4 = 0xFF7FFFFF;
159 const float HIGH_REPR_SAT4 = (*((
const float *) &IHIGH_REPR_SAT4));
161 const float VALID_MAX4 = FLT_MAX;
162 const int IVALID_MAX4 = (*((
const int *) &VALID_MAX4));
165 const short VALID_MIN2 = ((short)(-32752));
166 const short NULL2 = ((short)(-32768));
167 const short LOW_REPR_SAT2 = ((short)(-32767));
168 const short LOW_INSTR_SAT2 = ((short)(-32766));
169 const short HIGH_INSTR_SAT2 = ((short)(-32765));
170 const short HIGH_REPR_SAT2 = ((short)(-32764));
171 const short VALID_MAX2 = ((short) 32767);
174 const unsigned short VALID_MINU2 = ((
unsigned short) 3);
175 const unsigned short NULLU2 = ((
unsigned short) 0);
176 const unsigned short LOW_REPR_SATU2 = ((
unsigned short) 1);
177 const unsigned short LOW_INSTR_SATU2 = ((
unsigned short) 2);
178 const unsigned short HIGH_INSTR_SATU2 = ((
unsigned short) 65534);
179 const unsigned short HIGH_REPR_SATU2 = ((
unsigned short) 65535);
180 const unsigned short VALID_MAXU2 = ((
unsigned short) 65522);
183 const unsigned char VALID_MIN1 = ((
unsigned char) 1);
184 const unsigned char NULL1 = ((
unsigned char) 0);
185 const unsigned char LOW_REPR_SAT1 = ((
unsigned char) 0);
186 const unsigned char LOW_INSTR_SAT1 = ((
unsigned char) 0);
187 const unsigned char HIGH_INSTR_SAT1 = ((
unsigned char) 255);
188 const unsigned char HIGH_REPR_SAT1 = ((
unsigned char) 255);
189 const unsigned char VALID_MAX1 = ((
unsigned char) 254);
200 return (d < VALID_MIN8);
214 return (f < VALID_MIN4);
226 return (d >= VALID_MIN8);
250 return (d == HIGH_REPR_SAT8) || (d == HIGH_INSTR_SAT8);
262 return (d == LOW_REPR_SAT8) || (d == LOW_INSTR_SAT8);
274 return (d == HIGH_REPR_SAT8);
286 return (d == HIGH_INSTR_SAT8);
298 return (d == LOW_INSTR_SAT8);
310 return (d == LOW_REPR_SAT8);
323 if(t == NULL4)
return (NULL8);
324 if(t == LOW_REPR_SAT4)
return (LOW_REPR_SAT8);
325 if(t == LOW_INSTR_SAT4)
return (LOW_INSTR_SAT8);
326 if(t == HIGH_REPR_SAT4)
return (HIGH_REPR_SAT8);
327 if(t == HIGH_INSTR_SAT4)
return (HIGH_INSTR_SAT8);
328 return (LOW_REPR_SAT8);
330 else if(t > VALID_MAX4) {
331 return (HIGH_REPR_SAT8);
348 if(t < (
double) VALID_MIN4) {
349 if(t == NULL8)
return (NULL4);
350 if(t == LOW_REPR_SAT8)
return (LOW_REPR_SAT4);
351 if(t == LOW_INSTR_SAT8)
return (LOW_INSTR_SAT4);
352 if(t == HIGH_INSTR_SAT8)
return (HIGH_INSTR_SAT4);
353 if(t == HIGH_REPR_SAT8)
return (HIGH_REPR_SAT4);
354 return (LOW_REPR_SAT4);
356 else if(t > (
double) VALID_MAX4) {
357 return (HIGH_REPR_SAT8);
384 return result.setNum(d,
'g', 8);
398 QString s = str.toUpper();
401 legal.push_back(
"NULL");
402 legal.push_back(
"HRS");
403 legal.push_back(
"LRS");
404 legal.push_back(
"HIS");
405 legal.push_back(
"LIS");
407 for(
int i = 0; i < (int) legal.size(); i++) {
408 if(legal[i].mid(0, s.size()) == s) {
413 QString msg =
"Input [" + str +
"] is not a unique abbreviation. Use " + s +
"I or " + s +
"R.";
421 QString msg =
"Input [" + str +
"] does not appear to be a legal special pixel abbreviation or double value.";
425 if(s[0] ==
'N')
return Null;
426 if(s.mid(0, 2) ==
"HR")
return Hrs;
427 if(s.mid(0, 2) ==
"LR")
return Lrs;
428 if(s.mid(0, 2) ==
"HI")
return His;
bool IsLisPixel(const double d)
Returns if the input pixel is low instrument saturation.
Manipulate special pixel values.
const double Null
Value for an Isis Null pixel.
bool IsLrsPixel(const double d)
Returns if the input pixel is low representation saturation.
const double ValidMinimum
The minimum valid double value for Isis pixels.
bool IsLowPixel(const double d)
Returns if the input pixel is one of the low saturation types.
double StringToPixel(const QString &str)
Takes the name of the pixel type as a string and returns a double pixel value.
bool IsValidPixel(const double d)
Returns if the input pixel is valid.
double toDouble(const QString &string)
Global function to convert from a string to a double.
bool IsHisPixel(const double d)
Returns if the input pixel is high instrument saturation.
bool IsHrsPixel(const double d)
Returns if the input pixel is high representation saturation.
const double Lis
Value for an Isis Low Instrument Saturation pixel.
#define _FILEINFO_
Macro for the filename and line number.
double TestPixel(const float t)
Converts float pixels to double pixels with special pixel translations.
A type of error that could only have occurred due to a mistake on the user's part (e...
bool IsSpecial(const double d)
Returns if the input pixel is special.
const double ValidMaximum
The maximum valid double value for Isis pixels.
bool IsHighPixel(const double d)
Returns if the input pixel is one of the high saturation types.
QString PixelToString(double d)
Takes a double pixel value and returns the name of the pixel type as a string.
bool IsNullPixel(const double d)
Returns if the input pixel is null.
const double Lrs
Value for an Isis Low Representation Saturation pixel.
const double His
Value for an Isis High Instrument Saturation pixel.
const double Hrs
Value for an Isis High Representation Saturation pixel.