28#include <gsl/gsl_math.h>
30#include <lal/AVFactories.h>
31#include <lal/TimeSeries.h>
32#include <lal/SeqFactories.h>
33#include <lal/RealFFT.h>
34#include <lal/SFTfileIO.h>
35#include <lal/Window.h>
36#include <lal/Random.h>
38#include <lal/GeneratePulsarSignal.h>
75 sourceParams.aPlus =
params->pulsar.aPlus;
76 sourceParams.aCross =
params->pulsar.aCross;
77 sourceParams.phi0 =
params->pulsar.phi0;
78 sourceParams.f0 =
params->pulsar.f0;
80 sourceParams.position =
params->pulsar.position;
85 if (
params->orbit.asini > 0 ) {
92 sourceParams.orbitEpoch =
params->orbit.tp;
93 sourceParams.omega =
params->orbit.argp;
95 sourceParams.rPeriNorm =
params->orbit.asini * ( 1.0 -
params->orbit.ecc );
96 sourceParams.oneMinusEcc = 1.0 -
params->orbit.ecc;
97 sourceParams.angularSpeed = (
LAL_TWOPI /
params->orbit.period ) * sqrt( ( 1.0 +
params->orbit.ecc ) / pow( ( 1.0 -
params->orbit.ecc ), 3.0 ) );
99 sourceParams.rPeriNorm = 0.0;
102 if (
params->pulsar.refTime.gpsSeconds != 0 ) {
103 sourceParams.spinEpoch =
params->pulsar.refTime;
108 sourceParams.spinEpoch = tmpTime;
111 if (
params->sourceDeltaT == 0 ) {
118 if (
params->orbit.asini > 0 ) {
119 sourceParams.deltaT = 5;
121 sourceParams.deltaT = 60;
124 sourceParams.deltaT =
params->sourceDeltaT;
132 t0.gpsSeconds -= (
UINT4 )sourceParams.deltaT;
142 SSBduration += 2.0 * sourceParams.deltaT;
144 sourceParams.epoch =
t0;
145 sourceParams.length = (
UINT4 ) ceil( SSBduration / sourceParams.deltaT );
148 if (
params->pulsar.spindown ) {
149 UINT4 numSpindowns =
params->pulsar.spindown->length;
154 for (
UINT4 i = 0;
i < numSpindowns;
i++ ) {
155 sourceParams.f->data[
i] =
params->pulsar.spindown->data[
i] / ( kFact *
params->pulsar.f0 );
166 if ( sourceParams.f ) {
171 XLAL_CHECK_NULL( sourceParams.dfdt <= 2.0,
XLAL_ETOL,
"GenerateSpinOrbitCW() returned df*dt = %f > 2.0\n", sourceParams.dfdt );
202 sourceSignal.dtDelayBy2 =
params->dtDelayBy2;
203 sourceSignal.dtPolBy2 =
params->dtPolBy2;
264 if (
params->noiseSFTs ) {
271 UINT4 numTimesteps = lround( REALnumTimesteps );
273 "Inconsistent sampling-step (dt=%g) and Tsft=%g: must be integer multiple Tsft/dt = %g >= %g\n",
293 if (
params->timestamps == NULL ) {
299 localTimestamps->
length --;
311 if (
params->noiseSFTs ) {
319 params->window->data->length, numTimesteps );
329 UINT4 totalIndex = 0;
343 INT4 relIndexShift = lround( delay / signalvec->
deltaT );
344 totalIndex += relIndexShift;
347 timeStretch.
length = numTimesteps;
349 memcpy( timeStretchCopy->
data, timeStretch.
data, numTimesteps *
sizeof( *timeStretch.
data ) );
356 strcpy( thisSFT->
name, signalvec->
name );
358 thisSFT->
epoch = tmpTime;
359 thisSFT->
f0 = signalvec->
f0;
368 XLALPrintError(
"Warning: timestamp %d had to be 'nudged' by %e s to fit with time-series\n", iSFT, diff );
371 fabs( diff ), signalvec->
deltaT );
378 const float inv_sigma_win = 1.0 / sqrt(
params->window->sumofsquares /
params->window->data->length );
379 for (
UINT4 idatabin = 0; idatabin < timeStretchCopy->
length; idatabin++ ) {
380 timeStretchCopy->
data[idatabin] *= inv_sigma_win *
params->window->data->data[idatabin];
403 if (
params->noiseSFTs ) {
405 UINT4 index0n = round( ( thisSFT->
f0 - thisNoiseSFT->
f0 ) / thisSFT->
deltaF );
424 if ( localTimestamps != NULL ) {
443 if ( outputSFTs == NULL ) {
446 if ( ( *outputSFTs ) != NULL ) {
456 ( *outputSFTs ) =
out;
495 halfTsft = 0.5 *
params->pSFTParams->Tsft;
498 baryinput.
site = *(
params->pSigParams->site );
509 baryinput.
dInv = 0.e0;
511 if (
params->pSigParams->orbit.asini > 0 ) {
512 XLALPrintError(
"Sorry, binary orbits (asini>0) not supported.\n" );
517 csParams->
tGPS =
params->pSFTParams->timestamps->data;
521 csParams->
edat =
params->pSigParams->ephemerides;
523 if (
params->pSigParams->pulsar.spindown ) {
528 csParams->
skyPos[0] =
params->pSigParams->pulsar.position.longitude;
529 csParams->
skyPos[1] =
params->pSigParams->pulsar.position.latitude;
530 csParams->
earth = &earth;
531 csParams->
emit = &emit;
551 midTS =
params->pSFTParams->timestamps->data[
i];
583 REAL4 fPlus, fCross, psi, phi0Signal;
585 REAL4 halfAPlus, halfACross, cos2Psi, sin2Psi;
586 REAL8 realA, imagA, xSum, ySum, xTmp, yTmp;
587 REAL8 realQcc, imagQcc, realPcc, imagPcc, realTmp, imagTmp;
590 REAL8 sin2PiKappa, oneMinusCos2PiKappa;
591 SFTtype *thisSFT, *thisNoiseSFT;
593 INT4 j,
k,
k0,
s, spOrder, tmpInt, index0n;
596 REAL8 smallX = 0.000000001;
600 REAL8 varTmp, dTmp, dTmp2, sinTmp, cosTmp;
613 if (
params->pSFTParams->timestamps &&
params->pSFTParams->noiseSFTs ) {
619 if (
params->resTrig > 0 ) {
627 tSFT =
params->pSFTParams->Tsft;
629 f0 =
params->pSigParams->fHeterodyne;
630 k0 = lround(
f0 * tSFT );
631 band = 0.5 *
params->pSigParams->samplingRate;
632 SFTlen = lround( band * tSFT );
635 if ( (
params->Dterms < 1 ) || (
params->Dterms > SFTlen ) ) {
640 if ( *outputSFTs == NULL ) {
644 sftvect = *outputSFTs;
649 if (
params->pSFTParams->noiseSFTs ) {
658 halfAPlus = 0.5 *
N *
params->pSigParams->pulsar.aPlus;
659 halfACross = 0.5 *
N *
params->pSigParams->pulsar.aCross;
663 cos2Psi = (
REAL4 )cos( 2.0 * psi );
664 sin2Psi = (
REAL4 )sin( 2.0 * psi );
665 f0Signal =
params->pSigParams->pulsar.f0;
666 phi0Signal =
params->pSigParams->pulsar.phi0;
667 if (
params->pSigParams->pulsar.spindown ) {
668 spOrder =
params->pSigParams->pulsar.spindown->length;
674 for ( iSFT = 0; iSFT <
numSFTs; iSFT++ ) {
676 thisSFT = &( sftvect->
data[iSFT] );
683 realA = (
REAL8 )( halfAPlus * fPlus );
684 imagA = (
REAL8 )( halfACross * fCross );
688 tmpInt = 2 * iSFT * ( spOrder + 1 ) + 1;
691 for (
s = 0;
s < spOrder;
s++ ) {
692 xSum +=
params->pSigParams->pulsar.spindown->data[
s] * input->
skyConst[tmpInt + 2 + 2 *
s];
693 ySum +=
params->pSigParams->pulsar.spindown->data[
s] * input->
skyConst[tmpInt + 1 + 2 *
s];
700 kappa = f0Signal * input->
skyConst[tmpInt] + xSum;
702 if (
params->resTrig > 0 ) {
709 yTmp = phi0Signal / real8TwoPi + f0Signal * input->
skyConst[tmpInt - 1] + ySum;
710 varTmp = yTmp - (
INT4 )yTmp;
712 indexTrig = lround( ( varTmp + 1.0 ) * halfResTrig );
713 dTmp = real8TwoPi * varTmp -
params->trigArg[indexTrig];
714 dTmp2 = 0.5 * dTmp * dTmp;
715 sinTmp =
params->sinVal[indexTrig];
716 cosTmp =
params->cosVal[indexTrig];
717 imagQcc = sinTmp + dTmp * cosTmp - dTmp2 * sinTmp;
718 realQcc = cosTmp - dTmp * sinTmp - dTmp2 * cosTmp;
722 varTmp = kappa - (
INT4 )kappa;
724 indexTrig = lround( ( varTmp + 1.0 ) * halfResTrig );
725 dTmp = real8TwoPi * varTmp -
params->trigArg[indexTrig];
726 dTmp2 = 0.5 * dTmp * dTmp;
727 sinTmp =
params->sinVal[indexTrig];
728 cosTmp =
params->cosVal[indexTrig];
729 sin2PiKappa = sinTmp + dTmp * cosTmp - dTmp2 * sinTmp;
730 oneMinusCos2PiKappa = 1.0 - cosTmp + dTmp * sinTmp + dTmp2 * cosTmp;
738 yTmp = phi0Signal + real8TwoPi * ( f0Signal * input->
skyConst[tmpInt - 1] + ySum );
739 realQcc = cos( yTmp );
740 imagQcc = sin( yTmp );
744 xTmp = real8TwoPi * kappa;
745 sin2PiKappa = sin( xTmp );
746 oneMinusCos2PiKappa = 1.0 - cos( xTmp );
757 if ( jEnd > SFTlen ) {
763 for (
j = 0;
j < jStart;
j++ ) {
768 for (
j = jStart;
j < jEnd;
j++ ) {
771 xTmp = real8TwoPi * ( kappa - ( (
REAL8 )
k ) );
773 if ( fabs( xTmp ) < smallX ) {
778 realPcc = sin2PiKappa / xTmp;
779 imagPcc = oneMinusCos2PiKappa / xTmp;
781 realTmp = realQcc * realPcc - imagQcc * imagPcc;
782 imagTmp = realQcc * imagPcc + imagQcc * realPcc;
783 thisSFT->
data->
data[
j] =
crectf( (
REAL4 )( realTmp * realA - imagTmp * imagA ), (
REAL4 )( realTmp * imagA + imagTmp * realA ) );
786 for (
j = jEnd;
j < SFTlen;
j++ ) {
791 thisSFT->
epoch =
params->pSFTParams->timestamps->data[iSFT];
796 if (
params->pSFTParams->noiseSFTs ) {
797 thisNoiseSFT = &(
params->pSFTParams->noiseSFTs->data[iSFT] );
798 index0n = lround( ( thisSFT->
f0 - thisNoiseSFT->
f0 ) * tSFT );
799 for (
j = 0;
j < SFTlen;
j++ ) {
806 if ( *outputSFTs == NULL ) {
807 *outputSFTs = sftvect;
833 baryinput.site = *(
params->site );
835 baryinput.site.location[0] /=
LAL_C_SI;
836 baryinput.site.location[1] /=
LAL_C_SI;
837 baryinput.site.location[2] /=
LAL_C_SI;
844 baryinput.dInv = 0.e0;
846 baryinput.tgps = GPSin;
858 ( *SSBout ) = emit.
te;
883 UINT4 flip_flop_counter = 0;
900 if ( llabs( (
long long )
delta ) == 1 ) {
901 flip_flop_counter ++;
906 if ( (
delta == 0 ) || ( flip_flop_counter >= 3 ) ) {
925 if ( ( flip_flop_counter == 3 ) && (
delta == +1 ) ) {
930 ( *GPSout ) = GPSguess;
961 for (
UINT4 i = 0;
i < length;
i++ ) {
1000 if ( fread( (
void * )&
seed,
sizeof(
INT4 ), 1, devrandom ) != 1 ) {
1001 fclose( devrandom );
1004 fclose( devrandom );
1012 for (
UINT4 i = 0;
i < numPoints;
i++ ) {
1091 XLAL_CHECK( t1R >= t0R,
XLAL_EDOM,
"Invalid negative time range: t0=%f must be <= t1=%f]\n", t0R, t1R );
1093 for (
UINT4 i = 0;
i < numTimestamps;
i ++ ) {
1099 XLAL_CHECK( diff0 >= 0,
XLAL_EDOM,
"Timestamp i=%d outside of bounds: t_i = %f < [%f,%f]\n",
i, tiR, t0R, t1R );
1102 XLAL_CHECK( diff1 >= 0,
XLAL_EDOM,
"Timestamp i=%d outside of bounds: t_i = %f > [%f,%f]\n",
i, tiR, t0R, t1R );
1131 XLAL_CHECK( ret == 0,
XLAL_ETOL,
"Time-base of noise-SFTs Tsft_n=%f differs from signal-SFTs Tsft=%f\n", 1.0 / deltaFn, 1.0 /
deltaF );
1133 XLAL_CHECK( (
f0 >= fn0 ) && (
f1 <= fn1 ),
XLAL_EDOM,
"Signal frequency-band [%f,%f] is not contained in noise SFTs [%f,%f]\n",
f0,
f1, fn0, fn1 );
1137 REAL8 binRounded = round( binReal );
1138 ret = gsl_fcmp( binReal, binRounded,
eps );
1139 XLAL_CHECK( ret == 0,
XLAL_ETOL,
"Signal-band frequency f0/deltaF = %.16g differs from integer bin by more than %g relative deviation.\n", binReal,
eps );
1142 binRounded = round( binReal );
1143 ret = gsl_fcmp( binReal, binRounded,
eps );
1144 XLAL_CHECK( ret == 0,
XLAL_ETOL,
"Signal-band frequency f1/deltaF = %.16g differs from integer bin by more than %g relative deviation.\n", binReal,
eps );
1147 binRounded = round( binReal );
1148 ret = gsl_fcmp( binReal, binRounded,
eps );
1149 XLAL_CHECK( ret == 0,
XLAL_ETOL,
"Noise-SFT start frequency fn0/deltaF = %.16g differs from integer bin by more than %g relative deviation.\n", binReal,
eps );
1171 if ( fabs( deltaFT - (
INT4 ) deltaFT ) >
eps ) {
1172 XLALPrintInfo(
"XLALcorrect_phase(): we DO need to apply heterodyning phase-correction\n" );
1176 REAL8 cosx = cos( deltaPhase );
1177 REAL8 sinx = sin( deltaPhase );
1181 sft->
data->
data[
i] =
crectf( crealf( fvec1 ) * cosx - cimagf( fvec1 ) * sinx, cimagf( fvec1 ) * cosx + crealf( fvec1 ) * sinx );
void LALComputeSky(LALStatus *status, REAL8 *skyConst, INT8 iSkyCoh, CSParams *params)
Given an input index which refers to the sky patch under consideration, this routine returns the phas...
static LALUnit emptyLALUnit
static double double delta
#define ABORT(statusptr, code, mesg)
#define XLAL_CHECK_LAL(sp, assertion,...)
#define TRY(func, statusptr)
#define ATTATCHSTATUSPTR(statusptr)
#define ASSERT(assertion, statusptr, code, mesg)
#define DETATCHSTATUSPTR(statusptr)
#define INITSTATUS(statusptr)
#define RETURN(statusptr)
LIGOTimeGPSVector * timestamps
void XLALDestroyREAL4VectorSequence(REAL4VectorSequence *vecseq)
void LALComputeDetAMResponse(LALStatus *status, LALDetAMResponse *pResponse, const LALDetAndSource *pDetAndSrc, const LIGOTimeGPS *gps)
void XLALDestroyMultiREAL4TimeSeries(MultiREAL4TimeSeries *multiTS)
Destroy a MultiREAL4TimeSeries, NULL-robust.
#define GENERATEPULSARSIGNALH_EDTERMS
Dterms must be greater than zero and less than or equal to half the number of SFT bins.
int XLALConvertGPS2SSB(LIGOTimeGPS *SSBout, LIGOTimeGPS GPSin, const PulsarSignalParams *params)
Convert earth-frame GPS time into barycentric-frame SSB time for given source.
REAL4TimeSeries * XLALGeneratePulsarSignal(const PulsarSignalParams *params)
Generate a time-series at the detector for a given pulsar.
#define GENERATEPULSARSIGNALH_EINPUT
Invalid input-arguments to function.
int XLALConvertSSB2GPS(LIGOTimeGPS *GPSout, LIGOTimeGPS SSBin, const PulsarSignalParams *params)
Convert barycentric frame SSB time into earth-frame GPS time.
void LALGeneratePulsarSignal(LALStatus *status, REAL4TimeSeries **signalvec, const PulsarSignalParams *params)
#define GENERATEPULSARSIGNALH_EBADCOORDS
Current code requires sky position in equatorial coordinates.
REAL4TimeSeries * XLALGenerateLineFeature(const PulsarSignalParams *params)
Generate a REAL4TimeSeries containing a sinusoid with amplitude 'h0', frequency 'Freq-fHeterodyne' an...
SFTVector * XLALSignalToSFTs(const REAL4TimeSeries *signalvec, const SFTParams *params)
Turn the given time-series into SFTs and add noise if given.
#define GENERATEPULSARSIGNALH_ENULL
Arguments contained an unexpected null pointer.
static int XLALcheckNoiseSFTs(const SFTVector *sfts, REAL8 f0, REAL8 f1, REAL8 deltaF)
Check if frequency-range and resolution of noiseSFTs is consistent with signal-band [f0,...
void XLALDestroyMultiREAL8TimeSeries(MultiREAL8TimeSeries *multiTS)
Destroy a MultiREAL8TimeSeries, NULL-robust.
void LALFastGeneratePulsarSFTs(LALStatus *status, SFTVector **outputSFTs, const SkyConstAndZeroPsiAMResponse *input, const SFTandSignalParams *params)
Fast generation of Fake SFTs for a pure pulsar signal.
#define GENERATEPULSARSIGNALH_ELUTS
Lookup tables (LUTs) for trig functions must be defined on domain -2pi to 2pi inclusive.
void LALSignalToSFTs(LALStatus *status, SFTVector **outputSFTs, const REAL4TimeSeries *signalvec, const SFTParams *params)
void LALComputeSkyAndZeroPsiAMResponse(LALStatus *status, SkyConstAndZeroPsiAMResponse *output, const SFTandSignalParams *params)
/deprecated Move to attic? Wrapper for LALComputeSky() and LALComputeDetAMResponse() that finds the s...
static int XLALcheck_timestamp_bounds(const LIGOTimeGPSVector *timestamps, LIGOTimeGPS t0, LIGOTimeGPS t1)
Check that all timestamps given lie within the range [t0, t1].
#define GENERATEPULSARSIGNALH_ENUMSFTS
Inconsistent number of SFTs in timestamps and noise-SFTs.
int XLALAddGaussianNoise(REAL4TimeSeries *inSeries, REAL4 sigma, INT4 seed)
Generate Gaussian noise with standard-deviation sigma, add it to inSeries.
int XLALcorrect_phase(SFTtype *sft, LIGOTimeGPS tHeterodyne)
Yousuke's phase-correction function, taken from makefakedata_v2.
int XLALGenerateSpinOrbitCW(PulsarCoherentGW *sourceSignal, SpinOrbitCWParamStruc *sourceParams)
FIXME: Temporary XLAL-wapper to LAL-function LALGenerateSpinOrbitCW()
int XLALBarycenterEarth(EarthState *earth, const LIGOTimeGPS *tGPS, const EphemerisData *edat)
Computes the position and orientation of the Earth, at some arrival time , specified LIGOTimeGPS inp...
int XLALBarycenter(EmissionTime *emit, const BarycenterInput *baryinput, const EarthState *earth)
Transforms from detector arrival time in GPS (as specified in the LIGOTimeGPS structure) to pulse em...
#define XLAL_INIT_DECL(var,...)
int XLALPulsarSimulateCoherentGW(REAL4TimeSeries *output, PulsarCoherentGW *CWsignal, PulsarDetectorResponse *detector)
FIXME: Temporary XLAL-wapper to LAL-function LALPulsarSimulateCoherentGW()
RandomParams * XLALCreateRandomParams(INT4 seed)
void XLALDestroyRandomParams(RandomParams *params)
int XLALNormalDeviates(REAL4Vector *deviates, RandomParams *params)
REAL4FFTPlan * XLALCreateForwardREAL4FFTPlan(UINT4 size, int measurelvl)
void XLALDestroyREAL4FFTPlan(REAL4FFTPlan *plan)
int XLALREAL4ForwardFFT(COMPLEX8Vector *output, const REAL4Vector *input, const REAL4FFTPlan *plan)
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...
CHAR * XLALGetChannelPrefix(const CHAR *name)
Find the valid CW detector prefix.
SFTVector * XLALCreateSFTVector(UINT4 numSFTs, UINT4 numBins)
XLAL function to create an SFTVector of numSFT SFTs with SFTlen frequency-bins (which will be allocat...
void XLALDestroyTimestampVector(LIGOTimeGPSVector *vect)
De-allocate a LIGOTimeGPSVector.
void XLALNormalizeSkyPosition(double *restrict longitude, double *restrict latitude)
void LALNormalizeSkyPosition(LALStatus *stat, SkyPosition *posOut, const SkyPosition *posIn)
COORDINATESYSTEM_EQUATORIAL
REAL4TimeSeries * XLALCreateREAL4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
void XLALDestroyREAL4TimeSeries(REAL4TimeSeries *series)
REAL4Vector * XLALCreateREAL4Vector(UINT4 length)
void XLALDestroyREAL4Vector(REAL4Vector *vector)
REAL8Vector * XLALCreateREAL8Vector(UINT4 length)
void XLALDestroyREAL8Vector(REAL8Vector *vector)
int int int XLALPrintInfo(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_CHECK(assertion,...)
int XLALPrintError(const char *fmt,...) _LAL_GCC_PRINTF_FORMAT_(1
#define XLAL_CHECK_NULL(assertion,...)
LIGOTimeGPS * XLALGPSAdd(LIGOTimeGPS *epoch, REAL8 dt)
REAL8 XLALGPSGetREAL8(const LIGOTimeGPS *epoch)
REAL8 XLALGPSDiff(const LIGOTimeGPS *t1, const LIGOTimeGPS *t0)
LIGOTimeGPS * XLALINT8NSToGPS(LIGOTimeGPS *epoch, INT8 ns)
INT8 XLALGPSToINT8NS(const LIGOTimeGPS *epoch)
A vector of COMPLEX8FrequencySeries.
COMPLEX8FrequencySeries * data
Pointer to the data array.
UINT4 length
Number of elements in array.
This structure contains the parameters for the LALComputeSky() routine.
EmissionTime * emit
TO BE DOCUMENTED.
INT8 spinDwnOrder
The maximal number of spindown parameters per spindown parameter set.
LIGOTimeGPS * tGPS
An array containing the GPS times of the first datum from each SFT.
REAL8 tSFT
The timescale of one SFT.
EarthState * earth
TO BE DOCUMENTED.
BarycenterInput * baryinput
A switch which turns modulation on/off.
REAL8 * skyPos
The array containing the sky patch coordinates.
const EphemerisData * edat
ephemeris data
INT8 mObsSFT
The number of SFTs in the observation time.
Basic output structure of LALBarycenterEarth.c.
Basic output structure produced by LALBarycenter.c.
LIGOTimeGPS te
pulse emission time (TDB); also sometimes called `‘arrival time (TDB) of same wavefront at SSB’'
const LALDetector * pDetector
SkyPosition equatorialCoords
A vector of 'timestamps' of type LIGOTimeGPS.
LIGOTimeGPS * data
array of timestamps
UINT4 length
number of timestamps
A collection of (multi-IFO) REAL4 time-series.
A collection of (multi-IFO) REAL8 time-series.
This structure stores a representation of a plane gravitational wave propagating from a particular po...
This structure contains information required to determine the response of a detector to a gravitation...
Input parameters to GeneratePulsarSignal(), defining the source and the time-series.
Parameters defining the SFTs to be returned from LALSignalToSFTs().
Parameters defining the pulsar signal and SFTs used by LALFastGeneratePulsarSFTs().
Sky Constants and beam pattern response functions used by LALFastGeneratePulsarSFTs().
REAL8 * skyConst
vector of A and B sky constants
REAL4 * fPlusZeroPsi
vector of Fplus values for psi = 0 at midpoint of each SFT
REAL4 * fCrossZeroPsi
vector of Fcross values for psi = 0 at midpoint of each SFT
This structure stores the parameters for constructing a gravitational waveform with both a Taylor-pol...