59 #define UNUSED __attribute__ ((unused))
67 #include <gsl/gsl_bspline.h>
68 #include <gsl/gsl_blas.h>
69 #include <gsl/gsl_spline.h>
70 #include <gsl/gsl_complex_math.h>
72 #include <lal/SeqFactories.h>
73 #include <lal/FileIO.h>
74 #include <lal/H5FileIO.h>
76 #include <lal/XLALError.h>
77 #include <lal/LALSimIMR.h>
85 #ifdef LAL_PTHREAD_LOCK
89 #ifdef LAL_PTHREAD_LOCK
90 static pthread_once_t NRSur3dq8Remnant_is_initialized = PTHREAD_ONCE_INIT;
150 gsl_vector* fit_params,
158 const char *param_validity =
"This model is valid for q <= 9.1 & "
159 "|chiAz,chiBz| <= 0.91, or q <= 10.1 & |chiAz,chiBz| <= 0.81";
162 UINT4 unlim_extrap = 0;
163 if (LALparams != NULL &&
173 if (fabs(chiAz) > 1) {
175 "Invalid spin magnitude |chiA| = %0.4f > 1\n", fabs(chiAz));
177 if (fabs(chiBz) > 1) {
179 "Invalid spin magnitude |chiB| = %0.4f > 1\n", fabs(chiBz));
181 if ((
q > 10.1) && (unlim_extrap == 0)) {
183 "Too much extrapolation in mass ratio; q=%0.4f > 10.1\n%s\n",
q,
188 "Extrapolating outside training range q=%0.4f > 8\n",
q);
190 if (fabs(chiAz) > 0.91 && (unlim_extrap == 0)) {
192 "Too much extrapolation; |chiAz|=%0.4f > 0.91\n%s\n", fabs(chiAz),
195 if (fabs(chiBz) > 0.91 && (unlim_extrap == 0)) {
197 "Too much extrapolation; |chiBz|=%0.4f > 0.91\n%s\n", fabs(chiBz),
200 if (fabs(chiAz) > 0.81) {
201 if ((
q > 9.1) && (unlim_extrap == 0)) {
203 "Too much extrapolation; q=%0.4f > 9.1 & |chiAz|=%.04f"
204 " >0.81\n%s\n",
q, fabs(chiAz), param_validity);
207 "Extrapolating outside training range |chiAz|=%0.4f > 0.81\n",
210 if (fabs(chiBz) > 0.81) {
211 if ((
q > 9.1) && (unlim_extrap == 0)) {
213 "Too much extrapolation; q=%0.4f > 9.1 & |chiBz|=%.04f"
214 " >0.81\n%s\n",
q, fabs(chiBz), param_validity);
217 "Extrapolating outside training range |chiBz|=%0.4f > 0.81\n",
222 const REAL8 chi_wtAvg = (
q*chiAz+chiBz)/(1.+
q);
224 = (chi_wtAvg - 38.*eta/113.*(chiAz + chiBz))/(1. - 76.*eta/113.);
225 const REAL8 chi_a = (chiAz - chiBz)/2.;
228 "Size of fit_params should be 3, not %zu.\n", fit_params->size);
230 gsl_vector_set(fit_params, 0, log(
q));
231 gsl_vector_set(fit_params, 1, chi_hat);
232 gsl_vector_set(fit_params, 2, chi_a);
265 char *remnant_property,
269 #ifdef LAL_PTHREAD_LOCK
278 if (!sur_data->
setup) {
283 gsl_vector *dummy_worker = gsl_vector_alloc(sur_data->
params_dim);
286 gsl_vector *fit_params = gsl_vector_alloc(sur_data->
params_dim);
294 if (strcmp(remnant_property,
"mf") == 0) {
297 }
else if (strcmp(remnant_property,
"chifz") == 0) {
300 }
else if (strcmp(remnant_property,
"vfx") == 0) {
303 }
else if (strcmp(remnant_property,
"vfy") == 0) {
308 "of 'mf', 'chifz', 'vfx' or 'vfy'");
struct tagLALH5File LALH5File
int XLALDictContains(const LALDict *dict, const char *key)
UINT4 XLALDictLookupUINT4Value(LALDict *dict, const char *key)
REAL8 NRHybSur_eval_fit(const NRHybSurFitData *fit_data, const gsl_vector *fit_params, const gsl_matrix *x_train, gsl_vector *dummy_worker)
Evaluate a NRHybSur fit.
static int NRSur3dq8Remnant_fitParams(gsl_vector *fit_params, const REAL8 q, const REAL8 chiAz, const REAL8 chiBz, LALDict *LALparams)
Map from mass ratio and spins to surrogate fit parameters.
int XLALNRSur3dq8Remnant(REAL8 *result, REAL8 q, REAL8 s1z, REAL8 s2z, char *remnant_property, LALDict *LALparams)
Returns the remnant BH's mass, spin, or kick according to NRSur3dq8Remnant model.
static void NRSur3dq8Remnant_Init_LALDATA(void)
Surrogate initialization.
static bool NRSur3dq8Remnant_IsSetup(void)
Helper function to check if the NRSur3dq8Remnant model has been initialized.
static AlignedSpinRemnantFitData __lalsim_NRSur3dq8Remnant_data
Global surrogate data.
NRSur3dq8Remnant model for remnant BH mass, spin and recoil kick for aligned-spin BBH.
static const char NRSur3dq8Remnant_DATAFILE[]
void NRSurRemnant_LoadH5File(LALH5File **file, const char *NRSurRemnant_DATAFILE)
Loads H5 file for a NRSurRemnant model.
int AlignedSpinNRSurRemnant_Init(AlignedSpinRemnantFitData *sur_data, LALH5File *file)
Initializes fit data for an aligned-spin NRSurRemnant.
Utils for NR surrogates for remnant BH mass, spin and recoil kick.
#define print_warning(...)
void XLALH5FileClose(LALH5File UNUSED *file)
#define XLAL_ERROR_VOID(...)
#define XLAL_CHECK(assertion,...)
int pthread_once(pthread_once_t *once_control, void(*init_routine)(void))
NRSurRemnant GPR fit data for the mass, spin, and recoil kick for aligned-spin BBHs.
ScalarFitData * mf_data
Fit data for final mass.
UINT4 params_dim
Dimensions of the model.
gsl_matrix * x_train
Training set parameters, needed for GPR fits.
ScalarFitData * vfy_data
Fit data for final mass.
ScalarFitData * vfx_data
Fit data for final mass.
ScalarFitData * chifz_data
Fit data for final mass.
UINT4 setup
Indicates if NRSurRemnant has been initialized.