69 #include <lal/LALStdlib.h>
70 #include <lal/LALgetopt.h>
71 #include <lal/LALConstants.h>
72 #include <lal/AVFactories.h>
73 #include <lal/DetectorSite.h>
74 #include <lal/DetResponse.h>
76 #include <lal/Random.h>
79 "Usage: %s [options]\n" \
80 " -h Prints this message\n" \
81 " -c configFile Use this Configure File\n" \
82 " -d lalDebugLevel Set debug level\n" \
84 "NOTE: This program can only support filenames up to 25 characters\n" \
85 " in length in the config file (this is the string length so includes\n" \
86 " the directories in the name as well), but the configFile entered at\n" \
87 " the command line can be as long as you like.\n"
89 #define usage( program ) fprintf( stdout, usgfmt, program )
92 #define LALIND_PI_2 1.57079633
93 #define LALIND_PI 3.14159265
94 #define LALIND_TWOPI 6.28318531
96 #define LALIND_TIMETOLERANCE 32
116 int main(
int argc,
char *argv[] )
127 UINT4 lineSize = 80, valueSize = 25;
128 CHARVector *lineString = NULL, *valueString = NULL;
129 INT4 checkFileName = 0;
131 CHAR *configFileName = NULL;
132 FILE *configFile = NULL;
135 INT2 outputIndependentFPlusFCross;
136 INT2 outputLALFPlusFCross;
137 INT2 outputFPlusFCrossDiffs;
140 REAL4 maxFPlusDiff = 0.0;
141 REAL4 maxFCrossDiff = 0.0;
142 REAL4 tmpFPlusDiff = 0.0;
143 REAL4 tmpFCrossDiff = 0.0;
144 REAL4 tolerance = 0.0;
150 FILE *outFileFPlus = NULL, *outFileFCross = NULL;
151 FILE *outFileLALPlus = NULL, *outFileLALCross = NULL;
152 FILE *outFilePlusDiff = NULL, *outFileCrossDiff = NULL;
166 REAL8 indXArmAzimuthRadians = 0.0;
167 REAL8 indVertexLongitudeRadians = 0.0;
168 REAL8 indVertexLatitudeRadians = 0.0;
175 REAL8 sampleRate = 0, duration = 0;
176 UINT4 lgthDataSet = 0;
177 REAL8 phiStart = 0.0;
178 REAL8 phiStartLAL = 0.0;
187 while ( 0 < ( opt =
LALgetopt( argc, argv,
"hc:Ld:" ) ) )
210 configFile = fopen( configFileName,
"r" );
211 if(configFile == NULL){
212 fprintf( stderr,
"Error Opening ConfigFile\n" );
221 s = fgets(lineString->
data, lineSize, configFile);
224 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
229 strcpy(pulsar.
name,
"TEST");
233 s = fgets(lineString->
data, lineSize, configFile);
236 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
239 strncpy(valueString->data, lineString->
data, valueSize);
244 s = fgets(lineString->
data, lineSize, configFile);
247 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
250 strncpy(valueString->data, lineString->
data, valueSize);
255 s = fgets(lineString->
data, lineSize, configFile);
258 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
261 strncpy(valueString->data, lineString->
data, valueSize);
266 s = fgets(lineString->
data, lineSize, configFile);
269 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
272 strncpy(valueString->data, lineString->
data, valueSize);
274 gpsTime.
gpsSeconds = atol( valueString->data );
278 s = fgets(lineString->
data, lineSize, configFile);
281 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
284 strncpy(valueString->data, lineString->
data, valueSize);
285 sampleRate = atof( valueString->data );
288 s = fgets(lineString->
data, lineSize, configFile);
291 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
294 strncpy(valueString->data, lineString->
data, valueSize);
295 duration = atof( valueString->data );
298 lgthDataSet = (
UINT4)(duration * sampleRate);
301 s = fgets(lineString->
data, lineSize, configFile);
304 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
307 strncpy(valueString->data, lineString->
data, valueSize);
308 if(valueString->data[0] ==
'H') {
311 indXArmAzimuthRadians = 5.6548781395;
312 indVertexLongitudeRadians = -2.08405709267;
313 indVertexLatitudeRadians = 0.810795009136;
315 if(valueString->data[0] ==
'L') {
318 indXArmAzimuthRadians = 4.40317821503;
319 indVertexLongitudeRadians = -1.5843089819;
320 indVertexLatitudeRadians = 0.533423006535;
322 if(valueString->data[0] ==
'G') {
325 indXArmAzimuthRadians = 1.1936010122;
326 indVertexLongitudeRadians = 0.17116780435;
327 indVertexLatitudeRadians = 0.91184982752;
331 if(valueString->data[0] ==
'D') {
332 fprintf( stdout,
"Enter Properties of test detector\n" );
335 fprintf( stdout,
"Detector Longitude (radians): " );
339 fprintf(stderr,
"Error: Unable to read input\n");
350 fprintf( stdout,
"Detector Latitude (radians): " );
354 fprintf(stderr,
"Error: Unable to read input\n");
359 fprintf( stdout,
"Detector xArmAzimuth (radians): " );
363 fprintf(stderr,
"Error: Unable to read input\n");
382 s = fgets(lineString->
data, lineSize, configFile);
385 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
388 strncpy(valueString->data, lineString->
data, valueSize);
389 tolerance = atof( valueString->data );
393 s = fgets(lineString->
data, lineSize, configFile);
396 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
399 strncpy(valueString->data, lineString->
data, valueSize);
400 outputIndependentFPlusFCross = atoi( valueString->data );
402 if (outputIndependentFPlusFCross) {
404 s = fgets(lineString->
data, lineSize, configFile);
407 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
410 strncpy(valueString->data, lineString->
data, valueSize);
411 i=0; checkFileName = 0;
412 while( !checkFileName ) {
413 if(valueString->data[i] ==
' ') {
414 valueString->data[i] =
'\0';
419 outFileFPlus = fopen(valueString->data,
"w");
422 s = fgets(lineString->
data, lineSize, configFile);
425 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
428 strncpy(valueString->data, lineString->
data, valueSize);
429 i=0; checkFileName = 0;
430 while( !checkFileName ) {
431 if(valueString->data[i] ==
' ') {
432 valueString->data[i] =
'\0';
437 outFileFCross = fopen(valueString->data,
"w");
440 s = fgets(lineString->
data, lineSize, configFile);
443 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
446 s = fgets(lineString->
data, lineSize, configFile);
449 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
454 s = fgets(lineString->
data, lineSize, configFile);
457 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
460 strncpy(valueString->data, lineString->
data, valueSize);
461 outputLALFPlusFCross = atoi( valueString->data );
463 if (outputLALFPlusFCross) {
465 s = fgets(lineString->
data, lineSize, configFile);
468 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
471 strncpy(valueString->data, lineString->
data, valueSize);
472 i=0; checkFileName = 0;
473 while( !checkFileName ) {
474 if(valueString->data[i] ==
' ') {
475 valueString->data[i] =
'\0';
480 outFileLALPlus = fopen(valueString->data,
"w");
483 s = fgets(lineString->
data, lineSize, configFile);
486 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
489 strncpy(valueString->data, lineString->
data, valueSize);
490 i=0; checkFileName = 0;
491 while( !checkFileName ) {
492 if(valueString->data[i] ==
' ') {
493 valueString->data[i] =
'\0';
498 outFileLALCross = fopen(valueString->data,
"w");
501 s = fgets(lineString->
data, lineSize, configFile);
504 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
507 s = fgets(lineString->
data, lineSize, configFile);
510 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
515 s = fgets(lineString->
data, lineSize, configFile);
518 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
521 strncpy(valueString->data, lineString->
data, valueSize);
522 outputFPlusFCrossDiffs = atoi( valueString->data );
524 if (outputFPlusFCrossDiffs) {
527 s = fgets(lineString->
data, lineSize, configFile);
530 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
533 strncpy(valueString->data, lineString->
data, valueSize);
534 i=0; checkFileName = 0;
535 while( !checkFileName ) {
536 if(valueString->data[i] ==
' ') {
537 valueString->data[i] =
'\0';
542 outFilePlusDiff = fopen(valueString->data,
"w");
545 s = fgets(lineString->
data, lineSize, configFile);
548 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
551 strncpy(valueString->data, lineString->
data, valueSize);
552 i=0; checkFileName = 0;
553 while( !checkFileName ) {
554 if(valueString->data[i] ==
' ') {
555 valueString->data[i] =
'\0';
560 outFileCrossDiff = fopen(valueString->data,
"w");
563 s = fgets(lineString->
data, lineSize, configFile);
566 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
569 s = fgets(lineString->
data, lineSize, configFile);
572 fprintf(stderr,
"Error: Unable to read ConfigFile\n");
584 fprintf( stdout,
"Source Info:\n" );
589 fprintf( stdout,
"Sampling Rate (Hz): %f\n", sampleRate );
590 fprintf( stdout,
"Length of Data Set (seconds): %f\n", duration );
593 fprintf( stdout,
"Independent detector vertex longitude: %.11g\n", indVertexLongitudeRadians );
594 fprintf( stdout,
"Independent detector vertex latitude: %.11g\n", indVertexLatitudeRadians );
595 fprintf( stdout,
"Independent detector xArm Azimuth: %.11g\n", indXArmAzimuthRadians );
603 place_and_gps.
p_gps = &gpsTime;
608 phiStartLAL = fmod(phiStartLAL,
LAL_TWOPI);
610 fprintf(stdout,
"Local Mean Sidereal Time from LAL (radians) = %f\n", phiStartLAL);
622 if (indVertexLongitudeRadians > 0.0) {
623 phiStart = phiStart + indVertexLongitudeRadians;
629 fprintf( stdout,
"Local Mean Sidereal Time from independent code (radians) = %f\n", phiStart );
646 plus_series.
data = NULL;
647 cross_series.
data = NULL;
648 scalar_series.
data = NULL;
649 am_response_series.
pPlus = &(plus_series);
650 am_response_series.
pCross = &(cross_series);
651 am_response_series.
pScalar = &(scalar_series);
658 for(i = 0;i<lgthDataSet;i++)
660 timevec->
data[i] = i*(1.0/sampleRate);
664 fprintf(stdout,
"Computing Independent Response Functions.\n" );
672 fprintf(stdout,
"Computing Response Functions Using LAL.\n" );
679 if (outputIndependentFPlusFCross) {
681 for (i = 0;i<lgthDataSet; i++) {
683 fprintf(outFileFCross,
"%.15f\n", fCross->data[i]);
685 fclose(outFileFPlus);
686 fclose(outFileFCross);
688 if (outputLALFPlusFCross) {
690 for (i = 0; i < lgthDataSet; ++i) {
694 fclose(outFileLALPlus);
695 fclose(outFileLALCross);
700 if(
lalDebugLevel > 1)
fprintf( stdout,
"Computing differences LAL F_+ - Independent F_+ and LAL F_x - Independent F_x.\n" );
701 if (outputFPlusFCrossDiffs &&
lalDebugLevel > 1)
fprintf( stdout,
"Writing differences LAL F_+ - Independent F_+ and LAL F_x - Independent F_x to File.\n" );
704 for (i = 0; i < lgthDataSet; ++i) {
710 if (outputFPlusFCrossDiffs) {
711 fprintf(outFilePlusDiff,
"%.15f\n", tmpFPlusDiff);
712 fprintf(outFileCrossDiff,
"%.15f\n", tmpFCrossDiff);
715 tmpFPlusDiff = fabs(tmpFPlusDiff);
716 if (tmpFPlusDiff > maxFPlusDiff) maxFPlusDiff = tmpFPlusDiff;
717 tmpFCrossDiff = fabs(tmpFCrossDiff);
718 if (tmpFCrossDiff > maxFCrossDiff) maxFCrossDiff = tmpFCrossDiff;
729 if (outputFPlusFCrossDiffs) {
730 fclose(outFilePlusDiff);
731 fclose(outFileCrossDiff);
734 fprintf(stdout,
"\nmaxFPlusDiff, tolerance = %.6e, %.6e\n",maxFPlusDiff, tolerance );
735 fprintf(stdout,
"\nmaxFCrossDiff, tolerance = %.6e, %.6e\n",maxFCrossDiff, tolerance);
751 if (maxFPlusDiff > tolerance || maxFCrossDiff > tolerance) {
752 if (maxFPlusDiff > tolerance) {
753 fprintf(stderr,
"\nERROR: LAL F_+ - Independent F_+ Difference Test Failed!\n\n");
756 if (maxFCrossDiff > tolerance) {
757 fprintf(stderr,
"\nERROR: LAL F_x - Independent F_x Difference Test Failed!\n\n");
764 fprintf(stdout,
"\nALL LALIndependentTestDetResponse Tests Passed!\n");
777 REAL8 aCoeff, bCoeff;
785 REAL8 detLatitude = inputVertexLatitudeRadians;
789 for(i = 0;i<lgthDataSet; i++) {
798 aCoeff += 0.75*sin(2.0*gammaAngle)*cos(detLatitude)*cos(detLatitude)
830 fprintf( stdout,
"Detector struct location array = { %.6e, %.6e, %.6e },\n", detector->
location[0],
837 fprintf( stdout,
"frDetector struct vertex long. (radians), lat. (radians), elev. = %.11g, %.11g, %.11g\n",
842 fprintf( stdout,
"frDetector struct xarm azimuth, yarm azimuth, xarm altitude (clockwise from north), yarm altitude (all in radians) = %.11g, %.11g, %.11g, %.11g\n",
848 fprintf( stdout,
"Detector angle between arms and angle to arm bisector counter-clockwise from east = %.11g, %.11g\n", computedZeta, lal_gamma);
867 printf(
"Source Info\n");
871 printf(
"Detector location: (%7.4e, %7.4e, %7.4e)\n",
879 place_and_gps.
p_gps = gps;
881 det_and_pulsar.
pSource = pulsar;
886 fprintf(stdout,
"In GenerateResponseFuncUsingLAL LMST = %7e \n", lmsthours);
895 time_info.
deltaT = 1.0/sampleRate;
896 time_info.
nSample = lgthDataSet;
899 printf(
"Start computing AM response vectors\n");
911 printf(
"Done computing AM response vectors\n");
963 const REAL8 JD_12h_01_Jan_2000 = 2451545.0;
964 const REAL8 JD_00h_01_Jan_2000 = 2451544.5;
965 const REAL8 GPS_00h_01_Jan_2000 = 630720013;
966 const REAL8 TAIUTC_00h_01_Jan_2000 = 32;
975 t = gpssec - GPS_00h_01_Jan_2000;
977 t += taiutc - TAIUTC_00h_01_Jan_2000;
980 dpU = floor( t / ( 24.0 * 3600.0 ) );
982 dpU += JD_00h_01_Jan_2000 - JD_12h_01_Jan_2000;
989 + TpU * ( 8640184.812866
994 t = fmod( t, 24.0 * 3600.0 );
995 gmst += t * 1.002737909350795;
998 gmst = fmod( gmst / ( 24.0 * 3600.0 ), 1.0 );
@ LALDetectorIndexLLODIFF
@ LALDetectorIndexGEO600DIFF
@ LALDetectorIndexLHODIFF
int main(int argc, char *argv[])
#define LALIND_TIMETOLERANCE
REAL8 greenwich_mean_sidereal_time(INT4 gpssec, INT4 gpsnan, INT4 taiutc)
void GenerateResponseFuncNotUsingLAL(LALSource *pulsar, REAL8 inputXArmAzimuthRadians, REAL8 inputVertexLatitudeRadians, INT4 lgthDataSet, REAL8 phiStart, REAL8Vector *timevec, REAL8Vector *fPlus, REAL8Vector *fCross)
void PrintLALDetector(const LALDetector *detector)
void GenerateResponseFuncUsingLAL(LALStatus *status, LALSource *pulsar, LALDetector *detector, INT4 lgthDataSet, REAL8 sampleRate, LIGOTimeGPS *gps, LALDetAMResponseSeries *am_response_series_ptr)
#define CHECKSTATUSPTR(statusptr)
#define ATTATCHSTATUSPTR(statusptr)
#define DETATCHSTATUSPTR(statusptr)
#define INITSTATUS(statusptr)
#define RETURN(statusptr)
int LALgetopt(int argc, char *const *argv, const char *optstring)
LALDetector * XLALCreateDetector(LALDetector *detector, const LALFrDetector *frDetector, LALDetectorType type)
UNDOCUMENTED.
const LALDetector lalCachedDetectors[LAL_NUM_DETECTORS]
Pre-existing detectors.
void LALComputeDetAMResponse(LALStatus *status, LALDetAMResponse *pResponse, const LALDetAndSource *pDetAndSrc, const LIGOTimeGPS *gps)
void LALComputeDetAMResponseSeries(LALStatus *status, LALDetAMResponseSeries *pResponseSeries, const LALDetAndSource *pDetAndSource, const LALTimeIntervalAndNSample *pTimeInfo)
Computes REAL4TimeSeries containing time series of response amplitudes.
#define LAL_PI
Archimedes's constant, pi.
#define LAL_TWOPI
2*pi is circumference of a circle divided by its radius
double REAL8
Double precision real floating-point number (8 bytes).
int16_t INT2
Two-byte signed integer.
char CHAR
One-byte signed integer, see Headers LAL(Atomic)Datatypes.h for more details.
uint32_t UINT4
Four-byte unsigned integer.
int32_t INT4
Four-byte signed integer.
float REAL4
Single precision real floating-point number (4 bytes).
@ LALDETECTORTYPE_IFODIFF
IFO in differential mode.
@ COORDINATESYSTEM_EQUATORIAL
The sky-fixed equatorial coordinate system.
void LALCHARCreateVector(LALStatus *, CHARVector **, UINT4)
void LALCHARDestroyVector(LALStatus *, CHARVector **)
void LALDCreateVector(LALStatus *, REAL8Vector **, UINT4)
void LALDDestroyVector(LALStatus *, REAL8Vector **)
void LALSDestroyVector(LALStatus *, REAL4Vector **)
void LALSCreateVector(LALStatus *, REAL4Vector **, UINT4)
REAL8 XLALGreenwichMeanSiderealTime(const LIGOTimeGPS *gpstime)
Convenience wrapper, calling XLALGreenwichSiderealTime() with the equation of equinoxes set to 0.
Vector of type CHAR, see DATATYPE-Vector types for more details.
CHAR * data
Pointer to the data array.
This structure encapsulates the detector AM (beam pattern) coefficients for one source at one instanc...
This structure aggregates together three REAL4TimeSeries objects containing time series of detector A...
REAL4TimeSeries * pCross
timeseries of detector response to -polarized gravitational radiation
REAL4TimeSeries * pPlus
timeseries of detector response to -polarized gravitational radiation
REAL4TimeSeries * pScalar
timeseries of detector response to scalar gravitational radiation (NB: not yet implemented....
This structure aggregates a pointer to a LALDetector and a LALSource.
LALSource * pSource
Pointer to LALSource object containing information about the source.
const LALDetector * pDetector
Pointer to LALDetector object containing information about the detector.
REAL8 location[3]
The three components, in an Earth-fixed Cartesian coordinate system, of the position vector from the ...
LALFrDetector frDetector
The original LALFrDetector structure from which this was created.
Detector frame data structure Structure to contain the data that appears in a FrDetector structure in...
REAL8 vertexLongitudeRadians
The geodetic longitude of the vertex in radians.
REAL8 vertexLatitudeRadians
The geodetic latitude of the vertex in radians.
REAL4 vertexElevation
The height of the vertex above the reference ellipsoid in meters.
REAL4 xArmAzimuthRadians
The angle clockwise from North to the projection of the X arm (or bar's cylidrical axis) into the lo...
REAL4 yArmAltitudeRadians
The angle up from the local tangent plane of the reference ellipsoid to the Y arm in radians (unused...
REAL4 yArmAzimuthRadians
The angle clockwise from North to the projection of the Y arm into the local tangent plane of the re...
REAL4 xArmAltitudeRadians
The angle up from the local tangent plane of the reference ellipsoid to the X arm (or bar's cylidric...
CHAR name[LALNameLength]
A unique identifying string.
This structure stores pointers to a LALDetector and a LIGOTimeGPS.
LIGOTimeGPS * p_gps
Pointer to a GPS time structure.
const LALDetector * p_detector
pointer to a detector
This structure contains gravitational wave source position (in Equatorial coördinates),...
SkyPosition equatorialCoords
equatorial coordinates of source, in decimal RADIANS
REAL8 orientation
Orientation angle ( ) of source: counter-clockwise angle -axis makes with a line perpendicular to mer...
CHAR name[LALNameLength]
name of source, eg catalog number
LAL status structure, see The LALStatus structure for more details.
This structure encapsulates time and sampling information for computing a LALDetAMResponseSeries.
LIGOTimeGPS epoch
The start time of the time series.
UINT4 nSample
The total number of samples to be computed.
REAL8 deltaT
The sampling interval , in seconds.
Epoch relative to GPS epoch, see LIGOTimeGPS type for more details.
INT4 gpsSeconds
Seconds since 0h UTC 6 Jan 1980.
INT4 gpsNanoSeconds
Residual nanoseconds.
Time series of REAL4 data, see DATATYPE-TimeSeries types for more details.
REAL4Sequence * data
The sequence of sampled data.
REAL4 * data
Pointer to the data array.
Vector of type REAL8, see DATATYPE-Vector types for more details.
REAL8 * data
Pointer to the data array.
REAL8 longitude
The longitudinal coordinate (in radians), as defined above.
REAL8 latitude
The latitudinal coordinate (in radians), as defined above.
CoordinateSystem system
The coordinate system in which latitude/longitude are expressed.