Official websites use .gov
A .gov website belongs to an official government organization in the United States.

Secure .gov websites use HTTPS
A lock ( ) or https:// means you’ve safely connected to the .gov website. Share sensitive information only on official, secure websites.

Isis 3 Programmer Reference
Cube.h
1#ifndef Cube_h
2#define Cube_h
7
8/* SPDX-License-Identifier: CC0-1.0 */
9
10#include <vector>
11
12// This is needed for the QVariant macro
13#include <QMetaType>
14#include <QList>
15#include <QMap>
16
17#include <nlohmann/json.hpp>
18
19#include "Blob.h"
20#include "IEndian.h"
21#include "PixelType.h"
22#include "PvlKeyword.h"
23
24class QFile;
25class QMutex;
26class QString;
27
28namespace Isis {
29 class Buffer;
30 class Camera;
33 class CubeStretch;
34 class FileName;
35 class ImageIoHandler;
36 class Projection;
37 class Pvl;
38 class PvlGroup;
39 class Statistics;
40 class Table;
41 class Histogram;
42 class History;
43 class OriginalLabel;
44 class OriginalXmlLabel;
45 class ImagePolygon;
46
47
168 class Cube {
169 public:
170 Cube();
171 Cube(const FileName &fileName, QString access = "r");
172
173 virtual ~Cube();
174
179 enum Format {
234 GTiff
235 };
236
257
258 void fromIsd(const FileName &fileName, Pvl &label, nlohmann::json &isd, QString access);
259 void fromIsd(const FileName &fileName, FileName &labelFile, FileName &isdFile, QString access);
260
261 void fromLabel(const FileName &fileName, Pvl &label, QString access);
262
263 bool isOpen() const;
264 bool isProjected() const;
265 bool isReadOnly() const;
266 bool isReadWrite() const;
267 LabelAttachment labelsAttached() const;
268
269 void attachSpiceFromIsd(nlohmann::json Isd);
270 void attachLineScanTableFromIsd(nlohmann::json isd);
271
272 void close(bool remove = false);
273 Cube *copy(FileName newFile, const CubeAttributeOutput &newFileAttributes);
274 void create(const QString &cfile);
275 void create(const QString &cfile, const CubeAttributeOutput &att);
276 void createGdal(QString &dataFileName, QString &, char **papszOptions);
277 void checkAccess(QString access);
278 void open(const QString &cfile, QString access = "r");
279 void openCube(const QString &cubeFileName, QString access);
280 void openGdal(const QString &cubeFileName, QString access);
281 void reopen(QString access = "r");
282
283 void read(Blob &blob,
284 const std::vector<PvlKeyword> keywords = std::vector<PvlKeyword>()) const;
285 void read(Buffer &rbuf) const;
286 OriginalLabel readOriginalLabel(const QString &name="IsisCube") const;
287 CubeStretch readCubeStretch(QString name="CubeStretch",
288 const std::vector<PvlKeyword> keywords = std::vector<PvlKeyword>()) const;
290 History readHistory(const QString &name = "IsisCube") const;
292 Table readTable(const QString &name);
293 void write(Blob &blob, bool overwrite=true);
294 void write(const Table &table);
295 void write(const CubeStretch &cubeStretch);
296 void write(OriginalLabel &lab);
297 void write(const OriginalXmlLabel &lab);
298 void write(History &history, const QString &name = "IsisCube");
299 void write(const ImagePolygon &polygon);
300 void write(Buffer &wbuf);
301
302 void setBaseMultiplier(double base, double mult);
303 void setMinMax(double min, double max);
304 void setByteOrder(ByteOrder byteOrder);
305 void setDimensions(int ns, int nl, int nb);
306 void setExternalDnData(FileName cubeFileWithDnData);
307 void setFormat(Format format);
308 void setLabelsAttached(LabelAttachment attached);
309 // void setLabelsExternal(bool external);
310 void setLabelSize(int labelBytes);
311 void setPixelType(PixelType pixelType);
312 void setVirtualBands(const QList<QString> &vbands);
313 void setVirtualBands(const std::vector<QString> &vbands);
314
315 void relocateDnData(FileName dnDataFile);
316// static void relocateDnData(FileName externalLabelFile, FileName dnDataFile);
317
318 virtual int bandCount() const;
319 double base() const;
320 ByteOrder byteOrder() const;
321 Camera *camera();
322 FileName externalCubeFileName() const;
323 virtual QString fileName() const;
324 Format format() const;
325 virtual Histogram *histogram(const int &band = 1,
326 QString msg = "Gathering histogram");
327 virtual Histogram *histogram(const int &band, const double &validMin,
328 const double &validMax,
329 QString msg = "Gathering histogram");
330 Pvl *label() const;
331 int labelSize(bool actual = false) const;
332 int lineCount() const;
333 double multiplier() const;
334 PixelType pixelType() const;
335 virtual int physicalBand(const int &virtualBand) const;
337 int sampleCount() const;
338 Statistics *statistics(const int &band = 1,
339 QString msg = "Gathering statistics");
340 Statistics *statistics(const int &band, const double &validMin,
341 const double &validMax,
342 QString msg = "Gathering statistics");
343
345 void clearIoCache();
346 bool deleteBlob(QString BlobName, QString BlobType);
347 void deleteGroup(const QString &group);
348 PvlGroup &group(const QString &group) const;
349 bool hasGroup(const QString &group) const;
350 bool hasTable(const QString &name);
351 bool hasBlob(const QString &name, const QString &type);
352 void putGroup(const PvlGroup &group);
353 void latLonRange(double &minLatitude, double &maxLatitude, double &minLongitude,
354 double &maxLongitude);
355 FileName realDataFileName() const;
356
357 private:
359 void cleanUp(bool remove);
360
361 void construct();
362 QFile *dataFile() const;
363 GDALDataset *gdalDataset() const;
364
365 void initialize();
366 void initCoreFromLabel(const Pvl &label);
367 void initCoreFromGdal(const QString &labelFile);
368 void initLabelState(const Pvl &label);
369 void initLabelFromFile(FileName labelFileName, bool readWrite);
370 void openCheck();
371 Pvl realDataFileLabel() const;
372 void reformatOldIsisLabel(const QString &oldCube);
373 void writeLabels();
374
375 private:
385
392
396 GDALDataset *m_geodataSet = nullptr;
397
403
409 ByteOrder m_byteOrder;
410
417
423 PixelType m_pixelType;
424
426 QMutex *m_mutex;
427
430
433
436
438 FileName *m_dataFileName;
439
445 FileName *m_tempCube;
446
449
452
455
457 QMap<QString, Blob> m_blobMap;
458 QList<QString> m_blobQueue;
459
462
465
468
471
476 double m_base;
477
483
486 };
487}
488
490Q_DECLARE_METATYPE(Isis::Cube *);
491
492#endif
Buffer for reading and writing cube data.
Definition Buffer.h:53
Manipulate and parse attributes of output cube filenames.
This is the parent of the caching algorithms.
IO Handler for Isis Cubes.
Definition Cube.h:168
void addCachingAlgorithm(CubeCachingAlgorithm *)
This will add the given caching algorithm to the list of attempted caching algorithms.
Definition Cube.cpp:2186
void clearIoCache()
This will clear excess RAM used for quicker IO in the cube.
Definition Cube.cpp:2202
bool hasTable(const QString &name)
Check to see if the cube contains a pvl table by the provided name.
Definition Cube.cpp:2331
QFile * m_dataFile
This is only sometimes allocated.
Definition Cube.h:391
Pvl realDataFileLabel() const
Function to read data from a cube label and return it as a PVL object.
Definition Cube.cpp:2783
ImagePolygon readFootprint() const
Read the footprint polygon for the Cube.
Definition Cube.cpp:1114
Cube()
Constructs a Cube object.
Definition Cube.cpp:50
void setPixelType(PixelType pixelType)
Used prior to the Create method, this will specify the output pixel type.
Definition Cube.cpp:1540
void latLonRange(double &minLatitude, double &maxLatitude, double &minLongitude, double &maxLongitude)
Returns the latitude and longitude range for the Cube.
Definition Cube.cpp:2843
void deleteGroup(const QString &group)
Deletes a group from the cube labels.
Definition Cube.cpp:2263
void reformatOldIsisLabel(const QString &oldCube)
This is a helper, used by open(...), that handles opening Isis 2 cubes as if they were Isis cubes.
Definition Cube.cpp:2813
void setFormat(Format format)
Used prior to the Create method, this will specify the format of the cube, either band,...
Definition Cube.cpp:1502
bool deleteBlob(QString BlobName, QString BlobType)
This method will delete a blob label object from the cube as specified by the Blob type and name.
Definition Cube.cpp:2219
int m_bands
The band count of the open cube or the cube that will be created.
Definition Cube.h:470
void initialize()
This sets Cube to its default state: Native byte order Format = Tile PixelType = Real (4 bytes per pi...
Definition Cube.cpp:2565
Format format() const
Definition Cube.cpp:1849
PixelType m_pixelType
This is the pixel type on disk.
Definition Cube.h:423
void relocateDnData(FileName dnDataFile)
Relocates the DN data for a cube to an external cube label file.
Definition Cube.cpp:1602
void construct()
Initialize members from their initial undefined states.
Definition Cube.cpp:2447
int m_labelBytes
The maximum allowed size of the label; the allocated space.
Definition Cube.h:461
virtual Histogram * histogram(const int &band=1, QString msg="Gathering histogram")
This method returns a pointer to a Histogram object which allows the program to obtain and use variou...
Definition Cube.cpp:1873
int lineCount() const
Definition Cube.cpp:2008
void initLabelFromFile(FileName labelFileName, bool readWrite)
This function initializes the Cube label from a file passed as a parameter.
Definition Cube.cpp:2664
double multiplier() const
Returns the multiplier value for converting 8-bit/16-bit pixels to 32-bit.
Definition Cube.cpp:2022
FileName realDataFileName() const
This gets the file name of the file which actually contains the DN data.
Definition Cube.cpp:2497
CubeStretch readCubeStretch(QString name="CubeStretch", const std::vector< PvlKeyword > keywords=std::vector< PvlKeyword >()) const
Read a Stretch from a cube.
Definition Cube.cpp:1160
Statistics * statistics(const int &band=1, QString msg="Gathering statistics")
This method returns a pointer to a Statistics object which allows the program to obtain and use vario...
Definition Cube.cpp:2104
GDALDataset * m_geodataSet
TODO: Write description.
Definition Cube.h:396
void setDimensions(int ns, int nl, int nb)
Used prior to the Create method to specify the size of the cube.
Definition Cube.cpp:1450
Camera * camera()
Return a camera associated with the cube.
Definition Cube.cpp:1687
FileName externalCubeFileName() const
If this is an external cube label file, this will give you the cube dn file that this label reference...
Definition Cube.cpp:1810
LabelAttachment
Input cube label type tracker.
Definition Cube.h:245
@ ExternalLabel
The label is pointing to an external DN file - the label is also external to the data.
Definition Cube.h:254
@ AttachedLabel
The input label is embedded in the image file.
Definition Cube.h:246
@ DetachedLabel
The input label is in a separate data file from the image.
Definition Cube.h:247
PvlGroup & group(const QString &group) const
Read a group from the cube into a Label.
Definition Cube.cpp:2277
double m_base
The base of the open cube or the cube that will be created; does not apply if m_pixelType is Real.
Definition Cube.h:476
int sampleCount() const
Definition Cube.cpp:2081
void putGroup(const PvlGroup &group)
Adds a group in a Label to the cube.
Definition Cube.cpp:2344
bool isOpen() const
Test if a cube file has been opened/created.
Definition Cube.cpp:189
void setBaseMultiplier(double base, double mult)
Used prior to the Create method, this will specify the base and multiplier for converting 8-bit/16-bi...
Definition Cube.cpp:1384
bool isReadOnly() const
Test if the opened cube is read-only, that is write operations will fail if this is true.
Definition Cube.cpp:215
int m_lines
The line count of the open cube or the cube that will be created.
Definition Cube.h:467
double base() const
Returns the base value for converting 8-bit/16-bit pixels to 32-bit.
Definition Cube.cpp:1663
void fromIsd(const FileName &fileName, Pvl &label, nlohmann::json &isd, QString access)
Initialize Cube data from a PVL label and JSON ISD.
Definition Cube.cpp:99
LabelAttachment m_attached
True if labels are attached.
Definition Cube.h:451
void openGdal(const QString &cubeFileName, QString access)
This method will open an existing geotiff for reading or reading/writing.
Definition Cube.cpp:974
void setMinMax(double min, double max)
Used prior to the Create method, this will compute a good base and multiplier value given the minimum...
Definition Cube.cpp:1401
QFile * dataFile() const
This returns the QFile with cube DN data in it.
Definition Cube.cpp:2478
Cube * copy(FileName newFile, const CubeAttributeOutput &newFileAttributes)
Copies the cube to the new fileName.
Definition Cube.cpp:288
void create(const QString &cfile)
This method will create an isis cube for writing.
Definition Cube.cpp:426
ImageIoHandler * m_ioHandler
This does the heavy lifting for cube DN IO and is always allocated when isOpen() is true.
Definition Cube.h:402
FileName * m_tempCube
If open was called with an Isis 2 cube, then this will be the name of the imported ISIS cube.
Definition Cube.h:445
bool hasBlob(const QString &name, const QString &type)
Check to see if the cube contains a BLOB.
Definition Cube.cpp:2305
void openCube(const QString &cubeFileName, QString access)
This method will open an existing isis cube for reading or reading/writing.
Definition Cube.cpp:850
void cleanUp(bool remove)
This clears all of the allocated memory associated with an open cube.
Definition Cube.cpp:2394
ByteOrder byteOrder() const
Returns the byte order/endian-ness of the cube file.
Definition Cube.cpp:1675
ByteOrder m_byteOrder
The byte order of the opened cube; if there is no open cube then this is the byte order that will be ...
Definition Cube.h:409
QFile * m_labelFile
This is the file that contains the labels always; if labels are attached then this contains the file ...
Definition Cube.h:384
void open(const QString &cfile, QString access="r")
This method will try to open a file as either a cube or geotiff in either read or read/write.
Definition Cube.cpp:792
PixelType pixelType() const
Definition Cube.cpp:2032
void setVirtualBands(const QList< QString > &vbands)
This allows the programmer to specify a subset of bands to work with.
Definition Cube.cpp:1557
FileName * m_formatTemplateFile
Label pvl format template file (describes how to format labels)
Definition Cube.h:448
Pvl * m_label
The label if IsOpen(), otherwise NULL.
Definition Cube.h:454
LabelAttachment labelsAttached() const
Test if labels are attached.
Definition Cube.cpp:260
void read(Blob &blob, const std::vector< PvlKeyword > keywords=std::vector< PvlKeyword >()) const
This method will read data from the specified Blob object.
Definition Cube.cpp:1043
bool isProjected() const
Returns true if the labels of the cube appear to have a valid mapping group.
Definition Cube.cpp:204
OriginalLabel readOriginalLabel(const QString &name="IsisCube") const
Read the original PDS3 label from a cube.
Definition Cube.cpp:1137
Format
These are the possible storage formats of ISIS cubes.
Definition Cube.h:179
@ Tile
Cubes are stored in tile format, that is the order of the pixels in the file (on disk) is BSQ within ...
Definition Cube.h:233
@ Bsq
Cubes are stored in band-sequential format, that is the order of the pixels in the file (on disk) is:
Definition Cube.h:200
virtual int physicalBand(const int &virtualBand) const
This method will return the physical band number given a virtual band number.
Definition Cube.cpp:2047
Table readTable(const QString &name)
Read a Table from the cube.
Definition Cube.cpp:1200
Camera * m_camera
Camera allocated from the camera() method.
Definition Cube.h:429
bool hasGroup(const QString &group) const
Return if the cube has a specified group in the labels.
Definition Cube.cpp:2290
void setLabelSize(int labelBytes)
Used prior to the Create method, this will allocate a specific number of bytes in the label area for ...
Definition Cube.cpp:1527
OriginalXmlLabel readOriginalXmlLabel() const
Read the original PDS4 label from a cube.
Definition Cube.cpp:1179
virtual QString fileName() const
Returns the opened cube's filename.
Definition Cube.cpp:1837
void fromLabel(const FileName &fileName, Pvl &label, QString access)
Initialize Cube data from a PVL label.
Definition Cube.cpp:76
virtual ~Cube()
Destroys the Cube object.
Definition Cube.cpp:166
QList< int > * m_virtualBandList
If allocated, converts from physical on-disk band # to virtual band #.
Definition Cube.h:485
void write(Blob &blob, bool overwrite=true)
This method will write a blob of data (e.g.
Definition Cube.cpp:1219
bool isReadWrite() const
Test if the opened cube is read-write, that is read and write operations should succeed if this is tr...
Definition Cube.cpp:247
FileName * m_labelFileName
The full filename of the label file (.lbl or .cub)
Definition Cube.h:435
void setExternalDnData(FileName cubeFileWithDnData)
Used to set external dn data to cube.
Definition Cube.cpp:1467
void close(bool remove=false)
Closes the cube and updates the labels.
Definition Cube.cpp:272
History readHistory(const QString &name="IsisCube") const
Read the History from the Cube.
Definition Cube.cpp:1095
void writeLabels()
Write the Pvl labels to the cube's label file.
Definition Cube.cpp:2930
QMutex * m_mutex
Basic thread-safety mutex; this class is not optimized for threads.
Definition Cube.h:426
void initCoreFromLabel(const Pvl &label)
This function initializes the Cube core from a Pvl Label passed as a parameter.
Definition Cube.cpp:2589
int labelSize(bool actual=false) const
Returns the number of bytes used by the label.
Definition Cube.cpp:1987
int m_samples
The sample count of the open cube or the cube that will be created.
Definition Cube.h:464
void openCheck()
Throw an exception if the cube is not open.
Definition Cube.cpp:2770
Projection * projection()
Definition Cube.cpp:2068
void setLabelsAttached(LabelAttachment attached)
Use prior to calling create, this sets whether or not to use separate label and data files.
Definition Cube.cpp:1514
double m_multiplier
The multiplier of the open cube or the cube that will be created; does not apply if m_pixelType is Re...
Definition Cube.h:482
virtual int bandCount() const
Returns the number of virtual bands for the cube.
Definition Cube.cpp:1646
Pvl * label() const
Returns a pointer to the IsisLabel object associated with the cube.
Definition Cube.cpp:1975
void reopen(QString access="r")
This method will reopen an isis sube for reading or reading/writing.
Definition Cube.cpp:1010
Projection * m_projection
Projection allocated from the projection() method.
Definition Cube.h:432
void setByteOrder(ByteOrder byteOrder)
Used prior to the Create method, this will specify the byte order of pixels, either least or most sig...
Definition Cube.cpp:1435
FileName * m_dataFileName
The full filename of the data file (.cub)
Definition Cube.h:438
void applyVirtualBandsToLabel()
Applies virtual bands to label.
Definition Cube.cpp:2366
Format m_format
If isOpen() then this is the IO format that the cube uses.
Definition Cube.h:416
Stores stretch information for a cube.
Definition CubeStretch.h:27
Container of a cube histogram.
Definition Histogram.h:74
Handles converting buffers to and from disk.
Create cube polygons, read/write polygons to blobs.
Read and store original labels.
Read and store original Xml labels.
Base class for Map Projections.
Definition Projection.h:154
This class is used to accumulate statistics on double arrays.
Definition Statistics.h:93
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
This is free and unencumbered software released into the public domain.
Definition Apollo.h:16