casacore
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Macros Groups Pages
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes | Friends | List of all members
casacore::MVAngle Class Reference

Class to handle angle type conversions and I/O. More...

#include <MVAngle.h>

Classes

class  Format
 Format structure. More...
 

Public Types

enum  formatTypes {
  ANGLE,
  TIME,
  CLEAN,
  NO_D,
  NO_DM,
  DIG2,
  FITS,
  LOCAL,
  USE_SPACE,
  ALPHA,
  NO_H,
  NO_HM,
  ANGLE_CLEAN,
  ANGLE_NO_D,
  ANGLE_NO_DM,
  ANGLE_CLEAN_NO_D,
  ANGLE_CLEAN_NO_DM,
  TIME_CLEAN,
  TIME_NO_H,
  TIME_NO_HM,
  TIME_CLEAN_NO_H,
  TIME_CLEAN_NO_HM,
  MOD_MASK
}
 Format types. More...
 

Public Member Functions

 MVAngle ()
 Default constructor: generate a zero value. More...
 
 MVAngle (const MVAngle &other)
 Copy constructor. More...
 
MVAngleoperator= (const MVAngle &other)
 Copy assignment. More...
 
 MVAngle (Double d)
 Constructor from Double. More...
 
 MVAngle (const Quantity &other)
 Constructor from Quantum : value can be an angle or time. More...
 
 ~MVAngle ()
 Destructor. More...
 
 operator Double () const
 Conversion operator. More...
 
const MVAngleoperator() ()
 Normalisation between -180 and +180 degrees (-pi and +pi) More...
 
const MVAngleoperator() (Double norm)
 Normalisation between 2pi*norm and 2pi*norm + 2pi. More...
 
const MVAngleoperator() (const MVAngle &norm)
 Normalisation between norm-pi and norm+pi. More...
 
const MVAnglebinorm (Double norm)
 Normalisation between pi*norm and pi*norm + pi. More...
 
