Multidimensional distributions

COSMIC implements multidimensionally distributed initial binaries according to Moe & Di Stefano 2017. The python code used in COSMIC to create this sample was written by Mads Sorenson, and is based on the IDL codes written to accompany Moe & Di Stefano 2017.

The multidimensional initial binary data is sampled in COSMIC as follows:

In [1]: from cosmic.sample.initialbinarytable import InitialBinaryTable

In [2]: from cosmic.sample.sampler import multidim

To see the arguments necessary to call the multidimensional sampler use the help function:

In [3]: help(multidim.get_multidim_sampler)
Help on function get_multidim_sampler in module cosmic.sample.sampler.multidim:

get_multidim_sampler(final_kstar1, final_kstar2, rand_seed, nproc, SF_start, SF_duration, met, size, **kwargs)
    adapted version of Maxwell Moe's IDL code that generates a population of single and binary stars
    
    Below is the adapted version of Maxwell Moe's IDL code
    that generates a population of single and binary stars
    based on the paper Mind your P's and Q's
    By Maxwell Moe and Rosanne Di Stefano
    
    The python code has been adopted by Mads Sørensen
    
    Version history:
    V. 0.1; 2017/02/03
    By Mads Sørensen
    - This is a pure adaption from IDL to Python.
    - The function idl_tabulate is similar to
    the IDL function int_tabulated except, this function seems to be slightly
    more exact in its solution.
    Therefore, relative to the IDL code, there are small numerical differences.
    
    Comments below beginning with ; is the original nodes by Maxwell Moe.
    Please read these careful for understanding the script.
    ; NOTE - This version produces only the statistical distributions of
    ;        single stars, binaries, and inner binaries in hierarchical triples.
    ;        Outer tertiaries in hierarchical triples are NOT generated.
    ;        Moreover, given a set of companions, all with period P to
    ;        primary mass M1, this version currently uses an approximation to
    ;        determine the fraction of those companions that are inner binaries
    ;        vs. outer triples. Nevertheless, this approximation reproduces
    ;        the overall multiplicity statistics.
    ; Step 1 - Tabulate probably density functions of periods,
    ;          mass ratios, and eccentricities based on
    ;          analytic fits to corrected binary star populations.
    ; Step 2 - Implement Monte Carlo method to generate stellar
    ;          population from those density functions.
    
    Parameters
    ----------
    final_kstar1 : `list` or `int`
        Int or list of final kstar1
    
    final_kstar2 : `list` or `int`
        Int or list of final kstar2
    
    rand_seed : `int`
        Int to seed random number generator
    
    nproc : `int`
        Number of processors to use to generate population
    
    SF_start : `float`
            Time in the past when star formation initiates in Myr
    
    SF_duration : `float`
            Duration of constant star formation beginning from SF_Start in Myr
    
    met : `float`
        Sets the metallicity of the binary population where solar metallicity is 0.02
    
    size : `int`
        Size of the population to sample
    
    **porb_lo : `float`
        Lower limit in days for the orbital period distribution
    
    **porb_hi: `float`
        Upper limit in days for the orbital period distribution
    
    Returns
    -------
    InitialBinaryTable : `pandas.DataFrame`
        DataFrame in the format of the InitialBinaryTable
    
    mass_singles : `float`
        Total mass in single stars needed to generate population
    
    mass_binaries : `float`
        Total mass in binaries needed to generate population
    
    n_singles : `int`
        Number of single stars needed to generate a population
    
    n_binaries : `int`
        Number of binaries needed to generate a population

The random seed is used to reproduce your initial sample, since there are several stochastic processes involved in the muldimensional sample. As in the independent sampler, the final_kstar1 and final_kstar2 inputs are lists containing the kstar types that the evolved population should contain.

The multidimensional sample is generated as follows:

In [4]: InitialBinaries, mass_singles, mass_binaries, n_singles, n_binaries = InitialBinaryTable.sampler('multidim', final_kstar1=[11], final_kstar2=[11], rand_seed=2, nproc=1, SF_start=13700.0, SF_duration=0.0, met=0.02, size=10)

In [5]: print(InitialBinaries)
   kstar_1  kstar_2     mass_1    mass_2  ...  bhspin_1  bhspin_2  tphys   binfrac
0      1.0      1.0   1.496663  1.474208  ...       0.0       0.0    0.0  0.442176
1      1.0      1.0   4.476178  2.620572  ...       0.0       0.0    0.0  0.680490
2      1.0      1.0   2.983804  0.882177  ...       0.0       0.0    0.0  0.568435
3      1.0      1.0   2.313269  1.129829  ...       0.0       0.0    0.0  0.513600
4      1.0      1.0   5.096958  3.458565  ...       0.0       0.0    0.0  0.726095
5      1.0      1.0   1.252850  1.047598  ...       0.0       0.0    0.0  0.416627
6      1.0      1.0  16.446315  1.745968  ...       0.0       0.0    0.0  0.899057
7      1.0      1.0   1.185019  1.043142  ...       0.0       0.0    0.0  0.413086
8      1.0      1.0   9.969190  1.657964  ...       0.0       0.0    0.0  0.849914
9      1.0      1.0   1.398886  0.946875  ...       0.0       0.0    0.0  0.431419

[10 rows x 38 columns]

Note

NOTE that in the multidimensional case, the binary fraction is a parameter in the sample. This results in the size of the initial binary data matching the size provided to the sampler. As in the independent sampling case, we keep track of the total sampled mass of singles and binaries as well as the total number of single and binary stars to scale the simulated population to astrophysical populations.