32#include <lal/LALStdlib.h>
33#include <lal/LALStdio.h>
34#include <lal/LIGOMetadataTables.h>
35#include <lal/LIGOMetadataInspiralUtils.h>
37#include <lal/SkyCoordinates.h>
38#include <lal/GeneratePPNInspiral.h>
39#include <lal/DetectorSite.h>
40#include <lal/DetResponse.h>
41#include <lal/TimeDelay.h>
42#include <lal/InspiralInjectionParams.h>
43#include <lal/VectorOps.h>
86 REAL4 lmin = log10(distMin);
87 REAL4 lmax = log10(distMax);
88 REAL4 deltaL = lmax - lmin;
96 REAL4 d3min = distMin * distMin * distMin;
97 REAL4 d3max = distMax * distMax * distMax;
98 REAL4 deltad3 = d3max - d3min ;
106 REAL4 d2min = distMin * distMin ;
107 REAL4 d2max = distMax * distMax ;
108 REAL4 deltad2 = d2max - d2min ;
138 REAL8 *rightAscension,
146 const REAL8 h_scale = 1.5;
147 const REAL8 r_scale = 4.0;
148 const REAL8 r_sun = 8.5;
159 z = -h_scale * log( 2 * ( 1 -
u ) );
163 z = h_scale * log( 2 *
u );
168 rho2 = r_sun * r_sun +
r *
r - 2 * r_sun *
r * cos( phi );
169 dist = sqrt( z * z +
rho2 );
172 galacticPos.
longitude = atan2(
r * sin( phi ), r_sun -
r * cos( phi ) );
173 galacticPos.
latitude = asin( z / dist );
179 *declination = equatorialPos.
latitude;
180 *rightAscension = equatorialPos.
longitude;
181 *distance = dist/1000.0;
193 REAL4 inclinationPeak
227 INT4 nIndex, nCycles;
228 REAL4 mTotal = maxTotalMass +1;
230 while ( mTotal < minTotalMass || mTotal > maxTotalMass )
232 nIndex = injNum + *count;
233 nCycles = (int) ( ceil( ((
float) nIndex) / mass1Pnt ));
234 inj->
mass1 = mass1Min + mass1Delta * (nIndex % mass1Pnt );
235 inj->
mass2 = mass2Min + mass2Delta * (nCycles % mass2Pnt );
237 if ( mTotal < minTotalMass || mTotal > maxTotalMass ) (*count)++;
241 inj->
mchirp = mTotal * pow(inj->
eta, 0.6);
255 inj->
mass1 = mass1Fix;
256 inj->
mass2 = mass2Fix;
259 inj->
mchirp = mTotal * pow(inj->
eta, 0.6);
277 REAL4 mTotal = maxTotalMass +1;
279 while ( mTotal < minTotalMass || mTotal > maxTotalMass )
286 (mass1Max - mass1Min);
288 (mass2Max - mass2Min);
295 (log(mass1Max) - log(mass1Min) ) );
297 (log(mass2Max) - log(mass2Min) ) );
303 REAL4 minMass= mass1Min + mass2Min;
304 REAL4 maxMass= mass1Max + mass2Max;
307 while( inj->
mass2 > mass2Max || inj->
mass2 <= mass2Min )
309 inj->
mass1 = mass1Min +
317 inj->
mchirp = mTotal * pow(inj->
eta, 0.6);
339 REAL4 m1, m2, mtotal;
342 while ( (m1-mass1Max)*(m1-mass1Min) > 0 )
347 while ( (m2-mass2Max)*(m2-mass2Min) > 0 )
356 inj->
mchirp = mtotal * pow(inj->
eta, 0.6);
381 mtotal = minTotalMass + (
XLALUniformDeviate(randParams) * (maxTotalMass - minTotalMass));
382 ratio = minMassRatio + (
XLALUniformDeviate(randParams) * (maxMassRatio - minMassRatio));
387 ( log(maxTotalMass) - log(minTotalMass) ) );
388 ratio = minMassRatio + (
XLALUniformDeviate(randParams) * (maxMassRatio - minMassRatio));
395 inj->
mass1 = (ratio * mtotal) / (ratio + 1);
396 inj->
mass2 = mtotal / (ratio + 1);
398 inj->
mchirp = mtotal * pow(inj->
eta, 0.6);
418 REAL4 fraction = -1.0;
419 REAL4 minfraction = -1.0;
420 REAL4 maxfraction = -1.0;
424 mtotal = minTotalMass + (
XLALUniformDeviate(randParams) * (maxTotalMass - minTotalMass));
425 minfraction = 1 / (1 + 1 / minMassRatio);
426 maxfraction = 1 / (1 + 1 / maxMassRatio);
427 fraction = minfraction + (
XLALUniformDeviate(randParams) * (maxfraction - minfraction));
434 inj->
mass1 = fraction * mtotal;
437 inj->
mchirp = mtotal * pow(inj->
eta, 0.6);
496 switch (distribution)
502 while ( spin1Mag > spin1Max || spin1Mag < spin1Min );
505 fprintf( stderr,
"Spin magnitude distribution not known.\n" );
512 if ( (kappa1Min > -1.0) || (kappa1Max < 1.0) )
515 ( kappa1Max - kappa1Min );
517 else if ( (abskappa1Min > 0.0) || (abskappa1Max < 1.0) )
520 ( abskappa1Max - abskappa1Min );
522 sgn = (sgn > 0.0) ? 1.0 : -1.0;
529 sintheta = sqrt( 1 - kappa * kappa );
530 zmin = spin1Mag * ( cosinc * kappa - sininc * sintheta );
531 zmax = spin1Mag * ( cosinc * kappa + sininc * sintheta );
536 inj->
spin1z = spin1Mag * cosinc;
543 sgn = (sgn > 0.0) ? 1.0 : -1.0;
544 inj->
spin1z = spin1Mag * sgn;
552 if (kappa > -2.0 && inc!=0) {
553 inj->
spin1x = (kappa * spin1Mag - inj->
spin1z * cosinc) / sininc ;
559 inj->
spin1x = spin1Mag * sininc;
562 sgn = (sgn > 0.0) ? 1.0 : -1.0;
575 r1 = pow( ((spin1Mag * spin1Mag) - (inj->
spin1z * inj->
spin1z)) , 0.5);
578 inj->
spin1x = r1 * cos(phi1);
579 inj->
spin1y = r1 * sin(phi1);
583 switch (distribution)
589 while ( spin2Mag > spin2Max || spin2Mag < spin2Min );
592 fprintf( stderr,
"Spin magnitude distribution not known.\n" );
602 sgn = (sgn > 0.0) ? 1.0 : -1.0;
603 inj->
spin2z = spin2Mag * cosinc * sgn;
604 inj->
spin2x = spin2Mag * sininc * sgn;
612 sgn = (sgn > 0.0) ? 1.0 : -1.0;
613 inj->
spin2z = spin2Mag * sgn;
646 (maxTotalMass - minTotalMass);
647 inj->
eta = nrInjParams->
eta;
648 inj->
mchirp = mtotal * pow(inj->
eta, 3.0/5.0);
651 inj->
mass1 = (mtotal / 2.0) * (1 + pow( (1 - 4 * inj->
eta), 0.5) );
652 inj->
mass2 = (mtotal / 2.0) * (1 - pow( (1 - 4 * inj->
eta), 0.5) );
679 REAL8 tDelay, fplus, fcross;
680 REAL4 splus, scross, cosiota;
691 splus = -( 1.0 + cosiota * cosiota );
692 scross = -2.0 * cosiota;
700 splus*splus*fplus*fplus + scross*scross*fcross*fcross );
778 fNorm = k * resp->
deltaF / pendF;
779 denom->
data[k] =
crectf( ( 1 - fNorm * fNorm ), - fNorm / pendQ );
LALDetectorIndexGEO600DIFF
LALDetectorIndexTAMA300DIFF
LALDetectorIndexVIRGODIFF
static INT8 end_time(const SnglInspiralTable *x)
void LALGalacticToEquatorial(LALStatus *stat, SkyPosition *output, SkyPosition *input)
const LALDetector lalCachedDetectors[LAL_NUM_DETECTORS]
void XLALComputeDetAMResponse(double *fplus, double *fcross, const REAL4 D[3][3], const double ra, const double dec, const double psi, const double gmst)
void XLALRandomInspiralMilkywayLocation(REAL8 *rightAscension, REAL8 *declination, REAL8 *distance, RandomParams *randParams)
Generates a location within the Milky Way for an inspiral injection.
SpinDistribution
enum containing the different ways in which the spin magnitudes of injections can be distributed
SimInspiralTable * XLALFixedInspiralMasses(SimInspiralTable *inj, REAL4 mass1Fix, REAL4 mass2Fix)
Set masses to fixed values for an inspiral injection.
SimInspiralTable * XLALRandomInspiralSkyLocation(SimInspiralTable *inj, RandomParams *randParams)
Generates a random sky location (right ascension=longitude, delta=latitude) for an inspiral injection...
SimInspiralTable * XLALRandomInspiralSpins(SimInspiralTable *inj, RandomParams *randParams, REAL4 spin1Min, REAL4 spin1Max, REAL4 spin2Min, REAL4 spin2Max, REAL4 kappa1Min, REAL4 kappa1Max, REAL4 abskappa1Min, REAL4 abskappa1Max, AlignmentType alignInj, SpinDistribution distribution, REAL4 spin1Mean, REAL4 spin1Std, REAL4 spin2Mean, REAL4 spin2Std)
Generates spins for an inspiral injection.
LoudnessDistribution
enum containing the different ways in which the loudness of injections can be distributed
MassDistribution
enum containing the different ways in which the masses of injections can be distributed
SimInspiralTable * XLALRandomInspiralDistance(SimInspiralTable *inj, RandomParams *randParams, LoudnessDistribution dDist, REAL4 distMin, REAL4 distMax)
Generates the distance for an inspiral injection, based on the requested distribution and max/min dis...
SimInspiralTable * XLALGaussianInspiralMasses(SimInspiralTable *inj, RandomParams *randParams, REAL4 mass1Min, REAL4 mass1Max, REAL4 mass1Mean, REAL4 mass1Std, REAL4 mass2Min, REAL4 mass2Max, REAL4 mass2Mean, REAL4 mass2Std)
Generates masses for an inspiral injection.
SimInspiralTable * XLALRandomInspiralTime(SimInspiralTable *inj, RandomParams *randParams, LIGOTimeGPS startTime, REAL4 timeWindow)
Generates the geocent_end_time for an inspiral injection, based on the given startTime and timeWindow...
COMPLEX8FrequencySeries * generateActuation(COMPLEX8FrequencySeries *resp, REAL4 ETMcal, REAL4 pendF, REAL4 pendQ)
Populate a frequency series with the actuation response.
SimInspiralTable * XLALRandomInspiralTotalMassFraction(SimInspiralTable *inj, RandomParams *randParams, MassDistribution mDist, REAL4 minTotalMass, REAL4 maxTotalMass, REAL4 minMassRatio, REAL4 maxMassRatio)
Generates masses for an inspiral injection.
InclDistribution
enum containing the different ways in which the inclinations of injections can be distributed
AlignmentType
enum for two distinct ways a spin-aligned injection is realized depending on the waveform family
SimInspiralTable * XLALm1m2SquareGridInspiralMasses(SimInspiralTable *inj, REAL4 mass1Min, REAL4 mass2Min, REAL4 minTotalMass, REAL4 maxTotalMass, REAL4 mass1Delta, REAL4 mass2Delta, INT4 mass1Pnt, INT4 mass2Pnt, INT4 injNum, INT4 *count)
Places component masses on a square grid for an inspiral injection.
SimInspiralTable * XLALInspiralSiteTimeAndDist(SimInspiralTable *inj, const LALDetector *detector, LIGOTimeGPS *endTime, REAL4 *effDist)
Set end time and effective distance of an injection for a detector.
SimInspiralTable * XLALRandomNRInjectTotalMass(SimInspiralTable *inj, RandomParams *randParams, REAL4 minTotalMass, REAL4 maxTotalMass, SimInspiralTable *nrInjParams)
Generates random masses for an inspiral injection.
SimInspiralTable * XLALPopulateSimInspiralSiteInfo(SimInspiralTable *inj)
Set the end time and effective distance for all detectors for this injection.
SimInspiralTable * XLALRandomInspiralMasses(SimInspiralTable *inj, RandomParams *randParams, MassDistribution mDist, REAL4 mass1Min, REAL4 mass1Max, REAL4 mass2Min, REAL4 mass2Max, REAL4 minTotalMass, REAL4 maxTotalMass)
Generates random masses for an inspiral injection.
SimInspiralTable * XLALRandomInspiralOrientation(SimInspiralTable *inj, RandomParams *randParams, InclDistribution iDist, REAL4 inclinationPeak)
Generates a random orientation (polarization, inclination, coa_phase) for an inspiral injection.
SimInspiralTable * XLALRandomInspiralTotalMassRatio(SimInspiralTable *inj, RandomParams *randParams, MassDistribution mDist, REAL4 minTotalMass, REAL4 maxTotalMass, REAL4 minMassRatio, REAL4 maxMassRatio)
Generates masses for an inspiral injection.
@ uniformTotalMassFraction
@ logMassUniformTotalMassRatio
REAL4 XLALNormalDeviate(RandomParams *params)
REAL4 XLALUniformDeviate(RandomParams *params)
COORDINATESYSTEM_GALACTIC
REAL8 XLALTimeDelayFromEarthCenter(const double detector_earthfixed_xyz_metres[3], double source_right_ascension_radians, double source_declination_radians, const LIGOTimeGPS *gpstime)
COMPLEX8Vector * XLALCreateCOMPLEX8Vector(UINT4 length)
void XLALDestroyCOMPLEX8Vector(COMPLEX8Vector *vector)
COMPLEX8Vector * XLALCCVectorDivide(COMPLEX8Vector *out, const COMPLEX8Vector *in1, const COMPLEX8Vector *in2)
#define XLAL_ERROR_NULL(...)
REAL8 XLALGreenwichMeanSiderealTime(const LIGOTimeGPS *gpstime)
LIGOTimeGPS * XLALGPSAdd(LIGOTimeGPS *epoch, REAL8 dt)
LIGOTimeGPS geocent_end_time
CHAR numrel_data[LIGOMETA_STRING_MAX]