An official website of the United States government
Here’s how you know
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 Developer Reference
|
IO Handler for Isis Cubes using the BSQ format. More...
#include <CubeBsqHandler.h>
Public Member Functions | |
CubeBsqHandler (QFile *dataFile, const QList< int > *virtualBandList, const Pvl &label, bool alreadyOnDisk) | |
Construct a BSQ IO handler. | |
~CubeBsqHandler () | |
The destructor writes all cached data to disk. | |
void | updateLabels (Pvl &labels) |
Function to update the labels with a Pvl object. | |
virtual void | read (Buffer &bufferToFill) const |
Read cube data from disk into the buffer. | |
virtual void | write (const Buffer &bufferToWrite) |
Write buffer data into the cube data on disk. | |
virtual void | addCachingAlgorithm (CubeCachingAlgorithm *algorithm) |
This will add the given caching algorithm to the list of attempted caching algorithms. | |
virtual void | clearCache (bool blockForWriteCache=true) const |
Free all cube chunks (cached cube data) from memory and write them to disk. | |
virtual BigInt | getDataSize () const |
int | bandCount () const |
int | getBandCountInChunk () const |
BigInt | getBytesPerChunk () const |
int | getChunkCountInBandDimension () const |
int | getChunkCountInLineDimension () const |
int | getChunkCountInSampleDimension () const |
int | getChunkIndex (const RawCubeChunk &) const |
Given a chunk, what's its index in the file. | |
BigInt | getDataStartByte () const |
int | lineCount () const |
int | getLineCountInChunk () const |
PixelType | pixelType () const |
int | sampleCount () const |
int | getSampleCountInChunk () const |
void | setVirtualBands (const QList< int > *virtualBandList) |
This changes the virtual band list. | |
QMutex * | dataFileMutex () |
Get the mutex that this IO handler is using around I/Os on the given data file. | |
Protected Member Functions | |
virtual void | readRaw (RawCubeChunk &chunkToFill) |
This needs to populate the chunkToFill with unswapped raw bytes from the disk. | |
virtual void | writeRaw (const RawCubeChunk &chunkToWrite) |
This needs to write the chunkToWrite directly to disk with no modifications to the data itself. | |
QFile * | getDataFile () |
void | setChunkSizes (int numSamples, int numLines, int numBands) |
This should be called once from the child constructor. | |
Protected Attributes | |
QMutex * | m_writeThreadMutex |
This enables us to block while the write thread is working. | |
QList< int > * | m_virtualBands |
Converts from virtual band to physical band. | |
IO Handler for Isis Cubes using the BSQ format.
This class is used to open, create, read, and write data from Isis cube files.
Isis::CubeBsqHandler::CubeBsqHandler | ( | QFile * | dataFile, |
const QList< int > * | virtualBandList, | ||
const Pvl & | labels, | ||
bool | alreadyOnDisk ) |
Construct a BSQ IO handler.
This will determine a good chunk size to use that does not result in the cube being enlarged or misordered.
dataFile | The file with cube DN data in it |
virtualBandList | The mapping from virtual band to physical band, see CubeIoHandler's description. |
labels | The Pvl labels for the cube |
alreadyOnDisk | True if the cube is allocated on the disk, false otherwise |
References Isis::CubeIoHandler::CubeIoHandler(), Isis::CubeIoHandler::lineCount(), Isis::CubeIoHandler::pixelType(), Isis::CubeIoHandler::sampleCount(), Isis::CubeIoHandler::setChunkSizes(), and Isis::SizeOf().
Isis::CubeBsqHandler::~CubeBsqHandler | ( | ) |
The destructor writes all cached data to disk.
References Isis::CubeIoHandler::clearCache().
|
virtualinherited |
This will add the given caching algorithm to the list of attempted caching algorithms.
The algorithms are tried in the opposite order that they were added - the first algorithm added is the last algorithm tried.
This method takes ownership of algorithm.
algorithm | The caching algorithm to add to the Cube for I/O |
Reimplemented from Isis::ImageIoHandler.
|
inherited |
|
virtualinherited |
Free all cube chunks (cached cube data) from memory and write them to disk.
Child destructors need to call this method.
This method should only be called otherwise when lots of cubes are in memory and the many caches cause problems with system RAM limitations.
blockForWriteCache | This should be true unless this method is called from the write thread. |
Reimplemented from Isis::ImageIoHandler.
References CubeIoHandler(), and writeRaw().
Referenced by Isis::CubeBsqHandler::~CubeBsqHandler(), and Isis::CubeTileHandler::~CubeTileHandler().
|
inherited |
Get the mutex that this IO handler is using around I/Os on the given data file.
A lock should be acquired before doing any reads/writes on the data file externally.
References m_writeThreadMutex.
|
inherited |
Referenced by getChunkIndex(), and read().
|
inherited |
References Isis::SizeOf().
Referenced by getDataSize().
|
inherited |
Referenced by getDataSize().
|
inherited |
Referenced by getChunkIndex(), getDataSize(), and read().
|
inherited |
Referenced by getChunkIndex(), getDataSize(), and read().
|
inherited |
Given a chunk, what's its index in the file.
Chunks are ordered from left to right, then top to bottom, then front to back (BSQ). The first chunk is at the top left of band 1 and is index 0, for example. In other words, this is going from the value of m_rawData to the key.
Chunks which sit outside of the cube entirely must not be passed into this method; the results will be wrong.
References getBandCountInChunk(), getChunkCountInLineDimension(), getChunkCountInSampleDimension(), getLineCountInChunk(), getSampleCountInChunk(), Isis::RawCubeChunk::getStartBand(), Isis::RawCubeChunk::getStartLine(), and Isis::RawCubeChunk::getStartSample().
|
protectedinherited |
Referenced by Isis::CubeBsqHandler::readRaw(), Isis::CubeTileHandler::readRaw(), Isis::CubeBsqHandler::writeRaw(), and Isis::CubeTileHandler::writeRaw().
|
virtualinherited |
Implements Isis::ImageIoHandler.
References getBytesPerChunk(), getChunkCountInBandDimension(), getChunkCountInLineDimension(), and getChunkCountInSampleDimension().
Referenced by setChunkSizes().
|
inherited |
Referenced by setChunkSizes().
|
inherited |
Referenced by getChunkIndex(), read(), and Isis::CubeTileHandler::updateLabels().
|
inherited |
Referenced by getChunkIndex(), read(), and Isis::CubeTileHandler::updateLabels().
|
inherited |
Referenced by Isis::CubeBsqHandler::CubeBsqHandler().
|
inherited |
Referenced by Isis::CubeBsqHandler::CubeBsqHandler().
|
virtualinherited |
Read cube data from disk into the buffer.
This is not const because it caches the read cube chunks from the disk.
bufferToFill | The buffer to populate with cube data. |
Implements Isis::ImageIoHandler.
References Isis::Buffer::Band(), Isis::Buffer::BandDimension(), getBandCountInChunk(), getChunkCountInLineDimension(), getChunkCountInSampleDimension(), getLineCountInChunk(), getSampleCountInChunk(), Isis::Buffer::Line(), Isis::Buffer::LineDimension(), Isis::ImageIoHandler::m_virtualBands, Isis::ImageIoHandler::m_writeThreadMutex, Isis::Null, Isis::Buffer::Sample(), Isis::Buffer::SampleDimension(), and Isis::Buffer::size().
|
protectedvirtual |
This needs to populate the chunkToFill with unswapped raw bytes from the disk.
chunkToFill | The container that needs to be filled with cube data. |
Implements Isis::CubeIoHandler.
References _FILEINFO_, Isis::RawCubeChunk::getByteCount(), Isis::CubeIoHandler::getDataFile(), Isis::IException::Io, and Isis::RawCubeChunk::setRawData().
|
inherited |
Referenced by Isis::CubeBsqHandler::CubeBsqHandler().
|
protectedinherited |
This should be called once from the child constructor.
This determines the chunk sizes used for the cube and often should remain constant for a particular cube (BSQ, for example, doesn't need it to be constant but Tile does). These being large can cause excessive use of disk space that stores no cube data. These being large can also drastically increase the amount of RAM consumed.
numSamples | The chunk size in the sample dimension |
numLines | The chunk size in the line dimension |
numBands | The chunk size in the band dimension |
References _FILEINFO_, getDataSize(), getDataStartByte(), and Isis::IException::Programmer.
Referenced by Isis::CubeBsqHandler::CubeBsqHandler().
|
inherited |
This changes the virtual band list.
virtualBandList | A list where the indices are the vbands and the values are the physical bands. The values are 1-based. This can be specified as NULL, in which case the vbands are the physical bands. The virtual band list is copied (the pointer provided isn't remembered). |
References m_virtualBands.
Referenced by ImageIoHandler().
|
virtual |
Function to update the labels with a Pvl object.
label | Pvl object to update with |
Implements Isis::CubeIoHandler.
References Isis::PvlContainer::addKeyword(), Isis::PvlObject::findObject(), and Isis::PvlContainer::Replace.
|
virtualinherited |
Write buffer data into the cube data on disk.
This could do no IO if the cube chunks required are already in memory and our caching algorithms say to not free any of the cube chunks afterwards.
bufferToWrite | The buffer to get cube data from. |
Implements Isis::ImageIoHandler.
References Isis::ImageIoHandler::m_writeThreadMutex.
|
protectedvirtual |
This needs to write the chunkToWrite directly to disk with no modifications to the data itself.
chunkToWrite | The container that needs to be put on disk. |
Implements Isis::CubeIoHandler.
References _FILEINFO_, Isis::RawCubeChunk::getByteCount(), Isis::CubeIoHandler::getDataFile(), Isis::RawCubeChunk::getRawData(), and Isis::IException::Io.
|
protectedinherited |
Converts from virtual band to physical band.
Referenced by ImageIoHandler(), Isis::CubeIoHandler::read(), Isis::GdalIoHandler::read(), setVirtualBands(), Isis::GdalIoHandler::write(), and ~ImageIoHandler().
|
protectedinherited |
This enables us to block while the write thread is working.
Referenced by Isis::CubeIoHandler::CubeIoHandler(), dataFileMutex(), ImageIoHandler(), Isis::CubeIoHandler::read(), Isis::CubeIoHandler::write(), and ~ImageIoHandler().