Isis 3 Programmer Reference
Isis::Blobber Class Reference

Base class for accessing ISIS blobs. More...

#include <Blobber.h>

Inheritance diagram for Isis::Blobber:
Inheritance graph
Collaboration diagram for Isis::Blobber:
Collaboration graph

Public Member Functions

 Blobber ()
 Default basic constructor that is mostly not useful.
 
 Blobber (const QString &blobname, const QString &fieldname, const QString &name="Blob")
 Name-only based constructor.
 
 Blobber (Cube &cube, const QString &blobname, const QString &fieldname, const QString &name="Blob")
 Constructor using an ISIS cube class.
 
virtual ~Blobber ()
 Destructor of this object.
 
Blobber deepcopy () const
 Create a unique copy of this blob.
 
void setName (const QString &name)
 Specifies the name of this class instantiation.
 
void setBlobName (const QString &bname)
 Sets the name of the ISIS BLOB object that contains the data.
 
void setFieldName (const QString &fname)
 Sets field name in the ISIS BLOB object that contains data.
 
int size () const
 Returns the total number of elements (rows * columns) in blob.
 
int Lines () const
 Number of rows or lines in the BLOB.
 
int Samples () const
 Number of columns or samples in the BLOB.
 
QString getName () const
 Returns the name of the BLOB given to refer to this instantiation.
 
QString getBlobName () const
 Retrieves the name of the Table object.
 
QString getFieldName () const
 Retreive the name of the field in the Tabel object BLOB.
 
double * operator[] (int i)
 Returns the ith row/line in the BLOB that can be further referenced into samples.
 
double const * operator[] (int i) const
 Returns the ith row/line in the BLOB that can be further referenced into samples.
 
void load (const QString &filename)
 Loads the contents of a BLOB from a cube file.
 
void load (Cube &cube)
 Loads the contents of a BLOB from a Cube object.
 

Protected Types

typedef TNT::Array2D< double > BlobBuf
 Internal buffer uses TNT.
 

Protected Member Functions

const BlobBufref () const
 Returns a const reference to the internal buffer for ease of use to derived objects.
 

Private Member Functions

void loadDouble (Table &tbl)
 Provides direct reading in of the field data from the BLOB.
 
void loadInteger (Table &tbl)
 Provides direct reading in of the field data from the BLOB.
 
double int2ToDouble (unsigned int value) const
 
double int2ToDouble (int value) const
 Converts integer data to double precision.
 

Private Attributes

QString _blobname
 Name of BLOB to read.
 
QString _fieldname
 Name of field in BLOB to read.
 
QString _name
 Name of this data set.
 
BlobBuf _buf
 Buffer holding data.
 

Detailed Description

Base class for accessing ISIS blobs.

This class will read any ISIS BLOB and provide generalized access to its data. Developers can derive new classes that define access information in the form of names of the Isis Object and field name.

The entire contents of the field are read in and internally stored as double floating point values. All recognized ISIS special pixels are converted when read.

Note that this provides read access only. Currently, no output is performed in this implementation although it could be acheived in derived classes.

This class does not maintain persistant access to the BLOB. This means that the entire contents of the BLOB are read and stored and the interface to the ISIS BLOB is then terminated.

Below is an example using this class to access a HiRISE BLOB. It loads the BLOB, reports the number of lines and samples and then computes the mean and standard deviation using the Statistics class:

Cube cube("hirise.cub");
Blobber hiblob(cube, "HiRISE Calibration Image", "Calibration",
"CalibrationImage");
std::cout << "Number of lines: " << hiblob.Lines() << std::endl;
std::cout << "Number of samples: " << hiblob.Samples() << std::endl;
Statistics stats;
for (int line = 0 ; line < hiblob.Lines() ; line++) {
stats.AddData(hiblob[line], hiblob.Samples());
}
std::cout << "Average: " << stats.Average() << std::endl;
std::cout << "StdDev: " << stats.StandardDeviation() << std::endl;
Base class for accessing ISIS blobs.
Definition Blobber.h:98
IO Handler for Isis Cubes.
Definition Cube.h:168
This class is used to accumulate statistics on double arrays.
Definition Statistics.h:94
void AddData(const double *data, const unsigned int count)
Add an array of doubles to the accumulators and counters.

