pycbc icon indicating copy to clipboard operation
pycbc copied to clipboard

Marginalized Total Mass Model.

Open kkacanja opened this issue 6 months ago • 5 comments

This pull request introduces a new inference model that performs marginalization over total mass by rescaling a reference waveform across a specified total mass grid. This model is designed to apply brute-force marginalization on top of an existing base model using waveform rescaling, making it simple and modular to include in existing analyses.

kkacanja avatar Jun 27 '25 18:06 kkacanja

Does it work with different mass ratio q?

WuShichao avatar Jun 27 '25 19:06 WuShichao

Does it work with different mass ratio q?

Yea, you can set a prior on q. You need mass ratio in order to get mass1 and mass2 for the waveform generation

kkacanja avatar Jun 27 '25 20:06 kkacanja

Does it work with different mass ratio q?

Yea, you can set a prior on q. You need mass ratio in order to get mass1 and mass2 for the waveform generation

So, for a (2,2)-mode BBH, in principle, you can only sample spin parameters + mass ratio, and marginalize over all other parameters?

WuShichao avatar Jun 27 '25 21:06 WuShichao

Does it work with different mass ratio q?

Yea, you can set a prior on q. You need mass ratio in order to get mass1 and mass2 for the waveform generation

So, for a (2,2)-mode BBH, in principle, you can only sample spin parameters + mass ratio, and marginalize over all other parameters?

Yup. One way I am using this is to marginalize over mtotal, tc, sky location, polarization and phase (so you specify the base model as marginalized time) and only sampling over eccentricity q and spins. This model may be beneficial for very slow waveform models

So you can do something like this in the config

[model]
name = marginalized_mtotal
base_model = marginalized_time
marginalize_mtotal = True
fiducial_mtotal = 8
mtotal_grid_num = 100
sample_rate = 2048
marginalize_vector_params = tc, ra, dec, polarization
marginalize_vector_samples = 5000
low-frequency-cutoff = H1:20 L1:22 V1:20
ignore-failed-waveforms =
marginalize_phase = True
marginalize_distance = True
marginalize_distance_param = distance
marginalize_distance_interpolator = True
marginalize_distance_snr_range = 1, 30
marginalize_distance_density = 200, 200
marginalize_distance_samples = 10000

So far this model only works with the marginalized time model since I have to specify custom waveforms. I have to see if there is another way around this other than modifying each base model to take in a custom waveform.

kkacanja avatar Jun 27 '25 23:06 kkacanja

@kkacanja Before merging this, can you add an example and unittest for the model.

ahnitz avatar Jul 04 '25 20:07 ahnitz