7#include "ProcessImport.h"
14#include "Application.h"
15#include "BoxcarCachingAlgorithm.h"
18#include "CubeAttribute.h"
19#include "IException.h"
21#include "JP2Decoder.h"
22#include "LineManager.h"
26#include "PvlTokenizer.h"
27#include "SpecialPixel.h"
28#include "UserInterface.h"
30#define EXPONENT_MASK ((char) 0x7F)
70 p_vax_convert =
false;
93 for(
unsigned int j = 0; j <
p_dataPre.size(); j++) {
95 for(
unsigned int i = 0; i < temp.size(); i++)
delete [] temp[i];
98 for(
unsigned int j = 0; j <
p_dataPost.size(); j++) {
100 for(
unsigned int i = 0; i < temp.size(); i++)
delete [] temp[i];
120 unsigned int VAX_NULL = 0xFFFFFFFF;
121 unsigned int VAX_MIN = 0xFFEFFFFF;
122 unsigned int VAX_LRS = 0xFFFEFFFF;
123 unsigned int VAX_LIS = 0xFFFDFFFF;
124 unsigned int VAX_HIS = 0xFFFCFFFF;
125 unsigned int VAX_HRS = 0xFFFBFFFF;
129 memcpy(&x, vax,
sizeof(
unsigned int));
133 n = memcmp(&VAX_NULL, &x,
sizeof(
unsigned int));
134 if (n == 0)
return true;
137 n = memcmp(&VAX_LRS, &x,
sizeof(
unsigned int));
138 if (n == 0)
return true;
141 n = memcmp(&VAX_LIS, &x,
sizeof(
unsigned int));
142 if (n == 0)
return true;
145 n = memcmp(&VAX_HIS, &x,
sizeof(
unsigned int));
146 if (n == 0)
return true;
149 n = memcmp(&VAX_HRS, &x,
sizeof(
unsigned int));
150 if (n == 0)
return true;
153 n = memcmp(&VAX_MIN, &x,
sizeof(
unsigned int));
154 if (n == 0)
return true;
175 bool swap_bytes =
false;
176 bool swap_words =
true;
184 unsigned int *oli, *ili;
190 out_order = Isis::Lsb;
194 out_order = Isis::Msb;
197 if (in_order != out_order) {
201 oli = (
unsigned int * ) ibuf;
202 ili = (
unsigned int * ) ibuf;
209 return Isis::LOW_INSTR_SAT8;
213 return Isis::LOW_REPR_SAT8;
217 return Isis::HIGH_INSTR_SAT8;
221 return Isis::HIGH_REPR_SAT8;
225 return Isis::VALID_MIN8;
230 *oli = (*ili <<16) | (*ili >> 16);
233 osi = (
unsigned short* ) oli;
238 osi[0] = (osi[0] >> 8 ) | (osi[0] << 8);
239 osi[1] = (osi[1] >> 8 ) | (osi[1] << 8);
243 oci = (
char *) &osi[exp_word];
245 if ( (oci[exp_byte] & EXPONENT_MASK) != exp_mask) {
246 oci[exp_byte] += exp_adjust;
249 result = *(
float *)oli;
250 dresult =
static_cast<double>(result);
266 if ((type == Isis::Double) || (type == Isis::Real) || (type == Isis::SignedWord) ||
267 (type == Isis::UnsignedWord) || (type == Isis::UnsignedByte) ||
268 (type == Isis::SignedInteger) || type==Isis::UnsignedInteger) {
272 QString msg =
"Unsupported pixel type [" +
280 if ((type == Isis::Double) || (type == Isis::Real) || (type == Isis::SignedWord) ||
281 (type == Isis::UnsignedWord) || (type == Isis::UnsignedByte)) {
285 QString msg =
"Unsupported pixel type [" +
305 if (ns > 0 && nl > 0 && nb > 0) {
311 QString msg =
"Illegal dimension [" +
toString(ns) +
", " +
354 QString msg =
"Illegal file header size [" +
toString(bytes) +
"]";
384 QString msg =
"Illegal file trailer size [" +
toString(bytes) +
"]";
413 QString msg =
"Illegal data header size [" +
toString(bytes) +
"]";
419 void ProcessImport::SetSuffixOffset(
int samples,
int lines,
int coreBands,
int itemBytes) {
449 QString msg =
"Illegal data trailer size [" +
toString(bytes) +
"]";
479 QString msg =
"Illegal data prefix size [" +
toString(bytes) +
"]";
509 QString msg =
"Illegal data suffix size [" +
toString(bytes) +
"]";
534 QString msg =
"File header bytes equals 0. There is nothing to save. "
535 "Use SetFileHeaderBytes() first.";
561 QString msg =
"File trailer bytes equals 0. There is nothing to save. "
562 "Use SetFileTrailerBytes() first.";
590 QString msg =
"Data header bytes equals 0. There is nothing to save. "
591 "Use SetDataHeaderBytes() first.";
619 QString msg =
"Data trailer bytes equals 0. There is nothing to save. "
620 "Use SetDataTrailerBytes() first.";
647 QString msg =
"Data prefix bytes equals 0. There is nothing to save. "
648 "Use SetDataPrefixBytes() first.";
676 QString msg =
"Data suffix bytes equals 0. There is nothing to save. "
677 "Use SetDataSuffixBytes() first.";
757 QString msg =
"File header was not saved. Use SaveFileHeader().";
783 QString msg =
"File trailer was not saved. Use SaveFileTrailer()";
811 QString msg =
"Data header was not saved. Use SaveDataHeader()";
839 QString msg =
"Data trailer was not saved. Use SaveDataTrailer()";
867 QString msg =
"Data prefix was not saved. Use SaveDataPrefix()";
895 QString msg =
"Data suffix was not saved. Use SaveDataSuffix()";
920 p_vax_convert = vax_convert;
994 const double lis,
const double hrs,
1100 if (pixelMin == DBL_MAX || pixelMax == -DBL_MAX)
return;
1105 (pixelMin < p_null_min && pixelMax >
p_null_max))) {
1107 QString msg =
"The " + pixelName +
" range [" +
toString(pixelMin) +
1108 "," +
toString(pixelMax) +
"] overlaps the NULL range [" +
1116 (pixelMin < p_lrs_min && pixelMax >
p_lrs_max))) {
1117 QString msg =
"The " + pixelName +
" range [" +
toString(pixelMin) +
1118 "," +
toString(pixelMax) +
"] overlaps the LRS range [" +
1126 (pixelMin < p_lis_min && pixelMax >
p_lis_max))) {
1127 QString msg =
"The " + pixelName +
" range [" +
toString(pixelMin) +
1128 "," +
toString(pixelMax) +
"] overlaps the LIS range [" +
1136 (pixelMin < p_hrs_min && pixelMax >
p_hrs_max))) {
1137 QString msg =
"The " + pixelName +
" range [" +
toString(pixelMin) +
1138 "," +
toString(pixelMax) +
"] overlaps the HRS range [" +
1146 (pixelMin < p_his_min && pixelMax >
p_his_max))) {
1147 QString msg =
"The " + pixelName +
" range [" +
toString(pixelMin) +
1148 "," +
toString(pixelMax) +
"] overlaps the HIS range [" +
1168 if (pixel <= p_null_max && pixel >=
p_null_min) {
1171 else if (pixel <= p_hrs_max && pixel >=
p_hrs_min) {
1172 return Isis::HIGH_REPR_SAT8;
1174 else if (pixel <= p_lrs_max && pixel >=
p_lrs_min) {
1175 return Isis::LOW_REPR_SAT8;
1177 else if (pixel <= p_his_max && pixel >=
p_his_min) {
1178 return Isis::HIGH_INSTR_SAT8;
1180 else if (pixel <= p_lis_max && pixel >=
p_lis_min) {
1181 return Isis::LOW_INSTR_SAT8;
1199 if (att.propagateMinimumMaximum()) {
1204 min = Isis::VALID_MIN4;
1205 max = Isis::VALID_MAX4;
1208 min = Isis::IVALID_MIN4;
1209 max = Isis::IVALID_MAX4;
1213 min = Isis::VALID_MINUI4;
1214 max = Isis::VALID_MAXUI4;
1229 QString msg =
"Unsupported pixel type [" +
1233 att.setMinimum(min);
1234 att.setMaximum(max);
1237 if (att.propagatePixelType()) {
1239 att.setPixelType(Isis::Real);
1242 att.setPixelType(Isis::Real);
1317 +
"] is not in a supported organization.";
1346 QString msg =
"File [" +
p_inFile +
"] is not in a supported organization.";
1366 readBytes = readBytes *
p_ns;
1367 char *in =
new char [readBytes];
1371 tok = tok.toUpper();
1377 QString inFileName(inFile.expanded());
1378 fin.open(inFileName.toLatin1().data(), ios::in | ios::binary);
1379 if (!fin.is_open()) {
1380 QString msg =
"Cannot open input file [" +
p_inFile +
"]";
1385 streampos pos = fin.tellg();
1397 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1398 toString((
int)pos) +
"]. Byte count [" +
1406 if (funct != NULL) {
1418 for(
int band = 0; band <
p_nb; band++) {
1442 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1443 toString((
int)pos) +
"]. Byte count [" +
1449 vector<char *> tempPre, tempPost;
1452 for(
int line = 0; line <
p_nl; line++) {
1466 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1467 toString((
int)pos) +
"]. Byte count [" +
1474 fin.read(in, readBytes);
1476 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1477 toString((
int)pos) +
"]. Byte count [" +
1484 for(
int samp = 0; samp <
p_ns; samp++) {
1486 case Isis::UnsignedByte:
1487 (*out)[samp] = (double)((
unsigned char *)in)[samp];
1489 case Isis::UnsignedWord:
1491 (double)swapper.UnsignedShortInt((
unsigned short int *)in+samp);
1493 case Isis::SignedWord:
1494 (*out)[samp] = (double)swapper.ShortInt((
short int *)in+samp);
1496 case Isis::SignedInteger:
1497 (*out)[samp] = (double)swapper.Int((
int *)in+samp);
1500 case Isis::UnsignedInteger:
1501 (*out)[samp] = (double)swapper.Uint32_t((
unsigned int *)in+samp);
1508 (*out)[samp] = (double)swapper.Float((
float *)in+samp);
1512 (*out)[samp] = (double)swapper.Double((
double *)in+samp);
1521 (*out)[samp] = mult * ((*out)[samp]) + base;
1525 if (funct == NULL) {
1551 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1552 toString((
int)pos) +
"]. Byte count [" +
1582 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1583 toString((
int)pos) +
"]. Byte count [" +
1593 fin.seekg(0, ios_base::end);
1594 streampos e = fin.tellg();
1602 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1603 toString((
int)pos) +
"]. Byte count [" +
1630 readBytes = readBytes *
p_ns;
1631 char *in =
new char [readBytes];
1635 tok = tok.toUpper();
1641 QString inFileName(inFile.expanded());
1642 fin.open(inFileName.toLatin1().data(), ios::in | ios::binary);
1643 if (!fin.is_open()) {
1644 QString msg =
"Cannot open input file [" +
p_inFile +
"]";
1649 streampos pos = fin.tellg();
1662 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1663 toString((
int)pos) +
"]. Byte count [" +
1671 if (funct != NULL) {
1685 for(
int line = 0; line <
p_nl; line++) {
1687 for(
int band = 0; band <
p_nb; band++) {
1701 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1702 toString((
int)pos) +
"]. Byte count [" +
1708 vector<char *> tempPre, tempPost;
1722 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1723 toString((
int)pos) +
"]. Byte count [" +
1731 fin.read(in, readBytes);
1733 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1734 toString((
int)pos) +
"]. Byte count [" +
1741 for(
int samp = 0; samp <
p_ns; samp++) {
1743 case Isis::UnsignedByte:
1744 (*out)[samp] = (double)((
unsigned char *)in)[samp];
1746 case Isis::UnsignedWord:
1748 (double)swapper.UnsignedShortInt((
unsigned short int *)in+samp);
1750 case Isis::SignedWord:
1751 (*out)[samp] = (double)swapper.ShortInt((
short int *)in+samp);
1753 case Isis::SignedInteger:
1754 (*out)[samp] = (double)swapper.Int((
int *)in+samp);
1756 case Isis::UnsignedInteger:
1757 (*out)[samp] = (double)swapper.Uint32_t((
unsigned int *)in+samp);
1764 (*out)[samp] = (double)swapper.Float((
float *)in+samp);
1768 (*out)[samp] = (double)swapper.Double((
double *)in+samp);
1778 (*out)[samp] = mult * ((*out)[samp]) + base;
1782 if (funct == NULL) {
1805 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1806 toString((
int)pos) +
"]. Byte count [" +
1825 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1826 toString((
int)pos) +
"]. Byte count [" +
1838 fin.seekg(0, ios_base::end);
1839 streampos e = fin.tellg();
1847 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1848 toString((
int)pos) +
"]. Byte count [" +
1875 tok = tok.toUpper();
1881 QString inFileName(inFile.expanded());
1882 fin.open(inFileName.toLatin1().data(), ios::in | ios::binary);
1883 if (!fin.is_open()) {
1884 QString msg =
"Cannot open input file [" +
p_inFile +
"]";
1889 streampos pos = fin.tellg();
1901 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1902 toString((
int)pos) +
"]. Byte count [" +
1912 if (funct != NULL) {
1925 int readBytes =
p_ns * sampleBytes;
1926 char *in =
new char [readBytes];
1929 for(
int line = 0; line <
p_nl; line++) {
1932 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1933 toString((
int)pos) +
"]. Byte count [" +
1939 vector<char *> tempPre, tempPost;
1943 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1944 toString((
int)pos) +
"]. Byte count [" +
1951 fin.read(in, readBytes);
1953 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
1954 toString((
int)pos) +
"]. Byte count [" +
1960 for(
int band = 0; band <
p_nb; band++) {
1976 for(
int samp = 0; samp <
p_ns; samp++) {
1979 case Isis::UnsignedByte:
1980 (*out)[osamp] = (double)((
unsigned char *)in)[bufferIndex];
1982 case Isis::UnsignedWord:
1984 (double)swapper.UnsignedShortInt(&in[bufferIndex]);
1986 case Isis::SignedWord:
1987 (*out)[osamp] = (double)swapper.ShortInt(&in[bufferIndex]);
1989 case Isis::SignedInteger:
1990 (*out)[samp] = (double)swapper.Int(&in[bufferIndex]);
1992 case Isis::UnsignedInteger:
1993 (*out)[samp] = (double)swapper.Uint32_t(&in[bufferIndex]);
2000 (*out)[osamp] = (double)swapper.Float(&in[bufferIndex]);
2004 (*out)[osamp] = (double)swapper.Double(&in[bufferIndex]);
2011 (*out)[osamp] =
TestPixel((*out)[osamp]);
2014 (*out)[osamp] = mult * ((*out)[osamp]) + base;
2019 if (funct == NULL) {
2032 for(
int samp = 0; samp <
p_ns; samp++) {
2035 tempPre.push_back(samplePrefix);
2041 for(
int samp = 0; samp <
p_ns; samp++) {
2045 tempPost.push_back(sampleSuffix);
2053 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
2054 toString((
int)pos) +
"]. Byte count [" +
2071 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
2072 toString((
int)pos) +
"]. Byte count [" +
2084 fin.seekg(0, ios_base::end);
2085 streampos e = fin.tellg();
2093 QString msg =
"Cannot read file [" +
p_inFile +
"]. Position [" +
2094 toString((
int)pos) +
"]. Byte count [" +
2130 JP2_decoder->OpenFile();
2133 p_ns = JP2_decoder->GetSampleDimension();
2134 p_nl = JP2_decoder->GetLineDimension();
2135 p_nb = JP2_decoder->GetBandDimension();
2141 int endsamp = startsamp +
p_ns;
2142 int readBytes = sizeofpixel *
p_ns *
p_nb
2144 char **in =
new char* [
p_nb];
2145 for(
int i = 0; i <
p_nb; i++) {
2146 in[i] =
new char [readBytes];
2152 if (funct != NULL) {
2164 for(
int line = 0; line <
p_nl; line++) {
2166 JP2_decoder->Read((
unsigned char **)in);
2169 JP2_decoder->Read((
short int **)in);
2172 for(
int band = 0; band <
p_nb; band++) {
2185 vector<char *> tempPre, tempPost;
2196 for(
int samp = startsamp; samp < endsamp; samp++) {
2198 case Isis::UnsignedByte:
2199 (*out)[samp] = (double)((
unsigned char *)in[band])[samp];
2201 case Isis::UnsignedWord:
2202 (*out)[samp] = (double)((
unsigned short int *)in[band])[samp];
2204 case Isis::SignedWord:
2205 (*out)[samp] = (double)((
short int *)in[band])[samp];
2215 (*out)[samp] = mult * ((*out)[samp]) + base;
2219 if (funct == NULL) {
2267 void ProcessImport::AddLabel(
Isis::Pvl &label) {
2272 output->Find(
"IsisCube");
2273 output->Insert(label);
2282 void ProcessImport::AddImportLabel(
Isis::Pvl &importLab) {
2287 output->Find(
"IsisCube");
2289 output->Insert(importLab);
2305 QString msg =
"File [" + file +
"] does not exist";
2321 QString msg =
"No input file has been set";
static UserInterface & GetUserInterface()
Returns the UserInterface object.
This algorithm is designed for applications that jump around between a couple of spots in the cube wi...
Buffer for containing a three dimensional section of an image.
Buffer for reading and writing cube data.
Manipulate and parse attributes of output cube filenames.
IO Handler for Isis Cubes.
File name manipulation and expansion.
@ User
A type of error that could only have occurred due to a mistake on the user's part (e....
@ Programmer
This error is for when a programmer made an API call that was illegal.
@ Io
A type of error that occurred when performing an actual I/O operation.
Buffer manager, for moving through a cube in lines.
Base class for all cube processing derivatives.
Isis::Progress * p_progress
Pointer to a Progress object.
virtual Isis::Cube * SetOutputCube(const QString ¶meter)
Allocates a user-specified output cube whose size matches the first input cube.
std::vector< Isis::Cube * > OutputCubes
A vector of pointers to allocated Cube objects.
void SetVAXConvert(const bool vax_convert)
Sets the VAX flag of the input cube.
virtual void StartProcess()
Process the input file and write it to the output.
char * p_fileHeader
The file header.
ProcessImport::Interleave p_organization
The format of the input file.
double p_lis_min
The pixel value which is the lower bound of LIS data.
bool p_saveDataPost
Flag indicating whether to save the data suffix or not.
bool p_saveDataTrailer
Flag indicating whether to save the data trailer or not.
Isis::PixelType p_pixelType
Pixel type of input data.
void SetPixelType(const Isis::PixelType type)
Sets the pixel type of the input file.
void SetFileHeaderBytes(const int bytes)
This method sets the number of bytes in the header of a file.
bool p_saveDataPre
Flag indicating whether to save the data prefix or not.
std::vector< char * > DataTrailer()
This method returns a pointer to the data trailer.
double p_null_max
The pixel value which is the upper bound of NULL data.
ProcessImport()
Constructs an Import object.
void SaveDataPrefix()
This method marks the data prefix to be saved.
void SaveDataTrailer()
This method marks the data block trailers to be saved.
int FileHeaderBytes() const
This method returns the number of file header bytes.
void SetOrganization(const ProcessImport::Interleave org)
Sets the organization of the input cube.
char * FileTrailer()
This method returns a pointer to the file trailer.
void SetDataPrefixBytes(const int bytes)
This method sets the number of bytes at the beginning of each data record of a file.
int DataTrailerBytes() const
This method returns the number of data trailer bytes.
std::vector< double > p_base
An array containing the core base for each band.
QString p_inFile
Input file name.
void SetLIS(const double lis_min, const double lis_max)
Sets the range that will be considered Isis::Null.
int p_ns
Number of samples.
void SetHRS(const double hrs_min, const double hrs_max)
Sets the range that will be considered Isis::Null.
int p_suffixData
The number of bytes past the file header bytes where the suffix data bands are stored.
void SetSpecialValues(const double null, const double lrs, const double lis, const double hrs, const double his)
Sets a mapping of input pixel values to output special pixel values.
std::vector< std::vector< char * > > p_dataPost
The data suffix.
void SetNull(const double null_min, const double null_max)
Sets the range that will be considered Isis::Null.
void SetInputFile(const QString &file)
Sets the name of the input file to be read in the import StartProcess method and verifies its existan...
void SetMultiplier(const double mult)
Sets the core multiplier of the input cube.
void SetDataHeaderBytes(const int bytes)
This method sets the number of bytes in the header of each datablock of a file.
std::vector< double > p_mult
An array containing the core multiplier for each band.
std::vector< char * > p_dataTrailer
The data trailer.
void ProcessBip(void funct(Isis::Buffer &out)=NULL)
Function to process files stored as Band Interleaved by Pixel.
double p_his_min
The pixel value which is the lower bound of HIS data.
double p_lis_max
The pixel value which is the upper bound of LIS data.
Isis::Cube * SetOutputCube(const QString ¶meter)
Create the output file.
void SaveFileTrailer()
This method marks the file trailer to be saved.
bool p_saveDataHeader
Flag indicating whether to save the data header or not.
bool p_saveFileHeader
Flag indicating whether to save the file header or not.
int FileTrailerBytes() const
This method returns the number of file trailer bytes.
double p_lrs_max
The pixel value which is the upper bound of LRS data.
void CheckPixelRange(QString pixelName, double min, double max)
Checks the special pixel range of the given against all other special pixel value ranges,...
double p_hrs_max
The pixel value which is the upper bound of HRS data.
void ProcessJp2(void funct(Isis::Buffer &out)=NULL)
Function to process files containing compressed JPEG2000 data (which is always BSQ but is processed a...
int p_dataTrailerBytes
Number of bytes of non-image data after the image data of each data block, such as band trailer data ...
void SetLRS(const double lrs_min, const double lrs_max)
Sets the range that will be considered Isis::Null.
std::vector< std::vector< char * > > p_dataPre
The data prefix.
double p_lrs_min
The pixel value which is the lower bound of LRS data.
int DataPrefixBytes() const
This method returns the number of data prefix bytes.
double p_null_min
The pixel value which is the lower bound of NULL data.
double p_hrs_min
The pixel value which is the lower bound of HRS data.
int p_fileTrailerBytes
The number of bytes of non-image data at the end of a file.
Isis::PixelType p_suffixPixelType
The pixel type of the suffix data.
bool p_saveFileTrailer
Flag indicating whether to save the file trailer or not.
Interleave Organization() const
Gets the organization of the input cube.
double VAXConversion(void *ibuf)
Conversion routine which translates VAX_REAL to IEEE_REAL.
void SetFileTrailerBytes(const int bytes)
This method sets the number of bytes in the trailer of a file.
void SetDataTrailerBytes(const int bytes)
This method sets the number of bytes in the trailer of each datablock of a file.
std::vector< std::vector< char * > > DataSuffix()
This method returns a pointer to the data suffix.
QString InputFile()
Sets the name of the input file to be read in the import StartProcess method and verifies its existan...
std::vector< char * > p_dataHeader
The data header.
int DataSuffixBytes() const
This method returns the number of data duffix bytes.
void SaveDataHeader()
This method marks the data block headers to be saved.
void SetByteOrder(const Isis::ByteOrder order)
Sets the byte order of the input file.
void ProcessBil(void funct(Isis::Buffer &out)=NULL)
Function to process files stored as Band Interleaved by Line.
double p_his_max
The pixel value which is the upper bound of HIS data.
virtual ~ProcessImport()
Destroys the Import object.
std::vector< std::vector< char * > > DataPrefix()
This method returns a pointer to the data prefix.
void ProcessBsq(void funct(Isis::Buffer &out)=NULL)
Process the import data as a band sequential file.
void SetHIS(const double his_min, const double his_max)
Sets the range that will be considered Isis::Null.
Interleave
This enum includes how the document should be read: by BSQ, BIL, BIP, JP2, or InterleaveUndefined.
@ BIL
Band Interleaved By Line Format (i.e.
@ BIP
Band Interleaved By Pixel Format (i.e.
@ JP2
Jpeg 2000 Format (always band sequential).
@ BSQ
Band Sequential Format (i.e.
std::vector< char * > DataHeader()
This method returns a pointer to the data header.
void SetDataSuffixBytes(const int bytes)
This method sets the number of bytes at the end of each data record of a file.
char * FileHeader()
This method returns a pointer to the file header.
void SetBase(const double base)
Sets the core base of the input cube.
double TestPixel(const double pixel)
Tests the pixel.
Isis::ByteOrder p_byteOrder
Byte order of data.
void SetAttributes(CubeAttributeOutput &att)
Given a CubeAttributeOutput object, set min/max to propagate if propagating min/max attributes was re...
int p_dataPreBytes
Number of bytes of non-image data preceding each data record, such as line prefix data in a band sequ...
int p_dataPostBytes
Number of bytes of non-image data following each data record, such as line suffix data in a band sequ...
char * p_fileTrailer
The file trailer.
void SaveFileHeader()
This method marks the file header to be saved.
void SaveDataSuffix()
This method marks the data suffix to be saved.
int p_dataHeaderBytes
Number of bytes of non-image data after the file header and before the image data of each data block,...
void SetDimensions(const int ns, const int nl, const int nb)
Sets the physical size of the input cube.
int DataHeaderBytes() const
This method returns the number of data header bytes.
int p_fileHeaderBytes
The number of bytes of non-image data at the beginning of a file.
bool IsVAXSpecial(unsigned int *vax, VAXSpecialPixel pix)
Determines if the VAX encoded pixel value is special or not.
void SetMaximumSteps(const int steps)
This sets the maximum number of steps in the process.
void SetText(const QString &text)
Changes the value of the text string reported just before 0% processed.
void CheckStatus()
Checks and updates the status.
Container for cube-like labels.
void addObject(const PvlObject &object)
Add a PvlObject.
Command Line and Xml loader, validation, and access.
ByteOrder
Tests the current architecture for byte order.
This is free and unencumbered software released into the public domain.
bool IsLsb()
Return true if this host is an LSB first machine and false if it is not.
int SizeOf(Isis::PixelType pixelType)
Returns the number of bytes of the specified PixelType.
QString toString(bool boolToConvert)
Global function to convert a boolean to a string.
bool IsValidPixel(const double d)
Returns if the input pixel is valid.
QString PixelTypeName(Isis::PixelType pixelType)
Returns string name of PixelType enumeration entered as input parameter.
PixelType
Enumerations for Isis Pixel Types.
Namespace for the standard library.