UnitMap.h

Classes

UnitMap -- contains all simple known physical units (full description)

class UnitMap

Interface

Public Members
UnitMap()
~UnitMap()
static Bool getPref(const String &s, UnitName &name)
static Bool getCache(const String &s, UnitVal &val)
static Bool getUnit(const String &s, UnitName &name)
static void putCache(const String &s, const UnitVal &val)
static void putUser(const String &s, const UnitVal &val)
static void putUser(const String &s, const UnitVal &val, const String &name)
static void putUser(const UnitName &name)
static void removeUser(const String &name)
static void removeUser(const UnitName &name)
static void clearCache()
static void addFITS()
static void clearFITS()
static Unit fromFITS(const Unit &un)
static Unit toFITS(const Unit &un)
static void list(ostream &os)
static void list()
static void listCache(ostream &os)
static void listCache()
static void listPref(ostream &os)
static void listPref()
static void listDef(ostream &os)
static void listDef()
static void listSI(ostream &os)
static void listSI()
static void listCust(ostream &os)
static void listCust()
static void listUser(ostream &os)
static void listUser()
static const map<String, String> &givePref()
static const map<String, String> &giveDef()
static const map<String, String> &giveSI()
static const map<String, String> &giveCust()
static const map<String, String> &giveUser()
static const map<String, String> &giveCache()
Private Members
UnitMap(const UnitMap &other)
UnitMap &operator=(const UnitMap &other)
static Bool getNameFITS(UnitName *&name, uInt which)
static const String &getStringFITS(uInt which)
static void initUM()
static void initUMPrefix()
static void initUMSI1()
static void initUMSI2()
static void initUMCust1()
static void initUMCust2()
static void initUMCust3()

Description

Review Status

Programs:
Tests:

Prerequisite

Etymology

Based on Units and the Aips++ container classes called 'Map'

Synopsis

Physical units are strings consisting of one or more names of known basic units, separated by '.' or ' ' (for multiplication) or '/' (for division). Each name can optionally be preceded by a standard decimal prefix, and/or followed by an (optionally signed) exponent. Example: km/s/(Mpc.s)2 is identical to km.s-1.Mpc-2.s-2

See the Unit class for more details.

The UnitMap class contains the known standard basic units, and any other basic unit defined by the user of the Unit related classes. The known units are divided into 5 different groups:

  1. Defining units: m, kg, s, A, K, cd, mol, rad, sr, _
  2. SI units: including a.o. Jy, AU etc)
  3. Customary units: e.g. lb, hp, ly etc
  4. User defined units: defined by user (e.g. Beam, KPH, KM)
  5. Cached units: cached unit strings for speed in operations
The full list of known units can be viewed by running the tUnit test program.
Caution There is a difference between units without a dimension (non-dimensioned I will call them), and undimensioned units. Non-dimensioned examples are "", "%"; undimensioned examples: "beam", "pixel".

Information about the contents of the unit maps can be obtained by the Bool functions (False if not present):

The standard units can be viewed by the following commands, which output to cout:

Units can be defined in the user list by:

Tip The cache will be cleared if a user defined unit is overwritten, to make sure no old value will be used.
    UnitMap::putUser("tag", UnitVal(factor,"unit"), "full name (optional)");
       or:
    UnitMap::putUser(UnitName);
    
Caution If using an explicit Unit variable (e.g. Unit a("5Bolton/beam")), the check on the legality of the given string, and the conversion to the cached canonical value in the variable 'a', is only done at creation time. This means that if the user changes the value of a unit involved by the putUser() method, the unit using it should be re-created ( a = Unit("5Bolton/beam");).
A special set of 'units' used in FITS datasets can be added by the command
	UnitMap::addFITS();
This set can be cleared from the user table by:
	UnitMap::clearFITS();
Note that Unitmap keeps track of the inclusion of the FITS inclusion, making multiple calls inexpensive. The list of current FITS units can be viewed by running the tUnit program, or looking at the FITSunit table.

