Loading [MathJax]/extensions/TeX/AMSsymbols.js
LALPulsar 7.1.1.1-5e288d3
All Data Structures Namespaces Files Functions Variables Typedefs Enumerations Enumerator Macros Modules Pages
ExtrapolatePulsarSpins.c
Go to the documentation of this file.
1/*
2 * Copyright (C) 2014 Karl Wette
3 * Copyright (C) 2005, 2006, 2018 Reinhard Prix
4 *
5 * This program is free software; you can redistribute it and/or modify
6 * it under the terms of the GNU General Public License as published by
7 * the Free Software Foundation; either version 2 of the License, or
8 * (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful,
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
13 * GNU General Public License for more details.
14 *
15 * You should have received a copy of the GNU General Public License
16 * along with with program; see the file COPYING. If not, write to the
17 * Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
18 * MA 02110-1301 USA
19 */
20
21/* ========== REVIEW information ==================================================
22 * This file has been fully reviewed on 13 May, 2009
23 * Reviewers: Peter Shawhan, Teviet Creighton, Francesco Salemi, M.A. Papa
24 * Minutes of this review:
25 * https://www.lsc-group.phys.uwm.edu/twiki/pub/CW/HierarchicalSearchReview/meeting_20090513.txt
26 *
27 * If you want to modify any existing functions in this file, please submit
28 * your patch for review to https://bugs.ligo.org/redmine/projects/lalsuite-lalpulsar
29 * ================================================================================
30 */
31
32/*********************************************************************************/
33/**
34 * \file
35 * \ingroup ExtrapolatePulsarSpins
36 * \author Reinhard Prix
37 *
38 * \brief Defines functions to extrapolate the pulsar spin-paramters
39 * \f$ \{f, \dot{f},\ddot{f},...\} \f$ from one SSB epoch to another.
40 *
41 */
42
43/*---------- INCLUDES ---------- */
44#include <math.h>
45
46#include <lal/LALError.h>
47#include <lal/Date.h>
48#include <lal/SFTfileIO.h>
49#include <lal/SSBtimes.h>
50
52
53/*---------- local DEFINES ----------*/
54#define MYMAX(x,y) ( (x) > (y) ? (x) : (y) )
55#define MYMIN(x,y) ( (x) < (y) ? (x) : (y) )
56#define COPY_VECT(dst,src) do { (dst)[0] = (src)[0]; (dst)[1] = (src)[1]; (dst)[2] = (src)[2]; } while(0)
57#define SUB_VECT(dst,src) do { (dst)[0] -= (src)[0]; (dst)[1] -= (src)[1]; (dst)[2] -= (src)[2]; } while(0)
58#define MULT_VECT(v,lam) do{ (v)[0] *= (lam); (v)[1] *= (lam); (v)[2] *= (lam); } while(0)
59#define DOT_VECT(u,v) ((u)[0]*(v)[0] + (u)[1]*(v)[1] + (u)[2]*(v)[2])
60#define NORM_VECT(v) sqrt(DOT_VECT(v,v))
61
62/*---------- main functions ---------- */
63
64/// \addtogroup ExtrapolatePulsarSpins_h
65/// @{
66
67/**
68 * Initialise a \c PulsarSpinRange struct from two ::PulsarSpins structs
69 */
70int XLALInitPulsarSpinRangeFromSpins( PulsarSpinRange *range, /**< [out] output spin range */
71 const LIGOTimeGPS *refTime, /**< [in] reference time */
72 const PulsarSpins fkdot1, /**< [in] input spins */
73 const PulsarSpins fkdot2 /**< [in] input spins */
74 )
75{
76 XLAL_CHECK( range != NULL, XLAL_EFAULT );
77 XLAL_CHECK( refTime != NULL, XLAL_EFAULT );
79 range->refTime = *refTime;
80 for ( size_t k = 0; k < PULSAR_MAX_SPINS; ++k ) {
81 range->fkdot[k] = MYMIN( fkdot1[k], fkdot2[k] );
82 range->fkdotBand[k] = fabs( fkdot1[k] - fkdot2[k] );
83 }
84 return XLAL_SUCCESS;
85}
86
87/**
88 * General pulsar-spin extrapolation function: given a "spin-range" (ie spins + spin-bands) \c range0
89 * at time \f$ \tau_0 \f$ , propagate the whole spin-range to time \f$ \tau_1 \f$ .
90 *
91 * \note \c *range1 is allowed to point to the same spin-range as \c *range0: the input will be overwritten
92 * with the output.
93 *
94 * \note The output-range is in the 'canonical' order of \f$ [ f^{(k)}, f^{(k)} + \Delta f^{(k)}] \f$ ,
95 * where \f$ \Delta f^{(k)} \ge 0 \f$ .
96 *
97 */
98int
99XLALExtrapolatePulsarSpinRange( PulsarSpinRange *range1, /**< [out] output spin range */
100 const PulsarSpinRange *range0, /**< [in] input spin range */
101 const REAL8 dtau /**< [in] time difference \f$ \tau_1 - \tau_0 \f$ to extrapolate \c range0 to */
102 )
103{
104 UINT4 k, l;
105 PulsarSpinRange inRange;
106
107 XLAL_CHECK( range1 != NULL, XLAL_EFAULT );
108 XLAL_CHECK( range0 != NULL, XLAL_EFAULT );
109
110 /* ----- make a copy of input range, because we allow input == output range, so
111 * the input can get overwritten */
112 memmove( &inRange, range0, sizeof( inRange ) );
113
114 for ( l = 0; l < PULSAR_MAX_SPINS; l ++ ) {
115 REAL8 flmin = 0, flmax = 0;
116 REAL8 kfact = 1, dtau_powk = 1; /* values for k=0 */
117
118 for ( k = 0; k < PULSAR_MAX_SPINS - l; k ++ ) {
119 REAL8 fkltauk0 = inRange.fkdot[k + l] * dtau_powk;
120 REAL8 fkltauk1 = fkltauk0 + inRange.fkdotBand[k + l] * dtau_powk;
121
122 REAL8 fkltauk_min = MYMIN( fkltauk0, fkltauk1 );
123 REAL8 fkltauk_max = MYMAX( fkltauk0, fkltauk1 );
124
125 flmin += fkltauk_min / kfact;
126 flmax += fkltauk_max / kfact;
127
128 kfact *= ( k + 1 );
129 dtau_powk *= dtau;
130
131 } /* for k < PULSAR_MAX_SPINS */
132
133 range1->fkdot[l] = flmin;
134 range1->fkdotBand[l] = flmax - flmin;
135
136 } /* for l < PULSAR_MAX_SPINS */
137
138 /* set proper epoch for output */
139 range1->refTime = range0->refTime;
140 XLALGPSAdd( &range1->refTime, dtau );
141
142 return XLAL_SUCCESS;
143
144} /* XLALExtrapolatePulsarSpinRange() */
145
146
147/**
148 * Extrapolate the Pulsar spin-parameters \f$ \{f, \dot{f},\ddot{f},...\} \f$
149 * (\c fkdot0) from the initial reference-epoch \f$ \tau_0 \f$
150 * to the new reference-epoch \f$ \tau_1 \f$ .
151 *
152 * This is equivalent to XLALExtrapolatePulsarSpins(), but uses the fixed-size array-type
153 * ::PulsarSpins instead, which is easier to handle and avoids any dynamic-memory hassles.
154 *
155 * \note This can be called with <tt>fkdot1 == fkdot0</tt>, in which case the input will
156 * be correctly replaced by the output.
157 */
158int
159XLALExtrapolatePulsarSpins( PulsarSpins fkdot1, /**< [out] output spin-parameter array */
160 const PulsarSpins fkdot0, /**< [in] input spin-parameter array */
161 REAL8 dtau /**< [in] time difference \f$ \tau_1 - \tau_0 \f$ to extrapolate \c fkdot0 to */
162 )
163{
164 UINT4 numSpins = sizeof( PulsarSpins ) / sizeof( fkdot0[0] ); /* fixed size array */
165 UINT4 k, l;
166 REAL8 kfact, dtauk;
167 PulsarSpins inSpins;
168
169 /* if dtau is zero, just copy fkdot0 to fkdot1 */
170 if ( dtau == 0.0 ) {
171 memmove( fkdot1, fkdot0, sizeof( PulsarSpins ) );
172 return XLAL_SUCCESS;
173 }
174
175 /* keep a local copy of input to allow the input- and output- pointers to be identical */
176 memcpy( inSpins, fkdot0, sizeof( PulsarSpins ) );
177
178 for ( l = 0; l < numSpins; l ++ ) {
179 fkdot1[l] = 0;
180 }
181
182 kfact = 1;
183 dtauk = 1; /* values of k! and (dTau)^k at k=0 */
184 for ( k = 0; k < numSpins; k ++ ) {
185 REAL8 kcoef = dtauk / kfact;
186 for ( l = 0; l < numSpins - k ; l ++ ) {
187 fkdot1[l] += inSpins[ k + l ] * kcoef;
188 }
189
190 kfact *= ( k + 1.0 );
191 dtauk *= dtau;
192
193 } /* for k < numSpins */
194
195 return XLAL_SUCCESS;
196
197} /* XLALExtrapolatePulsarSpins() */
198
199
200/**
201 * Extrapolate phase \f$ \phi_0 \f$ from \f$ \tau_0 \f$ to \f$ \tau_1 \f$ , given the spins \c fkdot1 at \f$ \tau_1 \f$ .
202 * Returns \f$ \phi_1 \f$ in the range \f$ [0, 2\pi] \f$ .
203 */
204int
205XLALExtrapolatePulsarPhase( REAL8 *phi1, /**< [out] output phase at \f$ \tau_1 \f$ */
206 const PulsarSpins fkdot1, /**< [in] spin-params at reference \f$ \tau_1 \f$ */
207 const REAL8 phi0, /**< [in] input phase at \f$ \tau_0 \f$ */
208 const REAL8 dtau /**< [in] time difference \f$ \tau_1 - \tau_0 \f$ to extrapolate \c phi0 to */
209 )
210{
211 UINT4 numSpins = PULSAR_MAX_SPINS;
212 UINT4 k;
213 UINT4 kFact;
214 REAL8 dtauk;
215 REAL8 frac_cycles;
216 REAL8 dummy, phi;
217
218 XLAL_CHECK( fkdot1 != NULL, XLAL_EFAULT );
219 XLAL_CHECK( phi1 != NULL, XLAL_EFAULT );
220
221 kFact = 1;
222 dtauk = 1.0;
223 frac_cycles = 0;
224
225 for ( k = 0; k < numSpins; k++ ) {
226 kFact *= ( k + 1 );
227 dtauk *= -dtau;
228 frac_cycles += modf( fkdot1[k] * dtauk / kFact, &dummy );
229 }
230
231 phi = fmod( phi0 - LAL_TWOPI * frac_cycles, LAL_TWOPI );
232 if ( phi < 0 ) {
233 phi += LAL_TWOPI;
234 }
235
236 ( *phi1 ) = phi;
237
238 return XLAL_SUCCESS;
239
240} /* XLALExtrapolatePulsarPhase() */
241
242
243/**
244 * Determines a frequency band which covers the frequency evolution of a band of CW signals between two GPS times.
245 * The calculation accounts for the spin evolution of the signals, and the maximum possible Dopper modulation
246 * due to detector motion, and (for binary signals) binary orbital motion.
247 */
248int
249XLALCWSignalCoveringBand( REAL8 *minCoverFreq, /**< [out] Minimum frequency of the covering band */
250 REAL8 *maxCoverFreq, /**< [out] Maximum frequency of the covering band */
251 const LIGOTimeGPS *time1, /**< [in] One end of the GPS time range */
252 const LIGOTimeGPS *time2, /**< [in] The other end of the GPS time range */
253 const PulsarSpinRange *spinRange, /**< [in] Frequency and spindown range of the CW signals */
254 const REAL8 binaryMaxAsini, /**< [in] Maximum projected semi-major axis a*sini/c (= 0 for isolated sources) */
255 const REAL8 binaryMinPeriod, /**< [in] Minimum orbital period (s); must be 0 for isolated signals */
256 const REAL8 binaryMaxEcc /**< [in] Maximal binary eccentricity: must be 0 for isolated signals */
257 )
258{
259 // Check input
260 XLAL_CHECK( minCoverFreq != NULL, XLAL_EFAULT );
261 XLAL_CHECK( maxCoverFreq != NULL, XLAL_EFAULT );
262 XLAL_CHECK( time1 != NULL, XLAL_EFAULT );
263 XLAL_CHECK( time2 != NULL, XLAL_EFAULT );
264 XLAL_CHECK( spinRange != NULL, XLAL_EFAULT );
265 XLAL_CHECK( binaryMaxAsini >= 0, XLAL_EINVAL );
266
267 XLAL_CHECK( ( binaryMaxAsini > 0 ) || ( ( binaryMinPeriod == 0 ) && ( binaryMaxEcc == 0 ) ), XLAL_EINVAL ); // if isolated: required P=0 and e=0
268 XLAL_CHECK( ( binaryMaxAsini == 0 ) || ( ( binaryMinPeriod > 0 ) && ( binaryMaxEcc >= 0 ) && ( binaryMaxEcc < 1 ) ), XLAL_EINVAL ); // if binary: P>0, 0<=e<1
269
270 // Track instantaneous SRC-frame frequency through the observing interval in steps of 'dT' and record maximal extents in frequency
271 // This is safer than just extrapolating to the beginning and end of the observing interval, in case
272 // the frequency evolution has a local minimum or maximum (not physically probable, but still possible in test cases)
273 REAL8 t1 = XLALGPSGetREAL8( time1 );
274 REAL8 t2 = XLALGPSGetREAL8( time2 );
275 REAL8 tStart = MYMIN( t1, t2 );
276 REAL8 tEnd = MYMAX( t1, t2 );
277 REAL8 Tspan = tEnd - tStart; // >=0
278 REAL8 dT = LAL_DAYSID_SI; // steps of ~1day (should be safely short enough)
279 UINT4 numSteps = ( UINT4 )ceil( ( Tspan + 1e-9 ) / dT ) + 1; // minimum of 2 steps: [beginning, end] // add 1ns for special case Tspan=0
280 dT = Tspan / ( numSteps - 1 ); // re-adjust step-size so we exactly end at the end-time at i=(numSteps-1)
281 REAL8 refTime = XLALGPSGetREAL8( &spinRange->refTime );
282 REAL8 minFreq = LAL_REAL8_MAX;
283 REAL8 maxFreq = 0;
284 for ( UINT4 i = 0; i < numSteps; i ++ ) {
285 REAL8 t_i = tStart + i * dT;
286 REAL8 DeltaT_i = t_i - refTime;
287 PulsarSpinRange spin_i;
288 XLAL_CHECK( XLALExtrapolatePulsarSpinRange( &spin_i, spinRange, DeltaT_i ) == XLAL_SUCCESS, XLAL_EFUNC );
289 // keep track of the minimum and maximum frequencies covered
290 minFreq = MYMIN( minFreq, spin_i.fkdot[0] );
291 maxFreq = MYMAX( maxFreq, spin_i.fkdot[0] + spin_i.fkdotBand[0] );
292 } // for i < numSteps
293
294 // Extra frequency range needed due to detector motion, per unit frequency
295 // * Maximum value of the time derivative of the diurnal and (Ptolemaic) orbital phase, plus 5% for luck
296 REAL8 extraPerFreq = 1.05 * LAL_TWOPI / LAL_C_SI * ( ( LAL_AU_SI / LAL_YRSID_SI ) + ( LAL_REARTH_SI / LAL_DAYSID_SI ) );
297
298 // Extra frequency range needed due to binary orbital motion, per unit frequency
299 // Upper bound on maximum value, derived from time derivative of binary-CW phase,
300 // see https://bugs.ligo.org/redmine/issues/1567
301 if ( binaryMaxAsini > 0 ) {
302 REAL8 maxOmega = LAL_TWOPI / binaryMinPeriod;
303 extraPerFreq += maxOmega * binaryMaxAsini / ( 1.0 - binaryMaxEcc );
304 }
305
306 // Expand frequency range
307 ( *minCoverFreq ) = minFreq * ( 1.0 - extraPerFreq );
308 ( *maxCoverFreq ) = maxFreq * ( 1.0 + extraPerFreq );
309
310 return XLAL_SUCCESS;
311
312} /* XLALCWSignalCoveringBand() */
313
314
315/**
316 * Determines the frequency band occupied by the frequency evolution of a given CW signal between two GPS times.
317 * The calculation accounts for the spin evolution of the signals, and the actual Dopper modulation
318 * due to detector motion, and (for binary signals) binary orbital motion.
319 */
320int
321XLALCWSignalBand( REAL8 *minFreq, /**< [out] Minimum frequency of the covering band */
322 REAL8 *maxFreq, /**< [out] Maximum frequency of the covering band */
323 const DetectorStateSeries *detStates, /**< [in] detector state series, cf XLALGetDetectorStates() */
324 const PulsarDopplerParams *doppler /**< [in] Signal phase-evolution parameters */
325 )
326{
327 XLAL_CHECK( minFreq != NULL && maxFreq != NULL, XLAL_EINVAL );
328 XLAL_CHECK( detStates != NULL, XLAL_EINVAL );
329 XLAL_CHECK( doppler != NULL, XLAL_EINVAL );
330
331 // get actual doppler-shifts as a function of time over the observation time
332 SkyPosition skypos = { .longitude = doppler->Alpha, .latitude = doppler->Delta, .system = COORDINATESYSTEM_EQUATORIAL };
333 SSBtimes *ssb;
334 XLAL_CHECK( ( ssb = XLALGetSSBtimes( detStates, skypos, doppler->refTime, SSBPREC_NEWTONIAN ) ) != NULL, XLAL_EFUNC );
335 if ( doppler->asini > 0 ) {
336 XLAL_CHECK( XLALAddBinaryTimes( &ssb, ssb, doppler ) == XLAL_SUCCESS, XLAL_EFUNC );
337 }
338
339 UINT4 Nsteps = detStates->length;
340 REAL8 minFreq0 = LAL_REAL8_MAX;
341 REAL8 maxFreq0 = 0;
342 for ( UINT4 i = 0; i < Nsteps; i ++ ) {
343 REAL8 dtau_i = XLALGPSDiff( &( detStates->data[i].tGPS ), &( doppler->refTime ) );
344 PulsarSpins fkdot_i;
345 XLAL_CHECK( XLALExtrapolatePulsarSpins( fkdot_i, doppler->fkdot, dtau_i ) == XLAL_SUCCESS, XLAL_EFUNC );
346 REAL8 freq_i = fkdot_i[0];
347 // apply doppler shifts from detector motion
348 freq_i *= ( ssb->Tdot->data[i] );
349
350 minFreq0 = fmin( minFreq0, freq_i );
351 maxFreq0 = fmax( maxFreq0, freq_i );
352 } // for i < Nsteps
353
354 XLALDestroySSBtimes( ssb );
355
356 ( *minFreq ) = minFreq0;
357 ( *maxFreq ) = maxFreq0;
358
359 return XLAL_SUCCESS;
360
361} // XLALCWSignalBand()
362
363
364/**
365 * (Optional) Helper function for using XLALCWSignalBand():
366 * compute DetectorStateSeries for given time-span and detector,
367 * and optionally also the sky-position with maximal Doppler band-width.
368 *
369 * The calculation accounts for the spin evolution of the signals, and the actual Dopper modulation
370 * due to detector motion, and (for binary signals) binary orbital motion.
371 */
373XLALPrepareCWSignalBand( SkyPosition *skypos_maxdoppler, /**< [out] [optional] sky-position of maximal Doppler band-width over the sky */
374 const LIGOTimeGPS tStart, /**< [in] start GPS time of observing interval */
375 const REAL8 Tspan, /**< [in] total span of observing interval in seconds */
376 const REAL8 dT, /**< [in] step-size (in seconds) to use to sample output detector-state series */
377 const LALDetector *detector, /**< [in] detector, cf XLALGetSiteInfo() */
378 const EphemerisData *edat /**< [in] ephemeris data, cf XLALInitBarycenter() */
379 )
380{
382 XLAL_CHECK_NULL( edat != NULL, XLAL_EINVAL );
383
384 // create a 'grid' of timestamps over the observing interval
386 XLAL_CHECK_NULL( ( ts = XLALMakeTimestamps( tStart, Tspan, dT, 0 ) ) != NULL, XLAL_EFUNC );
387
388 // get corresponding 'detector states'
389 DetectorStateSeries *detStates;
390 XLAL_CHECK_NULL( ( detStates = XLALGetDetectorStates( ts, detector, edat, 0 ) ) != NULL, XLAL_EFUNC );
391 UINT4 Nsteps = detStates->length;
392
394
395 // if output 'skypos_maxdoppler' requested
396 if ( skypos_maxdoppler ) {
397 // compute dV = v0 - v1, with maximal norm over observation time
398 REAL8 XLAL_INIT_DECL( dV, [3] );
399 REAL8 XLAL_INIT_DECL( v1, [3] );
400 COPY_VECT( dV, detStates->data[0].vDetector );
401 // heuristic: if Tspan>6months, we use dV = v0 - (-v0) = 2*v0 ~ v0: we only need the direction!
402 if ( Tspan < 0.5 * LAL_YRSID_SI ) {
403 COPY_VECT( v1, detStates->data[Nsteps - 1].vDetector );
404 SUB_VECT( dV, v1 );
405 }
406 // normalize
407 REAL8 norm = NORM_VECT( dV );
408 MULT_VECT( dV, ( 1.0 / norm ) );
409 // convert back into equatorial coordinates
410 REAL8 longitude = atan2( dV[1], dV[0] ); // range = [-pi, pi]
411 if ( longitude < 0 ) {
412 longitude += LAL_TWOPI;
413 }
414 REAL8 latitude = asin( dV[2] ); // range is [-pi/2, pi/2]
415 ( *skypos_maxdoppler ).longitude = longitude;
416 ( *skypos_maxdoppler ).latitude = latitude;
417 ( *skypos_maxdoppler ).system = COORDINATESYSTEM_EQUATORIAL;
418
419 } // if skypos_maxdopppler
420
421 return detStates;
422
423} // XLALPrepareCWSignalBand()
424
425/// @}
#define MYMIN(x, y)
#define COPY_VECT(dst, src)
#define SUB_VECT(dst, src)
#define NORM_VECT(v)
#define MYMAX(x, y)
#define MULT_VECT(v, lam)
int k
#define tEnd
INT4 dummy
Definition: SinCosLUT.i:123
int l
double e
DetectorStateSeries * XLALGetDetectorStates(const LIGOTimeGPSVector *timestamps, const LALDetector *detector, const EphemerisData *edat, REAL8 tOffset)
Get the 'detector state' (ie detector-tensor, position, velocity, etc) for the given vector of timest...
int XLALExtrapolatePulsarPhase(REAL8 *phi1, const PulsarSpins fkdot1, const REAL8 phi0, const REAL8 dtau)
Extrapolate phase from to , given the spins fkdot1 at .
DetectorStateSeries * XLALPrepareCWSignalBand(SkyPosition *skypos_maxdoppler, const LIGOTimeGPS tStart, const REAL8 Tspan, const REAL8 dT, const LALDetector *detector, const EphemerisData *edat)
(Optional) Helper function for using XLALCWSignalBand(): compute DetectorStateSeries for given time-s...
int XLALExtrapolatePulsarSpinRange(PulsarSpinRange *range1, const PulsarSpinRange *range0, const REAL8 dtau)
General pulsar-spin extrapolation function: given a "spin-range" (ie spins + spin-bands) range0 at ti...
int XLALExtrapolatePulsarSpins(PulsarSpins fkdot1, const PulsarSpins fkdot0, REAL8 dtau)
Extrapolate the Pulsar spin-parameters (fkdot0) from the initial reference-epoch to the new referen...
int XLALInitPulsarSpinRangeFromSpins(PulsarSpinRange *range, const LIGOTimeGPS *refTime, const PulsarSpins fkdot1, const PulsarSpins fkdot2)
Initialise a PulsarSpinRange struct from two PulsarSpins structs.
int XLALCWSignalBand(REAL8 *minFreq, REAL8 *maxFreq, const DetectorStateSeries *detStates, const PulsarDopplerParams *doppler)
Determines the frequency band occupied by the frequency evolution of a given CW signal between two GP...
int XLALCWSignalCoveringBand(REAL8 *minCoverFreq, REAL8 *maxCoverFreq, const LIGOTimeGPS *time1, const LIGOTimeGPS *time2, const PulsarSpinRange *spinRange, const REAL8 binaryMaxAsini, const REAL8 binaryMinPeriod, const REAL8 binaryMaxEcc)
Determines a frequency band which covers the frequency evolution of a band of CW signals between two ...
#define LAL_DAYSID_SI
#define LAL_YRSID_SI
#define LAL_TWOPI
#define LAL_REAL8_MAX
#define XLAL_INIT_MEM(x)
double REAL8
#define XLAL_INIT_DECL(var,...)
uint32_t UINT4
REAL8 PulsarSpins[PULSAR_MAX_SPINS]
Typedef for fixed-size array holding GW frequency and derivatives fk = d^k Freq/dt^k|(tau_ref)
#define PULSAR_MAX_SPINS
maximal number of spin-parameters (Freq + spindowns) we can handle
LIGOTimeGPSVector * XLALMakeTimestamps(LIGOTimeGPS tStart, REAL8 Tspan, REAL8 Tsft, REAL8 Toverlap)
Given a start-time, Tspan, Tsft and Toverlap, returns a list of timestamps covering this time-stretch...
void XLALDestroyTimestampVector(LIGOTimeGPSVector *vect)
De-allocate a LIGOTimeGPSVector.
Definition: SFTtimestamps.c:69
void XLALDestroySSBtimes(SSBtimes *tSSB)
Destroy a SSBtimes structure.
Definition: SSBtimes.c:822
SSBtimes * XLALGetSSBtimes(const DetectorStateSeries *DetectorStates, SkyPosition pos, LIGOTimeGPS refTime, SSBprecision precision)
For a given DetectorStateSeries, calculate the time-differences , and their derivatives .
Definition: SSBtimes.c:518
int XLALAddBinaryTimes(SSBtimes **tSSBOut, const SSBtimes *tSSBIn, const PulsarDopplerParams *Doppler)
Compute extra time-delays for a CW source in a (Keplerian) binary orbital system.
Definition: SSBtimes.c:259
@ SSBPREC_NEWTONIAN
simple Newtonian:
Definition: SSBtimes.h:46
COORDINATESYSTEM_EQUATORIAL
#define XLAL_CHECK(assertion,...)
#define XLAL_CHECK_NULL(assertion,...)
XLAL_SUCCESS
XLAL_EFAULT
XLAL_EFUNC
XLAL_EINVAL
LIGOTimeGPS * XLALGPSAdd(LIGOTimeGPS *epoch, REAL8 dt)
REAL8 XLALGPSGetREAL8(const LIGOTimeGPS *epoch)
REAL8 XLALGPSDiff(const LIGOTimeGPS *t1, const LIGOTimeGPS *t0)
phi1
ts
REAL8 vDetector[3]
Cart.
LIGOTimeGPS tGPS
GPS timestamps corresponding to this entry.
Timeseries of DetectorState's, representing the detector-info at different timestamps.
DetectorState * data
array of DetectorState entries
UINT4 length
total number of entries
This structure contains all information about the center-of-mass positions of the Earth and Sun,...
A vector of 'timestamps' of type LIGOTimeGPS.
Definition: SFTfileIO.h:188
Type containing the 'Doppler-parameters' affecting the time-evolution of the phase.
PulsarSpins fkdot
Intrinsic spins: [Freq, f1dot, f2dot, ... ] where fkdot = d^kFreq/dt^k.
REAL8 Delta
Sky position: DEC (latitude) in equatorial coords and radians.
LIGOTimeGPS refTime
Reference time of pulsar parameters (in SSB!)
REAL8 Alpha
Sky position: RA (longitude) in equatorial coords and radians.
REAL8 asini
Binary: projected, normalized orbital semi-major axis (s).
Contains a "spin-range", ie spins and corresponding bands at a given (SSB) reference GPS-time .
PulsarSpins fkdot
Vector of spin-values .
LIGOTimeGPS refTime
SSB reference GPS-time at which spin-range is defined.
PulsarSpins fkdotBand
Vector of spin-bands , MUST be same length as fkdot.
REAL8 * data
Simple container for two REAL8-vectors, namely the SSB-timings DeltaT_alpha and Tdot_alpha,...
Definition: SSBtimes.h:60
REAL8Vector * Tdot
dT/dt : time-derivative of SSB-time wrt local time for SFT-alpha
Definition: SSBtimes.h:63
REAL8 longitude