37#include <lal/LALConfig.h>
38#include <lal/LALStdio.h>
39#include <lal/LALStdlib.h>
40#include <lal/LALError.h>
41#include <lal/LALDatatypes.h>
42#include <lal/LIGOLwXML.h>
43#include <lal/LIGOLwXMLRead.h>
44#include <lal/LIGOMetadataInspiralUtils.h>
45#include <lal/LIGOMetadataTables.h>
46#include <lal/LIGOMetadataUtils.h>
47#include <lal/AVFactories.h>
48#include <lal/NRWaveIO.h>
49#include <lal/NRWaveInject.h>
50#include <lal/FileIO.h>
52#include <lal/FrequencySeries.h>
53#include <lal/TimeSeries.h>
54#include <lal/TimeFreqFFT.h>
55#include <lal/VectorOps.h>
56#include <lal/LALDetectors.h>
57#include <lal/LALFrameIO.h>
58#include <lal/UserInput.h>
60#include <lal/LALFrStream.h>
61#include <lal/LogPrintf.h>
68#define PROGRAM_NAME "lalapps_ninja"
127 FrameH *frame = NULL;
128 FrFile *frFile = NULL;
144 CHAR *uvar_nrDir = NULL;
145 CHAR *uvar_pattern = NULL;
146 CHAR *uvar_nrGroup = NULL;
147 CHAR *uvar_outFile = NULL;
148 CHAR *uvar_format = NULL;
149 REAL8 uvar_minMassRatio = 1, uvar_maxMassRatio = 0;
150 REAL8 uvar_minSx1 = -1, uvar_minSx2 = -1, uvar_maxSx1 = 1, uvar_maxSx2 = 1;
151 REAL8 uvar_minSy1 = -1, uvar_minSy2 = -1, uvar_maxSy1 = 1, uvar_maxSy2 = 1;
152 REAL8 uvar_minSz1 = -1, uvar_minSz2 = -1, uvar_maxSz1 = 1, uvar_maxSz2 = 1;
153 REAL8 uvar_freqLo = 40;
154 INT4 uvar_minMode = 2, uvar_maxMode = 2;
161 strcpy(uvar_outFile,
"ninja_out.xml");
165 strcpy(uvar_format,
"NINJA1");
204 if (strcmp(uvar_format,
"NINJA1") == 0);
205 else if (strcmp(uvar_format,
"NINJA2") == 0);
208 fprintf(stderr,
"Supported metadata formats are NINJA1 and NINJA2 (%s specified)\n", uvar_format);
212 range.massRatioMin = uvar_minMassRatio;
213 range.massRatioMax = uvar_maxMassRatio;
215 range.sx1Min = uvar_minSx1;
216 range.sx1Max = uvar_maxSx1;
218 range.sx2Min = uvar_minSx2;
219 range.sx2Max = uvar_maxSx2;
221 range.sy1Min = uvar_minSy1;
222 range.sy1Max = uvar_maxSy1;
224 range.sy2Min = uvar_minSy2;
225 range.sy2Max = uvar_maxSy2;
227 range.sz1Min = uvar_minSz1;
228 range.sz1Max = uvar_maxSz1;
230 range.sz2Min = uvar_minSz2;
231 range.sz2Max = uvar_maxSz2;
247 fprintf(stderr,
"error: no numrel frame files found\n");
266 path+=strlen(
"://localhost");
268 frFile = FrFileINew(
path);
270 frame = FrameRead(frFile);
279 INT4 minMode, maxMode;
291 this_inj->
eta = 1.0 / (tmp * tmp);
354 if (
range.grouplist != NULL)
369 CHAR *metadata_format)
371 UINT4 stringlen = 128;
373 FrHistory *localhist;
382 if (strlen(localhist->comment) + 1 > stringlen)
384 stringlen = strlen(localhist->comment) + 1;
388 strcpy(
comment,localhist->comment);
390 localhist = localhist->next;
400 CHAR *metadata_format)
403 CHAR *thiscomment = NULL;
408 token = strtok(thiscomment,
":");
410 if (strstr(token,
"spin1x"))
412 token = strtok(NULL,
":");
413 data->spin1[0] = atof(token);
418 if (strstr(token,
"spin1y"))
420 token = strtok(NULL,
":");
421 data->spin1[1] = atof(token);
426 if (strstr(token,
"spin1z"))
428 token = strtok(NULL,
":");
429 data->spin1[2] = atof(token);
434 if (strstr(token,
"spin2x"))
436 token = strtok(NULL,
":");
437 data->spin2[0] = atof(token);
442 if (strstr(token,
"spin2y"))
444 token = strtok(NULL,
":");
445 data->spin2[1] = atof(token);
450 if (strstr(token,
"spin2z"))
452 token = strtok(NULL,
":");
453 data->spin2[2] = atof(token);
458 if (strstr(token,
"mass-ratio"))
460 token = strtok(NULL,
":");
461 data->massRatio = atof(token);
466 if (strcmp(metadata_format,
"NINJA1") == 0)
468 if (strstr(token,
"freqStart22"))
470 token = strtok(NULL,
":");
471 data->freqStart22 = atof(token);
476 else if (strcmp(metadata_format,
"NINJA2") == 0)
478 if (strstr(token,
"freq_start_22"))
480 token = strtok(NULL,
":");
481 data->freqStart22 = atof(token);
488 fprintf(stderr,
"Supported metadata formats are NINJA1 and NINJA2 (%s specified)\n", metadata_format);
492 if (strstr(token,
"nr-group"))
494 token = strtok(NULL,
":");
514 flag = (
data->massRatio >=
range->massRatioMin) && (
data->massRatio <=
range->massRatioMax);
515 flag = flag && (
data->spin1[0] >=
range->sx1Min) && (
data->spin1[0] <=
range->sx1Max);
516 flag = flag && (
data->spin2[0] >=
range->sx2Min) && (
data->spin2[0] <=
range->sx2Max);
517 flag = flag && (
data->spin1[1] >=
range->sy1Min) && (
data->spin1[1] <=
range->sy1Max);
518 flag = flag && (
data->spin2[1] >=
range->sy2Min) && (
data->spin2[1] <=
range->sy2Max);
519 flag = flag && (
data->spin1[2] >=
range->sz1Min) && (
data->spin1[2] <=
range->sz1Max);
520 flag = flag && (
data->spin2[2] >=
range->sz2Min) && (
data->spin2[2] <=
range->sz2Max);
522 for (
k = 0;
k <
range->numGroups;
k++)
530 if (
range->numGroups == 0)
533 flag = flag && groupflag;
550 INT4 mode_l = -1, mode_m, locmin, locmax;
555 sim = frame->simData;
583 tmp = strstr(
name,
"hcross_");
586 tmp += strlen(
"hcross_") + 1;
588 tmp = strstr(tmp,
"m");
591 if (!strncmp(tmp,
"p", 1))
594 if (!strncmp(tmp,
"n", 1))
598 *mode_m = sign * atoi(tmp);
602 tmp = strstr(
name,
"hplus_");
605 tmp += strlen(
"hplus_") + 1;
607 tmp = strstr(tmp,
"m");
610 if (!strncmp(tmp,
"p", 1))
613 if (!strncmp(tmp,
"n", 1))
617 *mode_m = sign * atoi(tmp);
636 CHAR *thislist = NULL;
642 strcpy(thislist, list);
644 token = strtok(thislist,
";");
654 grouplist =
LALRealloc(grouplist, numGroups *
sizeof(*grouplist));
655 grouplist[numGroups - 1] = thisGroup;
657 token = strtok(NULL,
";");
663 range->numGroups = numGroups;
664 range->grouplist = grouplist;
const LALVCSInfoList lalAppsVCSInfoList
NULL-terminated list of VCS and build information for LALApps and its dependencies
const LALVCSInfo lalAppsVCSIdentInfo
Identable 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)
void LALCheckMemoryLeaks(void)
int XLALCloseLIGOLwXMLFile(LIGOLwXMLStream *xml)
LIGOLwXMLStream * XLALOpenLIGOLwXMLFile(const char *path)
int XLALWriteLIGOLwXMLProcessTable(LIGOLwXMLStream *, const ProcessTable *)
int XLALWriteLIGOLwXMLSimInspiralTable(LIGOLwXMLStream *, const SimInspiralTable *)
LIGOTimeGPS * XLALGPSTimeNow(LIGOTimeGPS *gpstime)
void XLALDestroyCache(LALCache *cache)
LALCache * XLALCacheGlob(const char *dirstr, const char *fnptrn)
LALCache * XLALCacheDuplicate(const LALCache *cache)
#define XLAL_INIT_DECL(var,...)
void void LogPrintfVerbatim(LogLevel_t, const char *format,...) _LAL_GCC_PRINTF_FORMAT_(2
void LogPrintf(LogLevel_t, const char *format,...) _LAL_GCC_PRINTF_FORMAT_(2
NumRelGroup XLALParseNumRelGroupName(CHAR *name)
#define XLAL_CHECK_MAIN(assertion,...)
CHAR comment[LIGOMETA_COMMENT_MAX]
SimInspiralTable * injections
char name[LIGOMETA_SOURCE_MAX]
static int get_metadata_from_string(NinjaMetaData *data, CHAR *comment, CHAR *metadata_format)
static int get_mode_index_from_channel_name(INT4 *mode_l, INT4 *mode_m, CHAR *name)
static int get_nr_metadata_from_framehistory(NinjaMetaData *data, FrHistory *history, CHAR *metadata_format)
static int get_minmax_modes(INT4 *min, INT4 *max, FrameH *frame)
int main(INT4 argc, CHAR *argv[])
int vrbflg
defined in lal/lib/std/LALError.c
static int parse_group_list(NrParRange *range, CHAR *list)
take a list of numrel group names separated by ";" and parse it to get a vector of NumRelGroup
static int metadata_in_range(NinjaMetaData *data, NrParRange *range)
const char *const vcsDate
const char *const vcsStatus
CHAR comment[LIGOMETA_COMMENT_MAX]
struct tagSimInspiralTable * next
CHAR numrel_data[LIGOMETA_STRING_MAX]