Isis 3 Programmer Reference
ProcessImport.h
1 #ifndef ProcessImport_h
2 #define ProcessImport_h
3 
8 /* SPDX-License-Identifier: CC0-1.0 */
9 #include <string>
10 
11 #include "Buffer.h"
12 #include "CubeAttribute.h"
13 #include "EndianSwapper.h"
14 #include "JP2Decoder.h"
15 #include "PixelType.h"
16 #include "Process.h"
17 #include "PvlToPvlTranslationManager.h"
18 #include "SpecialPixel.h"
19 #include "UserInterface.h"
20 
21 namespace Isis {
155  class ProcessImport : public Isis::Process {
156  public:
157  enum VAXDataType {
158  VAX_REAL,
159  VAX_INT
160  };
161 
162 
163  enum VAXSpecialPixel {
164  VAX_MIN4,
165  VAX_NULL4,
166  VAX_LRS4,
167  VAX_LIS4,
168  VAX_HIS4,
169  VAX_HRS4
170  };
171 
172  ProcessImport();
173  virtual ~ProcessImport();
174 
175  using Isis::Process::StartProcess; // make parent functions visable
176  virtual void StartProcess();
177  virtual void StartProcess(void funct(Isis::Buffer &out));
178  void SetInputFile(const QString &file);
179  QString InputFile();
180 
181  // SetOutputCube() is not virtual in the Process class, so the following
182  // definitions for this method are the only ones that are allowed for
183  // ProcessImport objects and child objects
184 
185  using Isis::Process::SetOutputCube; // make parent functions visable
186  Isis::Cube *SetOutputCube(const QString &parameter);
187  Isis::Cube *SetOutputCube(const QString &parameter, UserInterface &ui);
188  virtual Isis::Cube *SetOutputCube(const QString &fname,
190 
192  void SetPixelType(const Isis::PixelType type);
198  return p_pixelType;
199  }
200 
201 
202  void SetDimensions(const int ns, const int nl, const int nb);
203 
208  int Samples() {
209  return p_ns;
210  }
211 
212 
217  int Lines() {
218  return p_nl;
219  }
220 
221 
226  int Bands() {
227  return p_nb;
228  }
229 
230 
231  void SetByteOrder(const Isis::ByteOrder order);
232 
238  return p_byteOrder;
239  }
240 
241  bool IsVAXSpecial(unsigned int *vax, VAXSpecialPixel pix);
242  double VAXConversion(void *ibuf);
243  void SetSuffixOffset(int samples,int lines, int coreBands, int itemBytes);
244  void SetSuffixPixelType(const Isis::PixelType type);
245  void SetVAXConvert(const bool vax_convert);
246 
247  void SetFileHeaderBytes(const int bytes);
248  void SetFileTrailerBytes(const int bytes);
249  void SetDataHeaderBytes(const int bytes);
250  void SetDataTrailerBytes(const int bytes);
251  void SetDataPrefixBytes(const int bytes);
252  void SetDataSuffixBytes(const int bytes);
253  void SaveFileHeader();
254  void SaveFileTrailer();
255  void SaveDataHeader();
256  void SaveDataTrailer();
257  void SaveDataPrefix();
258  void SaveDataSuffix();
259 
260  int FileHeaderBytes() const;
261  int FileTrailerBytes() const;
262  int DataHeaderBytes() const;
263  int DataTrailerBytes() const;
264  int DataPrefixBytes() const;
265  int DataSuffixBytes() const;
266 
267  char *FileHeader();
268  char *FileTrailer();
269  std::vector<char *> DataHeader();
270  std::vector<char *> DataTrailer();
271  std::vector<std::vector<char *> > DataPrefix();
272  std::vector<std::vector<char *> > DataSuffix();
273 
278  enum Interleave {
280  JP2,
281  BSQ,
284  BIL,
288  BIP
292  };
293 
294 
296  Interleave Organization() const;
297 
298  void SetBase(const double base);
299  void SetMultiplier(const double mult);
300  void SetBase(const std::vector<double> base);
301  void SetMultiplier(const std::vector<double> mult);
302 
303  void SetSpecialValues(const double null, const double lrs,
304  const double lis, const double hrs,
305  const double his);
306  void SetNull(const double null_min, const double null_max);
307  void SetLRS(const double lrs_min, const double lrs_max);
308  void SetLIS(const double lis_min, const double lis_max);
309  void SetHRS(const double hrs_min, const double hrs_max);
310  void SetHIS(const double his_min, const double his_max);
311 
312  double TestPixel(const double pixel);
313 
314  void ProcessBsq(void funct(Isis::Buffer &out) = NULL);
315  void ProcessBil(void funct(Isis::Buffer &out) = NULL);
316  void ProcessBip(void funct(Isis::Buffer &out) = NULL);
317  void ProcessJp2(void funct(Isis::Buffer &out) = NULL);
318 
319  void CheckPixelRange(QString pixelName, double min, double max);
320 
321 #if 0
322  void AddImportLabel(Isis::Pvl &importLab);
323  void AddLabel(Isis::Pvl &label);
324 #endif
325 
326 
327  private:
328  QString p_inFile;
330 
332  int p_ns;
333  int p_nl;
334  int p_nb;
336 
375  char *p_fileHeader;
376  std::vector<char *>p_dataHeader;
377  std::vector<char *>p_dataTrailer;
378  std::vector<std::vector<char *> >p_dataPre;
379  std::vector<std::vector<char *> >p_dataPost;
381 
382  bool p_vax_convert;
383 
391  std::vector<double> p_base;
395  std::vector<double> p_mult;
400  double p_null_min;
404  double p_null_max;
408  double p_hrs_min;
412  double p_hrs_max;
416  double p_his_min;
420  double p_his_max;
424  double p_lrs_min;
428  double p_lrs_max;
432  double p_lis_min;
436  double p_lis_max;
439  };
440 };
441 #endif
Isis::ProcessImport::DataHeader
std::vector< char * > DataHeader()
This method returns a pointer to the data header.
Definition: ProcessImport.cpp:807
Isis::ProcessImport::p_mult
std::vector< double > p_mult
An array containing the core multiplier for each band.
Definition: ProcessImport.h:395
Isis::ProcessImport::SetDataPrefixBytes
void SetDataPrefixBytes(const int bytes)
This method sets the number of bytes at the beginning of each data record of a file.
Definition: ProcessImport.cpp:473
Isis::ProcessImport::SetLIS
void SetLIS(const double lis_min, const double lis_max)
Sets the range that will be considered Isis::Null.
Definition: ProcessImport.cpp:1048
Isis::ProcessImport::InterleaveUndefined
@ InterleaveUndefined
Undefined.
Definition: ProcessImport.h:279
Isis::ProcessImport::SetDataHeaderBytes
void SetDataHeaderBytes(const int bytes)
This method sets the number of bytes in the header of each datablock of a file.
Definition: ProcessImport.cpp:408
Isis::ProcessImport::IsVAXSpecial
bool IsVAXSpecial(unsigned int *vax, VAXSpecialPixel pix)
Determines if the VAX encoded pixel value is special or not.
Definition: ProcessImport.cpp:118
Isis::ProcessImport::p_lrs_min
double p_lrs_min
The pixel value which is the lower bound of LRS data.
Definition: ProcessImport.h:424
Isis::ProcessImport::Bands
int Bands()
Returns the number of bands.
Definition: ProcessImport.h:226
Isis::ProcessImport::p_suffixPixelType
Isis::PixelType p_suffixPixelType
The pixel type of the suffix data.
Definition: ProcessImport.h:331
Isis::ProcessImport::ProcessBsq
void ProcessBsq(void funct(Isis::Buffer &out)=NULL)
Process the import data as a band sequential file.
Definition: ProcessImport.cpp:1363
Isis::ProcessImport::p_null_max
double p_null_max
The pixel value which is the upper bound of NULL data.
Definition: ProcessImport.h:404
Isis::ProcessImport::p_dataPreBytes
int p_dataPreBytes
Number of bytes of non-image data preceding each data record, such as line prefix data in a band sequ...
Definition: ProcessImport.h:357
Isis::ProcessImport::p_lis_max
double p_lis_max
The pixel value which is the upper bound of LIS data.
Definition: ProcessImport.h:436
Isis::ProcessImport::SetBase
void SetBase(const double base)
Sets the core base of the input cube.
Definition: ProcessImport.cpp:938
Isis::ProcessImport::ProcessBip
void ProcessBip(void funct(Isis::Buffer &out)=NULL)
Function to process files stored as Band Interleaved by Pixel.
Definition: ProcessImport.cpp:1871
Isis::ProcessImport::InputFile
QString InputFile()
Sets the name of the input file to be read in the import StartProcess method and verifies its existan...
Definition: ProcessImport.cpp:2319
Isis::ProcessImport::SetVAXConvert
void SetVAXConvert(const bool vax_convert)
Sets the VAX flag of the input cube.
Definition: ProcessImport.cpp:919
Isis::ProcessImport::DataSuffixBytes
int DataSuffixBytes() const
This method returns the number of data duffix bytes.
Definition: ProcessImport.cpp:729
Isis::ProcessImport::p_dataHeader
std::vector< char * > p_dataHeader
The data header.
Definition: ProcessImport.h:376
Isis::ProcessImport::SetFileTrailerBytes
void SetFileTrailerBytes(const int bytes)
This method sets the number of bytes in the trailer of a file.
Definition: ProcessImport.cpp:379
Isis::ProcessImport::DataSuffix
std::vector< std::vector< char * > > DataSuffix()
This method returns a pointer to the data suffix.
Definition: ProcessImport.cpp:891
Isis::ProcessImport::p_dataPost
std::vector< std::vector< char * > > p_dataPost
The data suffix.
Definition: ProcessImport.h:379
Isis::ProcessImport::BIL
@ BIL
Band Interleaved By Line Format (i.e.
Definition: ProcessImport.h:284
Isis::ProcessImport::p_fileHeader
char * p_fileHeader
The file header.
Definition: ProcessImport.h:375
Isis::ProcessImport::p_saveFileHeader
bool p_saveFileHeader
Flag indicating whether to save the file header or not.
Definition: ProcessImport.h:363
Isis::Process
Base class for all cube processing derivatives.
Definition: Process.h:143
Isis::ProcessImport::p_dataTrailer
std::vector< char * > p_dataTrailer
The data trailer.
Definition: ProcessImport.h:377
Isis::Pvl
Container for cube-like labels.
Definition: Pvl.h:119
Isis::CubeAttributeOutput
Manipulate and parse attributes of output cube filenames.
Definition: CubeAttribute.h:473
Isis::ProcessImport::p_lrs_max
double p_lrs_max
The pixel value which is the upper bound of LRS data.
Definition: ProcessImport.h:428
Isis::ProcessImport::SetAttributes
void SetAttributes(CubeAttributeOutput &att)
Given a CubeAttributeOutput object, set min/max to propagate if propagating min/max attributes was re...
Definition: ProcessImport.cpp:1198
Isis::ProcessImport::p_pixelType
Isis::PixelType p_pixelType
Pixel type of input data.
Definition: ProcessImport.h:329
Isis::ProcessImport::~ProcessImport
virtual ~ProcessImport()
Destroys the Import object.
Definition: ProcessImport.cpp:78
Isis::ProcessImport::p_his_max
double p_his_max
The pixel value which is the upper bound of HIS data.
Definition: ProcessImport.h:420
Isis::ProcessImport::p_hrs_max
double p_hrs_max
The pixel value which is the upper bound of HRS data.
Definition: ProcessImport.h:412
Isis::ProcessImport::p_fileTrailer
char * p_fileTrailer
The file trailer.
Definition: ProcessImport.h:380
Isis::ProcessImport::SaveDataTrailer
void SaveDataTrailer()
This method marks the data block trailers to be saved.
Definition: ProcessImport.cpp:617
Isis::ProcessImport::p_saveDataPost
bool p_saveDataPost
Flag indicating whether to save the data suffix or not.
Definition: ProcessImport.h:371
Isis::ProcessImport::SaveDataHeader
void SaveDataHeader()
This method marks the data block headers to be saved.
Definition: ProcessImport.cpp:588
Isis::Process::StartProcess
virtual void StartProcess(void funct())
In the base class, this method will invoked a user-specified function exactly one time.
Definition: Process.h:213
Isis::ByteOrder
ByteOrder
Tests the current architecture for byte order.
Definition: Endian.h:42
Isis::ProcessImport::SaveDataSuffix
void SaveDataSuffix()
This method marks the data suffix to be saved.
Definition: ProcessImport.cpp:674
Isis::Buffer
Buffer for reading and writing cube data.
Definition: Buffer.h:53
Isis::ProcessImport::SaveDataPrefix
void SaveDataPrefix()
This method marks the data prefix to be saved.
Definition: ProcessImport.cpp:645
Isis::ProcessImport::p_nl
int p_nl
Number of lines.
Definition: ProcessImport.h:333
Isis::ProcessImport::DataTrailer
std::vector< char * > DataTrailer()
This method returns a pointer to the data trailer.
Definition: ProcessImport.cpp:835
Isis::ProcessImport::p_organization
ProcessImport::Interleave p_organization
The format of the input file.
Definition: ProcessImport.h:384
Isis::ProcessImport::DataPrefix
std::vector< std::vector< char * > > DataPrefix()
This method returns a pointer to the data prefix.
Definition: ProcessImport.cpp:863
Isis::ProcessImport::SetDimensions
void SetDimensions(const int ns, const int nl, const int nb)
Sets the physical size of the input cube.
Definition: ProcessImport.cpp:304
Isis::ProcessImport::SetOutputCube
Isis::Cube * SetOutputCube(const QString &parameter)
Create the output file.
Definition: ProcessImport.cpp:1261
Isis::ProcessImport::p_lis_min
double p_lis_min
The pixel value which is the lower bound of LIS data.
Definition: ProcessImport.h:432
Isis::ProcessImport::p_byteOrder
Isis::ByteOrder p_byteOrder
Byte order of data.
Definition: ProcessImport.h:335
Isis::ProcessImport::DataPrefixBytes
int DataPrefixBytes() const
This method returns the number of data prefix bytes.
Definition: ProcessImport.cpp:721
Isis::ProcessImport::VAXConversion
double VAXConversion(void *ibuf)
Conversion routine which translates VAX_REAL to IEEE_REAL.
Definition: ProcessImport.cpp:171
Isis::ProcessImport::p_ns
int p_ns
Number of samples.
Definition: ProcessImport.h:332
Isis::ProcessImport::p_dataTrailerBytes
int p_dataTrailerBytes
Number of bytes of non-image data after the image data of each data block, such as band trailer data ...
Definition: ProcessImport.h:353
Isis::ProcessImport::p_suffixData
int p_suffixData
The number of bytes past the file header bytes where the suffix data bands are stored.
Definition: ProcessImport.h:337
Isis::ProcessImport
Byte swapper.
Definition: ProcessImport.h:155
Isis::ProcessImport::p_fileHeaderBytes
int p_fileHeaderBytes
The number of bytes of non-image data at the beginning of a file.
Definition: ProcessImport.h:341
Isis::ProcessImport::p_his_min
double p_his_min
The pixel value which is the lower bound of HIS data.
Definition: ProcessImport.h:416
Isis::ProcessImport::SetInputFile
void SetInputFile(const QString &file)
Sets the name of the input file to be read in the import StartProcess method and verifies its existan...
Definition: ProcessImport.cpp:2302
Isis::ProcessImport::Organization
Interleave Organization() const
Gets the organization of the input cube.
Definition: ProcessImport.cpp:928
Isis::ProcessImport::SetHIS
void SetHIS(const double his_min, const double his_max)
Sets the range that will be considered Isis::Null.
Definition: ProcessImport.cpp:1082
Isis::ProcessImport::SetSpecialValues
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.
Definition: ProcessImport.cpp:993
Isis::ProcessImport::SetDataSuffixBytes
void SetDataSuffixBytes(const int bytes)
This method sets the number of bytes at the end of each data record of a file.
Definition: ProcessImport.cpp:503
Isis::ProcessImport::ByteOrder
Isis::ByteOrder ByteOrder()
Returns the byte order.
Definition: ProcessImport.h:237
Isis::ProcessImport::FileTrailerBytes
int FileTrailerBytes() const
This method returns the number of file trailer bytes.
Definition: ProcessImport.cpp:697
Isis::ProcessImport::p_base
std::vector< double > p_base
An array containing the core base for each band.
Definition: ProcessImport.h:391
Isis::ProcessImport::p_saveDataHeader
bool p_saveDataHeader
Flag indicating whether to save the data header or not.
Definition: ProcessImport.h:365
Isis::Cube
IO Handler for Isis Cubes.
Definition: Cube.h:167
Isis::ProcessImport::SetPixelType
void SetPixelType(const Isis::PixelType type)
Sets the pixel type of the input file.
Definition: ProcessImport.cpp:264
Isis::ProcessImport::SaveFileTrailer
void SaveFileTrailer()
This method marks the file trailer to be saved.
Definition: ProcessImport.cpp:559
Isis::ProcessImport::DataTrailerBytes
int DataTrailerBytes() const
This method returns the number of data trailer bytes.
Definition: ProcessImport.cpp:713
Isis::ProcessImport::SetOrganization
void SetOrganization(const ProcessImport::Interleave org)
Sets the organization of the input cube.
Definition: ProcessImport.cpp:907
Isis::ProcessImport::StartProcess
virtual void StartProcess()
Process the input file and write it to the output.
Definition: ProcessImport.cpp:1302
Isis::ProcessImport::PixelType
Isis::PixelType PixelType()
Returns the pixel type.
Definition: ProcessImport.h:197
Isis::ProcessImport::Interleave
Interleave
This enum includes how the document should be read: by BSQ, BIL, BIP, JP2, or InterleaveUndefined.
Definition: ProcessImport.h:278
Isis::Process::SetOutputCube
virtual Isis::Cube * SetOutputCube(const QString &parameter)
Allocates a user-specified output cube whose size matches the first input cube.
Definition: Process.cpp:160
Isis::ProcessImport::p_saveDataTrailer
bool p_saveDataTrailer
Flag indicating whether to save the data trailer or not.
Definition: ProcessImport.h:367
Isis::ProcessImport::SetNull
void SetNull(const double null_min, const double null_max)
Sets the range that will be considered Isis::Null.
Definition: ProcessImport.cpp:1014
Isis::ProcessImport::FileHeaderBytes
int FileHeaderBytes() const
This method returns the number of file header bytes.
Definition: ProcessImport.cpp:688
Isis::PixelType
PixelType
Enumerations for Isis Pixel Types.
Definition: PixelType.h:27
Isis::ProcessImport::p_null_min
double p_null_min
The pixel value which is the lower bound of NULL data.
Definition: ProcessImport.h:400
Isis::ProcessImport::Lines
int Lines()
Returns the number of lines.
Definition: ProcessImport.h:217
Isis::UserInterface
Command Line and Xml loader, validation, and access.
Definition: UserInterface.h:140
Isis::ProcessImport::SetMultiplier
void SetMultiplier(const double mult)
Sets the core multiplier of the input cube.
Definition: ProcessImport.cpp:959
Isis::ProcessImport::ProcessJp2
void ProcessJp2(void funct(Isis::Buffer &out)=NULL)
Function to process files containing compressed JPEG2000 data (which is always BSQ but is processed a...
Definition: ProcessImport.cpp:2123
Isis::ProcessImport::SaveFileHeader
void SaveFileHeader()
This method marks the file header to be saved.
Definition: ProcessImport.cpp:532
Isis::ProcessImport::DataHeaderBytes
int DataHeaderBytes() const
This method returns the number of data header bytes.
Definition: ProcessImport.cpp:705
Isis::ProcessImport::p_inFile
QString p_inFile
Input file name.
Definition: ProcessImport.h:328
Isis::ProcessImport::p_fileTrailerBytes
int p_fileTrailerBytes
The number of bytes of non-image data at the end of a file.
Definition: ProcessImport.h:345
Isis::ProcessImport::SetByteOrder
void SetByteOrder(const Isis::ByteOrder order)
Sets the byte order of the input file.
Definition: ProcessImport.cpp:324
Isis::ProcessImport::TestPixel
double TestPixel(const double pixel)
Tests the pixel.
Definition: ProcessImport.cpp:1167
Isis::ProcessImport::p_dataPre
std::vector< std::vector< char * > > p_dataPre
The data prefix.
Definition: ProcessImport.h:378
Isis::ProcessImport::BSQ
@ BSQ
Band Sequential Format (i.e.
Definition: ProcessImport.h:281
Isis::ProcessImport::ProcessBil
void ProcessBil(void funct(Isis::Buffer &out)=NULL)
Function to process files stored as Band Interleaved by Line.
Definition: ProcessImport.cpp:1626
Isis::ProcessImport::ProcessImport
ProcessImport()
Constructs an Import object.
Definition: ProcessImport.cpp:37
Isis::ProcessImport::p_dataPostBytes
int p_dataPostBytes
Number of bytes of non-image data following each data record, such as line suffix data in a band sequ...
Definition: ProcessImport.h:360
Isis::ProcessImport::SetFileHeaderBytes
void SetFileHeaderBytes(const int bytes)
This method sets the number of bytes in the header of a file.
Definition: ProcessImport.cpp:349
Isis::ProcessImport::CheckPixelRange
void CheckPixelRange(QString pixelName, double min, double max)
Checks the special pixel range of the given against all other special pixel value ranges,...
Definition: ProcessImport.cpp:1098
Isis::ProcessImport::JP2
@ JP2
Jpeg 2000 Format (always band sequential).
Definition: ProcessImport.h:280
Isis::ProcessImport::p_saveFileTrailer
bool p_saveFileTrailer
Flag indicating whether to save the file trailer or not.
Definition: ProcessImport.h:373
Isis::ProcessImport::Samples
int Samples()
Returns the number of samples.
Definition: ProcessImport.h:208
Isis::ProcessImport::FileTrailer
char * FileTrailer()
This method returns a pointer to the file trailer.
Definition: ProcessImport.cpp:779
Isis::ProcessImport::p_saveDataPre
bool p_saveDataPre
Flag indicating whether to save the data prefix or not.
Definition: ProcessImport.h:369
Isis::ProcessImport::p_dataHeaderBytes
int p_dataHeaderBytes
Number of bytes of non-image data after the file header and before the image data of each data block,...
Definition: ProcessImport.h:349
Isis::ProcessImport::SetLRS
void SetLRS(const double lrs_min, const double lrs_max)
Sets the range that will be considered Isis::Null.
Definition: ProcessImport.cpp:1031
Isis::ProcessImport::SetDataTrailerBytes
void SetDataTrailerBytes(const int bytes)
This method sets the number of bytes in the trailer of each datablock of a file.
Definition: ProcessImport.cpp:443
Isis::ProcessImport::p_hrs_min
double p_hrs_min
The pixel value which is the lower bound of HRS data.
Definition: ProcessImport.h:408
Isis::ProcessImport::p_nb
int p_nb
Number of bands.
Definition: ProcessImport.h:334
Isis
This is free and unencumbered software released into the public domain.
Definition: Apollo.h:16
Isis::ProcessImport::BIP
@ BIP
Band Interleaved By Pixel Format (i.e.
Definition: ProcessImport.h:288
Isis::ProcessImport::SetHRS
void SetHRS(const double hrs_min, const double hrs_max)
Sets the range that will be considered Isis::Null.
Definition: ProcessImport.cpp:1065
Isis::ProcessImport::FileHeader
char * FileHeader()
This method returns a pointer to the file header.
Definition: ProcessImport.cpp:753