In the above example, the name of the ISIS Table (BLOB) is "HiRISE Calibration Image" and the field of interest in that table is "Calibration". Upon instantiation, the BLOB contents are read and converted to double precision floating point values.

Note that this class is reuseable and reentrant. This provides the user to specify a different cube to load the data from.

One special thing to note that assigning these objects to other object variables results in a reference to the data...it is not copied. The following illustrates this concept:

Cube cube('hirise.cub');
Blobber hiblob(cube, "HiRISE Calibration Image", "Calibration",
"CalibrationImage");
Blobber myblob(hiblob);
Blobber blob2 = myblob;

In this example, hiblob, myblob and blob2 refer to the same blob data. Changing a pixel element in one blob results in the change in all instances of the blob. To get a completely independant copy of the data, use the deepcopy() method.

Author
2005-12-16 Kris Becker
History

2008-05-12 Steven Lambright - Removed references to CubeInfo

2008-06-18 Christopher Austin - Fixed documentation errors

2012-10-04 Jeannie Backer Changed references to TableField methods to lower camel case. Ordered includes, put third party tnt includes inside angle braces, and added padding to control statements to fit coding standards. Added padding to control statements. References #1169.

2017-08-30 Summer Stapleton - Updated documentation. References #4807.

2018-07-20 Tyler Wilson - Overloaded the int2Double function so it can handle special pixel types for 4-byte unsigned integers. References #971.

Definition at line 98 of file Blobber.h.

Member Typedef Documentation

◆ BlobBuf

typedef TNT::Array2D<double> Isis::Blobber::BlobBuf
protected

Internal buffer uses TNT.

Definition at line 231 of file Blobber.h.

Constructor & Destructor Documentation

◆ Blobber() [1/3]

Isis::Blobber::Blobber ( )

Default basic constructor that is mostly not useful.

This basic constructor may only be required so that Blobbers can be used in STL constructs (as they require a default constructor)

Definition at line 27 of file Blobber.cpp.

◆ Blobber() [2/3]

Isis::Blobber::Blobber ( const QString & blobname,
const QString & fieldname,
const QString & name = "Blob" )

Name-only based constructor.

This constructor does not require an accompanying cube and allows the user to simply define the Table object and field names to establish these for multiple reads from different cubes.

Parameters
[in]blobname(const QString&) specifies the name of the ISIS BLOB that contains the field to read the data from
[in]fieldname(const QString&) specifies the name of the field in blobname to read and convert to double precision floating point data
[in]name(const QString&) Associates a name of the implementors choosing that identifies an instantiation of this class

Definition at line 47 of file Blobber.cpp.

◆ Blobber() [3/3]

Isis::Blobber::Blobber ( Cube & cube,
const QString & blobname,
const QString & fieldname,
const QString & name = "Blob" )

Constructor using an ISIS cube class.

Reads the contents of the specified field (fieldname) from an ISIS table BLOB (blobname). Upon instatiation of this class, the BLOB data is read in and converted to double precision floating point data. Upon successful return from this construtor, the data is accessble through various methods.

Parameters
[in]cube(Cube&) Reference to an ISIS cube file that has been opened or created in the Cube object. This file is expected to contain a Table object that is named blobname and must contain a field called fieldname.
[in]blobname(const QString&) specifies the name of the ISIS BLOB that contains the field to read the data from
[in]fieldname(const QString&) specifies the name of the field in blobname to read and convert to double precision floating point data
[in]name(const QString&) Associates a name of the implementors choosing that identifies an instantiation of this class

Definition at line 76 of file Blobber.cpp.

References load().

◆ ~Blobber()

virtual Isis::Blobber::~Blobber ( )
inlinevirtual

Destructor of this object.

Definition at line 106 of file Blobber.h.

