def addm1m2(pos):
    injection = pos.injection()
    # Produce m1,m2 if requested and not available
    if ('mc' in pos.names or 'mchirp' in pos.names) and \
        'eta' in pos.names and \
        ('mass1' not in pos.names or 'm1' not in pos.names) and\
        ('m2' not in pos.names or 'm2' not in pos.names):

        if 'mc' in pos.names:
            mchirp_name = 'mc'
        else:
            mchirp_name = 'mchirp'
        inj_mass1 = None
        inj_mass2 = None
        if injection:
            inj_mass1, inj_mass2 = bppu.mc2ms(injection.mchirp, injection.eta)
        mass1_samps, mass2_samps = bppu.mc2ms(pos[mchirp_name].samples,
                                              pos['eta'].samples)
        mass1_pos = bppu.PosteriorOneDPDF('m1',
                                          mass1_samps,
                                          injected_value=inj_mass1)
        mass2_pos = bppu.PosteriorOneDPDF('m2',
                                          mass2_samps,
                                          injected_value=inj_mass2)
        pos.append(mass1_pos)
        pos.append(mass2_pos)
    return
def compute_mass_parameterizations(samples):
    params = samples.dtype.names
    has_mc = 'mchirp' in params
    has_eta = 'eta' in params
    has_q = 'q' in params
    has_ms = 'mass1' in params and 'mass2' in params
    has_mtotal = 'mtotal' in params

    if has_mc:
        mc = samples['mchirp']
        if not has_eta:
            if has_q:
                eta = bppu.q2eta(mc, samples['q'])
            else:
                raise ValueError("Chirp mass given with no mass ratio.")
        else:
            eta = samples['eta']

        if not has_ms:
            m1, m2 = bppu.mc2ms(mc, eta)

        mtotal = m1 + m2

    elif has_ms:
        m1 = samples['mass1']
        m2 = samples['mass2']
        mtotal = m1 + m2
        eta = m1 * m2 / (mtotal * mtotal)
        mc = mtotal * np.power(eta, 3./5.)

    elif has_mtotal:
        mtotal = samples['mtotal']
        if has_eta:
            eta = samples['eta']
            mc = mtotal * np.power(eta, 3./5.)
            m1, m2 = bppu.mc2ms(mc, eta)
        elif has_q:
            m1 = mtotal / (1 + samples['q'])
            m2 = mtotal - m1
        else:
            raise ValueError("Chirp mass given with no mass ratio.")
    return mc, eta, m1, m2, mtotal
def compute_mass_parameterizations(samples):
    params = samples.dtype.names
    has_mc = 'mchirp' in params
    has_eta = 'eta' in params
    has_q = 'q' in params
    has_ms = 'mass1' in params and 'mass2' in params
    has_mtotal = 'mtotal' in params

    if has_mc:
        mc = samples['mchirp']
        if not has_eta:
            if has_q:
                eta = bppu.q2eta(mc, samples['q'])
            else:
                raise ValueError("Chirp mass given with no mass ratio.")
        else:
            eta = samples['eta']

        if not has_ms:
            m1, m2 = bppu.mc2ms(mc, eta)

        mtotal = m1 + m2

    elif has_ms:
        m1 = samples['mass1']
        m2 = samples['mass2']
        mtotal = m1 + m2
        eta = m1 * m2 / (mtotal * mtotal)
        mc = mtotal * np.power(eta, 3. / 5.)

    elif has_mtotal:
        mtotal = samples['mtotal']
        if has_eta:
            eta = samples['eta']
            mc = mtotal * np.power(eta, 3. / 5.)
            m1, m2 = bppu.mc2ms(mc, eta)
        elif has_q:
            m1 = mtotal / (1 + samples['q'])
            m2 = mtotal - m1
        else:
            raise ValueError("Chirp mass given with no mass ratio.")
    return mc, eta, m1, m2, mtotal
def addm1m2(pos):
    injection = pos.injection()
    # Produce m1,m2 if requested and not available
    if ('mc' in pos.names or 'mchirp' in pos.names) and \
        'eta' in pos.names and \
        ('mass1' not in pos.names or 'm1' not in pos.names) and\
        ('m2' not in pos.names or 'm2' not in pos.names):

        if 'mc' in pos.names:
            mchirp_name='mc'
        else:
            mchirp_name='mchirp'
        inj_mass1=None
        inj_mass2=None
        if injection:
            inj_mass1,inj_mass2=bppu.mc2ms(injection.mchirp,injection.eta)
        mass1_samps,mass2_samps=bppu.mc2ms(pos[mchirp_name].samples,pos['eta'].samples)
        mass1_pos=bppu.PosteriorOneDPDF('m1',mass1_samps,injected_value=inj_mass1)
        mass2_pos=bppu.PosteriorOneDPDF('m2',mass2_samps,injected_value=inj_mass2)
        pos.append(mass1_pos)
        pos.append(mass2_pos)
    return