Isis 3 Programmer Reference
ProcessExport.h
Go to the documentation of this file.
1 #ifndef ProcessExport_h
2 #define ProcessExport_h
3 
24 #include "Process.h"
25 
26 #include <fstream>
27 #include <iostream>
28 #include <string>
29 
30 #include <QCryptographicHash>
31 #include <QString>
32 
33 #include "Buffer.h"
34 #include "BufferManager.h"
35 #include "Endian.h"
36 #include "EndianSwapper.h"
37 #include "SpecialPixel.h"
38 #include "Stretch.h"
39 
40 namespace Isis {
125  class ProcessExport : public Isis::Process {
126 
127  public:
128 
131  BSQ,
132  BIL,
133  BIP,
135  };
136 
137  ProcessExport();
138  virtual ~ProcessExport();
139  using Isis::Process::StartProcess; // make parents virtual function visable
140  virtual void StartProcess(void funct(Isis::Buffer &in));
141  virtual void StartProcess(void funct(std::vector<Isis::Buffer *> &in));
142  virtual void StartProcess(std::ofstream &fout);
143  void SetOutputRange(const double minimum, const double maximum);
144  void SetOutputNull(const double value);
145  void SetOutputLis(const double value);
146  void SetOutputLrs(const double value);
147  void SetOutputHis(const double value);
148  void SetOutputHrs(const double value);
149  double OutputNull();
150  double OutputLis();
151  double OutputLrs();
152  double OutputHis();
153  double OutputHrs();
154  bool HasInputRange() const;
155  void SetInputRange();
156  void SetInputRange(const double minimum, const double maximum);
157  void SetInputRange(const double minimum, const double maximum, const int index);
158  void SetInputRange(const double minimum, const double middle,
159  const double maximum);
160  void SetInputRange(const double minimum, const double middle,
161  const double maximum, const int index);
162  void CreateWorldFile(const QString &worldFile);
163  void SetOutputEndian(enum ByteOrder endianness);
164  void SetOutputType(Isis::PixelType pixelIn);
165 
166  void setCanGenerateChecksum(bool flag);
167  bool canGenerateChecksum();
168  QString checksum();
169 
170  double GetInputMinimum(unsigned int n=0) const;
171  double GetInputMaximum(unsigned int n=0) const;
172 
174  double GetOutputMinimum() {
175  return (p_outputMinimum);
176  };
178  double GetOutputMaximum() {
179  return (p_outputMaximum);
180  };
181 
183  void setFormat(ExportFormat format) {
184  p_format = format;
185  };
186 
187 
188  template <typename Functor> void ProcessCubes(const Functor & functor) {
189 
190  int samples = InputCubes[0]->sampleCount();
191  int length = 0;
192  if (p_format == BIP) {
193  length = InputCubes[0]->bandCount();
194  }
195  else {
196  length = InputCubes[0]->lineCount();
197  }
198 
199  // Loop and let the app programmer fiddle with the lines
200  std::vector<BufferManager *> imgrs = GetBuffers();
201  for (int k = 1; k <= length; k++) {
202  std::vector<Buffer *> ibufs;
203 
204  for (unsigned int cubeIndex = 0; cubeIndex < InputCubes.size(); cubeIndex++) {
205  // Read a line of data from this cube
206  InputCubes[cubeIndex]->read(*imgrs[cubeIndex]);
207 
208  // Stretch the pixels into the desired range
209  for (int sampleIndex = 0; sampleIndex < samples; sampleIndex++) {
210  (*imgrs[cubeIndex])[sampleIndex] =
211  p_str[cubeIndex]->Map((*imgrs[cubeIndex])[sampleIndex]);
212  }
213 
214  ibufs.push_back(imgrs[cubeIndex]);
215  }
216 
217  // Invoke the user function
218  functor(ibufs);
219 
220  for (unsigned int i = 0; i < imgrs.size(); i++) imgrs[i]->next();
222  }
223  }
224 
225  protected:
226 
229 
230  std::vector<BufferManager *> GetBuffers();
231  std::vector<BufferManager *> GetBuffersBSQ();
232  std::vector<BufferManager *> GetBuffersBIL();
233  std::vector<BufferManager *> GetBuffersBIP();
234 
236  double p_outputMiddle;
239 
240  std::vector<double> p_inputMinimum;
243  std::vector<double> p_inputMiddle;
247  std::vector<double> p_inputMaximum;
253 
256  std::vector<Stretch *> p_str;
260  double p_Null;
261  double p_Lis;
263  double p_Lrs;
265  double p_His;
267  double p_Hrs;
270  bool p_Null_Set;
272  bool p_Lis_Set;
274  bool p_Lrs_Set;
276  bool p_His_Set;
278  bool p_Hrs_Set;
281  QCryptographicHash *m_cryptographicHash;
285  private:
287  void isisOut8(Buffer &in, std::ofstream &fout);
288 
290  void isisOut16s(Buffer &in, std::ofstream &fout);
291 
293  void isisOut16u(Buffer &in, std::ofstream &fout);
294 
297  void isisOut32(Buffer &in, std::ofstream &fout);
298 
301  void isisOut64(Buffer &in, std::ofstream &fout);
302 
306  void InitProcess();
307 
308 
309  };
310 };
311 
312 #endif
bool canGenerateChecksum()
Return if we can generate a checksum
Buffer for reading and writing cube data.
Definition: Buffer.h:69
virtual ~ProcessExport()
Destructor.
bool m_canGenerateChecksum
Flag to determine if a file checksum will be generated.
void isisOut16s(Buffer &in, std::ofstream &fout)
Method for writing 16-bit signed pixel data to a file stream.
void SetOutputLis(const double value)
Set output special pixel value for LIS.
bool p_His_Set
Indicates whether p_His has been set (i.e.
Process class for exporting cubes.
void SetOutputHis(const double value)
Set output special pixel value for HIS.
void SetOutputNull(const double value)
Set output special pixel value for NULL.
std::vector< BufferManager * > GetBuffersBIL()
A single line of input data from each input cube will be passed to the line processing function...
ByteOrder
Tests the current architecture for byte order.
Definition: Endian.h:59
ByteOrder p_endianType
The byte order of the output file.
bool p_Null_Set
Indicates whether p_Null has been set (i.e.
ExportFormat p_format
Current storage order.
double p_His
The output value for pixels whose input DNs are High Instrument Saturation values.
std::vector< BufferManager * > GetBuffersBSQ()
A single line of input data from each input cube will be passed to the line processing function...
double OutputHis()
Return the output special pixel value for HIS.
void setCanGenerateChecksum(bool flag)
Set m_canGenerateChecksum which determines if we can generate a MD5 checksum on the image data...
double OutputNull()
Return the output special pixel value for NULL.
void isisOut8(Buffer &in, std::ofstream &fout)
Method for writing 8-bit unsigned pixel data to a file stream.
double GetOutputMaximum()
Get the valid maximum pixel value to be written to the output file.
void CheckStatus()
Checks and updates the status.
Definition: Progress.cpp:121
PixelType
Enumerations for Isis Pixel Types.
Definition: PixelType.h:43
void CreateWorldFile(const QString &worldFile)
Create a standard world file for the input cube.
double OutputLrs()
Return the output special pixel value for LRS.
std::vector< double > p_inputMinimum
Minimum pixel value in the input cube to be mapped to the minimum value in the Buffer.
double OutputHrs()
Return the output special pixel value for HRS.
void SetOutputRange(const double minimum, const double maximum)
Set output pixel range in Buffer.
Compressed JPEG2000.
virtual void StartProcess(void funct())
In the base class, this method will invoked a user-specified function exactly one time...
Definition: Process.h:228
bool p_Lrs_Set
Indicates whether p_Lrs has been set (i.e.
EndianSwapper * p_endianSwap
Object to swap the endianness of the raw output to either MSB or LSB.
double p_Lrs
The output value for pixels whose input DNs are Low Representation Saturation values.
double GetOutputMinimum()
Get the valid minimum pixel value to be written to the output file.
void SetOutputType(Isis::PixelType pixelIn)
Set output pixel bit type in Buffer.
double p_Null
The output value for pixels whose input DNs are Null values.
void SetInputRange()
Set input pixel range from user.
double p_Hrs
The output value for pixels whose input DNs are High Representation Saturation values.
bool p_Lis_Set
Indicates whether p_Lis has been set (i.e.
double GetInputMinimum(unsigned int n=0) const
Get the valid minimum pixel value for the Nth input cube.
std::vector< double > p_inputMaximum
Maximum pixel value in the input cube to be mapped to the maximum value in the Buffer.
void SetOutputHrs(const double value)
Set output special pixel value for HRS.
void setFormat(ExportFormat format)
Sets the storage order of the output file.
void isisOut32(Buffer &in, std::ofstream &fout)
Method for writing 32-bit signed floating point pixels data to a file stream.
Byte swapper.
Definition: EndianSwapper.h:55
virtual void StartProcess(void funct(Isis::Buffer &in))
This method invokes the process operation over a single input cube.
QString checksum()
Generates a file checksum.
void InitProcess()
Convenience method that checks to make sure the user is only using valid input to the StartProcess me...
double p_outputMinimum
Desired minimum pixel value in the Buffer.
double p_outputMiddle
Middle pixel value (minimum+maximun)/2.0 in the Buffer.
double p_outputMaximum
Desired maximum pixel value in the Buffer.
Band interleaved by pixel.
ProcessExport()
Constructs an Export object.
Isis::Progress * p_progress
Pointer to a Progress object.
Definition: Process.h:160
double GetInputMaximum(unsigned int n=0) const
Get the valid maximum pixel value for the Nth input cube.
Band interleaved by line.
bool p_Hrs_Set
Indicates whether p_Hrs has been set (i.e.
Namespace for ISIS/Bullet specific routines.
Definition: Apollo.h:31
std::vector< BufferManager * > GetBuffersBIP()
A single band of input data from each input cube will be passed to the band processing function...
std::vector< double > p_inputMiddle
Middle pixel value in the input cube to be mapped to the (minimum+maximum)/2.0 value in the Buffer...
double OutputLis()
Return the output special pixel value for LIS.
void SetOutputLrs(const double value)
Set output special pixel value for LRS.
void isisOut64(Buffer &in, std::ofstream &fout)
Method for writing 64-bit signed double precision floating point pixels data to a file stream...
void isisOut16u(Buffer &in, std::ofstream &fout)
Method for writing 16-bit unsigned pixel data to a file stream.
ExportFormat
Storage order enumeration.
PixelType p_pixelType
The bits per pixel of the output image.
Base class for all cube processing derivatives.
Definition: Process.h:158
void SetOutputEndian(enum ByteOrder endianness)
Set byte endianness of the output cube.
QCryptographicHash * m_cryptographicHash
A cryptographic hash that will generate an MD5 checksum of the image data.
double p_Lis
The output value for pixels whose input DNs are Low Instrument Saturation values. ...
Band sequential.
std::vector< Stretch * > p_str
Stretch object to ensure a reasonable range of pixel values in the output data.
std::vector< Isis::Cube * > InputCubes
A vector of pointers to opened Cube objects.
Definition: Process.h:200