Документ взят из кэша поисковой машины. Адрес оригинального документа : http://www.atnf.csiro.au/computing/software/casacore/casacore-1.2.0/doc/html/MeasMath_8h_source.html
Дата изменения: Unknown
Дата индексирования: Mon Feb 14 20:06:24 2011
Кодировка:

Поисковые слова: п п п п п п п п п п п п п п п п п п п п п п п п п п
casacore: measures/Measures/MeasMath.h Source File

MeasMath.h

Go to the documentation of this file.
00001 //# MeasMath.h: Measure conversion aid routines
00002 //# Copyright (C) 1998,2000,2002-2004,2007
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 //#
00027 //# $Id: MeasMath.h 20615 2009-06-09 02:16:01Z Malte.Marquarding $
00028 
00029 #ifndef MEASURES_MEASMATH_H
00030 #define MEASURES_MEASMATH_H
00031 
00032 //# Includes
00033 #include <casa/aips.h>
00034 #include <casa/Quanta/Euler.h>
00035 #include <casa/Quanta/RotMatrix.h>
00036 #include <casa/Quanta/MVPosition.h>
00037 #include <casa/Quanta/MVDirection.h>
00038 #include <measures/Measures/MeasFrame.h>
00039 
00040 namespace casa { //# NAMESPACE CASA - BEGIN
00041 
00042 //# Forward Declarations
00043 class Measure;
00044 class MRBase;
00045 class Precession;
00046 class Nutation;
00047 class SolarPos;
00048 class Aberration;
00049 
00050 //# Typedefs
00051 
00052 // <summary> Measure conversion aid routines </summary>
00053 
00054 // <use visibility=local>
00055 
00056 // <reviewed reviewer="UNKNOWN" date="before2004/08/25" tests="tMeasure" demos="">
00057 // </reviewed>
00058 
00059 // <prerequisite>
00060 //   <li> <linkto class=Measure>MeasConvert</linkto> class 
00061 //   <li> <linkto class=MConvertBase>overall conversion</linkto>  class
00062 // </prerequisite>
00063 //
00064 // <etymology>
00065 // Measure and Mathematics
00066 // </etymology>
00067 //
00068 // <synopsis>
00069 // The conversion of measures like MDirection, MPosition etc have many
00070 // conversion routines in common. This class combines all of these
00071 // conversions, including data caches for re-use.
00072 // 
00073 // The class is always created by the default constructor. For each operation
00074 // (like e.g. Precession application), it has three function:
00075 // <ul>
00076 //   <li> create(): create an instance of the data necessary to convert
00077 //   <li> apply(): apply the conversion (in the sense of from standard to
00078 //      perturbed (e.g. from J2000 to TOPO))
00079 //   <li> deapply(): in the reverse direction of apply
00080 // </ul>
00081 // </synopsis>
00082 //
00083 // <example>
00084 // See <linkto class=MCDirection>MCDirection</linkto> source for how to use
00085 // the class.
00086 // </example>
00087 //
00088 // <motivation> To re-use code for a specific measure conversion, and to ease
00089 // the caching administration for each individual conversion.
00090 // </motivation>
00091 //
00092 // <todo asof="1998/09/30">
00093 //      <li> Nothing I know of
00094 // </todo>
00095 
00096 class MeasMath { 
00097   
00098 public:
00099 
00100   //# Constructors
00101   // Default constructor
00102   MeasMath();
00103   
00104   //# Destructor
00105   ~MeasMath();
00106 
00107   //# Member functions
00108   // Initialise the frame to be used. The apply direction uses the
00109   // inref if present; the deapply the outref if present, otherwise the
00110   // other one.
00111   void initFrame(MRBase &outref, MRBase &inref);
00112 
00113   // Functions to create a particular conversion instance; to apply
00114   // or deapply the instance.
00115   // <group>
00116   // Precession for J2000 (IAU definition) and in coordinates
00117   //   <group>
00118   void createPrecession();
00119   void applyPrecession(MVPosition &in);
00120   void deapplyPrecession(MVPosition &in);
00121   //   </group>
00122   // Precession for B1950 and in coordinates
00123   //   <group>
00124   void createPrecessionB1950();
00125   void applyPrecessionB1950(MVPosition &in);
00126   void deapplyPrecessionB1950(MVPosition &in);
00127   //   </group>
00128   // Nutation for J2000 (IAU standard) and in coordinates
00129   //   <group>
00130   void createNutation();
00131   void applyNutation(MVPosition &in);
00132   void deapplyNutation(MVPosition &in);
00133   //   </group>
00134   // Nutation for B1950 and in coordinates
00135   //   <group>
00136   void createNutationB1950();
00137   void applyNutationB1950(MVPosition &in);
00138   void deapplyNutationB1950(MVPosition &in);
00139   //   </group>
00140   // Precession and Nutation for J2000 or B1950 and in coordinates
00141   //   <group>
00142   void createPrecNutat();
00143   void applyPrecNutat(MVPosition &in);
00144   void deapplyPrecNutat(MVPosition &in);
00145   void createPrecNutatB1950();
00146   void applyPrecNutatB1950(MVPosition &in, Bool doin=True);
00147   void deapplyPrecNutatB1950(MVPosition &in, Bool doin=True);
00148   //   </group>
00149   // Aberration for J2000 (IAU definition) and B1950 and in coordinates
00150   //   <group>
00151   void createAberration();
00152   void applyAberration(MVPosition &in, Bool doin=True);
00153   void deapplyAberration(MVPosition &in, Bool doin=True);
00154   void createAberrationB1950();
00155   void applyAberrationB1950(MVPosition &in, Bool doin=True);
00156   void deapplyAberrationB1950(MVPosition &in, Bool doin=True);
00157   //   </group>
00158   // Solar bending for J2000 (IAU definition) and in coordinates.
00159   // False if dependent on frame direction rather than input one.
00160   //   <group>
00161   void createSolarPos();
00162   void applySolarPos(MVPosition &in, Bool doin=True);
00163   void deapplySolarPos(MVPosition &in, Bool doin=True);
00164   //   </group>
00165   // Various conversions
00166   // <group>
00167   void applyHADECtoITRF(MVPosition &in);
00168   void deapplyHADECtoITRF(MVPosition &in);
00169   void applyHADECtoAZEL(MVPosition &in);
00170   void deapplyHADECtoAZEL(MVPosition &in);
00171   void applyHADECtoAZELGEO(MVPosition &in);
00172   void deapplyHADECtoAZELGEO(MVPosition &in); 
00173   void applyJ2000toB1950(MVPosition &in, Double epo, Bool doin);
00174   void deapplyJ2000toB1950(MVPosition &in, Double epo, Bool doin);
00175   void applyJ2000toB1950(MVPosition &in, Bool doin=True);
00176   void deapplyJ2000toB1950(MVPosition &in, Bool doin=True);
00177   void applyJ2000toB1950_VLA(MVPosition &in, Bool doin=True);
00178   void deapplyJ2000toB1950_VLA(MVPosition &in, Bool doin=True);
00179   void applyETerms(MVPosition &in, Bool doin=True, Double epo=2000.0);
00180   void deapplyETerms(MVPosition &in, Bool doin=True,