43#include <lal/LALConfig.h>
44#include <lal/LALgetopt.h>
45#include <lal/LALStdio.h>
46#include <lal/LALStdlib.h>
47#include <lal/LALError.h>
48#include <lal/LALDatatypes.h>
49#include <lal/AVFactories.h>
50#include <lal/LIGOLwXML.h>
51#include <lal/LIGOLwXMLRead.h>
52#include <lal/LIGOMetadataTables.h>
53#include <lal/LIGOMetadataUtils.h>
54#include <lal/GenerateInspiral.h>
55#include <lal/TimeFreqFFT.h>
56#include <lal/Interpolate.h>
57#include <lal/TimeSeries.h>
58#include <lal/VectorOps.h>
61#include <lal/LALInspiral.h>
62#include <lal/LALInspiralBank.h>
66#define CVS_ID_STRING "$Id$"
67#define CVS_NAME_STRING "$Name$"
68#define CVS_REVISION "$Revision$"
69#define CVS_SOURCE "$Source$"
70#define CVS_DATE "$Date$"
71#define PROGRAM_NAME "tmpltbank"
79tagTemplateWaveformPairs
83 struct tagTemplateWaveformPairs *
next;
123 mantissa = frexp(
x, &exponent);
127 else if (mantissa == 0.5)
128 return ldexp((
REAL4) 1., exponent - 1);
130 return ldexp((
REAL4) 1., exponent);
138 tmp1 = pow(mchirp /
m, 5.);
139 tmp2 =
tmp1 * (-9. + pow(3., .5) * pow(27. + 4.*
tmp1, .5) ) / 18.;
140 tmp2 = pow(tmp2, 1./3.);
141 qmax1 = tmp2 +
tmp1 / 3. / tmp2;
144 tmp2 = pow(mchirp, 5./3.) * pow(
M, 1./3.);
148 return qmax1 < qmax2 ? qmax1 : qmax2;
169 sscanf(
line,
"%e\t%le", &
f0, &junk);
171 sscanf(
line,
"%e\t%le", &
f1, &junk);
197 for (
i = 0;
i <
N / 2 + 1;
i++)
202 if ( tmpf < fLow || tmpf >
fHigh )
204 psd->data->data[
i] = 0.;
206 psd->data->data[
N -
i] = 0.;
210 for (
j=2;
j < 10;
j++)
213 if ( (tmpS == 0. && dS < 1
e-5) || (fabs(dS / tmpS) < 1
e-5) )
217 psd->data->data[
i] = tmpS;
219 psd->data->data[
N -
i] = tmpS;
227int main (
int argc,
char *argv[] )
266 COMPLEX8FFTPlan *fwdp = NULL;
267 COMPLEX8FFTPlan *revp = NULL;
306 fprintf( stdout,
"obtaining random seed from /dev/urandom: " );
309 fpRand = fopen(
"/dev/urandom",
"r" );
312 for ( randByte = 0; randByte < 4 ; ++randByte )
314 INT4 tmpSeed = (
INT4) fgetc( fpRand );
321 perror(
"error obtaining random seed from /dev/urandom" );
328 fprintf( stdout,
"using user specified random seed: " );
420 q = (qmax - 1.) * randfloat;
427 M = mchirp / pow(
eta, 0.6);
479 tmpWvTmpltPr = headWvTmpltPr;
496 tmpWvTmpltPr = tmpWvTmpltPr->
next;
504 if ( ! templateBank )
506 thisTmplt = templateBank =
511 thisTmplt = thisTmplt->
next =
518 thisTmplt->
eta = newTmplt.
eta;
519 thisTmplt->
tau0 = newTmplt.
t0;
520 thisTmplt->
tau2 = newTmplt.
t2;
521 thisTmplt->
tau3 = newTmplt.
t3;
522 thisTmplt->
tau4 = newTmplt.
t4;
523 thisTmplt->
tau5 = newTmplt.
t5;
528 thisTmplt->
eta = newTmplt.
eta;
534 if (thisWvTmpltPr == NULL)
539 thisWvTmpltPr = thisWvTmpltPr->
next;
543 if (headWvTmpltPr == NULL)
544 headWvTmpltPr = thisWvTmpltPr;
562 snprintf(
fname,
sizeof(
fname),
"P1-TMPLTBANK_%s-%d-%d.xml",
568 snprintf(
fname,
sizeof(
fname),
"P1-TMPLTBANK_%s-%d-%d.xml.gz",
574 snprintf(
fname,
sizeof(
fname),
"P1-TMPLTBANK-%d-%d.xml.gz",
580 snprintf(
fname,
sizeof(
fname),
"P1-TMPLTBANK-%d-%d.xml",
595 procparams = procparams->
next;
596 free( emptyPPtable );
607 while ( templateBank )
609 thisTmplt = templateBank;
610 templateBank = templateBank->
next;
621 while (headWvTmpltPr)
623 thisWvTmpltPr = headWvTmpltPr;
624 headWvTmpltPr = headWvTmpltPr->
next;
646#define ADD_PROCESS_PARAM( pptype, format, ppvalue ) \
647this_proc_param = this_proc_param->next = (ProcessParamsTable *) \
648 calloc( 1, sizeof(ProcessParamsTable) ); \
649 snprintf( this_proc_param->program, LIGOMETA_PROGRAM_MAX, "%s", \
651 snprintf( this_proc_param->param, LIGOMETA_PARAM_MAX, "--%s", \
652 long_options[option_index].name ); \
653 snprintf( this_proc_param->type, LIGOMETA_TYPE_MAX, "%s", pptype ); \
654 snprintf( this_proc_param->value, LIGOMETA_VALUE_MAX, format, ppvalue );
657" --help display this message\n"\
658" --version print version information and exit\n"\
659" --user-tag STRING set the process_params usertag to STRING\n"\
661" --gps-start-time SEC GPS second of data start time\n"\
662" --gps-end-time SEC GPS second of data end time\n"\
663" --low-frequency-cutoff F Compute tau parameters from F Hz\n"\
664" --minimum-mass MASS set minimum component mass of bank to MASS\n"\
665" --maximum-mass MASS set maximum component mass of bank to MASS\n"\
666" --tries-factor N test a factor N more points than templates retained\n"\
667" --random-seed SEED set random number seed for injections to SEED\n"\
668 " (urandom|integer)\n"\
669" --write-compress write a compressed xml file\n"\
713 int option_index = 0;
714 size_t LALoptarg_len;
717 long_options, &option_index );
729 if ( long_options[option_index].
flag != 0 )
735 fprintf( stderr,
"error parsing option %s with argument %s\n",
774 fprintf( stdout,
"invalid argument to --%s:\n"
775 "miniumum component mass must be > 0: "
776 "(%f solar masses specified)\n",
787 fprintf( stdout,
"invalid argument to --%s:\n"
788 "maxiumum component mass must be > 0: "
789 "(%f solar masses specified)\n",
800 fprintf( stdout,
"invalid argument to --%s:\n"
801 "miniumum total mass must be > 0: "
802 "(%f solar masses specified)\n",
813 fprintf( stdout,
"invalid argument to --%s:\n"
814 "maxiumum total mass must be > 0: "
815 "(%f solar masses specified)\n",
826 fprintf( stdout,
"invalid argument to --%s:\n"
827 "miniumum chirp mass must be > 0: "
828 "(%f solar masses specified)\n",
839 fprintf( stdout,
"invalid argument to --%s:\n"
840 "maxiumum chirp mass must be > 0: "
841 "(%f solar masses specified)\n",
852 fprintf( stdout,
"invalid argument to --%s:\n"
853 "lower frequency cutoff must be > 0: "
854 "(%f Hz specified)\n",
855 long_options[option_index].
name,
fLo );
865 fprintf( stdout,
"invalid argument to --%s:\n"
866 "upper frequency cutoff must be > 0: "
867 "(%f Hz specified)\n",
868 long_options[option_index].
name,
fHi );
892 fprintf( stderr,
"invalid argument to --%s:\n"
893 "ratio of test points to templates"
894 "must be greater than 1: (%d specified)\n",
903 if ( minMatch < 0 || minMatch >= 1 )
905 fprintf( stderr,
"invalid argument to --%s:\n"
906 "minimal match of the template bank"
907 "must be in [0,1): (%f specified)\n",
917 if ( gstartt < 441417609 )
919 fprintf( stderr,
"invalid argument to --%s:\n"
920 "GPS start time is prior to "
921 "Jan 01, 1994 00:00:00 UTC:\n"
923 long_options[option_index].
name, gstartt );
926 if ( gstartt > 999999999 )
928 fprintf( stderr,
"invalid argument to --%s:\n"
929 "GPS start time is after "
930 "Sep 14, 2011 01:46:26 UTC:\n"
932 long_options[option_index].
name, gstartt );
944 if ( gendt > 999999999 )
946 fprintf( stderr,
"invalid argument to --%s:\n"
947 "GPS end time is after "
948 "Sep 14, 2011 01:46:26 UTC:\n"
950 long_options[option_index].
name, gendt );
953 else if ( gendt < 441417609 )
955 fprintf( stderr,
"invalid argument to --%s:\n"
956 "GPS end time is prior to "
957 "Jan 01, 1994 00:00:00 UTC:\n"
959 long_options[option_index].
name, gendt );
974 fprintf( stderr,
"unknown error while parsing options\n" );
982 fprintf( stderr,
"extraneous command line arguments:\n" );
999 fprintf( stderr,
"--minimum-mass must be specified\n" );
1004 fprintf( stderr,
"--maximum-mass must be specified\n" );
1010 fprintf( stderr,
"--minimum-mtotal must be specified\n" );
1015 fprintf( stderr,
"--maximum-mtotal must be specified\n" );
1021 fprintf( stderr,
"--minimum-mchirp must be specified\n" );
1026 fprintf( stderr,
"--maximum-mchirp must be specified\n" );
1032 fprintf( stderr,
"--low-frequency-cutoff must be specified\n" );
1037 fprintf( stderr,
"--high-frequency-cutoff must be specified\n" );
1044 fprintf( stderr,
"--tries-factor must be specified\n" );
1051#undef ADD_PROCESS_PARAM
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)
#define LAL_CALL(function, statusptr)
void LALInspiralWaveTemplates(LALStatus *status, REAL4Vector *filter1, REAL4Vector *filter2, InspiralTemplate *params)
void LALInspiralParameterCalc(LALStatus *status, InspiralTemplate *params)
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
int XLALCloseLIGOLwXMLFile(LIGOLwXMLStream *xml)
LIGOLwXMLStream * XLALOpenLIGOLwXMLFile(const char *path)
int XLALWriteLIGOLwXMLProcessTable(LIGOLwXMLStream *, const ProcessTable *)
int XLALWriteLIGOLwXMLProcessParamsTable(LIGOLwXMLStream *, const ProcessParamsTable *)
int XLALWriteLIGOLwXMLSnglInspiralTable(LIGOLwXMLStream *xml, const SnglInspiralTable *sngl_inspiral)
COMPLEX8FFTPlan * XLALCreateReverseCOMPLEX8FFTPlan(UINT4 size, int measurelvl)
COMPLEX8FFTPlan * XLALCreateForwardCOMPLEX8FFTPlan(UINT4 size, int measurelvl)
void XLALDestroyCOMPLEX8FFTPlan(COMPLEX8FFTPlan *plan)
LIGOTimeGPS * XLALGPSTimeNow(LIGOTimeGPS *gpstime)
REAL8FrequencySeries * XLALCreateREAL8FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
void XLALDestroyCOMPLEX8FrequencySeries(COMPLEX8FrequencySeries *series)
REAL4FrequencySeries * XLALCreateREAL4FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
COMPLEX8FrequencySeries * XLALCreateCOMPLEX8FrequencySeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaF, const LALUnit *sampleUnits, size_t length)
void XLALDestroyREAL4FrequencySeries(REAL4FrequencySeries *series)
void XLALDestroyREAL8FrequencySeries(REAL8FrequencySeries *series)
REAL8 XLALREAL8PolynomialInterpolation(REAL8 *yout, REAL8 xtarget, REAL8 *y, REAL8 *x, UINT4 n)
#define XLAL_INIT_DECL(var,...)
LAL_PNORDER_THREE_POINT_FIVE
void LALCreateRandomParams(LALStatus *status, RandomParams **params, INT4 seed)
REAL4 XLALUniformDeviate(RandomParams *params)
void LALDestroyRandomParams(LALStatus *status, RandomParams **params)
COMPLEX8FrequencySeries * XLALWhitenCOMPLEX8FrequencySeries(COMPLEX8FrequencySeries *fseries, const REAL4FrequencySeries *psd)
int XLALCOMPLEX8FreqTimeFFT(COMPLEX8TimeSeries *tser, const COMPLEX8FrequencySeries *freq, const COMPLEX8FFTPlan *plan)
int XLALCOMPLEX8TimeFreqFFT(COMPLEX8FrequencySeries *freq, const COMPLEX8TimeSeries *tser, const COMPLEX8FFTPlan *plan)
REAL4TimeSeries * XLALCreateREAL4TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
COMPLEX8TimeSeries * XLALCreateCOMPLEX8TimeSeries(const CHAR *name, const LIGOTimeGPS *epoch, REAL8 f0, REAL8 deltaT, const LALUnit *sampleUnits, size_t length)
void XLALDestroyCOMPLEX8TimeSeries(COMPLEX8TimeSeries *series)
void XLALDestroyREAL4TimeSeries(REAL4TimeSeries *series)
const LALUnit lalSecondUnit
const LALUnit lalDimensionlessUnit
COMPLEX8Vector * XLALCCVectorMultiplyConjugate(COMPLEX8Vector *out, const COMPLEX8Vector *in1, const COMPLEX8Vector *in2)
int XLALCOMPLEX8VectorAbs(REAL4Vector *out, const COMPLEX8Vector *in)
void XLALAbortErrorHandler(const char *func, const char *file, int line, int errnum)
XLALErrorHandlerType * XLALSetErrorHandler(XLALErrorHandlerType *newHandler)
#define XLAL_IS_REAL4_FAIL_NAN(val)
char name[LIGOMETA_SOURCE_MAX]
RandomParams * randParams
int main(int argc, char *argv[])
REAL4 ceil_pow_2(REAL4 x)
#define ADD_PROCESS_PARAM(pptype, format, ppvalue)
int vrbflg
defined in lal/lib/std/LALError.c
REAL4FrequencySeries * readPSD(const char *fname, REAL4 fNyq, REAL4 df, UINT4 N, REAL4 fLow, REAL4 fHigh)
REAL4 max_mass_ratio(REAL4 mchirp, REAL4 m, REAL4 M)
int arg_parse_check(int argc, char *argv[], ProcessParamsTable *procparams)
const char *const vcsDate
const char *const vcsStatus
CHAR type[LIGOMETA_TYPE_MAX]
CHAR param[LIGOMETA_PARAM_MAX]
CHAR value[LIGOMETA_VALUE_MAX]
struct tagProcessParamsTable * next
CHAR program[LIGOMETA_PROGRAM_MAX]
CHAR ifos[LIGOMETA_IFOS_MAX]
CHAR ifo[LIGOMETA_IFO_MAX]
struct tagSnglInspiralTable * next
CHAR channel[LIGOMETA_CHANNEL_MAX]
CHAR search[LIGOMETA_SEARCH_MAX]