00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031 #ifndef _DETECTORSTATES_H
00032 #define _DETECTORSTATES_H
00033
00034
00035 #ifdef __cplusplus
00036 extern "C" {
00037 #endif
00038
00039 #include <lal/LALRCSID.h>
00040 NRCSID( DETECTORSTATESH, "$Id: DetectorStates.h,v 1.11 2008/06/06 08:28:41 whelan Exp $" );
00041
00042
00043 #include <lal/LALComputeAM.h>
00044 #include <lal/PulsarDataTypes.h>
00045 #include <lal/SeqFactories.h>
00046
00047
00048
00049
00050 #define DETECTORSTATES_ENULL 1
00051 #define DETECTORSTATES_ENONULL 2
00052 #define DETECTORSTATES_EINPUT 3
00053 #define DETECTORSTATES_EMEM 4
00054 #define DETECTORSTATES_EXLAL 5
00055 #define DETECTORSTATES_EIEEE 6
00056
00057 #define DETECTORSTATES_MSGENULL "Arguments contained an unexpected null pointer"
00058 #define DETECTORSTATES_MSGENONULL "Output pointer is non-NULL"
00059 #define DETECTORSTATES_MSGEINPUT "Invalid input"
00060 #define DETECTORSTATES_MSGEMEM "Out of memory. Bad."
00061 #define DETECTORSTATES_MSGEXLAL "XLAL function call failed"
00062 #define DETECTORSTATES_MSGEIEEE "Floating point failure"
00063
00064
00065
00066
00067
00068 typedef struct
00069 {
00070 REAL4 d11; REAL4 d12; REAL4 d13;
00071 REAL4 d22; REAL4 d23;
00072 REAL4 d33;
00073 } SymmTensor3;
00074
00075
00076
00077
00078
00079
00080 typedef struct
00081 {
00082 REAL4 n[3];
00083 SymmTensor3 basisT;
00084 REAL4 armlength_c;
00085 } DetectorArm;
00086
00087 typedef DetectorArm Detector3Arms[3];
00088
00089
00090
00091
00092
00093 typedef struct
00094 {
00095 LIGOTimeGPS tGPS;
00096 REAL8 rDetector[3];
00097 REAL8 vDetector[3];
00098 REAL8 LMST;
00099 EarthState earthState;
00100 Detector3Arms detArms;
00101 SymmTensor3 detT;
00102 } DetectorState;
00103
00104
00105
00106
00107
00108 typedef struct
00109 {
00110 UINT4 length;
00111 DetectorState *data;
00112 LALDetector detector;
00113 CoordinateSystem system;
00114 } DetectorStateSeries;
00115
00116
00117 typedef struct
00118 {
00119 UINT4 length;
00120 DetectorStateSeries **data;
00121 LIGOTimeGPS startTime;
00122 REAL8 Tspan;
00123 } MultiDetectorStateSeries;
00124
00125
00126
00127
00128 void
00129 LALGetDetectorStates (LALStatus *,
00130 DetectorStateSeries **DetectorStates,
00131 const LIGOTimeGPSVector *timestamps,
00132 const LALDetector *detector,
00133 const EphemerisData *edat,
00134 REAL8 tOffset);
00135
00136 void
00137 LALGetMultiDetectorStates( LALStatus *,
00138 MultiDetectorStateSeries **mdetStates,
00139 const MultiSFTVector *multiSFTs,
00140 const EphemerisData *edat );
00141
00142 void LALCreateDetectorStateSeries (LALStatus *, DetectorStateSeries **vect, UINT4 length );
00143
00144 int XLALAddSymmTensor3s ( SymmTensor3 *sum, const SymmTensor3 *aT, const SymmTensor3 *bT );
00145 int XLALSubtractSymmTensor3s ( SymmTensor3 *diff, const SymmTensor3 *aT, const SymmTensor3 *bT );
00146 int XLALScaleSymmTensor3 ( SymmTensor3 *mult, const SymmTensor3 *aT, REAL4 factor );
00147 int XLALTensorSquareVector3 ( SymmTensor3 *vxv, REAL4 v[3] );
00148 int XLALSymmetricTensorProduct3 ( SymmTensor3 *vxw, REAL4 v[3], REAL4 w[3] );
00149 REAL4 XLALContractSymmTensor3s ( const SymmTensor3 *T1, const SymmTensor3 *T2 );
00150
00151
00152
00153 void XLALDestroyDetectorStateSeries ( DetectorStateSeries *detStates );
00154 void LALDestroyDetectorStateSeries(LALStatus *, DetectorStateSeries **vect );
00155 void XLALDestroyMultiDetectorStateSeries ( MultiDetectorStateSeries *mdetStates );
00156
00157
00158
00159
00160 void LALGetMultiDetectorVelTimePos(LALStatus *status,
00161 REAL8VectorSequence **outVel,
00162 REAL8VectorSequence **outPos,
00163 LIGOTimeGPSVector **outTime,
00164 MultiDetectorStateSeries *in);
00165
00166 #ifdef __cplusplus
00167 }
00168 #endif
00169
00170
00171 #endif