28#include <lal/LALStdio.h>
29#include <lal/LALgetopt.h>
30#include <lal/AVFactories.h>
31#include <lal/ConfigFile.h>
32#include <lal/LALFrameIO.h>
33#include <lal/LALFrStream.h>
34#include <lal/LALDetectors.h>
35#include <lal/NRWaveIO.h>
36#include <lal/NRWaveInject.h>
37#include <lal/TimeSeries.h>
43#define PROGRAM_NAME "lalapps_fr_ninja"
47#define HISTORY_COMMENT 512
75 CHAR *nrMetaFile = NULL;
76 CHAR *nrDataDir = NULL;
77 CHAR file_path[FILENAME_MAX];
80 CHAR *metadata_format = NULL;
89 CHAR *md_mass_ratio = NULL;
90 CHAR *md_spin1x = NULL;
91 CHAR *md_spin1y = NULL;
92 CHAR *md_spin1z = NULL;
93 CHAR *md_spin2x = NULL;
94 CHAR *md_spin2y = NULL;
95 CHAR *md_spin2z = NULL;
96 CHAR *md_freq_start_22 = NULL;
99 CHAR *md_simulation_details = NULL;
100 CHAR *md_nr_group = NULL;
101 CHAR *md_email = NULL;
104 CHAR *md_waveform_name = NULL;
105 CHAR *md_initial_separation = NULL;
106 CHAR *md_eccentricity = NULL;
107 CHAR *md_number_of_cycles_22 = NULL;
108 CHAR *md_code = NULL;
109 CHAR *md_submitter_email = NULL;
110 CHAR *md_authors_emails = NULL;
153 CHAR *frame_name = NULL;
158 INT4 generatingREAL8 = 0;
183 int option_index = 0;
184 size_t LALoptarg_len;
196 if (long_options[option_index].
flag != 0)
200 fprintf(stderr,
"Error parsing option %s with argument %s\n", long_options[option_index].
name,
LALoptarg);
213 fprintf(stdout,
"Numerical Relativity Frame Generation\n");
221 metadata_format = (
CHAR *)calloc(LALoptarg_len,
sizeof(
CHAR));
222 memcpy(metadata_format,
LALoptarg, LALoptarg_len);
228 nrMetaFile = (
CHAR *)calloc(LALoptarg_len,
sizeof(
CHAR));
229 memcpy(nrMetaFile,
LALoptarg, LALoptarg_len);
235 nrDataDir = (
CHAR *)calloc(LALoptarg_len,
sizeof(
CHAR));
236 memcpy(nrDataDir,
LALoptarg, LALoptarg_len);
242 frame_name = (
CHAR *)calloc(LALoptarg_len,
sizeof(
CHAR));
243 memcpy(frame_name,
LALoptarg, LALoptarg_len);
257 fprintf(stderr,
"Unknown error while parsing arguments\n");
267 fprintf(stderr,
"Extraneous command line arguments:\n");
278 if (metadata_format == NULL)
280 fprintf(stderr,
"warning: --format not specified, assuming NINJA1\n");
281 metadata_format = (
CHAR *)calloc(7,
sizeof(
CHAR));
282 memcpy(metadata_format,
"NINJA1", 7);
286 if (strcmp(metadata_format,
"NINJA1") == 0);
287 else if (strcmp(metadata_format,
"NINJA2") == 0);
290 fprintf(stderr,
"Supported metadata formats are NINJA1 and NINJA2 (%s specified)\n", metadata_format);
295 if (nrMetaFile == NULL)
297 fprintf(stderr,
"--nr-meta-file must be specified\n");
302 if (nrDataDir == NULL)
304 fprintf(stderr,
"--nr-data-dir must be specified\n");
309 if (frame_name == NULL)
311 fprintf(stderr,
"--output must be specified\n");
322 epoch.gpsSeconds = 0;
323 epoch.gpsNanoSeconds = 0;
327 fprintf(stdout,
"reading metadata: %s\n", nrMetaFile);
346 if (strcmp(metadata_format,
"NINJA1") == 0)
354 else if (strcmp(metadata_format,
"NINJA2") == 0)
369 fprintf(stderr,
"error: unsupported metadata format: %s\n", metadata_format);
378 snprintf(str_mass_ratio,
HISTORY_COMMENT,
"mass-ratio:%s", md_mass_ratio);
388 if (strcmp(metadata_format,
"NINJA1") == 0)
391 snprintf(str_freq_start_22,
HISTORY_COMMENT,
"freqStart22:%s", md_freq_start_22);
392 snprintf(str_simulation_details,
HISTORY_COMMENT,
"simulation-details:%s", md_simulation_details);
396 else if (strcmp(metadata_format,
"NINJA2") == 0)
399 snprintf(str_waveform_name,
HISTORY_COMMENT,
"waveform-name:%s", md_waveform_name);
400 snprintf(str_initial_separation,
HISTORY_COMMENT,
"inital-separation:%s", md_initial_separation);
401 snprintf(str_eccentricity,
HISTORY_COMMENT,
"eccentricity:%s", md_eccentricity);
402 snprintf(str_freq_start_22,
HISTORY_COMMENT,
"freq_start_22:%s", md_freq_start_22);
403 snprintf(str_number_of_cycles_22,
HISTORY_COMMENT,
"number-of-cycles-22:%s", md_number_of_cycles_22);
405 snprintf(str_submitter_email,
HISTORY_COMMENT,
"submitter-email:%s", md_submitter_email);
406 snprintf(str_authors_emails,
HISTORY_COMMENT,
"authors-emails:%s", md_authors_emails);
411 fprintf(stderr,
"error: unsupported metadata format: %s\n", metadata_format);
433 if (strcmp(metadata_format,
"NINJA1") == 0)
441 else if (strcmp(metadata_format,
"NINJA2") == 0)
456 fprintf(stderr,
"error: unsupported metadata format: %s\n", metadata_format);
466 wf_name[
l][
m] = NULL;
467 plus_channel[
l][
m] = NULL;
468 cross_channel[
l][
m] = NULL;
476 hplusREAL8[
l][
m] = NULL;
477 hcrossREAL8[
l][
m] = NULL;
478 waveformsREAL8[
l][
m] = NULL;
488 waveforms[
l][
m] = NULL;
500 if (wf_name[
l][
m] != NULL)
503 snprintf(file_path, FILENAME_MAX,
"%s/%s", nrDataDir, wf_name[
l][
m]);
506 fprintf(stdout,
"reading waveform: %s\n", file_path);
523 if (generatingREAL8) {
524 if (waveformsREAL8[
l][
m])
527 wf_length = waveformsREAL8[
l][
m]->data->vectorLength;
534 hplusREAL8[
l][
m]->deltaT = waveformsREAL8[
l][
m]->deltaT;
535 hcrossREAL8[
l][
m]->deltaT = waveformsREAL8[
l][
m]->deltaT;
538 for (
i = 0;
i < wf_length;
i ++) {
539 hplusREAL8[
l][
m]->data->data[
i] = waveformsREAL8[
l][
m]->data->data[
i];
540 hcrossREAL8[
l][
m]->data->data[
i] = waveformsREAL8[
l][
m]->data->data[wf_length +
i];
554 wf_length = waveforms[
l][
m]->data->vectorLength;
561 hplus[
l][
m]->deltaT = waveforms[
l][
m]->deltaT;
562 hcross[
l][
m]->deltaT = waveforms[
l][
m]->deltaT;
565 for (
i = 0;
i < wf_length;
i ++) {
566 hplus[
l][
m]->data->data[
i] = waveforms[
l][
m]->data->data[
i];
567 hcross[
l][
m]->data->data[
i] = waveforms[
l][
m]->data->data[wf_length +
i];
575 if ((hplusREAL8[
l][
m]->
data->length) && (hcrossREAL8[
l][
m]->data->length))
583 if ((hplus[
l][
m]->
data->length) && (hcross[
l][
m]->data->length))
593 fprintf(stdout,
"writing frame: %s\n", frame_name);
598 fprintf(stderr,
"Error: Cannot save frame file '%s'\n", frame_name);
607 if(nrMetaFile) free(nrMetaFile);
608 if(nrDataDir) free(nrDataDir);
609 if(frame_name) free(frame_name);
610 if(metadata_format) free(metadata_format);
613 if(md_mass_ratio)
LALFree(md_mass_ratio);
614 if(md_spin1x)
LALFree(md_spin1x);
615 if(md_spin1y)
LALFree(md_spin1y);
616 if(md_spin1z)
LALFree(md_spin1z);
617 if(md_spin2x)
LALFree(md_spin2x);
618 if(md_spin2y)
LALFree(md_spin2y);
619 if(md_spin2z)
LALFree(md_spin2z);
620 if(md_freq_start_22)
LALFree(md_freq_start_22);
623 if(md_simulation_details)
LALFree(md_simulation_details);
624 if(md_nr_group)
LALFree(md_nr_group);
625 if(md_email)
LALFree(md_email);
628 if(md_waveform_name)
LALFree(md_waveform_name);
629 if(md_initial_separation)
LALFree(md_initial_separation);
630 if(md_eccentricity)
LALFree(md_eccentricity);
631 if(md_number_of_cycles_22)
LALFree(md_number_of_cycles_22);
633 if(md_submitter_email)
LALFree(md_submitter_email);
634 if(md_authors_emails)
LALFree(md_authors_emails);
642 if(meta_file)
LALFree(meta_file);
652 if (plus_channel[
l][
m])
655 if (cross_channel[
l][
m])
662 if (hplusREAL8[
l][
m])
666 if (hcrossREAL8[
l][
m])
678 if (plus_channel[
l][
m])
681 if (cross_channel[
l][
m])
688 if (waveforms[
l][
m]) {
719 "Usage: %s [options\n"\
720 "[--help display this message and exit]\n"\
721 "[--version print version information and exit]\n"\
722 "[--verbose display progress information]\n"\
723 "[--format FORMAT metadata format, defaults to NINJA1]\n"\
724 "[--double-precision generate REAL8 files, default is REAL4]\n"\
725 " --nr-meta-file FILE file containing the details of the available\n"\
726 " numerical relativity waveforms\n"\
727 " --nr-data-dir DIR directory containing the numerical relativity\n"\
729 " --output FILE name of output frame file\n",
program);
int XLALReadConfigSTRINGVariable(CHAR **varp, LALParsedDataFile *cfgdata, const CHAR *secName, const CHAR *varName, BOOLEAN *wasRead)
const LALVCSInfoList lalAppsVCSInfoList
NULL-terminated list of VCS and build information for LALApps and its dependencies
const LALVCSInfo lalAppsVCSInfo
VCS and build information for LALApps.
lal_errhandler_t lal_errhandler
int LAL_ERR_EXIT(LALStatus *stat, const char *func, const char *file, const int line, volatile const char *id)
#define LAL_CALL(function, statusptr)
void LALCheckMemoryLeaks(void)
int LALgetopt_long_only(int argc, char *const *argv, const char *options, const struct LALoption *long_options, int *opt_index)
#define required_argument
static void print_usage(FILE *ptr, CHAR *program)
INT4 main(INT4 argc, CHAR **argv)
int vrbflg
defined in lal/lib/std/LALError.c
int XLALParseDataFile(LALParsedDataFile **cfgdata, const CHAR *fname)
#define XLAL_INIT_DECL(var,...)
int XLALFrameAddREAL8TimeSeriesSimData(LALFrameH *frame, const REAL8TimeSeries *series)
LALFrameUFrameH LALFrameH
int XLALFrameAddFrHistory(LALFrameH *frame, const char *name, const char *comment)
int XLALFrameWrite(LALFrameH *frame, const char *fname)
int XLALFrameAddREAL4TimeSeriesSimData(LALFrameH *frame, const REAL4TimeSeries *series)
LALFrameH * XLALFrameNew(const LIGOTimeGPS *epoch, double duration, const char *project, int run, int frnum, INT8 detectorFlags)
void XLALFrameFree(LALFrameH *frame)
int XLALOutputVCSInfo(FILE *fp, const LALVCSInfoList vcs_list, const int verbose, const char *prefix)
void LALReadNRWave_raw_real8(LALStatus *status, REAL8TimeVectorSeries **out, const CHAR *filename)
void LALReadNRWave_raw(LALStatus *status, REAL4TimeVectorSeries **out, const CHAR *filename)
CHAR * XLALGetNinjaChannelName(const CHAR *polarisation, UINT4 l, INT4 m)
REAL4TimeSeries * XLALCreateREAL4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL8TimeSeries(REAL8TimeSeries *series)
REAL8TimeSeries * XLALResizeREAL8TimeSeries(REAL8TimeSeries *series, int first, size_t length)
void XLALDestroyREAL4TimeSeries(REAL4TimeSeries *series)
REAL8TimeSeries * XLALCreateREAL8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
REAL4TimeSeries * XLALResizeREAL4TimeSeries(REAL4TimeSeries *series, int first, size_t length)
const LALUnit lalDimensionlessUnit
#define XLAL_CHECK(assertion,...)
char name[LIGOMETA_SOURCE_MAX]