Member Function Documentation

◆ deepcopy()

Blobber Isis::Blobber::deepcopy ( ) const

Create a unique copy of this blob.

This method creates a fully new copy of this object. The default copy constructors/methods create a reference to the data read from the Table object. For example, the following code fragment will result in two Blobbers that refer to the same memory location that stores the BLOB data:

Blobber myblob = yourblob;

To ensure you have two unique storage areas of the BLOB data so they can change independantly, use:

Blobber myblob = yourblob.deepcopy();
Blobber deepcopy() const
Create a unique copy of this blob.
Definition Blobber.cpp:107
Returns
(Blobber) Returns a completely new copy, including data, to caller.

Definition at line 107 of file Blobber.cpp.

References _buf.

◆ getBlobName()

QString Isis::Blobber::getBlobName ( ) const
inline

Retrieves the name of the Table object.

Returns
(string) Name of the Table

Definition at line 183 of file Blobber.h.

References _blobname.

Referenced by load().

◆ getFieldName()

QString Isis::Blobber::getFieldName ( ) const
inline

Retreive the name of the field in the Tabel object BLOB.

Returns
(string) Name of the BLOB field

Definition at line 191 of file Blobber.h.

References _fieldname.

Referenced by load(), loadDouble(), and loadInteger().

◆ getName()

QString Isis::Blobber::getName ( ) const
inline

Returns the name of the BLOB given to refer to this instantiation.

Returns
Name of BLOB instance

Definition at line 175 of file Blobber.h.

References _name.

◆ int2ToDouble() [1/2]

double Isis::Blobber::int2ToDouble ( int value) const
private

Converts integer data to double precision.

This method lives to properly handle the conversion of integer BLOB data to double precision. We must properly convert integer special pixel data that may exist in the BLOB to its appropriate double precision value.

Parameters
[in]value(int) Integer value to convert
Returns
(double) The calculated double precision value

Definition at line 217 of file Blobber.cpp.

◆ int2ToDouble() [2/2]

double Isis::Blobber::int2ToDouble ( unsigned int value) const
private

Definition at line 228 of file Blobber.cpp.

◆ Lines()

int Isis::Blobber::Lines ( ) const
inline

Number of rows or lines in the BLOB.

Returns
The lines or rows

Definition at line 160 of file Blobber.h.

References _buf.

Referenced by size().

◆ load() [1/2]

void Isis::Blobber::load ( const QString & filename)

Loads the contents of a BLOB from a cube file.

Provides the I/O interface for ISIS cube files.

Parameters
[in]filename(string&) Name of ISIS cube file to read

Definition at line 120 of file Blobber.cpp.

References load(), and Isis::Cube::open().

Referenced by Blobber(), and load().

◆ load() [2/2]

void Isis::Blobber::load ( Cube & cube)

Loads the contents of a BLOB from a Cube object.

Provides the I/O interface for the Cube object. One thing to note here is that it creates a CubeInfo object from the Cube object and then calls the CubeInfo load method. Hence, this method is required as an intermediary method that cascades to the actual method that does the real work.

Parameters
[in]cube(Cube&) Reference to an ISIS cube file that has been opened or created in the Cube object.

Definition at line 140 of file Blobber.cpp.

References getBlobName(), getFieldName(), Isis::TableField::isDouble(), Isis::TableField::isInteger(), loadDouble(), loadInteger(), Isis::IException::Programmer, and Isis::Cube::readTable().

◆ loadDouble()

void Isis::Blobber::loadDouble ( Table & tbl)
private

Provides direct reading in of the field data from the BLOB.

This method is called when the data stored in the BLOB is double precision. It determines the number of rows (lines) and columns (samples) in the BLOB and allocates the internal buffer required to store it

Parameters
[in]tbl(Table&) Reference to an ISIS Table object that contains the field from which to extract the data.

Definition at line 167 of file Blobber.cpp.

References _buf, and getFieldName().

Referenced by load().

◆ loadInteger()

void Isis::Blobber::loadInteger ( Table & tbl)
private

