def from_config(cls, cp, section, variable_args): """Returns a distribution based on a configuration file. The parameters for the distribution are retrieved from the section titled "[`section`-`variable_args`]" in the config file. Parameters ---------- cp : pycbc.workflow.WorkflowConfigParser A parsed configuration file that contains the distribution options. section : str Name of the section in the configuration file. variable_args : str The names of the parameters for this distribution, separated by `prior.VARARGS_DELIM`. These must appear in the "tag" part of the section header. Returns ------- IndependentChiPChiEff A distribution instance. """ tag = variable_args variable_args = variable_args.split(VARARGS_DELIM) if not set(variable_args) == set(cls._params): raise ValueError("Not all parameters used by this distribution " "included in tag portion of section name") # get the bounds for the setable parameters mass1 = get_param_bounds_from_config(cp, section, tag, 'mass1') mass2 = get_param_bounds_from_config(cp, section, tag, 'mass2') chi_eff = get_param_bounds_from_config(cp, section, tag, 'chi_eff') chi_a = get_param_bounds_from_config(cp, section, tag, 'chi_a') xi_bounds = get_param_bounds_from_config(cp, section, tag, 'xi_bounds') if cp.has_option('-'.join([section, tag]), 'nsamples'): nsamples = int(cp.get('-'.join([section, tag]), 'nsamples')) else: nsamples = None return cls(mass1=mass1, mass2=mass2, chi_eff=chi_eff, chi_a=chi_a, xi_bounds=xi_bounds, nsamples=nsamples)
def from_config(cls, cp, section, variable_args): """Returns a distribution based on a configuration file. The parameters for the distribution are retrieved from the section titled "[`section`-`variable_args`]" in the config file. Parameters ---------- cp : pycbc.workflow.WorkflowConfigParser A parsed configuration file that contains the distribution options. section : str Name of the section in the configuration file. variable_args : str The names of the parameters for this distribution, separated by `prior.VARARGS_DELIM`. These must appear in the "tag" part of the section header. Returns ------- IndependentChiPChiEff A distribution instance. """ tag = variable_args variable_args = variable_args.split(VARARGS_DELIM) if not set(variable_args) == set(cls._params): raise ValueError("Not all parameters used by this distribution " "included in tag portion of section name") # get the bounds for the setable parameters mass1 = get_param_bounds_from_config(cp, section, tag, 'mass1') mass2 = get_param_bounds_from_config(cp, section, tag, 'mass2') chi_eff = get_param_bounds_from_config(cp, section, tag, 'chi_eff') chi_a = get_param_bounds_from_config(cp, section, tag, 'chi_a') xi_bounds = get_param_bounds_from_config(cp, section, tag, 'xi_bounds') if cp.has_option('-'.join([section, tag]), 'nsamples'): nsamples = int(cp.get('-'.join([section, tag]), 'nsamples')) else: nsamples = None return cls(mass1=mass1, mass2=mass2, chi_eff=chi_eff, chi_a=chi_a, xi_bounds=xi_bounds, nsamples=nsamples)
def from_config(cls, cp, section, variable_args): """Returns a distribution based on a configuration file. The section must have the names of the polar and azimuthal angles in the tag part of the section header. For example: .. code-block:: ini [prior-theta+phi] name = uniform_solidangle If nothing else is provided, the default names and bounds of the polar and azimuthal angles will be used. To specify a different name for each angle, set the `polar-angle` and `azimuthal-angle` attributes. For example: .. code-block:: ini [prior-foo+bar] name = uniform_solidangle polar-angle = foo azimuthal-angle = bar Note that the names of the variable args in the tag part of the section name must match the names of the polar and azimuthal angles. Bounds may also be specified for each angle, as factors of pi. For example: .. code-block:: ini [prior-theta+phi] polar-angle = theta azimuthal-angle = phi min-theta = 0 max-theta = 0.5 This will return a distribution that is uniform in the upper hemisphere. By default, the domain of the azimuthal angle is `[0, 2pi)`. To make this domain cyclic, add `azimuthal_cyclic_domain =`. Parameters ---------- cp : ConfigParser instance The config file. section : str The name of the section. variable_args : str The names of the parameters for this distribution, separated by ``VARARGS_DELIM``. These must appear in the "tag" part of the section header. Returns ------- UniformSolidAngle A distribution instance from the pycbc.inference.prior module. """ tag = variable_args variable_args = variable_args.split(VARARGS_DELIM) # get the variables that correspond to the polar/azimuthal angles try: polar_angle = cp.get_opt_tag(section, 'polar-angle', tag) except Error: polar_angle = cls._default_polar_angle try: azimuthal_angle = cp.get_opt_tag(section, 'azimuthal-angle', tag) except Error: azimuthal_angle = cls._default_azimuthal_angle if polar_angle not in variable_args: raise Error("polar-angle %s is not one of the variable args (%s)" % (polar_angle, ', '.join(variable_args))) if azimuthal_angle not in variable_args: raise Error("azimuthal-angle %s is not one of the variable args " % (azimuthal_angle) + "(%s)" % (', '.join(variable_args))) # get the bounds, if provided polar_bounds = bounded.get_param_bounds_from_config( cp, section, tag, polar_angle) azimuthal_bounds = bounded.get_param_bounds_from_config( cp, section, tag, azimuthal_angle) # see if the a cyclic domain is desired for the azimuthal angle azimuthal_cyclic_domain = cp.has_option_tag(section, 'azimuthal_cyclic_domain', tag) return cls(polar_angle=polar_angle, azimuthal_angle=azimuthal_angle, polar_bounds=polar_bounds, azimuthal_bounds=azimuthal_bounds, azimuthal_cyclic_domain=azimuthal_cyclic_domain)
def from_config(cls, cp, section, variable_args): """Returns a distribution based on a configuration file. The section must have the names of the polar and azimuthal angles in the tag part of the section header. For example: .. code-block:: ini [prior-theta+phi] name = uniform_solidangle If nothing else is provided, the default names and bounds of the polar and azimuthal angles will be used. To specify a different name for each angle, set the `polar-angle` and `azimuthal-angle` attributes. For example: .. code-block:: ini [prior-foo+bar] name = uniform_solidangle polar-angle = foo azimuthal-angle = bar Note that the names of the variable args in the tag part of the section name must match the names of the polar and azimuthal angles. Bounds may also be specified for each angle, as factors of pi. For example: .. code-block:: ini [prior-theta+phi] polar-angle = theta azimuthal-angle = phi min-theta = 0 max-theta = 0.5 This will return a distribution that is uniform in the upper hemisphere. By default, the domain of the azimuthal angle is `[0, 2pi)`. To make this domain cyclic, add `azimuthal_cyclic_domain =`. Parameters ---------- cp : ConfigParser instance The config file. section : str The name of the section. variable_args : str The names of the parameters for this distribution, separated by ``VARARGS_DELIM``. These must appear in the "tag" part of the section header. Returns ------- UniformSolidAngle A distribution instance from the pycbc.inference.prior module. """ tag = variable_args variable_args = variable_args.split(VARARGS_DELIM) # get the variables that correspond to the polar/azimuthal angles try: polar_angle = cp.get_opt_tag(section, 'polar-angle', tag) except Error: polar_angle = cls._default_polar_angle try: azimuthal_angle = cp.get_opt_tag(section, 'azimuthal-angle', tag) except Error: azimuthal_angle = cls._default_azimuthal_angle if polar_angle not in variable_args: raise Error("polar-angle %s is not one of the variable args (%s)"%( polar_angle, ', '.join(variable_args))) if azimuthal_angle not in variable_args: raise Error("azimuthal-angle %s is not one of the variable args "%( azimuthal_angle) + "(%s)"%(', '.join(variable_args))) # get the bounds, if provided polar_bounds = bounded.get_param_bounds_from_config( cp, section, tag, polar_angle) azimuthal_bounds = bounded.get_param_bounds_from_config( cp, section, tag, azimuthal_angle) # see if the a cyclic domain is desired for the azimuthal angle azimuthal_cyclic_domain = cp.has_option_tag(section, 'azimuthal_cyclic_domain', tag) return cls(polar_angle=polar_angle, azimuthal_angle=azimuthal_angle, polar_bounds=polar_bounds, azimuthal_bounds=azimuthal_bounds, azimuthal_cyclic_domain=azimuthal_cyclic_domain)