casa
$Rev:20696$
|
00001 //# Quanta.h: a module for units and quantities 00002 //# Copyright (C) 1998,1999,2000,2004 00003 //# Associated Universities, Inc. Washington DC, USA. 00004 //# 00005 //# This library is free software; you can redistribute it and/or modify it 00006 //# under the terms of the GNU Library General Public License as published by 00007 //# the Free Software Foundation; either version 2 of the License, or (at your 00008 //# option) any later version. 00009 //# 00010 //# This library is distributed in the hope that it will be useful, but WITHOUT 00011 //# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or 00012 //# FITNESS FOR A PARTICULAR PURPOSE. See the GNU Library General Public 00013 //# License for more details. 00014 //# 00015 //# You should have received a copy of the GNU Library General Public License 00016 //# along with this library; if not, write to the Free Software Foundation, 00017 //# Inc., 675 Massachusetts Ave, Cambridge, MA 02139, USA. 00018 //# 00019 //# Correspondence concerning AIPS++ should be addressed as follows: 00020 //# Internet email: aips2-request@nrao.edu. 00021 //# Postal address: AIPS++ Project Office 00022 //# National Radio Astronomy Observatory 00023 //# 520 Edgemont Road 00024 //# Charlottesville, VA 22903-2475 USA 00025 //# 00026 //# $Id: Quanta.h 20551 2009-03-25 00:11:33Z Malte.Marquarding $ 00027 00028 #ifndef CASA_QUANTA_H 00029 #define CASA_QUANTA_H 00030 00031 //# Includes 00032 #include <casa/Quanta/Unit.h> 00033 //# Next one at this place 00034 #include <casa/Quanta/QC.h> 00035 #include <casa/Quanta/UnitMap.h> 00036 #include <casa/Quanta/Quantum.h> 00037 #include <casa/Quanta/QMath.h> 00038 #include <casa/Quanta/QLogical.h> 00039 00040 namespace casa { //# NAMESPACE CASA - BEGIN 00041 00042 // <module> 00043 // 00044 00045 // <summary> a module for units and quantities </summary> 00046 00047 // <use visibility=export> 00048 00049 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tUnit tQuantum" 00050 // demos="dMUString"> 00051 // </reviewed> 00052 00053 // <prerequisite> 00054 // </prerequisite> 00055 00056 // <etymology> 00057 // The name Quanta derives from a physical quantity, i.e. a value with 00058 // units attached. 00059 // </etymology> 00060 // 00061 // <synopsis> 00062 // The Quanta model deals with units and physical quantities 00063 // (i.e. values with a unit). 00064 // Units are handled in the <a href="#Unit">Unit</a> section 00065 // (see <linkto class="Unit">Unit.h</linkto>). 00066 // Quantities are handled in the <a href="#Quantum">Quantum</a> section 00067 // (see <linkto class="Quantum">Quantum.h</linkto>). 00068 // In addition the module contains some more general support classes 00069 // (<linkto class=Euler>Euler</linkto> angles, 00070 // <linkto class=RotMatrix>rotation matrix</linkto>, 00071 // <linkto class=MUString>pointed string</linkto>), formatting for 00072 // <linkto class=MVTime>time</linkto> and <linkto class=MVAngle>angle</linkto> 00073 // classes and classes containing information for 00074 // Measures (<linkto class=MeasValue>MeasValue</linkto> and the derived MV 00075 // classes like <linkto class=MVEpoch>MVEpoch</linkto>). See the 00076 // <a href="#MeasValue">MeasValue</a> section. 00077 // 00078 // <h3> Includes</h3> 00079 // Including the <src>casa/Quanta.h</src> will take care of all 00080 // includes necessary for the handling of pure Units and Quantities. 00081 // 00082 // <anchor name="Unit"><h3> Physical units </h3></anchor> 00083 // Physical units are basically used in quantities 00084 // (see <linkto class="Quantum">Quantum</linkto>), i.e. 00085 // a value and a dimension. The Unit class, or one of its subsidiaries, will 00086 // in general not be called separately. The only reason to make use of these 00087 // classes is to generate additional 'tagged' units, i.e. units with a 00088 // special name, e.g. 'beam' for a telescope beam, or 'JY', a non-SI name 00089 // for Jy. 00090 // <h3> Units </h3> 00091 // A Unit is in principle specified as a String (or directly as "string"), 00092 // and can be defined as either a Unit or a String. 00093 // If defined as a Unit, the format of the string will be checked for a 00094 // legal definition and relevant information (e.g. scale, dimension type) is 00095 // cached in the Unit object, leading to (much) faster use; if defined as a 00096 // String, the checking will be postponed 00097 // until any use is made of the information in the string. 00098 // 00099 // A unit is a string of one or more fields separated 00100 // by 'space' or '.' (to indicate multiply) or '/' (to indicate divide). 00101 // Multiple separators are acted upon (i.e. <src>m//s == m.s</src>). 00102 // Separators are acted upon left-to-right (i.e. <src>m/s/A == (m/s)/A</src>; 00103 // use () to indicate otherwise (e.g. <src>m/(s/A)</src> )). 00104 // 00105 // A field is a name, or a unit enclosed in (), optionally followed by an, 00106 // optionally signed, decimal constant. E.g. <src>m.(m/s)-2 == m-1.s2</src> ) 00107 // 00108 // Note that a 'space' or '.' before an opening '(' can be omitted. 00109 // 00110 // A name can consist of case-sensitive letters, '_', ''', ':', '"' and '0' 00111 // ('0' not as first character). Digits 1-9 are allowed if preceded with 00112 // an '_'. Possible legal names are e.g. Jy, R0, R_1, "_2. 00113 // <note role=tip> 00114 // <ul> 00115 // <li> ' is used for arcmin 00116 // <li> '' or " for arcsec 00117 // <li> : :: and ::: are used for h, min, s respectively. 00118 // </ul> 00119 // </note> 00120 // <note role=tip> The standard naming conventions for SI units are that they 00121 // are all in lowercase, unless derived from a person's name, when they start 00122 // with a capital letter. Notable exceptions are some of the astronomical 00123 // SI related units (e.g. AU). 00124 // </note> 00125 // A name can be preceded by a (standard) decimal prefix. 00126 // 00127 // A name must be defined in a Unit map before it can be used. 00128 // 00129 // All SI units and some customary units are part of the classes. User 00130 // defined names can be added by the UnitMap::putUser() function (see 00131 // <linkto class="UnitMap">UnitMap</linkto>). A special set of FITS related 00132 // units can be added by the <src>UnitMap::addFITS()</src> function. For 00133 // details, see <linkto class="UnitMap">UnitMap</linkto>. 00134 // 00135 // Example: 00136 // <srcblock> 00137 // km/s/(Mpc.s)2 is identical to km.s-1.Mpc-2.s-2 00138 // </srcblock> 00139 // There are 5 name lists in the UnitMap, which are searched in reverse order: 00140 // <ol> 00141 // <li> Defining units: m, kg, s, A, K, cd, mol, rad, sr, _ 00142 // <li> SI units: including a.o. g, Jy, AU 00143 // <li> Customary units: e.g. lb, hp, ly 00144 // <li> User defined units: defined by user (e.g. beam, KPH, KM) 00145 // <li> Cached units: for speed in operations 00146 // </ol> 00147 // All known names can be viewed by running the tUnit test program, or 00148 // using the MapUnit::list() routine. 00149 // 00150 // The definitions that were current on 990915 are given at end of this file 00151 // 00152 // <note role=caution> 00153 // There is a difference between units without a dimension (non-dimensioned 00154 // I will call them), and undimensioned units. Non-dimensioned examples are 00155 // "", "%"; undimensioned examples: "beam", "pixel". 00156 // </note> 00157 // 00158 // <h3> Working with units </h3> 00159 // In general units are not used explicitly, but are embedded in quantities 00160 // and coordinates. 00161 // 00162 // Explicit use of units is only necessary if: 00163 // <ol> 00164 // <li> a unit string has to be tested for legality (e.g. exist JY?) 00165 // <li> a unit string has to be named (e.g. H0 for km/s/Mpc) 00166 // <li> some calculation on units has to be performed 00167 // (e.g. how many hp.s per eV) 00168 // </ol> 00169 // 00170 // For these cases a Unit can be defined as either a String or a Unit. If 00171 // specified as a Unit an automatic check (with exception if illegal) of 00172 // the format of the unit string is performed 00173 // <srcblock> 00174 // Unit a="km/Ms"; String b="Mm/Gs"; //produce 'identical' units a and b 00175 // Unit a("KpH"); // will produce exception 00176 // String a("KpH"); // will be accepted till some other action 00177 // // done on a 00178 // // The following will define a unit named 'tag' with a value identical 00179 // // to 5 mJy. After this definition tag can be used as any other unit, 00180 // // e.g. Unit("Gtag/pc") will be a valid unit string. 00181 // UnitMap::putUser("tag",UnitVal(5.,"mJy"),"my own unit name for 5 mJy"); 00182 // // The following will calculate how many hp.s per eV 00183 // Double hpeV = (UnitVal("hp.s")/UnitVal("eV")).getFac(); 00184 // // maybe after checking for identical dimensions 00185 // if ( UnitVal("hp.s") != UnitVal("eV")) { cout << "unexpected" << endl; } 00186 // </srcblock> 00187 // <note role=tip> 00188 // UnitVal has the following special constants to easily check unit 00189 // dimensions (note that they can be combined to e.g. generate velocity 00190 // as 'UnitVal::LENGTH/UnitVal::TIME') 00191 // <ul> 00192 // <li> UnitVal::NODIM 00193 // <li> UnitVal::LENGTH 00194 // <li> UnitVal::MASS 00195 // <li> UnitVal::TIME 00196 // <li> UnitVal::TEMPERATURE 00197 // <li> UnitVal::ANGLE 00198 // <li> UnitVal::SOLIDANGLE 00199 // <li> UnitVal::MOLAR 00200 // <li> UnitVal::CURRENT 00201 // <li> UnitVal::INTENSITY 00202 // </ul> 00203 // </note> 00204 // 00205 // See the <linkto class="UnitVal">UnitVal</linkto> 00206 // for details of calculating with units. 00207 // See the <linkto class="UnitMap">UnitMap</linkto> 00208 // for the details of defining/viewing named units. 00209 // 00210 // 00211 // <anchor name="Quantum"><h3> Quantums and Quantities </h3></anchor> 00212 // A Quantum is a value with a unit. Quantums are templated on their value 00213 // type (e.g. <src>Float</src>, <src>Vector<Double></src>). <em>Quantity</em> 00214 // is a typedef 00215 // for the (probably most common) <src>Quantum<Double></src>. 00216 // The basic specification of a Quantum is: 00217 // <srcblock> 00218 // Quantum<Type> ( Type value, Unit unit); // or: String unit or: "unit" 00219 // Quantity( Double value, Unit unit); // or: String unit or: "unit" 00220 // </srcblock> 00221 // 00222 // E.g. 00223 // <ul> 00224 // <li> <src>Quantity(5.,"m");</src> 00225 // <li> <src>Quantum<Double> (5.,"m"); // identical to previous</src> 00226 // <li> <src>Vector<Int> a(3); a(3) = 5; Quantum<Vector<Int> >(a,"Jy");</src> 00227 // </ul> 00228 // 00229 // The following list of constructors is available. 00230 // <note role=tip> 00231 // In the following 'Unit' can be replaced by 'String' (or "string" everywhere. 00232 // The only difference being a check for a legitimate unit string being 00233 // executed if Unit specified (with exception if error), and a much faster 00234 // execution of the Unit is used repeatedly. 00235 // <src>Quantum<Type></src> can, if Type equals Double, be replaced with 00236 // <src>Quantity</src> 00237 // </note> 00238 // <ul> 00239 // <li> <src>Quantum<Type>() value 0 generated</src> 00240 // <li> <src>Quantum<Type>( Quantum<Type>) copy constructor</src> 00241 // <li> <src>Quantum<Type>( Type factor) value factor generated</src> 00242 // <li> <src>Quantum<Type>( Type factor, Unit unit) specified quantity</src> 00243 // <li> <src>Quantum<Type>( Type factor, Quantum<any> quant) specified 00244 // factor, 00245 // the unit from the quant</src> 00246 // </ul> 00247 // 00248 // The following operators and functions are defined on Quantums. They are, 00249 // of course, only available if the template Type supports them (e.g. / will 00250 // not be defined for a <src>Quantum<String></src> (whatever that may mean)). 00251 // <ul> 00252 // <li> <src>= assignment of identical <type></src> 00253 // <li> <src>* *= multiply two Quantums of same <type></src> 00254 // <li> <src>/ /= divide two Quantums of same <type></src> 00255 // <li> <src>+ += add two Quantums of same <type> and same unit dimensions</src> 00256 // (else exception) 00257 // <li> <src>- -= subtract two Quantums of same <type> and same unit dimensions</src> 00258 // (else exception) 00259 // <li> - negate Quantum 00260 // <li> <src>== != compare unit dimensions and value of same <type></src>. 00261 // They will be unequal if the unit dimensions do not 00262 // match or the values (converted to common 00263 // base units) are unequal 00264 // <li> <src>< > compare unit dimensions of same <type></src>. 00265 // Exception if no match, 00266 // else compare the values 00267 // <li> <src><= >=</src> ibid 00268 // <li> pow(Quantum, Int) raise to an (integer) power 00269 // <li> abs(Quant) take absolute value 00270 // <li> ceil, floor(Quant) 00271 // <li> sin, cos, tan(Quant) correct units used 00272 // <li> asin, acos, atan(Quant), atan2(Q,Q) correct units used 00273 // <li> near, nearAbs 00274 // </ul> 00275 // 00276 // 00277 // Quanta can be converted to other units by the following set of member 00278 // functions: 00279 // <ul> 00280 // <li> convert() will convert the quantum to canonical units. 00281 // E.g. given myval=Quantity(5.,"Jy"), 00282 // myval.convert() will make myval have the value 00283 // Quantity(5.e-26,"kg.s-2") 00284 // <li> get() will return the quantum converted to 00285 // canonical units 00286 // <li> convert(Unit unit) will convert the quantum to the 00287 // specified unit with any remaining dimensions 00288 // expressed in canonical units. E.g given 00289 // myval as above, myval.convert("W/cm") will 00290 // make myval Quantity(5.e-28,"W/cm.m-1.s") 00291 // <li> get(Unit unit) will return the quantum converted to unit 00292 // <li> <src>convert(Quantum<any> quant)</src> will convert the quantum 00293 // to the units of the specified quant with the 00294 // same conversion rules as the previous one 00295 // <li> <src>get(Quantum<any> quant) will return the converted quantum</src> 00296 // </ul> 00297 // Quanta can be checked for having the correct unit dimensions (e.g. before 00298 // addition or comparing) by the following two member functions, which will 00299 // return a Bool value or raise an exception: 00300 // <ul> 00301 // <li> <src>Bool isConform(Unit)</src> 00302 // <li> <src>Bool isConform(Quantum<any>)</src> 00303 // <li> <src>Bool check(UnitVal)</src> 00304 // <li> <src> void assure(UnitVal)</src> 00305 // </ul> 00306 // 00307 // The value and units of a quantum can be set or retrieved separately by the 00308 // following member functions: 00309 // <ul> 00310 // <li> <src>Type getValue()</src> return the value (as Type) of the quantum 00311 // <li> <src>Type getValue(Unit)</src> return the value in specified units 00312 // <li> <src>Type getBaseValue()</src> return the value in canonical units 00313 // <li> <src>String getUnit()</src> return the units of the quantum 00314 // <li> <src>void setValue(Type val)</src> replace the value of the quantum with val, 00315 // leaving the units the same 00316 // <li> <src>void scale(Type)</src> scale the value (leaving units same) by 00317 // multiplying with the specified value 00318 // <li> <src>void setUnit(Unit)</src> replace the units of the quantum, leaving 00319 // the value the same. 00320 // <li> <src>void setUnit(Quantum<any>)</src> ibid 00321 // </ul> 00322 // 00323 // The output operator ('<<') will produce the value of the quantum and its 00324 // units. Given <src>Quantity myval(5.,"mJy");</src>, 00325 // <src>cout << myval;</src> will produce: 00326 // "5.0 mJy"; while <src>cout << myval.get("yW/m2")</src> will produce: 00327 // ".00005 yW/m2.s" 00328 // 00329 // 00330 // <h3> QC class of constant quantities </h3> 00331 // In parallel with the 'C' class of undimensioned constants, the QC class 00332 // contains dimensioned constants. 00333 // On 960509 the following were defined: 00334 // <ul> 00335 // <li> <src>Quantum<Double> c; // vel of light</src> 00336 // <li> <src>Quantum<Double> G; // Gravitational constant</src> 00337 // <li> <src>Quantum<Double> h; // Planck</src> 00338 // <li> <src>Quantum<Double> HI; // Frequency HI line</src> 00339 // <li> <src>Quantum<Double> R; // Gas constant</src> 00340 // <li> <src>Quantum<Double> NA; // Avogadro</src> 00341 // <li> <src>Quantum<Double> e; // electron charge</src> 00342 // <li> <src>Quantum<Double> mp; // proton mass</src> 00343 // <li> <src>Quantum<Double> mp_me; // mp/me</src> 00344 // <li> <src>Quantum<Double> mu0; // permeability vacuum</src> 00345 // <li> <src>Quantum<Double> epsilon0; // permittivity vacuum</src> 00346 // <li> <src>Quantum<Double> k; // Boltzmann</src> 00347 // <li> <src>Quantum<Double> F; // Faraday</src> 00348 // <li> <src>Quantum<Double> me; // mass electron</src> 00349 // <li> <src>Quantum<Double> re; // radius electron</src> 00350 // <li> <src>Quantum<Double> a0; // Bohr's radius</src> 00351 // <li> <src>Quantum<Double> R0; // Solar radius</src> 00352 // <li> <src>Quantum<Double> k2; // IAU Gaussian grav. const **2</src> 00353 // </ul> 00354 // 00355 // <p> 00356 // <anchor name="MeasValue"><h3> Values for Measures </h3></anchor> 00357 // The MeasValue class derivatives are all named <em>MVmeasure</em>, e.g. 00358 // <em>MVFrequency</em>, and represent the internal representation of the 00359 // specific measure class. There main use is for the Measures module, 00360 // but they can be used alone, e.g. for the conversion to formatted times, 00361 // or the conversion of frequencies from say wavelength to frequency. 00362 // They all have at least the following constructors: 00363 // <srcblock> 00364 // MV() 00365 // MV(MV) 00366 // MV(Double) 00367 // MV(Vector<Double>) 00368 // MV(Quantity) 00369 // MV(Vector<Quantity>) 00370 // MV(Quantum<Vector<Double> >) 00371 // </srcblock> 00372 // But most have also constructors like: 00373 // <srcblock> 00374 // MV(Double, Double) 00375 // MV(Quantity, Quantity) 00376 // </srcblock> 00377 // The actual interpretation is class dependent: see the individual MV classes 00378 // like <linkto class=MVEpoch>MVEpoch</linkto>, 00379 // <linkto class=MVDirection>MVDirection</linkto>, 00380 // <linkto class=MVPosition>MVPosition</linkto>, 00381 // <linkto class=MVFrequency>MVFrequency</linkto>, 00382 // <linkto class=MVDouble>MVDouble</linkto>, 00383 // <linkto class=MVRadialVelocity>MVRadialVelocity</linkto>. 00384 // <linkto class=MVBaseline>MVBaseline</linkto>, 00385 // <linkto class=MVuvw>MVuvw</linkto>, 00386 // <linkto class=MVEarthMagnetic>MVEarthMagnetic</linkto>, 00387 // A few examples: 00388 // <srcblock> 00389 // MVEpoch(12345, 0.1e-20) will create one epoch (MJD12345.0), but preserving 00390 // the precision of all information 00391 // MVDirection(Quantity(20,"deg"), Quantity(-10,"'")) will create a direction 00392 // with an RA of 20 degree, and a DEC of -10 arcmin 00393 // MVFrequency(Quantity(5,"keV")) will create a frequency corresponding to 00394 // the specified energy. 00395 // </srcblock> 00396 // All MVs have the <src>+=, -=, ==, !=, << </src>operators, and <src>near()</src>, 00397 // <src>nearAbs()</src>, <src>print()</src> and <src>adjust()</src> 00398 // and <src>readjust()</src> (which in general 00399 // normalise to a value of 1 (e.g. MVDirection), or recalculates high 00400 // precision values (e.g. MVEpoch) functions.<br> 00401 // Information can be viewed with many <em>get</em> functions. In most cases 00402 // getValue() will return the internal value as either Double or 00403 // Vector<Double>; get() will return the same, or converted values (e.g. 00404 // a vector of length, angle, angle for MVPosition; while special 00405 // one like getAngle() or getAngle(unit), getTime() etc will return Quantums 00406 // (with optional conversion to specified units).<br> 00407 // In general the Measure classes can be used without worrying about the 00408 // MeasValues, since most Measure constructors have enough flexibility (and 00409 // their own get()'s) to be able to use them independently).<br> 00410 // Special cases are <linkto class=MVAngle>MVAngle</linkto> and 00411 // <linkto class=MVTime>MVTime</linkto>, which can do special formatting for 00412 // time and angles (in earlier documentation they were called HMS etc.). 00413 // <p> 00414 00415 // </synopsis> 00416 // 00417 // <motivation> 00418 // The Quanta model originated to handle physical quantities independent of their 00419 // units. 00420 // Units were introduced in the described way to be able to handle any 00421 // possible physical unit. 00422 // </motivation> 00423 // 00424 // <todo asof="1998/07/22"> 00425 // <li> inlining 00426 // <li> look at the problem of rad*rad (which is, in general, not sr) 00427 // </todo> 00428 // 00429 // <example> 00430 // <h3> Known units on 960509 </h3> 00431 // <srcblock> 00432 // // UnitMap::list() will produce the following list: 00433 //List all defined symbols 00434 // 00435 //Prefix table (20): 00436 // E (exa) 1e+18 00437 // G (giga) 1000000000 00438 // M (mega) 1000000 00439 // P (peta) 1e+15 00440 // T (tera) 1e+12 00441 // Y (yotta) 1e+24 00442 // Z (zetta) 1e+21 00443 // a (atto) 1e-18 00444 // c (centi) 0.01 00445 // d (deci) 0.1 00446 // da (deka) 10 00447 // f (femto) 1e-15 00448 // h (hecto) 100 00449 // k (kilo) 1000 00450 // m (milli) 0.001 00451 // n (nano) 1e-09 00452 // p (pico) 1e-12 00453 // u (micro) 1e-06 00454 // y (yocto) 1e-24 00455 // z (zepto) 1e-21 00456 //Defining unit table (10): 00457 // A (ampere) 1 A 00458 // K (kelvin) 1 K 00459 // _ (undimensioned) 1 _ 00460 // cd (candela) 1 cd 00461 // kg (kilogram) 1 kg 00462 // m (metre) 1 m 00463 // mol (mole) 1 mol 00464 // rad (radian) 1 rad 00465 // s (second) 1 s 00466 // sr (steradian) 1 sr 00467 //SI unit table (50): 00468 // $ (currency) 1 _ 00469 // % (percent) 0.01 00470 // %% (permille) 0.001 00471 // A (ampere) 1 A 00472 // AE (astronomical unit) 149597870659 m 00473 // AU (astronomical unit) 149597870659 m 00474 // Bq (becquerel) 1 s-1 00475 // C (coulomb) 1 s.A 00476 // F (farad) 1 m-2.kg-1.s4.A2 00477 // Gy (gray) 1 m2.s-2 00478 // H (henry) 1 m2.kg.s-2.A-2 00479 // Hz (hertz) 1 s-1 00480 // J (joule) 1 m2.kg.s-2 00481 // Jy (jansky) 1e-26 kg.s-2 00482 // K (kelvin) 1 K 00483 // L (litre) 0.001 m3 00484 // M0 (solar mass) 1.98891944407e+30 kg 00485 // N (newton) 1 m.kg.s-2 00486 // Ohm (ohm) 1 m2.kg.s-3.A-2 00487 // Pa (pascal) 1 m-1.kg.s-2 00488 // S (siemens) 1 m-2.kg-1.s3.A2 00489 // S0 (solar mass) 1.98891944407e+30 kg 00490 // Sv (sievert) 1 m2.s-2 00491 // T (tesla) 1 kg.s-2.A-1 00492 // UA (astronomical unit) 149597870659 m 00493 // V (volt) 1 m2.kg.s-3.A-1 00494 // W (watt) 1 m2.kg.s-3 00495 // Wb (weber) 1 m2.kg.s-2.A-1 00496 // _ (undimensioned) 1 _ 00497 // a (year) 31557600 s 00498 // arcmin (arcmin) 0.000290888208666 rad 00499 // arcsec (arcsec) 4.8481368111e-06 rad 00500 // as (arcsec) 4.8481368111e-06 rad 00501 // cd (candela) 1 cd 00502 // cy (century) 3155760000 s 00503 // d (day) 86400 s 00504 // deg (degree) 0.0174532925199 rad 00505 // g (gram) 0.001 kg 00506 // h (hour) 3600 s 00507 // l (litre) 0.001 m3 00508 // lm (lumen) 1 cd.sr 00509 // lx (lux) 1 m-2.cd.sr 00510 // m (metre) 1 m 00511 // min (minute) 60 s 00512 // mol (mole) 1 mol 00513 // pc (parsec) 3.08567758065e+16 m 00514 // rad (radian) 1 rad 00515 // s (second) 1 s 00516 // sr (steradian) 1 sr 00517 // t (tonne) 1000 kg 00518 //Customary unit table (74): 00519 // " (arcsec) 4.8481368111e-06 rad 00520 // "_2 (square arcsec) 2.35044305391e-11 sr 00521 // ' (arcmin) 0.000290888208666 rad 00522 // '' (arcsec) 4.8481368111e-06 rad 00523 // ''_2 (square arcsec) 2.35044305391e-11 sr 00524 // '_2 (square arcmin) 8.46159499408e-08 sr 00525 // : (hour) 3600 s 00526 // :: (minute) 60 s 00527 // ::: (second) 1 s 00528 // Ah (ampere hour) 3600 s.A 00529 // Angstrom (angstrom) 1e-10 m 00530 // Btu (British thermal unit (Int)) 1055.056 m2.kg.s-2 00531 // CM (metric carat) 0.0002 kg 00532 // Cal (large calorie (Int)) 4186.8 m2.kg.s-2 00533 // FU (flux unit) 1e-26 kg.s-2 00534 // G (gauss) 0.0001 kg.s-2.A-1 00535 // Gal (gal) 0.01 m.s-2 00536 // Gb (gilbert) 0.795774715459 A 00537 // Mx (maxwell) 1e-08 m2.kg.s-2.A-1 00538 // Oe (oersted) 79.5774715459 m-1.A 00539 // R (mile) 0.000258 kg-1.s.A 00540 // St (stokes) 0.0001 m2.s-1 00541 // Torr (torr) 133.322368421 m-1.kg.s-2 00542 // USfl_oz (fluid ounce (US)) 2.95735295625e-05 m3 00543 // USgal (gallon (US)) 0.003785411784 m3 00544 // WU (WSRT flux unit) 5e-29 kg.s-2 00545 // abA (abampere) 10 A 00546 // abC (abcoulomb) 10 s.A 00547 // abF (abfarad) 1000000000 m-2.kg-1.s4.A2 00548 // abH (abhenry) 1e-09 m2.kg.s-2.A-2 00549 // abOhm (abohm) 1e-09 m2.kg.s-3.A-2 00550 // abV (abvolt) 1e-08 m2.kg.s-3.A-1 00551 // ac (acre) 4046.8564224 m2 00552 // arcmin_2 (square arcmin) 8.46159499408e-08 sr 00553 // arcsec_2 (square arcsec) 2.35044305391e-11 sr 00554 // ata (technical atmosphere) 98066.5 m-1.kg.s-2 00555 // atm (standard atmosphere) 101325 m-1.kg.s-2 00556 // bar (bar) 100000 m-1.kg.s-2 00557 // beam (undefined beam area) 1 _ 00558 // cal (calorie (Int)) 4.1868 m2.kg.s-2 00559 // cwt (hundredweight) 50.80234544 kg 00560 // deg_2 (square degree) 0.000304617419787 sr 00561 // dyn (dyne) 1e-05 m.kg.s-2 00562 // eV (electron volt) 1.60217733e-19 m2.kg.s-2 00563 // erg (erg) 1e-07 m2.kg.s-2 00564 // fl_oz (fluid ounce (Imp)) 2.84130488996e-05 m3 00565 // ft (foot) 0.3048 m 00566 // fu (flux unit) 1e-26 kg.s-2 00567 // fur (furlong) 201.168 m 00568 // gal (gallon (Imp)) 0.00454608782394 m3 00569 // ha (hectare) 10000 m2 00570 // hp (horsepower) 745.7 m2.kg.s-3 00571 // in (inch) 0.0254 m 00572 // kn (knot (Imp)) 0.514773333333 m.s-1 00573 // lb (pound (avoirdupois)) 0.45359237 kg 00574 // ly (light year) 9.46073047e+15 m 00575 // mHg (metre of mercury) 133322.387415 m-1.kg.s-2 00576 // mile (mile) 1609.344 m 00577 // n_mile (nautical mile (Imp)) 1853.184 m 00578 // oz (ounce (avoirdupois)) 0.028349523125 kg 00579 // pixel (pixel) 1 _ 00580 // sb (stilb) 10000 m-2.cd 00581 // sq_arcmin (square arcmin) 8.46159499408e-08 sr 00582 // sq_arcsec (square arcsec) 2.35044305391e-11 sr 00583 // sq_deg (square degree) 0.000304617419787 sr 00584 // statA (statampere) 3.33564095198e-10 A 00585 // statC (statcoulomb) 3.33564095198e-10 s.A 00586 // statF (statfarad) 1.11188031733e-12 m-2.kg-1.s4.A2 00587 // statH (stathenry) 899377374000 m2.kg.s-2.A-2 00588 // statOhm (statohm) 899377374000 m2.kg.s-3.A-2 00589 // statV (statvolt) 299.792458 m2.kg.s-3.A-1 00590 // debye (electric dipole moment) 10-18 statC·cm 00591 // u (atomic mass unit) 1.661e-27 kg 00592 // yd (yard) 0.9144 m 00593 // yr (year) 31557600 s 00594 // </srcblock> 00595 // 00596 // </example> 00597 // </module> 00598 00599 //# Dummy class definition for extractor 00600 //# class Quanta {}; 00601 00602 00603 } //# NAMESPACE CASA - END 00604 00605 #endif 00606 00607 00608