def select_waveform_generator(approximant): """Returns the single-IFO generator for the approximant. Parameters ---------- approximant : str Name of waveform approximant. Valid names can be found using ``pycbc.waveform`` methods. Returns ------- generator : (PyCBC generator instance) A waveform generator object. Examples -------- Get a list of available approximants: >>> from pycbc import waveform >>> waveform.fd_approximants() >>> waveform.td_approximants() >>> from pycbc.waveform import ringdown >>> ringdown.ringdown_fd_approximants.keys() Get generator object: >>> from pycbc.waveform.generator import select_waveform_generator >>> select_waveform_generator(waveform.fd_approximants()[0]) """ # check if frequency-domain CBC waveform if approximant in waveform.fd_approximants(): return FDomainCBCGenerator # check if time-domain CBC waveform elif approximant in waveform.td_approximants(): return TDomainCBCGenerator # check if frequency-domain ringdown waveform elif approximant in ringdown.ringdown_fd_approximants: if approximant == 'FdQNMfromFinalMassSpin': return FDomainMassSpinRingdownGenerator elif approximant == 'FdQNMfromFreqTau': return FDomainFreqTauRingdownGenerator elif approximant in ringdown.ringdown_td_approximants: if approximant == 'TdQNMfromFinalMassSpin': return TDomainMassSpinRingdownGenerator elif approximant == 'TdQNMfromFreqTau': return TDomainFreqTauRingdownGenerator # otherwise waveform approximant is not supported else: raise ValueError("%s is not a valid approximant." % approximant)