/// /// Parse a string representing an 'equatorial longitude' (aka right ascension or RA) into REAL8 radians, allowing for both radians or "hours:minutes:seconds" as input. /// /// Note that "h:m:s" input is translated into radians using XLALTranslateHMStoRAD(). /// int XLALParseStringValueAsRAJ ( REAL8 *valRAJ, ///< [out] return longitude value in radians const char *valString ///< [in] input string value ) { XLAL_CHECK ( (valRAJ != NULL) && (valString != NULL ), XLAL_EINVAL ); // ---------- first check if there's a colon ':' somewhere in the string, which indicates "H:M:S" format const char *colon; if ( (colon = strchr ( valString, ':' )) != NULL ) { XLAL_CHECK ( XLALTranslateHMStoRAD ( valRAJ, valString ) == XLAL_SUCCESS, XLAL_EFUNC ); } else { XLAL_CHECK ( XLALParseStringValueAsREAL8 ( valRAJ, valString ) == XLAL_SUCCESS, XLAL_EFUNC ); } return XLAL_SUCCESS; } // XLALParseStringValueAsRAJ()
int main(int argc, char *argv[]) { FILE *fp = NULL; BarycenterInput XLAL_INIT_DECL(baryinput); INT4 leap0,leap; LIGOTimeGPS epoch; LIGOTimeGPS TstartSSB, TendSSB, TendGPS; INT4 n; LIGOTimeGPS *TSSB = NULL; MJDTime TstartUTCMJD; LIGOTimeGPS TDET; REAL8 temp; INT4 i; MJDTime tempTOA; REAL8 dt; LIGOTimeGPS TstartGPS; MJDTime *TOA = NULL; CHAR tempstr[18]; CHAR *tempstr2; CHAR TstartMJDstr[20],TfinishMJDstr[20],TOAstr[22]; PulsarSignalParams pulsarparams; CHAR parfile[256]; CHAR timfile[256]; CHAR detcode[16]; REAL8 TstartUTCMJDtest; REAL8 diff; MJDTime MJDdiff, MJDtest; MJDTime TrefTDBMJD; LIGOTimeGPS TrefSSB_TDB_GPS; // ---------------------------------------------------------------------- UserVariables_t XLAL_INIT_DECL(uvar); XLAL_CHECK ( initUserVars (argc, argv, &uvar) == XLAL_SUCCESS, XLAL_EFUNC ); unsigned int seed = uvar.randSeed; if ( uvar.randSeed == 0 ) { seed = clock(); } srand ( seed ); // ----- sky position: random or user-specified ---------- REAL8 alpha, delta; CHAR *RAJ = NULL, *DECJ = NULL; BOOLEAN have_RAJ = XLALUserVarWasSet ( &uvar.RAJ ); BOOLEAN have_DECJ = XLALUserVarWasSet ( &uvar.DECJ ); if ( have_RAJ ) { XLAL_CHECK ( XLALTranslateHMStoRAD ( &alpha, uvar.RAJ ) == XLAL_SUCCESS, XLAL_EFUNC ); RAJ = XLALStringDuplicate ( uvar.RAJ ); } else { // pick randomly alpha = LAL_TWOPI * (1.0 * rand() / ( RAND_MAX + 1.0 ) ); // alpha uniform in [0, 2pi) XLAL_CHECK ( (RAJ = XLALTranslateRADtoHMS ( alpha )) != NULL, XLAL_EFUNC ); } if ( have_DECJ ) { XLAL_CHECK ( XLALTranslateDMStoRAD ( &delta, uvar.DECJ ) == XLAL_SUCCESS, XLAL_EFUNC ); DECJ = XLALStringDuplicate ( uvar.DECJ ); } else { // pick randomly delta = LAL_PI_2 - acos ( 1 - 2.0 * rand()/RAND_MAX ); // sin(delta) uniform in [-1,1] XLAL_CHECK ( (DECJ = XLALTranslateRADtoDMS ( delta )) != NULL, XLAL_EFUNC ); } /* define start time in an MJD structure */ REAL8toMJD ( &TstartUTCMJD, uvar.TstartUTCMJD ); XLALPrintInfo ( "TstartUTCMJD=%f converted to MJD days = %d fracdays = %6.12f\n", uvar.TstartUTCMJD, TstartUTCMJD.days, TstartUTCMJD.fracdays ); /* convert back to test conversions */ TstartUTCMJDtest = MJDtoREAL8 (TstartUTCMJD); diff = uvar.TstartUTCMJD - TstartUTCMJDtest; if ( fabs(diff) > 1e-9) { fprintf(stderr,"ERROR : Time conversion gives discrepancy of %e sec. Exiting.\n",diff); return(-1); } XLALPrintInfo ( "MJD conversion gives discrepancies of %e sec\n", diff); /* use start time to define an epoch for the leap seconds */ /* Note that epochs are defined in TDB !!! but here we only need to be rough to get a leap second value */ TDBMJDtoGPS(&epoch,TstartUTCMJD); XLALPrintInfo ( "leap second epoch = %d %d\n",epoch.gpsSeconds,epoch.gpsNanoSeconds); /* deal with ephemeris files and compute leap seconds */ EphemerisData *edat; XLAL_CHECK ( (edat = XLALInitBarycenter( uvar.ephemEarth, uvar.ephemSun )) != NULL, XLAL_EFUNC ); leap0 = XLALGPSLeapSeconds (epoch.gpsSeconds); XLALPrintInfo ( "leap seconds = %d\n",leap0); /* select detector location */ if (strcmp(uvar.Observatory,"GBT")==0) { baryinput.site.location[0] = GBT_LOCATION_X; baryinput.site.location[1] = GBT_LOCATION_Y; baryinput.site.location[2] = GBT_LOCATION_Z; sprintf(detcode,"gbt"); } else if (strcmp(uvar.Observatory,"NARRABRI")==0) { baryinput.site.location[0] = NARRABRI_LOCATION_X; baryinput.site.location[1] = NARRABRI_LOCATION_Y; baryinput.site.location[2] = NARRABRI_LOCATION_Z; sprintf(detcode,"atca"); } else if (strcmp(uvar.Observatory,"ARECIBO")==0) { baryinput.site.location[0] = ARECIBO_LOCATION_X; baryinput.site.location[1] = ARECIBO_LOCATION_Y; baryinput.site.location[2] = ARECIBO_LOCATION_Z; sprintf(detcode,"ao"); } else if (strcmp(uvar.Observatory,"NANSHAN")==0) { baryinput.site.location[0] = NANSHAN_LOCATION_X; baryinput.site.location[1] = NANSHAN_LOCATION_Y; baryinput.site.location[2] = NANSHAN_LOCATION_Z; sprintf(detcode,"nanshan"); } else if (strcmp(uvar.Observatory,"DSS_43")==0) { baryinput.site.location[0] = DSS_43_LOCATION_X; baryinput.site.location[1] = DSS_43_LOCATION_Y; baryinput.site.location[2] = DSS_43_LOCATION_Z; sprintf(detcode,"tid43"); } else if (strcmp(uvar.Observatory,"PARKES")==0) { baryinput.site.location[0] = PARKES_LOCATION_X; baryinput.site.location[1] = PARKES_LOCATION_Y; baryinput.site.location[2] = PARKES_LOCATION_Z; sprintf(detcode,"pks"); } else if (strcmp(uvar.Observatory,"JODRELL")==0) { baryinput.site.location[0] = JODRELL_LOCATION_X; baryinput.site.location[1] = JODRELL_LOCATION_Y; baryinput.site.location[2] = JODRELL_LOCATION_Z; sprintf(detcode,"jb"); } else if (strcmp(uvar.Observatory,"VLA")==0) { baryinput.site.location[0] = VLA_LOCATION_X; baryinput.site.location[1] = VLA_LOCATION_Y; baryinput.site.location[2] = VLA_LOCATION_Z; sprintf(detcode,"vla"); } else if (strcmp(uvar.Observatory,"NANCAY")==0) { baryinput.site.location[0] = NANCAY_LOCATION_X; baryinput.site.location[1] = NANCAY_LOCATION_Y; baryinput.site.location[2] = NANCAY_LOCATION_Z; sprintf(detcode,"ncy"); } else if (strcmp(uvar.Observatory,"EFFELSBERG")==0) { baryinput.site.location[0] = EFFELSBERG_LOCATION_X; baryinput.site.location[1] = EFFELSBERG_LOCATION_Y; baryinput.site.location[2] = EFFELSBERG_LOCATION_Z; sprintf(detcode,"eff"); } else if (strcmp(uvar.Observatory,"JODRELLM4")==0) { baryinput.site.location[0] = JODRELLM4_LOCATION_X; baryinput.site.location[1] = JODRELLM4_LOCATION_Y; baryinput.site.location[2] = JODRELLM4_LOCATION_Z; sprintf(detcode,"jbm4"); } else if (strcmp(uvar.Observatory,"GB300")==0) { baryinput.site.location[0] = GB300_LOCATION_X; baryinput.site.location[1] = GB300_LOCATION_Y; baryinput.site.location[2] = GB300_LOCATION_Z; sprintf(detcode,"gb300"); } else if (strcmp(uvar.Observatory,"GB140")==0) { baryinput.site.location[0] = GB140_LOCATION_X; baryinput.site.location[1] = GB140_LOCATION_Y; baryinput.site.location[2] = GB140_LOCATION_Z; sprintf(detcode,"gb140"); } else if (strcmp(uvar.Observatory,"GB853")==0) { baryinput.site.location[0] = GB853_LOCATION_X; baryinput.site.location[1] = GB853_LOCATION_Y; baryinput.site.location[2] = GB853_LOCATION_Z; sprintf(detcode,"gb853"); } else if (strcmp(uvar.Observatory,"LA_PALMA")==0) { baryinput.site.location[0] = LA_PALMA_LOCATION_X; baryinput.site.location[1] = LA_PALMA_LOCATION_Y; baryinput.site.location[2] = LA_PALMA_LOCATION_Z; sprintf(detcode,"lap"); } else if (strcmp(uvar.Observatory,"Hobart")==0) { baryinput.site.location[0] = Hobart_LOCATION_X; baryinput.site.location[1] = Hobart_LOCATION_Y; baryinput.site.location[2] = Hobart_LOCATION_Z; sprintf(detcode,"hob"); } else if (strcmp(uvar.Observatory,"Hartebeesthoek")==0) { baryinput.site.location[0] = Hartebeesthoek_LOCATION_X; baryinput.site.location[1] = Hartebeesthoek_LOCATION_Y; baryinput.site.location[2] = Hartebeesthoek_LOCATION_Z; sprintf(detcode,"hart"); } else if (strcmp(uvar.Observatory,"WSRT")==0) { baryinput.site.location[0] = WSRT_LOCATION_X; baryinput.site.location[1] = WSRT_LOCATION_Y; baryinput.site.location[2] = WSRT_LOCATION_Z; sprintf(detcode,"wsrt"); } else if (strcmp(uvar.Observatory,"COE")==0) { baryinput.site.location[0] = COE_LOCATION_X; baryinput.site.location[1] = COE_LOCATION_Y; baryinput.site.location[2] = COE_LOCATION_Z; sprintf(detcode,"coe"); } else if (strcmp(uvar.Observatory,"SSB")!=0) { fprintf(stderr,"ERROR. Unknown Observatory %s. Exiting.\n",uvar.Observatory); return(-1); } XLALPrintInfo ( "selected observatory %s - observatoryt code = %s\n",uvar.Observatory,detcode); XLALPrintInfo ( "baryinput location = %6.12f %6.12f %6.12f\n",baryinput.site.location[0],baryinput.site.location[1],baryinput.site.location[2]); /* convert start time to UTC GPS */ UTCMJDtoGPS(&TstartGPS, TstartUTCMJD, leap0); XLALPrintInfo ( "TstartGPS = %d %d\n",TstartGPS.gpsSeconds,TstartGPS.gpsNanoSeconds); /* convert back to test conversion */ UTCGPStoMJD(&MJDtest,&TstartGPS,leap0); deltaMJD ( &MJDdiff, &MJDtest, &TstartUTCMJD ); diff = (MJDdiff.days+MJDdiff.fracdays)*86400; if ( fabs(diff) > 1e-9) { fprintf(stderr,"ERROR : Time conversion gives discrepancy of %e sec. Exiting.\n",diff); return(-1); } XLALPrintInfo ( "MJD conversion gives discrepancies of %e sec\n",diff); /* define reference time in an MJD structure */ REAL8toMJD ( &TrefTDBMJD, uvar.TrefTDBMJD ); XLALPrintInfo ( "TrefTDBMJD converted to MJD days = %d fracdays = %6.12f\n",TrefTDBMJD.days,TrefTDBMJD.fracdays); /* convert reference time to TDB GPS */ TDBMJDtoGPS(&TrefSSB_TDB_GPS,TrefTDBMJD); XLALPrintInfo ( "TrefSSB_TDB_GPS = %d %d\n",TrefSSB_TDB_GPS.gpsSeconds,TrefSSB_TDB_GPS.gpsNanoSeconds); /* convert back to test conversion */ TDBGPStoMJD ( &MJDtest, TrefSSB_TDB_GPS, leap0 ); deltaMJD ( &MJDdiff, &MJDtest, &TrefTDBMJD ); diff = (MJDdiff.days+MJDdiff.fracdays)*86400; if ( fabs(diff) > 1e-9) { fprintf(stderr,"ERROR : Time conversion gives discrepancy of %e sec. Exiting.\n",diff); return(-1); } XLALPrintInfo ( "MJD conversion gives discrepancies of %e sec\n",diff); /* fill in required pulsar params structure for Barycentering */ LALDetector *site = NULL; site = (LALDetector *)LALMalloc(sizeof(LALDetector)); site->location[0] = baryinput.site.location[0]; site->location[1] = baryinput.site.location[1]; site->location[2] = baryinput.site.location[2]; pulsarparams.site = site; pulsarparams.pulsar.position.longitude = alpha; pulsarparams.pulsar.position.latitude = delta; pulsarparams.pulsar.position.system = COORDINATESYSTEM_EQUATORIAL; pulsarparams.ephemerides = edat; /* generate SSB initial TOA in GPS */ XLALConvertGPS2SSB ( &TstartSSB, TstartGPS, &pulsarparams); XLALPrintInfo ( "TstartSSB = %d %d\n",TstartSSB.gpsSeconds,TstartSSB.gpsNanoSeconds); /* define TOA end time in GPS */ temp = uvar.DurationMJD*86400.0; TendGPS = TstartGPS; XLALGPSAdd(&TendGPS, temp); XLALPrintInfo ( "GPS end time of TOAs = %d %d\n",TendGPS.gpsSeconds,TendGPS.gpsNanoSeconds); /* generate SSB end time in GPS (force integer seconds) */ XLALConvertGPS2SSB (&TendSSB,TendGPS,&pulsarparams); XLALPrintInfo ( "TendSSB = %d %d\n",TendSSB.gpsSeconds,TendSSB.gpsNanoSeconds); /* define TOA seperation in the SSB */ dt = uvar.DeltaTMJD*86400.0; n = (INT4)ceil(uvar.DurationMJD/uvar.DeltaTMJD); XLALPrintInfo ( "TOA seperation at SSB = %g sec\n",dt); XLALPrintInfo ( "number of TOAs to generate = %d\n",n); /* allocate memory for artificial SSB TOAs */ TSSB = (LIGOTimeGPS *)LALMalloc(n*sizeof(LIGOTimeGPS)); TOA = (MJDTime *)LALMalloc(n*sizeof(MJDTime)); /* generate artificial SSB TOAs given the phase model phi = 2*pi*(f0*(t-tref) + 0.5*fdot*(t-tref)^2) */ for (i=0;i<n;i++) { REAL8 dtref,fnow,cyclefrac,dtcor; LIGOTimeGPS tnow; /* define current interval */ XLALPrintInfo ( "current (t-tstart) = %g sec\n", i * dt); /* define current t */ tnow = TstartSSB; XLALGPSAdd(&tnow, i * dt); XLALPrintInfo ( "current t = %d %d\n",tnow.gpsSeconds,tnow.gpsNanoSeconds); /* define current t-tref */ dtref = XLALGPSDiff(&tnow,&TrefSSB_TDB_GPS); XLALPrintInfo ( "current (t - tref) = %9.12f\n",dtref); dtcor = 1; while (dtcor>1e-9) { /* define actual cycle fraction at requested time */ cyclefrac = fmod(uvar.f0*dtref + 0.5*uvar.fdot*dtref*dtref,1.0); XLALPrintInfo ( "cyclefrac = %9.12f\n",cyclefrac); /* define instantaneous frequency */ fnow = uvar.f0 + uvar.fdot*dtref; XLALPrintInfo ( "instananeous frequency = %9.12f\n",fnow); /* add correction to time */ dtcor = cyclefrac/fnow; dtref -= dtcor; XLALPrintInfo ( "timing correction = %9.12f\n",dtcor); XLALPrintInfo ( "corrected dtref to = %9.12f\n",dtref); } // while dtcor>1e-9 /* define time of zero phase */ TSSB[i] = TrefSSB_TDB_GPS; XLALGPSAdd(&TSSB[i], dtref); XLALPrintInfo ( "TSSB[%d] = %d %d\n",i,TSSB[i].gpsSeconds,TSSB[i].gpsNanoSeconds); } // for i < n /* loop over SSB time of arrivals and compute detector time of arrivals */ for (i=0;i<n;i++) { LIGOTimeGPS TSSBtest; LIGOTimeGPS GPStest; /* convert SSB to Detector time */ int ret = XLALConvertSSB2GPS ( &TDET, TSSB[i], &pulsarparams); if ( ret != XLAL_SUCCESS ) { XLALPrintError ("XLALConvertSSB2GPS() failed with xlalErrno = %d\n", xlalErrno ); return(-1); } XLALPrintInfo ( "converted SSB TOA %d %d -> Detector TOA %d %d\n",TSSB[i].gpsSeconds,TSSB[i].gpsNanoSeconds,TDET.gpsSeconds,TDET.gpsNanoSeconds); /* convert back for testing conversion */ XLALConvertGPS2SSB (&TSSBtest,TDET,&pulsarparams); diff = XLALGPSDiff(&TSSBtest,&TSSB[i]); if ( fabs(diff) > 1e-9) { fprintf(stderr,"ERROR : Time conversion gives discrepancy of %e sec. Exiting.\n",diff); return(-1); } XLALPrintInfo ( "SSB -> detector conversion gives discrepancies of %e sec\n",diff); /* recompute leap seconds incase they've changed */ leap = XLALGPSLeapSeconds (TDET.gpsSeconds); /* must now convert to an MJD time for TEMPO */ /* Using UTC conversion as used by Matt in his successful comparison */ UTCGPStoMJD (&tempTOA,&TDET,leap); XLALPrintInfo ( "output MJD time = %d %6.12f\n",tempTOA.days,tempTOA.fracdays); /* convert back to test conversion */ UTCMJDtoGPS ( &GPStest, tempTOA, leap ); diff = XLALGPSDiff(&TDET,&GPStest); if ( fabs(diff) > 1e-9) { fprintf(stderr,"ERROR. Time conversion gives discrepancy of %e sec. Exiting.\n",diff); return(-1); } XLALPrintInfo ( "MJD time conversion gives discrepancies of %e sec\n",diff); /* fill in results */ TOA[i].days = tempTOA.days; TOA[i].fracdays = tempTOA.fracdays; } // for i < n snprintf(tempstr,15,"%1.13f",TOA[0].fracdays); tempstr2 = tempstr+2; snprintf(TstartMJDstr,19,"%d.%s",TOA[0].days,tempstr2); XLALPrintInfo ( "Converted initial TOA MJD %d %6.12f to the string %s\n",TOA[0].days,TOA[0].fracdays,TstartMJDstr); snprintf(tempstr,15,"%1.13f",TOA[n-1].fracdays); tempstr2 = tempstr+2; snprintf(TfinishMJDstr,19,"%d.%s",TOA[n-1].days,tempstr2); XLALPrintInfo ( "*** Converted MJD to a string %s\n",TfinishMJDstr); XLALPrintInfo ( "Converted final TOA MJD %d %6.12f to the string %s\n",TOA[n-1].days,TOA[n-1].fracdays,TfinishMJDstr); /* define output file names */ sprintf(parfile,"%s.par",uvar.PSRJ); sprintf(timfile,"%s.tim",uvar.PSRJ); /* output to par file in format required by TEMPO 2 */ if ((fp = fopen(parfile,"w")) == NULL) { fprintf(stderr,"ERROR. Could not open file %s. Exiting.\n",parfile); return(-1); } fprintf(fp,"PSRJ\t%s\n",uvar.PSRJ); fprintf(fp,"RAJ\t%s\t1\n",RAJ); fprintf(fp,"DECJ\t%s\t1\n",DECJ); fprintf(fp,"PEPOCH\t%6.12f\n",uvar.TrefTDBMJD); fprintf(fp,"POSEPOCH\t%6.12f\n",uvar.TrefTDBMJD); fprintf(fp,"DMEPOCH\t%6.12f\n",uvar.TrefTDBMJD); fprintf(fp,"DM\t0.0\n"); fprintf(fp,"F0\t%6.16f\t1\n",uvar.f0); fprintf(fp,"F1\t%6.16f\t0\n",uvar.fdot); fprintf(fp,"START\t%s\n",TstartMJDstr); fprintf(fp,"FINISH\t%s\n",TfinishMJDstr); fprintf(fp,"TZRSITE\t%s\n",detcode); fprintf(fp,"CLK\tUTC(NIST)\n"); fprintf(fp,"EPHEM\tDE405\n"); fprintf(fp,"UNITS\tTDB\n"); fprintf(fp,"MODE\t0\n"); /* close par file */ fclose(fp); /* output to tim file in format required by TEMPO 2 */ if ((fp = fopen(timfile,"w")) == NULL) { fprintf(stderr,"ERROR. Could not open file %s. Exiting.\n",timfile); return(-1); } fprintf(fp,"FORMAT 1\n"); for (i=0;i<n;i++) { /* convert each TOA to a string for output */ snprintf(tempstr,18,"%1.16f",TOA[i].fracdays); tempstr2 = tempstr+2; snprintf(TOAstr,22,"%d.%s",TOA[i].days,tempstr2); fprintf(fp,"blank.dat\t1000.0\t%s\t1.0\t%s\n",TOAstr,detcode); XLALPrintInfo ( "Converting MJD time %d %6.16f to string %s\n",TOA[i].days,TOA[i].fracdays,TOAstr); } // for i < n /* close tim file */ fclose(fp); /* free memory */ XLALFree ( TSSB ); XLALFree ( TOA ); XLALFree ( site ); XLALDestroyEphemerisData ( edat ); XLALDestroyUserVars (); LALCheckMemoryLeaks(); return XLAL_SUCCESS; } /* main() */
/// /// test angle conversions between HMS and RAD: XLALTranslateHMStoRAD() and XLALTranslateRADtoHMS() /// int test_HMS_RAD ( void ) { REAL8 diff, tol = 3e-15; REAL8 rads, radsRef; const char *hmsRef; char *hms; hmsRef = "06:52:16.8750000"; radsRef = 1.79891631418447; // octave> hms_to_rad ( "6:52:16.875" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, hmsRef ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); /* test with form HH:MM */ hmsRef = "06:52"; radsRef = 1.797689129554159; // pulsarpputils.ra_to_rad ( "06:52" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, "06:52:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); /* test with form HH */ hmsRef = "06"; radsRef = 1.570796326794897; // pulsarpputils.ra_to_rad ( "06" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, "06:00:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); hmsRef = "00:52:16.8753234"; radsRef = 0.228120010907883; // octave> hms_to_rad ( "00:52:16.8753234" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, hmsRef ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); /* test with form HH:MM */ hmsRef = "00:52"; radsRef = 0.226892802759263; // pulsarpputils.ra_to_rad ( "00:52" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, "00:52:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); /* test with form HH */ hmsRef = "00"; radsRef = 0.0; // pulsarpputils.ra_to_rad ( "00" ) XLAL_CHECK ( XLALTranslateHMStoRAD ( &rads, hmsRef ) == XLAL_SUCCESS, XLAL_EFUNC ); XLAL_CHECK ( (diff=fabs(rads - radsRef)) < tol, XLAL_ETOL, "Result XLALTranslateHMStoRAD(%s)=%.16g differs from reference '%.16g' by %g > tolerance %g\n", hmsRef, rads, radsRef, diff, tol ); XLAL_CHECK ( (hms = XLALTranslateRADtoHMS ( rads )) != NULL, XLAL_EFUNC ); XLAL_CHECK ( strcmp ( hms, "00:00:00.0000000" ) == 0, XLAL_ETOL, "Returned hms string '%s' differs from input '%s'\n", hms, hmsRef ); XLALPrintInfo ("Translated HMS '%s' into %.16g rad, and back into '%s'\n", hmsRef, rads, hms ); XLALFree ( hms ); return XLAL_SUCCESS; } // test_HMS_RAD()