Provides direct reading in of the field data from the BLOB.

This method is called when the data stored in the BLOB is integer data. It determines the number of rows (lines) and columns (samples) in the BLOB and allocates the internal buffer required to store it. This differs from the double precision version only in the care taken when casting the data to double precision. We must properly convert special pixels from integer to double precision.

Parameters
[in]tbl(Table&) Reference to an ISIS Table object that contains the field from which to extract the data.

Definition at line 193 of file Blobber.cpp.

References _buf, and getFieldName().

Referenced by load().

◆ operator[]() [1/2]

double * Isis::Blobber::operator[] ( int i)
inline

Returns the ith row/line in the BLOB that can be further referenced into samples.

To access the 2nd sample in the 10th line use:

double sample = blobber[9][1];
Parameters
iIndex
Returns
Pointer to the ith row in the BLOB

Definition at line 206 of file Blobber.h.

References _buf.

◆ operator[]() [2/2]

double const * Isis::Blobber::operator[] ( int i) const
inline

Returns the ith row/line in the BLOB that can be further referenced into samples.

This method provides const access to the data in row matrix form. To access the 2nd sample in the 10th line use:

double sample = blobber[9][1];
Parameters
iIndex
Returns
Const pointer to the ith row in the BLOB

Definition at line 221 of file Blobber.h.

References _buf.

◆ ref()

const BlobBuf & Isis::Blobber::ref ( ) const
inlineprotected

Returns a const reference to the internal buffer for ease of use to derived objects.

Returns
Const reference to BLOB buffer

Definition at line 238 of file Blobber.h.

References _buf.

Referenced by Isis::HiBlob::buffer().

◆ Samples()

int Isis::Blobber::Samples ( ) const
inline

Number of columns or samples in the BLOB.

Returns
The number of samples or columns

Definition at line 167 of file Blobber.h.

References _buf.

Referenced by size().

◆ setBlobName()

void Isis::Blobber::setBlobName ( const QString & bname)
inline

Sets the name of the ISIS BLOB object that contains the data.

This is name of a ISIS Table object that contains one or more fields that make up the BLOB. This is the value of the [i]Name[/i] keyword in the Table object.

Parameters
bnameBlobber name

Definition at line 132 of file Blobber.h.

References _blobname.

◆ setFieldName()

void Isis::Blobber::setFieldName ( const QString & fname)
inline

Sets field name in the ISIS BLOB object that contains data.

This method sets the name of the field contained within the Table object BLOB from which the data is extracted.

Parameters
fnameField name

Definition at line 144 of file Blobber.h.

References _fieldname.

◆ setName()

void Isis::Blobber::setName ( const QString & name)
inline

Specifies the name of this class instantiation.

This is just an additional name that can be used to identify instantiations of this class. It provides a way to uniquely identify each object.

Parameters
nameUnique name

Definition at line 119 of file Blobber.h.

References _name.

◆ size()

int Isis::Blobber::size ( ) const
inline

Returns the total number of elements (rows * columns) in blob.

Returns
The product of rows and columns

Definition at line 152 of file Blobber.h.

References Lines(), and Samples().

Member Data Documentation

◆ _blobname

QString Isis::Blobber::_blobname
private

Name of BLOB to read.

Definition at line 243 of file Blobber.h.

Referenced by getBlobName(), and setBlobName().

◆ _buf

BlobBuf Isis::Blobber::_buf
private

Buffer holding data.

Definition at line 246 of file Blobber.h.

Referenced by deepcopy(), Lines(), loadDouble(), loadInteger(), operator[](), operator[](), ref(), and Samples().

◆ _fieldname

QString Isis::Blobber::_fieldname
private

Name of field in BLOB to read.

Definition at line 244 of file Blobber.h.

Referenced by getFieldName(), and setFieldName().

◆ _name

QString Isis::Blobber::_name
private

Name of this data set.

Definition at line 245 of file Blobber.h.

Referenced by getName(), and setName().


The documentation for this class was generated from the following files: