00001 /* 00002 * Copyright (C) 2005, 2006 Reinhard Prix 00003 * 00004 * This program is free software; you can redistribute it and/or modify 00005 * it under the terms of the GNU General Public License as published by 00006 * the Free Software Foundation; either version 2 of the License, or 00007 * (at your option) any later version. 00008 * 00009 * This program is distributed in the hope that it will be useful, 00010 * but WITHOUT ANY WARRANTY; without even the implied warranty of 00011 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00012 * GNU General Public License for more details. 00013 * 00014 * You should have received a copy of the GNU General Public License 00015 * along with with program; see the file COPYING. If not, write to the 00016 * Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, 00017 * MA 02111-1307 USA 00018 */ 00019 00020 /** \defgroup ExtrapolatePulsarSpins Extrapolate Pulsar Spins and Phase 00021 * \ingroup pulsarCommon 00022 * \author Reinhard Prix 00023 * \date $Date: 2008/04/08 09:42:33 $ 00024 * \brief Extrapolate the Pulsar spin-paramters 00025 * \f$\{f^{(k)}\}\equiv\{f, \stackrel{.}{f},\ddot{f},...\}\f$, and "spin-ranges" 00026 * \f$\{ f^{(k)}, \Delta f^{(k)} \}\f$ from one SSB epoch to another. 00027 * 00028 * The central function of this module is LALExtrapolatePulsarSpinRange(), which extrapolates 00029 * a complete "spin range" (defined as LALPulsarSpinRange) from one epoch to another. 00030 * A "spin-range" contains an epoch, and \em two vectors, \f$f^{(k)}\f$ and \f$\Delta f^{(k)}\f$ 00031 * (where "canonical" ordering refers to \f$\Delta f^{(k)} >= 0\f$ for all k. 00032 * 00033 * 00034 * The extrapolation is defined by the pulsar spindown-model: 00035 * \f[ f(\tau_1) = f(\tau_0) + {\stackrel{.}{f}(\tau_0) \over 1!} \,\Delta\tau 00036 * + {\ddot{f}(\tau_0) \over 2!} \,\Delta\tau^2 + ... 00037 * = \sum_{k=0}^s {f^{(k)}(\tau_0) \over k!}\, \Delta\tau^k\,, 00038 * \f] 00039 * where \f[\Delta\tau \equiv \tau_1 - \tau_0\f\,,\f] 00040 * and therefore generally 00041 * 00042 * \f[ 00043 * f^{(l)}(\tau_1) = \sum_{k=0}^{s - l} { f^{(k+l)}(\tau_0) \over k! }\, \Delta\tau^k\,. 00044 * \f] 00045 * 00046 * This expression is used to extrapolate a whole "spin-range", namely at each spindown-order \f$(l)\f$ 00047 * the extrapolated range is given by 00048 * \f[ 00049 * \min\left[ f^{(l)}(\tau_1) \right] = \sum_{k=0}^{s - l} {1\over k!} \min\left[ f^{(k+l)}(\tau_0) \, \Delta\tau^k \right]\,. 00050 * \f] 00051 * 00052 * \f[ 00053 * \max\left[ f^{(l)}(\tau_1) \right] = \sum_{k=0}^{s - l} {1\over k!} \max\left[ f^{(k+l)}(\tau_0) \, \Delta\tau^k \right]\,. 00054 * \f] 00055 * 00056 * This ensures that the range will be correctly extrapolated even if \f$\tau_1 < \tau_0\f$, i.e. \f$\Delta\tau < 0\f$. 00057 * 00058 */ 00059 00060 /** \file 00061 * \ingroup ExtrapolatePulsarSpins 00062 * \author Reinhard Prix 00063 * \date $Date: 2008/04/08 09:42:33 $ 00064 * \brief Contains prototype for XLALExtrapolatePulsarSpins(). 00065 */ 00066 00067 #ifndef _EXTRAPOLATEPULSARSPINS_H /* Double-include protection. */ 00068 #define _EXTRAPOLATEPULSARSPINS_H 00069 00070 #include <lal/PulsarDataTypes.h> 00071 #include <lal/AVFactories.h> 00072 00073 #ifdef __cplusplus /* C++ protection. */ 00074 extern "C" { 00075 #endif 00076 00077 NRCSID( EXTRAPOLATEPULSARSPINSH, "$Id: ExtrapolatePulsarSpins.h,v 1.11 2008/04/08 09:42:33 reinhard Exp $"); 00078 00079 /*---------- exported INCLUDES ----------*/ 00080 00081 /*---------- exported DEFINES ----------*/ 00082 00083 /*----- Error-codes -----*/ 00084 00085 #define EXTRAPOLATEPULSARSPINS_ENULL 1 00086 #define EXTRAPOLATEPULSARSPINS_ENONULL 2 00087 #define EXTRAPOLATEPULSARSPINS_EMEM 3 00088 #define EXTRAPOLATEPULSARSPINS_EINPUT 4 00089 #define EXTRAPOLATEPULSARSPINS_ELIST 5 00090 #define EXTRAPOLATEPULSARSPINS_EXLAL 6 00091 #define EXTRAPOLATEPULSARSPINS_ENUMSPINS 7 00092 00093 #define EXTRAPOLATEPULSARSPINS_MSGENULL "Arguments contained an unexpected null pointer" 00094 #define EXTRAPOLATEPULSARSPINS_MSGENONULL "Output pointer is not NULL" 00095 #define EXTRAPOLATEPULSARSPINS_MSGEMEM "Out of memory" 00096 #define EXTRAPOLATEPULSARSPINS_MSGEINPUT "Invald input parameter" 00097 #define EXTRAPOLATEPULSARSPINS_MSGELIST "Error occurred in list-handling ..." 00098 #define EXTRAPOLATEPULSARSPINS_MSGEXLAL "(X)LAL sub-routine failed" 00099 #define EXTRAPOLATEPULSARSPINS_MSGENUMSPINS "Inconsistent number of spins" 00100 00101 /*---------- exported TYPES ----------*/ 00102 00103 /*---------- exported Global variables ----------*/ 00104 00105 /*---------- exported prototypes [API] ----------*/ 00106 void LALExtrapolatePulsarSpinRange( LALStatus *, PulsarSpinRange *range1, LIGOTimeGPS epoch1, const PulsarSpinRange *range0 ); 00107 00108 void LALExtrapolatePulsarSpins (LALStatus *, PulsarSpins fkdot1, LIGOTimeGPS epoch1, const PulsarSpins fkdot0, LIGOTimeGPS epoch0 ); 00109 00110 void LALExtrapolatePulsarPhase (LALStatus *, REAL8 *phi1, PulsarSpins fkdot1, LIGOTimeGPS epoch1, REAL8 phi0, LIGOTimeGPS epoch0 ); 00111 00112 int XLALExtrapolatePulsarSpins ( PulsarSpins fkdotOut, const PulsarSpins fkdotIn, REAL8 DeltaTau ); 00113 00114 #ifdef __cplusplus 00115 } 00116 #endif /* C++ protection. */ 00117 00118 #endif /* Double-include protection. */
1.5.2