MVAngle coAngle () const
 Make co-angle (e.g. More...
 
Double radian () const
 Get value in given unit. More...
 
Double degree () const
 
Double circle () const
 
Quantity get () const
 
Quantity get (const Unit &inunit) const
 
String string () const
 Output data
Warning: The first function below is thread-unsafe because it uses the result of the setFormat function which changes a static class member; The other functions are thread-safe because the format is directly given;
More...
 
String string (MVAngle::formatTypes intyp, uInt inprec=0) const
 
String string (uInt intyp, uInt inprec) const
 
String string (uInt inprec) const
 
String string (const MVAngle::Format &form) const
 
void print (ostream &oss, const MVAngle::Format &form) const
 
void print (ostream &oss, const MVAngle::Format &form, Bool loc) const
 

Static Public Member Functions

static Bool unitString (UnitVal &uv, String &us, MUString &in)
 Check if String unit. More...
 
static Bool read (Quantity &res, const String &in, Bool chk=True)
 Make res angle Quantity from string in angle/time-like format. More...
 
static Bool read (Quantity &res, MUString &in, Bool chk=True)
 
static Bool read (Quantity &res, const String &in, Bool chk, Bool throwExcp)
 
static Bool read (Quantity &res, MUString &in, Bool chk, Bool throwExcp)
 
static Bool handleReadError (MUString &in, Bool throwExcp)
 Handle a read error. More...
 
static Format setFormat (MVAngle::formatTypes intyp, uInt inprec=0)
 Set default format
Warning: It is thread-unsafe to print using the setFormat functions because they change a static class member; The only thred-safe way to print a time is to use the print function above;
More...
 
static Format setFormat (uInt intyp, uInt inprec)
 
static Format setFormat (uInt inprec=0)
 
static Format setFormat (const Format &form)
 
static Format getFormat ()
 Get default format. More...
 
static MVAngle::formatTypes giveMe (const String &in)
 Get code belonging to string. More...
 
static Double timeZone ()
 Get time zone offset (in days) More...
 

Private Attributes

Double val
 Value. More...
 

Static Private Attributes

static MVAngle::Format defaultFormat
 Default format. More...
 
static MVAngle::Format interimFormat
 Temporary format. More...
 
static Bool interimSet
 

Friends

ostream & operator<< (ostream &os, const MVAngle &meas)
 Output an angle. More...
 
istream & operator>> (istream &is, MVAngle &meas)
 Input an angle. More...
 
ostream & operator<< (ostream &os, const MVAngle::Format &form)
 Set a temporary format. More...
 

Detailed Description

Class to handle angle type conversions and I/O.

Intended use:

Public interface

Review Status

Reviewed By:
UNKNOWN
Date Reviewed:
before2004/08/25
Test programs:
tMeasure

Prerequisite

Etymology

From Measure, Value and Angle

Synopsis

An MVAngle is a simple Double, to be used for angle conversions and I/O. It can be constructed from a Double (in which case radians are assumed), or from a Quantity (Quantum<Double>). Quantities must be in either angle or time units.
It has an automatic conversion to Double, so all standard mathematical operations can operate on it.
The class has a number of special member operations:

Output formatting is done with the << statement, with the following rules:

The default formatting can be overwritten by a MVAngle::setFormat(); statement; which returns an MVAngle::Format structure, that can be used in a subsequent one to reset to previous. The format set holds for all MVAngle output on all streams.
Temporary formats (i.e. for one MVAngle output only), can be set by outputting a format (i.e. stream << MVAngle::Format() <<... ).
Caution: A setFormat() will also reset any lingering temporary format; A setFormat(getFormat()) will reset without changing; Problems could arise in parallel processors;
Input can be read if the values are in any of the above (non-clean) output formats.
For other formatting practice, the output can be written to a String with the string() member function.
Note that using a temporary format is inherently thread-unsafe because the format is kept in a static variable. Another thread may overwrite the format just set. The only thread-safe way to format an MVTime is using a print or string that accepts a Format object.

Strings and input can be converted to an MVAngle (or Quantity) by Bool read(Quantity &out, const String &in) and istream >> MVAngle &. In the latter case the actual reading is done by the String read, which reads between white-spaces.
The following input formats (note no blanks allowed) are supported (+stands for an optional + or -; v for an unsigned integer; dv for a floating number. [] indicate optional values. Separating codes are case insensitive):

Examples of valid strings:

5::2.59 5h + 0min + 2.59 s
5..2.59 5deg + 0arcmin + 2.59arcsec
5.259 5.259 rad
5..259 5deg + 259arcsec
5.259a 5.259 * pi * 2 *365.25 rad (normalised)


Caution: In general the input will be read as a Quantity; Reading of Quantities will always try to read special formats (like MVAngle, MVTime) first; In that case problems could arise converting strings like 5d, 5::, 5hm, 5dm; In 'angle' mode they could have meant to be 5d0m, 5:0:, 5h0m, 5d0m, but they could have meant: days, min, hectometre, decimetre; In the same vain 5d2 could have meant 5d2m or 5 d2; To try to guess the general use, the following interpretation is made:

  • 5d, 5:: == 5deg, 5h0m; make float (like 5;d) to make it days/min
  • 5dm, 5hm == decimetre, hectometre; use 5d0m 5h0m for angle
  • 5d2, 5h2, 5:2 == 5d2m, 5h2m, 5:2:; use float 5 or explicit () for other interpretation


Example

See synopsis

Motivation

To be able to format angle-like values in user-required ways.

To Do

Definition at line 245 of file MVAngle.h.

Member Enumeration Documentation

Format types.

Enumerator
ANGLE 
TIME 
CLEAN 
NO_D 
NO_DM 
DIG2 
FITS 
LOCAL 
USE_SPACE 
ALPHA 
NO_H 
NO_HM 
ANGLE_CLEAN 
ANGLE_NO_D 
ANGLE_NO_DM 
ANGLE_CLEAN_NO_D 
ANGLE_CLEAN_NO_DM 
TIME_CLEAN 
TIME_NO_H 
TIME_NO_HM 
TIME_CLEAN_NO_H 
TIME_CLEAN_NO_HM 
MOD_MASK 

Definition at line 251 of file MVAngle.h.

Constructor & Destructor Documentation

casacore::MVAngle::MVAngle ( )

Default constructor: generate a zero value.

casacore::MVAngle::MVAngle ( const MVAngle other)

Copy constructor.

casacore::MVAngle::MVAngle ( Double  d)

Constructor from Double.

casacore::MVAngle::MVAngle ( const Quantity other)

Constructor from Quantum : value can be an angle or time.

Thrown Exceptions

casacore::MVAngle::~MVAngle ( )

Destructor.

Member Function Documentation

const MVAngle& casacore::MVAngle::binorm ( Double  norm)

Normalisation between pi*norm and pi*norm + pi.

Double casacore::MVAngle::circle ( ) const
MVAngle casacore::MVAngle::coAngle ( ) const

Make co-angle (e.g.

zenith distance from elevation)

Double casacore::MVAngle::degree ( ) const
Quantity casacore::MVAngle::get ( ) const
Quantity casacore::MVAngle::get ( const Unit inunit) const
static Format casacore::MVAngle::getFormat ( )
static

Get default format.

static MVAngle::formatTypes casacore::MVAngle::giveMe ( const String in)
static

Get code belonging to string.

0 if not known

static Bool casacore::MVAngle::handleReadError ( MUString in,
Bool  throwExcp 
)
static

Handle a read error.

An exception is thrown if indicated so. Otherwise in.pop() is called and False is returned.

casacore::MVAngle::operator Double ( ) const

Conversion operator.

const MVAngle& casacore::MVAngle::operator() ( )

Normalisation between -180 and +180 degrees (-pi and +pi)

const MVAngle& casacore::MVAngle::operator() ( Double  norm)

Normalisation between 2pi*norm and 2pi*norm + 2pi.

const MVAngle& casacore::MVAngle::operator() ( const MVAngle norm)

Normalisation between norm-pi and norm+pi.

MVAngle& casacore::MVAngle::operator= ( const MVAngle other)

Copy assignment.

void casacore::MVAngle::print ( ostream &  oss,
const MVAngle::Format form 
) const
void casacore::MVAngle::print ( ostream &  oss,
const MVAngle::Format form,
Bool  loc 
) const
Double casacore::MVAngle::radian ( ) const

Get value in given unit.

static Bool casacore::MVAngle::read ( Quantity res,
const String in,
Bool  chk = True 
)
static

Make res angle Quantity from string in angle/time-like format.

In the case of String input, also quantities are recognised. chk=True means that the entire string should be consumed. throwExcp=True means that an exception is thrown in case of an error.

static Bool casacore::MVAngle::read ( Quantity res,
MUString in,
Bool  chk = True 
)
static
static Bool casacore::MVAngle::read ( Quantity res,
const String in,
Bool  chk,
Bool  throwExcp 
)
static
static Bool casacore::MVAngle::read ( Quantity res,
MUString in,
Bool  chk,
Bool  throwExcp 
)
static
static Format casacore::MVAngle::setFormat ( MVAngle::formatTypes  intyp,
uInt  inprec = 0 
)
static

Set default format
Warning: It is thread-unsafe to print using the setFormat functions because they change a static class member; The only thred-safe way to print a time is to use the print function above;

static Format casacore::MVAngle::setFormat ( uInt  intyp,
uInt  inprec 
)
static
static Format casacore::MVAngle::setFormat ( uInt  inprec = 0)
static
static Format casacore::MVAngle::setFormat ( const Format form)
static
String casacore::MVAngle::string ( ) const

Output data
Warning: The first function below is thread-unsafe because it uses the result of the setFormat function which changes a static class member; The other functions are thread-safe because the format is directly given;

String casacore::MVAngle::string ( MVAngle::formatTypes  intyp,
uInt  inprec = 0 
) const
String casacore::MVAngle::string ( uInt  intyp,
uInt  inprec 
) const
String casacore::MVAngle::string ( uInt  inprec) const
String casacore::MVAngle::string ( const MVAngle::Format form) const
static Double casacore::MVAngle::timeZone ( )
static

Get time zone offset (in days)

static Bool casacore::MVAngle::unitString ( UnitVal uv,
String us,
MUString in 
)
static

Check if String unit.

Friends And Related Function Documentation

ostream& operator<< ( ostream &  os,
const MVAngle meas 
)
friend

Output an angle.

ostream& operator<< ( ostream &  os,
const MVAngle::Format form 
)
friend

Set a temporary format.

istream& operator>> ( istream &  is,
MVAngle meas 
)
friend

Input an angle.

Member Data Documentation

MVAngle::Format casacore::MVAngle::defaultFormat
staticprivate

Default format.

Definition at line 400 of file MVAngle.h.

MVAngle::Format casacore::MVAngle::interimFormat
staticprivate

Temporary format.

Definition at line 403 of file MVAngle.h.

Bool casacore::MVAngle::interimSet
staticprivate

Definition at line 404 of file MVAngle.h.

Double casacore::MVAngle::val
private

Value.

Definition at line 398 of file MVAngle.h.


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