Once the UnitMap::addFITS() has been run, the FITS units can be used as any other unit. In addition, a FITS unit can be translated to standard SI units by a call to Unit UnitMap::fromFITS(const Unit). Any unit that is defined as a standard FITS unit will be translated. Unknown ones will not be translated, making the way clear for having standard units in a FITS units string. A comparable toFITS() translates in the same way in the reversed direction.

The cache can be cleared by:

    UnitMap::clearCache();
    

Example

Check for legal prefix:
	UnitName myUnit;
	if (UnitMap::getPref("k", myUnit)) { cout << "k has value " << myUnit;}
Define a value for the unit 'beam':
    UnitMap::putUser("beam",UnitVal(C::pi * 0.1, "\"_2"),"telescope beam");
    
List current cache:
    UnitMap::listCache();
    

Motivation

Standard list available to try to enhance use of SI and related units

To Do

Member Description

UnitMap()

Default constructor of maps

~UnitMap()

Destructor

static Bool getPref(const String &s, UnitName &name)

Check if a unit name is known, and return its value if True

Get a prefix definition from key

static Bool getCache(const String &s, UnitVal &val)

Check if a unit name is known, and return its value if True

Get a cached definition

static Bool getUnit(const String &s, UnitName &name)

Check if a unit name is known, and return its value if True

Get a standard unit definition (search order: User, Customary, SI)

static void putCache(const String &s, const UnitVal &val)

Save a definition of a full unit name in the cache (the cache will be cleared if getting too large (200 entries)

static void putUser(const String &s, const UnitVal &val)
static void putUser(const String &s, const UnitVal &val, const String &name)
static void putUser(const UnitName &name)

Define a user defined standard unit. If the unit is being redefined, and it has already been used in a user's Unit variable, the value cached in that variable will not change.

static void removeUser(const String &name)
static void removeUser(const UnitName &name)

Remove a user unit

static void clearCache()

Clear out the cache

static void addFITS()

Define FITS related unit names

static void clearFITS()

Clear FITS related units from user list

static Unit fromFITS(const Unit &un)

Translate a FITS unit to the proper units. Note that this is a translation of the string only, no conversion. Unknown FITS units are not translated. Hence any new definition of the FITS units will work ok

static Unit toFITS(const Unit &un)

Translate to a FITS unit

static void list(ostream &os)
static void list()

List some part of the standard unit lists on cout or stream

List all known unit symbols

static void listCache(ostream &os)
static void listCache()

List some part of the standard unit lists on cout or stream

List all units in cache

static void listPref(ostream &os)
static void listPref()

List some part of the standard unit lists on cout or stream

List all prefixes

static void listDef(ostream &os)
static void listDef()

List some part of the standard unit lists on cout or stream

List all defining units

static void listSI(ostream &os)
static void listSI()

List some part of the standard unit lists on cout or stream

List all SI units

static void listCust(ostream &os)
static void listCust()

List some part of the standard unit lists on cout or stream

List all customary units

static void listUser(ostream &os)
static void listUser()

List some part of the standard unit lists on cout or stream

static const map<String, String> &givePref()
static const map<String, String> &giveDef()
static const map<String, String> &giveSI()
static const map<String, String> &giveCust()
static const map<String, String> &giveUser()
static const map<String, String> &giveCache()

Return the different maps

UnitMap(const UnitMap &other)

Copy constructor (not implemented)

UnitMap &operator=(const UnitMap &other)

Copy assignment (not implemented)

static Bool getNameFITS(UnitName *&name, uInt which)

Get the name of a FITS unit

static const String &getStringFITS(uInt which)

Get the belonging unit to a FITS unit

static void initUM()

Initialise the static map

static void initUMPrefix()
static void initUMSI1()
static void initUMSI2()
static void initUMCust1()
static void initUMCust2()
static void initUMCust3()

Bits and pieces of initUM() to get compilation speed improved