{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# LeR with Custom Functions and Parameters\n", "\n", "This notebook is created by [Phurailatpam Hemantakumar](https://hemantaph.com)\n", "\n", "[![Documentation](https://img.shields.io/badge/ler-documentation-blue)](https://ler.hemantaph.com)\n", "\n", "This notebook demonstrates how to customize the `LeR` class by defining custom source priors, lens parameter samplers, and detection criteria. We'll simulate both unlensed and lensed binary neutron star (BNS) events with fully custom configurations, then compare the results with default models.\n", "\n", "---\n", "\n", "## Table of Contents\n", "1. [LeR initialization](#1-ler-initialization)\n", " - [1.1 Code snippet for initialization with default input arguments](#11-code-snippet-for-initialization-with-default-input-arguments)\n", " - [1.2 Initialize LeR with default settings](#12-initialize-ler-with-default-settings)\n", "2. [Examine Available Prior Functions](#2-examine-available-prior-functions)\n", " - [2.1 Accessing functions as Class Attributes (Unlensed)](#21-accessing-functions-as-class-attributes-unlensed)\n", " - [2.2 Testing source related parameter prior functions](#22-testing-source-related-parameter-prior-functions)\n", " - [2.3 Accessing functions as Class Attributes (Lensed)](#23-accessing-functions-as-class-attributes-lensed)\n", " - [2.4 Accessing functions from the ler.gw_source_population module (Unlensed)](#24-accessing-functions-from-the-lergw_source_population-module-unlensed)\n", " - [2.5 Accessing functions from the ler.lens_galaxy_population module (Lensed)](#25-accessing-functions-from-the-lerlens_galaxy_population-module-lensed)\n", "3. [Using Custom Functions in LeR Initialization](#3-using-custom-functions-in-ler-initialization)\n", " - [3.1 Custom Event Type with non-spinning configuration](#31-custom-event-type-with-non-spinning-configuration)\n", " - [3.2 Custom Merger Rate Density](#32-custom-merger-rate-density)\n", " - [3.3 Custom Source Frame Masses](#33-custom-source-frame-masses)\n", " - [3.4 Custom Lens Model](#34-custom-lens-model)\n", " - [3.4.1 Custom Velocity Dispersion](#341-custom-velocity-dispersion)\n", " - [3.4.2 Custom Axis Ratio](#342-custom-axis-ratio)\n", " - [3.5 Custom Detection Criteria](#35-custom-detection-criteria)\n", " - [3.6 LeR initialization with custom functions and parameters](#36-ler-initialization-with-custom-functions-and-parameters)\n", " - [3.7 Simulate Unlensed Population](#37-simulate-unlensed-population)\n", " - [3.8 Simulate Lensed Population](#38-simulate-lensed-population)\n", " - [3.9 Calculate Rates and Compare Results](#39-calculate-rates-and-compare-results)\n", "4. [Compare Custom vs Default Models](#4-compare-custom-vs-default-models)\n", " - [4.1 Mass Distribution Comparison](#41-mass-distribution-comparison)\n", " - [4.2 Axis-Ratio Distribution Comparison](#42-axis-ratio-distribution-comparison)\n", "5. [Summary](#5-summary)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## 1. LeR initialization \n", "\n", "### 1.1. Code snippet for initialization with default input arguments\n", "\n", "```python\n", "from ler.rates import LeR\n", "import numpy as np\n", "import matplotlib.pyplot as plt\n", "from astropy.cosmology import LambdaCDM\n", "cosmo = LambdaCDM(H0=70, Om0=0.3, Ode0=0.7)\n", "\n", "# Uncomment the below code if you need to change the default arguments.\n", "ler = LeR(\n", " # LeR setup arguments\n", " npool=4, # number of processors to use\n", " z_min=0.0, # minimum redshift\n", " z_max=10.0, # maximum redshift\n", " event_type='BBH', # event type\n", " lens_type = 'epl_shear_galaxy', # lens type\n", " cosmology=cosmo, # cosmology\n", " pdet_finder=None, # if None, the pdet_finder will be calculated using the gwsnr package. \n", " list_of_detectors=None, # list of detectors that will be considered when calculating snr or pdet for lensed events. if None, all the detectors from 'gwsnr' will be considered\n", " json_file_names=dict(\n", " ler_params=\"ler_params.json\", # to store initialization parameters and important results\n", " unlensed_param=\"unlensed_param.json\", # to store all unlensed events\n", " unlensed_param_detectable=\"unlensed_param_detectable.json\", # to store only detectable unlensed events\n", " lensed_param=\"lensed_param.json\", # to store all lensed events \n", " lensed_param_detectable=\"lensed_param_detectable.json\"), # to store only detectable lensed events\n", " interpolator_directory='./interpolator_json', # directory to store the interpolator pickle files. 'ler' uses interpolation to get values of various functions to speed up the calculations (relying on numba njit).\n", " ler_directory='./ler_data', # directory to store all the outputs\n", " verbose=True, # if True, will print all information at initialization\n", "\n", " # CBCSourceParameterDistribution class arguments\n", " source_priors = dict(\n", " merger_rate_density = 'merger_rate_density_madau_dickinson_belczynski_ng',\n", " zs = 'source_redshift',\n", " source_frame_masses = 'binary_masses_BBH_powerlaw_gaussian',\n", " geocent_time = 'sampler_uniform',\n", " ra = 'sampler_uniform',\n", " dec = 'sampler_cosine',\n", " phase = 'sampler_uniform',\n", " psi = 'sampler_uniform',\n", " theta_jn = 'sampler_sine',\n", " a_1 = 'sampler_uniform',\n", " a_2 = 'sampler_uniform',\n", " ),\n", " source_priors_params= dict(\n", " merger_rate_density = dict(R0=19e-9, alpha_F=2.57, beta_F=5.83, c_F=3.36),\n", " zs = None,\n", " source_frame_masses = dict(mminbh=4.98, mmaxbh=112.5, alpha=3.78, mu_g=32.27, sigma_g=3.88, lambda_peak=0.03, delta_m=4.8, beta=0.81),\n", " geocent_time = dict(xmin=1238166018, xmax=1269702018),\n", " ra = dict(xmin=0.0, xmax=6.283185307179586),\n", " dec = None,\n", " phase = dict(xmin=0.0, xmax=6.283185307179586),\n", " psi = dict(xmin=0.0, xmax=3.141592653589793),\n", " theta_jn = None,\n", " a_1 = dict(xmin=-0.8, xmax=0.8),\n", " a_2 = dict(xmin=-0.8, xmax=0.8),\n", " ),\n", " spin_zero= True, # if True, spins will be set to zero\n", " spin_precession= False, # if True, spins will be precessing\n", "\n", " # LensGalaxyParameterDistribution class arguments\n", " lens_functions = dict(\n", " param_sampler_type = 'sample_all_routine_epl_shear_sl',\n", " cross_section_based_sampler = 'importance_sampling_with_cross_section',\n", " optical_depth = 'optical_depth_numerical',\n", " cross_section = 'cross_section_epl_shear_interpolation',\n", " ),\n", " lens_functions_params = dict(\n", " param_sampler_type = None,\n", " cross_section_based_sampler = dict(n_prop=200),\n", " optical_depth = None,\n", " cross_section = None,\n", " ),\n", " lens_param_samplers = dict(\n", " source_redshift_sl = 'strongly_lensed_source_redshifts',\n", " lens_redshift = 'lens_redshift_strongly_lensed_numerical',\n", " velocity_dispersion = 'velocity_dispersion_ewoud',\n", " axis_ratio = 'axis_ratio_rayleigh',\n", " axis_rotation_angle = 'axis_rotation_angle_uniform',\n", " external_shear = 'external_shear_normal',\n", " density_profile_slope = 'density_profile_slope_normal',\n", " external_shear_sl = 'external_shear_normal',\n", " density_profile_slope_sl = 'density_profile_slope_normal',\n", " ),\n", " lens_param_samplers_params = dict(\n", " source_redshift_sl = None,\n", " lens_redshift = dict(integration_size=20000),\n", " velocity_dispersion = dict(sigma_min=100.0, sigma_max=400.0, alpha=0.94, beta=1.85, phistar=2.099e-2 * (self.cosmo.h / 0.7) ** 3, sigmastar=113.78),\n", " axis_ratio = dict(q_min=0.2, q_max=1.0),\n", " axis_rotation_angle = dict(phi_min=0.0, phi_max=6.283185307179586),\n", " external_shear = dict(mean=0.0, std=0.05),\n", " density_profile_slope = dict(mean=1.99, std=0.149),\n", " external_shear_sl = dict(mean=0.0, std=0.05),\n", " density_profile_slope_sl = dict(mean=2.078, std=0.16),\n", " ),\n", "\n", " # ImageProperties class arguments\n", " n_min_images = 2,\n", " n_max_images = 4,\n", " time_window = 630720000,\n", " lens_model_list = ['EPL_NUMBA', 'SHEAR'],\n", "\n", " # gwsnr package arguments\n", " snr_method = 'interpolation_aligned_spins',\n", " snr_type = 'optimal_snr',\n", " gwsnr_verbose = True,\n", " multiprocessing_verbose = True,\n", " pdet_kwargs = dict(\n", " snr_th = 10.0,\n", " snr_th_net = 10.0,\n", " pdet_type = 'boolean',\n", " distribution_type = 'noncentral_chi2',\n", " include_optimal_snr = False,\n", " include_observed_snr = False,\n", " ),\n", " mtot_min = 9.96,\n", " mtot_max = 500.0,\n", " ratio_min = 0.1,\n", " ratio_max = 1.0,\n", " spin_max = 0.99,\n", " mtot_resolution = 200,\n", " ratio_resolution = 20,\n", " spin_resolution = 10,\n", " batch_size_interpolation = 1000000,\n", " interpolator_dir = './interpolator_json',\n", " sampling_frequency = 2048.0,\n", " waveform_approximant = 'IMRPhenomD',\n", " frequency_domain_source_model = 'lal_binary_black_hole',\n", " minimum_frequency = 20.0,\n", " reference_frequency = None,\n", " duration_max = None,\n", " duration_min = None,\n", " fixed_duration = None,\n", " mtot_cut = False,\n", " psds = None, # will consider the default bilby psds of 'L1', 'H1', 'V1'\n", " ifos = None, # will consider the default bilby interferometer objects of 'L1', 'H1', 'V1'\n", "\n", " # common arguments, to generate interpolator\n", " create_new_interpolator = dict(\n", " merger_rate_density = dict(create_new=False, resolution=500),\n", " redshift_distribution = dict(create_new=False, resolution=500),\n", " luminosity_distance = dict(create_new=False, resolution=500),\n", " differential_comoving_volume = dict(create_new=False, resolution=500),\n", " source_frame_masses = dict(create_new=False, resolution=500),\n", " geocent_time = dict(create_new=False, resolution=500),\n", " ra = dict(create_new=False, resolution=500),\n", " dec = dict(create_new=False, resolution=500),\n", " phase = dict(create_new=False, resolution=500),\n", " psi = dict(create_new=False, resolution=500),\n", " theta_jn = dict(create_new=False, resolution=500),\n", " a_1 = dict(create_new=False, resolution=500),\n", " a_2 = dict(create_new=False, resolution=500),\n", " tilt_1 = dict(create_new=False, resolution=500),\n", " tilt_2 = dict(create_new=False, resolution=500),\n", " phi_12 = dict(create_new=False, resolution=500),\n", " phi_jl = dict(create_new=False, resolution=500),\n", " velocity_dispersion = dict(create_new=False, resolution=500, zl_resolution=48),\n", " axis_ratio = dict(create_new=False, resolution=500, sigma_resolution=48),\n", " lens_redshift = dict(create_new=False, resolution=48, zl_resolution=48),\n", " lens_redshift_intrinsic = dict(create_new=False, resolution=500),\n", " optical_depth = dict(create_new=False, resolution=48),\n", " comoving_distance = dict(create_new=False, resolution=500),\n", " angular_diameter_distance = dict(create_new=False, resolution=500),\n", " angular_diameter_distance_z1z2 = dict(create_new=False, resolution=500),\n", " density_profile_slope = dict(create_new=False, resolution=100),\n", " lens_parameters_kde_sl = dict(create_new=False, resolution=5000),\n", " cross_section = dict(create_new=False, resolution=[25, 25, 45, 15, 15]),\n", " gwsnr = False,\n", " )\n", ")\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 1.2. Initialize LeR with default settings\n", "\n", "Set `verbose=False` to suppress lengthy output" ] }, { "cell_type": "code", "execution_count": 1, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing LeR class...\n", "\n" ] } ], "source": [ "from ler import LeR\n", "import numpy as np\n", "\n", "ler = LeR(verbose=False)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## 2. Examine Available Prior Functions\n", "\n", "There are two ways of accessing the built-in GW parameter prior functions and their default parameters. \n", "\n", "### 2.1. Accessing functions as Class Attributes (Unlensed)" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Built-in GW parameter sampler functions and parameters:\n", "\n", "merger_rate_density:\n", " merger_rate_density_bbh_oguri2018: {'R0': 1.9e-08, 'b2': 1.6, 'b3': 2.1, 'b4': 30}\n", " merger_rate_density_madau_dickinson2014: {'R0': 1.9e-08, 'a': 0.015, 'b': 2.7, 'c': 2.9, 'd': 5.6}\n", " merger_rate_density_madau_dickinson_belczynski_ng: {'R0': 1.9e-08, 'alpha_F': 2.57, 'beta_F': 5.83, 'c_F': 3.36}\n", " sfr_with_time_delay: {'R0': 1.9e-08, 'a': 0.01, 'b': 2.6, 'c': 3.2, 'd': 6.2, 'td_min': 0.01, 'td_max': 10.0}\n", " merger_rate_density_bbh_popIII_ken2022: {'R0': 1.92e-08, 'aIII': 0.66, 'bIII': 0.3, 'zIII': 11.6}\n", " merger_rate_density_bbh_primordial_ken2022: {'R0': 4.4e-11, 't0': 13.786885302009708}\n", "\n", "zs:\n", " source_redshift: None\n", "\n", "source_frame_masses:\n", " binary_masses_BBH_powerlaw_gaussian: {'mminbh': 4.98, 'mmaxbh': 112.5, 'alpha': 3.78, 'mu_g': 32.27, 'sigma_g': 3.88, 'lambda_peak': 0.03, 'delta_m': 4.8, 'beta': 0.81}\n", " binary_masses_BBH_popIII_lognormal: {'m_min': 5.0, 'm_max': 150.0, 'Mc': 30.0, 'sigma': 0.3}\n", " binary_masses_BBH_primordial_lognormal: {'m_min': 1.0, 'm_max': 100.0, 'Mc': 20.0, 'sigma': 0.3}\n", " binary_masses_NSBH_broken_powerlaw: {'mminbh': 26, 'mmaxbh': 125, 'alpha_1': 6.75, 'alpha_2': 6.75, 'b': 0.5, 'delta_m': 5, 'mminns': 1.0, 'mmaxns': 3.0, 'alphans': 0.0}\n", " binary_masses_uniform: {'m_min': 1.0, 'm_max': 3.0}\n", " binary_masses_BNS_bimodal: {'w': 0.643, 'muL': 1.352, 'sigmaL': 0.08, 'muR': 1.88, 'sigmaR': 0.3, 'mmin': 1.0, 'mmax': 2.3}\n", "\n", "a_1:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': -0.8, 'xmax': 0.8}\n", "\n", "a_2:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': -0.8, 'xmax': 0.8}\n", "\n", "tilt_1:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_sine: None\n", "\n", "tilt_2:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_sine: None\n", "\n", "phi_12:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 6.283185307179586}\n", "\n", "phi_jl:\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 6.283185307179586}\n", "\n", "geocent_time:\n", " sampler_uniform: {'xmin': 1238166018, 'xmax': 1269723618.0}\n", " constant_values_n_size: {'value': 1238166018}\n", "\n", "ra:\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 6.283185307179586}\n", " constant_values_n_size: {'value': 0.0}\n", "\n", "dec:\n", " sampler_cosine: None\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': -1.5707963267948966, 'xmax': 1.5707963267948966}\n", "\n", "phase:\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 6.283185307179586}\n", " constant_values_n_size: {'value': 0.0}\n", "\n", "psi:\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 3.141592653589793}\n", " constant_values_n_size: {'value': 0.0}\n", "\n", "theta_jn:\n", " sampler_sine: None\n", " constant_values_n_size: {'value': 0.0}\n", " sampler_uniform: {'xmin': 0.0, 'xmax': 3.141592653589793}\n", "\n" ] } ], "source": [ "# Display all available GW prior sampler functions and their parameters\n", "print(\"Built-in GW parameter sampler functions and parameters:\\n\")\n", "for func_name, func_params in ler.available_gw_prior.items():\n", " print(f\"{func_name}:\")\n", " \n", " if isinstance(func_params, dict):\n", " for param_name, param_value in func_params.items():\n", " print(f\" {param_name}: {param_value}\")\n", " else:\n", " print(f\" {func_params}\")\n", " print()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.2. Testing source related parameter prior functions" ] }, { "cell_type": "code", "execution_count": 3, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Testing merger_rate_density_bbh_oguri2018 function\n", "Redshifts: [0.1 0.2 0.3]\n", "merger_rate_density_bbh_oguri2018 interpolator will be loaded from ./interpolator_json/merger_rate_density/merger_rate_density_bbh_oguri2018_4.json\n", "Merger Rate Denisty: [2.21298914e-08 2.57321630e-08 2.98600744e-08] Mpc^-3 yr^-1\n" ] } ], "source": [ "# use the following code to inspect one of the merger rate density function\n", "# print(ler.merger_rate_density_bbh_oguri2018.__doc__)\n", "\n", "# Test one of the merger rate density function\n", "print(\"\\nTesting merger_rate_density_bbh_oguri2018 function\")\n", "zs = np.array([0.1, 0.2, 0.3])\n", "print(f\"Redshifts: {zs}\")\n", "print(f\"Merger Rate Denisty: {ler.merger_rate_density_bbh_oguri2018(zs)} Mpc^-3 yr^-1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.3. Accessing functions as Class Attributes (Lensed)" ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Built-in lens parameter sampler functions and parameters:\n", "\n", "source_redshift_sl:\n", " strongly_lensed_source_redshifts: None\n", "\n", "lens_redshift:\n", " lens_redshift_strongly_lensed_sis_haris: None\n", " lens_redshift_strongly_lensed_numerical: {'integration_size': 25000, 'use_multiprocessing': False}\n", " lens_redshift_strongly_lensed_hemanta: None\n", "\n", "velocity_dispersion:\n", " velocity_dispersion_gengamma: {'sigma_min': 100.0, 'sigma_max': 400.0, 'alpha': 0.94, 'beta': 1.85, 'phistar': np.float64(0.02099), 'sigmastar': 113.78}\n", " velocity_dispersion_choi: {'sigma_min': 100.0, 'sigma_max': 400.0, 'alpha': 2.32, 'beta': 2.67, 'phistar': np.float64(0.0027439999999999995), 'sigmastar': 161.0}\n", " velocity_dispersion_bernardi: {'sigma_min': 100.0, 'sigma_max': 400.0, 'alpha': 0.94, 'beta': 1.85, 'phistar': np.float64(0.02099), 'sigmastar': 113.78}\n", " velocity_dispersion_ewoud: {'sigma_min': 100.0, 'sigma_max': 400.0, 'alpha': 0.94, 'beta': 1.85, 'phistar': np.float64(0.02099), 'sigmastar': 113.78}\n", "\n", "axis_ratio:\n", " axis_ratio_rayleigh: {'q_min': 0.2, 'q_max': 1.0}\n", " axis_ratio_padilla_strauss: {'q_min': 0.2, 'q_max': 1.0}\n", " axis_ratio_uniform: {'q_min': 0.2, 'q_max': 1.0}\n", "\n", "axis_rotation_angle:\n", " axis_rotation_angle_uniform: {'phi_min': 0.0, 'phi_max': 6.283185307179586}\n", "\n", "external_shear:\n", " external_shear_normal: {'mean': 0.0, 'std': 0.05}\n", "\n", "external_shear_sl:\n", " external_shear_normal: {'mean': 0.0, 'std': 0.05}\n", " external_shear_sl_numerical_hemanta: {'external_shear_normal': {'mean': 0.0, 'std': 0.05}}\n", "\n", "density_profile_slope:\n", " density_profile_slope_normal: {'mean': 1.99, 'std': 0.149}\n", "\n", "density_profile_slope_sl:\n", " density_profile_slope_normal: {'mean': 2.091, 'std': 0.133}\n", " density_profile_slope_sl_numerical_hemanta: {'density_profile_slope_normal': {'mean': 1.99, 'std': 0.149}}\n", "\n", "source_parameters:\n", " sample_gw_parameters: None\n", "\n" ] } ], "source": [ "# Display all available lens parameter sampler functions and their parameters\n", "print(\"Built-in lens parameter sampler functions and parameters:\\n\")\n", "for func_name, func_params in ler.available_lens_samplers.items():\n", " print(f\"{func_name}:\")\n", " \n", " if isinstance(func_params, dict):\n", " for param_name, param_value in func_params.items():\n", " print(f\" {param_name}: {param_value}\")\n", " else:\n", " print(f\" {func_params}\")\n", " print()" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Testing velocity_dispersion_gengamma function\n", "velocity_dispersion_gengamma interpolator will be loaded from ./interpolator_json/velocity_dispersion/velocity_dispersion_gengamma_2.json\n", "Velocity dispersion: [179.63602901 145.22139721 115.70296045 106.18811337\n", " 173.48569098] km/s\n" ] } ], "source": [ "# use the following code to inspect one of the velocity dispersion sampler functions\n", "# print(ler.velocity_dispersion_gengamma.__doc__)\n", "\n", "# Test one of the velocity dispersion sampler functions\n", "print(\"\\nTesting velocity_dispersion_gengamma sampler function\")\n", "size = 5\n", "print(f\"Velocity dispersion: {ler.velocity_dispersion_gengamma(size)} km/s\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.4. Accessing functions from the ler.gw_source_population module (Unlensed)" ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "merger_rate_density_bbh_oguri2018_function\n", "merger_rate_density_bbh_popIII_ken2022_function\n", "merger_rate_density_madau_dickinson2014_function\n", "merger_rate_density_madau_dickinson_belczynski_ng_function\n", "merger_rate_density_bbh_primordial_ken2022_function\n", "sfr_madau_fragos2017_with_bbh_td\n", "sfr_madau_dickinson2014_with_bbh_td\n", "sfr_madau_fragos2017_with_bns_td\n", "sfr_madau_dickinson2014_with_bns_td\n", "sfr_madau_fragos2017\n", "sfr_madau_dickinson2014\n", "binary_masses_BBH_popIII_lognormal_rvs\n", "binary_masses_BBH_primordial_lognormal_rvs\n", "binary_masses_BNS_bimodal_rvs\n", "binary_masses_NSBH_broken_powerlaw_rvs\n", "binary_masses_BBH_powerlaw_gaussian_rvs\n" ] } ], "source": [ "import ler.gw_source_population as gsp\n", "\n", "for prior in gsp.available_prior_list():\n", " print(prior)" ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Testing merger_rate_density_bbh_oguri2018 function\n", "Redshifts: [0.1 0.2 0.3]\n", "Merger Rate Denisty: [2.21298914e-08 2.57321630e-08 2.98600744e-08] Mpc^-3 yr^-1\n" ] } ], "source": [ "# use the following code to inspect one of the merger rate density function\n", "# print(gsp.merger_rate_density_bbh_oguri2018.__doc__)\n", "\n", "# Test one of the merger rate density function\n", "print(\"\\nTesting merger_rate_density_bbh_oguri2018 function\")\n", "zs = np.array([0.1, 0.2, 0.3])\n", "print(f\"Redshifts: {zs}\")\n", "print(f\"Merger Rate Denisty: {gsp.merger_rate_density_bbh_oguri2018_function(zs)} Mpc^-3 yr^-1\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 2.5. Accessing functions from the ler.lens_galaxy_population module (Lensed)" ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lens_redshift_strongly_lensed_sis_haris_pdf\n", "lens_redshift_strongly_lensed_sis_haris_rvs\n", "velocity_dispersion_ewoud_denisty_function\n", "velocity_dispersion_bernardi_denisty_function\n", "velocity_dispersion_gengamma_density_function\n", "velocity_dispersion_gengamma_pdf\n", "velocity_dispersion_gengamma_rvs\n", "axis_ratio_rayleigh_rvs\n", "axis_ratio_rayleigh_pdf\n", "axis_ratio_padilla_strauss_rvs\n", "axis_ratio_padilla_strauss_pdf\n", "bounded_normal_sample\n", "rejection_sampler\n", "importance_sampler\n", "importance_sampler_mp\n" ] } ], "source": [ "import ler.lens_galaxy_population as lgp\n", "\n", "for sampler in lgp.available_sampler_list():\n", " print(sampler)" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Testing velocity_dispersion_gengamma function\n", "Velocity dispersion: [100.68125009 168.74814017 107.05317212 192.6835846\n", " 120.50682314] km/s\n" ] } ], "source": [ "# use the following code to inspect one of the velocity dispersion sampler functions\n", "# print(lgp.velocity_dispersion_gengamma_rvs.__doc__)\n", "\n", "# Test one of the velocity dispersion sampler functions\n", "print(\"\\nTesting velocity_dispersion_gengamma sampler function\")\n", "size = 5\n", "print(f\"Velocity dispersion: {lgp.velocity_dispersion_gengamma_rvs(size)} km/s\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## 3. Using Custom Functions in LeR Initialization\n", "\n", "The `ler` package allows full customization of sampling functions and detection criteria. This section demonstrates a **Binary Neutron Star (BNS)** configuration with custom settings:\n", "\n", "| Component | Custom Configuration | Default (BBH) |\n", "| :--- | :--- | :--- |\n", "| **Event Type** | BNS (non-spinning) | BBH (spinning, aligned) |\n", "| **Merger Rate** | GWTC-3 based | GWTC-4 based |\n", "| **Source Masses** | Uniform 1.0-2.3 $M_{\\odot}$ | Bimodal Gaussian |\n", "| **Lens Model** | SIE (Singular Isothermal) | EPL+Shear |\n", "| **Velocity Dispersion** | $\\sigma_* = 161$ km/s | $\\sigma_* = 113.78$ km/s |\n", "| **Axis Ratio** | Padilla & Strauss (2008) | Rayleigh distribution |\n", "| **Detectors** | 3G (ET, CE), SNR > 12 | O4 (H1, L1, V1), SNR > 10 |\n", "\n", "**Notes:**\n", "\n", "- **GW parameter sampling priors** and **lens parameter samplers**: Must be a function with `size` as the only input argument, or a `ler.utils.FunctionConditioning` class object (preferred for lens parameters). Use `numba.njit` decorator for prior/sampler functions when possible. `ler.utils.FunctionConditioning` creates interpolators for the custom functions to speed up the calculations relying on numba njit.\n", "\n", "- **Merger rate density**: Must be a function of redshift, i.e., $F(z_s)$.\n", "\n", "- **Velocity dispersion function (galaxy number density)**: Must be a function of velocity dispersion, i.e., $F(\\sigma)$ or $F(\\sigma, z_l)$." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.1. Custom Event Type with non-spinning configuration\n", "\n", "Using `event_type='BNS'` in the LeR class initialization will default to the following GW parameter priors corresponding to BNS. Other allowed event types are 'BBH' and 'NSBH'.\n", "\n", "```python\n", " source_priors = dict(\n", " merger_rate_density = 'merger_rate_density_madau_dickinson2014',\n", " source_frame_masses = 'binary_masses_BNS_bimodal',\n", " a_1 = 'sampler_uniform',\n", " a_2 = 'sampler_uniform',\n", " ),\n", " source_priors_params= dict(\n", " merger_rate_density = dict(\n", " R0=89 * 1e-9, \n", " a=0.015, \n", " b=2.7, \n", " c=2.9, \n", " d=5.6,\n", " ),\n", " source_frame_masses = dict(\n", " w=0.643, \n", " muL=1.352, \n", " sigmaL=0.08, \n", " muR=1.88, \n", " sigmaR=0.3, \n", " mmin=1.0, \n", " mmax=2.3,\n", " ),\n", " a_1 = dict(xmin=-0.05, xmax=0.05),\n", " a_2 = dict(xmin=-0.05, xmax=0.05),\n", " ),\n", "```\n", "\n", "We will change some of these priors with our custom ones in the next sections.\n", "\n", "For non-spining configuration (for faster calculation in our example), we can set:\n", "\n", "```python\n", " spin_zero=True,\n", " spin_precession=False,\n", "```" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.2. Custom Merger Rate Density\n", "\n", "Using the default BNS merger rate density prior model with the local merger rate density change from the default value of $R_0 = 89 \\times 10^{-9} \\, \\text{Mpc}^{-3}\\text{yr}^{-1}$ (GWTC-4) to $R_0 = 105.5 \\times 10^{-9} \\, \\text{Mpc}^{-3}\\text{yr}^{-1}$ (GWTC-3)." ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Merger rate density function: merger_rate_density_madau_dickinson2014\n", "Parameters: {'R0': 8.9e-08, 'a': 0.015, 'b': 2.7, 'c': 2.9, 'd': 5.6}\n" ] } ], "source": [ "merger_rate_density_function = 'merger_rate_density_madau_dickinson2014'\n", "merger_rate_density_input_args = dict(\n", " R0=89e-9, \n", " a=0.015, \n", " b=2.7, \n", " c=2.9, \n", " d=5.6,\n", ")\n", "\n", "print(\"Merger rate density function:\", merger_rate_density_function)\n", "print(\"Parameters:\", merger_rate_density_input_args)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.3. Custom Source Frame Masses\n", "\n", "Using a uniform distribution to sample the binary masses mass_1 and mass_2. Swap values if mass_1 < mass_2." ] }, { "cell_type": "code", "execution_count": 6, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "mass_1: [2.09023289 1.46860688 1.67053465 1.60833021 1.97848449] M_sun\n", "mass_2: [1.07456818 1.03191177 1.41843627 1.22341249 1.41124184] M_sun\n" ] } ], "source": [ "import numpy as np\n", "\n", "# define the arguments for the bns bimodal pdf\n", "source_frame_masses_args = dict(\n", " mmin=1.0, # minimum mass of the black hole (Msun)\n", " mmax=2.3, # maximum mass of the black hole (Msun)\n", ")\n", "\n", "# define your custom function of mass_1_source and mass_2_source calculation\n", "# it should have 'size' as the only argument\n", "def source_frame_masses_uniform(size):\n", " \"\"\"\n", " Function to sample mass1 and mass2 from a powerlaw with a gaussian peak\n", "\n", " Parameters\n", " ----------\n", " size : `int`\n", " Number of samples to draw\n", "\n", " Returns\n", " -------\n", " mass_1_source : `numpy.ndarray`\n", " Array of mass1 samples. \n", " mass_2_source : `numpy.ndarray`\n", " Array of mass2 samples\n", " \"\"\"\n", "\n", " mass_1_source = np.random.uniform(source_frame_masses_args['mmin'], source_frame_masses_args['mmax'], size)\n", " mass_2_source = np.random.uniform(source_frame_masses_args['mmin'], source_frame_masses_args['mmax'], size)\n", " # swap if mass_2_source > mass_1_source\n", " idx = mass_2_source > mass_1_source\n", " mass_1_source[idx], mass_2_source[idx] = mass_2_source[idx], mass_1_source[idx] \n", "\n", " return (mass_1_source, mass_2_source)\n", "\n", "# test\n", "mass_1_source, mass_2_source = source_frame_masses_uniform(size=5)\n", "print(f\"mass_1: {mass_1_source} M_sun\")\n", "print(f\"mass_2: {mass_2_source} M_sun\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.4. Custom Lens Model\n", "\n", "Using `lens_model='sie_galaxy'` in the `LeR` initialization will use the following settings:\n", "\n", "```python\n", "lens_param_samplers = dict(\n", " source_redshift_sl=\"strongly_lensed_source_redshifts\",\n", " lens_redshift=\"lens_redshift_strongly_lensed_numerical\",\n", " velocity_dispersion=\"velocity_dispersion_ewoud\",\n", " axis_ratio=\"axis_ratio_rayleigh\",\n", " axis_rotation_angle=\"axis_rotation_angle_uniform\",\n", " external_shear=\"external_shear_normal\",\n", " density_profile_slope=\"density_profile_slope_normal\",\n", " external_shear_sl=\"external_shear_normal\",\n", " density_profile_slope_sl=\"density_profile_slope_normal\",\n", ")\n", "lens_param_samplers_params = dict(\n", " source_redshift_sl=None,\n", " lens_redshift=dict(integration_size=20000),\n", " velocity_dispersion=dict(\n", " sigma_min=100.0,\n", " sigma_max=400.0,\n", " alpha=0.94,\n", " beta=1.85,\n", " phistar=2.099e-2,\n", " sigmastar=113.78,\n", " ),\n", " axis_ratio=dict(q_min=0.2, q_max=1.0),\n", " axis_rotation_angle=dict(phi_min=0.0, phi_max=2 * np.pi),\n", " external_shear=dict(mean=0.0, std=0.0),\n", " density_profile_slope=dict(mean=2.0, std=0.0),\n", " external_shear_sl=dict(mean=0.0, std=0.0),\n", " density_profile_slope_sl=dict(mean=2.0, std=0.0),\n", ")\n", "lens_functions = dict(\n", " param_sampler_type=\"sample_all_routine_epl_shear_sl\",\n", " cross_section_based_sampler=\"importance_sampling_with_cross_section\",\n", " optical_depth=\"optical_depth_numerical\",\n", " cross_section=\"cross_section_sie_feixu\",\n", ")\n", "lens_functions_params = dict(\n", " param_sampler_type=None,\n", " cross_section_based_sampler=dict(n_prop=200),\n", " optical_depth=dict(interpolated_cross_section=True),\n", " cross_section=None,\n", ")\n", "```\n", "\n", "We will change the velocity dispersion and axis ratio samplers to our custom functions." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "#### 3.4.1. Custom Velocity Dispersion\n", "\n", "Unlike other lens parameter, custom velocity dispersion needs to be a density function." ] }, { "cell_type": "code", "execution_count": 7, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Velocity dispersions: [100. 200. 300.] km/s at lens redshifts: [0.1 0.2 0.3]\n", "Velocity dispersion density function values: [9.75545769e-05 3.09054569e-05 5.78714206e-06] Mpc^-3\n" ] } ], "source": [ "from numba import njit\n", "from ler.lens_galaxy_population import velocity_dispersion_ewoud_denisty_function\n", "\n", "velocity_dispersion_args = dict(\n", " sigma_min=100., # default ler sigma_min=100 km/s\n", " sigma_max=400., # default ler sigma_max=400 km/s\n", " alpha=0.94,\n", " beta=1.85,\n", " phistar=2.099e-2,\n", " sigmastar=161.0,\n", ")\n", "alpha = float(velocity_dispersion_args[\"alpha\"])\n", "beta = float(velocity_dispersion_args[\"beta\"])\n", "phistar = float(velocity_dispersion_args[\"phistar\"])\n", "sigmastar = float(velocity_dispersion_args[\"sigmastar\"])\n", "\n", "sigma_object = njit(\n", " lambda sigma, zl: velocity_dispersion_ewoud_denisty_function( # noqa: E731\n", " sigma,\n", " zl,\n", " alpha=alpha,\n", " beta=beta,\n", " phistar=phistar,\n", " sigmastar=sigmastar,\n", " )\n", ")\n", "\n", "# Test\n", "sigma = np.array([100., 200., 300.])\n", "zl = np.array([0.1, 0.2, 0.3])\n", "print(f\"Velocity dispersions: {sigma} km/s at lens redshifts: {zl}\")\n", "print(f\"Velocity dispersion density function values: {sigma_object(sigma, zl)} Mpc^-3\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uncomment and run the following if you want to use `ler.utils.FunctionConditioning` class object." ] }, { "cell_type": "code", "execution_count": 8, "metadata": {}, "outputs": [], "source": [ "# import numpy as np\n", "# from ler.utils import FunctionConditioning, redshift_optimal_spacing\n", "# # import number density function wrt velocity dispersion and redshift\n", "# from ler.lens_galaxy_population import velocity_dispersion_ewoud_denisty_function\n", "\n", "# velocity_dispersion_args = dict(\n", "# sigma_min=100, # default ler sigma_min=100 km/s\n", "# sigma_max=400, # default ler sigma_max=400 km/s\n", "# alpha=0.94,\n", "# beta=1.85,\n", "# phistar=2.099e-2,\n", "# sigmastar=161.0,\n", "# )\n", "\n", "# # identifier_dict dict allows for easy tracking of the generated interpolator in future usage\n", "# identifier_dict = {\"name\": \"velocity_dispersion_custom\"}\n", "# identifier_dict[\"sigma_min\"] = velocity_dispersion_args[\"sigma_min\"]\n", "# identifier_dict[\"sigma_max\"] = velocity_dispersion_args[\"sigma_max\"]\n", "# identifier_dict[\"resolution\"] = 500\n", "# identifier_dict[\"zl_resolution\"] = 48\n", "\n", "# # setting up inputs for the interpolator\n", "# # Note: sigma_array and zl_array will form a 2D grid where the function is evaluated. Gird points are use for cubic spline interpolation.\n", "# sigma_array = np.linspace(\n", "# identifier_dict[\"sigma_min\"],\n", "# identifier_dict[\"sigma_max\"],\n", "# identifier_dict[\"resolution\"],\n", "# )\n", "# z_min = 0.001\n", "# z_max = 10.0\n", "# z_resolution = identifier_dict[\"zl_resolution\"]\n", "# zl_array = redshift_optimal_spacing(z_min, z_max, z_resolution)\n", "\n", "# # define the function\n", "# number_density_function = lambda sigma, zl: velocity_dispersion_ewoud_denisty_function( # noqa: E731\n", "# sigma,\n", "# zl,\n", "# alpha=velocity_dispersion_args[\"alpha\"],\n", "# beta=velocity_dispersion_args[\"beta\"],\n", "# phistar=velocity_dispersion_args[\"phistar\"],\n", "# sigmastar=velocity_dispersion_args[\"sigmastar\"],\n", "# )\n", "\n", "# sigma_object = FunctionConditioning(\n", "# function=number_density_function,\n", "# x_array=sigma_array,\n", "# conditioned_y_array=zl_array,\n", "# identifier_dict=identifier_dict,\n", "# directory=\"./interpolator_json\",\n", "# sub_directory=\"velocity_dispersion\",\n", "# name=identifier_dict[\"name\"],\n", "# create_new=False,\n", "# create_function_inverse=False,\n", "# create_function=True,\n", "# create_pdf=True,\n", "# create_rvs=True,\n", "# callback=\"rvs\",\n", "# )\n", "\n", "# # Test\n", "# sigma = np.array([100., 200., 300.])\n", "# zl = np.array([0.1, 0.2, 0.3])\n", "# print(f\"Velocity dispersions: {sigma} km/s at lens redshifts: {zl}\")\n", "# print(f\"Velocity dispersion density function values: {sigma_object.function(sigma, zl)} Mpc^-3\")\n", "# print(f\"Random velocity dispersion samples: {sigma_object.rvs(len(zl), zl)} Mpc^-3\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.4.2. Custom Axis Ratio" ] }, { "cell_type": "code", "execution_count": 9, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Axis ratio samples: [0.9850404 0.89142491 0.76789661 0.41975975 0.6750933 ]\n" ] } ], "source": [ "from scipy.interpolate import CubicSpline # noqa: E402\n", "from ler.utils import inverse_transform_sampler # noqa: E402\n", "from numba import njit # noqa: E402\n", "\n", "axis_ratio_args = dict(\n", " q_min=0.2,\n", " q_max=1.0,\n", ")\n", "\n", "# Using Padilla and Strauss 2008 distribution for axis ratio\n", "q_array = np.array(\n", " [0.04903276402927845,0.09210526315789469,0.13596491228070173,0.20789473684210524,0.2899703729522482,0.3230132450331126,0.35350877192982455,0.37946148483792264,0.4219298245614036,0.4689525967235971,0.5075026141512723,0.5226472638550018,0.5640350877192983,0.6096491228070177,0.6500000000000001,0.6864848379226213,0.7377192982456142,0.7787295224817011,0.8007581038689441,0.822786685256187,0.8668438480306729,0.8973684210526317,0.9254385964912283,\n", " ]\n", ")\n", "pdf = np.array(\n", " [0.04185262687135349,0.06114520695141845,0.096997499638376,0.1932510900336828,0.39547914337673706,0.49569751276216234,0.6154609137685201,0.7182049959882812,0.920153741243567,1.1573982157399754,1.3353263628106684,1.413149656448315,1.5790713532948977,1.7280185150744938,1.8132994441344819,1.8365803753840484,1.8178662203211204,1.748929843583365,1.688182592496342,1.6274353414093188,1.4948487090314488,1.402785526832393,1.321844068356993,\n", " ]\n", ")\n", "\n", "# Interpolate the pdf\n", "spline = CubicSpline(q_array, pdf, extrapolate=True)\n", "q_array = np.linspace(axis_ratio_args['q_min'], axis_ratio_args['q_max'], 500)\n", "pdf = spline(q_array)\n", "cdf_values = np.cumsum(pdf)\n", "cdf_values /= cdf_values[-1] # normalize\n", "\n", "q_object = njit(lambda size: inverse_transform_sampler(size, cdf_values, q_array))\n", "\n", "# test\n", "q_samples = q_object(5)\n", "print(f\"Axis ratio samples: {q_samples}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Uncomment and run the following if you want to use `ler.utils.FunctionConditioning` class object." ] }, { "cell_type": "code", "execution_count": 10, "metadata": {}, "outputs": [], "source": [ "# from scipy.interpolate import CubicSpline # noqa: E402\n", "# from ler.utils import FunctionConditioning # noqa: E402\n", "\n", "# axis_ratio_args = dict(\n", "# q_min=0.2,\n", "# q_max=1.0,\n", "# )\n", "\n", "# identifier_dict = {\"name\": \"axis_ratio_padilla_strauss_custom\"}\n", "# identifier_dict[\"q_min\"] = axis_ratio_args[\"q_min\"]\n", "# identifier_dict[\"q_max\"] = axis_ratio_args[\"q_max\"]\n", "# identifier_dict[\"resolution\"] = 500\n", "\n", "# # Using Padilla and Strauss 2008 distribution for axis ratio\n", "# q_array = np.array(\n", "# [0.04903276402927845,0.09210526315789469,0.13596491228070173,0.20789473684210524,0.2899703729522482,0.3230132450331126,0.35350877192982455,0.37946148483792264,0.4219298245614036,0.4689525967235971,0.5075026141512723,0.5226472638550018,0.5640350877192983,0.6096491228070177,0.6500000000000001,0.6864848379226213,0.7377192982456142,0.7787295224817011,0.8007581038689441,0.822786685256187,0.8668438480306729,0.8973684210526317,0.9254385964912283,\n", "# ]\n", "# )\n", "# pdf = np.array(\n", "# [0.04185262687135349,0.06114520695141845,0.096997499638376,0.1932510900336828,0.39547914337673706,0.49569751276216234,0.6154609137685201,0.7182049959882812,0.920153741243567,1.1573982157399754,1.3353263628106684,1.413149656448315,1.5790713532948977,1.7280185150744938,1.8132994441344819,1.8365803753840484,1.8178662203211204,1.748929843583365,1.688182592496342,1.6274353414093188,1.4948487090314488,1.402785526832393,1.321844068356993,\n", "# ]\n", "# )\n", "\n", "# # Interpolate the pdf\n", "# spline = CubicSpline(q_array, pdf, extrapolate=True)\n", "# q_array = np.linspace(identifier_dict[\"q_min\"], identifier_dict[\"q_max\"], identifier_dict[\"resolution\"])\n", "# pdf = spline(q_array)\n", "\n", "# q_object = FunctionConditioning(\n", "# function=pdf, # it also allows precomputed values, besides function\n", "# x_array=q_array,\n", "# conditioned_y_array=None,\n", "# identifier_dict=identifier_dict,\n", "# directory=\"./interpolator_json\",\n", "# sub_directory=\"axis_ratio\",\n", "# name=\"axis_ratio_padilla_strauss\",\n", "# create_new=False,\n", "# create_function_inverse=False,\n", "# create_function=True,\n", "# create_pdf=True,\n", "# create_rvs=True,\n", "# callback=\"rvs\",\n", "# )\n", "\n", "# # test\n", "# # sampling\n", "# q_samples = q_object.rvs(5)\n", "# print(f\"Axis ratio samples: {q_samples}\")\n", "# # pdf\n", "# q_pdf = q_object.pdf(q_samples)\n", "# print(f\"Axis ratio pdf values: {q_samples}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.5. Custom Detection Criteria\n", "\n", "Define a custom pdet_finder using 3G detectors (Einstein Telescope and Cosmic Explorer) with SNR threshold of 12." ] }, { "cell_type": "code", "execution_count": 11, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing GWSNR class...\n", "\n", "Interpolator will be generated for ET1 detector at ./interpolator_json/ET1/partialSNR_dict_0.json\n", "Interpolator will be generated for ET2 detector at ./interpolator_json/ET2/partialSNR_dict_0.json\n", "Interpolator will be generated for ET3 detector at ./interpolator_json/ET3/partialSNR_dict_0.json\n", "Interpolator will be generated for CE detector at ./interpolator_json/CE/partialSNR_dict_0.json\n", "Please be patient while the interpolator is generated\n", "Generating interpolator for ['ET1', 'ET2', 'ET3', 'CE'] detectors\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████| 4000/4000 [00:03<00:00, 1283.60it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "\n", "Saving Partial-SNR for ET1 detector with shape (20, 200)\n", "\n", "Saving Partial-SNR for ET2 detector with shape (20, 200)\n", "\n", "Saving Partial-SNR for ET3 detector with shape (20, 200)\n", "\n", "Saving Partial-SNR for CE detector with shape (20, 200)\n", "\n", "\n", "GW parameters: {'mass_1': array([20., 20.]), 'mass_2': array([10., 10.]), 'luminosity_distance': array([1000., 2000.])}\n", "Detection criteria results: {'optimal_snr_ET1': array([26.4831826, 13.2415913]), 'optimal_snr_ET2': array([75.61201064, 37.80600532]), 'optimal_snr_ET3': array([84.12758283, 42.06379141]), 'optimal_snr_CE': array([391.759156, 195.879578]), 'optimal_snr_net': array([408.62112233, 204.31056117]), 'pdet_net': array([ True, True])}\n" ] } ], "source": [ "# Define a function that sets detection criteria\n", "from gwsnr import GWSNR\n", "\n", "# 3G detectors: Einstein Telescope (ET) and Cosmic Explorer (CE)\n", "mmin, mmax = 1.0, 2.3\n", "zmin, zmax = 0.0, 10.0\n", "\n", "gwsnr_3g = GWSNR(\n", " npool=4,\n", " ifos=['ET', 'CE'], # 3G detector network\n", " snr_method='interpolation_no_spins', # BNS have no spins\n", " mtot_min=2*mmin*(1+zmin), mtot_max=2*mmax*(1+zmax),\n", " sampling_frequency=2048.0, waveform_approximant='IMRPhenomD',\n", " minimum_frequency=20.0, gwsnr_verbose=False,\n", ")\n", "\n", "def detection_criteria(gw_param_dict, detection_threshold=12):\n", " \"\"\"Custom detection criteria for 3G detectors with SNR > 12.\"\"\"\n", " dict_ = {}\n", " dict_.update(gwsnr_3g.optimal_snr(gw_param_dict=gw_param_dict))\n", " dict_['pdet_net'] = dict_['optimal_snr_net'] > detection_threshold\n", " return dict_\n", "\n", "# test\n", "gw_param_dict = dict(\n", " mass_1 = np.array([20.0, 20.0]),\n", " mass_2 = np.array([10.0, 10.0]),\n", " luminosity_distance = np.array([1000.0, 2000.0]),\n", ")\n", "detection_dict = detection_criteria(gw_param_dict)\n", "print(f\"GW parameters: {gw_param_dict}\")\n", "print(f\"Detection criteria results: {detection_dict}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.6. LeR initialization with custom functions and parameters \n", "\n", "Create a `LeR` instance with custom source priors, lens samplers, and detection criteria for BNS events." ] }, { "cell_type": "code", "execution_count": 12, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "\n", "Initializing LeR class...\n", "\n", "\n", "Initializing LensGalaxyParameterDistribution class...\n", "\n", "\n", "Initializing OpticalDepth class\n", "\n", "comoving_distance interpolator will be loaded from ./interpolator_json/comoving_distance/comoving_distance_0.json\n", "angular_diameter_distance interpolator will be loaded from ./interpolator_json/angular_diameter_distance/angular_diameter_distance_0.json\n", "angular_diameter_distance interpolator will be loaded from ./interpolator_json/angular_diameter_distance/angular_diameter_distance_0.json\n", "differential_comoving_volume interpolator will be loaded from ./interpolator_json/differential_comoving_volume/differential_comoving_volume_0.json\n", "using user provided custom velocity_dispersion function\n", "velocity_dispersion_custom interpolator will be generated at ./interpolator_json/velocity_dispersion/velocity_dispersion_custom_1.json\n", "using user provided custom axis_ratio sampler function\n", "using ler available axis_rotation_angle function : axis_rotation_angle_uniform\n", "using ler available density_profile_slope function : density_profile_slope_normal\n", "using ler available external_shear function : external_shear_normal\n", "using ler available lens_redshift function : lens_redshift_strongly_lensed_numerical\n", "Numerically solving the lens redshift distribution...\n", "Using multithreaded njit\n", "lens_redshift_strongly_lensed_numerical_sie_galaxy interpolator will be generated at ./interpolator_json/lens_redshift/lens_redshift_strongly_lensed_numerical_sie_galaxy_2.json\n", "lens_redshift_intrinsic interpolator will be generated at ./interpolator_json/lens_redshift_intrinsic/lens_redshift_intrinsic_2.json\n", "using ler available density_profile_slope_sl function : density_profile_slope_normal\n", "using ler available external_shear_sl function : external_shear_normal\n", "using ler available optical depth function : optical_depth_numerical\n", "optical_depth_numerical interpolator will be generated at ./interpolator_json/optical_depth/optical_depth_numerical_2.json\n", "\n", "Initializing CBCSourceRedshiftDistribution class...\n", "\n", "luminosity_distance interpolator will be loaded from ./interpolator_json/luminosity_distance/luminosity_distance_0.json\n", "differential_comoving_volume interpolator will be loaded from ./interpolator_json/differential_comoving_volume/differential_comoving_volume_0.json\n", "using ler available merger rate density model: merger_rate_density_madau_dickinson2014\n", "merger_rate_density_madau_dickinson2014 interpolator will be generated at ./interpolator_json/merger_rate_density/merger_rate_density_madau_dickinson2014_2.json\n", "merger_rate_density_detector_frame interpolator will be generated at ./interpolator_json/merger_rate_density/merger_rate_density_detector_frame_3.json\n", "source_redshift interpolator will be generated at ./interpolator_json/source_redshift/source_redshift_1.json\n", "\n", "Initializing CBCSourceParameterDistribution class...\n", "\n", "using ler available zs function : source_redshift\n", "using user defined custom source_frame_masses function\n", "using ler available geocent_time function : sampler_uniform\n", "using ler available ra function : sampler_uniform\n", "using ler available dec function : sampler_cosine\n", "using ler available phase function : sampler_uniform\n", "using ler available psi function : sampler_uniform\n", "using ler available theta_jn function : sampler_sine\n", "using ler available a_1 function : sampler_uniform\n", "using ler available a_2 function : sampler_uniform\n", "Faster, njitted and importance sampling based lens parameter sampler will be used.\n", "#-------------------------------------\n", "# LeR initialization input arguments:\n", "#-------------------------------------\n", "\n", " # LeR set up input arguments:\n", " npool = 4,\n", " z_min = 0.0,\n", " z_max = 10.0,\n", " event_type = 'BNS',\n", " lens_type = 'sie_galaxy',\n", " cosmology = LambdaCDM(H0=70.0 km / (Mpc s), Om0=0.3, Ode0=0.7, Tcmb0=0.0 K, Neff=3.04, m_nu=None, Ob0=0.0),\n", " pdet_finder = ,\n", " json_file_names = dict(\n", " ler_params = 'ler_params.json',\n", " unlensed_param = 'unlensed_param.json',\n", " unlensed_param_detectable = 'unlensed_param_detectable.json',\n", " lensed_param = 'lensed_param.json',\n", " lensed_param_detectable = 'lensed_param_detectable.json',\n", " ),\n", " interpolator_directory = './interpolator_json',\n", " ler_directory = './ler_data_custom',\n", " create_new_interpolator = dict(\n", " merger_rate_density = {'create_new': False, 'resolution': 500},\n", " redshift_distribution = {'create_new': False, 'resolution': 500},\n", " luminosity_distance = {'create_new': False, 'resolution': 500},\n", " differential_comoving_volume = {'create_new': False, 'resolution': 500},\n", " source_frame_masses = {'create_new': False, 'resolution': 500},\n", " geocent_time = {'create_new': False, 'resolution': 500},\n", " ra = {'create_new': False, 'resolution': 500},\n", " dec = {'create_new': False, 'resolution': 500},\n", " phase = {'create_new': False, 'resolution': 500},\n", " psi = {'create_new': False, 'resolution': 500},\n", " theta_jn = {'create_new': False, 'resolution': 500},\n", " a_1 = {'create_new': False, 'resolution': 500},\n", " a_2 = {'create_new': False, 'resolution': 500},\n", " tilt_1 = {'create_new': False, 'resolution': 500},\n", " tilt_2 = {'create_new': False, 'resolution': 500},\n", " phi_12 = {'create_new': False, 'resolution': 500},\n", " phi_jl = {'create_new': False, 'resolution': 500},\n", " velocity_dispersion = {'create_new': False, 'resolution': 500, 'zl_resolution': 48},\n", " axis_ratio = {'create_new': False, 'resolution': 500, 'sigma_resolution': 48},\n", " lens_redshift = {'create_new': False, 'resolution': 48, 'zl_resolution': 48},\n", " lens_redshift_intrinsic = {'create_new': False, 'resolution': 500},\n", " optical_depth = {'create_new': False, 'resolution': 48},\n", " comoving_distance = {'create_new': False, 'resolution': 500},\n", " angular_diameter_distance = {'create_new': False, 'resolution': 500},\n", " angular_diameter_distance_z1z2 = {'create_new': False, 'resolution': 500},\n", " density_profile_slope = {'create_new': False, 'resolution': 100},\n", " lens_parameters_kde_sl = {'create_new': False, 'resolution': 5000},\n", " cross_section = {'create_new': False, 'resolution': [25, 25, 5, 5, 5]},\n", " ),\n", "\n", " # LeR also takes other CBCSourceParameterDistribution class input arguments as kwargs, as follows:\n", " source_priors = dict(\n", " merger_rate_density = 'merger_rate_density_madau_dickinson2014',\n", " zs = 'source_redshift',\n", " source_frame_masses = ,\n", " geocent_time = 'sampler_uniform',\n", " ra = 'sampler_uniform',\n", " dec = 'sampler_cosine',\n", " phase = 'sampler_uniform',\n", " psi = 'sampler_uniform',\n", " theta_jn = 'sampler_sine',\n", " a_1 = 'sampler_uniform',\n", " a_2 = 'sampler_uniform',\n", " ),\n", " source_priors_params = dict(\n", " merger_rate_density = {'R0': 8.9e-08, 'a': 0.015, 'b': 2.7, 'c': 2.9, 'd': 5.6},\n", " zs = None,\n", " source_frame_masses = {'mmin': 1.0, 'mmax': 2.3},\n", " geocent_time = {'xmin': 1238166018, 'xmax': 1269702018},\n", " ra = {'xmin': 0.0, 'xmax': 6.283185307179586},\n", " dec = None,\n", " phase = {'xmin': 0.0, 'xmax': 6.283185307179586},\n", " psi = {'xmin': 0.0, 'xmax': 3.141592653589793},\n", " theta_jn = None,\n", " a_1 = {'xmin': -0.05, 'xmax': 0.05},\n", " a_2 = {'xmin': -0.05, 'xmax': 0.05},\n", " merger_rate_density_input_args = {'R0': 8.9e-08, 'a': 0.015, 'b': 2.7, 'c': 2.9, 'd': 5.6},\n", " ),\n", " spin_zero = False,\n", " spin_precession = False,\n", "\n", " # LeR also takes other LensGalaxyParameterDistribution class input arguments as kwargs, as follows:\n", " lens_functions = dict(\n", " param_sampler_type = 'sample_all_routine_epl_shear_sl',\n", " cross_section_based_sampler = 'importance_sampling_with_cross_section',\n", " optical_depth = 'optical_depth_numerical',\n", " cross_section = 'cross_section_sie_feixu',\n", " ),\n", " lens_functions_params = dict(\n", " param_sampler_type = None,\n", " cross_section_based_sampler = {'n_prop': 200},\n", " optical_depth = None,\n", " cross_section = None,\n", " ),\n", " lens_param_samplers = dict(\n", " source_redshift_sl = 'strongly_lensed_source_redshifts',\n", " lens_redshift = 'lens_redshift_strongly_lensed_numerical',\n", " velocity_dispersion = CPUDispatcher( at 0x30d9667a0>),\n", " axis_ratio = CPUDispatcher( at 0x30ea01a20>),\n", " axis_rotation_angle = 'axis_rotation_angle_uniform',\n", " external_shear = 'external_shear_normal',\n", " density_profile_slope = 'density_profile_slope_normal',\n", " external_shear_sl = 'external_shear_normal',\n", " density_profile_slope_sl = 'density_profile_slope_normal',\n", " ),\n", " lens_param_samplers_params = dict(\n", " source_redshift_sl = None,\n", " lens_redshift = {'integration_size': 25000, 'use_multiprocessing': False},\n", " velocity_dispersion = {'sigma_min': 100.0, 'sigma_max': 400.0, 'alpha': 0.94, 'beta': 1.85, 'phistar': 0.02099, 'sigmastar': 161.0, 'name': 'CPUDispatcher( at 0x30d9667a0>)'},\n", " axis_ratio = {'q_min': 0.2, 'q_max': 1.0, 'name': 'CPUDispatcher( at 0x30ea01a20>)'},\n", " axis_rotation_angle = {'phi_min': 0.0, 'phi_max': 6.283185307179586, 'name': 'axis_rotation_angle_uniform'},\n", " external_shear = {'mean': 0.0, 'std': 0.0, 'name': 'external_shear_normal'},\n", " density_profile_slope = {'mean': 2.0, 'std': 0.0, 'name': 'density_profile_slope_normal'},\n", " external_shear_sl = {'mean': 0.0, 'std': 0.0},\n", " density_profile_slope_sl = {'mean': 2.0, 'std': 0.0},\n", " ),\n", "\n", " # LeR also takes other ImageProperties class input arguments as kwargs, as follows:\n", " n_min_images = 2,\n", " n_max_images = 4,\n", " time_window = 630720000,\n", " lens_model_list = ['EPL_NUMBA', 'SHEAR'],\n" ] } ], "source": [ "from ler import LeR\n", "\n", "ler = LeR(\n", " # Core setup\n", " npool=6, \n", " event_type='BNS', \n", " lens_type='sie_galaxy',\n", " \n", " # Source priors\n", " source_priors=dict(\n", " merger_rate_density=merger_rate_density_function,\n", " source_frame_masses=source_frame_masses_uniform,\n", " ),\n", " source_priors_params=dict(\n", " merger_rate_density_input_args=merger_rate_density_input_args,\n", " source_frame_masses=source_frame_masses_args,\n", " ),\n", " \n", " # Lens samplers\n", " lens_param_samplers=dict(\n", " velocity_dispersion=sigma_object,\n", " axis_ratio=q_object,\n", " ),\n", " lens_param_samplers_params=dict(\n", " velocity_dispersion=velocity_dispersion_args,\n", " axis_ratio=axis_ratio_args,\n", " ),\n", " \n", " # Custom detection\n", " pdet_finder=detection_criteria,\n", " ler_directory='./ler_data_custom',\n", ")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.7. Simulate Unlensed Population\n", "\n", "Generate unlensed BNS events using the custom mass distribution and merger rate density." ] }, { "cell_type": "code", "execution_count": 13, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "unlensed params will be stored in ./ler_data_custom/unlensed_param.json\n", "removing ./ler_data_custom/unlensed_param.json if it exists\n", "Batch no. 1\n", "sampling gw source params...\n", "calculating pdet...\n", "Batch no. 2\n", "sampling gw source params...\n", "calculating pdet...\n", "saving all unlensed parameters in ./ler_data_custom/unlensed_param.json \n", "\n", "Total unlensed events simulated: 100000\n", "Sample source redshift values (first 5): [1.0798551 2.65632985 2.30421358 1.69783832 3.2816481 ]\n", "Sample masses (first 3):\n", " mass_1: [1.55198577 1.88467379 1.81525025]\n", " mass_2: [1.46257376 1.57992731 1.16406823]\n" ] } ], "source": [ "unlensed_params = ler.unlensed_cbc_statistics(size=100000, batch_size=50000, resume=False)\n", "\n", "print(f\"\\nTotal unlensed events simulated: {len(unlensed_params['zs'])}\")\n", "print(f\"Sample source redshift values (first 5): {unlensed_params['zs'][:5]}\")\n", "print(f\"Sample masses (first 3):\")\n", "print(f\" mass_1: {unlensed_params['mass_1_source'][:3]}\")\n", "print(f\" mass_2: {unlensed_params['mass_2_source'][:3]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.8. Simulate Lensed Population\n", "\n", "Generate lensed BNS events with custom lens parameters." ] }, { "cell_type": "code", "execution_count": 14, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "lensed params will be stored in ./ler_data_custom/lensed_param.json\n", "removing ./ler_data_custom/lensed_param.json if it exists\n", "resuming from ./ler_data_custom/lensed_param.json\n", "Batch no. 1\n", "sampling lensed params...\n", "sampling lens parameters with sample_all_routine_epl_shear_sl...\n", "solving lens equations...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████████████████████████████████████████████████| 50000/50000 [00:10<00:00, 4816.21it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "calculating pdet...\n", "Batch no. 2\n", "sampling lensed params...\n", "sampling lens parameters with sample_all_routine_epl_shear_sl...\n", "solving lens equations...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|███████████████████████████████████████████████████████| 50000/50000 [00:10<00:00, 4809.01it/s]\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Invalid sample found. Resampling 1 lensed events...\n", "sampling lens parameters with sample_all_routine_epl_shear_sl...\n", "solving lens equations...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "100%|█████████████████████████████████████████████████████████████████| 1/1 [00:00<00:00, 12.23it/s]" ] }, { "name": "stdout", "output_type": "stream", "text": [ "calculating pdet...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "saving all lensed parameters in ./ler_data_custom/lensed_param.json \n", "\n", "Total lensed events simulated: 100000\n", "Sample source redshift values (first 5): [4.25945945 1.28500027 2.61792349 3.42629727 1.72747368]\n", "Lens parameters (first 3):\n", " zl: [0.73197694 0.74514873 0.55391098]\n", " sigma: [296.85963794 163.39531054 204.47901801]\n", " q: [0.52023232 0.51420932 0.904827 ]\n" ] } ], "source": [ "lensed_params = ler.lensed_cbc_statistics(size=100000, batch_size=50000, resume=True)\n", "\n", "print(f\"\\nTotal lensed events simulated: {len(lensed_params['zs'])}\")\n", "print(f\"Sample source redshift values (first 5): {lensed_params['zs'][:5]}\")\n", "print(f\"Lens parameters (first 3):\")\n", "lens_params = ['zl', 'sigma', 'q']\n", "for param in lens_params:\n", " if param in lensed_params:\n", " print(f\" {param}: {lensed_params[param][:3]}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 3.9. Calculate Rates and Compare Results\n", "\n", "Calculate unlensed and lensed detection rates using the custom detection criteria." ] }, { "cell_type": "code", "execution_count": 15, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Getting unlensed_param from json file ./ler_data_custom/unlensed_param.json...\n", "total unlensed rate (yr^-1): 79053.69300632227\n", "number of simulated unlensed detectable events: 23840\n", "number of simulated all unlensed events: 100000\n", "storing detectable params in ./ler_data_custom/unlensed_param_detectable.json\n", "Getting lensed_param from json file ./ler_data_custom/lensed_param.json...\n", "total lensed rate (yr^-1): 104.48202564718511\n", "number of simulated lensed detectable events: 8227\n", "number of simulated all lensed events: 100000\n", "storing detectable params in ./ler_data_custom/lensed_param_detectable.json\n", "unlensed_rate: 79053.69300632227\n", "lensed_rate: 104.48202564718511\n", "ratio: 756.6248119391441\n", "\n", "=== Detection Rates (BNS with Custom Configuration) ===\n", "Unlensed rate: 7.9054e+04 events/year\n", "Lensed rate: 1.0448e+02 events/year\n", "Rate ratio (lensed/unlensed): 756.6248\n" ] } ], "source": [ "# Calculate detection rates\n", "rate_unlensed, unlensed_param_detectable = ler.unlensed_rate()\n", "rate_lensed, lensed_param_detectable = ler.lensed_rate()\n", "rate_ratio = ler.rate_ratio()\n", "\n", "print(f\"\\n=== Detection Rates (BNS with Custom Configuration) ===\")\n", "print(f\"Unlensed rate: {rate_unlensed:.4e} events/year\")\n", "print(f\"Lensed rate: {rate_lensed:.4e} events/year\")\n", "print(f\"Rate ratio (lensed/unlensed): {rate_ratio:.4f}\")" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "---\n", "\n", "## 4. Compare Custom vs Default Models\n", "\n", "### 4.1. Mass Distribution Comparison\n", "\n", "Compare the custom uniform mass distribution with the default BNS bimodal distribution." ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "image/png": "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zburq6tqOjt+/HikpKSgqBAXmyAYwI7iealJJAiCZRAbG6uETb9+/fDHH38oMTRmzBgE68U/vfTSS0oQHTx4UImOV155BQMHDlSihjd7fbfY3r17lSDauHEj2rZtqwRGq1at0LNnT3Tr1i3X46Lgat68uRobz5EdR48eRadOnXDx4kX8+++/6n08/vjjSshQ+LRp00aJK3atnzNnDiZPnozffvtNjW3Hjh149tlnlUB74YUX8OWXX+Krr77C8uXL0ahRI/Uenn/+efj4+GQIya5duypRxEe+f85DYGBghjjMiaSkJHXOO3fuqPN7eXmpee3duzfmzp2Lvn374vz58xg8eHDGMYmJiUqscduCBQtw9epVPPPMM0qsZuXOKwxEIAmCgTjquaYnElIT8lTVmlWxBUEwb/78808lQGbNmqWsKjoL0Pr169Xza9euYdGiRcpKROsSrTncTssQBQOtHvrQqrJ7925lZaHVKDo6Gra2tvmOTcoOT09PTJs2DXZ2dujVq5da9+qrryprF2nZsmWG649CacKECejSpYv6m4/8+4svvlACidYlCjOKKsLXoxj87bff1N+fffaZEil9+vRRf3fv3l1tp/DKjUCiGH3yySeVwDl+/LiyUhEKI76WLk6pcePGaky6cVK40lo0depUNZf169fH559/jiFDhuD9999XAq+wEYEkCHrQckRxNL3tdFT2rGzUsdIXTRAsA1qKKGp04kgnOiiGdK4dUqNGjUzHpaen49y5cw8IJB5LF9fLL78Md3d3ddzDgqzzG4BdokQJJY4IxRvheXXo1hGKvDp16mQ6nq5ABkLr5sLw/dSqVSvjOcXi5s2bsWTJkkzzQFdZbuC8DBo0CP/99x82bdqkxJLuvA0aNHjoeTl2utf0540uwaioKGWFKmxEIAlCFlAc1fatbephCIJQCFSoUAGXL19W1h7GvxBafXSxMboMKv5N8UPBwZvz4cOHHxAThJYNxs/QxaUTKqtXr87YTjHDG7sOnQArqvd65syZTK4+/q17j9xO0Uf3mf52HdyP7savv/46Yx3jm2gZyg09evTAL7/8okTjiBEjcPLkSRVPpDuvPobnpbA7ceJExjqek664ohBHRIK0BUEQhGIFb9oURnRLhYeH48aNGyqGiLEyhAHL3GfUqFHK0sH1dEXR/ZOVa+fu3btKRNFtR+vGlClT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", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "import ler.utils as lerplt\n", "import matplotlib.pyplot as plt\n", "\n", "# Compare mass distributions\n", "m1_custom, m2_custom = source_frame_masses_uniform(size=5000)\n", "m1_default, m2_default = ler.binary_masses_BNS_bimodal(size=5000)\n", "\n", "custom_dict = dict(mass_1=m1_custom)\n", "default_dict = dict(mass_1=m1_default)\n", "\n", "# Plot comparison\n", "plt.figure(figsize=(6, 4))\n", "lerplt.param_plot(\n", " param_name=\"mass_1\", \n", " param_dict=custom_dict, # or the json file name\n", " plot_label='custom model',\n", ");\n", "lerplt.param_plot(\n", " param_name=\"mass_1\", \n", " param_dict=default_dict,\n", " plot_label='default model',\n", ");\n", "plt.xlabel(r'Primary Mass $m_1$ ($M_{\\odot}$)', fontsize=11)\n", "plt.ylabel(r'Probability Density', fontsize=11)\n", "plt.title('BNS Mass Distribution (Source Frame)', fontsize=13, fontweight='bold')\n", "plt.xlim(1.0, 2.3)\n", "plt.grid(alpha=0.3)\n", "plt.legend(fontsize=10)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### 4.2. Axis-Ratio Distribution Comparison\n", "\n", "Compare the default axis-ratio distribution (Rayleigh distribution, Collet et al. 2018) with custom axis-ratio distribution (Padilla and Strauss 2008)" ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "axis_ratio_rayleigh interpolator will be generated at ./interpolator_json/axis_ratio/axis_ratio_rayleigh_2.json\n" ] }, { "data": { "image/png": "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NQ/LJIQTD369fft28/v8PDMz87wJ0jXXXCPJEA+c9PA8+HlGRoY5IYmLi1OlpaXm6bKysuRz/B7jJIvn1dyy5ebmymt+tDRx4kTl7e0tCZQWj+PkccaMGee8x4niggULmo0LAC4fVLEBQJukp6dLtRM3iOaqJB74eXFxMW3btk0+w1Vl69atk9enT5+WaqbmcFUUV9UNHTqU+vXrR88++yzV1dXRiBEjzrscI0eOpP3798vA1X35+fkUEhJCMTExdOLECfL29qb58+fL+Jdeekk+HxkZKdP+lwf9P543t0cKDg62Gj98+HD65ZdfqKys7Jxpjh49SqWlpTRq1Cir8bxM/F0FBga26H8DwKWFBAkA2sTUIPu+++6Ttj48xMbGWr3H8vLyyNnZmU6ePHneq8q4Pc769euljc7zzz9PVVVVknDxcD7cpqlXr17mYfDgwbR8+XKqrKyURtqckHB7n2XLllH37t1p5syZtHbtWrrYSkpK5JEbZ1vKycmRRyRIAFcm+8u9AACgXz/99BPt2LGDpk+fTuPGjbN6b968edIA+s8//5QkJT4+XpITLt2Jjo6mgwcPSkNnrezsbPr2228pKSlJSn944Abe48ePp/LycurYsWOLl++mm24id3d3SY64pIv7auJltrf/79DX2j6SuESLS8C++eYbCgoKMo//8ssv5X95enqeM41pefn/8hV1piva5s6dS127dm1yGgC4/JAgAYDNVq5cKdVnL7/88jknei6h2bRpE6WmpspVW/fccw89+eSTdObMGdq8eTNNmjRJruriq8S0JUhz5syRx4cffliuXuPpvby8qEOHDq1eRp6GS6F8fX2lqo7nxYkOX9HGV5GxgoICuYqN/+fvv/9OhYWFkrxoL++/++67KTQ0VKrmuJqQ55mRkSHfQ0pKyjmxsICAAKnemzFjhrkK8u2336aamhrq379/q+MBgEvkMrZ/AgAd4wbYXl5eKiYmpsn3uXHywIEDVUBAgFzBxVeJmXAjZ77yKzk5+ZyG0CwtLU3169dPtW/fXhqAjxgxQh07dqxVV7GZBAcHqzvuuEP9888/asqUKcrDw0M5OztLQ/Ldu3crX19f5ePjI5/NyclRnTp1sloe7bLV1tZKY29PT09pZO3v729uCN4cvnLvtttuU05OTtJYffPmzapXr14qISHhvNMBwOVjx38uVTIGAAAkJVncWSRX8XHnmgBw5UEjbQCAS4zbX3EHlmigDXDlQoIEAHCJcXcBfEVfjx49LveiAEAzUMUGAAAAoIESJAAAAAANJEgAAAAAGkiQAAAAADSQIAEAAABoIEECAAAA0ECCBAAAAKCBBAkAAABAAwkSAAAAgAYSJAAAAAANJEgAAAAAGkiQAAAAAMjav+VTq8hZvFPsAAAAAElFTkSuQmCC", "text/plain": [ "
" ] }, "metadata": {}, "output_type": "display_data" } ], "source": [ "# Compare axis-ratio distributions\n", "size = 5000\n", "zl = np.ones(size)\n", "sigma = ler.velocity_dispersion(size, zl)\n", "rayleigh = ler.axis_ratio_rayleigh(size, sigma)\n", "padilla_strauss = q_object(size)\n", "\n", "axis_ratio_dict = dict(rayleigh=rayleigh, padilla_strauss=padilla_strauss)\n", "\n", "# Plot comparison\n", "plt.figure(figsize=(6, 4))\n", "lerplt.param_plot(\n", " param_name=\"padilla_strauss\",\n", " param_dict=axis_ratio_dict,\n", " plot_label='padilla_strauss',\n", ")\n", "lerplt.param_plot(\n", " param_name=\"rayleigh\",\n", " param_dict=axis_ratio_dict,\n", " plot_label='rayleigh',\n", ")\n", "plt.xlabel(r'Axis Ratio $q$', fontsize=11)\n", "plt.ylabel(r'Probability Density', fontsize=11)\n", "plt.title('Lens Axis Ratio Distribution: Custom vs Default', fontsize=13, fontweight='bold')\n", "plt.xlim(0.2, 1.)\n", "plt.grid(alpha=0.3)\n", "plt.legend(fontsize=10)\n", "plt.tight_layout()\n", "plt.show()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## 5. Summary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This notebook demonstrated how to customize the `LeR` class for gravitational wave population studies:\n", "\n", "- **Custom source priors**: Replaced the default BNS bimodal mass distribution with a uniform distribution\n", "- **Custom merger rate density**: Modified the local merger rate density parameter\n", "- **Custom lens parameters**: Implemented Padilla & Strauss (2008) axis-ratio distribution and modified velocity dispersion\n", "- **Custom detection criteria**: Used 3G detectors (ET, CE) with SNR threshold of 12\n", "\n", "These customizations enable flexible modeling of different astrophysical scenarios while leveraging `LeR`'s efficient sampling and rate calculation infrastructure." ] } ], "metadata": { "kernelspec": { "display_name": "ler", "language": "python", "name": "ler" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.10.18" } }, "nbformat": 4, "nbformat_minor": 2 }