This file is indexed.

/usr/include/casacore/images/Images/ImageAttrGroup.h is in casacore-dev 2.2.0-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
//# 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: aips2-request@nrao.edu.
//#        Postal address: AIPS++ Project Office
//#                        National Radio Astronomy Observatory
//#                        520 Edgemont Road
//#                        Charlottesville, VA 22903-2475 USA
//#
//# $Id$

#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