31#include <lal/LALConstants.h>
32#include <lal/LALStdlib.h>
33#include <lal/LALString.h>
34#include <lal/ComputeFstat.h>
35#include <lal/TranslateAngles.h>
36#include <lal/TranslateMJD.h>
37#include <lal/LALHashFunc.h>
38#include <lal/ReadPulsarParFile.h>
41#define UNUSED __attribute__ ((unused))
47#define DAYSTOSECS 86400.0
60 [
'a'] =
'A', [
'b'] =
'B', [
'c'] =
'C', [
'd'] =
'D', [
'e'] =
'E', [
'f'] =
'F', [
'g'] =
'G', [
'h'] =
'H',
61 [
'i'] =
'I', [
'j'] =
'J', [
'k'] =
'K', [
'l'] =
'L', [
'm'] =
'M', [
'n'] =
'N', [
'o'] =
'O', [
'p'] =
'P',
62 [
'q'] =
'Q', [
'r'] =
'R', [
's'] =
'S', [
't'] =
'T', [
'u'] =
'U', [
'v'] =
'V', [
'w'] =
'W', [
'x'] =
'X',
63 [
'y'] =
'Y', [
'z'] =
'Z'
73 if ( (
c =
a2A[(
int )( *
s )] ) ) {
80typedef struct taghash_elem {
112 if ( !elem1 || !elem2 ) {
127 if ( pars == NULL ) {
137 while (
this != NULL ) {
138 if ( !strcmp( this->name,
name ) ) {
167 if ( pars == NULL ) {
177 tmp.
name = upperName;
195 return ( item->
value );
267 CHAR *namecopy = NULL, *token;
271 if ( strchr(
name,
'_' ) ) {
272 token = strtok( namecopy,
"_" );
274 token = strtok( namecopy,
"0123456789" );
285 if ( sscanf(
name +
loc,
"%d", &idx ) != 1 ) {
290 if ( !strncmp(
name,
"GL", 2 ) || !strncmp(
name,
"WAVE", 4 ) ) {
293 if ( idx < 0 || (
UINT4 )idx > vpars->
length - 1 ) {
297 val = vpars->
data[idx];
313 return ( item->
err );
362 return *(
REAL8 * )val;
390 CHAR *namecopy = NULL, *token;
394 if ( strchr(
name,
'_' ) ) {
395 token = strtok( namecopy,
"_" );
397 token = strtok( namecopy,
"0123456789" );
408 if ( sscanf(
name +
loc,
"%d", &idx ) != 1 ) {
413 if ( !strncmp(
name,
"GL", 2 ) || !strncmp(
name,
"WAVE", 4 ) ) {
416 if ( idx < 0 || (
UINT4 )idx > vpars->
length - 1 ) {
420 val = vpars->
data[idx];
470 memset( new->fitFlag->data, 0,
sizeof(
UINT4 )*dlength );
473 memset(
err->data, 0,
sizeof(
REAL8 )*dlength );
479 memset( new->fitFlag->data, 0,
sizeof(
UINT4 ) );
487 if (
new == NULL || new->value == NULL ) {
498 new->next = pars->
head;
584 if ( this->fitFlag ) {
622 if ( !strcmp( this->name, upperName ) ) {
635 pars->
head = this->next;
637 parent->
next = this->next;
655 if ( this->fitFlag ) {
662 this->fitFlag = NULL;
703 if ( item->
err != NULL ) {
767 if ( origin == target ) {
796 memcpy( new->data, old->
data, new->length *
sizeof(
REAL8 ) );
816 memcpy( newfit, oldfit, newerr->
length *
sizeof(
UINT4 ) );
833 UINT4 newfit = oldfit[0];
861#define DEFINE_CONV_FACTOR_FUNCTION( name, convfactor, type ) \
862 void ParConv ## name ( const CHAR *inval, void *out ){ \
863 CHAR *in = XLALStringDuplicate( inval ); \
864 if ( type != CONVSTRING && type != CONVINT ) { \
866 if ( type == CONVFLOAT || type == CONVBINUNITS ){ \
868 for ( INT4 i = 0; i < (INT4)strlen(in); i++ ) { \
869 if ( in[i] == 'D' || in[i] == 'd' ) { in[i] = 'e'; } \
872 if ( type == CONVBINUNITS ){ \
874 if ( fabs( x ) > 1e-7 ) { x *= 1.e-12; } \
878 if ( x > 10000. ) { x = 0.; } \
880 else{ x *= convfactor; } \
882 else if ( type == CONVHMS ) { \
883 XLALTranslateHMStoRAD( &x, in ); \
885 else if ( type == CONVDMS ) { \
886 XLALTranslateDMStoRAD( &x, in ); \
888 else if ( type == CONVMJD ) { \
889 x = XLALTTMJDtoGPS( atof(in) ); \
891 memcpy(out, &x, sizeof(REAL8) ); \
893 else if ( type == CONVSTRING ){ memcpy( out, in, strlen(in)+1 ); } \
894 else if ( type == CONVINT ) { \
896 x = (UINT4)atoi(in); \
897 memcpy(out, &x, sizeof(UINT4) ); \
923typedef void ( *ParamConversionFunc )(
const CHAR *in,
void *
out );
927typedef struct tagParConversion {
929 ParamConversionFunc convfunc;
930 ParamConversionFunc converrfunc;
1120 INT4 i = 0, tmpnum = 0;
1123 if (
par == NULL ) {
1126 if (
name == NULL ) {
1140 nread = sscanf(
str,
"%s %s %s", str1, str2, str3 );
1148 if ( !strcmp(
name,
"E" ) ) {
1150 }
else if ( !strcmp(
name,
"E_1" ) ) {
1152 }
else if ( !strcmp(
name,
"E_2" ) ) {
1154 }
else if ( !strcmp(
name,
"E_3" ) ) {
1165 INT4 isfreq = ( !strncmp( nname,
"F", 1 ) && !strcmp(
"F",
pc[
i].
name ) && sscanf( nname + strlen(
"F" ),
"%d", &tmpnum ) == 1 );
1166 INT4 isperiod = ( !strncmp( nname,
"P", 1 ) && !strcmp(
"P",
pc[
i].
name ) && sscanf( nname + strlen(
"P" ),
"%d", &tmpnum ) == 1 );
1167 INT4 iswave = ( ( !strncmp( nname,
"WAVE", 4 ) && ( !strcmp(
"WAVESIN",
pc[
i].
name ) || !strcmp(
"WAVECOS",
pc[
i].
name ) ) ) && strcmp(
"WAVE_OM", nname ) && strcmp(
"WAVEEPOCH", nname ) );
1168 INT4 isfb = ( !strncmp( nname,
"FB", 2 ) && !strcmp(
"FB",
pc[
i].
name ) );
1169 INT4 isgl = ( !strncmp( nname,
"GL", 2 ) && strstr( nname,
pc[
i].
name ) && !strncmp( nname,
pc[
i].
name, strcspn( nname,
"_" ) ) );
1171 if ( !strcmp( nname,
pc[
i].
name ) || isfreq || isperiod || iswave || isfb || isgl ) {
1172 UINT4 num = 0, nsize = 0;
1174 if (
pc[
i].convfunc == NULL ) {
1180 if ( isfreq || isperiod || isfb ) {
1182 UINT4 *fitFlag = NULL;
1185 if ( strlen( nname ) > strlen(
"FB" ) ) {
1186 if ( sscanf( nname + strlen(
"FB" ),
"%d", &num ) != 1 ) {
1190 }
else if ( isfreq ) {
1191 if ( strlen( nname ) > strlen(
"F" ) ) {
1192 if ( sscanf( nname + strlen(
"F" ),
"%d", &num ) != 1 ) {
1197 if ( strlen( nname ) > strlen(
"P" ) ) {
1198 if ( sscanf( nname + strlen(
"P" ),
"%d", &num ) != 1 ) {
1206 pc[
i].convfunc( str1, val );
1212 nsize = ( cptr->
length > num + 1 ) ? cptr->
length : ( num + 1 );
1217 memset(
ptr->data, 0,
sizeof(
REAL8 )*nsize );
1221 memset( eptr->data, 0,
sizeof(
REAL8 )*nsize );
1235 memcpy( fitFlag, ff,
sizeof(
UINT4 )*cptr->
length );
1250 }
else if ( iswave && nread == 2 ) {
1253 if ( strlen( nname ) > strlen(
"WAVE" ) ) {
1254 if ( sscanf( nname + strlen(
"WAVE" ),
"%d", &num ) != 1 ) {
1266 pc[
i].convfunc( str1, val1 );
1267 pc[
i].convfunc( str2, val2 );
1274 nsize = ( cptr->
length > num + 1 ) ? cptr->
length : ( num + 1 );
1280 memset( ptr1->
data, 0,
sizeof(
REAL8 )*nsize );
1281 memset( ptr2->data, 0,
sizeof(
REAL8 )*nsize );
1289 memcpy( ptr2->data, cptr2->
data, ptr2->length *
sizeof(
REAL8 ) );
1293 ptr2->data[num] = *(
REAL8 * )val2;
1306 memset( eptr->
data, 0,
sizeof(
REAL8 )*nsize );
1313 }
else if ( isgl ) {
1315 UINT4 *fitFlag = NULL;
1317 if ( sscanf( strstr( nname,
"_" ) + 1,
"%d", &num ) != 1 ) {
1325 pc[
i].convfunc( str1, val );
1331 nsize = ( cptr->
length > num + 1 ) ? cptr->
length : ( num + 1 );
1336 memset(
ptr->data, 0,
sizeof(
REAL8 )*nsize );
1340 memset( eptr->data, 0,
sizeof(
REAL8 )*nsize );
1354 memcpy( fitFlag, ff,
sizeof(
UINT4 )*cptr->
length );
1371 pc[
i].convfunc( str1, val );
1382 if ( ( nread == 2 && strcmp( str2,
"1" ) ) || ( nread == 3 && !strcmp( str2,
"1" ) ) ) {
1383 if (
pc[
i].converrfunc == NULL ) {
1392 if ( isfreq || isperiod || isfb || isgl ) {
1403 memcpy( ff, fitFlag,
sizeof(
UINT4 )*
ptr->length );
1406 pc[
i].converrfunc( str2, val );
1408 if ( !strcmp( str2,
"1" ) ) {
1411 pc[
i].converrfunc( str3, val );
1423 pc[
i].converrfunc( str2, val );
1425 if ( !strcmp( str2,
"1" ) ) {
1428 pc[
i].converrfunc( str3, val );
1456 if ( (
fp = fopen( pulsarAndPath,
"r" ) ) == NULL ) {
1466 while ( !feof(
fp ) ) {
1471 if (
str[0] ==
'#' ) {
1495 if ( !strcmp( sini,
"KIN" ) ) {
1500 XLAL_PRINT_ERROR(
"Error... KIN not set in .par file %s\n", pulsarAndPath );
1506 sinid = atof( sini );
1522 fprintf( stderr,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n" );
1524 fprintf( stderr,
"sky position:\tra %.7lf +/- %.3le rads, dec %.7lf +/- %.3le rads\n",
params.
ra,
1527 fprintf( stderr,
"proper motion:\tra %.4le +/- %.1le rads/s, dec %.4le +/- %.1le rads/s\n",
1530 fprintf( stderr,
"epochs:\tperiod %lf (GPS), position %lf (GPS)\n",
params.pepoch,
1532 fprintf( stderr,
"xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx\n\n" );
1534 fprintf( stderr,
"Frequency parameters\n" );
1545 if (
params.model != NULL ) {
1546 fprintf( stderr,
"\nBinary parameters:\tmodel %s\n",
params.model );
1548 fprintf( stderr,
"Keplarian parameters:-\n" );
1553 fprintf( stderr,
"\tprojected semi-major axis = %lf +/- %.3le (light sec)\n",
params.x,
1559 fprintf( stderr,
"\tlongitude of periastron = %lf +/- %.3lf (degs)\n",
params.w0,
1562 fprintf( stderr,
"\ttime of periastron = %lf +/- %.3lf (GPS)\n",
params.T0,
params.T0Err );
1565 fprintf( stderr,
"\ttime of ascending node = %lf +/- %.3lf (GPS)\n",
params.Tasc,
1568 fprintf( stderr,
"\tfirst Laplace-Lagrange parameter (eps1) = %le +/- %.3le\n",
params.eps1,
1571 fprintf( stderr,
"\tsecond Laplace-Lagrange parameter (eps1) = %le +/- %.3le\n",
params.eps2,
1574 fprintf( stderr,
"\tsecond Laplace-Lagrange parameter (eps1) = %le +/- %.3le\n",
params.eps2,
1591 INT4 i = 0, numPars = 0,
c = 1, sl = 0;
1597 if ( access( corfile, F_OK ) != 0 ) {
1603 if ( (
fp = fopen( corfile,
"r" ) ) == NULL ) {
1609 while ( !strchr( fgets( onechar, 2,
fp ),
'\n' ) ) {
1613 sl = strlen( firstline );
1616 for (
i = 0;
i < sl;
i++ ) {
1618 if ( !isspace( firstline[
i] ) ) {
1630 for (
i = 0;
i < numPars;
i++ ) {
1633 if (
fscanf(
fp,
"%s", tmpStr ) == EOF ) {
1652 dims->
data[0] = numPars;
1653 dims->
data[1] = numPars;
1659 for (
i = 0;
i < numPars;
i++ ) {
1663 if (
fscanf(
fp,
"%s", tmpStr ) == EOF ) {
1668 if ( strcmp( tmpStr, tmpparams->
data[
i] ) ) {
1670Parameters not in consistent order!\n" );
1674 for (
j = 0;
j <
i + 1;
j++ ) {
1677 if (
fscanf(
fp,
"%lf", &tmpval ) == EOF ) {
1683 if (
j !=
i && fabs( tmpval ) == 1. ) {
1687 cormat->
data[
i * numPars +
j] = tmpval;
1691 cormat->
data[
j * numPars +
i] = tmpval;
1720 REAL8 mjdInt, mjdFrac;
1721 mjdFrac = modf( MJD, &mjdInt );
1759 TDBtoTT = 0.0016568 * sin( ( 35999.37 *
T + 357.5 ) *
LAL_PI_180 ) +
1760 0.0000224 * sin( ( 32964.5 *
T + 246.0 ) *
LAL_PI_180 ) +
1761 0.0000138 * sin( ( 71998.7 *
T + 355.0 ) *
LAL_PI_180 ) +
1762 0.0000048 * sin( ( 3034.9 *
T + 25.0 ) *
LAL_PI_180 ) +
1763 0.0000047 * sin( ( 34777.3 *
T + 230.0 ) *
LAL_PI_180 );
1789 range, must be > %.1f.\n", MJD,
GPS0MJD );
1795 TCBtoTDB = 1.550506e-8 * Tdiff;
REAL8Array * XLALResizeREAL8Array(REAL8Array *, UINT4Vector *)
#define XLAL_EPOCH_J2000_0_JD
UINT8 XLALCityHash64(const char *buf, size_t len)
int XLALHashTblFind(const LALHashTbl *ht, const void *x, const void **y)
int XLALHashTblAdd(LALHashTbl *ht, void *x)
int XLALHashTblRemove(LALHashTbl *ht, const void *x)
LALHashTbl * XLALHashTblCreate(LALHashTblDtorFcn dtor, LALHashTblHashFcn hash, LALHashTblCmpFcn cmp)
void XLALHashTblDestroy(LALHashTbl *ht)
void * XLALMalloc(size_t n)
void * XLALCalloc(size_t m, size_t n)
char char * XLALStringDuplicate(const char *s)
int XLALStringCaseCompare(const char *s1, const char *s2)
size_t XLALStringCopy(char *dst, const char *src, size_t size)
int char * XLALStringAppend(char *s, const char *append)
void PulsarSetParam(PulsarParameters *pars, const CHAR *name, const void *value)
Set the value of a parameter in the PulsarParameters structure.
void ParConvKpcToMetres(const CHAR *in, void *out)
Convert the input string from kiloparsecs to metres.
const REAL8Vector * PulsarGetREAL8VectorParam(const PulsarParameters *pars, const CHAR *name)
Return a REAL8Vector parameter.
static int PulsarHashElemCmp(const void *elem1, const void *elem2)
void ParConvToString(const CHAR *in, void *out)
Copy the input string into the output pointer.
void ParConvDegsToRads(const CHAR *in, void *out)
Convert the input string from degrees to radians.
static PulsarParam * PulsarGetParamItemSlow(const PulsarParameters *pars, const CHAR *name)
Get a pointer to a parameter of a given name from a PulsarParameters structure.
static void del_elem(void *elem)
void ParConvInvArcsecsToInvRads(const CHAR *in, void *out)
Convert the input string from 1/acrseconds to 1/radians.
static PulsarParam * PulsarGetParamItem(const PulsarParameters *pars, const CHAR *name)
Get a pointer to a parameter of a given name from a PulsarParameters structure.
void ParConvDegPerYrToRadPerSec(const CHAR *in, void *out)
Convert the input string from degrees per year to radians per second.
void PulsarSetREAL8ParamErr(PulsarParameters *pars, const CHAR *name, REAL8 value, UINT4 fitFlag)
Set the error value for a REAL8 parameter.
void PulsarAddREAL8Param(PulsarParameters *pars, const CHAR *name, REAL8 value)
Add a REAL8 parameter to the PulsarParameters structure.
void PulsarCopyParams(PulsarParameters *origin, PulsarParameters *target)
Function to copy a PulsarParameters structure.
const REAL8Vector * PulsarGetREAL8VectorParamErr(const PulsarParameters *pars, const CHAR *name)
Return a REAL8Vector parameter error value.
void ParConvSecsToRads(const CHAR *in, void *out)
Convert the input string from seconds to radians.
REAL8 PulsarGetREAL8VectorParamErrIndividual(const PulsarParameters *pars, const CHAR *name)
Return an individual REAL8 value from a REAL8Vector parameter.
void ParConvBinaryUnits(const CHAR *in, void *out)
Convert the binary system parameter from a string to a double, but make the check (as performed by TE...
REAL8 PulsarGetREAL8ParamErr(const PulsarParameters *pars, const CHAR *name)
Return a REAL8 parameter error value.
REAL8 PulsarGetREAL8ParamOrZero(const PulsarParameters *pars, const CHAR *name)
Return a REAL8 parameter if it exists, otherwise return zero.
static const CHAR a2A[256]
Array for conversion from lowercase to uppercase.
#define DEFINE_CONV_FACTOR_FUNCTION(name, convfactor, type)
static void strtoupper(CHAR *s)
Convert string to uppercase.
#define LALPULSAR_TEMPO2_MSUN_SI
int PulsarCheckParam(const PulsarParameters *pars, const CHAR *name)
Check for the existence of the parameter name in the PulsarParameters structure.
void PulsarSetREAL8VectorParamErr(PulsarParameters *pars, const CHAR *name, const REAL8Vector *value, const UINT4 *fitFlag)
Set the error values for a REAL8Vector parameter.
REAL8 XLALTCBMJDtoGPS(REAL8 MJD)
If you have an MJD arrival time on the Earth then this will convert it to the equivalent GPS time in ...
void * PulsarGetParam(const PulsarParameters *pars, const CHAR *name)
Get the required parameter value from the PulsarParameters structure.
PulsarParameters * XLALReadTEMPOParFile(const CHAR *pulsarAndPath)
Read in the parameters from a TEMPO(2) parameter file into a PulsarParameters structure.
void PulsarClearParams(PulsarParameters *pars)
Free all the parameters from a PulsarParameters structure.
void PulsarSetParamErr(PulsarParameters *pars, const CHAR *name, void *value, const UINT4 *fitFlag, UINT4 len)
Set the value of the error of a parameter in the PulsarParameters structure.
LALStringVector * XLALReadTEMPOCorFile(REAL8Array *cormat, CHAR *corfile)
This function will read in a TEMPO-style parameter correlation matrix.
static UINT8 PulsarHash(const void *elem)
void ParConvDaysToSecs(const CHAR *in, void *out)
Convert the input string from days to seconds.
void PrintPulsarParameters(BinaryPulsarParams params)
function to print out all the pulsar parameters read in from a par file
static INT4 ParseParLine(PulsarParameters *par, const CHAR *name, FILE *fp)
Parse a single line from a pulsar parameter file.
void PulsarAddParam(PulsarParameters *pars, const CHAR *name, void *value, PulsarParamType type)
Add a parameter and value to the PulsarParameters structure.
void ParConvSolarMassToKg(const CHAR *in, void *out)
Convert the input string from solar masses to kilograms.
REAL8 PulsarGetREAL8Param(const PulsarParameters *pars, const CHAR *name)
Return a REAL8 parameter.
void PulsarRemoveParam(PulsarParameters *pars, const CHAR *name)
Remove a given parameter from a PulsarParameters structure.
REAL8 XLALTDBMJDtoGPS(REAL8 MJD)
If you have an MJD arrival time on the Earth then this will convert it to the equivalent GPS time in ...
UINT4 PulsarGetUINT4Param(const PulsarParameters *pars, const CHAR *name)
Return a UINT4 parameter.
const CHAR * PulsarGetStringParam(const PulsarParameters *pars, const CHAR *name)
Return a string parameter.
static void * new_elem(const char *name, PulsarParam *itemPtr)
REAL8 XLALTTMJDtoGPS(REAL8 MJD)
This function converts a MJD format time corrected to Terrestrial Time (TT) into an equivalent GPS ti...
void PulsarAddStringParam(PulsarParameters *pars, const CHAR *name, const CHAR *value)
Add a string parameter to the PulsarParameters structure.
PulsarParamType
An enumerated type for denoting the type of a variable.
void ParConvMicrosecToSec(const CHAR *in, void *out)
Convert an input string from microseconds into seconds.
void PulsarAddREAL8VectorParam(PulsarParameters *pars, const CHAR *name, const REAL8Vector *value)
Add a REAL8Vector parameter to the PulsarParameters structure.
void * PulsarGetParamErr(const PulsarParameters *pars, const CHAR *name)
Get the required parameter error value from the PulsarParameters structure.
REAL8 PulsarGetREAL8VectorParamIndividual(const PulsarParameters *pars, const CHAR *name)
Return an individual REAL8 value from a REAL8Vector parameter.
void ParConvMasPerYrToRadPerSec(const CHAR *in, void *out)
Convert the input string from milliarcsecs per year to radians per second.
ParConversion pc[NUM_PARS]
Initialise conversion structure with most allowed TEMPO2 parameter names and conversion functions (co...
const UINT4 * PulsarGetParamFitFlag(const PulsarParameters *pars, const CHAR *name)
Get the fit flag array for a given parameter from the PulsarParameters structure.
void ParConvMasToRads(const CHAR *in, void *out)
Convert the input string from milliarcsecs to radians.
const UINT4Vector * PulsarGetParamFitFlagAsVector(const PulsarParameters *pars, const CHAR *name)
Get the fit flag array for a given parameter from the PulsarParameters structure.
void PulsarFreeParams(PulsarParameters *pars)
Function to free memory from pulsar parameters.
void ParConvToInt(const CHAR *in, void *out)
Convert the input string into a unsigned integer number.
void ParConvMJDToGPS(const CHAR *in, void *out)
Convert the input string from a TT MJD value into a GPS time.
void ParConvRAToRads(const CHAR *in, void *out)
Convert a right ascension input string in the format "hh:mm:ss.s" into radians.
void ParConvToFloat(const CHAR *in, void *out)
Conversion functions from units used in TEMPO parameter files into SI units.
PulsarParamType PulsarGetParamType(const PulsarParameters *pars, const char *name)
Get the required parameter's type.
void ParConvDecToRads(const CHAR *in, void *out)
Convert a declination input string in the format "dd:mm:ss.s" into radians.
#define PULSAR_PARNAME_MAX
void ParConvArcsecsToRads(const CHAR *in, void *out)
Convert the input string from arcseconds to radians.
UINT4 PulsarGetUINT4ParamOrZero(const PulsarParameters *pars, const CHAR *name)
Return a UINT4 parameter if it exists, otherwise return zero.
void PulsarAddUINT4Param(PulsarParameters *pars, const CHAR *name, UINT4 value)
Add a UINT4 parameter to the PulsarParameters structure.
@ PULSARTYPE_REAL8Vector_t
void XLALDestroyStringVector(LALStringVector *vect)
LALStringVector * XLALAppendString2Vector(LALStringVector *vect, const CHAR *string)
LIGOTimeGPS * XLALTranslateMJDTTtoGPS(LIGOTimeGPS *gps, INT4 mjdDays, REAL8 mjdFracDays)
void XLALDestroyUINT4Vector(UINT4Vector *vector)
REAL8Vector * XLALCreateREAL8Vector(UINT4 length)
void XLALDestroyREAL8Vector(REAL8Vector *vector)
UINT4Vector * XLALCreateUINT4Vector(UINT4 length)
#define XLAL_ERROR_VOID(...)
#define XLAL_ERROR_REAL8(...)
#define XLAL_ERROR_NULL(...)
#define XLAL_CHECK(assertion,...)
#define XLAL_PRINT_WARNING(...)
#define XLAL_CHECK_REAL8(assertion,...)
#define XLAL_PRINT_ERROR(...)
REAL8 XLALGPSGetREAL8(const LIGOTimeGPS *epoch)
A structure to contain all pulsar parameters and associated errors.
The PulsarParam list node structure.
void * value
Parameter value.
struct tagPulsarParam * next
void * err
Parameter error/uncertainty.
UINT4Vector * fitFlag
Set to 1 if the parameter has been fit in the par file.
PulsarParamType type
Parameter type e.g.
The PulsarParameters structure to contain a set of pulsar parameters.
PulsarParam * head
A linked list of PulsarParam structures.
LALHashTbl * hash_table
Hash table of parameters.
INT4 nparams
The total number of parameters in the structure.
LALInferenceVariableItem * itemPtr