def get_param(par, args, m1, m2, s1z, s2z): """ Helper function Parameters ---------- par : string Name of parameter to calculate args : Namespace object returned from ArgumentParser instance Calling code command line options, used for f_lower value m1 : float or array of floats First binary component mass (etc.) Returns ------- parvals : float or array of floats Calculated parameter values """ if par == 'mchirp': parvals, _ = pnutils.mass1_mass2_to_mchirp_eta(m1, m2) elif par == 'mtotal': parvals = m1 + m2 elif par == 'template_duration': # default to SEOBNRv4 duration function parvals = pnutils.get_imr_duration(m1, m2, s1z, s2z, args.f_lower, args.approximant or "SEOBNRv4") if args.min_duration: parvals += args.min_duration elif par in pnutils.named_frequency_cutoffs.keys(): parvals = pnutils.frequency_cutoff_from_name(par, m1, m2, s1z, s2z) else: # try asking for a LALSimulation frequency function parvals = pnutils.get_freq(par, m1, m2, s1z, s2z) return parvals
def get_imr_length(approx, **kwds): """Call through to pnutils to obtain IMR waveform durations """ m1 = float(kwds['mass1']) m2 = float(kwds['mass2']) s1z = float(kwds['spin1z']) s2z = float(kwds['spin2z']) f_low = float(kwds['f_lower']) # 10% margin of error is incorporated in the pnutils function return pnutils.get_imr_duration(m1, m2, s1z, s2z, f_low, approximant=approx)
def get_param(par, args, m1, m2, s1z, s2z): """ Helper function Parameters ---------- par : string Name of parameter to calculate args : Namespace object returned from ArgumentParser instance Calling code command line options, used for f_lower value m1 : float or array of floats First binary component mass (etc.) Returns ------- parvals : float or array of floats Calculated parameter values """ if par == 'mchirp': parvals = conversions.mchirp_from_mass1_mass2(m1, m2) elif par == 'mtotal': parvals = m1 + m2 elif par == 'eta': parvals = conversions.eta_from_mass1_mass2(m1, m2) elif par in ['chi_eff', 'effective_spin']: parvals = conversions.chi_eff(m1, m2, s1z, s2z) elif par == 'template_duration': # default to SEOBNRv4 duration function if not hasattr(args, 'approximant') or args.approximant is None: args.approximant = "SEOBNRv4" parvals = pnutils.get_imr_duration(m1, m2, s1z, s2z, args.f_lower, args.approximant) if args.min_duration: parvals += args.min_duration elif par == 'tau0': parvals = conversions.tau0_from_mass1_mass2(m1, m2, args.f_lower) elif par == 'tau3': parvals = conversions.tau3_from_mass1_mass2(m1, m2, args.f_lower) elif par in pnutils.named_frequency_cutoffs.keys(): parvals = pnutils.frequency_cutoff_from_name(par, m1, m2, s1z, s2z) else: # try asking for a LALSimulation frequency function parvals = pnutils.get_freq(par, m1, m2, s1z, s2z) return parvals
def get_bank_property(parameter, bank, template_ids, duration_approximant="SEOBNRv4"): """ Get a specific value from a hdf file object in standard PyCBC template bank format Parameters ---------- parameter: str the parameter to convert to, must be in conversion_options bank: h5py File object or dictionary of arrays Template bank containing the parameters for use in conversions must contain mass1, mass2, spin1z, spin2z as a minimum template_ids: numpy array Array of template IDs for reading a set of templates from the bank Optional Parameters ------------------- duration_approximant: string The approximant used to calculate the duration of the template if not already given Returns ------- values: numpy array, same size as template_ids Array of whatever the requested parameter is calculated for the specified templates in the bank """ # These just give things already in the bank if parameter in bank: values = bank[parameter][:][template_ids] # These things may be in the bank, but if not, we need to calculate elif parameter in ['template_duration', 'duration']: if 'template_duration' in bank: # This statement should be the reached only if 'duration' # is given, but 'template_duration' is in the bank values = bank['template_duration'][:][template_ids] else: values = pnutils.get_imr_duration(bank['mass1'][:][template_ids], bank['mass2'][:][template_ids], bank['spin1z'][:][template_ids], bank['spin2z'][:][template_ids], bank['f_lower'][:][template_ids], approximant=duration_approximant) # Basic conversions elif parameter in mass_conversions.keys(): values = mass_conversions[parameter](bank['mass1'][:][template_ids], bank['mass2'][:][template_ids]) elif parameter in spin_conversions.keys(): values = spin_conversions[parameter](bank['mass1'][:][template_ids], bank['mass2'][:][template_ids], bank['spin1z'][:][template_ids], bank['spin2z'][:][template_ids]) else: # parameter not in the current conversion parameter list raise NotImplementedError("Bank conversion function " + parameter + " not recognised: choose from '" + "', '".join(conversion_options) + "'.") return values