/usr/include/casacore/ms/MeasurementSets/MSAntennaColumns.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 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 | //# MSAntennaColumns.h: provides easy access to MSAntenna columns
//# Copyright (C) 1996,1999,2000
//# 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 MS_MSANTENNACOLUMNS_H
#define MS_MSANTENNACOLUMNS_H
#include <casacore/casa/aips.h>
#include <casacore/measures/Measures/MPosition.h>
#include <casacore/measures/Measures/MCPosition.h>
#include <casacore/measures/TableMeasures/ArrayQuantColumn.h>
#include <casacore/measures/TableMeasures/ScalarMeasColumn.h>
#include <casacore/measures/TableMeasures/ScalarQuantColumn.h>
#include <casacore/tables/Tables/ArrayColumn.h>
#include <casacore/tables/Tables/ScalarColumn.h>
#include <casacore/casa/BasicSL/String.h>
namespace casacore { //# NAMESPACE CASACORE - BEGIN
class MSAntenna;
// <summary>
// A class to provide easy read-only access to MSAntenna columns
// </summary>
// <use visibility=export>
// <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
// </reviewed>
// <prerequisite>
// <li> MSAntenna
// <li> ArrayColumn
// <li> ScalarColumn
// </prerequisite>
//
// <etymology>
// ROMSAntennaColumns stands for Read-Only MeasurementSet Antenna Table columns.
// </etymology>
//
// <synopsis>
// This class provides read-only access to the columns in the MSAntenna
// Table. It does the declaration of all the Scalar and ArrayColumns with the
// correct types, so the application programmer doesn't have to worry about
// getting those right. There is an access function for every predefined
// column. Access to non-predefined columns will still have to be done with
// explicit declarations.
// See <linkto class=ROMSColumns> ROMSColumns</linkto> for an example.
// </synopsis>
//
// <motivation>
// See <linkto class=MSColumns> MSColumns</linkto> for the motivation.
// </motivation>
class ROMSAntennaColumns
{
public:
// Create a columns object that accesses the data in the specified Table
ROMSAntennaColumns(const MSAntenna& msAntenna);
// The destructor does nothing special
~ROMSAntennaColumns();
// Access to columns
// <group>
const ROScalarColumn<Double>& dishDiameter() const {return dishDiameter_p;}
const ROScalarQuantColumn<Double>& dishDiameterQuant() const
{return dishDiameterQuant_p;}
const ROScalarColumn<Bool>& flagRow() const {return flagRow_p;}
const ROScalarColumn<String>& mount() const {return mount_p;}
const ROScalarColumn<String>& name() const {return name_p;}
const ROArrayColumn<Double>& offset() const {return offset_p;}
const ROArrayQuantColumn<Double>& offsetQuant() const {return offsetQuant_p;}
const ROScalarMeasColumn<MPosition>& offsetMeas() const {
return offsetMeas_p;}
const ROArrayColumn<Double>& position() const {return position_p;}
const ROArrayQuantColumn<Double>& positionQuant() const {
return positionQuant_p;}
const ROScalarMeasColumn<MPosition>& positionMeas() const
{ return positionMeas_p;}
const ROScalarColumn<String>& station() const {return station_p;}
const ROScalarColumn<String>& type() const {return type_p;}
// </group>
// Access to optional columns
// <group>
const ROArrayColumn<Double>& meanOrbit() const {return meanOrbit_p;}
const ROScalarColumn<Int>& orbitId() const {return orbitId_p;}
const ROScalarColumn<Int>& phasedArrayId() const {return phasedArrayId_p;}
// </group>
// Convenience function that returns the number of rows in any of the columns
uInt nrow() const {return dishDiameter_p.nrow();}
// returns the last row that contains an antenna at the specified position,
// to within the specified tolerance. The reference frame of the supplied
// position must be the same as the one for the POSITION columns. If not an
// AipsError is thrown as such an argument will never match any row of the
// Table. The tolerance is the maximum allowed distance between the two
// positions and the supplied Quantum must have dimensions of length. This is
// checked when compiled in debug mode and an AipsError exception is thrown
// if the dimensions are wrong. Returns -1 if no match could be found. Flaged
// rows can never match. If tryRow is non-negative, then that row is tested
// to see if it matches before any others are tested. Setting tryRow to a
// positive value greater than the table length will throw an exception
// (AipsError), when compiled in debug mode.
Int matchAntenna(const MPosition& antennaPos,
const Quantum<Double>& tolerance, Int tryRow=-1);
// Same as the previous function except that the antenna name must also
// match.
Int matchAntenna(const String& antName, const MPosition& antennaPos,
const Quantum<Double>& tolerance, Int tryRow=-1);
// Same as the previous function except that the station name must also
// match.
Int matchAntennaAndStation(const String& antName,
const String& stationName, // ignored when empty
const MPosition& antennaPos,
const Quantum<Double>& tolerance, Int tryRow=-1);
protected:
//# default constructor creates a object that is not usable. Use the attach
//# function correct this.
ROMSAntennaColumns();
//# attach this object to the supplied table.
void attach(const MSAntenna& msAntenna);
private:
//# Make the assignment operator and the copy constructor private to prevent
//# any compiler generated one from being used.
ROMSAntennaColumns(const ROMSAntennaColumns&);
ROMSAntennaColumns& operator=(const ROMSAntennaColumns&);
//# Check if any optional columns exist and if so attach them.
void attachOptionalCols(const MSAntenna& msAntenna);
//# Functions which check the supplied values against the relevant column and
//# the specified row.
Bool matchName(uInt row, const String& antName) const;
Bool matchStation(uInt row, const String& stationName) const;
Bool matchPosition(uInt row, const Vector<Double>& antPosInM,
const Double tolInM) const;
//# required columns
ROScalarColumn<Double> dishDiameter_p;
ROScalarColumn<Bool> flagRow_p;
ROScalarColumn<String> mount_p;
ROScalarColumn<String> name_p;
ROArrayColumn<Double> offset_p;
ROArrayColumn<Double> position_p;
ROScalarColumn<String> station_p;
ROScalarColumn<String> type_p;
//# optional columns
ROArrayColumn<Double> meanOrbit_p;
ROScalarColumn<Int> orbitId_p;
ROScalarColumn<Int> phasedArrayId_p;
//# Access to Measure columns
ROScalarMeasColumn<MPosition> offsetMeas_p;
ROScalarMeasColumn<MPosition> positionMeas_p;
//# Access to Quantum columns
ROScalarQuantColumn<Double> dishDiameterQuant_p;
ROArrayQuantColumn<Double> offsetQuant_p;
ROArrayQuantColumn<Double> positionQuant_p;
};
// <summary>
// A class to provide easy read-write access to MSAntenna columns
// </summary>
// <use visibility=export>
// <reviewed reviewer="Bob Garwood" date="1997/02/01" tests="" demos="">
// </reviewed>
// <prerequisite>
// <li> MSAntenna
// <li> ArrayColumn
// <li> ScalarColumn
// </prerequisite>
//
// <etymology>
// MSAntennaColumns stands for MeasurementSet Antenna Table columns.
// </etymology>
//
// <synopsis>
// This class provides access to the columns in the MSAntenna Table,
// it does the declaration of all the Scalar and ArrayColumns with the
// correct types, so the application programmer doesn't have to
// worry about getting those right. There is an access function
// for every predefined column. Access to non-predefined columns will still
// have to be done with explicit declarations.
// See <linkto class=MSColumns> MSColumns</linkto> for an example.
// </synopsis>
//
// <motivation>
// See <linkto class=MSColumns> MSColumns</linkto> for the motivation.
// </motivation>
class MSAntennaColumns: public ROMSAntennaColumns
{
public:
// Create a columns object that accesses the data in the specified Table
MSAntennaColumns(MSAntenna& msAntenna);
// The destructor does nothing special
~MSAntennaColumns();
// Read-write access to required columns
// <group>
ScalarColumn<Double>& dishDiameter() {return dishDiameter_p;}
ScalarQuantColumn<Double>& dishDiameterQuant() {return dishDiameterQuant_p;}
ScalarColumn<Bool>& flagRow() {return flagRow_p;}
ScalarColumn<String>& mount() {return mount_p;}
ScalarColumn<String>& name() {return name_p;}
ArrayColumn<Double>& offset() {return offset_p;}
ArrayQuantColumn<Double>& offsetQuant() {return offsetQuant_p;}
ScalarMeasColumn<MPosition>& offsetMeas() { return offsetMeas_p;}
ArrayColumn<Double>& position() {return position_p;}
ArrayQuantColumn<Double>& positionQuant() {return positionQuant_p;}
ScalarMeasColumn<MPosition>& positionMeas() { return positionMeas_p;}
ScalarColumn<String>& station() {return station_p;}
ScalarColumn<String>& type() {return type_p;}
// </group>
// Read-write access to optional columns
// <group>
ArrayColumn<Double>& meanOrbit() {return meanOrbit_p;}
ScalarColumn<Int>& orbitId() {return orbitId_p;}
ScalarColumn<Int>& phasedArrayId() {return phasedArrayId_p;}
// </group>
// Read-only access to required columns
// <group>
const ROScalarColumn<Double>& dishDiameter() const {
return ROMSAntennaColumns::dishDiameter();}
const ROScalarQuantColumn<Double>& dishDiameterQuant() const {
return ROMSAntennaColumns::dishDiameterQuant();}
const ROScalarColumn<Bool>& flagRow() const {
return ROMSAntennaColumns::flagRow();}
const ROScalarColumn<String>& mount() const {
return ROMSAntennaColumns::mount();}
const ROScalarColumn<String>& name() const {
return ROMSAntennaColumns::name();}
const ROArrayColumn<Double>& offset() const {
return ROMSAntennaColumns::offset();}
const ROArrayQuantColumn<Double>& offsetQuant() const {
return ROMSAntennaColumns::offsetQuant();}
const ROScalarMeasColumn<MPosition>& offsetMeas() const {
return ROMSAntennaColumns::offsetMeas();}
const ROArrayColumn<Double>& position() const {
return ROMSAntennaColumns::position();}
const ROArrayQuantColumn<Double>& positionQuant() const {
return ROMSAntennaColumns::positionQuant();}
const ROScalarMeasColumn<MPosition>& positionMeas() const {
return ROMSAntennaColumns::positionMeas();}
const ROScalarColumn<String>& station() const {
return ROMSAntennaColumns::station();}
const ROScalarColumn<String>& type() const {
return ROMSAntennaColumns::type();}
// </group>
// Read-only access to optional columns
// <group>
const ROArrayColumn<Double>& meanOrbit() const {
return ROMSAntennaColumns::meanOrbit();}
const ROScalarColumn<Int>& orbitId() const {
return ROMSAntennaColumns::orbitId();}
const ROScalarColumn<Int>& phasedArrayId() const {
return ROMSAntennaColumns::phasedArrayId();}
// </group>
// set the position type for the POSITION column. This can only be done when
// the table has no rows. Trying to do so at other times will throw an
// exception.
void setPositionRef(MPosition::Types ref);
// set the position type for the OFFSET column. This can only be done when
// the table has no rows. Trying to do so at other times will throw an
// exception.
void setOffsetRef(MPosition::Types ref);
protected:
//# default constructor creates a object that is not usable. Use the attach
//# function correct this.
MSAntennaColumns();
//# attach this object to the supplied table.
void attach(MSAntenna& msAntenna);
private:
//# Make the assignment operator and the copy constructor private to prevent
//# any compiler generated one from being used.
MSAntennaColumns(const MSAntennaColumns&);
MSAntennaColumns& operator=(const MSAntennaColumns&);
//# Check if any optional columns exist and if so attach them.
void attachOptionalCols(MSAntenna& msAntenna);
//# required columns
ScalarColumn<Double> dishDiameter_p;
ScalarColumn<Bool> flagRow_p;
ScalarColumn<String> mount_p;
ScalarColumn<String> name_p;
ArrayColumn<Double> offset_p;
ArrayColumn<Double> position_p;
ScalarColumn<String> station_p;
ScalarColumn<String> type_p;
//# optional columns
ArrayColumn<Double> meanOrbit_p;
ScalarColumn<Int> orbitId_p;
ScalarColumn<Int> phasedArrayId_p;
//# Access to Measure columns
ScalarMeasColumn<MPosition> offsetMeas_p;
ScalarMeasColumn<MPosition> positionMeas_p;
//# Access to Quantum columns
ScalarQuantColumn<Double> dishDiameterQuant_p;
ArrayQuantColumn<Double> offsetQuant_p;
ArrayQuantColumn<Double> positionQuant_p;
};
} //# NAMESPACE CASACORE - END
#endif
|