casa  $Rev:20696$
 All Classes Namespaces Files Functions Variables Typedefs Enumerations Enumerator Friends Defines
Classes | Public Types | Public Member Functions | Static Public Member Functions | Private Attributes | Static Private Attributes | Friends
casa::MVAngle Class Reference

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

#include <MVAngle.h>

List of all members.

Classes

class  Format
 Format structure. More...

Public Types

enum  formatTypes {
  ANGLE,
  TIME,
  CLEAN,
  NO_D,
  NO_DM,
  DIG2,
  FITS,
  LOCAL,
  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.
 MVAngle (const MVAngle &other)
 Copy constructor.
MVAngleoperator= (const MVAngle &other)
 Copy assignment.
 MVAngle (Double d)
 Constructor from Double.
 MVAngle (const Quantity &other)
 Constructor from Quantum : value can be an angle or time.
 ~MVAngle ()
 Destructor.
 operator Double () const
 Conversion operator.
const MVAngleoperator() ()
 Normalisation between -180 and +180 degrees (-pi and +pi)
const MVAngleoperator() (Double norm)
 Normalisation between 2pi*norm and 2pi*norm + 2pi.
const MVAngleoperator() (const MVAngle &norm)
 Normalisation between norm-pi and norm+pi.
const MVAnglebinorm (Double norm)
 Normalisation between pi*norm and pi*norm + pi.
MVAngle coAngle () const
 Make co-angle (e.g.
Double radian () const
 Get value in given unit.
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;

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.
static Bool read (Quantity &res, const String &in)
 Make res angle Quantity from string in angle/time-like format.
static Bool read (Quantity &res, MUString &in)
static Bool read (Quantity &res, const String &in, Bool chk)
static Bool read (Quantity &res, MUString &in, Bool chk)
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;

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.
static MVAngle::formatTypes giveMe (const String &in)
 Get code belonging to string.
static Double timeZone ()
 Get time zone offset (in days)

Private Attributes

Double val
 Value.

Static Private Attributes

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

Friends

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

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):

  • +[v].[v].[dv] -- value in deg, arcmin, arcsec
  • +[v]D[v[M[dv]]] -- value in deg, arcmin, arcsec
  • +[v]:[v[:[dv]]] -- value in h, min, s
  • +[v]H[v[M[dv]]] -- value in h, min, s
  • +[v]{D|H|:}[dv] -- value in deg (or h), arcmin (or min)
  • +dv[unit string] -- value in time or angle units. rad default

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

  • Use AipsrcData once moved to aips from trial

Definition at line 243 of file MVAngle.h.


Member Enumeration Documentation

Format types.

Enumerator:
ANGLE 
TIME 
CLEAN 
NO_D 
NO_DM 
DIG2 
FITS 
LOCAL 
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 249 of file MVAngle.h.


Constructor & Destructor Documentation

Default constructor: generate a zero value.

casa::MVAngle::MVAngle ( const MVAngle other)

Copy constructor.

Constructor from Double.

casa::MVAngle::MVAngle ( const Quantity other)

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

Thrown Exceptions

Destructor.


Member Function Documentation

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

Make co-angle (e.g.

zenith distance from elevation)

Quantity casa::MVAngle::get ( const Unit inunit) const
static Format casa::MVAngle::getFormat ( ) [static]

Get default format.

static MVAngle::formatTypes casa::MVAngle::giveMe ( const String in) [static]

Get code belonging to string.

0 if not known

casa::MVAngle::operator Double ( ) const

Conversion operator.

const MVAngle& casa::MVAngle::operator() ( )

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

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

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

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

Normalisation between norm-pi and norm+pi.

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

Copy assignment.

void casa::MVAngle::print ( ostream &  oss,
const MVAngle::Format form 
) const
void casa::MVAngle::print ( ostream &  oss,
const MVAngle::Format form,
Bool  loc 
) const

Get value in given unit.

static Bool casa::MVAngle::read ( Quantity res,
const String in 
) [static]

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

In the case of String input, also quantities are recognised. chk checks eos

static Bool casa::MVAngle::read ( Quantity res,
MUString in 
) [static]
static Bool casa::MVAngle::read ( Quantity res,
const String in,
Bool  chk 
) [static]
static Bool casa::MVAngle::read ( Quantity res,
MUString in,
Bool  chk 
) [static]
static Format casa::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 casa::MVAngle::setFormat ( uInt  intyp,
uInt  inprec 
) [static]
static Format casa::MVAngle::setFormat ( uInt  inprec = 0) [static]
static Format casa::MVAngle::setFormat ( const Format form) [static]

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 casa::MVAngle::string ( MVAngle::formatTypes  intyp,
uInt  inprec = 0 
) const
String casa::MVAngle::string ( uInt  intyp,
uInt  inprec 
) const
String casa::MVAngle::string ( uInt  inprec) const
String casa::MVAngle::string ( const MVAngle::Format form) const
static Double casa::MVAngle::timeZone ( ) [static]

Get time zone offset (in days)

static Bool casa::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

Default format.

Definition at line 391 of file MVAngle.h.

Temporary format.

Definition at line 394 of file MVAngle.h.

Bool casa::MVAngle::interimSet [static, private]

Definition at line 395 of file MVAngle.h.

Value.

Definition at line 389 of file MVAngle.h.


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