Loading...
Searching...
No Matches
ImageAttrGroup.h
Go to the documentation of this file.
//# ImageAttrGroup.h: Abstract base class for an image attributes group
//# Copyright (C) 2012
//# Associated Universities, Inc. Washington DC, USA.
//#
//# This library is free software; you can redistribute it and/or modify it
//# under the terms of the GNU Library General Public License as published by
//# the Free Software Foundation; either version 2 of the License, or (at your
//# option) any later version.
//#
//# This library is distributed in the hope that it will be useful, but WITHOUT
//# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
//# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public
//# License for more details.
//#
//# You should have received a copy of the GNU Library General Public License
//# along with this library; if not, write to the Free Software Foundation,
//# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA.
//#
//# Correspondence concerning AIPS++ should be addressed as follows:
//# Internet email: casa-feedback@nrao.edu.
//# Postal address: AIPS++ Project Office
//# National Radio Astronomy Observatory
//# 520 Edgemont Road
//# Charlottesville, VA 22903-2475 USA
#ifndef IMAGES_IMAGEATTRGROUP_H
#define IMAGES_IMAGEATTRGROUP_H
//# Includes
#include <casacore/casa/aips.h>
#include <casacore/casa/Containers/ValueHolder.h>
#include <casacore/casa/Arrays/Vector.h>
namespace casacore {
// <summary>
// Abstract base class for an image attributes group.
// </summary>
// <use visibility=export>
// <reviewed reviewer="" date="" tests="tPagedmage.cc" demos="dPagedImage.cc">
// </reviewed>
// <prerequisite>
// <li> <linkto class=ImageInterface>ImageInterface</linkto>
// </prerequisite>
// <etymology>
// This class makes it possible to store extra attributes with an image to
// describe atrbitrary meta information.
// </etymology>
// <synopsis>
// For LOFAR it is needed to store extra meta information and be possible to
// convert it from casacore table format to HDF5 format and vice-versa.
// Furthermore, it must be possible to access the information in a way that
// arbitrary attributes can be stored and retrieved in a way that is agnostic
// to the format the image is stored in. It must also work fine for an image
// stored in FITS format, be it that such an image cannot have such attributes.
//
// The attributes are divided into groups. A group resides in a subtable
// of a casacore image or in a group of an HDF5 image. This class handles
// the attributes of a group. It can get and put the attribute values, as well
// as their unit and measure info (type and reference frame type).
// For HDF5 images the unit is stored in attribute <src>attrname>_UNIT</src>
// and the measure info in <src>attrname>_MEASINFO</src>. For casacore images
// that info is stored as TableMeasure info in the column keywords.
//
// All attributes in a group must have the same number of values, where each
// value can be a scalar or (small) array. The unit and measure info have
// only one value, thus all values of an attribute have the same unit.
// </synopsis>
// <example>
// This example shows how to get attributes from an image.
// <srcblock>
// // Open the image.
// PagedImage<Float> myimage ("image.name");
// // Open the attribute handler.
// ImageAttrHandler& attrHandler = myimage.attrHandler();
// // Get access to attibute group LOFAR_SOURCE.
// ImageAttrGroup& lofarSource = attrHandler.openGroup ("LOFAR_SOURCE");
// // Get the names of all attributes in this group.
// Vector<String> attrNames = lofarSource.attrNames();
// // Get the value of the ATTRNAME attribute (if there).
// if (lofarSource.hasAttr ("ATTRNAME)) {
// ValueHolder vh (lofarSource.getData ("ATTRNAME"));
// Vector<String> name = vh.asString();
// }
// </srcblock>
// The following example shows how to add a group and attribute.
// <srcblock>
// // Open the image.
// PagedImage<Float> myimage ("image.name");
// // Open the attribute handler.
// ImageAttrHandler& attrHandler = myimage.attrHandler();
// // Add attribute group LOFAR_SOURCE.
// ImageAttrGroup& lofarSource = attrHandler.createGroup (LOFAR_SOURCE);
// // Add an attribute which has unit Hz.
// // The value has 2 values (e.g. for 2 frequency bands).
// Vector<double> freqs(2);
// freqs[0]=4.5e7; freqs[1]=5.5e7;
// lofarSource.putData ("CENTER_FREQ", ValueHolder(freqs),
// Vector<String(1,"Hz"));
// </srcblock>
// </example>
//
// <motivation>
// LOFAR needed functionality to store arbitrary attributes.
// </motivation>
class ImageAttrGroup
{
public:
// Default constructor.
ImageAttrGroup()
{}
virtual ~ImageAttrGroup();
// Get the number of rows in the group.
virtual uInt nrows() const = 0;
// Test if an attribute exists.
virtual Bool hasAttr (const String& attrName) const = 0;
// Get all attribute names.
virtual Vector<String> attrNames() const = 0;
// Get the datatype of a attribute.
// It returns TpOther if the attribute is not defined.
virtual DataType dataType (const String& attrName) const = 0;
// Get the data of the given attribute in the given row
virtual ValueHolder getData (const String& attrName, uInt rownr) = 0;
// Get the data of all attributes in a rows.
virtual Record getDataRow (uInt rownr) = 0;
// Get the possible units of the values.
// An empty vector is returned if the attribute has no units.
virtual Vector<String> getUnit (const String& attrName) = 0;
// Get the possible measure info as type and Ref.
// An empty vector is returned if the attribute has no MEASINFO.
virtual Vector<String> getMeasInfo (const String& attrName) = 0;
// Put the data of the given attribute in the given row.
// If the row or attribute is new, it will be added. Note that the
// new row must be directly after the last row in the group.
// <br>If not empty, the units and MEASINFO will be put as column keywords.
// The MEASINFO vector must be given as type,Ref.
virtual void putData (const String& attrName, uInt rownr,
const ValueHolder& data,
const Vector<String>& units = Vector<String>(),
const Vector<String>& measInfo = Vector<String>()) = 0;
};
} //# NAMESPACE CASACORE - END
#endif
casacore::ImageAttrGroup::dataType
virtual DataType dataType(const String &attrName) const =0
Get the datatype of a attribute.
casacore::ImageAttrGroup::getData
virtual ValueHolder getData(const String &attrName, uInt rownr)=0
Get the data of the given attribute in the given row.
casacore::ImageAttrGroup::hasAttr
virtual Bool hasAttr(const String &attrName) const =0
Test if an attribute exists.
casacore::ImageAttrGroup::putData
virtual void putData(const String &attrName, uInt rownr, const ValueHolder &data, const Vector< String > &units=Vector< String >(), const Vector< String > &measInfo=Vector< String >())=0
Put the data of the given attribute in the given row.
casacore::ImageAttrGroup::ImageAttrGroup
ImageAttrGroup()
Default constructor.
Definition ImageAttrGroup.h:117
casacore::ImageAttrGroup::nrows
virtual uInt nrows() const =0
Get the number of rows in the group.
casacore::ImageAttrGroup::getUnit
virtual Vector< String > getUnit(const String &attrName)=0
Get the possible units of the values.
casacore::ImageAttrGroup::attrNames
virtual Vector< String > attrNames() const =0
Get all attribute names.
casacore::ImageAttrGroup::getDataRow
virtual Record getDataRow(uInt rownr)=0
Get the data of all attributes in a rows.
casacore::ImageAttrGroup::~ImageAttrGroup
virtual ~ImageAttrGroup()
casacore::ImageAttrGroup::getMeasInfo
virtual Vector< String > getMeasInfo(const String &attrName)=0
Get the possible measure info as type and Ref.
casacore::String
String: the storage and methods of handling collections of characters.
Definition String.h:223
casacore::ValueHolder
Definition ValueHolder.h:66
casacore::Vector
Definition Vector.h:82
casacore::Record
Record()
casacore
this file contains all the compiler specific defines
Definition mainpage.dox:28
casacore::uInt
unsigned int uInt
Definition aipstype.h:49
casacore::Bool
bool Bool
Define the standard types used by Casacore.
Definition aipstype.h:40