From 0e871bc098f163940c2256300af798a29ad36e29 Mon Sep 17 00:00:00 2001 From: David Hendriks <davidhendriks93@gmail.com> Date: Fri, 10 Sep 2021 15:54:10 +0100 Subject: [PATCH] updated docs and notebooks to have a better structure --- docs/Makefile | 1 + .../doctrees/binary_c_parameters.doctree | Bin 936233 -> 924721 bytes docs/build/doctrees/environment.pickle | Bin 537897 -> 562559 bytes docs/build/doctrees/example_notebooks.doctree | Bin 4323 -> 4511 bytes docs/build/doctrees/functions.doctree | Bin 212148 -> 226018 bytes docs/build/doctrees/grid.doctree | Bin 104489 -> 119772 bytes .../grid_options_descriptions.doctree | Bin 51259 -> 51610 bytes docs/build/doctrees/index.doctree | Bin 30148 -> 30928 bytes .../nbsphinx/notebook_api_functionality.ipynb | 88 +- .../nbsphinx/notebook_custom_logging.ipynb | 107 +- ...otebook_luminosity_function_binaries.ipynb | 839 +++++++++++ ...book_luminosity_function_binaries_20_1.png | Bin 0 -> 57125 bytes .../notebook_luminosity_function_single.ipynb | 716 ++++++++++ ...tebook_luminosity_function_single_20_1.png | Bin 0 -> 25029 bytes ...tebook_luminosity_function_single_26_1.png | Bin 0 -> 23856 bytes ...tebook_luminosity_function_single_34_0.png | Bin 0 -> 30847 bytes .../nbsphinx/notebook_population.ipynb | 263 ++-- .../notebook_api_functionality.doctree | Bin 409627 -> 416028 bytes .../doctrees/notebook_custom_logging.doctree | Bin 47884 -> 45697 bytes ...ebook_luminosity_function_binaries.doctree | Bin 0 -> 130454 bytes ...otebook_luminosity_function_single.doctree | Bin 0 -> 72896 bytes .../doctrees/notebook_population.doctree | Bin 154083 -> 133403 bytes docs/build/doctrees/readme_link.doctree | Bin 26892 -> 27672 bytes ...book_luminosity_function_binaries_20_1.png | Bin 0 -> 57125 bytes ...tebook_luminosity_function_single_20_1.png | Bin 0 -> 25029 bytes ...tebook_luminosity_function_single_26_1.png | Bin 0 -> 23856 bytes ...tebook_luminosity_function_single_34_0.png | Bin 0 -> 30847 bytes .../utils/custom_logging_functions.html | 4 +- .../utils/distribution_functions.html | 4 +- .../binarycpython/utils/functions.html | 118 +- .../_modules/binarycpython/utils/grid.html | 457 ++++-- .../utils/grid_options_defaults.html | 15 +- .../binarycpython/utils/plot_functions.html | 4 +- .../utils/run_system_wrapper.html | 4 +- .../utils/spacing_functions.html | 4 +- .../binarycpython/utils/useful_funcs.html | 4 +- docs/build/html/_modules/index.html | 4 +- .../html/_sources/binary_c_parameters.rst.txt | 193 +-- .../html/_sources/example_notebooks.rst.txt | 6 +- .../grid_options_descriptions.rst.txt | 6 +- .../notebook_api_functionality.ipynb.txt | 88 +- .../notebook_custom_logging.ipynb.txt | 107 +- ...ook_luminosity_function_binaries.ipynb.txt | 839 +++++++++++ ...ebook_luminosity_function_single.ipynb.txt | 716 ++++++++++ .../_sources/notebook_population.ipynb.txt | 263 ++-- docs/build/html/binary_c_parameters.html | 216 ++- docs/build/html/custom_logging_functions.html | 4 +- docs/build/html/distribution_functions.html | 4 +- docs/build/html/example_notebooks.html | 25 +- docs/build/html/functions.html | 46 +- docs/build/html/genindex.html | 46 +- docs/build/html/grid.html | 74 +- docs/build/html/grid_options_defaults.html | 4 +- .../build/html/grid_options_descriptions.html | 11 +- docs/build/html/hpc_functions.html | 4 +- docs/build/html/index.html | 12 +- docs/build/html/modules.html | 4 +- .../html/notebook_api_functionality.html | 97 +- .../html/notebook_api_functionality.ipynb | 88 +- docs/build/html/notebook_custom_logging.html | 123 +- docs/build/html/notebook_custom_logging.ipynb | 107 +- docs/build/html/notebook_extra_features.html | 7 +- .../html/notebook_individual_systems.html | 7 +- ...notebook_luminosity_function_binaries.html | 1247 +++++++++++++++++ ...otebook_luminosity_function_binaries.ipynb | 839 +++++++++++ .../notebook_luminosity_function_single.html | 1035 ++++++++++++++ .../notebook_luminosity_function_single.ipynb | 716 ++++++++++ docs/build/html/notebook_population.html | 262 ++-- docs/build/html/notebook_population.ipynb | 263 ++-- docs/build/html/objects.inv | Bin 5490 -> 5960 bytes docs/build/html/plot_functions.html | 4 +- docs/build/html/py-modindex.html | 4 +- docs/build/html/readme_link.html | 9 +- docs/build/html/run_system_wrapper.html | 4 +- docs/build/html/search.html | 4 +- docs/build/html/searchindex.js | 2 +- docs/build/html/spacing_functions.html | 4 +- docs/build/html/stellar_types.html | 4 +- docs/build/html/useful_funcs.html | 4 +- docs/source/_templates/footer.html | 4 +- docs/source/binary_c_parameters.rst | 193 +-- docs/source/example_notebooks.rst | 3 +- docs/source/grid_options_descriptions.rst | 6 +- docs/source/notebook_api_functionality.ipynb | 88 +- docs/source/notebook_custom_logging.ipynb | 107 +- ...otebook_luminosity_function_binaries.ipynb | 839 +++++++++++ .../notebook_luminosity_function_single.ipynb | 716 ++++++++++ docs/source/notebook_population.ipynb | 267 ++-- examples/notebook_api_functionality.ipynb | 2 +- examples/notebook_custom_logging.ipynb | 2 +- examples/notebook_extra_features.ipynb | 2 +- examples/notebook_individual_systems.ipynb | 2 +- ...otebook_luminosity_function_binaries.ipynb | 10 +- .../notebook_luminosity_function_single.ipynb | 14 +- examples/notebook_population.ipynb | 2 +- 95 files changed, 10459 insertions(+), 1928 deletions(-) create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries.ipynb create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries_20_1.png create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_single.ipynb create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_20_1.png create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_26_1.png create mode 100644 docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_34_0.png create mode 100644 docs/build/doctrees/notebook_luminosity_function_binaries.doctree create mode 100644 docs/build/doctrees/notebook_luminosity_function_single.doctree create mode 100644 docs/build/html/_images/notebook_luminosity_function_binaries_20_1.png create mode 100644 docs/build/html/_images/notebook_luminosity_function_single_20_1.png create mode 100644 docs/build/html/_images/notebook_luminosity_function_single_26_1.png create mode 100644 docs/build/html/_images/notebook_luminosity_function_single_34_0.png create mode 100644 docs/build/html/_sources/notebook_luminosity_function_binaries.ipynb.txt create mode 100644 docs/build/html/_sources/notebook_luminosity_function_single.ipynb.txt create mode 100644 docs/build/html/notebook_luminosity_function_binaries.html create mode 100644 docs/build/html/notebook_luminosity_function_binaries.ipynb create mode 100644 docs/build/html/notebook_luminosity_function_single.html create mode 100644 docs/build/html/notebook_luminosity_function_single.ipynb create mode 100644 docs/source/notebook_luminosity_function_binaries.ipynb create mode 100644 docs/source/notebook_luminosity_function_single.ipynb diff --git a/docs/Makefile b/docs/Makefile index df35e0169..e51d09f09 100644 --- a/docs/Makefile +++ b/docs/Makefile @@ -26,6 +26,7 @@ help: cp ../examples/notebook_extra_features.ipynb source/ cp ../examples/notebook_api_functionality.ipynb source/ cp ../examples/notebook_luminosity_function_single.ipynb source/ + cp ../examples/notebook_luminosity_function_binaries.ipynb source/ # Copy the badges cp -r ../badges/ source/ diff --git a/docs/build/doctrees/binary_c_parameters.doctree b/docs/build/doctrees/binary_c_parameters.doctree index f6338cfabfc2f18737da714694c03fafe5132542..95b8f7090e04fa0459582c8d43f09c730a2d45a3 100644 GIT binary patch delta 96982 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 delta 95202 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 QUCG;6Y>Faxj5p!`0Z<u0*#H0l diff --git a/docs/build/doctrees/environment.pickle b/docs/build/doctrees/environment.pickle index e0ed39a409e8733fee869823a5a3c54d0b789365..af5a6f51c95647effc527f4d0f76aa7db02ad132 100644 GIT binary patch delta 73920 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 Ll!@YU+Oz9F5gya~ delta 55574 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%0DD9L6BhvN69G(F0PuteV4ebiCq)1=6aYNs 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 diff --git a/docs/build/doctrees/example_notebooks.doctree b/docs/build/doctrees/example_notebooks.doctree index b9bef3c20dc63831463b0ae0c0e0c9848b042660..48df9e4b38f0fc2c76ecb9eae315ac298d9746cd 100644 GIT binary patch delta 292 zcmaE?IA58yfo19x!HulpY>bVQW7+(z6+$vn6><`bOB9mxOAB&R74p**^72bklk)Sk zixm=!QWa7w5_3TkrNybqiN&eKQ!?0Nr(}rrfb|=Zu75KNdl+M&Uym}(n)sa3+|0cE z;>?oD__Wfz<dV$%y!hhGy!4#ZDQ#2ydQ|Z$Ov=nlEXqtRo*d4hz>?9E(KorAqn>ff z=I<OQm>AD*KES<|S#@Q`vW&2d;L;w>yu{qplF9<0FKVY~WUTbd2<s@#Pyn%)ZJx#N G$p`@4z;HVN delta 104 zcmbQQ{8*8-fo19qfsL%;Y>fVsW7+&Ur)03lPRS7K0rNIzu!k{D7UGnhY|L5DIAQZ< z&J#?Gr#IK|Y-Ltmnz1M&EF-wIhchoRH?^d)Ahmc(?G%lSrG6P<9i<rxAoiloVFI3v E09DH+X#fBK diff --git a/docs/build/doctrees/functions.doctree b/docs/build/doctrees/functions.doctree index 404ea6de34f4477f068902d88dfe218f3316327e..cd805d6b1cd93d5e9d46d6ef07f6497939a92505 100644 GIT binary patch literal 226018 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 Im!a|h13^*pk^lez literal 212148 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 diff --git a/docs/build/doctrees/grid.doctree b/docs/build/doctrees/grid.doctree index 36082ca3d96c82d3c7cd14d66b743fc2703a1cc2..e45c1acb9e1a01e68fe24b85a89f17f67c85a0c8 100644 GIT binary patch literal 119772 zcmd_T37lL<buX-SB#pIt5eAR!YZ*KvGiuq`#zt5ymTj<&7i<~i2+{88zN7A|p6+%p zlEz?Tb{lR!2yPSnfms4!3keWN;1PaFNO<sAosWD;ULd>&CM<!Mkl+AjfB#c^-CKQ^ zo*v;L{II0HwV$m{opb8covZHs=(6R@=zrm+PODmL94nM6l}5ATclzPlO0(RX^Bdj% zJ^dXo?%&>@3fHwuM?1}4yX^PFWvEfE*6NkE-{>Fgha0JSw^r{IMEf-zzuc`g8>)GA zb#<(|=3sxSx-MMZt##|ZQ52qds9mc(uUM{^IvsDWS?QseYNPV1ef}|;1+TNruJiIf zn_G3Yvxji3Rl)?j{pyzL^6JWPOicgUa8<q5@cY;HW=i3BsoQPWW_n#Lo0hq<R_V}^ z*09OoBmTX*QJUlbT3hM0^pBZR`Ec8xr8>QEO}BK2iu%<})rsnQ8nL=9ym?o(Ip^=H zl#bLYyISpL0JwB^&D0vD_I$BiY&V--@vGdL?^c_QV#PnA%6IZ_y8zzKE<XER1gb*2 zgH@e=^@`q1by>K&)~NW$40v)-SI@wDs%HX<XW_rc;lD}zw}aLOptNgjMN{FbR;kwR zhXU+R_W0byYziE!G-f|MgJWjrz#7%DYrFkYulo4vP6GsQG(k{k&HIfbyN>wn4#=ak z>-@qK3m5Fdr_L@c-0qr})oU}mI2iDISEttXceVic(ji~MQOtE0n=6M;YkoJu46AG$ z@|v@Q7X=_L2N2hV>p&}|L+w(lY5+1k{~AV&Ub)%mmTC>^ty}fI>zl1!y+j1=5okP4 zxXl^DZh=$o*5TSJimvVj2%pZW=-TS(M5_Z4N)Uf4i0u&%X-O4;_|v#p0qgF0rr-9x zQoYVVJKJk8$x*7;y7Pp(k_l}NVz1WmD*h~ZxT2uFz+N=mZ@?t4&jt7Db)ce^#@g0} zo7nVfL?Oj`4a_RVsFZ`CxRWDwiXiPdqvHP7%4N&;l{$wzyT^BW`>wm}y4@Zmv}Z%8 z+w>-zjh&#)?xff8yI!e%h)M2Fa-+82?X?>W<kYrSsuxQ$y+)<fDEq}~sZ-6~ywmJ9 zTSGP?;A9@D(JR;eQoA^ZZ6e<st(LjQ<WiR*G4nkAM#rC<srz;-$dFF0;<vp{tL>L6 zQkF<`cDyE}BE&G5VYXKHI|VgfcfRE_OtspzBc(3N1(RqT&(@By8s%oY4I$(SMxmA+ zZ?@THg&??6uio{Jl<GZv26K@xo9Xz)W{XHwcZdF)bF}|^rAEc8&9&-2`$hGidHr5B z0mh|zp3ou=bDkwcHCW?Dt?YY8OY<Hmwb!UOOBMFH?ayJoe9pa2w>ej=HxC^GP>Qw2 zY}13(Z)1z}X4}m<Zw__w?<txK`%tNM4)1UcYYt|NK%@E<Caa5OXgIsPLw>_=m%0Fq zF+yQ{oC$AIQdV{Sw#kj*7-vN(-Q`a$IOZS$4yTFfT6G%}7bl~#&o-WMEd~tc7hCwc z@PwIOz3zA2QiLYDj>tJGJHjXAmlu3xN-kGl$uzL7;S&?OdhpIS2;uYKo%h+|r>`ON zN-Xy7G{|5BV~`m`<(H>bekm&53Gls4?IM>X%raHhMVJ0&vGj#?ssZq3O!uv6Ymxw1 zgUWA8s~iVF62?sc7}7er>^~999;Pe3*gwJiKaw_ox!AR+{GqhU3tlYSg4yCUd4GPm z#j>vSVn2`he=%+Ta<S`B`Lk)2<BPp08);j69PQvy^nOFEc<BE0vcG|qd^2q&a@pgk z{PncTqgl2K(LY_lvLo33DOU3Hw3WzZpMc5_r&W$G`@C$}HuRDRo`Wqo){8X{(V0Rr z?`I-73EibFL#}y!bt2f5p?-YX=Vx2CrCLQ7KBX5vRCjvmtfz_KoD55mOW%N{pPiw8 zeCdK8bL)rE<v&#~f9NhX2v~0u!P7G=NrGS_K(Hr6{Wu83@n*218(r&j^jg!~>P4|; z6T$urlaz~sH7D4Yp?-W(&*CIK8r3`sfH@6-(T<~m#fF#&ni&=^fwdXHI-H??99V*3 za~(XQFnO7V$xz+trL&$Uf>&f%id^~@Ed3=J>c^Mf<#f_LuBWFc?B1wh_v@LD20ok0 zL~wrwU`pVh2;kqBp?)0rH^hKHnlq$f;JSX)LvY+}4M*RxM#7&GJxl~2&Hz-2gp*MJ z0~zWIB=`gEnc)~e^!CH$JNsnZyu&yfz93B(nTOtmqxInKsmHQ$4!<R>$LFI*VbJHM z*lIzZJ9C-Z$2zcYz_k$;3<L5MHy+m-1C7)>`r%oFZ0<%+eW&?dOn6zi3XYv}%)&4Q z|G`EoDRydbU%)14IcC=DiB9ccWJe8P-9&>@qtWa#Be>CPIL4PFNmTw+gav?21ivKW zVh)lt({{M-*j#;g2Nr*TZ7mFE9lw3VC!z>`&MEX^)mQk=N3f^CLKK<v0mt<mj_|sX z-$<K?!$%K9w}fj#4I9*3R%8WrupU)|4fungyNTLO1RA=*M*1RVzK+d2I_+^yEpndb zCwpRNQg@kXz@FF{i4$AZY}DrsPzwG8tXqDAY_7#)@YuyGtP96#4dxZpXb^3;hHDS- z)7C-5rbT4@WK1P0JHib|YW`6&GVVlohx;Yd^G1Mu5}*GQ9c|63;Tp`7^kI;_?6D6g ztUp_6&cPMc4_9`&aLS#4FaEJsy;iPu`**VnUAO@JZa+M;$Q^cr{bX=$qB(qf!C9D2 zIL3M}_rq1p;YYK*fY0{4wArr09N<M<Rqf8z8F%jD4K@96PS;X7_&yl76!T4v3HNV! z>L4D#q?wF?ybIUP!aB;xkgb4b{3DVF+XS^<y&PzINJt2S=g6ODdbg!pX3E&Mw_aN6 z_?_L}ZZ_KPTewO679j<<hHFH*CJOxtqqYbD27Lz?;)C2a!cDGTVa;6ww-*f4b%R2K z7f?^+4c{7$@k!_*nK*qBDn#iJj$KCS;fmHgNzVD59B95tWCX9<srQLs-qD9yRS`$9 zA2m%v3|>VaG`R}wL@ARh94)mQM5J)f3N!~*YK-Y|cnCryGM7{=m#nC9+Y*xVjQ)rc z()1DNP{CVJkNnZV#vJ_<!~>F57RxZu;?=v3`<lJI+%erz{?mqE_B$QsI+0Ey^1P5| zu-BUQ+CA=-K_~*%^Gf3_?aPKks59Sz7qTP8_wgK3Z4be_Y4sDqI|UG`+tRcI&<1mW zFC7ISishjc%HUri*}_Y&Y5K)Vt$1S>?!88{_=I!MyJ%{MH#JCp8kz_^Ylu0iK*78y zL+yfNAY18Fbc<kwk1Y*l%)Ka5bAlfLx>8_sU0^EsvGFaO)(q+DW=eQf_gvd-_(FRQ zJP@_)G(5=(Q7-D8Wr|0b-2Yr=263uTpH|J6KC+-qpU8Al3gZD)`)y{r*UDVD-oyr% zZ}RA)+8Dd8qdpydHn2f(Rw_o7-!-CtDLU0}8)x4E(4%{GxV#b96Td~+nFt<a^)d1m zH8O%NnCse{?eaZxT>Q%(@h8p^oAD8UY>pW0#xF&vtB8c<2>gdV$Xdjz#FhnMv4Ddj z3plU`3{UFxTCHZgTkOo0+TB}wO^U#~n|67jA@h}Mg)yos+BE$&KKXxgEY?(G>_%Va zjWi<!|43gL_n(V@$@O#Yw=_8M$%GRB1TAgQdEp!fkb=uG&Y(lWq@#hk8m)B&*P|Ot zE4zU{jOKI@o}Mh|`nGbYG_{G~v1tq7=Z4@GOqQC7Q-elG?9}iH2Chg%V{nKTJNU#9 z)KJb&2th#q+Dp^YX9bRQwk3ZO#a!_U>iDNk0Osi+yh5l~q+L}JnNs&j$?D3mo*oPp zUaisUb>-*I^f=eTcq~q-TVjDQEFz{`Ep<^FUEvSE-D)Dbu-S%s)~Jjl=BB~)HwwN% z<O>g1rPxCi1|&K2ku@nLA%gvYH)Pp!=r7|)lp4_({57G2tHd{o#+FJvxvz8>kxV7P zg+~n{OsLfHYF$J(!4RN=;Us`E*Vl8O<#VqLJNMOCxSso9aYpobn3g*cNFv0UK*=M! zAv@JsQX?D_c7fmpm}$5M2Ssi@7~?t~&VaOmuy4VOS(QeU2M#l#`yb+vjN#egW1E0I zS*jMGoIVW^i$$^~U=L{5N(hR}t(sn#MKz5LGf*+*5+z-^`-ma)V!cn%?mz9-n++E8 zJ<UVv+NH)Je1(y+Sw}E(voVcWzfu_@fjD*A!=Y=27<k&Nv=E@-A8FR{Q7SA<qnKtv zYJ{adlVu9i_A8Uq9%A7d<!TG~>h3w0`tixY#PrH(icPMtNYlZ3=9bt3Bttk#6zMY^ z^S;b<Z*Q%_On0wp9)5I*90(k+VhX`mjQt?I?-5G?46{?g*Uj0kV#+Gnkb-Z!ze8)` zm2B*P0O*UVb-_dE!je5Cx`ev=K1TynW3h=uC~fa%jqE9}mAu8)V^7;IBZW&<wx|C; z9J5KB{wEy`hMN93Q+b&{a4aBNiY1tz>_vRdF{i{u{F9@>aEs8A%(aL}DJ{bIWG~`j z$D9%u@t=+cLoMP2Lj*fk5i7<rtZ()@Hm}Ob5bGTchFS-lUwrp)EW$1$hESF5=}$Rk zlZb}LIvNZ${dH=~bId<dhy@s5>=iuCF`>j2T;gaj)CxA*JGEmOt{PZN^s~L7{f_x1 zE@+>l!B7igx9)6JgDq+*B5g^1V|t@-LabFE?3J_}6H8o4oizv^Hn*e%L&hDh{#QXx z#5N;g$q@aUXY_ELQmfcniPZELdp)6Rypy8ir5iH%G;9TaD1>dW^gtJ`PB3c7^;zHS z75=_!g-P4{+wx)TL$3alFedu9Ft+?$xf1-#p8qFY{SSd5KI{lEwBA(BT?kquD##_N z-}b`3>{?h7V*WlKV!q?*KM66Se+x0GM!_GsMi~M<eDD#VXQO>qav^A)sv=Qje6f+V zX?0Fr-~`qnv%K5p>OTodqW^qIdc13tA&|re9|}oX8+{oY1?&_0Oc}fj(s<F#wa;=v zCdpiTrK5o<=#Q7Vb|T4iG1yppMcVY;##)Vzn6dV?Y_nXTvDT+)X=5!%IWyM2j<C<X z<SEA5^G#zd&iDM*wzNof$b?JARc5CWZX9*7c&N5YPz1MO_Mq8g^j99!=aM#;Fzoci zk}ZSn%l84!{xP4@MZkhBuAma&<&{kOe6)t!;4^ePwB76-s(K}_;Ug{qw?A=Vv)*jB z3gefT%2lhm#wKfx2q>?Nd$zbO3+u4&!)K;jOVR!anT@8FyE(PIGB33Rub>v}7JA@> z`*#WM07qRp4FFvD9K=0X*wBdq8ojw0WM<&-CkP&G*SZLlA_gHG9A!6?;iF)+_g!;+ z@v<v#m>#ElxoF-1YS=wn+!uyp59p!-pDZCjL!~f2<0Alwuu9I3S#Q4CLs#&Vz(s;2 z8Nd>J8$H<ZaWA-4LmUg?mkgcLFz73q;Kai^pU1W0!uU-cpcprvk2btE?gcBx{jaoS zO+mlQDd^r|DTv}44GJpS9<XXf{tnNHq$aq6-9SfX2HYISb@5}0&<gTWb)eeH%hNKd zO<b+kt9Tz@#e4Br)cj~}sMr>&xKS;spKhPMlQpT{CdU#^*%w8A>x;u@^631u=^Jra z;=<A37E-*VSJW&1Bwz7gWmqxAiV1$F75{mLCJ4C?{w$?l@I|<Qf(P&iffXV5<{%$U zX-rKJcrU;|SfQhOh`l$vetU+l5rMC$Qig*eT5^20=GQBO@5ZlY<wl$Yrv|z<FPcW9 zIL5D+?idvVXMR%nV!n}|rq4Wh7<DlDAJSjjguZ$;h+0o!rde@BEJp}-N?&ys6#X<w z(cy2?BD^UG&mG>*ogVuI$*Ig$1#e#!e2M=nSxipSlCHr7HHqUgk~Y9|P4ZUkz0F>i zJkaFSf{f)EBc$K?@?#}p^$r_xk2hIw%$+yM4^;?Q*(gF;i<lVvWCj+5t3hzT%kS{$ zv1G<)feoFOU#`v8%Kf`QRl%ds1b{w?wS-w`g*O$k7Vsh~iUV=DGW2x!Etn^d?hWoR zEK)&%I_5E12)S-YIz87h)2ZNYbdWXjcG}T{Ddg<n3M<BAH=620g^Y`iMt$hW+u)6u zSI`A525+K&QPg*EKh2e`jKIhOz7>DcjZOv8<vSv4S0$^x2k*ScbC+s54UQjWN(p>C zhg7m5cn(nvZjI7kd31g$73s<;!IqzGASuS$y_q%$-3Vt}E16F&Re#VEndK9y<e5k? z!yCy7XkkrKOJj3Goa@1LTf|o+1|eyHtRR{yf-dj5oo6}}*DK+Iq$vhmk~f*BqV8r4 zl%_t=&bWcqOOUWvO8=skvd@A@i;G%`6jdKm@%nZR5pMGyWi1lYF*p??D*3Iwm(sv4 zn`_vy{pOyO^#qfsU<$+6@P)aAAuq};4Bv$w2MfdZI3}1+82-Mahm6ATLuk6F!tfN3 zih^iN7^)JdFchVleYUy@NOJR_V$ItR5GE#qFVJ7Z2$`*7HC)I9W%Q#dQqr-Uj!U?F zl~3R+c_tu*3xR{rTJp9nTplesz;iMX1kE<1284~tWVX=x9-rpFs1Y+>CXf?*j0LB3 zp%Y@DkqDi)vgiTQ=x(66B2vCY;w~~*A?~f<UDm|G9k(!XjK}qk4i3e1#IMg!LwiFw zqK-Xc#ug}mtWLK%PW7pZ=#X+?NtE+Z_jm{9O5JJ!Nx7!xigUHbj%f%m{h@RWi6lu7 zOxdz*wGMdzlEg1Xv`mVPuSo__Op1-M2GpHP%@C!Uv;5-%F3B0kX*31G;B-I(BsoEU z4a4`Rp)tX1XuhB36F4W&1SH?ff%Tql^ZhwFsSiYvr-_E*ZoY_%^DM$tMLY|N=~7`O z1{#S}xJQTBXl3LE6>%t!XdQMkgFIlOW2!XQ>>-&SL<leF>?n+LyGOa|mk*OQ4(TV@ z8Ig&IQe*yT6=^w@P|ySHG2$B!Y`>;>-gc)TFhhZa!eD+<m|!B|<`n3}M8Zw10k9uG z<?*82ip?BR!oX8r(=ow(ip^n14;dAkc{E*A#pX;9vw~<$u~8*X@heKT_`P}2h*65% zMI1qqWpFRi!$fco{WXl3-7a7{w3vN6pTOJlOhAfRLJFU?)M9Kgd%7V+2JthPYx|&T z58nAEF#dyg-f!H94?f5z{C+idPDN|df>^ppy#WJ_LZt40EKHtJT?ty3@)=g>IvG?T zy4q1~9%YIXm#dJNLeLhxn}zwzuR*bDGb>uj_P9)s!+TZoU_+vw+CIx>fxObv6IN0t zbJ*eP^@8_Ya)ZU(Fq9ltUkp(uy@Hh0(WUJ1wj-vY)15N)H<v;;?Y-dk9oq}=v7zRa z#{GdwAbawlyuoOlU6DFo1-R2XB#*|vE6!p9|8G)o7ZdoOXAK7FfTC0jp${xI<Vm<K zy@@Nt2LDW)j~k2h*DxY;3XKVqLyOEG@Cp2To(V{iDF+^;ncf^BbR0}a$yT83QhWr+ z*&M73dF)_b9FCc+z7GtnakXqM!__bIfXdW=3l^@@h4p7J&?tm;_*oG^=S^M5a#ok> z2Ov-nGSA25$GUCE+$K^+Q=kBIDwF?MI6&y1+KnvT()dD|*O*kN&;p@Bk2Aqef?9ez zys26NU6uHunFkZV#7TaYa<$ok`@2-9#NP8eq$HM8g$)BJ*u&&6@}x|WWpu}rCmGL2 z&d(|yQ0SuSw?ZA0pJxDlN#Kmh&(l}~r^3vOY=!wWa*I@OMRE5ncOdi^U?@m%yIdsa z6E$(=d9AFciH*(pLdT3v4SEeSl+b|vK?zFEb99hVfqp8Q8Vd9(HqJ0!l1&j<uuM0$ z$7B~6Lj!x+0S$(5#q$pIRjCc{3~s3X8paMc)NeVUV}dt50nBq8J!FJ$#fEQc0+`%x zC<~~|4W%>04+T<CckJ+@P~kkhh*GUL-1SHiAyOZB<V;8jpy1_1i4(y~>91k-`Ev!v zhTiAz;S>0sJQI-nJfWP=+I=)SBa6@mrJbeg@f|iQ-fb)N+xV2<qDIeoIJ(e+S^9o^ zDh5j0ASezalk4kM@+OhCHaT@`vL;j2(oBuL+#;gOa1k4BFQgWPZCXTGO4F2zPte;X zzu-hR|Em%B*D5{X+;h*H!q&Ot96Eux_Dg-yN$x*#zFP3I{pT-J0213VKh7FBcT8TC zTY~@pg#3XfroVSgFrNhflB0)=68vjuYV44sm*7tX{VIsYq_iq=N@-E5rS$cqra&oe zN8hoQnm;G(PXs@uzlM>T7YPUsEj7p2u?eiDzp_q1N=-sRlGIdJ+Y@;g%=B2vo~Q`9 z>0onPZl1~~y*1CI&2!3=EvTi-&Hsjljzn&LL)~}urfzD$GD61`1hO`|2iaK#(oe-x zDM`p&b|OHQ1Zo!vR_m5nrNc(4UZ&T_AW`Y)Qt+-vjuFV#o#%~<pxUD)*!uAWVwYYM zf-zqw98k?MC6-@Ar50hnKx%g0c%gtqaTIZ~d$%X0vtAFxbHxbtvK@fN#Z4jWj4z5C zm`J_|NKJxuOeCMr8aPEVFS14QsqsS$!-VSub2Skdm(8nLrO5VijbpB+bWT0KT<Pc_ zqi}vMni|4+_~XlZaeUzmj7NK20%p-LcAZ^ZV9s!MX=&&>&Ms{SXiV6qpIsV`9x?*= zg*I?Uzw_BZoi?K6!WH<XKyK5n2~@}o7s=jh02Ngt1pB)VkmLjEJ&qnS0`+a911ha7 zg;LD}VQ?GYW)&I7bPZMF)HOt@)-^u3<OH=;W|rX0)&3BCf{1$}_zU_gtFmJ5`+Edm zac#*6TRdsdK89`OQDzym6Sm9Q`p5%(USAk?UQf5?m9CGRi-D5%$js-scd2`=F3YJd zWal;{Cn7}vH?WXAimv-K+w^dud`B>PT?<vw0aBm!e5dN5dxz@K@$0h%^QPT_NuJ<o z^5C95?n9n&16S%4s>_Jj`?nN$#dM1AvIb6_f*09xIj3QC#kf){1{p?Ip-L3Prl3yM zES5Ps$S9{bqUlI9iwuU*OF{V>*e>P51#fd7gaYl_2PZX*9m>TH2XsvErYjeZbM%lA zzUSNU9ldg40oAn+Du~DSK~>`12Susg2cNGv4xSQRw;QpDkek+G52JUO8;NWtf@jlT z!|X771wF@hm}w2EjN%T`=K`}4ww}0@#78bCu_2M9wD+YFUrlk?)m&k%CVgM}c8Z+M zyf1x{wgSp7qwR~=u%y&T;HaW4_|Y^TbFmlKm9R;Pkc&yba>$>ge*6{!Gmt=@W#cUI z3rzLqQEXvUMaIY(z3#vc=czm}<MA$VwN*8LymxNlLhl@mfN^TK`8x_u%cNYGB<(?I zbM6Grq8orIUt(L<3t0o_mc@(gEh~cv?GxDyv`oI<F~NKy^mUFN%q1pVae6D78e7!p zMd&j?`3j;jDXB`FQc{(EY*?BFR})EsnTMxa^dVA3qMQ7*t3+b>$HT7T*U5Ptd!`6a zmtONJ^k_@3<o@me{fwu_{0D3KJp{T4n(`P#@DRT<`tPi2@Spfg-pqjA3~V|T{KWVc zo^XSB%bi|}5o~OIQy6Aux38ryUfx>$DykwNMx@-pyn}UEg*_SLY^4(d*%D|Y8RC$T zcK0omM%<;t{g?*g0?3tJ{3nhnn-XXY!2{@jVC=vT9qlv9pOq(A@@FLtGfe0JUsl|b zaSh1lKWO#PL6UX>B1yW__HQXmp%DbB5%zMCS|Xtb|Hi3OCI^t$u#+2!jK(rkiy|hZ z6}B73Ga3gkT8Z1KPXzpfJMphjCNd6QLf?1O_m|>d?(D_fy}FRh#TT$A>~m);-jO9+ zG3$E48H!Id()@_Y3Pr?vWCB~JUs8dY;+HKFt_Ltp2|742x1GOLB>8=oY979Ci6r?I zFo`GjT_N7N8~8Y(4FQpoN<$!cJ^^E~UJz)a^Qe?ad_kb@XkbY`^={MRz96tUN~?p@ zP}S0=>`p_aQNVd$i<jUT=rQ)vSl%}S?xJbwG*leTEYZ=GDB<EeB@NZn_7W$uNJAX= z=m9dMsplybTE;6(>}e-NFH#l;O2~i{PTQwzIsBXf#ed-)DgF=cr`b;gZxoA=Vtud( z;5*T_CCBOvS8q_bGW3?m>_xaeg?bhd)KkP0Sw$uudMzmnwuVVnG%Vl8Vfo&?ungWq zEqMAS=L{$LWvvPlULb}Q_SOpB9w<|GD|T;7#;8j5FLQl8_mA<pe{|Tn(>n)x?!osB z4V7!HBUfZUkEuq5p()#lTSfYn&(Ny23E52PR~Ac={RRy*SdsmvW6F6H*{?g=n@dhO zNPizqje~S1MfP{mCYmWErpOA~T?_nw74@?!vR_VFilN97_M-ZtxoWB^&P<=m(5p~n zC9z70r#Fn~OGDJZP-L$ZD^$dkS&`ko-mS=<P2U$&k-d=KnK+XF-HmgyXtKQT1*@_r z8R~(Yu1l94ljCs~lRuRdV+Y(z0MP|#vlpx8;U6v$ZB{~MRO+k-L2wm8W3klP1L!;| z!4uWl{f-8vB+vqGan;!^F?t=W&)$?aXSY79aS+pI&qt37)@QpkEv?UTJTo2XLX>3E zXaD$eJWw<5v3F_oH5sAN9<4TUPZ8!4zuYZ&S0KZLM>opxm<?XOsgQM_BHYB2S$G@k zDEom&O1+YI<FjtM;Tkf@@4fEY%dWeDC1#zb-w1GPu*Xc9Wgo$Chmb51`9hJq6`yhY zr*^0cbAJ<=&LHzhrDJi)O1V}V^irI<l5)Y_grSMxl>$+62TRx4mz+Rj1o<*Wkk!HY zD1Wh!$O|uiA&n{Y;~LcCu6qAVr1%BFNKF~fG$EY{JVH2R;j=}QW^{t0(B0$a=L3_S zdape<d2ly{boz(T(WOlgJdSHfoWME;72?naYGyUrBUp?qS?1eFXXO2Bwlnp{t46!y zn`Kp}*t})2!6A<ti$9R2`?qkqzaM`^w+(X_fLLQ`LGPvNr(eAWta2Y~5=#rJ{o8MR z1Y=i%`t8;n$xBQ$NdDlFP$Bt|7#(Kp(MgFq9w+z!$JQTZz!oKW6WF2zw11GH31u7Q zSWQ&iS+-Gw5MH05Ysxk%WsaH{J%p#p<?bu76A8bw*zig-O(ZUcEWw^OO<NM+!(yUX zm^SigLLAVJ^vvt`;*Kh$0CHN7PqAQ%3i3ELCcB8XV&)<A0lN?7bt2ObUhKwZ2{Gcg zk3h^&%r{aoA*Q>G;O-8;l@FWHt4BX0(7}*%(k%NooCv;1f8`3Z5I9?B;KIVdlepK5 zV%W{s9|`Cso~r>;7=@+!e79CshBkmxveN>3(ChnOe0~2k?D{B!ucS3=eXo)Ec~}M? zS_`sWb88RiqXI`-!Ml<8-#c5XNu6r5SFecs0(kwhLTT-(a&2}Ndt;+Je(iPpF5fNG zD@x8S^ed6`UTmJowcTtVCQ`*^4dhKnPxF3PLhTVZFO7@;!*TK5VR1p(PBku$hY9PK zm}<&SCQVpBqg8Da=dr~!VV$x80}VD|JqpFqDd#a^o#be5Zr%wdtTWM6pYXy=CajkN zY^f$JA!|+q{x{L;Gx}oJr!0kzSHc%d*vn|bdN>132oshhR(SwO+zF)#>p~(VCW`gp z-flR^7rPJZb@^iV)Az+RVO_!v97Wnchj>BuyzG`NF~oumT9?EO1ak7swNUJ}isfFX z+ng&R!{Q+<t4L{mI(zoDd%jGxV|j5mSRjzXIPz7ALS_eR2vU~RG5C0B`!t1DH&D&P z4=*V@n8IP)9JW0j`V6%8TclZAMIO%EmN=M1VM;9<r7s6gqQW=viM<!I2AQ9ny2sUj z(vwr7fBVTPB4W9`RqThoinqB&8RE$)KDaHr%&o*GYw_6Z?T*0*HxmAR%?rT`(SFek zqJQO>T%tkrFB}cb)#&YVaSfuU4w83+?V=w~o4VUBs!<WMi~8ts!FJKF(6qE&l%t!O zp$?%WlU?*Gbw3?8AUeO{@Wys7uQQLJ;kf}eP`YSCdcJwemuxi3E)_Ed|4u7HOqp0% z`bI&P6`a+V?1sSb_&tS3<3Rsh*vmYe%3C<6ivvAj4%zoQh`#9d+Q?ur?e!Yiq{Y)2 zu<c1>BAxoVB^n5~9P-NGylDMvZ2pR4^A~xs8T_1D@aO{#8^`fyD&2)|K9(X55#}c~ zS*D<D*%;r=OyNarC>;13Q5B~j!Hw7hlO6cKmALhKQ!}vDvTOLtSPSg4Hp~Hmw2Q=u zwuZ*uzUpv<MzVIL?BN0sDYb0aoSg!j*sXx=tby}Z057s*ayJ_fpAa-$QMtPb=;9<u zb+m1d`&k`RG*5!*SF0{|^k5P|!ddVNG}W71)~8Rt3rdfj2HDbx)<h;R!44GAqJSE^ z7@$g=7Xwu36NVr#MF`<At;MWOW7}X2iOche;EWVR5Ol;zmN+rvN%jO*HC<>}!RmtG ztZxb;jP7pBFj*lsj-qM~v9a>$jd`yBUx-I>WSo1rHJ(TU6<r+jJ2W2W7}l3P@p~K- zHyI}Ns^@DQ9c1K}`_a_kmuyKST<kI~l1LD!;!HzPK(8hsWHh1Nm9ip(@CcV9CcHJm zhAg!#_1nhVCo@b^5Zotd?b-LKtAz`JYZ&|y#&+qb#|;+6vd~DF@B1jOUHaq!psfj6 z2|9jJ=^x}kkc${;p9&D+NV^4<{2f6mheu!{_)-Qm2q8si$VDrOB2r#`kjjzNlam{X zh%tF;P*jmQV(eE~gv;Eva?>K4+n$0XrFg)zh^W|NtufooeF@_HOa?c5kOiCE{?a^x z+I>&K5nrUNp9l+JCN?lsuS*uUJ#-_9(lV9ny^3FKsYsEcj7$;rWev%h#fm>$>eaj4 zWT$&j<>1r~ax5_b4(g-o*INYT!Dhcr5mZPfk9}8+%C^WygG911mu({vroU5E^YBlX zis{eBc%PeSzG80U?^p^{zz{rT+aEVaCoU>|+g#lVMkPrl);F6%&IO8dSrVsNgUpu1 zr?~o0vLuTB^H~y~<r-xOOCle9uspZ9L|781I7Gf~Vqv{0S6paXBPvJ~soyqweAmJr z!bl}k-y`klTlk3Ww8SU#usNCKd*mqim)(EI)qfItME^E=NO;O2T=zC#>>6bV^zgw) zfSy!A??TyWQuaG`2f6yhIyUJ4Ul&l4Q2Y9PsC~Dq|0L9k{%zEz+3^3=HOdgE<%5p^ zwWmugsU6tbp<Rf5^uQ((tqC=3q(0yRM-oy$mk+65b@iWwRMCGvq<+se$`DB9gO32I z+hZ7tsZ}n-ZcA(?k(*M>M)0c5IrqzDtU>1e@<dnvNeCAG=R>gP8f6Fs^T9`e;5gS> zI<X76ah{Y-Bw`b4*hqbn3mi#YdtpALKEu_25>iF~`H*^(Ym_07$_F0`saYF+nJX*$ zd=X4S<Sd#y^@s~Hm%Fs6C-I4O91To`OIy$u*PZ&9!DrdQ4%JrL<lPQcjf|K>bu*B& zV2A2!Xj)KIe}reYU<Ba^XO6fN3HQuUm~wIYJnc}W+++Mq%&le8MnRWiOWsvCUUx0? z(@0S;L`x+if_Gr%P_2KD{>ovg+O~ub%?vMZ5er5<>cIOJ`~N?nb6=@*xU+kFr^jPe zaXW|Nl7;(}rPsoflH93Xsg>bLWmh!dEJc+PJzTpJLCv*Nz1Ats;Ia_CJjR}`r5iot z9{$(x`MUw-s)&LG_8Fpa*M|aB#VbGbfX^Y^n1_Rw-MGNrj~=Wq2**|yQi`)?T^^!0 za}lY{?Wl@;XnvS|1=Q215NY8>AN+~&W@}xw!YgXWX#At?8oznnI3#YC_~OP%vprwH z4Uk&7>dBy5MB(xeez&YTf(^IrPvSaCy>t{yL=af5%%FqJ+rH|)Lw4S-*Q$3^L&P_C za0eU@$(6f3%zoYr5J!eab4_*MiC?{%6y9vimn>bAyf0c}oxlFezyW}@WuS0jobR{B zHIgxoV#!YOr{<B5aUS_7{)(CtOu-2Oz^-I`fU2K<^*Gq-!>mc{O2&(%+XaR!cv7bH zv+Utl7KhA6PGrN77>Dpcb_@SuG1flfl@Gn{DTCr}T!e*6@?Dg^H81=l=Y@aB#|z|V z{#!RM==&xweWaiY0S1qVxoD_=mqYzK8K6$rjD!RtsDCp<6S`)^u`^i5CE-@KyZ)OD zUDGwA&u6Gd@AQ0z)iY$_6`V~Lx*>7SP;?e--U9i|9oVB9L1T(_J`tRVG1B%515<Q; zZ)1igPB1-@gDLNJ8wJax2Ft}pkGLR}eGAtX*no965$wpYDgzMYTYp@JCQd-i@M(`$ zeQ+obgEhwRmeEhaF#&TgdG^Rhlsm~yd3(m?N?RWT?Zh-PgG8<*ikk?YkpbT|EqX|= z+RK{6^eV;U;RXw8az&A^nrnZH&t!jwnHa=MGr1{46Oyld#+l_Sb^WvqU6XvhBtt#T zFN3ELd=bZ;-~s$W!u}2o@l_b)QyGLft&?lKg9nN1Bec#BX6TyMDUWP2G~qZzZ@wuV zv@&}0K2!zB#L*wZ-xa+%Sn=m40V7!VHfi5=cw}6`ok*p|9sE3YChp`%)?D8>Eb?$1 zS2TdUn`1qKo#^}#yJ=z_#ca%Z|B)2H#zH?o#2Pq5KY3C9(9h2i#s-Iee!($CGm<Sm z^z$>09?Sz{Lg?o|ps6;*Wexp&GdL+V^iwE@bSYN>H5U4*N}Qpes&t<U{TwCvDN+d+ zr+=|>)83UVuqY|*2U3tpf{mo?AF_H{i;Xe%ykzW{6EB&qOY90byK!$^{+6B4K3l>| zCWy!xC;JDq!5WMnJb;Hk=ggz$B4OQeKZ0~A%1tw&hC&qM>2)V2>%1|ZUd<Xfd72mH z=jm<eGJ&Vha7-~DPoL)KAtO)kK-0zL=}n+N1=JW%s}d(qtJ0esJUs&1Q?wE;(g0%Z z`M7#T3OX}$^>4?x+VtY)<!l%|*)}e@dt7veJ$|-{Ec)2U#r`d86wTqBJ9vsKSa3~B zErmtK@dr|%7vuQnvIb6$=SBHBzKJdqIQ~}06!UTXoTG<~9RC6|U0jZ*>--9+F^*Ry zPL5ZlekP7zFik4j36Il&0yg<1!oC!AFF+zlAO5h?fSA8MSL!0<b{v^_=t)$B$x8`f zXaHP7;9g%*4(XH#@ts{(AH4Ug8VZ|C68vEb)MAq0J*<IK67Zt@lHe2QGC>mjwPT9; zB*9-eddMgVzJR8SD+x{kwJV^;B!Mb%N&;0{%OwdGM30Jo!s9rofKfh)@Xi#pXO#&1 z3uIc+QTm1$xYV6jkJwvW&=j851CtcuUqp=m<U!L*i-SG<pZHQ3M~*CN7j3wm(*Lmx z91WZkwjWekyr{A;+p#{5)}VYKDHq;guKShoOCl49_VW~Vi=Ys6nvH^Y9Xf0utuZGx z>riymsm;-o&U9bk5-h@he782|M_MEEml(Y5)9cSn4n<BZR=~I5ck7#?EGC(Lm4dyP zWcnFv;FL_fD8FPn>7+!-bP9^2&VqcBX^W$WjFRaLG+kWDbSk(`0W~I>REbkE$<qCg z1@C0%5?G=opHQN|e4O&&oo}*u<-t4eADUZSeMM+~#2lljfB&huK=xlvuyC5pw-Y>^ zB1^LF1mO)3xJ))qUDqOsSgIdDw9i3yT^|uf<|ctiqS;ctg9}_GA<~(sCn2t+CF(mx zrMh?_#H9MIh=hsAXQxPyn25ZFHE@bZUSx~NoDa(S=v_>B(1Wsv95Xg0X6h~DvZI5H z0`pchH3Vk1TgEQSY|?|W!brOfqEiFg^`NW^-Wgs)e3gc=<3ZWb0UZ;(>89_y96e-& z@9S;&W_%6N1z@%^@T5$7-~y`aL0JXy*k+|loST&@y=Yh-R(u%_-G!i-e1h$&6m;2w zE!kLp2WIfzbYr>9wLpHejMtc7&#I0**TR?67cZTB|A4BgPCmm6ZAo{b%vxy|a*D?P zpz*oOYLIAr$gvuecT+{<_Z=N%WZhq&>G2YcXM)VWN8n(=)wCD6#G|aCe8v{^GYHD9 zCo70M1m&qHU6|&6vZIHL(B6)w2DC>nC}SXY3Ck#ilZ69$(!P^IU?j0cjsxPiT*4u7 zbeZEI8c2}bNaQ$>f&7a7Gv_$C8F+H#I5<e(7d53Q&!ADBtKj9Y{Ey>gN-1g$vEcj$ z=A96$XYoqeRA46zwdzQt<p%q!+EbaX+X2wcy)kFP(57m>Wb(t=&~W4o816Yp4T<2z z1eC>kKj(GmJSt)n(?!0<(ZG_Z$LTppGhL*O13T_RDX0@cm^O9y?Iw+i*zKkOJudim z(;v{Z^z9~&Zgz{NjuO5Br`&FOt-jsV^l;Io0%N7jJ|dzMyd$*|vs{*&bIARVD;yA7 zh4D*$T>ZfP4rP(_O0$S^@T5DcfNrJ=g&nMV2d8ATWY<Mze0WRfev9uFcw%AXc)@9! zn<J&Lc;rn?$*bTm3Az)(p9>&M9cHk|A~hZHiAz>AF`D`_MN>vJ+>c<@o^STx|EA=X zbOY;fqj|KUeO}&Ft$^18#M214ZiG8oW|Glq84J_dH3K`iFsF~>a+Pi0-a(hM$mY^( zl*ux~Z7iiOQku3H9byEy+PUkE&t{h1ed3q3#;0cRVkOKmcm>CA&+|K5=#7`|AUY;` zM0zpU+_{~eT_M9)+`{6M0((?I?L@qV{=J+3b{YGh(E9(Y!a*~|1Dq+oke4Zf&r^%j zuclyDCyCAO17^g9K7kv9QrNo@cyptRt9-bSM$(5P6(VPbNRkO9U>>h6F&YJ)=f~-3 zTY0aKBILRvw<eA&$7?tZxvz4_ePvk4QEa{wayKZ*u}hC&&W3-~WKDiIkok7-h8dV3 z!gI=yi6p}8(xXZ#yBJ+-h<uMj<X?t`$O$$?2H$KeL~fC?tBibaVwax4?B33uLQx+d z;)>$3Q`lDVOROZSESb6wZ4eYnFL;6C#eT|~#6syKk;*!rF?<}q7La8Lh5$b+Lo2x_ zKX!242k*Q`K*_jAa4KK?R{WK=c#7T^i>H@RPR!7Rf;u;))QgAC8-uJ*X-r6=(0PuD z#KS1Nf@L7@#~JWVq4Sb$r3&E)ogcYb?V0JzmS(lfQ5A?0iY1Wfik;VHHJ*lvc0}9H zu#s|@;x)$Iw@}h1SMJgx4J1OoSz;$83)tbX<e0K)I~!}w??nH7Kf+VN?L4)@K}UPD zs;&5k>)QTor8$Ra-hOZxO$}pCrgvXH2JFYez1gxzTNjyr1+{De72Hg#XXdgr6>=hY zPRdef1Yx8h>}534T$-U*@$O5MWE1&9zWY)KMEL1mA4=_pgWi34GiK&8()=EMUrZy- zUOZX_Umknxuy~||Q~^j6kUJaY#XJhE+=9-DAPl^`R__!@|1B6<He4eu*kp5F$^cW% zdW9A^O-cd%Lx!SRmYkE_bK|V)F0@(qqrlSw>^dJ-&BH%iBH19_5R1PDvpI?Y;fJtt z`mGU_SXp2tU9^gzxT@ba0v-Saqq}e7vn`)<G%$swGauonStC1j<QhR(uDP2<G<W&i zp8K~QQ%RirHyjNz&fOMAgByu7LYgpxPhrqSGqbJP>Ofyo8lhE=2Igw?X12I#gw9Bj zKZA1#El*p4+uEiv60^3w9~fG&wauexX=@wDI<t&?kO&}4E}^qbYa5pnh#sNs00&&Y z!>AKhrn-t<f(tP_s1oPXU%B!HEpf5R5OA(owe^VQ0p$4ccXO)|<tX>?043}LWTPZo zPqU3oHsive(DCcDY+IHFr~}*WjlYAyOiI&3F+oVPBTq!d1&x6qw8$tdq|F>hBlt3o z;7ju&ICwg>;4iE=;nX540fPqF=D10K0A!IR-kpKXw%#mNm<dnV%UBhd(aaaDYwht{ z=)2OHijCgfjNiURyy)5GuN+K4>OXtrBkRNGVssAvx;_H_>bh`Kx7MxuMVuMvozt@4 zzo#$L2!&hSppfKqvI|gp4eac503$~CZ&RL=NV=J3#U}?A*cz_WuvP?QesnBk@b-rR z$apR3h~7xnbmTa&j{2pZ+cE$^KDj|~*d{jQLGP4CEGR~jC%~H&TYaD{2<;2^Ho9#V z1c(nF3-J?z!(tMK)<{&e(#pi~R{d6pVOYL5Ws$K^zu#dEfa?|BRD@!9k$nWu5K-|S z0v=cF9T63O;FzF!1Wyk=dzYgJlaLb*;eUdrT5rjE>v|VjMUUap&@&+%>7{1{(O7hu zDse`asnTu9#Gw!#rc@MjF}LwF?wknzpA_g47n8;8)vTU28^&o~sN$OD@gXP8OKo1# zy!@>|z-a#4DN~No{5SaAT{O>&a?||J(Boj5|Ak|M`Dp$pjvg}7{F+BCGR>2bTtPHO z^Qy#2^Qv@PGI1z`hba}sT=LQU*HWNs(|j@yQFP>8>HSID+EG?DvCH70)ofSpvZ^CD z<30oQk){`jZSgWxP2Cptt~b0H_xUu?U^DJ5jwze`lxD_#o}+z6ZVJ%U*g-Oxab5cd zhYjgm!i+065c1gUr`2aP<KC3A6dFO8aS3}F&A6P@lBrUdait0;JrBu^M68`W=qh5$ z9BX$!7U44EzKy;wrWyAs;yykc!;AQyP-Kt=8*krg8Bgd1Q2ij1OlZ)GrxF_U){jgb zGN|0lQ81{EykMO0UQi4QToi1IepkB!Qv*H%5-{cdU>}HWc@*yjeMmK5GO3TF@NmTb zz3h>IWpSRd4AQU>BtKUr8d;|5!~|4g!$_=SQ_L5E^61u=Xcqn~YmoUpgnx4NpOiXZ z^q((v{&!uY43RpY4?b9a+gu~w5Bd~`h=tntdkB`?a3MCHsX#ViwQ)R6s9_^@<*7N5 z`m20M-Qwy$38|w0d`LaRHOdf3<%5p^soN#L%5)S~LK-H_U5HIdHzRm9rIwB0i(Q~e zdhp@`)*v(2Ug7FL3BjWOd<fp>8f6Fs^T9`e;5gS>JGBeBah{Y-26L^dVIy_U1&$=7 z*770s1+M;+kShAmht#`WqYQymKKM{b&D!Y8JfcNwJ;8s699%T_<9l6@Npe5F%hA9( zqaCLxfAhvlRNt~Kjp{Hr5xgU9@@~(gMn=r@_(wp_f<2FaP1DkzM~-mj`1%0hK8xq^ zYVCQXh-MBEICVrmGb3Y+r!yGo69$Xkmph0Q5+m(XiIw1gVzoF;|2_Sc%agfOo(qkV zBb;-~vEaWI3r3XP_hC7bJ|u3S9ko;Cdqh$*gO6H7Zo+!>9h%oRA!bJ4R2g{!U7l4- zT?`Q5)x@h3;m8Q5#Y~_(_UL55#*Er4SOcdchZosK?adTRS+18lo!z(0AUlyOn({H| zQkvnYPQ*Vn;h3UnhD&$loa*So67pj#g0kEX_G7!U;wjHYQ^OFK@p9~!K!Z_N&MLMv zCB3%=|4f9+9o-73F}t=ZaoV+2X^sT9Imk~5xjYGUbMy}>LMt%E=3u=7kb_@$BKTFh zC}5tWpR;-io}>BLQ9~XEjf`5E5}8r>f!uBMeFbb+(FD5V{9cGqaxK1&E4gwua{o%G zp%BF^RQprNJ;u}fSOX_d^P>DbT_?N>)4GGF8;&XF<LSWBLq?uHhNg?l)AVAB0&0w> zRf&_QRq2BA+YY8ZMJo$SpgVW~vG#mi{p=KU68DooIF+jxH-WAvOwTYY&Ng`_e6fE^ z{<rKE&K*3(3NehW;=L)*i*furSpz4>^P>D5|L5p3f#d(uF~xiw|8YkT89Dy5Xu7x@ zPnX&hP-7ggN}L?8N{7p5o0}%J1UOCu3fSb62yah8_W~q>G!Et6=La4?#|LQuEXDTm zOrZPo6sW}{!NaV9Qxfo^{E}evV-h97i71Yq<?=~_jgB5NN`eVAU0g{(aViR^F-f3G zoRUD54xP)En?v%@qm~B8aZmxHd=lY@DYR`%gyfS1#n1dC{UjlS8px=SF{t62tm??) zXP%cr^H{vJfZU9#sTL3;eue_L*&$;vt5X%%(Y-@M2{oT}qo|3UM0$=%=VSF-9X(`Z z^%tS(h*+I1jUX(dXvEQ-qG;v_0vV%df|SM32qKDxa5!RuTXTa?ks18?76^Rx+s4^D zGfYyL+TKoUPcyY?Lfb=N<Tnyzf(?3$7`y5;y-tkeHppEu%U(4mF@`6JRfC$ZroF&k z)MCR0b_Cpigw~(K=8I>|G5}Xl00B1_1tbbQnX^n<ZF9v@NwdAeb>=v#uVWFeII3^b z_r;8(dPekECao#Cuf$%$Pj+cnVp-6WIt0qm21Ztef3ak)hYng9yCV7nB!`Zg{(o$I z3m+E`4U0j^ot5p>K`4|4vB4D-le1mu=ODIhY--1zh={F+RrB8zq<sZeZi%#TxU_8= zD8cw?0PkX@Z95H}M-K~$Y1>Y9G_Vwg<K)miD+ApRzEgTi+A7?hU5%BPXZHu7;stwl zFQ92bN%;{t9Gd~hJo5(rP%sI+fpvqrxHr(aqV!C+W0%g)QfA7GR#HqT`vyyHh3k8i zrd(ZV99@S>XarYcnb_W+L4W1g-nRw+Nl@VK(aS{RDDj%KNT3v<$`XDGs+qUg=VKt( z7CS@V2XC=rt{A3Tkg`Bv>x|p`Q`IwZv+OMV_c;7FiT`#S?1yXo2GS})6+76U3jP%| z5MCXX(Pn6F?ydG|!)&$Yh=aG=zh0u-t-ZQzTkeGkqQ~rSilvjR?74#81(2p{E1kwf z5_;t}oLot972AsEGqaR)EAFZ0;cpN^t?hWdi4=Y+x1wI-<x_T^jWOPV#E$%F<KeXc zWK=RGh9rlqLFVAbH@o^zih~pVTXAr!8DYwWh+p<P-sc);h)6g-{NNLmO^qTb`7X!c zro6NpiAXq2!oe%ie$f=CFE}Qbs5pJr(ZF1dHl-|XB96(7(rd8t^y##fxRoc3nV9m_ zM2`zrp1wuX(#jLZK2x6BDB(7wWaa5egOw*C*O^~ZyzNJNl+>Xl6D^<z#dyKbXu2?; zidjojLSl3lyOMt^wczT}kJOSAn@ROZLI~=S;u@P<2PNd%JmFT4PNwe(>Jgvo0@b4{ z#s1lf-+juh96cq6a^x6qplZa4JxD#sJNVKujQc46n89$6l$lgTksi|_&H?7KspYl+ z7RULsRrBx@OG_zqfV=Owi#6PVUV|mLm>{%R2l^|~c}(+2iqO8o(cssyFF6cZE`$sW z*4~@84)?C4@e<pW&P0z3-j!x(T6$OFxM#c4StuE}D@_?^`T?7Y^p=Yp**rIOwFI;N zjPExnZM!<eFQ5k{8-k-W--)0nrk#0P`ppmnT#-;HGtg7mi|o;q_P#lXEd=?Hj@G(W z@2VTGyOvTY&y^1QNb1$7mHFGB3MYA+X+*q&BjROw5fQwUTJVV2wpz(>(d8%Hz?@wy zMY`N#tZ!<%Y)^RuhKouiQ^*j92&dP*G_!3&NDhiG*G{ih%y&pW()`}l_tQ{=y{jK| zOgf);^$#6An9H_>nH3oQXK1RA1X*+3+=^DQ!04!VRgeJ%QN9QDxeQ8F6Io#JJ5v@z zI267$!eK_=+Ur==ba%e;rV50q-!`E=m|>EF(Ec~7<{-4om9uo-^sa6<lFx6S_O`PW zUP2_(Z##whcF8NxcK1f_km_d-kp6Aj!zZ&(`OWSZUv*S}II5{m1P>96a+qi*f`89| z06`^$fLv5!pGZtbBH9y~ETm+U`%`iwVIG!yv7(2}=HYGI+~=P&>HFaG4_7u8Vj6w| zJ*ct+A$B!NL73=1_2zt}8?Nl=hm#p<(@QN2KFye~>d-{bIp^@vQu|QHX$D=%M&yE+ z{oCg0ivY@OMCd$_oUfXP?_DAX5(W=;La=O?Yb6w!6tT1G+GSI=C2_?$=Saar|Fpq- zE#MQ~n}Z}<;#I6c#45_sD@Pd<Kkbp8=Nc*Lb}%1lFbCWC7G}dM9HW@B!fqtYhMGu% z%h7((j%P1)OfJ!EIPYj+u14z!i)%LAc)hZ*Facq!E+l_h?AAnZByGa(bC^az>>O4= zj|)DB-AmKLEQM>8Bbh1n=b|LjIqX&1JlLe;70VlIzeJ-?tOai$y-$Sylkc^~(t);d zIN+j~P6pHiZ%t`u<$XnZ8Vk+3l(O?kt%5wY<*Hvk-0|?n5%t7gtx<=FN79rOuLtiX zh)x9W7J!vIahi&`ZHdWeMm@i;sK+=G1}t7(D{}nd9K@-6f<WXcQJ&$kJ>xMd=747> z_>y<npXa|pL7<)vT*KqY$4ecv?8MTWFD35r98zQYzi~`|Brm3eKcyD@l_w_z=V+m( z-m5{_YgJ0!g#*y+TmtbpkE-GLX%5H#J}ey9fZd#Md=4IDYxpooAk8(T3=jJRNkI%f znGqAwnYc&ErIANu+Ueq1Gxj)}e9c~F!e%j}O8zWX_Zl*P$075#!$M}<g3NHnj`8bD zZM=wqRN*R0*8HR<%S;{L#!RE?l(}KkCL~Uv|4fV8CKQfArj8u>iJ!@}E|tas3U_Y~ zf`e!47F57CF1*vojt#}Kd7pL)Pdl=-#*7~#nTwyYu+AlmEwmdO*egy?26pT^&Mz5u zoY!%9k!3{!Lg`epEZkhL0sEzT5zh-&OPyNB%<8=oV3W&Z|F-A&=#)7UK|Bg|K&U6D zR5dL`%pn(^K#Ik&R=rlPb^CW4%3w|2wC{onaG(oLL*E)4LRnMbh+U*nCC-a9ymYW) zjx{lx(a+MEfn7U&n4{%okw__R=6h`H1xRnol;8u&c1x_GM3tk&M%*<i*wD~?)EGnG zm8^l2xOkC+xPnvBNG>~EZ>~vB)c$DCaVBMs25}Wrs+z<V6i_(_aaB-VgF_IP0!NIv zREd+gcxgIuU6HaNB0{>;%!w<xKf15<!*pVm22PUP8BJGTXI0Y;oR;-m7&)zPHsar& zzIeIKycJbbw;9c9!{__`7!4%s>5gaHKJJ*ZX-`kf_xn*tdvj;CkE9kke+o^ta11l$ z`+Wxx7qg{DpKTL*?1><s57X*1-c<Tv%2J4Jg_V@Bmy6UA30+!ArLri`X333&l~kUT z6*0xEq)cv<Or!)aS_v?cIB^Bh{+zxqrj_(6s5`~EreCboik+@MTWT~_{-4~|)2C*% zo(>vtpj9>etEFR@9K5(}(X$uWhNMB=O$i^$9^yEs)%dgo)XJ?hv5qZJPdbCMujGiq z)(YEzD8gPgsph{y$h54_>rIR>0NWPmczGmpc8%yjB1iqU5pfP689hKH#?GG28rT-^ z<$L5P_?O-P#jgI7?A@Y&D|S|Il2G^f4||j=T%!yTIm-thES_y*6ejTPj=?RVydI~6 zU<3Z3jYgQjH3bJ}qWz+ozz;blmuLd7I2xF%(Hr~Xn!wM_Cb<R&&X&>^;x>(I#KcVF z>(JwZP2+dcv_J>KG|rLFjGOCGlF2lFRn#<Yys%zwHfC#wdhHV3P40N~hBg`Zuqk_I z!<yvX$hT!-8CMpTQFf_VGq{&lG!fh*7M3pT=@3EBU7bKJcx>%!6;uq9?~};T*6dd4 z#x<F2k&zDuG%OTvsQF&d>vZW}6<fJ5-FgvmxPTt?`rgjh_qJizw-Uh7>l-X~h+c$N zD2W6>QgXv?I4E}bqnM>jEBrWpAFLG$Tr4nlcrUjj+b{0rRtYmb=<6D3pf1RHJUw1` zmm!T@15EMPe5K3SsY0FXYA82OccCIRX6*b@W;(O?DWNodQ8iyO&-uC`7WdU}w877S zI%O+NtEdVquzl(JJLwjzk`48L0oZbBNZ)icFn3TJIYNo}I%{N4dH5)U<(^~CNm|!0 z`0&=l5i+bm7#ZYG8#<d@BPB%{@R4khl@U5w8wnLl(|hnWEN{_NtX(b;Bn5#_I~tfE zI9@82`AV>p(`*|L?LxxXxFc-^Zrw^_B&J(^1{hkfZuLx>me#E})|qbgIU)dNE^=H- zGQ+>mGj%Ht6sAV#$b&&|1`p9vu~KjlGlw#8fd0x60l00cOLB&s{bJR}CHZ!XXe3+m z?Kzs)HX%Gl;4yq6?JmaCj`Yj*lqtolP>6fA)Ho!Q14R6Tsk_#zQ<kay2g055O4h*X zPT@tCJ0;BUrs-P<d@|0k+m09p-sYH~X`fC{gnhrG2TP2O4NQdn2WYCLY}R=1=b}~A zMjd_Aw1zq&>R&-L=8;h)PLGT#WlCix3Q>Y2%-#m#hDI{Q&EO4|AIv6#m!U-p_b@Ne zi&?#deAP{<DtkM3QuxhICSY-rtF;lt)%1`stBr@O`5DeXR_k=>tVa$z^;)}!$dppS zyV1v$k4nWpTF8Sh4uQmU9UemwVIo_<0_p1y3ZP8!{%XpqW6boAeEC~LCxTUJ`FJc` zEhRiI!-1@5efh}h?^6Iw<VViM7qfcFWJ=D(JJS1;9v>3&89hD$t2%P$;wfjQ@|1Kg zo`|ZcJJKkei_<jFVCQ1NF=bPDr#TnTakS4Ux-UjkLv&|yF1iGF>@iUxxhePY*|hqM z&c(A*mO}cda4r(|a*<jhp-bnY)SjeuExC~}BT0Q&5mU^$ILM527>jV3k(%^<uo;Of z{0q5)anX^P^IGj%BmX^&=`5Z^+513KQTYBP;x^PP$>t+`ykXmtZKtlhY#J8Uqtjkz z9-iE}Vxu=V<F}o5t+ld|v}NfJYVTp&=qo@X=Dv{A>Gu-Ve5s<s^6+hSgV<%eT5;uN z4$GDNN;*3#*s#7Iz=|qriGIEN91Tp7?6g|l%Np5MtCb)d$86PSOqc!Jp6{PHhEJUD z2OSNDn(qdS!W}brRKOY{U+vX=!7;hS)qKX$AmeHV%X=GT!YZb@DClF*MYD?it7Aop zj>qph8kiu^oBrZD9#3+J!@*w0Z>P=LZ3)v@h*`p3h#nVg2^-rE_Scp$j%j9Wc@etj zx{bpUX1Lh?$8-GlOtVw#&hM=INBp{X9&Scp_r);`NsXI0v-vH=vU~nKj2I1Ex~H>Q zVSG0dc9rJ5D=*s(vsv3ORq#)C7_0a*y+eoS5I2QhcF2kl7E}}Gyc(<__(d0TO5RP^ zUb%l~r#oNwJ-^i~S8)>uH!<MctaQAo*?P02d$8D-_r*VXe9vMW4Tk;AS&))7!D&D< z^wmexUwO=i!5u^e+`+n4G>+~TChrj`3C&T`4>U(5KWq^+NOL?F1GzNE3+Ve`%~8yC zfey&4kG2t1UX+3O#WF4fb&B0)akf_Xb2}n4<#tROaiEr&)gd`+NU5ZOrkcHOtJg(D zUYiAXAvrn!K<g&ci1;d>50f{YlJY1fjVHNnBC(R9V5S#dm6?3)9ZmQ(uTagGOdiEV z;P5Tk(iQhC2#X9S5qIdONROh9<p3PlbtGENPc{-uz(Q1nB&s|IS%b`hWKCE9NiI#% z|Lzq=#D8ia+3l`Th6p6%gWGb^6sR^K3m@>!93obR%#&U0>Oz)8sN`#jvDkMTZLfDN zILUweIzGvVR~TSTi2r+stN$dliT?AU?T=lf41qR2_z2Lp)h$n5h}#^kDlr!?uu=Cp z*P<T+UaXLC+Pc4mk5Cgn%^GCpxPNr@pM*NmzlFLCX-~iH8fOUP@!^L;Ue-om=77{Y zPOu-7U$isS+Or%oH7T-SwWEP4c8=E>%1p1AxYrGgFj$ec68E`EV<vX4dO9$*;B(cP zG%bCu;@D^Bs=Y)ASt1OM=?DXQ4ZPlLwvcZC?k;u=Vjiw?6OJ#sC(K~SlNucI8@Llm zSFza%i`|c<b6CkEiC-AMl3!Oxz~>yhdrTS9=BST4(xiE$?n=4x>zja*U%?XrM@Xa# z=&w8nm){f(kCDuIV)e*cuYEQ*U)QM5Q}pU=ukPW&-i9~d?0F(j!I4tCR+_<~n2`xi z%Hr@Vh@;sqc-QRpjy8MsN@KE1K?E$z0q;%X|G=n5c<|2qVq<6&U(QjyH!q5VOQ{9V zR^WuttxvCan$tYjU#Hg=Yh>vf5DSd^xlKI1M0fDPL#z}z8gYx*ynH=guOU(3+<DV; zPnhobEqbwOW@pQ9PkVm3JWbg^W=b<PTtlAs{BBuY!2dOjtl@bhhv&10h36Rf%?Zzo zu4~BWDgZWs@Mx_L(xdY-2^ccYkf$9d$Z4-OOW9JGKVHR-58Ym`t;E+>9CmH%?6no; z6<-`L$%$E!zr)(TQs;1I_xMh4-*uN=2Wyd!P;s_snG!}7v0RdZzVwUO#nwF1hcvuG zK^&x+_yvEG)vDL1-P+?32jg7Ts|IT5F+Q~9Litkz;Rpvp7k@<$Qsy3x?WbCU^+mAB z1}weBnpAI-V~J%CPG%6EI%xTPdP*DxucAqDNATb_dJU}lL=a|J1I77^HLS-P?#j@F zLI7UQ*QzeBhnMrEi~?PT7`|*2y-Hk<rZWxY-zTI@1aHp(G6Tv)DR0TpL_;}2E&k$i z80{XwA4HCK*r<F-hC${r8BVr?2cfRZx@(&MT!yZnk9tzjNvHU6NJa8@=~I(o9A83J ztV?K*;PznMm_AOYa<8bMm^Az=ZK(04u4}Pp3F`+s-S$D2sX^TCEa7EBc^hVr$8LJ! zMo`-?BmK-gsT#CdHl^T))F;IfUkV;>+t?W}4@}aIKt{#MgX{th&zZztJ0v|6dMz%J z@{I&a2=tE%dTV#O$hQTRlwH)JeMQfki_73t0}i2SY!Wia{G|8+@IWfe6!6DlwEhok zK+aQdD&jolMRvgBX}eqVyJ^+CZ@Hs8--08fAR+B~OLWy^mE2q_>qSNxLzSqYH-l)_ zwB~oxfPFtA{)5~3F?5Ba1GB1qxU#P3Z$?vn7z|gjaa<`VkVmr7zdLv%Mhwmc#G>(! zn<B92)9Hvsi7V+&4~uGGFFT;Y5UzOMfxarW;hiDCbccp93&XSt;_(jXnBYwhFr9St zkP*HY+VEXnuH%YYe;5Eq15Cx1X#sWlK@HR3wzX_?P!NwrpQ;jPaH1-G_acam2k(4? z6dX7_j7oGUyoc{tggGyQsN?)#9(<EG!KZ>p{v}1e(Pl|I_qVuMQ~FVCvv_61qMUQb zkoIL6m&|)(djxJ|vOJ48A+RF^#jwNf0NKCY_PZ6j$GSW@b0i`+W~>%sKlWXroXP&f zDU2GE{fAfsr|joNwk*mi`(K3K#l#26{ueuDYzn7T*?+sEgN(B2)o6OWWd9aWqz1N2 z_PgMnLH55x!`LDF-|2vk3Ep(s|9g%eGQ#%*Hhf1f`z@flWWR!VO!li1r|egy)dV>@ zlmMVq>mmmpcfFGcu=A)_Mm?rm=x}<>CwnU?#E@0??%#w1Q`Fsqq~gtHJxx)EdQK)S zQqV;Q+%SVAJH0w`4jRv6QLGFp*JSu5+cA`JvV)O9r|UNg-laa2I$<@__8w^P=!n|F z6g>~KG$M6a4_sx3OrNVAsxo`ujE|1kRM<^>ZE@3i4rLetQ}<b@5N0$-y_c{>kOdpY zC1$vGDgJTKmk_7%0(&F)RtlnG8^MFDfpa6^MfOIpnGOL=m)m^{Va=ua{}f${>8_$W zS~X*P)z2MM%qN;2cJz=@G>tvZ68#GhO?+u_W&b1yd<E2)_)#TJ@uN!rGeH#m<}!jJ z<?z4e`UU0W6V3lSg&AzooUCTk&7p6ktJ(582U&44Ugvm#RZYJ+q~2K(0z~~*w83P^ z6=372<-n8x#FirK?Os$(H8p8V(zM#$*}icUW^HD?vFt)Db`Cp{G;ii>q?QuqYX{^! zmll)5T{sc!%K#~HJBJ`OVsu&=B?U^YZweL+t-TDB6=-b}B+@L18m((3S{cf$Jq;ss z^S-WQ&+1hvvoh^UIn(5ZdQ81DixdN|NEwzGo6f~AO|K^zmVlNE!-?WT-oJ{Pnv)xe zC|VgUpl}$we-*p|v$Z05cydSj?24lO1bu($%4N&$Chq?aD4L8@U@|9T;kIZvMD#gy zY9!|NkZijx*hp>Z7LmQEK@q;6Q*#rVMeq_#D0pDN)T-;_^O~w&5^f>y_D-f|?VM{? zdUYQrQ1N^_FD$Y`WVK?2CHba1(F9VES66Z&QJsbxc}0?-497anUb~FEFw@j_dAPCM zYqycayC}Y28?KjMNEz;58?HqnL<)k3HE&C$S?+af^-f{7-E2U&uHc@)b4v9d9+khR zFPw3kt_{~I_dMFKg8>Xq$I@I2KThDo6w&u#{2UiQd+j=YZRj@3#hFt1FqLAs)%0Nf zd_O#Kw%P2$)`DneRe1GsTu6Z>A0h9>V-y3@$Cr)p0MuGV3Iw6N<mmD={>88R>`Rdz z&*QMflrf@cK*mb;VSO9X_w8<x-2mucy&@d1mg?%~>TnA@!GKk_)a`X-rPbkT7VD4x zHj?!iutE)71(?H^b=`KU?9;sacZD0-^BP6Jfp{0x>WAxk-PxTN@9fm@?+LrGi0k0Z zb`dENDs{gNIMY<i-F_%dL%NsMte1YcO&GdlNu-P5XCTXPBkxz%0hDjrcg4<&F}__8 zX&i2*HFN+dTykjDv8H~wp^khFz0x5c5U=3(3ct}0PlA7?*{&2Tehc)0VQLJpV?0kA zL8MkG(t{<nV~7b4H<o&cN!Opk6*UmmhDvX)r821!VA%)Uqww1eymyZ;o7fjXx6vW= z>rbtY->Wo>$L5HnHq%)RFJ+i58I_c~#UnLb_Gq@LFF1BO6lQ{jP&PSyS|b^vIvuXZ zV(2<POEHJC4Wb$grSJ3)_QQ=Wzg1+9uwcQQkmw7dF#ICXcIZ{R-BxG!u3blu9xZT> zdZF1qw5#GD*@c>&UH$MBYC+o;wJ72WBB0y_RM+DB&c~g50l>1cJzI_pLtpeT6LOd? z&S9NG&F{{#VXED^I)+%+EzN)hD&1=T>b2oE5Y${z@s^r?vC|^--W_gbv#B*Yew#dO zpj(1b1%!M;yL43j1mkV)%s0BFW5p^?%yl|7_rq0mpzeq3J98!Q)2%(QZwD<;V!!#% zV!a8?3ZDVNZAktBP62*7TLEJve~M^*xYxpDHbVAvYh8ecv-{m3l4iNqm<6gO|DQ+_ zq0^hO>uvUNld}Sr#O0b!)kn7ayTen;xKeW%`Swe-dJ)MKU<@Dua96m}ZyW)Nx3Ix+ zVc-ztMZGqM^!HaS`}z-8_h!PiTtt8;L0+{6cPJKl9(=ZxEtmnwr3*<3pusTE>E8|^ zW_@Kj8t5~6n^iw3e@Csts;{As{NKUf(RT7B{Lu;5(Pwy|FxT7rtl-*C^~~G*Q>+~O z%O%xy;h0FuuSD`{q4S)9iq$g_A96`7E-+kO>tJ{3-$nc4Q_iLxG<@SD`2H`RPNtAD zteA%&ejj^y@G$-H3G&>1n*Mk#?Zx-fAI~@ee>{u+IDb9<xS0O%H{g$e{@A<;f1E;p z1SjK<CjIgLQ}D-!>5o5p6#n=S{qcjx;E#vt4|-8Ppcm%@dc`-OSAGL}M=GFqrUFWv z8BkiyfRa1~lmsfEOKt&Of(s}tGoY}|Ubw+zK8E%UcxZu%8Dew(g#@Im$LY)b!s~&7 zz=Cr#&AQ@eR`uk_M^$^B)#ExjDr<D2)j#&Sc9%BSQ=)x|l4apI#CN&bBjF5>U%3en z2v`-_IQ!w6z2f^lpx2l8Zy-@wYC|d_MM(!c2Om&LaqII5>NDfD@d|A$LI!iJ7yd64 C$N$R! literal 104489 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�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 diff --git a/docs/build/doctrees/grid_options_descriptions.doctree b/docs/build/doctrees/grid_options_descriptions.doctree index ef9f5f153be768b3795647b853039c46c3f89296..1e8841878b5416327ae4627ab83e4c39cc365b98 100644 GIT binary patch delta 2783 zcmaJ@c~BHr8qe!tU=S_AkOeiOf*PDAz{3G=L=+M{rdEQ2A%KwpV~e7|M36;pqA-H+ z8&psfL=;67X^nV=?8b}LHRPzMRoMt@c8#?rD{58tk7#Yb*MdN-{imn;`yJo$`s<$a zJ2W-WXmf3<$~#YLmkGoVkwPiIPL_3=^vMpMdVO+AQrt)BdOf-f6EMdx%B3%0HQB{j zO@FZ1ssa4y8H7f|QWB1CZ-0C-H3nIp8MrU{!egq0yWWr|=&uqu`})c*Ue^RX_O&9- zryk4wC_;Q&$R)0mr^TX}eu;DgMX}$ncx<r3$q<i>0Lt7^I2|bRe}a;kzGw>go&?}z zpg(-)#0XJt7(L^jQ(8iDqIXj2nvddA6VlAd>1pVk?StT%@8W~GzCzS+^vwF|l_YP6 zB5R&C+v;i3{vQ@aYoHZnb8f;ph{8Rv6t020Nj|S)()?H~oYz$utTYsKgf#Ksqu^NN z&)<Ss3n^&uHhdgng>k_{1ieG$wF?~xdCF<luvmFmXaK>TMO5DS&d)>`V}l-V0}7VJ zpf~I%R2h8*OLgU<8Z<6$!s%t1(2O4=cP}|j1jz<@)+r=W{>=ERAS7~~W4z64ubGHR zV|vphn#L^-hEt>mS{+A_V0eXJ)9qyNSjmdt!l`4$U~UL{G*$M}L6veqp}Y<6Se<RC zBB-!IcdiF!Ml6T8f}$tF6}KWL3$mKDb+A#Gl62Bg_b`z0<ACM6g}<wH-$BHRO~M`3 z;k&^OOJ3!$SPqGtOLQ77Z-JmU#T`K!d#zEa@40*~Y5~zXso2Oq%r=~1Hpq>0*ZrpU zRe@FSUnY9a80n%VQ(%ma7p7?0)EzyT{^j(dSQ*Yk#uRB@Ej^QcK5!wrXf@qR#mvJo zlHI6Nk5;n2hrF14-FlUg+*gp6L2DRam!v}PAt%nmaoJ$8ku#R4j4)h^Ezp&zH<o^< z7{w`!i3fJ3m%oiOXvksCV(m4^G=95QXi)pBV<s>AOJ@De9@5_`)}Jz~sV}y|WXm>Q zTB=9~hdiZl#IJcsqVPv)8tGys4;(_OQr``nkupd(gI@nZZQus`QO2ZXG0BN*w-MbF z73l5nEJacN!Zdv|y209X889Q}-KoeFlW^Ix&Pz~=IGZw^jKstYcUNh^QRFC02V2g( z3vq*)jAImM=|wdR>aXV3h7v-&u{yP!OjlTM3EsBKlQWS&WM;)jlozEvBf6zbGgexx zP(0XzXg4zqIp%x1Xcb!72ib065OZ<2e{tRp{BGcZvl2V`LB2TfE4=sq=he9BYmC`U zu`FYykZ;SM(;SxP<vHfDb0ihml;wr_nRoCYiz)+ImAMj)o0EhlRns_Fv+Y$YR=}6E zAuAN4v*+4d$SkW;+fA;AHQO+Br!Aa*=}*haf7!goKUGqgS1TU}McDsVm3~x*@>DIO zcW@bHuPUPqx3fPcA;=4N!@4cg>^<!G#3$O}S-7vG8@qeie1-gA%PC?{RgMqic=7jE zrBb__o!p(PBgieJ7@hxb6c$N>n;jk%iP%%{Pn;{JI9d3OkZ8wWx)(k%40YedTO3=w zAOG4)m6F~r4u#(*5rRckj4ClOzjsS!K)>|@7M4=DY`Y9U3s1ApB4XUu5y&mMgx2j8 z=F*G8ZB;m_oD1JC7tv|CkLTr7?%6(q2+vjchaDVtt`JdFo(aE73ZEUBa0mA-gNS(* zPmp7!h_CE`xr&E-s`O~bReZQh`CM5qBd?l=f3DWc4m(#6bktC}a@T)|uv5p|{b~<S zVz*a>Yt3QY+Dq}MrWt9qTz0osgx}sqSocxrYS$uQzch3>&3rh+_LU&9j^gsZje^de zJFl+i&b#YH{B3_Vst!=>s;fd;gX-KM;*0vP@sEQPR}Qqm`4A819uhI^;B7=6rt<5J zgn%~jcx{u2=0nGjaD-y(;Ufq+%EKp*in!KP3sW=2&Lby;D{AV%V?1^GF%jP%wZO53 zqPjUnc&MV^ws3UVaS{8EZN%rtDdxAtkWr{V=a0G*9Q^Kt2>;`y=xU|tJ)TKsa8PLD z;EXmAr1eWYZlfS4uaj5~-jq3Lb4o;fTRGl1P2nM%Ng)TffBL(p>d&AHCcy91Jrtaw za_DI%LXL87LOVCw(=OtdPpi;=mg3ZzEYzLjEe}8MkFNHgKrT=`IC}<87kN1QqKN6| z|B9^7DEuzm72b5<htSaRyS$zJz?v?8BZNAzKM%TK2X$jHvLhO{9Z5nk*E-Hq;sbW< zI^WVEi+3IOJ64biIq>rmf$Ww$|I)6>NmX=G3cHjkpAe~(UB)V#DY>$X#DFB_Vz$_? z|8QMGdgg|NH1^+1Vmc$&7&+g_xkj^T0z;XhX*hQ?%~7q`M~ho2E6)5zB&MXKuW!3L GoBR(Z+Q_{C delta 2707 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 b^n#L#-Ag=`e85@0Y3s7GESb`p;rZl$+mO8j diff --git a/docs/build/doctrees/index.doctree b/docs/build/doctrees/index.doctree index d7befe589c22002c2d96c3f547c3035fdae1fab4..05f3ff5a58b6c27b26dbd1fa53daec18af13fac6 100644 GIT binary patch delta 945 zcmc(c&1(};6vca!P82JKP_d#=UPW44+cYSNAJG)8(M5}BY)uo0>0~m^Ogl44XOfA5 z#-x~Tq=I-;!KE8PH$`3-f*VEMxUhnMLBJ1CM6<F>-;5>T!c7s}J%0C`bI;?x`U>xw zz*XB<USEI0mA%|l6x!PGi+>tFc>S=0z4rCVIa1JM&B*hLLQ=BE>m?yq%1c>|^!5^6 zC285n4-X&-?8Zy}W6XK#ALRt_>2SRAW<rt;Qk2<tK@oY4<Ry`$3bK-Bn{`phXZ6w` z(M2_DGX6)u89l4oa#PgImd5g1ok@-t=J<?g3=&>TTRM%!*vYb%v6(K)UB7>B5zDyg z@e;i33sj_SiMr%j{$CZlt=_ET-z%0OLf3r{0VZ(W*F|q1DLddQcKG+hr!5@!{+3*K z*%@~s4IG6yehxf#CkiPk*1uRU*AGeDaszu#+@b@=V@^n7EjSAa`aL)akfPz!BLHb! z3SEH|HV${=&yWEbIyaJWf{gFa#vo(kvC$$Z^yTOffQHR;2~cdTh7Fj<M)(mJsEzmI z+Ih;E(w^B3^qf3^&pjO88}p#AvxBZ)c;<8!*~rb|gT9{4SqMx#b8Rnv8>>QzYU2?H zEYKGhtK0EMyxno9C8cWgrW0<^X8fbWRbeSRU9A)~>cQ26L$JV-Ojxvg=*c2ZCEvPg hOd4!SX=HlE;aXxW(qh;tq@YGkVZ#CQG&?it{slB(SgHU3 delta 403 zcmY+7Pbh<N9L9Uzckf8Dwn;*y)EZ$W|E7l3W*nwjOT*-~Y_Bb~teO4OnBxxgrJTq` zxsZM*E_RTcaN(#OoV3GkN-OUqe~zEe^E^EdMclkWNGtX)BNsxdi_7j)+R#9^h9tdo zD}V6`y(IMXRZ10}JxQG{LkbR-={W(Mti5-SgNv^F8*%l$w~~Kg@gL37#o(yYE!72* zJSFvQ)MVVm96K}?dCb#}DImj#$pwhaF)|EzX?N5Kk@6kQ#GAwLv8dV4L!uXp8@?|+ zZH*$x?ya4`3YEq@2!839EsPKqY^PYI_@th4<4hTmf8P~!tZSv5T3|;L&%CfEI~6@T zbaXVKrt`K=L?~}Rz&eXhPH{-EJ4d<_NoJop<B?(|&nqWv$eU`)OIljc)KZOTLPFlu x(~>xkboq@HL<@wBTpRkSwfL$?uhp=)H^vFuay0cPT119z`QAB%SYp|w`UD_wl|cXi diff --git a/docs/build/doctrees/nbsphinx/notebook_api_functionality.ipynb b/docs/build/doctrees/nbsphinx/notebook_api_functionality.ipynb index d81c31711..8d454880c 100644 --- a/docs/build/doctrees/nbsphinx/notebook_api_functionality.ipynb +++ b/docs/build/doctrees/nbsphinx/notebook_api_functionality.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "ded7eaf6-e1ba-46c2-9f6f-9ebcb14a264d", "metadata": {}, "outputs": [ @@ -30,37 +30,69 @@ "\n", "FUNCTIONS\n", " free_persistent_data_memaddr_and_return_json_output(...)\n", - " Frees the persistent_data memory and returns the json output\n", + " Frees the persistent_data memory and returns the json output.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the persistent data object (contains the ensemble)\n", " \n", " free_store_memaddr(...)\n", - " Frees the store memaddr\n", + " Frees the store memaddr.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the store object\n", " \n", " return_arglines(...)\n", " Return the default args for a binary_c system\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_help(...)\n", " Return the help info for a given parameter\n", + " \n", + " Arguments:\n", + " parameter: parameter name.\n", " \n", " return_help_all(...)\n", " Return an overview of all the parameters, their description, categorized in sections\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_maximum_mass_ratio_for_RLOF(...)\n", - " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at zams. Optionally accepts a store_capsule. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_minimum_orbit_for_RLOF(...)\n", - " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at zams. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_persistent_data_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_store_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_version_info(...)\n", " Return the version information of the used binary_c build\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " run_system(...)\n", - " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things. \n", + " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things.\n", " \n", " Arguments:\n", " argstring: argument string for binary_c\n", @@ -126,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "10a74d5a-a3d5-4543-a5bc-20d1fe885bb4", "metadata": {}, "outputs": [ @@ -134,8 +166,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "<capsule object \"STORE\" at 0x7f163859d0c0>\n", - "SINGLE_STAR_LIFETIME 10 27.7358\n", + "<capsule object \"STORE\" at 0x7fa6a45ed180>\n", + "SINGLE_STAR_LIFETIME 10 28.4838\n", "\n" ] } @@ -183,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "318874f6-7acf-49bb-9786-299d4dffc0b3", "metadata": {}, "outputs": [ @@ -217,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "id": "d7e757ae-579c-42a2-a310-f0401b7800e8", "metadata": { "scrolled": true, @@ -291,6 +323,9 @@ "opacity_algorithm : Set the opacity algorithm. 0 = Paczynski, 1 = Ferguson/Opal. : (null)\n", "wind_mass_loss : Defines the algorithm used for stellar winds. 0 = none, 1 = Hurley et al. (2002), 2 = Schneider (2018). : 0\n", "gbwind : Wind prescription for first red giant branch stars. 0=Reimers (Hurley et al 2000/2002; choose gb_reimers_eta=0.5 for their mass loss rate), 1=Schroeder+Cuntz 2005 (set gb_reimers_eta=1.0 for their mass loss rate). : (null)\n", + "postagbwind : Apply special post-(A)GB prescription. Default is POSTAGB_WIND_USE_GIANT which means we just use whatever is prescribed on the giant branch. Other options include: POSTAGB_WIND_NONE = 1 (no wind on the post (A)GB), POSTAGB_WIND_KRTICKA2020 = 2 which uses Krticka, Kubát and Krticková (2020, A&A 635, A173). : (null)\n", + "Teff_postAGB_min : The minimum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_max. (6000 K) : (null)\n", + "Teff_postAGB_max : The maximum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_min. (120000 K) : (null)\n", "mattsson_Orich_tpagbwind : Experimental : turns on Mattsson's TPAGB wind when the star is oxygen rich. Requires MATTSSON_MASS_LOSS. : (null)\n", "magnetic_braking_factor : Multiplier for the magnetic braking angular momentum loss rate. : (null)\n", "magnetic_braking_gamma : gamma factor in Rappaport style magnetic braking expression. : (null)\n", @@ -310,7 +345,9 @@ "vw93_mira_shift : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate depends on the Mira period plus this offset. Requires VW93_MIRA_SHIFT. : (null)\n", "vw93_multiplier : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate is multiplied by this factor. Requires VW93_MULTIPLIER. : (null)\n", "tpagb_reimers_eta : TPAGB Reimers wind multiplication factor, cf. eta in Reimers' mass loss formula. (This multiplies the 4e-13 in Reimers' formula, or the 8e-14 in Schroeder and Cuntz.) Note that Reimers is not the default TPAGB wind prescription. See also tpagbwind. : (null)\n", + "Tout_Pringle_1992_multiplier : Multiplier for the Tout & Pringle (1992) magnetic wind. (0.0) : (null)\n", "artificial_mass_accretion_rate%d : Constant mass accretion rate for star <n>. : (null)\n", + "artificial_mass_accretion_rate_by_stellar_type%d : Constant mass accretion rate for stellar type <n>. : (null)\n", "artificial_angular_momentum_accretion_rate%d : Constant angular momentum accretion for star <n>. : (null)\n", "artificial_orbital_angular_momentum_accretion_rate : Constant angular momentum accretion rate on the orbit. : (null)\n", "artificial_accretion_start_time : Time at which artificial accretion stars. Ignored if <0 (default is -1). : (null)\n", @@ -318,8 +355,7 @@ "wr_wind : Massive-star (WR) wind prescription. 0 = Hurley et al 2000/2002, 1=Maeder and Meynet, 2=Nugis and Lamers, 3=John Eldridge's version of Vink's early-2000s wind (See Lynnette Dray's thesis, or John Eldridge's thesis) : (null)\n", "wr_wind_fac : Massive-star (WR) wind multiplication factor. : (null)\n", "wrwindfac : Massive-star (WR) wind multiplication factor. Synonymous with wr_wind_fac (which you should use instead). : (null)\n", - "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. 0=Hurley et al 2000/2002, 1=Belczynski (early 2000s). : (null)\n", - "PPISN_prescription : (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. : Ignore\n", + "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. BH_HURLEY2002 = 0 = Hurley et al 2000/2002, BH_BELCZYNSKI = 1 = Belczynski (early 2000s), BH_SPERA2015 = Spera+ 2015, BH_FRYER12_DELAYED = 3 = Fryer et al. (2012) delayed prescription, BH_FRYER12_RAPID = 4 = Fryer et al. (2012) rapid prescription, BH_FRYER12_STARTRACK = 5 = Fryer et al. (2012) startrack prescription. : (null)\n", "sn_kick_distribution_II : Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_ECAP : Set the distribution of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_NS_NS : Set the distribution of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -331,9 +367,6 @@ "sn_kick_distribution_BH_NS : Set the distribution of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD : Set the distribution of speeds applied to any survivor of a hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD_subluminous : Set the distribution of speeds applied to any survivor of a subluminous hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PPISN : Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PISN : Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PHDIS : Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_II : Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_ECAP : Set the dispersion of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_NS_NS : Set the dispersion of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -345,9 +378,6 @@ "sn_kick_dispersion_BH_NS : Set the dispersion of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD : Set the dispersion of speeds applied to the survivor of a SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD_subluminous : Set the dispersion of speeds applied to the survivor of a subluminous SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PPISN : Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PISN : Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PHDIS : Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_companion_IA_He : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_ELD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia ELD (sub-Mch) supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_CHAND : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia Mch supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", @@ -368,9 +398,6 @@ "sn_kick_companion_BH_NS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a black hole merges with a neutron star. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD_subluminous : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a subluminous hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PPISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PHDIS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "wd_sigma : Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. : (null)\n", "wd_kick_direction : Set the direction of white dwarf kicks. 0 = random, 1 = up, 2 = forward, 3 = backward, 4 = inward, 5 = outward. Requires WD_KICKS. : (null)\n", "wd_kick_when : Decide when to kick a white dwarf. 0=at birth, 1=at first RLOF, 2=at given pulse number (see wd_kick_pulse_number), 3 at every pulse Requires WD_KICKS. : (null)\n", @@ -443,6 +470,11 @@ "HeWD_HeWD_ignition_mass : HeWD-HeWD mergers above this mass reignite helium. (0.3) : (null)\n", "wind_Nieuwenhuijzen_luminosity_lower_limit : Above this luminosity we activate the Nieuwenhuijzen and de Jager wind (4e3 Lsun). : (null)\n", "wind_LBV_luminosity_lower_limit : Above this luminosity we activate the LBV wind (6e5 Lsun). : (null)\n", + "colour%d : Sets colour %d (0 to NUM_ANSI_COLOURS-1) to the extended ANSI set colour you choose (1-255, 0 means ignore). The colour numbers are defined in src/logging/ansi_colours.h : (null)\n", + "apply_Darwin_Radau_correction : Apply Darwin-Radau correction to the moment of inertia to take rotation into account? : (null)\n", + "degenerate_core_merger_nucsyn : If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) : (null)\n", + "degenerate_core_helium_merger_ignition : If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) : (null)\n", + "degenerate_core_merger_dredgeup_fraction : If non-zero, mix this fraction of the degenerate core during a merger.(0.0). : (null)\n", "\n", "############################################################\n", "##### Section Binary\n", @@ -709,7 +741,6 @@ "############################################################\n", "##### Section Output\n", "############################################################\n", - "david_logging_function : Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions : Ignore\n", "cf_amanda_log : Enable logging to compare to Amanda's models. : (null)\n", "float_overflow_checks : Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) : (null)\n", "save_pre_events_stardata : Enable this to save a copy of stardata to stardata->pre_events_stardata just before an event. : (null)\n", @@ -739,6 +770,7 @@ "escape_fraction : A parameter used in constructing galactic chemical evolution (GCE) models. If the stellar wind velocity exceeds this value, any chemical yield from the wind is ignored, i.e. assumed lost. (km/s) Requires NUCSYN_GCE_OUTFLOW_CHECKS. Default 0.0. See also escape_velocity. : (null)\n", "colour_log : If set to True, thelog is coloured with ANSI colour formatting. Requires FILE_LOG to be defined. : \n", "log_filename : Location of the output logging filename. If set to \"/dev/null\" then there is no logging. : \n", + "log_arrows : Add arrows to the output log to show whether values are increasing or decreasing. : \n", "stopfile : File which, when it exists, will stop the current binary_c repeat run. : \n", "stardata_dump_filename : Location of the stardata dump file. : \n", "stardata_load_filename : Location of the stardata file to load. : \n", @@ -763,8 +795,12 @@ "MINT_MS_rejuvenation : Turn on or off (hydrogen) main-sequence rejuvenation. : \n", "MINT_remesh : Turn on or off MINT's remeshing. : \n", "MINT_use_ZAMS_profiles : Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) : \n", + "MINT_fallback_to_test_data : If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) : \n", "MINT_disable_grid_load_warnings : Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. : \n", "MINT_Kippenhahn : Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. : \n", + "MINT_nshells : Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) : \n", + "MINT_maximum_nshells : Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) : \n", + "MINT_minimum_nshells : Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) : \n", "MINT_Kippenhahn_stellar_type : Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. : \n", "MINT_Kippenhahn_companion_stellar_type : Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. : \n", "MINT_nuclear_burning : Turn on or off MINT's nuclear burning algorithm. : \n", @@ -825,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "3d29ca9d-ac66-4f9e-81cf-2edd14a98b79", "metadata": {}, "outputs": [ @@ -854,7 +890,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "e517f561-09c6-419d-ba89-d9cb61e6ebab", "metadata": {}, "outputs": [ @@ -887,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 7, "id": "7da75a95-8831-4346-a584-e042ced75249", "metadata": {}, "outputs": [ diff --git a/docs/build/doctrees/nbsphinx/notebook_custom_logging.ipynb b/docs/build/doctrees/nbsphinx/notebook_custom_logging.ipynb index 05ffbccfc..84e41e6bc 100644 --- a/docs/build/doctrees/nbsphinx/notebook_custom_logging.ipynb +++ b/docs/build/doctrees/nbsphinx/notebook_custom_logging.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 1, "id": "696ecbb9-1efd-48f4-a57e-2cf6dfe416f1", "metadata": {}, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "236cf821-09ac-4237-9b8f-6e36d2edf446", "metadata": {}, "outputs": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "id": "feb423d5-5cc3-433c-9801-f8017abbc03a", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "id": "2f5defbf-c623-49ed-a238-fba52a563a58", "metadata": {}, "outputs": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "id": "dcd74bbc-478b-43e4-b495-8c456e8d1d88", "metadata": {}, "outputs": [ @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "id": "77bd09b0-1a94-499d-97db-a1f991c67c12", "metadata": {}, "outputs": [ @@ -203,10 +203,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_ABOVE_MS 1.041660877905e+02 4.99198 4.99198 6.1357 6.1357 2 1\n", - "EXAMPLE_ABOVE_MS 1.041662558619e+02 4.99198 4.99198 6.14057 6.1357 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662560111e+02 4.99198 4.99198 6.14057 6.14057 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 2 2\n" + "EXAMPLE_ABOVE_MS 1.044142002936e+02 4.99194 4.99194 6.13567 6.13567 2 1\n", + "EXAMPLE_ABOVE_MS 1.044572277695e+02 4.99192 4.99194 7.51803 6.13567 2 2\n", + "EXAMPLE_ABOVE_MS 1.044654032097e+02 4.99192 4.99192 7.81395 7.51803 2 2\n", + "EXAMPLE_ABOVE_MS 1.045084306856e+02 4.99191 4.99192 9.57443 7.81395 2 2\n" ] } ], @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 7, "id": "30142286-34ce-433e-82c8-565e2160ff5b", "metadata": {}, "outputs": [ @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 8, "id": "6f0edc65-a788-4706-a0c5-2ace030765ec", "metadata": {}, "outputs": [ @@ -344,8 +344,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "SINGLE_STAR_LIFETIME 10 27.7358\n", - "EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.446 13 5\n" + "SINGLE_STAR_LIFETIME 10 28.4838\n", + "EXAMPLE_LOG_CO 2.848380621869e+01 1.33469 9.1865 1.72498e-05 724.338 13 5\n" ] } ], @@ -395,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "id": "8f58fdf9-3e76-4c18-a1c5-eed0980d4133", "metadata": {}, "outputs": [ @@ -403,8 +403,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_MASSLOSS 9.878236827680e+00 1.61349 8.38063 20 13 1\n", - "EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4.92267 6.74037 0 0\n" + "EXAMPLE_MASSLOSS 1.050651207308e+01 1.59452 9.34213 20 13 1\n", + "EXAMPLE_SN 1.050651207308e+01 1.59452 9.34213 20 12 13 5 1 6.55458 4.71662 6.55458\n" ] } ], @@ -424,58 +424,27 @@ "{\n", " if (stardata->model.time < stardata->model.max_evolution_time)\n", " {\n", - " if(stardata->pre_events_stardata != NULL)\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", - "\n", - " stardata->star[0].mass, //2\n", - " stardata->pre_events_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", + " \"%g %g %g %d \" // 2-5\n", + " \"%d %d %g %g \" // 6-9\n", + " \"%g %g\\\\n\", // 10-13\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->pre_events_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->pre_events_stardata->star[0].core_mass[ID_core(stardata->pre_events_stardata->star[0].stellar_type)], // 9\n", - "\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", - " else\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", + " // \n", + " stardata->model.time, // 1\n", "\n", - " stardata->star[0].mass, //2\n", - " stardata->previous_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " stardata->star[0].mass, //2\n", + " stardata->previous_stardata->star[0].mass, //3\n", + " stardata->common.zero_age.mass[0], //4\n", + " stardata->star[0].SN_type, //5\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->previous_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", + " stardata->star[0].stellar_type, //6\n", + " stardata->previous_stardata->star[0].stellar_type, //7\n", + " stardata->model.probability, //8\n", + " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", "\n", - " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->previous_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", + " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", + " stardata->previous_stardata->star[0].core_mass[CORE_He] // 11\n", + " );\n", " };\n", " /* Kill the simulation to save time */\n", " stardata->model.max_evolution_time = stardata->model.time - stardata->model.dtm;\n", @@ -491,6 +460,14 @@ "# print (abridged) output\n", "print(\"\\n\".join(output.splitlines()[-2:]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "484297c0-accb-4efc-a9c8-dbd2f32b89a6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries.ipynb b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries.ipynb new file mode 100644 index 000000000..fb64dbcc9 --- /dev/null +++ b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries.ipynb @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": {}, + "source": [ + "# Zero-age stellar luminosity function in binaries\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c. \n", + "\n", + "Before you go through this notebook, you should look at notebook_luminosity_function.ipynb which is for the - conceptually more simple - single stars.\n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " )\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 1.0 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up the binary grid in \"cubic\" M1 - M2=q*M1 - log10 period space\n", + "\n", + "population = Population()\n", + "\n", + "# resolution on each side of the cube, with more stars for the primary mass\n", + "nres = 10\n", + "resolution = {\"M_1\": 2*nres,\n", + " \"q\": nres,\n", + " \"per\": nres}\n", + "\n", + "massrange = [0.07,100]\n", + "logperrange = [0.15, 5.5]\n", + "\n", + "population.add_grid_variable(\n", + " name=\"lnm1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{}\".format(resolution[\"M_1\"]),\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min=massrange[0],max=massrange[1],res=resolution[\"M_1\"]),\n", + " precode=\"M_1=math.exp(lnm1)\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnm1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")\n", + "\n", + "# Mass ratio\n", + "population.add_grid_variable(\n", + " name=\"q\",\n", + " longname=\"Mass ratio\",\n", + " valuerange=[\"0.1/M_1\", 1],\n", + " resolution=\"{}\".format(resolution['q']),\n", + " spacingfunc=\"const({}/M_1, 1, {})\".format(massrange[0],resolution['q']),\n", + " probdist=\"flatsections(q, [{{'min': {}/M_1, 'max': 1.0, 'height': 1}}])\".format(massrange[0]),\n", + " dphasevol=\"dq\",\n", + " precode=\"M_2 = q * M_1\",\n", + " parameter_name=\"M_2\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + " )\n", + "\n", + "# Orbital period\n", + "population.add_grid_variable(\n", + " name=\"log10per\", # in days\n", + " longname=\"log10(Orbital_Period)\",\n", + " valuerange=[0.15, 5.5],\n", + " resolution=\"{}\".format(resolution[\"per\"]),\n", + " spacingfunc=\"const({}, {}, {})\".format(logperrange[0],logperrange[1],resolution[\"per\"]),\n", + " precode=\"\"\"orbital_period = 10.0 ** log10per\n", + "sep = calc_sep_from_period(M_1, M_2, orbital_period)\n", + "sep_min = calc_sep_from_period(M_1, M_2, 10**{})\n", + "sep_max = calc_sep_from_period(M_1, M_2, 10**{})\"\"\".format(logperrange[0],logperrange[1]),\n", + " probdist=\"sana12(M_1, M_2, sep, orbital_period, sep_min, sep_max, math.log10(10**{}), math.log10(10**{}), {})\".format(logperrange[0],logperrange[1],-0.55),\n", + " parameter_name=\"orbital_period\",\n", + " dphasevol=\"dlog10per\",\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The \n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STARn\n", + "#\n", + "# where:\n", + "#\n", + "# n = PRIMARY = 0 is star 0 (primary star)\n", + "# n = SECONDARY = 1 is star 1 (secondary star)\n", + "# n = UNRESOLVED = 2 is the unresolved system (both stars added)\n", + "\n", + "PRIMARY = 0\n", + "SECONDARY = 1\n", + "UNRESOLVED = 2\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "// select ZAMS\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->model.time == 0)\n", + "{\n", + " // loop over the stars individually (equivalent to a resolved binary) \n", + " Foreach_star(star)\n", + " {\n", + " // select main-sequence stars\n", + " if(star->stellar_type <= MAIN_SEQUENCE)\n", + " {\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " star->starnum,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " star->mass, // 3\n", + " star->luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + " }\n", + " \n", + " // unresolved MS-MS binary\n", + " if(stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->star[1].stellar_type <= MAIN_SEQUENCE) \n", + " {\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " 2,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0] + stardata->common.zero_age.mass[1], // 2\n", + " stardata->star[0].mass + stardata->star[1].mass, // 3\n", + " stardata->star[0].luminosity + stardata->star[1].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + "}\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "import re\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " \n", + " # check if we match a ZERO_AGE_MAIN_SEQUENCE_STAR\n", + " match = re.search('ZERO_AGE_MAIN_SEQUENCE_STAR(\\d)',line) \n", + " if match:\n", + " nstar = match.group(1) \n", + " #print(\"matched star\",nstar)\n", + "\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + "\n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][int(nstar)][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: amt_cores=4 to grid_options\n", + "Running the population now, this may take a little while...\n", + "Creating and loading custom logging functionality\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "Grid has handled 2000 stars\n", + "with a total probability of 0.6495098935846658\n", + "Total starcount for this run will be: 2000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:14:08,077 DEBUG Process-2] --- Setting up processor: process-0[2021-09-10 15:14:08,080 DEBUG Process-3] --- Setting up processor: process-1[2021-09-10 15:14:08,086 DEBUG MainProcess] --- setting up the system_queue_filler now\n", + "\n", + "[2021-09-10 15:14:08,084 DEBUG Process-4] --- Setting up processor: process-2\n", + "\n", + "[2021-09-10 15:14:08,117 DEBUG Process-5] --- Setting up processor: process-3" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 started at 2021-09-10T15:14:08.119437.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>Process 0 started at 2021-09-10T15:14:08.126435.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>\n", + "Process 2 started at 2021-09-10T15:14:08.138353.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Process 3 started at 2021-09-10T15:14:08.186492.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "624/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB625/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.04e-03 ETF=15:14:23 mem:800.5MB\n", + "626/2000 31.3% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB\n", + "\n", + "713/2000 35.6% complete 15:14:17 ETA= 1.3m tpr=6.00e-02 ETF=15:15:34 mem:547.8MB\n", + "728/2000 36.4% complete 15:14:22 ETA= 7.1m tpr=3.37e-01 ETF=15:21:30 mem:548.1MB\n", + "743/2000 37.1% complete 15:14:27 ETA= 7.0m tpr=3.34e-01 ETF=15:21:26 mem:549.5MB\n", + "759/2000 38.0% complete 15:14:33 ETA= 7.7m tpr=3.73e-01 ETF=15:22:16 mem:550.5MB\n", + "774/2000 38.7% complete 15:14:38 ETA= 6.9m tpr=3.35e-01 ETF=15:21:29 mem:551.1MB\n", + "787/2000 39.4% complete 15:14:43 ETA= 7.8m tpr=3.88e-01 ETF=15:22:33 mem:551.1MB\n", + "799/2000 40.0% complete 15:14:48 ETA= 8.5m tpr=4.24e-01 ETF=15:23:17 mem:552.5MB\n", + "812/2000 40.6% complete 15:14:54 ETA= 8.4m tpr=4.23e-01 ETF=15:23:16 mem:554.8MB\n", + "830/2000 41.5% complete 15:14:59 ETA= 5.5m tpr=2.80e-01 ETF=15:20:26 mem:555.2MB\n", + "847/2000 42.4% complete 15:15:05 ETA= 6.8m tpr=3.52e-01 ETF=15:21:50 mem:555.2MB\n", + "864/2000 43.2% complete 15:15:10 ETA= 6.2m tpr=3.28e-01 ETF=15:21:23 mem:557.0MB\n", + "876/2000 43.8% complete 15:15:15 ETA= 8.2m tpr=4.38e-01 ETF=15:23:27 mem:559.7MB\n", + "887/2000 44.4% complete 15:15:21 ETA= 9.2m tpr=4.95e-01 ETF=15:24:32 mem:560.5MB\n", + "898/2000 44.9% complete 15:15:26 ETA= 9.2m tpr=4.99e-01 ETF=15:24:37 mem:560.5MB\n", + "908/2000 45.4% complete 15:15:32 ETA= 9.5m tpr=5.23e-01 ETF=15:25:03 mem:560.5MB\n", + "919/2000 46.0% complete 15:15:37 ETA= 8.3m tpr=4.60e-01 ETF=15:23:54 mem:560.9MB\n", + "934/2000 46.7% complete 15:15:42 ETA= 6.4m tpr=3.60e-01 ETF=15:22:06 mem:561.7MB\n", + "947/2000 47.4% complete 15:15:47 ETA= 7.2m tpr=4.08e-01 ETF=15:22:57 mem:561.7MB\n", + "956/2000 47.8% complete 15:15:53 ETA= 11.1m tpr=6.39e-01 ETF=15:27:01 mem:561.7MB\n", + "963/2000 48.1% complete 15:15:58 ETA= 12.6m tpr=7.30e-01 ETF=15:28:35 mem:561.7MB\n", + "969/2000 48.5% complete 15:16:04 ETA= 15.2m tpr=8.85e-01 ETF=15:31:16 mem:561.9MB\n", + "979/2000 49.0% complete 15:16:11 ETA= 11.9m tpr=7.01e-01 ETF=15:28:06 mem:562.0MB\n", + "988/2000 49.4% complete 15:16:16 ETA= 9.7m tpr=5.76e-01 ETF=15:25:59 mem:562.0MB\n", + "995/2000 49.8% complete 15:16:21 ETA= 12.3m tpr=7.37e-01 ETF=15:28:42 mem:562.2MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:16:25,175 DEBUG MainProcess] --- Signaling stop to processes\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1003/2000 50.1% complete 15:16:26 ETA= 11.2m tpr=6.76e-01 ETF=15:27:40 mem:563.0MB\n", + "1015/2000 50.8% complete 15:16:32 ETA= 7.6m tpr=4.65e-01 ETF=15:24:10 mem:563.0MB\n", + "1025/2000 51.2% complete 15:16:37 ETA= 8.1m tpr=5.01e-01 ETF=15:24:45 mem:563.0MB\n", + "1033/2000 51.6% complete 15:16:42 ETA= 10.7m tpr=6.65e-01 ETF=15:27:26 mem:563.0MB\n", + "1040/2000 52.0% complete 15:16:47 ETA= 12.1m tpr=7.55e-01 ETF=15:28:52 mem:563.5MB\n", + "1048/2000 52.4% complete 15:16:53 ETA= 11.8m tpr=7.45e-01 ETF=15:28:42 mem:563.5MB\n", + "1057/2000 52.9% complete 15:16:59 ETA= 9.1m tpr=5.78e-01 ETF=15:26:03 mem:563.6MB\n", + "1062/2000 53.1% complete 15:17:04 ETA= 15.7m tpr=1.01e+00 ETF=15:32:47 mem:564.4MB\n", + "1069/2000 53.5% complete 15:17:09 ETA= 12.4m tpr=7.97e-01 ETF=15:29:31 mem:564.9MB\n", + "1077/2000 53.9% complete 15:17:15 ETA= 11.5m tpr=7.46e-01 ETF=15:28:44 mem:565.0MB\n", + "1085/2000 54.2% complete 15:17:20 ETA= 10.0m tpr=6.55e-01 ETF=15:27:20 mem:565.0MB\n", + "1091/2000 54.5% complete 15:17:26 ETA= 13.8m tpr=9.10e-01 ETF=15:31:13 mem:565.9MB\n", + "1099/2000 55.0% complete 15:17:32 ETA= 12.1m tpr=8.05e-01 ETF=15:29:37 mem:566.5MB\n", + "1114/2000 55.7% complete 15:17:37 ETA= 5.0m tpr=3.35e-01 ETF=15:22:34 mem:566.5MB\n", + "1126/2000 56.3% complete 15:17:43 ETA= 6.8m tpr=4.64e-01 ETF=15:24:29 mem:566.5MB\n", + "1134/2000 56.7% complete 15:17:48 ETA= 9.2m tpr=6.37e-01 ETF=15:27:00 mem:566.6MB\n", + "1139/2000 57.0% complete 15:17:54 ETA= 16.3m tpr=1.14e+00 ETF=15:34:13 mem:567.4MB\n", + "1148/2000 57.4% complete 15:17:59 ETA= 8.8m tpr=6.20e-01 ETF=15:26:47 mem:567.4MB\n", + "1156/2000 57.8% complete 15:18:05 ETA= 9.3m tpr=6.60e-01 ETF=15:27:22 mem:567.5MB\n", + "1162/2000 58.1% complete 15:18:11 ETA= 14.3m tpr=1.02e+00 ETF=15:32:28 mem:567.6MB\n", + "1168/2000 58.4% complete 15:18:17 ETA= 15.2m tpr=1.09e+00 ETF=15:33:27 mem:568.6MB\n", + "1177/2000 58.9% complete 15:18:23 ETA= 8.8m tpr=6.45e-01 ETF=15:27:14 mem:568.6MB\n", + "1181/2000 59.0% complete 15:18:28 ETA= 17.8m tpr=1.30e+00 ETF=15:36:16 mem:568.7MB\n", + "1187/2000 59.4% complete 15:18:34 ETA= 12.1m tpr=8.93e-01 ETF=15:30:40 mem:568.7MB\n", + "1194/2000 59.7% complete 15:18:39 ETA= 9.8m tpr=7.29e-01 ETF=15:28:26 mem:568.8MB\n", + "1202/2000 60.1% complete 15:18:44 ETA= 9.5m tpr=7.12e-01 ETF=15:28:12 mem:568.8MB\n", + "1219/2000 61.0% complete 15:18:51 ETA= 5.3m tpr=4.07e-01 ETF=15:24:09 mem:569.7MB\n", + "1228/2000 61.4% complete 15:18:57 ETA= 7.4m tpr=5.76e-01 ETF=15:26:21 mem:569.7MB\n", + "1234/2000 61.7% complete 15:19:02 ETA= 11.8m tpr=9.22e-01 ETF=15:30:48 mem:571.7MB1235/2000 61.8% complete 15:19:02 ETA= 10.1m tpr=7.92e-01 ETF=15:29:08 mem:571.7MB\n", + "\n", + "1243/2000 62.1% complete 15:19:07 ETA= 7.3m tpr=5.79e-01 ETF=15:26:26 mem:573.4MB\n", + "1251/2000 62.5% complete 15:19:13 ETA= 8.3m tpr=6.68e-01 ETF=15:27:33 mem:575.4MB\n", + "1260/2000 63.0% complete 15:19:19 ETA= 8.2m tpr=6.65e-01 ETF=15:27:31 mem:575.4MB\n", + "1268/2000 63.4% complete 15:19:24 ETA= 7.8m tpr=6.41e-01 ETF=15:27:13 mem:576.8MB\n", + "1276/2000 63.8% complete 15:19:29 ETA= 7.6m tpr=6.30e-01 ETF=15:27:05 mem:577.0MB\n", + "1282/2000 64.1% complete 15:19:34 ETA= 10.1m tpr=8.44e-01 ETF=15:29:40 mem:578.0MB\n", + "1289/2000 64.5% complete 15:19:40 ETA= 10.8m tpr=9.08e-01 ETF=15:30:26 mem:578.0MB\n", + "1295/2000 64.8% complete 15:19:46 ETA= 10.5m tpr=8.95e-01 ETF=15:30:16 mem:578.1MB\n", + "1309/2000 65.5% complete 15:19:51 ETA= 4.3m tpr=3.70e-01 ETF=15:24:06 mem:578.1MB\n", + "1323/2000 66.2% complete 15:19:58 ETA= 6.1m tpr=5.45e-01 ETF=15:26:07 mem:579.2MB\n", + "1332/2000 66.6% complete 15:20:03 ETA= 6.2m tpr=5.58e-01 ETF=15:26:16 mem:579.3MB\n", + "1338/2000 66.9% complete 15:20:09 ETA= 10.1m tpr=9.11e-01 ETF=15:30:12 mem:579.3MB\n", + "1346/2000 67.3% complete 15:20:18 ETA= 12.5m tpr=1.14e+00 ETF=15:32:46 mem:581.5MB\n", + "1355/2000 67.8% complete 15:20:25 ETA= 8.5m tpr=7.90e-01 ETF=15:28:54 mem:581.6MB\n", + "1359/2000 68.0% complete 15:20:30 ETA= 13.9m tpr=1.30e+00 ETF=15:34:26 mem:581.6MB\n", + "1366/2000 68.3% complete 15:20:38 ETA= 11.7m tpr=1.10e+00 ETF=15:32:18 mem:581.7MB\n", + "1376/2000 68.8% complete 15:20:44 ETA= 6.1m tpr=5.89e-01 ETF=15:26:51 mem:581.7MB\n", + "1384/2000 69.2% complete 15:20:49 ETA= 6.9m tpr=6.76e-01 ETF=15:27:46 mem:581.7MB\n", + "1393/2000 69.7% complete 15:20:55 ETA= 6.2m tpr=6.13e-01 ETF=15:27:07 mem:581.8MB1394/2000 69.7% complete 15:20:55 ETA= 5.6m tpr=5.52e-01 ETF=15:26:29 mem:581.8MB\n", + "\n", + "1423/2000 71.2% complete 15:21:00 ETA= 1.6m tpr=1.69e-01 ETF=15:22:37 mem:581.9MB\n", + "1435/2000 71.8% complete 15:21:07 ETA= 5.6m tpr=5.92e-01 ETF=15:26:42 mem:582.3MB\n", + "1443/2000 72.2% complete 15:21:12 ETA= 6.1m tpr=6.54e-01 ETF=15:27:17 mem:582.5MB\n", + "1445/2000 72.2% complete 15:21:18 ETA= 28.2m tpr=3.05e+00 ETF=15:49:28 mem:582.6MB\n", + "1448/2000 72.4% complete 15:21:25 ETA= 20.0m tpr=2.18e+00 ETF=15:41:27 mem:582.6MB\n", + "1454/2000 72.7% complete 15:21:31 ETA= 8.6m tpr=9.49e-01 ETF=15:30:09 mem:583.0MB\n", + "1455/2000 72.8% complete 15:21:37 ETA= 54.9m tpr=6.05e+00 ETF=16:16:32 mem:583.0MB\n", + "1459/2000 73.0% complete 15:21:43 ETA= 13.5m tpr=1.50e+00 ETF=15:35:12 mem:583.0MB\n", + "1465/2000 73.2% complete 15:21:48 ETA= 8.6m tpr=9.65e-01 ETF=15:30:25 mem:583.0MB\n", + "1474/2000 73.7% complete 15:21:54 ETA= 5.6m tpr=6.38e-01 ETF=15:27:30 mem:583.0MB\n", + "1482/2000 74.1% complete 15:21:59 ETA= 5.4m tpr=6.30e-01 ETF=15:27:26 mem:583.0MB\n", + "1485/2000 74.2% complete 15:22:04 ETA= 14.8m tpr=1.73e+00 ETF=15:36:54 mem:583.5MB\n", + "1487/2000 74.3% complete 15:22:10 ETA= 24.9m tpr=2.91e+00 ETF=15:47:02 mem:583.5MB\n", + "1496/2000 74.8% complete 15:22:16 ETA= 5.0m tpr=5.91e-01 ETF=15:27:13 mem:583.7MB\n", + "1509/2000 75.5% complete 15:22:21 ETA= 3.6m tpr=4.40e-01 ETF=15:25:57 mem:583.9MB\n", + "1523/2000 76.2% complete 15:22:27 ETA= 3.0m tpr=3.80e-01 ETF=15:25:28 mem:583.9MB\n", + "1531/2000 76.5% complete 15:22:33 ETA= 5.9m tpr=7.60e-01 ETF=15:28:29 mem:583.9MB\n", + "1537/2000 76.8% complete 15:22:38 ETA= 6.7m tpr=8.71e-01 ETF=15:29:21 mem:583.9MB\n", + "1545/2000 77.2% complete 15:22:44 ETA= 5.4m tpr=7.14e-01 ETF=15:28:08 mem:584.0MB\n", + "1555/2000 77.8% complete 15:22:49 ETA= 4.1m tpr=5.52e-01 ETF=15:26:55 mem:584.2MB\n", + "1564/2000 78.2% complete 15:22:54 ETA= 4.2m tpr=5.78e-01 ETF=15:27:06 mem:584.2MB\n", + "1574/2000 78.7% complete 15:23:00 ETA= 4.4m tpr=6.16e-01 ETF=15:27:23 mem:584.4MB\n", + "1584/2000 79.2% complete 15:23:07 ETA= 4.4m tpr=6.28e-01 ETF=15:27:28 mem:584.8MB\n", + "1594/2000 79.7% complete 15:23:12 ETA= 3.8m tpr=5.66e-01 ETF=15:27:02 mem:584.9MB\n", + "1607/2000 80.3% complete 15:23:17 ETA= 2.5m tpr=3.86e-01 ETF=15:25:49 mem:585.0MB\n", + "1618/2000 80.9% complete 15:23:24 ETA= 3.8m tpr=5.97e-01 ETF=15:27:12 mem:585.4MB\n", + "1628/2000 81.4% complete 15:23:29 ETA= 3.3m tpr=5.28e-01 ETF=15:26:46 mem:585.5MB\n", + "1635/2000 81.8% complete 15:23:34 ETA= 4.4m tpr=7.30e-01 ETF=15:28:01 mem:585.9MB\n", + "1645/2000 82.2% complete 15:23:40 ETA= 3.4m tpr=5.81e-01 ETF=15:27:06 mem:585.9MB\n", + "1655/2000 82.8% complete 15:23:47 ETA= 4.0m tpr=7.02e-01 ETF=15:27:49 mem:586.0MB1656/2000 82.8% complete 15:23:47 ETA= 3.7m tpr=6.39e-01 ETF=15:27:27 mem:586.0MB\n", + "\n", + "1664/2000 83.2% complete 15:23:54 ETA= 4.5m tpr=8.01e-01 ETF=15:28:23 mem:586.1MB\n", + "1674/2000 83.7% complete 15:24:02 ETA= 4.5m tpr=8.27e-01 ETF=15:28:31 mem:586.2MB\n", + "1684/2000 84.2% complete 15:24:07 ETA= 2.9m tpr=5.55e-01 ETF=15:27:03 mem:586.2MB\n", + "1691/2000 84.5% complete 15:24:13 ETA= 4.2m tpr=8.21e-01 ETF=15:28:27 mem:586.5MB\n", + "1699/2000 85.0% complete 15:24:19 ETA= 3.4m tpr=6.75e-01 ETF=15:27:42 mem:586.5MB\n", + "1713/2000 85.7% complete 15:24:24 ETA= 1.9m tpr=4.07e-01 ETF=15:26:21 mem:586.6MB\n", + "1725/2000 86.2% complete 15:24:31 ETA= 2.6m tpr=5.57e-01 ETF=15:27:04 mem:586.7MB\n", + "1735/2000 86.8% complete 15:24:38 ETA= 3.0m tpr=6.76e-01 ETF=15:27:37 mem:586.7MB\n", + "1745/2000 87.2% complete 15:24:44 ETA= 2.7m tpr=6.40e-01 ETF=15:27:27 mem:586.9MB\n", + "1755/2000 87.8% complete 15:24:51 ETA= 2.8m tpr=6.88e-01 ETF=15:27:40 mem:586.9MB\n", + "1763/2000 88.2% complete 15:24:56 ETA= 2.6m tpr=6.59e-01 ETF=15:27:32 mem:586.9MB\n", + "1767/2000 88.3% complete 15:25:02 ETA= 5.3m tpr=1.36e+00 ETF=15:30:18 mem:586.9MB\n", + "1776/2000 88.8% complete 15:25:09 ETA= 2.9m tpr=7.71e-01 ETF=15:28:01 mem:586.9MB\n", + "1785/2000 89.2% complete 15:25:14 ETA= 2.1m tpr=5.90e-01 ETF=15:27:21 mem:586.9MB\n", + "1793/2000 89.7% complete 15:25:19 ETA= 2.2m tpr=6.29e-01 ETF=15:27:29 mem:587.1MB\n", + "1801/2000 90.0% complete 15:25:24 ETA= 2.2m tpr=6.59e-01 ETF=15:27:35 mem:587.1MB\n", + "1812/2000 90.6% complete 15:25:29 ETA= 1.5m tpr=4.68e-01 ETF=15:26:57 mem:587.1MB\n", + "1822/2000 91.1% complete 15:25:35 ETA= 1.6m tpr=5.54e-01 ETF=15:27:14 mem:587.4MB\n", + "1830/2000 91.5% complete 15:25:41 ETA= 2.1m tpr=7.49e-01 ETF=15:27:48 mem:587.4MB\n", + "1839/2000 92.0% complete 15:25:47 ETA= 1.7m tpr=6.21e-01 ETF=15:27:27 mem:587.4MB\n", + "1847/2000 92.3% complete 15:25:52 ETA= 1.8m tpr=7.10e-01 ETF=15:27:41 mem:587.4MB\n", + "1855/2000 92.8% complete 15:25:59 ETA= 2.0m tpr=8.17e-01 ETF=15:27:57 mem:587.6MB\n", + "1864/2000 93.2% complete 15:26:05 ETA= 1.5m tpr=6.79e-01 ETF=15:27:37 mem:587.8MB\n", + "1873/2000 93.7% complete 15:26:10 ETA= 1.3m tpr=6.07e-01 ETF=15:27:27 mem:588.0MB\n", + "1884/2000 94.2% complete 15:26:16 ETA= 57.0s tpr=4.91e-01 ETF=15:27:13 mem:588.1MB\n", + "1895/2000 94.8% complete 15:26:21 ETA= 48.7s tpr=4.63e-01 ETF=15:27:09 mem:588.8MB\n", + "1907/2000 95.3% complete 15:26:27 ETA= 45.6s tpr=4.91e-01 ETF=15:27:12 mem:588.9MB\n", + "1916/2000 95.8% complete 15:26:33 ETA= 57.5s tpr=6.84e-01 ETF=15:27:30 mem:589.1MB\n", + "1926/2000 96.3% complete 15:26:39 ETA= 46.5s tpr=6.28e-01 ETF=15:27:26 mem:589.1MB\n", + "1936/2000 96.8% complete 15:26:46 ETA= 42.0s tpr=6.57e-01 ETF=15:27:28 mem:589.1MB\n", + "1946/2000 97.3% complete 15:26:53 ETA= 40.1s tpr=7.42e-01 ETF=15:27:33 mem:589.2MB\n", + "1956/2000 97.8% complete 15:26:59 ETA= 25.1s tpr=5.70e-01 ETF=15:27:24 mem:589.2MB\n", + "1966/2000 98.3% complete 15:27:04 ETA= 19.1s tpr=5.62e-01 ETF=15:27:24 mem:589.5MB\n", + "1976/2000 98.8% complete 15:27:10 ETA= 14.4s tpr=6.01e-01 ETF=15:27:25 mem:589.5MB\n", + "1987/2000 99.3% complete 15:27:16 ETA= 6.4s tpr=4.92e-01 ETF=15:27:22 mem:589.5MB\n", + "1998/2000 99.9% complete 15:27:21 ETA= 1.0s tpr=4.85e-01 ETF=15:27:22 mem:589.6MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,382 DEBUG Process-5] --- Process-3 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 3 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.117391, done at 2021-09-10T15:27:22.400722 (total: 794.283331s of which 792.6935975551605s interfacing with binary_c).\n", + "\tRan 499 systems with a total probability of 0.17005450973840136.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,435 DEBUG Process-5] --- Process-3 is finished.\n", + "[2021-09-10 15:27:22,480 DEBUG Process-3] --- Process-1 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.080367, done at 2021-09-10T15:27:22.505288 (total: 794.424921s of which 793.1943278312683s interfacing with binary_c).\n", + "\tRan 474 systems with a total probability of 0.15740832333567983.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,531 DEBUG Process-3] --- Process-1 is finished.\n", + "[2021-09-10 15:27:22,846 DEBUG Process-2] --- Process-0 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 0 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.077117, done at 2021-09-10T15:27:22.851971 (total: 794.774854s of which 793.4976091384888s interfacing with binary_c).\n", + "\tRan 507 systems with a total probability of 0.16018641159091498.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,872 DEBUG Process-2] --- Process-0 is finished.\n", + "[2021-09-10 15:27:22,976 DEBUG Process-4] --- Process-2 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 2 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.084369, done at 2021-09-10T15:27:22.981706 (total: 794.897337s of which 793.4600214958191s interfacing with binary_c).\n", + "\tRan 520 systems with a total probability of 0.1618606489196724.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,986 DEBUG Process-4] --- Process-2 is finished.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Population-0fa295ee5c76444bace8fd0ee17a3e11 finished! The total probability was: 0.6495098935846686. It took a total of 795.1383104324341s to run 2000 systems on 4 cores\n", + "There were no errors found in this run.\n", + "Done population run!\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=1,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=4,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "print(\"Running the population now, this may take a little while...\")\n", + "analytics = population.evolve() \n", + "print(\"Done population run!\")\n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '0fa295ee5c76444bace8fd0ee17a3e11', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.6495098935846686, 'total_count': 2000, 'start_timestamp': 1631283248.057525, 'end_timestamp': 1631284043.1958354, 'total_mass_run': 41112.220964392276, 'total_probability_weighted_mass_run': 0.6452116023479681, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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p9///vdq2bKlJKlFixbavn274VSIBLNnz1aPHj1Uq1YtJSQkaMiQIZoyZYrpWIggWVlZuuWWW+TxeOR2u9WkSRNt27bNdCxEmIKCAj3xxBO66qqrTEdBBPrkk080fPhw1a5dW263W0888YQ6dOhgOhYiSDAYVCgUUllZmQKBgAKBgLxer+lYMYMB0//YvHmz6tatqwceeEBnnXWWbrjhBrndbtOxEGFmzJih8vJyDR061HQURCCPx6Ozzz5bkhQKhTR+/HgNHDjQcCpEgl27dikrK6vycnZ2tnbu3GkwESJNs2bN1LFjR0nShg0b9NFHH6l///5mQyHi3HnnnbrxxhuVkpJiOgoi0MaNGxUMBnX55ZfrrLPO0muvvabU1FTTsRBBkpKS9Pvf/17Dhg1Tv379lJubq86dO5uOFTNcpgOY8vHHH+vBBx884rqGDRtq+fLluv7663X77bfrrbfe0i233KJXXnnFUErY2U89hxo3bqzi4mK99NJLZkIhohztOfTSSy/J5/PplltuUSAQ0JVXXmkoISJJOBz+0XWWZRlIgki3Zs0aXXnllbr55pvVqFEj03EQQd566y3VqVNHPXv21Lvvvms6DiJQMBjU/Pnz9corryghIUHXXHONJk6cqHPPPdd0NESIlStX6p133tGnn36q5ORk/elPf9K//vUv/fa3vzUdLSZY4Z/6jTRGbdq0Seecc44WLFgg6UB/s0ePHlq8eLHhZIgUb731lv75z38qMTFR0oEfcC1bttSrr76qpKQkw+kQKUpKSnT11VerVq1aeuyxx+TxeExHQgSYOHGi5s+fr/vvv1+S9I9//EPhcFjXXXed4WSIJAsWLNANN9yg2267TWeccYbpOIgwv/nNb7R79245nU7t379fpaWlGjlypG677TbT0RAh/va3v6m4uFjjxo2TJL366qtas2aN7r77brPBEDFeeOEF7d27VzfffLMk6bPPPtNrr72m5557znCy2EBF7n80aNBAOTk5lRvJffrpp2rTpo3hVIgk5513nqZPn65JkyZp0qRJkg6cYsBwCSfiz3/+sxo2bKgnn3yS4RKOW69evTRnzhzl5+errKxM06ZNU79+/UzHQgTZvn27rr32Wj322GMMl/CLvPjii/rggw80adIk3XDDDTrttNMYLuGEnHrqqZo1a5YKCwsVDAb15Zdf8noMJ6Rly5aaPXu2SktLFQ6HNXPmTLVr1850rJgRsxW5oxk/frzuuusuPfroo0pKStJDDz1kOhKAGLJ8+XLNmDFDTZs21ciRIyUd2Evn+eefNxsMtpeTk6Mbb7xRF198sfx+v0aPHq327dubjoUI8q9//UsVFRVH/O4zduxYnX/++QZTAYglHTp00G9/+1tdcMEF8vv96t27t0aNGmU6FiJInz59tHz5cp177rlyu91q166drrjiCtOxYgYVOQAAAAAAAJwUKnIAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASWHABAAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAEPFOO+00zZ4923QMAACAmMWACQAAoIrl5+erRYsW2rlzp+koAAAANYIBEwAAQBV47LHH9OWXX0qSVq5cqfT0dOXk5BhOdcANN9yg1atXV17esmWLOnXq9Ivuq6SkRL/97W9VXl5eVfEAAEAUYMAEAACiyrp163TRRRepa9euOuOMMzRjxozKzy1btkwjR45Up06ddMMNN+gPf/iDnnjiiZN+zEWLFmnt2rXq27evJGnFihVq2bLlSd9vVfD5fNq4caOaN29eJfeXmJioM888U08++WSV3B8AAIgODJgAAEDU8Pv9uuqqq9S7d2/Nnj1b48aN05/+9CetX79ePp9P1113nc455xzNmzdPZ555pqZPn14lj/vUU09pzJgxlZftNGCaPXu2evbsWaX3OWzYME2ePFl79uyp0vsFAACRiwETAACIGosXL1ZpaamuuOIKeTwe9ezZU6eeeqo+/PBDLV68WIFAQBdffLHcbrcGDx6sdu3aVX5tUVGRRo8erU6dOh1RJ3v00Ud1wQUX6M9//rP8fv+PHrOwsFALFixQ7969K69buXKlWrVq9aPbvvHGG7rooosq/7Rv315Lliyp/PzYsWM1fvx4SQdqbC1atNDXX38t6cBKpG7dumnChAmSpOLiYl111VW66KKLNGbMGH3++ec/+T2ZMWOGBg4ceCLfxmPyer3q3LnzUR8TAADEHpfpAAAAAFVl165dql27thyOw++h1a1bVzt37tSuXbuUk5Mjy7IqP1enTp3Kj+Pi4vTcc8/pkUceqbxu5cqV2rlzp1577TU988wzmjp1qs4888wjHnPjxo3KysqSx+ORJFVUVOj7779X69atf5RvzJgxlSudZs6cqYkTJ6p9+/aSpO3btysnJ0fz5s2rvH3btm31ySefqEePHpozZ44aNmxY+blJkyapb9++uvDCCxUOh1VUVPSjxwuFQlq0aJHuvvvu4/r+HbJz5069/PLLCgQCCofDatWqlc4555wjbtOgQQN9//33J3S/AAAgerGCCQAARI3s7Gzt2LFDoVCo8rpDg5usrCzt3LlT4XD4iM8d4na7lZ6efsT9LVy4UH369JEk9e3bVwsXLvzRYzocDgWDwcrLq1evlsvlUl5e3lFz5ufn68knn9Q999xTed3UqVM1YsQINW7cWOvWrZMk5ebmatu2bQqHw/rkk080ePDgytt7vV4tWrRIe/bskWVZSklJ+dHjLF68WG3btpXT6Txqlh8KhUJ6//33deONN+rWW2/VbbfdpiZNmuizzz474nbBYPCE7hcAAEQ3BkwAACBqtG/fXnFxcXrhhRfk9/s1d+5czZw5U8OHD1fHjh3ldDo1YcIEBQIBTZ8+Xd99993P3l9hYaGSkpIkScnJydq/f/+PblO/fn3l5+eroqJC0oFVT02aNFEgEFBFRYUqKirk8/mO+Jq7775bv//9748YaM2aNUv9+vXTmWeeqSlTplRe36lTJ33zzTfKz89XZmZm5fVnn3228vLydPnll2vMmDFav379j7JNnz5dp59++nF85w5bsmSJRo4cKZfLpY8//lhbt25V+/btVVZWdsTttmzZ8rNDNAAAEFsYMAEAgKjh8Xj07LPP6osvvlCPHj10zz336JFHHlGTJk3k8Xj01FNP6e2331a3bt30/vvva8CAAZXVtp+SnJys4uJiSQf2aEpNTf3RbVJSUtSlS5fKvZJWrFihZcuWqX379pV/hg8fXnn79957T8nJyTrttNMqr9uxY4fWrFmjq6++Ws8888wRexsNHjxYDz74oE455ZQjHtftduuaa67RpEmTdMMNN+ipp576UbbZs2dXrsD6odLSUnXq1OmIP6tWrZLT6axcAfbss89q/vz5knTEaiWfz6dvv/32iH8HAAAQ29iDCQAARLyZM2dWftysWbPKjbB/qF27dpo0aVLl5fPOO0+nnnrqUe+3c+fOevHFFzVy5EjNmjVLnTt3/snbXXvttXr22WfVv39/3Xnnnbrzzjt/8nbbt2/XSy+99KN8U6ZM0a233qqhQ4dKOrDC6dCqp0aNGqlLly4aOnSoZs+eXfk1W7durdz7KSMj44jq3yETJ078yRz16tXTqlWrfvJzfr9fL7/8si655JLK79V33313xIDpgw8+0IgRI36ylgcAAGITAyYAABAz5s2bp7y8PKWlpWny5MlatWqV+vbtW/n53/3ud1qxYoW+//57jRkzRueee64yMjJ0wQUXqE6dOrrssst+8n47d+6svLw8ffHFF+rXr99RH/+f//ynCgsLdfXVV1ded80112jatGn6xz/+UXld9+7d9fHHH1deHjdu3I/ua/Xq1brxxhvl9XoVDoePOtQ6UW63W8OGDdPjjz9euZKpWbNmGj16tKQDp9d98MEHlafdAQAASJIV/qm3uwAAAKLQG2+8oSeffFJlZWWqV6+e/vjHP2rAgAGmYwEAAEQ8BkwAAAAAAAA4KWzyDQAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAAAAAAJwUBkwAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASfl/6hNZaplFmREAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "titles = { 0 : \"Primary\",\n", + " 1 : \"Secondary\",\n", + " 2 : \"Unresolved\" }\n", + "\n", + "# choose to plot the \n", + "# PRIMARY, SECONDARY or UNRESOLVED\n", + "nstar = UNRESOLVED\n", + "\n", + "plots = {}\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "for n in range(0,3):\n", + " pad_output_distribution(population.grid_results['luminosity distribution'][n],\n", + " binwidth['luminosity'])\n", + " plots[titles[n] + ' ZAMS luminosity distribution'] = population.grid_results['luminosity distribution'][n]\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict(plots)\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7541ebf-fe9a-4fb0-a88e-bb318d06f9eb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries_20_1.png b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_binaries_20_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1782b3a11abd6e0f188902b49f69eb32319f1b GIT binary patch literal 57125 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 z�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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single.ipynb b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single.ipynb new file mode 100644 index 000000000..fb971b34a --- /dev/null +++ b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single.ipynb @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": { + "tags": [] + }, + "source": [ + "# Example use case: Zero-age stellar luminosity function\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of single stars using binary_c. \n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from binarycpython.utils.functions import temp_dir\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_luminosity\")\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_luminosity to grid_options\n", + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 0.5 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Mass\n", + "population = Population()\n", + "population.set(\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "population.add_grid_variable(\n", + " name=\"M_1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{res}\".format(res = resolution[\"M_1\"]),\n", + " spacingfunc=\"const({min}, {max}, {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"{probtot}/({max} - {min})\".format(probtot = total_probability, min = massrange[0], max = massrange[1]), # dprob/dm1 : all stars are equally likely so this is 1.0 / (Mmax - Mmin)\n", + " dphasevol=\"dM_1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STAR\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->model.time == 0)\n", + "{\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR %30.12e %g %g %g %g\\\\n\",\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " stardata->star[0].mass, // 3\n", + " stardata->star[0].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + "};\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + " \n", + " # Check the header and act accordingly\n", + " if linedata['header'] == \"ZERO_AGE_MAIN_SEQUENCE_STAR\":\n", + " \n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 1.0000000000000004\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-08f8230453084e4ca6a2391d45ce658b finished! The total probability was: 1.0000000000000002. It took a total of 1.5262682437896729s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.025), (3.75, 0.05), (4.25, 0.05), (0.25, 0.025), (3.25, 0.025), (5.25, 0.2), (4.75, 0.1), (5.75, 0.39999999999999997), (6.25, 0.125)]))])\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=0,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=2,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '08f8230453084e4ca6a2391d45ce658b', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 1.0000000000000002, 'total_count': 40, 'start_timestamp': 1631124829.303065, 'end_timestamp': 1631124830.8293333, 'total_mass_run': 2001.4, 'total_probability_weighted_mass_run': 50.035000000000004, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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n9eyZcs0atQovf3225o8eXLr4WwXExkZqZqaGkmfnZOpW7duF9wmKipKI0aMaD030sGDB7V//34NHjy49a+ZM2e23v7NN99UZGSkpk6d2nrZmTNnlJeXpwceeEC/+93vzjuX0YwZM/Tzn/9co0ePPu9xAwMD9c1vflNvvfWWHn74YT3//PMXtG3cuLH1lVf/qq6uTsOGDTvvr8OHD8vhcLS+8uuFF17Q9u3bJem8Vyk1NTVp165d5/0ZAACAf+OcSwAAwKutXr269e/T09NbT3r9r6699lq99dZbrR/feeedmjJlyiXvd/jw4XrxxRd16623av369Ro+fPhFb/fggw/qhRde0KRJk/TDH/5QP/zhDy96u9OnT+uvf/3rBX0ffPCBvv/97+uGG26Q9Nkrmz5/tVO/fv00YsQI3XDDDdq4cWPr55w8ebL1XE+xsbHnHe73ueXLl1+0IykpSYcPH77odc3Nzfrb3/6mL33pS61fq3379p03Lr3zzju6+eabL3ooHgAA8E+MSwAAwC9s3bpVycnJio6O1ooVK3T48GFNmDCh9fqvf/3rOnjwoI4ePaq5c+fq9ttvV2xsrBYsWKAePXroq1/96kXvd/jw4UpOTta6des0ceLESz7+73//e1VVVemBBx5oveyb3/ymPvroI/3P//xP62VZWVl6//33Wz9etGjRBfeVm5urRx55RMHBwbIs65KD1pUKDAzUjTfeqF/96letr2BKT0/XnDlzJH32LnXvvPNO67vaAQAASJLNutj/6gIAAPAxr776qp599lnV19crKSlJjz76qCZPnmw6CwAAwOsxLgEAAAAAAKDdOKE3AAAAAAAA2o1xCQAAAAAAAO3GuAQAAAAAAIB2Y1wCAAAAAABAuzEuAQAAAAAAoN0YlwAAAAAAANBujEsAAAAAAABoN8YlAAAAAAAAtNv/D2ltZ660RybEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "# this saves a lot of typing! \n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "7d7b275e-be92-4d59-b44d-ef6f24023cc3", + "metadata": {}, + "source": [ + "Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 10<sup>5.8</sup> L<sub>☉</sub>! Clearly, this is not very realistic... let's see what went wrong." + ] + }, + { + "cell_type": "markdown", + "id": "44586e42-b7cb-4a55-be0a-330b98b20de4", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "markdown", + "id": "e32c3bbf-390f-45da-ad9c-cc3e7c9449dc", + "metadata": {}, + "source": [ + "## ZAMS Luminosity distribution with the initial mass function\n", + "\n", + "In the previous example, all the stars in our grid had an equal weighting. This is very unlikely to be true in reality: indeed, we know that low mass stars are far more likely than high mass stars. So we now include an initial mass function as a three-part power law based on Kroupa (2001). Kroupa's distribution is a three-part power law: we have a function that does this for us (it's very common to use power laws in astrophysics).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "1f37d2c0-1108-4ab9-a309-20b1e6b6e3fd", + "metadata": {}, + "outputs": [], + "source": [ + "# Update the probability distribution to use the three-part power law IMF \n", + "population.update_grid_variable(\n", + " name=\"M_1\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6f4463e8-1935-45f2-8c5f-e7b215f8dc47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.2182216189410787\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-92de7c9221c54206ab4dd10e58e09a34 finished! The total probability was: 0.21822161894107872. It took a total of 1.5900418758392334s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.0164166), (3.25, 0.00515685), (0.25, 0.189097), (3.75, 0.0037453900000000004), (4.25, 0.0014346559999999999), (5.25, 0.0007493004), (4.75, 0.001171479), (5.75, 0.00039801020000000003), (6.25, 5.2369339999999996e-05)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cfe45a9e-1121-43b6-b6b6-4de6f8946a18", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABcnUlEQVR4nO3dd3SUZf7+8Wtm0gvpjQRIo0PovSNNiiDiBnXBsrqCsq6sK66CirroWlZ/lu/ay6oooIIIItIEhID03ksCBJIACYTQ0ub3R3TcCBjIk+SZSd6vczgn82QycyW5HTPX3M9nLHa73S4AAAAAAACgnKxmBwAAAAAAAIBro2ACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ9zMDlCZcnLOqrjYbnaMaickxE8nT+aZHQMuivUDo1hDMIo1BKNYQzCKNQSjWEMwqrxryGq1KCjI97Kfq9YFU3GxnYKpkvBzhRGsHxjFGoJRrCEYxRqCUawhGMUaglEVvYY4RQ4AAAAAAACGUDABAAAAAADAkGp9ihwAAAAAAFWpqKhQOTnHVViYX2n3kZVlVXFxcaXdPqq/staQm5uHgoLCZLNdfW1EwQQAAAAAQAXJyTkuLy8f+fpGymKxVMp9uLlZVVhIwYTy+701ZLfbdfZsrnJyjis0NOqqb5NT5AAAAAAAqCCFhfny9a1VaeUSUNksFot8fWtd8y48CiYAAAAAACoQ5RJcXXnWMAUTAAAAAAAADKFgAgAAAACgGtq8eaPuuOPWUv+6d2+v77+f57jOV19NV8+eHXXy5IlSX9u1a1v97W/jSh07deqUevTooPfff1uSlJGRoQkTxuv220dq1Kg/6PHH/6GcnOxLcrz//tuOrzHivffe0ooVywzfzi++/vpLff31l5KkZ599ShkZx8p1O+PG/VkbNqzTrl079K9/PXPF6x09mq7nnnu6zCxdu7a9pvtfsWK5pk379JLbqWoM+QYAAAAAoBpq0aKVPvroM8fl6dOnav78b9Wz53WOY99+O0ddu/bQ3Lmzdfvtfyr19YcPH1Zubq5q1aolSVq6dLH8/Ws5Pv/ii89qwICB6tt3gCTpk08+1IsvPqdnn32xUr6fu+8eU6G3N2zYCMfHGzas05133mPo9ho1aqJ//KPJFT+fkXFM6elHysxyrXbv3lkht2MUBRMAAAAAANXc5s0b9fHHH+idd/4rT09PSdK+fXuVm3taEyZM1KRJEzRq1J2yWn890alr1+768celGjToBkklBVP37j0dn8/OPqGLFy84Lt900x+0c+eO383RtWtbrVixTpI0b94cbdy4XhMnTtaIEUPUu3dfpaSskM1m07333q9p0z7VkSOHdf/9D+q66/pqypTJatWqjVq1aqPHHvu74uMTtGfPbgUHh+iZZ/6lWrUCtHLlj3r33Tdltxerdu1oPfzwYwoODtEbb/w/rV37k2w2q7p27aG77vqzY1eVh4enTpw4rocf/qvuvnuMpk2bqrfe+kCS9N13c7V9+1b9/e+POr6H/Px8Pf/8M9q1a6ciI2vr9OlTkkpKqg8+eEdvvPGOpk37VN99962sVosaN26qCRMm6tVXX9LRo+n697+fV69e1+nNN19TUVGx4uMTFBVVW5L0pz/dK0l6/vkp2rlzuwICAvXoo08oMjJS48b9WXfd9We1bt1Wx44d1V/+cq9efPFVzZ49U5IUGRnl2IX1pz/de8WfxYgRQ3T99YO0enWKzp+/oEmTnlKjRo2vei1dCQUTAAAAAACVYOXWY1qxpXynXf0ei0Xq0jxKXZpf3VvI5+Rka/LkiXrkkccVHR3jOD5v3jfq3buPGjVqLJvNpp9+SlGnTl0dn+/du48+/vgDDRp0g06ePCG7XQoJCXV8/t57x+nppx/X+++/ozZt2qljx87q3btvub+v0NAwffrpDD377FP69NOP9Nprb2nr1s167bV/67rrSt/uvn179eijT6hBg0aaOPFhLVjwna67rp9efPFZvfnm+4qKqq3PPvtYL7/8gsaNe1CrV6fo009n6OLFi3r++X/q4sWLjtsaNeoOzZ79lV588VVFRkbp//7vNaWnH1F0dIy++26u7r239KmCX345XZI0deqXOnz4kG6//ZZSny8sLNSnn36kr7+eL6vVqpdffl7Hj2fpr3/9uz744B099NAj2rBhnQ4fPqQvv5wrPz+/S04hbNWqtR55ZKJmzvxCr776kp577qXL/szi4uI1dOhwSdKgQTc4bicnJ/uyP4t//vN5SVJAQIDeffdjffnlNH3yyQeaMsX4rjNmMAEAAAAAUE0VFxdr8uRJ6tOnf6ndR4WFhVqwYL769OkvSerdu69jJ8wvmjVL0qFDacrLy9PSpYvVq1fvUp/v2LGzZs2ap0cemaTAwCD95z+vaeLEh8udtWPHzpKkiIhItWzZWm5uboqMjNKZM2cuuW5QULAaNGgkSYqPT1Rubq527Niuxo2bOnYD3XDDcK1fv1ahoWHy9PTU2LF3acaMz3TPPWMdu7h+y2Kx6PrrB+n77+cpIyND2dnZatq0WanrbNq0Xr16lRRederUVfPmSaU+7+bmpmbNknT33aP14YfvavjwmxUWFn7JfdWpU09+fn6XHPf09FS/ftdLkvr3v14bN67/3Z/b5VzpZ/GLX37Wv/zsKgI7mAAAAAAAqATXssvoWri5WVVYWHxV1/3ww3dVWFige++9v9TxlSt/1JkzuXrssZJCqLCwUDk52crKylR4eISkkrKlS5duWrFimZYt+0FPPfWcZs6cIUnKzT2tjz56Tw888JA6duysjh0764477tbQof2Vk5OjoKCgK2ay2+2yWCwqLCwsddzd3d3xsc1m+93vy8PD45LbtNuLLzlWVFQkNzc3vfPOR9q0aYNWrVqpMWPu1Ouvv3PF2x44cIgeeugv8vDw0IABAy9zDUup+7pc1uee+7e2b9+q1atT9NBDD+iJJy4d/n2lkstq/fX27PaSwkoq+X384rc/u9+60s/iFx4enqU+VxHYwQQAAAAAQDW0du1qzZnztZ566jlHSfGLefO+0T33jNWXX87Rl1/O0ddff6fmzVtozpyvS12vd+++mjnzC7m5uZcqjXx9/bRixXJ9991cx7H09CMKDg5xDAW/nMDAQB08uF92u10rViyvmG/0Z02aNNOOHVt17NhRSdI338xU69ZttGfPLo0b92e1aNFK48Y9qNjYeB06lFbqa202m6OAiYyMUlhYuL7++isNGDDokvtp27a9Fi78XsXFxcrIOKatW7eU+nxOTo5uu22E4uMTdffdY9SuXQft379XNptbqZLnSs6fP+d4t7xvv52ttm3bS5ICAkp+dpL0449LL5u9rJ9FZWIHEwAAAAAA1dAnn3ykoqIi/f3vD5Q63r17T23YsE6PPvpkqeMjR/5R//73v3THHXc7jjVt2lwnT57QDTcMK3Vdm82ml156Va+//oree+8teXl5KTQ0TM8///Lv7j4aM2acJkwYr+DgECUltXQMyK4IwcEhevjhiXrssb+roKBQkZGR+sc/nlBoaKiaNUvS6NHJ8vLyUv36DdWxY+dS777WuXM3/f3vf9XLL7+u2rWj1adPPy1dukShoWGX3M/w4Tfr4MH9uu22EYqMjFJ8fEKpzwcFBWno0OG6557R8vT0UkREpAYOHKKCggLl5Z3RM888rkGDhl7x+/Dz89fy5Uv17rtvKSwsTI89VvJ7uu220ZoyZbK+/fYbdevW03H9li1ba8qUyQoODi7zZ1GZLPaK2gvlhE6ezFNxcbX99kwTFuav48cvPQcWuBqsHxjFGoJRrCEYxRqCUayh6i0jI02RkfUq9T6u5RQ5XLvCwkI988wT6t27j3r06F32F7igq1lDl1vLVqtFISGXzo2SOEUOAAAAAABAUsk8omHDrpfVai21Swhl4xQ5AAAAAAAAlQzSnjt3odkxXBI7mAAAAAAAAGAIBRMAAAAAABWoGo86Rg1RnjVMwQSXln7irM5fLDQ7BgAAAABIktzcPHT2bC4lE1yW3W7X2bO5cnPzuKavYwYTXNrj7/2kuKhaevz2tmZHAQAAAAAFBYUpJ+e48vJOVdp9WK1WFRfzLnIov7LWkJubh4KCwq7pNimY4PIOHss1OwIAAAAASJJsNjeFhkZV6n2Ehfnr+PEzlXofqN4qYw1xihwAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ5y+YDp8+LCGDx9udgwAAAAAAABcgVMXTLm5uZo2bZp8fX3NjgIAAAAAAIArcDM7wP+aPn265s6d67j88ssv6+GHH9a9995rYioAAAAAAAD8HqcqmJKTk5WcnGx2DAAAAAAAAFwDpz5FDgAAAAAAAM6vSgqmvLw8DR48WEeOHHEcmzNnjgYOHKi+fftq6tSpv/v1b7/9dmVHBAAAAAAAQDlV+ilymzdv1qRJk5Samuo4lpmZqVdeeUUzZ86Uh4eHRo4cqQ4dOigxMbFC7zskxK9Cbw+/CgvzNztCKc6WB7+P3xeMYg3BKNYQjGINwSjWEIxiDcGoil5DlV4wzZgxQ08++aQmTJjgOJaSkqKOHTsqMDBQktS/f3/Nnz9f48aNq9D7PnkyT8XF9gq9TZQswuPHz5gdoxRny4Mrc8b1A9fCGoJRrCEYxRqCUawhGMUaglHlXUNWq+WKm3kqvWCaMmXKJceysrIUFhbmuBweHq4tW7ZUdhQAAAAAAABUAlOGfNvtl+4qslgsJiQBAAAAAACAUaYUTBERETpx4oTjclZWlsLDw82IAgAAAAAAAINMKZg6d+6sVatWKTs7W+fPn9eCBQvUvXt3M6LAhV1uJxwAAAAAAKh6lT6D6XIiIiI0fvx4jR49WgUFBRoxYoSSkpLMiAIAAAAAAACDqqxgWrJkSanLQ4YM0ZAhQ6rq7gEAAAAAAFBJTDlFDgAAAAAAANUHBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2c0OAAAAAAAAJFEwAQAAAAAAwCAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTHBddrMDAAAAAAAAiYIJAAAAAAAABlEwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTHBZdtnNjgAAAAAAAETBBAAAAAAAAIMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2e1mJwAAAAAAABIFEwAAAAAAAAyiYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBJdlt5udAAAAAAAASBRMAAAAAAAAMIiCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFE1yY3ewAAAAAAABAFEwAAAAAAAAwiIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFggsuy281OAAAAAAAAJAomAAAAAAAAGETBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCS7LbnYAAAAAAAAgiYIJAAAAAAAABlEwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgguuymx0AAAAAAABIFEwAAAAAAAAwiIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFggsuyy252BAAAAAAAIAomAAAAAAAAGETBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCS7Lbjc7AQAAAAAAkCiYAAAAAAAAYBAFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAFBOF/ILNf6NFdqZlmN2FAAAAMBUFExwWXa72QkA1HRHjp/V6bx8zVy23+woAAAAgKkomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCia4MLvZAQAAAAAAgCiYAAAAAAAAYBAFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQSXZTc7AAAAAAAAkETBBAAAAAAAAIMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2e1mJwAAAAAAABIFEwAAAAAAAAxyMzvAlezdu1fvvPOO/P39FRoaqvvuu8/sSAAAAAAAALgMpy2YcnJy9Mgjjyg0NFT33HOP2XEAAAAAAABwBU5TME2fPl1z5851XH755ZcVGhqqd955R4MGDTIxGQAAAAAAAH6P0xRMycnJSk5Odly+ePGiJk+erOuuu07dunUzMRkAAAAAAAB+j9MO+X7jjTe0fft2zZ49WxMnTjQ7DgAAAAAAAK6g0ncw5eXlaeTIkXrrrbcUExMjSZozZ47efPNNFRQU6I477tBtt912ydc99NBDlR0NAIAKYTc7AAAAAGCySi2YNm/erEmTJik1NdVxLDMzU6+88opmzpwpDw8PjRw5Uh06dFBiYmKF339IiF+F3yZKhIX5mx1BnmfzHR87Qx5cPX5fMMpZ1tDJswWSJHc3m9NkwtXh9wWjWEMwijUEo1hDMKqi11ClFkwzZszQk08+qQkTJjiOpaSkqGPHjgoMDJQk9e/fX/Pnz9e4ceMq/P5PnsxTcTGvK1e0sDB/HT9+xuwYyjtf4PjYGfLg6jjL+oHrcqY1lHPqnCSpsLDIaTKhbM60huCaWEMwijUEo1hDMKq8a8hqtVxxM0+lFkxTpky55FhWVpbCwsIcl8PDw7Vly5bKjAEAAAAAAIBKVOVDvu32S3cUWSyWqo4BAAAAAACAClLlBVNERIROnDjhuJyVlaXw8PCqjgEAAAAAAIAKUuUFU+fOnbVq1SplZ2fr/PnzWrBggbp3717VMQAAAAAAAFBBKnUG0+VERERo/PjxGj16tAoKCjRixAglJSVVdQwAACoMbycBAACAmq5KCqYlS5aUujxkyBANGTKkKu4a1djl5nkBAAAAAICqV+WnyAEAUN3wVhUAAACo6SiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQBgkN3sAAAAAIDJKJjgsnhCBwAAAACAc6BgAgDAIIvZAQAAAACTUTABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAbxrpYAAACo6SiY4Lp4RgcAAAAAgFOgYAIAwCCL2QEAAAAAk1EwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgyDUXTAUFBZWRAwAAAAAAAC6qzIJp3bp1+s9//qP8/HzdeOONatu2rebNm1cV2YDfZTc7AAD8jMcjAAAA1HRlFkwvvviiWrZsqUWLFik0NFTffvutPvjgg6rIBgAAAAAAABdQZsFUVFSkzp07KyUlRX369FFMTIyKi4urIhsAAC7BYnYAAAAAwGRlFkzFxcXasmWLli5dqi5dumjPnj3MYQIAAAAAAICDW1lXGDt2rB566CGNGDFCMTEx6t27tyZOnFgV2QAAAAAAAOACyiyYsrKytHDhQsflhQsXymazVWooAAAAAAAAuI4yT5H7/PPPS12mXAIAAAAAAMD/KnMHU1xcnCZNmqS2bdvKx8fHcbxfv36VGgwAAFdhNzsAAAAAYLIyC6ZTp07p1KlTSktLcxyzWCwUTDCfnad0AMzFu8cBAAAAJcosmD755JOqyAEAgMuh5kZFsNvtslioKwEAgGsrs2BKTU3Vp59+qnPnzslut6u4uFhpaWmaNm1aVeQDAMDpUQ2gvHLP5evRt1cp2N9LTWKD1SQ2SA3qBMrbs8w/0QAAAJxKmX+9PPTQQ2rWrJk2btyoQYMG6YcfflDTpk2rIhsAAEC1lpuXr/MXi1Tka9fSTelauO6wbFaL4mvXchROcVG15GYr831ZAAAATFVmwXT27Fk99dRTmjJlirp3767Ro0frzjvvrIpsAAAANcLw7vFqkRiifUdOa0dajnakZuubFQc1e8VBeXnY1KhukBrHBqlJbLBqh/hwSh0AAHA6ZRZMgYGBkqR69epp7969SkpKUnFxcWXnAgAAqFHc3WxqHBusxrHBuqlHgvLOF2j3oRztSM3R9tRsbdp3QpIU4OehJvVKdjc1iQ1WkL+nyckBAACuomCqV6+epkyZohtvvFETJ07UuXPnlJ+fXxXZAAAAaiw/b3e1aRiuNg3DJUknTp137G7aeuCkVm3PkCTVDvVVk3olZVPDusxvAgAA5ijzL5DJkydr+fLlatKkiW6++WatXLlSzzzzTFVkA34X794EwFnweISqEBrore6B3ureoraK7XYdycrTjtSSwmn55qNatP6IrJZf5jeVFE7xtZnfBAAAqkaZBdPbb7+tBx98UJJ066236tZbb9U///lPtW7durKzAQAA4DKsFovqRvirboS/BnSoq4LCYu1PP60dadnakZqjOSmp+mZlqjw9bGpYJ9AxMDw61Jf5TQAAoFJcsWB67bXXlJubq3nz5ikvL89xvKCgQEuWLNGkSZOqJCAAAM6Op+swm7ubVY3qBalRvSAN7y6du1CgnWmnHIXTlv17JUkBvh6O3U2N6wUpuJaXyckBAEB1ccWCqUWLFtq6dausVqtj0Lck2Ww2vf7661WRDQAAoFqrrNMrfbzc1aZhmNo0DJMknTx9QTvSsrUzNUfbD2Zr1fZMSVJUiI9jYHjDukHy8WJ+EwAAKJ8r/hXRo0cP9ejRQ927d1dSUpLjeEFBgdzd3askHAAAAIwLCfBSt6Ta6pZUW3a7XUeOn9WO1JLdTT9uParFG0rmN8VF+TtOp0uIDmB+EwAAuGplvkyVn5+v//znP7r77ruVnJysAwcO6LnnntPAgQOrIh8AAEC1V5VjkSwWi+qE+6lOuJ/6t6+rwqKf5zf9PDB87qpUzUlJlYe7VQ3rBDlOqYsJY34TAAC4sjILphdffFF//etftWjRIoWGhur111/Xgw8+SMEEAABQDbjZrGpYt+QUuRu7x+vchULtPpRTUjilZWv6kpOSpFo+7iWzm2KD1DQ2mPlNAACglDILpqKiInXu3FmTJk1Snz59FBMTo+Li4qrIBgCAS6isOTqAGXy83NSqQZhaNSiZ35Sde0E703K0/edT6lbvKJnfFBHsoyY/l02N6gbKx4sRCgAA1GRlFkzFxcXasmWLli5dqjFjxmjPnj0qKCioimzA77LzjA6AyThZCDVBcC0vdWkepS7No2S325V+4qzjdLqUrRn6YUO6LBYpLqpWyel09YKVEB0gdzfmNwEAUJOUWTCNGTNGDz30kEaMGKGYmBj17t1bEydOrIpsAAA4NXpu1DQWi0UxYX6KCfNTv3Z1VFhUrANHcx0Dw+etOqS5KWnycLOqQZ1Ax8DwmHA/WZnfBABAtVZmwdSvXz/169fPcXnhwoWy2WyVGgoAAFfC02aUl93Ft+O62UqKpAZ1AjWsm3T+YqF2HzqlHanZ2p6arRk/7JMk+fu4q3G9IEfhFBrgbXJyAABQ0cosmH6LcgkAAACX4+3pppb1Q9WyfqgkKefMRcfuph1p2VqzM0uSFB7kraY/l02N6gXJl/lNAAC4vGsumAAAAFDRquc+uCB/z1Lzm46ePKcdqdnamZqjlO0Z+mFjyfym2Ej/n3c3BSsxupbc3XhBEwAAV3PFgmnhwoXq27ev8vPz5eHhUZWZAAAAUM1YLBZFh/oqOtRXfduWzG86eCzXMTB8/k+H9O2qkvlN9esEOgaG14lgfhMAAK7gigXTa6+9pr59+yo5OVmzZs2qykwAALgU156iA5jDzWZV/ZhA1Y8J1NCucTp/sVB7Dp/S9p93OH3xw35J++Xn7a7OzSJ1U48E3pkOAAAndsWCydfXV/3791dmZqaGDBlyyefnzJlTqcEAAHB27KkAKo63p5taJIaqRWLJ/KZTeRe1MzVHm/ef0IK1h7U//bTuu7G5gvw9TU4KAAAu54oF03vvvaedO3dq4sSJevzxx6syEwAALoGdS0DlCfTzVKdmkerULFJtG2bp/W936umP1ur+G5srMSbA7HgAAOA3rrjP2M/PT+3atdPbb7+tpk2bSpIKCwvVpEkTtW/fvsoCAgDg7NjJBFSuto3CNWl0G3l62PT8Zxu0dGO67HYqXgAAnEmZ7yJ35swZjRo1SqGhoSoqKlJmZqbeeusttW7duiryAQAAAIoO89Pjt7fVO9/s0Mff71ZqRq5u69uQuUwAADiJMgum559/Xi+99JI6duwoSVq1apX+9a9/acaMGZUeDgAAoCbgTdKujq+Xu/46IklfrziguSlpOnL8rO5nLhMAAE6hzJd88vLyHOWSJHXq1Ennz5+v1FAAAADA5VitFg3vnqD7b2ym9ONn9dRHa7Xn8CmzYwEAUOOVWTBZrValp6c7Lh85ckQ2m61SQwEAAAC/p03DkrlM3h42vfj5Rv2w4QhzmQAAMFGZp8jdf//9Sk5OVqdOnSRJK1eu1JNPPlnpwYCy8EckAGfBoxFgDsdcpjk79MmCPTqYcUaj+jWQuxsvhgIAUNXKLJj69Omj+Ph4rV69Wna7XWPGjFFCQkJVZAMAwKkxNgcwn4+Xux4YkaTZPx7UnJRUpR8/q/tvbKbgWl5mRwMAoEYps2CSpPj4eMXHx1d2FgAAXAo7lwDnYLVYdGP3eNWN8Nd73+7Q0x+t1X03NleDOoFmRwMAoMbgfV0BADCInUwoL872rlhtGoZp0ui28vZy14ufb9Ti9cxlAgCgqlAwAQAAmIySsuJEh/rq8dFt1SwuWFMX7tGH83apoLDI7FgAAFR7ZRZMEyZMqIocAAAAQIXw8XLTX0Yk6YYusVqx9Zj+NXWDsnMvmB0LAIBqrcyCadeuXWwtBgAAgEuxWiwa1i1e44Y317GT5/T0R2u1+1CO2bEAAKi2yhzyHRYWpkGDBqlFixby9fV1HJ80aVKlBgMAwFXwMgzgvFo3KJnL9MbMrXpp2iaNvK6+ereOlsXCiYkAAFSkMgumVq1aqVWrVlWRBQAAl8LTU8A11A711aTRbfXe3B2aunCPUjNyNbp/Q7m72cyOBgBAtVFmwTRu3DhduHBBaWlpql+/vvLz8+Xl5VUV2QAAcGrsXAJch4+Xm8bd1FzfrDiob1amKv34WY0b3lzBtfi7FgCAilDmDKbNmzerT58+uvfee5WVlaUePXpow4YNVZENAACXwE4mwDX8MpfpLzc1V0b2OT3FXCYAACpMmQXT888/r48++kiBgYGKjIzUCy+8oClTplRFNgAAAKDCtaofpsdvbytfL3e9+PkmLVx3mDe1AQDAoDILpgsXLigxMdFxuUePHioqKqrUUAAAADUK2+CqXFSIrx6/va2SEkL0+aK9ev/bncov4G9cAADKq8yCyc3NTadPn3a808aBAwcqPRQAAABQ2bw9S+YyDesap5RtGXpu6gadPH3B7FgAALikMgumsWPH6o9//KOOHTumv/3tb7rllls0duzYqsgGAAAAVCqrxaIbusbpgZuSlJVTMpdpVxpzmQAAuFZlvotcr169FB8fr5UrV6q4uFj33XdfqVPmALMwKgGAs+DhCHB9LeuHatLotnpj5la9NG2Tknsnqk/bGMcufgAA8PvK3MEkSYWFhSouLpabm5vc3d0rOxMAAC6Bp51A9RIV4qtJo9uqRWKIPl+8V+/NZS4TAABXq8yC6auvvtKoUaO0detWrV+/Xrfddpu+//77qsgGAIBTY+cSjLKzipyOt6eb7h/eXMO6xWn19gw9++l6nTh93uxYAAA4vTJPkfvoo4/09ddfKzw8XJJ09OhR3Xvvverfv3+lhwMAwBWwkwmoXqwWi27oEqe6Ef56d852Pf3ROo0d1kyN6wWZHQ0AAKdV5g4md3d3R7kkSbVr1+Y0OQAAgApkoaZ0Si0TQ/X47e3k7+Ouf0/bpAVrDsnOEEgAAC7rigXT9u3btX37djVs2FBPP/20du/erX379umFF15Q69atqzIjAAAAYIrIYB9NGt1WLeuHatqSfXp37g5dyC80OxYAAE7niqfI/eUvfyl1eenSpY6PLRaLJk2aVGmhAAAAAGfh7emm+25spm9Xpenr5Qf0yBsrNGZIE4UGepsdDQAAp3HFgmnJkiVVmQMAAJfFCTNA9We1WDSkc6zqhvvpvbk79PR/12ns0KZqHBtsdjQAAJxCmUO+jx8/rlmzZunUqVOljk+YMKGyMgFXhXfeAWA2puYANU+LxFC9/GAPPfXear00fZP+0CtR/drVkcXCIwIAoGYrc8j32LFjtWXLFtnt9lL/AAAAgJqodpifJo5qo9b1wzR9yT69O2eHLhYUmR0LAABTlbmDqaCgQG+88UZVZAEAwKXwcguM4jU71/W/c5lmLT+goyfO6v7hzRXGXCYAQA1V5g6mpk2bas+ePVWRBQAAl8SJMTCMReSSLBaLBneO1V9vbqETpy/o6Y/WantqttmxAAAwRZk7mFq3bq1hw4YpLCxMbm6/Xn3x4sWVGgwAAABwBUkJIXr8jrZ646utenn6Jt3cM1H92zOXCQBQs5RZML3xxht66aWXVLdu3arIAwAAALiciCAfTRzdRh98u1MzftintMwzuuP6RvJ0t5kdDQCAKlFmwRQQEKCBAwdWRRYAAADAZXl5uGnssGaatzpNM5eVzGUax1wmAEANUeYMpp49e+r555/Xxo0btX37dsc/wHQMRgXgJHg4AvALi8WiQZ1i9eAfWujkL3OZDjKXCQBQ/ZW5g2nOnDmSpO+//95xzGKxMIMJAFDjMV0FwJU0j/95LtPMrXp5xiaN6JmgAe3rMpcJAFBtlVkwLVmypCpyAADgcti5BOD3RAT5aOKoNvpg3i598cN+pWWc0Z3XN5anB3OZAADVT5kF04cffnjZ43feeWeFhwEAwBWxHwHAlXh5uGns0Kb6LtJfXy3dXzKX6aYkhTOXCQBQzZRZMO3Zs8fxcX5+vtavX68OHTpUaigAAICahJKyerNYLBrYsZ7qhvvp7W+265mP1ureoU3VLC7E7GgAAFSYMgum5557rtTl7OxsTZgwodICAQAAANVRs/gQPX57yVymV2Zs1ogeCRrQgblMAIDqocx3kfut4OBgpaenV0YWAAAAoFoLD/LRxFFt1bZhuL5Yul9vzd6ui/lFZscCAMCwa5rBZLfbtW3bNoWEsJ0X5mO4LgBnweMRgGvh6WHTmKFNFRvpry+X7dexk2c1bnhzhQf5mB0NAIByu6YZTJIUFRXFKXIAAIi5OQDKz2Kx6PqO9VQnwk9vz96uZ/67Tvfe0FTN4nkhFwDgmq55BhMAAAAqhp3tbzVes7gQPX5HO73xVclcpuE94jWwYz3mMgEAXM4VC6ZHH330il9ksVj07LPPVkogAABcBd0AgIoQHuitiaPa6MPvduqrZQeUlnFGdw1qLC+PMl8LBgDAaVzx/1r169e/5FhOTo7++9//Kjo6ulJDAQDgSthnAKPYrAJPD5vuvaGpYiNr6Yul+3Qs+5zGDW+uCOYyAQBcxBULprvuuqvU5ZSUFD3yyCMaMmSIJk2aVOnBAAAAgJrEYrFoQIe6qhPup7dmb9MzH63Tn29oqqQE5jIBAJyftawrFBYW6vnnn9ff/vY3TZw4UVOmTJG3t3dVZAMAAABqnKZxwXrijnYKCfDSq19s1tyUVNkZ2AUAcHK/e2J3Wlqaxo8fLx8fH82aNUtRUVFVlQsAAJfB0z4AFS0s0FuPjWqjj77bpZnLDygt84zuGthY3p7MZQIAOKcr7mD68ssvdfPNN6tv37769NNPKZfgdHhCB8BsjM0BUJk83W3685AmSu6dqA17jmvKJ+uVmX3O7FgAAFzWFV8CmTRpkqxWq9555x29++67juN2u10Wi0UbNmyokoAAAABATWWxWNS//S9zmbbr6f+u0703NFFSQqjZ0QAAKOWKBdPixYurMgcAAC6HnZQwys4qwlVqEhusJ25vqzdmbtWrX2zRsO7xGtypniy8BSEAwElcsWCKjo6uyhwAALgsnt7BOFYRyhYa6K1HR7XRf7/bpVnLD+hQxhndNYi5TAAA51Dmu8gBAAAAcA6e7jbdM6SJRvZO1Ma9J5jLBABwGrzcAQAAALgQi8Wifj/PZXpz9nZN/mitGsQEKjrUV9Fhvqod6qvaIb7y9LCZHRUAUINQMAEAAAAuqHFssJ64o61m/3hQh7LytDMtR4VFxZJKTroMCfD6uXTyU3RoSfEUFeIjD3eKJwBAxaNgguuyMxgVgHPg0QiAWUIDvPWnwU0kSUXFxTp+6oLSj+cp/cRZHT1xVuknzmrbwWwVFZc8UlksUligd6ndTtGhfooM9pG7G9MzAADlR8EEAEA5MZYZgDOxWa2KDPZRZLCP2jT89XhhUbEyc86XFE7H8xzF0+Z9J1X88wt2VotF4UG/LZ58FRHsIzcbxRMAoGwUTAAAAGZh+xuqgJvNWlIchfqqXaNwx/GCwmJlZp9T+s+F09ETZ3XkxFlt2HvcsVHcZrUoItjH8fW1fy6gwoO8ZbNSPAEAfkXBBABAOdENAHBl7m5WxYT7KSbcr9TxgsIiHTt57tfT7I6fVWpGrtbtynI87rnZLIoM9lF0mJ9jt1N0qK/CAr1ltbK/EwBqIgomAAAM4qkUjLKwiOBE3N1sqhvhr7oR/qWOXywo0rGTJYXTL6fZ7TtyWj/tyPyfr7UqKsTn191OoX6qHear0AAvWVnoAFCtUTABAAAAKJOnu02xkbUUG1mr1PHzFwt/3vGU5yifdh06pVXbfy2ePNytqh3y82l2Yb+ebhdSy0sWiicAqBYomAAAAACUm7enm+Jr11J87dLF07kLhTp68ufZTj8PF9+Wmq2V2zIc1/HysKl2qG+p0+xqh/oqyN+T4gkAXAwFEwAABjGLCQAu5ePlpsToACVGB5Q6nne+wHGK3dHjZ5V+Ik9b9p3Qii3HHNfx9nT7n9Psft31FODrQfEEAE6Kggkuiyd0AMzGUxwAuHZ+3u5qUCdQDeoEljqeey7/58Lp1xlPG/Yc1/LNRx3X8fX6uXgK8yv1rna1fDyq+LsAAPwWBRMAAIBJeLEE+FUtHw/VquehRvWCHMfsdrtyz+Yr/UTp4umnHZk6f7HQcT1/H/dSO55+eXc7P293M74VAKiRKJgAACgnygEAqFwWi0UBfp4K8PNUk9hgx3G73a5TeflKP5Hn2PWUfuKsUrZl6EJ+keN6Ab4eqh3qq4Z1AtWpWaTCAr3N+DYAoEagYAIAwCBOlYNRrCHg2lgsFgX5eyrI31PN4kIcx+12u7JzL/7Pbqc8HTl+VrNXHNTXKw6qQZ1AdWkWqbaNwuXtyVMhAKhIPKoCAAAAqBYsFotCArwUEuClpIRfi6eTpy9o1fYMrdx6TB9+t0tTF+1RmwZh6tw8So3rBslqpeYFAKMomAAAAABUayEBXhrcOVaDOtXT/qO5Stl6TD/tzNKq7ZkK8vdU52aR6tI8SpHBPmZHBQCXRcEEAAAAoEawWCxKjA5QYnSAbulTXxv3ntDKrRmatzpN365KU0LtWurcPErtG4fL14sB4QBwLZy2YNq1a5feffddeXt76/rrr1eXLl3MjgRnw3RdAE6ChyMAcD3ubja1bxyh9o0jdCrvolZvz9TKrcf0yfe79fmivWpVP1RdmkeqaVywbFar2XEBwOk5bcF07tw5PfLII3Jzc9OLL75IwQQAcDpM7ACA6iHQz1MDOtRV//Z1lJZ5Riu3ZuinHZlauytLAb4e6tQ0Up2bRyomzM/sqADgtJymYJo+fbrmzp3ruPzyyy8rLy9Pjz76qEaPHm1iMgAAgErC9jfAqVgsFsVG1lJsZC0l907U5n0nlbLtmBauO6z5aw6pXoS/OjePVMcmEfL38TA7LgA4FacpmJKTk5WcnOy4vHXrVsXHx2vatGm66667NHDgQBPTAQBwKboBVBi2wwFOx81mVZuGYWrTMEy55/L1045MpWzN0OeL9mrGkn1KSghRl+ZRSkoIkZuNU+gAwGkKpt+6cOGCJk6cqODgYPXo0cPsOAAAXBHdAABUb7V8PNS3bR31bVtHR7LytHLbMa3anqmNe0/Iz9tdHZpEqGvzKNWN8JPFwv8VANRMlV4w5eXlaeTIkXrrrbcUExMjSZozZ47efPNNFRQU6I477tBtt912yde1a9dO7dq1q+x4AAAAAHDVYsL9lNy7vkb0TND2g9lasTVDyzala/H6I4oO81WXZlHq2DRCgX6eZkcFgCpVqQXT5s2bNWnSJKWmpjqOZWZm6pVXXtHMmTPl4eGhkSNHqkOHDkpMTKzw+w8JYQhfZQkL8zc7ggr+Z8+AM+TB1eP3BaOcZQ2dPFsgSXJztzlNJlwdZ/l9ncgrWUMBAT5OkwlXh98XJCkyIkDXdYxT3rl8/bgpXYvXHdaMH/bpy6X71LpRhHq3raMOTSPl4W675GtZQzCKNQSjKnoNVWrBNGPGDD355JOaMGGC41hKSoo6duyowMBASVL//v01f/58jRs3rsLv/+TJPBUXMyGjooWF+ev48TNmx9DJ7HOOj50hD66Os6wfuC5nWkM5p0oehwoKipwmE8rmTGvo1M9r6PTpc06TCWVzpjUE59G2fqja1g/VsZNnlbItQynbMrRuZ6Z8PN3UvnG4ujSPUnztWrJYLKwhGMYaglHlXUNWq+WKm3kqtWCaMmXKJceysrIUFhbmuBweHq4tW7ZUZgwAACoFUzYAAL8VFeKrm3ok6MZu8dp5KEcrtx5TyrYMLd10VBHBPurSLFKDu1f82RsAYLYqH/Jtt1+6o4hBeAAAoCay816EQLVltVrUNDZYTWODdb5fodbtytLKbRmaufyAZv14QI3qBqlr8yi1bhAmT49LT6EDAFdT5QVTRESE1q1b57iclZWl8PDwqo4BAAAAAFXC29NN3VrUVrcWtZV16rw2H8jWwp/S9O7cHfL0sKldw3B1aR6p+nUCZeXFdwAuqsoLps6dO+v1119Xdna2vL29tWDBAj3zzDNVHQMAAMPYe4KKYuGES6DGCA/01q39G+m6VrW19/AprdyWobW7srRi6zGFBnipc7NIdW4epfBAb7OjAsA1MWUH0/jx4zV69GgVFBRoxIgRSkpKquoYAABUGKoBAMC1slosalg3SA3rBum2Pg20Yc9xrdx2THNWpuqblalqEBOgLs2j1LZRuLw9q/xpGwBcsyp5pFqyZEmpy0OGDNGQIUOq4q4BAAAAwKl5etjUqVmkOjWLVHbuBaVsy9DKbRn68Ltdmrpwj1o3DFOXZlFqXC9IVisvawBwTlThAAAAAOAkgmt5aXDnWA3qVE8HjuZq5bYMrdmRqdXbMxXk71lyCl2zSEWF+JodFQBKoWCCy7rcOxICgBl4NAIAVDSLxaKE6AAlRAfolusStXHvCaVsy9C81Wn6dlWa4mvXUpdmkWrfJEK+Xu5mxwUACiYAAMqLkxRgFK+VALga7m42tW8cofaNI3Qq76JWb8/Uym3H9MmCPfp88V61rB+mLs0i1Sw+WDar1ey4AGooCiYAAAAAcBGBfp4a0KGu+revo0OZeVq59ZhW78jUul1ZquXroU5NI9SlWZRiwv3MjgqghqFgAgCgnNh8ggrDdjgA18hisahepL/qRfrrD70TtWX/Sa3cekyL1h3R92sOq26En7o0i1KHphGq5eNhdlwANQAFEwAABtENAADM5GazqnWDMLVuEKYz5/L1045Mrdyaoc8X79WMH/YpKSFEnZtFqUViiNxsnEIHoHJQMAEAAABANeHv46E+beuoT9s6OnI8TylbM7Rqe4Y27j0hP293dWgcoS5JkaoX4S+LhZdIAFQcCiYAAAAAqIZiwvz0h96JuqlnvLYfzNbKrRlatvmoFm84ouhQX3VuHqlOTSMV6OdpdlQA1QAFEwAABjGLCQDgzGxWq5ISQpWUEKqzFwq0dmeWVm49pi9+2K8vl+5X8/gQDe4Uq8SYALOjAnBhFEwAAJQTJxYAAFyNr5e7eraKVs9W0Tp28qxStmXox81H9eyn69UiIUTDeySoDu9AB6AcmPAGAAAAADVQVIivbuqRoOfHdNbw7vHac+S0Jn+wRu98s11ZOefMjgfAxbCDCQAAwGTshgNgJk8PmwZ3jlWv1tH6bvUhLVp3WGt3ZalbUpSGdIlTkD8zmgCUjYIJAIByYvYSAKA68fVy14ieCerTNkZzUlK1fNNRrdyWoevaxGhgx3ry83Y3OyIAJ0bBBACAQew+AQBUJ4F+nhrVr6H6t6+r2T8e1Pc/HdKyTeka0L6u+rarIy8PnkYCuBSPDAAAAACAS4QHeuueIU10fce6mrX8gGb9eFCL1x/RoM6x6tkyWu5ujPQF8CsKJgAADOJUOQBAdRYT5qe/3JSk/emn9dWy/fp80V4tWHNIN3SNU+dmkbJZKZoA8C5ycGF2ntEBMBmnxgEAapKE6AA9fEsrPTSypfx9PPThvF164v01WrcrS3b+OAdqPHYwAQAAmIQnZABcjcViUdPYYDW5PUgb9hzXzOUH9J+vt6lepL9u6hGvprHBslh4CQaoiSiYAAAAAADXxGKxqE3DcLWqH6aUbRmaveKAXp6+WY3qBuqmHglKiA4wOyKAKkbBBABAObH3BBWF1/oBuCqr1aKuSVHq0CRCyzala25KqqZ8sl4tE0M1vHu8YsL9zI4IoIpQMAEAYBDlAACgpnN3s6pP2zrqmhSlheuOaP5PaXrygzXq0DRCw7rFKzzQ2+yIACoZBRMAAAAAoEJ4ebhpSOdY9WoVre9+StPidUe0dmeWureorSFdYhXo52l2RACVhIIJAAAAAFCh/LzddXPPRPVpU0dzU1K1fPNRrdx6TNe1jdH1HerJz9vd7IgAKhgFE1wWs08AOAsejwAAuLwgf0+N6t9Q/dvX0dcrDmr+6kNauvGoBnSoq75tY+TlwVNSoLrgv2YAAMqJ2UsAAFyd8CAf/XlIUw3sUE8zlx/QrOUHtHjdYQ3uHKseLaPl7mY1OyIAgyiYAAAAAABVIibcTw+MSNK+9NOauWy/Plu0V9+vOaxh3eLUqWmkrFZevgFcFTUxAACA2Sw8oQJQsyRGB+jhW1rpb8kt5Ofjrve/3anH3/9J63dnyW7n5HPAFbGDCQCAcuLPXwAAys9isahZXIiaxgZr/e7jmrn8gP5v1jbFRflreI8ENY0NNjsigGtAwQQAgEHsPQEAoPwsFovaNgpXqwahStmWoW9WHNS/p21S43pBGt4jXgm1A8yOCOAqUDABAAAAAExns1rVLam2OjaJ1NKN6Zq7KlVTPl6vVvVDNbx7vKLD/MyOCOB3UDABAGAQp8oBAFBx3N2s6tuujromRWnRusOav+aQnnh/jTo2jdSwbnEKC/Q2OyKAy6Bgguti+B8Ak3FqHAAAlcfb001DusSpV+sYzVudpsXrj2jNzkz1aFlbQzrHKsDP0+yIAP4HBRMAAIBJeK0EAMrm5+2uP/RKVN+2dTRn5UEt23RUK7YcU5+2dXR9x7ry9XI3OyIAUTABAACYjt1wAFC2IH9PjR7QSP071NXsHw/qu9VpWroxXdd3rKs+berI08NmdkSgRrOaHQAAAFfF5hMAAKpeRJCP/nxDU02+q73qxwToq2UH9Mjbq7R4/REVFhWbHQ+osdjBBACAQew+AQCg6tUJ99Nfb26hvUdO6atlBzR14R59v+aQhnaNU6emkbJa+T80UJXYwQQAAAAAcFn1YwL1yK2tNP4PLeTj5ab3v92pJz9Yow17jsvOsDugyrCDCQAAAADg0iwWi5rHh6hpXLDW7z6umcsP6I2ZWxVfu5Zu6h6vxrHBZkcEqj0KJrgsXosA4Cx4PAIAwDlYLRa1axSu1g1CtXJrhmavOKgXp21Sk9gg3dQjQXFRtcyOCFRbFEwAAAAmoZwEgMphs1rVvUVtdWoaoR82pGvuqjQ98991at0gTDd2j1d0qK/ZEYFqh4IJAAAAAFAtubvZ1K99XXVrUVsL1x7W/DWHtHHvcXVuGqmhXeMUGuhtdkSg2qBgAgAAMJmFNzoCgErl7emmG7rGqVfraM1bnabF69O1ekemeraK1uDOsQrw9TA7IuDyKJgAACgvzm8CAMCl+Pt4KLl3ffVtW0dzUlL1w4Z0/bjlqPq2raPrO9SVj5e72REBl0XBBACAQWw+AQDAtQTX8tLtAxppQPu6mvXjAX27Kk1LN6br+o71dF2bGHm628yOCLgcCiYAAAAAQI0UEeyjMUObaWDHM5q5/IC+XLpfC9cd1g2dY9WtRW252axmRwRcBgUTXBenpgBwEjwcAQDg2upG+OvBm1toz+FTmrlsvz5ZsEfz1xzSsK7x6tAkQlYr+5WBslDHAgAAAAAgqUGdQD1yW2s9eHMLeXu46d25O/Tkh2u0L/202dEAp0fBBAAAYBY7+98AwNlYLBYlJYToiTvbaczQprpwsVD/mbVVF/ILzY4GODUKJgAAAAAAfsNqsah94wiNGdZMp/LyNScl1exIgFOjYAIAAAAA4AoSageoa/MoLVhzWMdOnjU7DuC0KJgAACgnO+O9AQCoEW7qmSAPd5s+X7RXdk5vBi6LggkAAIN4XxkAAKq3AF8PDesap20Hs7Vp7wmz4wBOiYIJAACDeB0TAIDqr3ebaEWH+erzxXuVX1BkdhzA6VAwwWXxhA4AAABAVbFZrbqtTwOdOH1B8386ZHYcwOlQMAEAAJiEF0sAwLU0qhek9o3D9e3qNJ04dd7sOIBToWACAAAwmcXCJC8AcBV/6JUoi0WavmSf2VEAp0LBBAAAAADAVQqu5aUhnWO1fs9xbTt40uw4gNOgYAIAoJx4l2IAAGqmfu3qKjzIW58t3KvComKz4wBOgYIJAACDOLkJAICaxd3Nqlv7NFBG9jktWnfE7DiAU6BgAgAAAADgGiUlhKhlYqhmrzyonDMXzY4DmI6CCS7LzrkpAJwEj0YAANRMI69LVFGRXV8sZeA3QMEEAABgEspJAHBt4UE+GtChrlZvz9Sew6fMjgOYioIJAAAAAIByGtSpnkJqeWrqwj0qLualA9RcFEwAAAAAAJSTp7tNyb3r63BWnpZuSjc7DmAaCiYAAAAAAAxo0zBMjesFaeayA8o9l292HMAUFEwAAAAAABhgsVh0a98GulhQpJnLDpgdBzAFBRMAAAZZzA4AAABMFx3qq+vaxOjHzUd18Fiu2XGAKkfBBACAQYzzBAAAkjS0a5z8fT1KBn7b+QsBNQsFEwAAAAAAFcDb001/6JWgA0dztXLrMbPjAFWKggkAAMAsvLgNANVOp6aRSowO0FdL9+vchQKz4wBVhoIJAADAZBYGeQFAtWGxWHRb3wY6c65AX684aHYcoMpQMAEAAAAAUIHqRfqrZ6toLVmfriPH88yOA1QJCiYAAMrJzvBOAABwBTd2j5e3p02fLdzD3wyoESiYAAAwiLObAADAb/l5u+umHgnadeiU1u7KMjsOUOkomAAAAAAAqATdW9RWvQh/TV+yTxfyC82OA1QqCia4LHaZAnAWPBwBAIDLsVpLBn7nnLmob1elmR0HqFQUTAAAACaxU08CQLWXGBOgLs0iNf+nQ8rMPmd2HKDSUDABAACYzMIkLwCo1kb0TJC7m1WfLdrLwG9UWxRMAAAAAABUogA/Tw3rGqetB05q876TZscBKgUFEwAAAAAAlax3mxjVDvXV54v3qKCwyOw4QIWjYAIAAAAAoJK52ay6rU99HT91QfN/OmR2HKDCUTABAGAQ03MAAMDVaBwbrLaNwvXtqjSdOH3e7DhAhaJgAgDAIEZ1AgCAq5XcK1GSNGPJPpOTABWLggkAAMAstJMAUOOEBHhpUOdYrdt9XNtTs82OA1QYCiYAAAAAAKrQgPZ1FB7orc8W7lFhUbHZcYAKQcEEAABgNgZ5AUCN4u5m08g+9XXs5DktXn/E7DhAhaBgAgAAAACgirVMDFVSQohmrzioU3kXzY4DGEbBBABAOdmZnwMAAAy4pU99FRYV64sf9psdBTCMggkAAIM4uwkAAJRHRJCP+revq1XbM7T3yCmz4wCGUDABAAAAAGCSwZ1iFeTvqakL9qi4mO3RcF0UTHBZdt7bGYCT4NEIAACUl6eHTcm9E3UoK0/LNh81Ow5QbhRMAAAAJqGcBABIUrtG4WpUN1Azl+1X3vkCs+MA5ULBBAAAYDLmeAFAzWaxWHRb3wY6f7FIM5cx8BuuiYIJAAAAAACTRYf56bo2MVq26ajSMs6YHQe4ZhRMAAAAAAA4gaFd4+Tv465PF+5WsZ0TqeFaKJgAACgn/uwDAAAVycfLTSN6Jmp/eq5WbcswOw5wTSiYAAAwiPk5AACgonRuHqmE2rX0xdL9Oneh0Ow4wFWjYILLYscoAGfBwxEAAKgoVotFt/VroDNn8/XNyoNmxwGuGgUTAACASXixBABwObGRtdS9ZW0tWndE6cfzzI4DXBUKJgAAALNxniUA4DeGd4+Xt6dNny3aKzuvSMAFUDABAAAAAOBk/H08NLx7vHam5Wjd7uNmxwHKRMEEAAAAAIAT6tEyWnXD/TR9yV5dzC8yOw7wuyiYAAAAAABwQlZrycDv7NyL+nZ1qtlxgN9FwQQAQHkxDwEAAFSy+jGB6tQ0QvN/OqTMnHNmxwGuiIIJAAAAAAAndnOvRNlsVk1btNfsKMAVUTABAACYhl1wAICyBfp5amiXOG3ef1Kb9p0wOw5wWRRMAAAAAAA4uT5tYxQV4qNpi/Yqv4CB33A+FEwAAAAms8hidgQAgJNzs1l1a58Gyjp1Xl8v2292HOASFEwAAAAAALiApnHBatMwTDMW71F27gWz4wClUDABAAAAAOAiknsnym6Xpi/ZZ3YUoBQKJgAAyonxzAAAoKqFBnjr5uvqa+2uLO1MzTY7DuBAwQQAgEFMzwEAAFVpeM9EhQZ4aeqivSosKjY7DiCJggkuzM7WAQBOgocjAABQlTzcbbqlT30dPXFWSzakmx0HkETBBAAAYBpeLAEAlFfLxFA1jw/R7BUHdDrvotlxAAomAAAAs1k4zxIAcI0sFotu6VNf+QXF+nLpfrPjABRMAAAAAAC4oshgH/VvX1crt2VoX/pps+OghqNgAgAAAADARQ3uXE9B/p6aumCPios59xrmoWACAAAAAMBFeXm46Q+9EpWWeUbLtxw1Ow5qMAomAADKidcIAQCAM2jfOFwN6wTqq6X7lXe+wOw4qKEomOCy7Dy1AwAAAABZLBbd1reBzl8s0qzlB8yOgxqKggkAAMAkvFQCAKgoMeF+6t06Wks3pSst44zZcVADUTABAAAAAFANDOsWJz9vd01duEd2Oy9joGpRMAEAAAAAUA34eLlrRI8E7Us/rVXbM8yOgxqGggkAAAAAgGqiS1KU4qJq6Ysf9uv8xUKz46AGoWACAAAAAKCasFos+mO/Bso9m69vVh40Ow5qEKcumAoLC/XHP/5RW7duNTsKAACXYrQBAABwQnFRtdStRZQWrTuioyfOmh0HNYRTF0xvvPGGIiMjzY4BAMDvspgdAAAA4DeG90iQp7tNny1i4DeqhpvZAX4xffp0zZ0713H5pptuUsuWLWWz2UxMBafGYyQAJ8HDEcqNxQMAqCS1fDx0Y/d4TV24R+t3H1fbRuFmR0I15zQFU3JyspKTkx2Xx44dq7CwMG3btk2pqan697//bWI6AAAAAABcS89WtbVs01FNX7JXzRNC5OnOBg5UHqc9Re7NN9/U008/rV69eumOO+4wOw4AAEClsXCeJQCgEtisVv2xXwOdzL2oeavSzI6Daq7SC6a8vDwNHjxYR44ccRybM2eOBg4cqL59+2rq1Km/+/V/+ctf1Lx588qOCQAAAABAtdOgTqA6NonQdz8dUtap82bHQTVWqafIbd68WZMmTVJqaqrjWGZmpl555RXNnDlTHh4eGjlypDp06KDExMQKv/+QEL8Kv02UCAvzNzuCTp4rcHzsDHlw9fh9wShnWUMB2SV/pLm72ZwmE66Os/y+ArJK3tknKNDXaTLh6vD7glGsIRh1LWtozIgWGvv8Ys368aAm3dWhElPBlVT041ClFkwzZszQk08+qQkTJjiOpaSkqGPHjgoMDJQk9e/fX/Pnz9e4ceMq/P5PnsxTcTHTMytaWJi/jh8/Y3YMnco55/jYGfLg6jjL+oHrcqY1dPp0ScFUUFjkNJlQNmdcQzmnzuq4F3MxXIUzrSG4JtYQjCrPGhrcKVZfLN2vxatTlZQQUknJ4CrK+zhktVquuJmnUk+RmzJlitq2bVvqWFZWlsLCwhyXw8PDlZmZWZkxAACoFHbeAgwAALiIvu3qKCLYR58v2qOCwmKz46AaqvIh33b7pX+MW5hsiXLgaR0AAAAAXB03m1W39a2vzJzzWrD2kNlxUA1VecEUERGhEydOOC5nZWUpPDy8qmMAAACYjl1wAICq1CwuRK3qh2pOSqqycy+YHQfVTJUXTJ07d9aqVauUnZ2t8+fPa8GCBerevXtVxwAAAHAaFrGbGwBQNUZeV192uzTjh31mR0E1U6lDvi8nIiJC48eP1+jRo1VQUKARI0YoKSmpqmMAAAAAAFDjhAV66/oOdfXNylT1bJmjRvWCzI6EaqJKCqYlS5aUujxkyBANGTKkKu4aAAAAAAD8j4Ed6yllW4amLtqjyXe2k81a5Sc3oRpiFQEAAAAAUIN4uNs08rr6Sj9+Vks2pJsdB9UEBRMAAOXFfGYAAOCiWtUPVdO4YH394wGdPptvdhxUAxRMAAAYxHhmAADgaiwWi27tU1/5BcX6aul+s+OgGqBgguti5wAAJ8HDEcqNxQMAMFFUiK/6taujFVuPaf/R02bHgYujYAIAAAAAoIYa3DlWAX4emrpgj4rtvPKB8qNgAgAAAACghvL2dFNyr0SlZpzRii3HzI4DF0bBBAAAAABADdahSYQaxAToy6X7lXe+wOw4cFEUTAAAAAAA1GAWi0W39m2gsxcK9PWPB8yOAxdFwQQAAAAAQA1XN8JfvVvF6IeN6TqUecbsOHBBFEwAAJQTYzABAEB1Mqx7nHy93DV14R7ZGfiNa0TBBJdl56kdAMDF8X8yAIAz8fVy14ieCdp75LRW78g0Ow5cDAUTAAAAAACQJHVNilJclL9m/LBP5y8Wmh0HLoSCCQAAwGQWi9kJAAAoYf154PfpvHzNSUk1Ow5cCAUTAAAAAABwSKgdoK5JUVq49rCOnTxrdhy4CAomAAAAAABQyogeCfJwt+kzBn7jKlEwAQAAAACAUmr5emhYtzhtT83Rhj0nzI4DF0DBBAAAAAAALtG7dbSiw3w1bfFe5RcUmR0HTo6CCS6LXZoAzMbjEAAAqM5sVqv+2LeBTuZe0LzVaWbHgZOjYAIAADAJJSUAwNk1rBuk9o3DNW/1IR0/dd7sOHBiFEwAAAAAAOCK/tArUVarNG3xXrOjwIlRMAEAAAAAgCsKruWlIZ1jtXHvCW07cNLsOHBSFEwAAAAAAOB39WtXVxFB3pq6aK8Ki4rNjgMnRMEEAAAAAAB+l7ubVbf0aaDM7HNauPaw2XHghCiYAAAAAABAmZISQtQyMVTfrExVzpmLZseBk6FgAgCg3HgLMAAAULOM7FNfRcV2ffHDPrOjwMlQMAEAAJiGkhIA4FrCA711fYe6Wr0jU7sP5ZgdB06EggkAAMBkFovF7AgAAFy1gZ3qKaSWp6Yu3KOiYgZ+owQFEwAAAAAAuGqe7jYl966vI8fPaunGo2bHgZOgYAIAAAAAANekTcMwNYkN0qzlB5R7Lt/sOHACFEwAAAAAAOCaWCwW3dqngS4WFGnmsv1mx4EToGACAAAAAADXrHaor3q3jtGPm48p9yy7mGo6CiYAAAAAAFAudSP8ZJd0oaDI7CgwGQUTXJbdzls7AzAXD0MwijUEAACqCwomAAAAAAAAGELBBAAAYDKL2QEAAAAMomACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAGN4a9Qaj4IJAIBy4s8oAABQ01l4pwr8jIIJAAAAAAAAhlAwAQAAmI1XfwEAgIujYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAYIjd7AAwHQUTXJadRzAAZuNxCAaxhAAArs7CW6HiZxRMAAAAJuNPcwAA4OoomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIa4mR2gMlmtvCdLZXGGn62nh03hQd6SnCMPrh6/LxjlLGvIy9NN4UHeCvL3cppMuDrO8vvy/nkNebjbnCYTrg6/LxjFGoJRzrKGvL1K/l/mbrM6TSZcnfL8vn7vayx2u91uJBAAAAAAAABqNk6RAwAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMuGpz5szRwIED1bdvX02dOtXsOHBReXl5Gjx4sI4cOWJ2FLigN954Q4MGDdKgQYP0wgsvmB0HLujVV1/VwIEDNWjQIH344Ydmx4GLev755/WPf/zD7BhwUaNHj9agQYM0dOhQDR06VJs3bzY7ElzIkiVLNHz4cA0YMED//Oc/zY4DF/TFF184Hn+GDh2qNm3a6Omnn66Q23arkFtBtZeZmalXXnlFM2fOlIeHh0aOHKkOHTooMTHR7GhwIZs3b9akSZOUmppqdhS4oJSUFK1YsUKzZs2SxWLR3XffrYULF6pv375mR4OLWLNmjVavXq1vvvlGhYWFGjhwoHr06KH4+Hizo8GFrFq1SrNmzVLPnj3NjgIXZLfbdeDAAS1dulRubjwVw7U5fPiwnnzySX3xxRcKCQnR7bffrmXLlqlHjx5mR4MLufnmm3XzzTdLkvbu3av7779f48aNq5DbZgcTrkpKSoo6duyowMBA+fj4qH///po/f77ZseBiZsyYoSeffFLh4eFmR4ELCgsL0z/+8Q95eHjI3d1dCQkJOnr0qNmx4ELat2+vjz/+WG5ubjp58qSKiork4+Njdiy4kFOnTumVV17RmDFjzI4CF3XgwAFZLBbdc889uuGGG/Tpp5+aHQkuZOHChRo4cKAiIyPl7u6uV155RS1atDA7FlzY5MmTNX78eAUHB1fI7VGb46pkZWUpLCzMcTk8PFxbtmwxMRFc0ZQpU8yOABdWv359x8epqamaN2+epk2bZmIiuCJ3d3e99tpr+uCDDzRgwABFRESYHQku5IknntD48eN17Ngxs6PAReXm5qpTp06aPHmyLly4oNGjRysuLk5dunQxOxpcQFpamtzd3fWnP/1Jx48fV69evfTggw+aHQsuKiUlRRcuXND1119fYbfJDiZcFbvdfskxi8ViQhIANd3evXt111136ZFHHlFsbKzZceCCHnjgAa1atUrHjh3TjBkzzI4DF/HFF18oKipKnTp1MjsKXFirVq30wgsvyMfHR8HBwRoxYoSWLVtmdiy4iKKiIq1atUovvviiZsyYoa1bt2rWrFlmx4KLmjZtmu68884KvU0KJlyViIgInThxwnE5KyuL05wAVLn169frjjvu0EMPPaQbb7zR7DhwMfv379fOnTslSd7e3urXr592795tciq4innz5mnlypUaOnSoXnvtNS1ZskTPPvus2bHgYtatW6dVq1Y5LtvtdmYx4aqFhoaqU6dOCg4OlpeXl6677jrOKkG55Ofna+3aterdu3eF3i4FE65K586dtWrVKmVnZ+v8+fNasGCBunfvbnYsADXIsWPHdP/99+ull17SoEGDzI4DF3TkyBFNmjRJ+fn5ys/P1+LFi9WmTRuzY8FFfPjhh5o7d65mz56tBx54QL1799Zjjz1mdiy4mDNnzuiFF17QxYsXlZeXp1mzZvFmFbhqvXr10ooVK5Sbm6uioiL9+OOPatq0qdmx4IJ2796t2NjYCp9FSV2OqxIREaHx48dr9OjRKigo0IgRI5SUlGR2LAA1yPvvv6+LFy/qX//6l+PYyJEjdcstt5iYCq6kR48e2rx5s4YNGyabzaZ+/fpRVgKoUr169XI8DhUXF+vWW29Vq1atzI4FF9GiRQvdfffduvXWW1VQUKAuXbropptuMjsWXNDhw4cVGRlZ4bdrsV9uuA4AAAAAAABwlThFDgAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAMDl9e7dWykpKWbHAAAAqLEomAAAACpYdna2GjZsqMzMTLOjAAAAVAkKJgAAgArw0ksv6ccff5Qk7dq1S8HBwYqIiDA5VYkHHnhAe/bscVw+cuSIWrVqVa7bOnv2rO6++25duHChouIBAIBqgIIJAABUK/v379eoUaPUtm1bDRo0SIsXL3Z8bvv27Ro2bJhatWqlBx54QA8++KBeeeUVw/e5adMm7du3T926dZMk7dy5U40aNTJ8uxUhPz9faWlpatCgQYXcnq+vrwYPHqxXX321Qm4PAABUDxRMAACg2igoKNCYMWPUpUsXpaSkaNKkSfr73/+uAwcOKD8/X+PGjdONN96oNWvWaPDgwVq0aFGF3O/rr7+u5ORkx2VnKphSUlLUqVOnCr3N66+/XnPmzNGJEycq9HYBAIDromACAADVxubNm3Xu3Dn9+c9/loeHhzp16qRevXrp22+/1ebNm1VYWKjRo0fL3d1d/fr1U/PmzR1fe+bMGY0YMUKtWrUqdTrZiy++qFtvvVUPP/ywCgoKLrnP3NxcrV+/Xl26dHEc27Vrlxo3bnzJdadPn65Ro0Y5/iUlJWnLli2Oz48cOVJvvPGGpJLT2Bo2bKjVq1dLKtmJ1K5dO3366aeSpLy8PI0ZM0ajRo1ScnKyli1bdtmfyeLFi9WnT59r+TGWydPTU61bt77ifQIAgJrHzewAAAAAFSUrK0uRkZGyWn99Da127drKzMxUVlaWIiIiZLFYHJ+LiopyfOzl5aV33nlHL7zwguPYrl27lJmZqc8++0xvvvmmvv/+ew0ePLjUfaalpSksLEweHh6SpIsXL+rgwYNq0qTJJfmSk5MdO52WLFmiWbNmKSkpSZJ07NgxRUREaM2aNY7rN2vWTAsXLlTHjh21atUq1atXz/G52bNnq1u3brrttttkt9t15syZS+6vuLhYmzZt0uTJk6/q5/eLzMxMffzxxyosLJTdblfjxo114403lrpO3bp1dfDgwWu6XQAAUH2xgwkAAFQb4eHhysjIUHFxsePYL8VNWFiYMjMzZbfbS33uF+7u7goODi51exs2bFDXrl0lSd26ddOGDRsuuU+r1aqioiLH5T179sjNzU1xcXFXzJmdna1XX31VTz31lOPY999/ryFDhig+Pl779++XJEVHR+vo0aOy2+1auHCh+vXr57i+p6enNm3apBMnTshisahWrVqX3M/mzZvVrFkz2Wy2K2b5reLiYn3zzTcaP368Hn30UT322GNKSEjQ0qVLS12vqKjomm4XAABUbxRMAACg2khKSpKXl5fee+89FRQU6KefftKSJUs0cOBAtWzZUjabTZ9++qkKCwu1aNEibd269XdvLzc3V35+fpIkf39/nT59+pLr1KlTR9nZ2bp48aKkkl1PCQkJKiws1MWLF3Xx4kXl5+eX+prJkyfrr3/9a6lCa8WKFerevbsGDx6s+fPnO463atVKa9euVXZ2tkJDQx3Hhw4dqri4OP3pT39ScnKyDhw4cEm2RYsW6brrrruKn9yvtmzZomHDhsnNzU3fffed0tPTlZSUpPPnz5e63pEjR363RAMAADULBRMAAKg2PDw89NZbb2n58uXq2LGjnnrqKb3wwgtKSEiQh4eHXn/9dX355Zdq166dvvnmG/Xs2dNxatvl+Pv7Ky8vT1LJjKaAgIBLrlOrVi21adPGMStp586d2r59u5KSkhz/Bg4c6Lj+119/LX9/f/Xu3dtxLCMjQ3v37tXYsWP15ptvlppt1K9fPz333HNq3759qft1d3fXfffdp9mzZ+uBBx7Q66+/fkm2lJQUxw6s3zp37pxatWpV6t/u3btls9kcO8DeeustrVu3TpJK7VbKz8/Xxo0bS30PAACgZmMGEwAAcHlLlixxfFy/fn3HIOzfat68uWbPnu24fPPNN6tXr15XvN3WrVvrww8/1LBhw7RixQq1bt36ste7//779dZbb6lHjx564okn9MQTT1z2eseOHdNHH310Sb758+fr0Ucf1YABAySV7HD6ZddTbGys2rRpowEDBiglJcXxNenp6Y7ZTyEhIaVO/fvFrFmzLpsjJiZGu3fvvuznCgoK9PHHH+v22293/Ky2bt1aqmCaO3euhgwZctnT8gAAQM1EwQQAAGqMNWvWKC4uTkFBQZozZ452796tbt26OT5/zz33aOfOnTp48KCSk5M1fPhwhYSE6NZbb1VUVJTuuuuuy95u69atFRcXp+XLl6t79+5XvP+3335bubm5Gjt2rOPYfffdpwULFuj//u//HMc6dOig7777znF50qRJl9zWnj17NH78eHl6esput1+x1LpW7u7uuv766/Xvf//bsZOpfv36GjFihKSSd6+bO3eu493uAAAAJMliv9zLXQAAANXQ9OnT9eqrr+r8+fOKiYnRQw89pJ49e5odCwAAwOVRMAEAAAAAAMAQhnwDAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIb8fxzqA03KlXkqAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "0546f2f3-4732-4841-8ef3-565fbf6b9961", + "metadata": {}, + "source": [ + "This distribution is peaked at low luminosity, as one expects from observations, but the resolution is clearly not great because it's not smooth - it's spiky! \n", + "\n", + "If you noticed above, the total probability of the grid was about 0.2. Given that the total probability of a probability distribution function should be 1.0, this shows that our sampling is (very) poor. \n", + "\n", + "We could simply increase the resolution to compensate, but this is very CPU intensive and a complete waste of time and resources. Instead, let's try sampling the masses of the stars in a smarter way." + ] + }, + { + "cell_type": "markdown", + "id": "673031c9-7d80-45d4-b209-301c127d3edf", + "metadata": {}, + "source": [ + "# A better-sampled grid\n", + "\n", + "The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space. \n", + "\n", + "To do this we first rename the mass grid variable so that it is clear we are working in (natural) logarithmic phase space." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5956f746-e3b9-4912-b75f-8eb0af66d3f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename the old variable (M_1) because we want it to be called lnM_1 now\n", + "population.rename_grid_variable(\"M_1\",\"lnM_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "532f691c-c1f6-46cc-84f2-970ec1216e40", + "metadata": {}, + "source": [ + "Next, we change the spacing function so that it works in the log space. We also adapt the probability calculation so that it calculates dprob/dlnM = M * dprob/dM. Finally, we set the precode to compute M_1 because binary_c requires the actual mass, not the logarithm of the mass." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "108d470a-bb21-40b0-8387-2caa7ab0f923", + "metadata": {}, + "outputs": [], + "source": [ + "# update the sampling, note that the IMF is dprob/dM1, and the phase \n", + "# space is now sampled in lnM1, so we multiply by M_1 to \n", + "# because M * dprob/dM = dprob/dlnM\n", + "population.update_grid_variable(\n", + " name=\"lnM_1\",\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnM_1\",\n", + " parameter_name=\"M_1\",\n", + " precode=\"M_1=math.exp(lnM_1)\",\n", + ")\n", + "# print(population.grid_options[\"_grid_variables\"]) # debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fb8db646-f3d0-4ccd-81ba-7fde23f29c79", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.9956307907476224\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Population-83f80d829dbd418aa2bc745c99b71991 finished! The total probability was: 0.9956307907476224. It took a total of 0.9961590766906738s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(0.25, 0.0212294), (2.75, 0.00321118), (-0.25, 0.0268827), (1.25, 0.0104553), (3.75, 0.00283037), (6.25, 7.34708e-05), (-0.75, 0.0771478), (0.75, 0.030004499999999996), (2.25, 0.00921541), (3.25, 0.0045385), (1.75, 0.014776889999999999), (4.25, 0.002380189), (4.75, 0.000869303), (5.25, 0.0007310379999999999), (5.75, 0.00036002859999999996), (-2.75, 0.1961345), (-1.75, 0.2181597), (-3.25, 0.0), (-2.25, 0.2568974), (-1.25, 0.11973310000000001)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "182b1094-5057-4ccf-bac6-9b0e560ad4f6", + "metadata": {}, + "source": [ + "You should see that the total probability is very close to 1.0, as you would expect for a well-sampled grid. The total will never be exactly 1.0, but that is because we are running a simulation, not a perfect copy of reality." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "68ee1e56-21e5-48f4-b74c-50e48685ae94", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB37ElEQVR4nOzdd3iV9f3/8dcZ2XtPstkhrLD3ElkyREGtA+vA0eHXqq1SRa221rb+2lpx1C3WVYaAKEtUlpAwE0YgJJCQkAGEEFbW+f2BpqUKAZJz7pOc5+O6uC7PneTcrxy8Q/LK5/O+TTabzSYAAAAAAADgCpmNDgAAAAAAAICWjYIJAAAAAAAATULBBAAAAAAAgCahYAIAAAAAAECTUDABAAAAAACgSSiYAAAAAAAA0CQUTAAAAAAAAGgSq9EB7OnYsZOqr7fZ9RwhIb46cqTKrucAnBnXAMB1AHANwNVxDcDVcQ24DrPZpKAgnx99W6sumOrrbXYvmL4/D+DKuAYArgOAawCujmsAro5rAGyRAwAAAAAAQJNQMAEAAAAAAKBJWvUWOQAAAAAAHKmurlbHjpWptrba6CgOU1pqVn19vdEx0IysVncFBYXJYrn02oiCCQAAAACAZnLsWJk8Pb3l4xMpk8lkdByHsFrNqq2lYGotbDabTp6s1LFjZQoNjbrkj2OLHAAAAAAAzaS2tlo+Pv4uUy6h9TGZTPLx8b/sVXgUTAAAAAAANCPKJbR0V/L/MAUTAAAAAAAAmoSCCQAAAACAVmjbti267bYbz/szeHBvffHFZw3v8+9/f6ihQ/vqyJHy8z524MB0/d//3X/esYqKCg0Z0kevv/6KJOnw4cN6+OEHdNNN1+vmm6/Xb3/7ax07dvQHOV5//ZWGj2mKf/7zZa1Z81WTn+d7CxZ8ogULPpEkPfvskzp8uPiKnuf+++/S5s0Z2r17p/7wh6cv+H5FRYf0+98/1WiWgQPTL+v8a9Z8rQ8+eO8Hz+NoDPkGAAAAAKAV6tq1u9566/2Gxx9+OFeff75EQ4eOaDi2ZMkiDRw4RIsXL9Stt/70vI8vKChQZWWl/P39JUmrV6+Un59/w9uff/5ZXX31WI0ZM1a1tfV699039fzzv9ezzz5vl8/njjtmNuvzTZo0teG/N2/O0IwZdzbp+Tp06KRf/7rTBd9++HCxDh0qbDTL5dqzZ1ezPE9TUTABAAAAANDKbdu2Re+884ZeffVteXh4SJL27durysrjevjhxzRr1sO6+eYZMpv/s9Fp4MDB+uab1Ro37hpJ5wqmwYOHNrz96NFynT17puHxtdder127dl40x8CB6VqzJkOS9Nlni7RlS6Yee2y2pk6doOHDR2ndujWyWCy6++779MEH76mwsED33fdLjRgxSs88M1vdu/dU9+499eijv1JSUrJycvYoODhETz/9B/n7B2jt2m/02mtzZLPVKzo6Rg899KiCg0P04ov/T5s2fSuLxayBA4fo9tvvalhV5e7uofLyMj300C90xx0z9cEHc/Xyy29IkpYuXazs7B361a9+0/A5VFdX67nnntbu3bsUGRmt48crJJ0rqd5441W9+OKr+uCD97R06RKZzSZ17NhZDz/8mP761z+pqOiQ/vzn5zRs2AjNmfM31dXVKykpWVFR0ZKkn/70bknSc889o127shUQEKjf/OZxRUZG6v7779Ltt9+lHj3SVVxcpJ/97G49//xftXDhPElSZGRUwyqsn/707gu+FlOnTtDo0WO1ceN6nT59RrNmPakOHTpe8v9LF0LBBAAAAACAHazdUaw1269s21VjBqZFaUCXS7uF/LFjRzV79mN65JHfKiYmtuH4Z599quHDR6pDh46yWCz69tt16tdvYMPbhw8fqXfeeUPjxl2jI0fKZbNJISGhDW+/++779dRTv9Xrr7+qnj17qW/f/ho+fNQVf06hoWF6772P9OyzT+q9997S3/72snbs2Ka//e3PGjHi/Ofdt2+vfvObx9WuXQc99thDWrZsqUaMuErPP/+s5sx5XVFR0Xr//Xf0l7/8Ufff/0tt2LBO7733kc6ePavnnvudzp492/BcN998mxYu/Leef/6vioyM0j/+8TcdOlSomJhYLV26WHffff5WwU8++VCSNHfuJyooOKhbb73hvLfX1tbqvffe0oIFn8tsNusvf3lOZWWl+sUvfqU33nhVDz74iDZvzlBBwUF98sli+fr6/mALYffuPfTII49p3ryP9de//km///2ffvQ1S0xM0sSJUyRJ48Zd0/A8x44d/dHX4ne/e06SFBAQoNdee0effPKB3n33DT3zTNNXnTGDCQAAAACAVqq+vl6zZ8/SyJGjz1t9VFtbq2XLPtfIkaMlScOHj2pYCfO91NQ0HTx4QFVVVVq9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hQsXasKECfzDApdQUlKiF154Qe+//74WLlyoDz/8UPv27TM6FuAw69at05o1azR//nwtWLBA2dnZWr58udGxAIdbv3695s+fb3QMwBAFBQV64okn9NJLL2nRokXauXOnvvrqK6NjwSAUTM3gD3/4g2677TajYwCGqK6u1i9+8Qt16NBBktS+fXsVFxcbnAqwv3Xr1qlv374KDAyUt7e3Ro8erc8//9zoWIDDhIWF6de//rXc3d3l5uam5ORkFRUVGR0LcKiKigq98MILmjlzptFRAEMsX75cY8eOVWRkpNzc3PTCCy+oa9euRseCQSiYmmjlypU6c+aMrr76aqOjAIZwd3fXxIkTJUn19fV68cUXNXLkSINTAfZXWlqqsLCwhsfh4eEqKSkxMBHgWG3btlW3bt0kSfn5+frss880ZMgQY0MBDvb444/rgQcekL+/v9FRAEMcOHBAdXV1+ulPf6prrrlG77//vgICAoyOBYNYjQ7QUixdulS///3vzzuWlJSkqqoqvfXWW8aEAhzsQtfBW2+9perqav36179WbW2t7r77boMSAo5js9l+cMxkMhmQBDDW3r17dffdd+uRRx5RQkKC0XEAh/n4448VFRWlfv36ad68eUbHAQxRV1enjIwMvfvuu/L29ta9996r+fPna8qUKUZHgwEomC7RmDFjNGbMmPOOffzxx3rllVd00003NRybOHGi5s6dK19fX0dHBOzux64DSTp58qTuueceBQYGas6cOXJzczMgHeBYERERysjIaHhcWlqq8PBwAxMBjpeZmamf//znevTRRzVu3Dij4wAO9dlnn6msrEwTJ07U8ePHderUKT377LN69NFHjY4GOExoaKj69eun4OBgSdKIESO0fft2CiYXZbL92K9gcUXat2+vPXv2GB0DcLh7771XISEheuqpp1jBAZdRUlKiG264QZ988om8vLw0ffp0Pf3000pLSzM6GuAQxcXFmjx5sl544QX169fP6DiAoebNm6eNGzfqD3/4g9FRAIfatm2bHnnkEX300Ufy8fHRfffdpxEjRui6664zOhoMwAomAE2yc+dOrVy5UikpKZo0aZKkc7NoXnvtNWODAXYWERGhBx54QLfccotqamo0depUyiW4lNdff11nz5497wfq6dOn64YbbjAwFQDAkbp27ao77rhDN954o2pqajRgwABde+21RseCQVjBBAAAAAAAgCbhLnIAAAAAAABoEgomAAAAAAAANAkFEwAAAAAAAJqEggkAAAAAAABNQsEEAAAAAACAJqFgAgAAAAAAQJNQMAEAAAAAAKBJKJgAAECLN3z4cK1bt87oGAAAAC6LggkAAKCZHT16VO3bt1dJSYnRUQAAAByCggkAAKAZ/OlPf9I333wjSdq9e7eCg4MVERFhcKpzfv7znysnJ6fhcWFhobp3735Fz3Xy5EndcccdOnPmTHPFAwAArQAFEwAAaFVyc3N18803Kz09XePGjdPKlSsb3padna1Jkyape/fu+vnPf65f/vKXeuGFF5p8zq1bt2rfvn0aNGiQJGnXrl3q0KFDk5+3OVRXV+vAgQNq165dszyfj4+Pxo8fr7/+9a/N8nwAAKB1oGACAACtRk1NjWbOnKkBAwZo3bp1mjVrln71q19p//79qq6u1v3336/Jkydr48aNGj9+vFasWNEs5/373/+uadOmNTx2poJp3bp16tevX7M+55gxY7Ro0SKVl5c36/MCAICWi4IJAAC0Gtu2bdOpU6d01113yd3dXf369dOwYcO0ZMkSbdu2TbW1tbrlllvk5uamq666Sl26dGn42BMnTmjq1Knq3r37edvJnn/+ed1444166KGHVFNT84NzVlZWKjMzUwMGDGg4tnv3bnXs2PEH7/vhhx/q5ptvbviTlpam7du3N7x9+vTpevHFFyWd28bWvn17bdiwQdK5lUi9evXSe++9J0mqqqrSzJkzdfPNN2vatGn66quvfvQ1WblypUaOHHk5L2OjPDw81KNHjwueEwAAuB6r0QEAAACaS2lpqSIjI2U2/+d3aNHR0SopKVFpaakiIiJkMpka3hYVFdXw356ennr11Vf1xz/+seHY7t27VVJSovfff19z5szRF198ofHjx593zgMHDigsLEzu7u6SpLNnzyovL0+dOnX6Qb5p06Y1rHRatWqV5s+fr7S0NElScXGxIiIitHHjxob3T01N1fLly9W3b1+tX79e8fHxDW9buHChBg0apJtuukk2m00nTpz4wfnq6+u1detWzZ49+5Jev++VlJTonXfeUW1trWw2mzp27KjJkyef9z5xcXHKy8u7rOcFAACtFyuYAABAqxEeHq7Dhw+rvr6+4dj3xU1YWJhKSkpks9nOe9v33NzcFBwcfN7zbd68WQMHDpQkDRo0SJs3b/7BOc1ms+rq6hoe5+TkyGq1KjEx8YI5jx49qr/+9a968sknG4598cUXmjBhgpKSkpSbmytJiomJUVFRkWw2m5YvX67/3979hTT1xnEc/8icduEWsm4EhcbYXY02Mb1xLgMxMRpSDLoRjC5cUIhXioy6EgQvRKQJQRHeCEFtDiYxhgwZ9Af6IyIrqJtGXYSQRGN/yt+FdH6szfjFLn6k7xcc2HnO9zznOefys+c8p6+vz6hvbGzUy5cv9fnzZ9XV1clqtVZc59WrVzpx4oRMJtO+Y/nVjx8/FI1GNTY2pomJCU1OTsrhcGhtba2s7vv373/ULwAAONgImAAAwIHhcrl05MgR3blzR8ViUU+ePFEymdTAwIBOnTolk8mkpaUllUolJRIJbWxs/La/nZ0dNTU1SZIsFou+fPlSUdPW1qbt7W3l83lJe7OeHA6HSqWS8vm88vm8CoVC2Tk3b97UjRs3ygKt9fV1eb1eDQ4OanV11Wh3u9169uyZtre3dezYMaP9woULstvtunLligKBgN69e1cxtkQiobNnz/6HJ/ev169fy+/3q76+XvF4XNlsVi6XS7lcrqzuw4cPvw3RAADA4ULABAAADoyGhgaFw2GlUil1dXXp1q1bmpmZkcPhUENDg+bn5/XgwQN1dHQoGo3K5/MZr7ZVY7FY9PXrV0l7azQdPXq0osZqtaq9vd1YK2lra0ubm5tyuVzGNjAwYNQ/evRIFotFvb29RtunT5/09u1bjY6O6vbt22VrG/X19Wl6elqnT58uu67ZbFYwGFQkEtH169c1Pz9fMbZ0Om3MwPrVt2/f5Ha7y7ZMJiOTyWTMAAuHw3r+/Lkklc1WKhQKevHiRdk9AACAw401mAAAwF8vmUwav51Op7EQ9q9OnjypSCRi7F+6dElnzpzZt1+Px6O7d+/K7/drfX1dHo+nat21a9cUDofV09OjUCikUChUte7jx4+6d+9exfhWV1c1MTGh/v5+SXsznH7Oejp+/Lja29vV39+vdDptnJPNZo21n2w2W9mrfz89fPiw6jhaW1uVyWSqHisWi7p//76Gh4eNZ7WxsVEWMMViMZ0/f77qa3kAAOBwImACAACHxtOnT2W329Xc3KyVlRVlMhl1d3cbx69evaqtrS29f/9egUBAQ0NDstlsunz5slpaWjQyMlK1X4/HI7vdrlQqJa/Xu+/1FxcXtbOzo9HRUaMtGAzq8ePHWlhYMNo6OzsVj8eN/ampqYq+3rx5o7GxMTU2Nmp3d3ffUOtPmc1mnTt3TrOzs8ZMJqfTqYsXL0ra+3pdLBYzvnYHAAAgSXW71f7uAgAAOICWl5c1NzenXC6n1tZWjY+Py+fz/d/DAgAA+OsRMAEAAAAAAKAmLPINAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABqQsAEAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABq8g/wlbD9p3152QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "31fe91bb-177d-4e4e-90cf-298a3f8a8b61", + "metadata": {}, + "source": [ + "Most stars are low mass red dwarfs, with small luminosities. Without the IMF weighting, our model population would have got this completely wrong! \n", + "\n", + "As you increase the resolution, you will see this curve becomes even smoother. The wiggles in the curve are (usually) sampling artefacts because the curve should monotonically brighten above about log(*L*/L<sub>☉</sub>)=-2. \n", + " \n", + "Remember you can play with the binwidth too. If you want a very accurate distribution you need a narrow binwidth, but then you'll also need high resolution (lots of stars) so lots of CPU time, hence cost, CO<sub>2</sub>, etc." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_20_1.png b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_20_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8895750e8fce660f5b0b948fe506a414af7a4517 GIT binary patch literal 25029 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 literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_26_1.png b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_26_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc990e6c4cb03cb8f70d8d5355c9f765558752b2 GIT binary patch literal 23856 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 Bq80!E literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_34_0.png b/docs/build/doctrees/nbsphinx/notebook_luminosity_function_single_34_0.png new file mode 100644 index 0000000000000000000000000000000000000000..980e3e44d1aa73fd9907fbe0a6cf485ba5ef811c GIT binary patch literal 30847 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 b8(H-|;KfX|vjbt=Qxp|c{!ZL)c<p}xLVAz{ literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/nbsphinx/notebook_population.ipynb b/docs/build/doctrees/nbsphinx/notebook_population.ipynb index b6a37baa8..f6f27ee43 100644 --- a/docs/build/doctrees/nbsphinx/notebook_population.ipynb +++ b/docs/build/doctrees/nbsphinx/notebook_population.ipynb @@ -23,9 +23,12 @@ "outputs": [], "source": [ "import os\n", + "\n", "from binarycpython.utils.custom_logging_functions import temp_dir\n", "from binarycpython.utils.grid import Population\n", "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_population\")\n", + "\n", "# help(Population) # Uncomment to see the public functions of this object" ] }, @@ -60,7 +63,8 @@ "adding: max_evolution_time=15000 to BSE_options\n", "adding: eccentricity=0.02 to BSE_options\n", "adding: amt_cores=2 to grid_options\n", - "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/example_python_population_result to custom_options >>>>\n", + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_population to grid_options\n", + "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result to custom_options >>>>\n", "<<<< Warning: Key does not match previously known parameter: adding: base_filename=example_pop.dat to custom_options >>>>\n", "1\n", "example_pop.dat\n", @@ -88,11 +92,12 @@ "\n", "\n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", " \n", " # Custom options # TODO: need to be set in grid_options probably\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -133,13 +138,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Writing settings to /tmp/binary_c_python/example_python_population_result/example_pop_settings.json\n" + "Writing settings to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json\n" ] }, { "data": { "text/plain": [ - "'/tmp/binary_c_python/example_python_population_result/example_pop_settings.json'" + "'/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json'" ] }, "execution_count": 3, @@ -181,7 +186,7 @@ "text": [ "Help on method add_grid_variable in module binarycpython.utils.grid:\n", "\n", - "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='edge', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", + "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='centred', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", " Function to add grid variables to the grid_options.\n", " \n", " The execution of the grid generation will be through a nested for loop.\n", @@ -199,25 +204,25 @@ " name:\n", " name of parameter. This is evaluated as a parameter and you can use it throughout\n", " the rest of the function\n", - " \n", + " \n", " Examples:\n", " name = 'lnm1'\n", " longname:\n", " Long name of parameter\n", - " \n", + " \n", " Examples:\n", " longname = 'Primary mass'\n", " range:\n", " Range of values to take. Does not get used really, the spacingfunction is used to\n", " get the values from\n", - " \n", + " \n", " Examples:\n", " range = [math.log(m_min), math.log(m_max)]\n", " resolution:\n", " Resolution of the sampled range (amount of samples).\n", " TODO: check if this is used anywhere\n", " \n", - " Examples: \n", + " Examples:\n", " resolution = resolution[\"M_1\"]\n", " spacingfunction:\n", " Function determining how the range is sampled. You can either use a real function,\n", @@ -230,12 +235,12 @@ " precode:\n", " Extra room for some code. This code will be evaluated within the loop of the\n", " sampling function (i.e. a value for lnm1 is chosen already)\n", - " \n", + " \n", " Examples:\n", " precode = 'M_1=math.exp(lnm1);'\n", " probdist:\n", " Function determining the probability that gets assigned to the sampled parameter\n", - " \n", + " \n", " Examples:\n", " probdist = 'Kroupa2001(M_1)*M_1'\n", " dphasevol:\n", @@ -249,7 +254,7 @@ " condition = 'self.grid_options['binary']==1'\n", " gridtype:\n", " Method on how the value range is sampled. Can be either 'edge' (steps starting at\n", - " the lower edge of the value range) or 'center'\n", + " the lower edge of the value range) or 'centred'\n", " (steps starting at lower edge + 0.5 * stepsize).\n", "\n" ] @@ -313,7 +318,7 @@ " \"dphasevol\": \"dlnm1\",\n", " \"parameter_name\": \"M_1\",\n", " \"condition\": \"\",\n", - " \"gridtype\": \"edge\",\n", + " \"gridtype\": \"centred\",\n", " \"branchpoint\": 0,\n", " \"grid_variable_number\": 0\n", "}\n" @@ -457,7 +462,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "adding: parse_function=<function parse_function at 0x7ff3bdf79620> to grid_options\n" + "adding: parse_function=<function parse_function at 0x7f531bc3b6a8> to grid_options\n" ] } ], @@ -536,25 +541,25 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", - "EXAMPLE_COMPACT_OBJECT 2.867655467480e+01 1.33079 9.81391 0.00167028 13\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "EXAMPLE_COMPACT_OBJECT 1.931266944719e+01 1.3933 12.3177 0.00124307 13\n", - "EXAMPLE_COMPACT_OBJECT 4.439623364590e+01 1.38004 7.81906 0.00224431 13\n", - "EXAMPLE_COMPACT_OBJECT 1.364277535630e+01 1.47961 15.4603 0.000925128 13\n", - "EXAMPLE_COMPACT_OBJECT 1.017435498578e+01 1.59052 19.4046 0.000688507 13\n", - "EXAMPLE_COMPACT_OBJECT 8.294870923827e+00 1.7197 24.3552 0.000512406 13\n", - "EXAMPLE_COMPACT_OBJECT 6.802132608769e+00 1.84162 30.5689 0.000381347 13\n", - "EXAMPLE_COMPACT_OBJECT 5.723570798020e+00 1.99471 38.3678 0.00028381 13\n", - "EXAMPLE_COMPACT_OBJECT 4.933751523833e+00 2.15875 48.1564 0.000211219 13\n", - "EXAMPLE_COMPACT_OBJECT 4.337250536639e+00 2.35209 60.4424 0.000157195 14\n", - "EXAMPLE_COMPACT_OBJECT 3.862081089332e+00 2.56776 75.8628 0.000116989 14\n", - "EXAMPLE_COMPACT_OBJECT 3.449960890183e+00 2.80457 95.2174 8.70668e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.172196856333e+00 3.05193 119.51 6.47976e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.069627290216e+00 3.27563 150 4.82242e-05 14\n", - "Population-2a7732d03e594ef4b5dfe9051b41d9c0 finished! The total probability was: 0.05150046619238191. It took a total of 0.7797017097473145s to run 20 systems on 2 cores\n", + "EXAMPLE_COMPACT_OBJECT 4.139293101586e+01 1.29427 8.13626 0.00202467 13\n", + "EXAMPLE_COMPACT_OBJECT 2.802986496151e+01 1.33699 10.0967 0.00152924 13\n", + "EXAMPLE_COMPACT_OBJECT 1.963621764679e+01 1.39754 12.5294 0.00115504 13\n", + "EXAMPLE_COMPACT_OBJECT 1.427601421985e+01 1.47745 15.5483 0.000872405 13\n", + "EXAMPLE_COMPACT_OBJECT 1.094409257247e+01 1.57571 19.2947 0.00065893 13\n", + "EXAMPLE_COMPACT_OBJECT 9.181971798545e+00 1.68748 23.9436 0.000497691 13\n", + "EXAMPLE_COMPACT_OBJECT 7.905335716621e+00 1.77287 29.7128 0.000375908 13\n", + "EXAMPLE_COMPACT_OBJECT 7.451192744924e+00 1.81495 36.872 0.000283924 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396133472739e+00 1.82088 45.7561 0.000214449 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396675941641e+00 1.82123 56.7809 0.000161974 13\n", + "EXAMPLE_COMPACT_OBJECT 7.404641347602e+00 1.82074 70.4621 0.000122339 13\n", + "EXAMPLE_COMPACT_OBJECT 7.444217227690e+00 1.81636 87.4397 9.2403e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.453317880232e+00 1.81536 108.508 6.97923e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.450828476484e+00 1.81563 134.653 5.27143e-05 13\n", + "Population-f28b5f98d7ef40dcb17fc2481a6d3ced finished! The total probability was: 0.04440288843805411. It took a total of 2.785212755203247s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n" ] } @@ -586,7 +591,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'population_name': '2a7732d03e594ef4b5dfe9051b41d9c0', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.05150046619238191, 'total_count': 20, 'start_timestamp': 1628444120.234709, 'end_timestamp': 1628444121.0144107, 'total_mass_run': 730.1048014407228, 'total_probability_weighted_mass_run': 0.2983275843337705, 'zero_prob_stars_skipped': 0}\n" + "{'population_name': 'f28b5f98d7ef40dcb17fc2481a6d3ced', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.04440288843805411, 'total_count': 20, 'start_timestamp': 1629459533.935186, 'end_timestamp': 1629459536.7203987, 'total_mass_run': 684.2544031669779, 'total_probability_weighted_mass_run': 0.28134439269236855, 'zero_prob_stars_skipped': 0}\n" ] } ], @@ -660,42 +665,22 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Saving grid code to grid_options\n", - "Writing grid code to /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", - "Loading grid code function from /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", + "Writing grid code to /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", + "Loading grid code function from /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", "Grid code loaded\n", - "Writing binary_c calls to /tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", + "Writing binary_c calls to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", - "/tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "binary_c M_1 2.0 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.013208238029791246\n", - "binary_c M_1 2.5102526289471614 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.009829948023831718\n", - "binary_c M_1 3.1506841305680684 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.0073157281034221516\n", - "binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.005444573822104362\n" + "with a total probability of 0.044402888438054094\n", + "/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", + "binary_c M_1 2.227955577093495 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.010905083645619543\n", + "binary_c M_1 2.7647737053496777 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.008236638755149857\n", + "binary_c M_1 3.4309362899259503 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.006221155214163634\n", + "binary_c M_1 4.257608426597089 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.004698855121516278\n" ] } ], "source": [ - "example_pop.set(verbosity=10)\n", + "example_pop.set(verbosity=1)\n", "calls_filename = example_pop.write_binary_c_calls_to_file()\n", "print(calls_filename)\n", "\n", @@ -725,39 +710,34 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "Population-3680f3882c0a449c944462abffea2447 finished! The total probability was: 0.05150046619238191. It took a total of 0.6246354579925537s to run 20 systems on 2 cores\n", + "Population-e45c25448b32440cb7e220f4a3562907 finished! The total probability was: 0.04440288843805411. It took a total of 1.9539172649383545s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass zams_mass probability radius stellar_type\n", - "2.867655467480e+01 1.33079 9.81391 0.00167028 1.72498e-05 13\n", - "1.931266944719e+01 1.3933 12.3177 0.00124307 1.72498e-05 13\n", - "4.439623364590e+01 1.38004 7.81906 0.00224431 1.72498e-05 13\n", - "1.364277535630e+01 1.47961 15.4603 0.000925128 1.72498e-05 13\n", - "1.017435498578e+01 1.59052 19.4046 0.000688507 1.72498e-05 13\n", - "8.294870923827e+00 1.7197 24.3552 0.000512406 1.72498e-05 13\n", - "6.802132608769e+00 1.84162 30.5689 0.000381347 1.72498e-05 13\n", - "5.723570798020e+00 1.99471 38.3678 0.00028381 1.72498e-05 13\n", - "4.933751523833e+00 2.15875 48.1564 0.000211219 1.72498e-05 13\n", - "4.337250536639e+00 2.35209 60.4424 0.000157195 9.97286e-06 14\n", - "3.862081089332e+00 2.56776 75.8628 0.000116989 1.08873e-05 14\n", - "3.449960890183e+00 2.80457 95.2174 8.70668e-05 1.18914e-05 14\n", - "3.172196856333e+00 3.05193 119.51 6.47976e-05 1.29402e-05 14\n", - "3.069627290216e+00 3.27563 150 4.82242e-05 1.38887e-05 14\n", + "4.139293101586e+01 1.29427 8.13626 0.00202467 1.72498e-05 13\n", + "2.802986496151e+01 1.33699 10.0967 0.00152924 1.72498e-05 13\n", + "1.963621764679e+01 1.39754 12.5294 0.00115504 1.72498e-05 13\n", + "1.427601421985e+01 1.47745 15.5483 0.000872405 1.72498e-05 13\n", + "1.094409257247e+01 1.57571 19.2947 0.00065893 1.72498e-05 13\n", + "9.181971798545e+00 1.68748 23.9436 0.000497691 1.72498e-05 13\n", + "7.905335716621e+00 1.77287 29.7128 0.000375908 1.72498e-05 13\n", + "7.451192744924e+00 1.81495 36.872 0.000283924 1.72498e-05 13\n", + "7.396133472739e+00 1.82088 45.7561 0.000214449 1.72498e-05 13\n", + "7.396675941641e+00 1.82123 56.7809 0.000161974 1.72498e-05 13\n", + "7.404641347602e+00 1.82074 70.4621 0.000122339 1.72498e-05 13\n", + "7.444217227690e+00 1.81636 87.4397 9.2403e-05 1.72498e-05 13\n", + "7.453317880232e+00 1.81536 108.508 6.97923e-05 1.72498e-05 13\n", + "7.450828476484e+00 1.81563 134.653 5.27143e-05 1.72498e-05 13\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -817,11 +797,12 @@ " eccentricity=0.02, # bse_options\n", " \n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -876,15 +857,15 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" @@ -912,96 +893,39 @@ "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Grid has handled 125 stars\n", - "with a total probability of 0.0862478164626921\n", - "Total starcount for this run will be: 125\n", + "Grid has handled 27 stars\n", + "with a total probability of 0.024868380796643753\n", + "Total starcount for this run will be: 27\n", "Generating grid code\n", "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Population-d20a4c74d20a43b881c0c9e5def5f76c finished! The total probability was: 0.08624781646269201. It took a total of 8.561265707015991s to run 125 systems on 2 cores\n", + "Population-05128ef4c5fe4274a0356c3e99e2f2d2 finished! The total probability was: 0.024868380796643757. It took a total of 9.792905807495117s to run 27 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 stellar_type_2 prev_stellar_type_2 metallicity probability\n", - "8.863377990313e+01 1.29444 5.88566 0 2.99283 13 5 15 15 0.02 0.000627913\n", - "1.146421815741e+02 0 5.88566 1.33062 4.43925 15 15 13 5 0.02 0.000627913\n", - "7.222715508467e+01 1.34922 5.88566 0 5.88566 13 5 15 15 0.02 0.000627913\n", - "1.350021848285e+01 1.48488 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171108213270e+01 1.53113 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171086983243e+01 1.53177 17.3205 0 0.1 13 9 15 15 0.02 0.000154349\n", - "1.170770599495e+01 1.53176 17.3205 0 4.40513 13 5 15 15 0.02 0.000172877\n", - "1.230407246199e+01 1.59499 17.3205 0 4.40513 13 5 15 15 0.02 0.000610573\n", - "1.108751340926e+01 1.70319 17.3205 0 8.71025 13 4 15 15 0.02 0.000610573\n", - "1.941017702765e+01 1.34903 17.3205 1.65097 8.71025 13 13 13 5 0.02 0.000172877\n", - "1.980988739731e+01 1.36979 17.3205 1.60808 8.71025 13 13 13 5 0.02 0.000121486\n", - "3.571858031651e+01 1.53174 17.3205 1.30504 8.71025 13 13 13 5 0.02 8.42148e-05\n", - "3.459153942631e+01 1.53176 17.3205 1.31004 8.71025 13 13 13 5 0.02 9.8162e-05\n", - "1.687368550125e+01 1.34937 17.3205 1.73856 13.0154 13 13 13 8 0.02 0.000172877\n", - "1.194842917007e+01 1.78096 17.3205 0 13.0154 13 8 15 15 0.02 0.000610573\n", - "1.733614170983e+01 1.53184 17.3205 1.42375 13.0154 13 13 13 5 0.02 9.8162e-05\n", - "1.723547465714e+01 1.38403 17.3205 1.71288 13.0154 13 13 13 8 0.02 0.000121486\n", - "1.764340254985e+01 1.53174 17.3205 1.41264 13.0154 13 13 13 5 0.02 8.42148e-05\n", - "1.170425790780e+01 1.52963 17.3205 0 17.3205 13 5 15 15 0.02 0.000172877\n", - "8.922967341481e+00 1.85486 17.3205 0 17.3205 13 8 15 15 0.02 0.000610573\n", - "1.232906623449e+01 1.41074 17.3205 1.34281 17.3205 13 13 13 8 0.02 0.000121486\n", - "1.170775828562e+01 1.53183 17.3205 1.53183 17.3205 13 5 13 5 0.02 9.8162e-05\n", - "1.170770422321e+01 1.53175 17.3205 1.53175 17.3205 13 5 13 5 0.02 8.42148e-05\n", - "5.075844624794e+00 2.12303 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.766606588165e+00 2.20484 50.9713 0 0.1 14 8 15 15 0.02 3.79411e-05\n", - "4.768305081494e+00 2.18838 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.458869865939e+00 2.29864 50.9713 0 12.8178 14 8 15 15 0.02 0.000150087\n", - "1.806014211040e+01 2.10446 50.9713 1.40749 12.8178 13 13 13 5 0.02 2.9863e-05\n", - "4.797342083485e+00 2.10328 50.9713 0 12.8178 13 13 15 1 0.02 4.24954e-05\n", - "1.721374713429e+01 2.21673 50.9713 1.42212 12.8178 14 14 13 5 0.02 2.41295e-05\n", - "4.055645404546e+00 2.47276 50.9713 0 25.5357 14 7 15 15 0.02 0.000150087\n", - "1.806123543037e+01 2.21893 50.9713 1.40745 12.8178 14 14 13 5 0.02 2.07011e-05\n", - "8.117519147635e+00 2.10433 50.9713 2.21473 25.5357 13 13 14 8 0.02 4.24954e-05\n", - "8.315554923168e+00 2.15343 50.9713 2.08519 25.5357 13 13 13 8 0.02 2.9863e-05\n", - "7.917420996633e+00 2.21892 50.9713 1.7431 25.5357 14 14 13 8 0.02 2.07011e-05\n", - "7.693213405973e+00 2.21805 50.9713 1.78384 25.5357 14 14 13 8 0.02 2.41295e-05\n", - "3.753837732894e+00 2.62517 50.9713 0 38.2535 14 7 15 15 0.02 0.000150087\n", - "7.087296558990e+00 2.10417 50.9713 2.40935 38.2535 13 13 14 8 0.02 4.24954e-05\n", - "7.007109286263e+00 2.15854 50.9713 2.28672 38.2535 13 13 14 8 0.02 2.9863e-05\n", - "5.653200958306e+00 2.21878 50.9713 2.0587 38.2535 14 14 13 8 0.02 2.41295e-05\n", - "5.733794947644e+00 2.21892 50.9713 1.99255 38.2535 14 14 13 8 0.02 2.07011e-05\n", - "3.513216011269e+00 2.76647 50.9713 0 50.9713 14 7 15 15 0.02 0.000150087\n", - "4.750574783854e+00 2.27442 50.9713 0 50.9713 14 8 15 15 0.02 4.24954e-05\n", - "7.278384712062e+00 1.29678 50.9713 2.09216 50.9713 13 8 13 13 0.02 2.9863e-05\n", - "4.765996194699e+00 2.20787 50.9713 2.20787 50.9713 14 8 14 8 0.02 2.07011e-05\n", - "4.765535914728e+00 2.21331 50.9713 2.21331 50.9713 14 8 14 8 0.02 2.41295e-05\n", - "3.104706358826e+00 3.17639 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.069363482023e+00 3.27572 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.047074050271e+00 3.3836 150 0 37.575 14 7 15 15 0.02 3.68933e-05\n", - "5.974759306305e+00 3.23604 150 2.53922 37.575 14 14 14 7 0.02 1.04459e-05\n", - "6.074084349384e+00 3.30145 150 2.13876 37.575 14 14 13 8 0.02 7.34071e-06\n", - "5.733865371895e+00 3.29994 150 2.00498 37.575 14 14 13 8 0.02 5.93135e-06\n", - "3.027099358410e+00 3.53631 150 0 75.05 14 7 15 15 0.02 3.68933e-05\n", - "5.807147339697e+00 3.30197 150 1.9791 37.575 14 14 13 8 0.02 5.08861e-06\n", - "4.862942347290e+00 3.25294 150 2.97823 75.05 14 14 14 7 0.02 1.04459e-05\n", - "4.556479830908e+00 3.29942 150 2.73221 75.05 14 14 14 7 0.02 7.34071e-06\n", - "3.853070305680e+00 3.29977 150 2.62486 75.05 14 14 14 7 0.02 5.93135e-06\n", - "3.881529045940e+00 3.30149 150 2.55924 75.05 14 14 14 7 0.02 5.08861e-06\n", - "3.015033359333e+00 3.64419 150 0 112.525 14 7 15 15 0.02 3.68933e-05\n", - "4.126828648362e+00 3.32047 150 0 112.525 14 14 15 3 0.02 1.04459e-05\n", - "3.990017992944e+00 3.3032 150 2.94027 112.525 14 14 14 7 0.02 7.34071e-06\n", - "3.206771867883e+00 3.07671 150 3.11282 112.525 14 14 14 7 0.02 5.93135e-06\n", - "3.006827156705e+00 3.72638 150 0 150 14 7 15 15 0.02 3.68933e-05\n", - "3.218786094847e+00 3.30337 150 3.01344 112.525 14 14 14 7 0.02 5.08861e-06\n", - "4.527722847382e+00 1.42238 150 0 150 13 5 15 15 0.02 1.04459e-05\n", - "3.069567332611e+00 3.27804 150 3.27804 150 14 7 14 7 0.02 5.93135e-06\n", - "5.726405299909e+00 1.29746 150 3.22759 150 13 8 14 14 0.02 7.34071e-06\n", - "3.069626478211e+00 3.27565 150 3.27565 150 14 7 14 7 0.02 5.08861e-06\n", + "1.219029061236e+01 1.60007 17.3205 0 2.97008 13 5 15 15 0.02 0.000498487\n", + "1.935920346899e+01 1.29448 17.3205 0 8.71025 13 13 15 2 0.02 0.000498487\n", + "2.123795595728e+01 1.30902 17.3205 1.58519 8.71025 13 13 13 5 0.02 0.000287968\n", + "3.579099761269e+01 1.52414 17.3205 1.30642 8.71025 13 13 13 5 0.02 0.000220016\n", + "1.674063083432e+01 1.29457 17.3205 0 14.4504 13 13 15 2 0.02 0.000498487\n", + "1.779197348711e+01 1.3228 17.3205 1.71196 14.4504 13 13 13 8 0.02 0.000287968\n", + "1.548740826516e+01 1.52415 17.3205 1.45407 14.4504 13 13 13 5 0.02 0.000220016\n", + "1.772169325356e+01 1.81957 73.0434 1.46573 12.2572 13 13 13 5 0.02 4.43422e-05\n", + "1.367065500196e+01 1.66003 73.0434 1.79487 12.2572 13 13 13 8 0.02 7.67586e-05\n", + "2.021960493499e+01 1.82061 73.0434 1.39205 12.2572 13 13 13 5 0.02 3.38788e-05\n", + "9.012246630357e+00 1.81529 73.0434 0 36.5717 13 8 15 15 0.02 7.67586e-05\n", + "7.462779538274e+00 1.82255 73.0434 1.81499 36.5717 13 13 13 8 0.02 3.38788e-05\n", + "1.030499912298e+01 1.80592 73.0434 1.81066 36.5717 13 13 13 8 0.02 4.43422e-05\n", + "4.227002356107e+00 2.43719 73.0434 0 60.8862 14 14 15 1 0.02 7.67586e-05\n", + "7.396288708628e+00 1.8216 73.0434 1.8216 60.8862 13 8 13 8 0.02 3.38788e-05\n", + "7.394728392218e+00 1.80919 73.0434 1.79091 60.8862 13 13 13 8 0.02 4.43422e-05\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -1067,10 +991,11 @@ " \n", " # grid_options\n", " amt_cores=2, # grid_options\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -1168,14 +1093,14 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" diff --git a/docs/build/doctrees/notebook_api_functionality.doctree b/docs/build/doctrees/notebook_api_functionality.doctree index d13dc561967683b55c3d7d9fa7e91bc39cca513f..890f5ccb12977bd94483fecef8e7c6d2aec58e81 100644 GIT binary patch delta 14628 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 delta 4735 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 b;7<W~UOUna_kcWYg^z5=oDucG(@XvdcL-{m diff --git a/docs/build/doctrees/notebook_custom_logging.doctree b/docs/build/doctrees/notebook_custom_logging.doctree index 9e84119cc3983c0cb2d071608c44147ef25ddab1..77f56e2c4e43522a91280b0629d7edbf60601b04 100644 GIT binary patch delta 2571 zcmds3TTC2f6rNdjVOVR~LXidt%<ifMh1vf)mj*3OOt!YNHN?v*QdSB&j`tc&N@4@8 z*l4$D;H;%FDJfbSE$IRsHQ<Y4G`<*Xt0q3llMg;NQR9>P&+byz#zeOvF?Am1eCM41 zoH^HjH~p(`^haM{#Q)~Y7Zw6X{2_l2?%kHLD|$2bU1`C%Q~t|M8%eQ@xCf)GQk<m4 zQtE!zwxS3rE0!|%1HQCLNO`f8yCd;uZx&L$SgN~!Jn*wp`Isz89WU%3yc?$XM%o!> z1R-Kkeeh01RHj)Lw%ApwYnXD~Q1cYBeOucZHwZBd-Qq<SYnFz_v5Dxag`C=|F`Y9+ z39^j8u^_6UnV4E!(3~Y)*?apgj!Z_8Zt~)=a3L(BS{gSPqgPFdN`f6RFR4OllQ%+^ zT4`Crxzu6#BwXz8F0pI(?Q1QuYt#E$OYNH6-%@HmiGg}0zX{3zQCe<dKvCeiXxKgQ z%!f5%3C-dqG~FE|O+on(q~2%_m>M%FgpM}vGzBn`POzz4Vo9)yHA<OoiAfhCE?9#w z%N%S+VowMYN>jyD<$s;}^fhkH>vap+)GcuE=u`4XfFEyz@6!#1Sbs~0>2)}Tu44^_ zR;Sm=rQ3C^)*r%Xt+;_6j9~xxJO1P4k_4lV)VXLPE5k!4HE28?f#EX|IRek04#Ssc zs^F`!Ak2>q0h->B!y_}Tf>y)FGxgASs2W1a4G?>)+S5(E){tX2zMW%*Svl;1n_zpM z_tf(znxX0Jt?<hURaoaNIw$W~HSV0Os@gf&tBNNUQ!x&z>V+elWO(w_@C_8}OYYhC z>SVba@c3=;$?Fz0&ORZ#aCkNv#v0;C=a?XaBC{~R++y6jsVO5EzL*U^{Ew%oN|1_4 zZm?A>enB{A+!U9-fpwj%^4E-f2@%BCDT3T~RGz=TKIyZYol6yxG}P~O`Xs4!H1kTP z#SWx@5^KX@DqH(6O7p|{$hrl#(BJ6$&py6m&aUXoR|J*^Vz4szscegBiADWA>e`y- znXycvR(83l;T8qPquYG73M`LPU$p{qOD!byO1QUeGfWxCr+J#_#IRE4)GP4f?#<qz zE3C$6zYD+LQwLr1L5Q0jkUdx9&dh&aCLed7et)s7!d4_HjfP-u0l}k-ugWP{Sv2J& zY+2gwc)EnMM_d*O=fQyYj^}VHCy$G^CY+>)hwPAOt8-Ccn>t?$;!KJ^QO+d~9q^0S bWe+8V59b>Xbqhbvw;mey(0A_g(r)=r*>$!i delta 3314 zcmeHJ-ES0C6yKS4+uDX^TWU9Hlij<tc3IeN@0~lJDh2!qkYX(rlU7oeEuFHiTVvUx zqGEs=iL&ME%tA;vL9`kZ9%wTrAQ(e@!I&uEKcFwZXh?ie-;CZn+pZ3xbQ%(kVKQ^i zx#w%n`Q6V0---EOMF0NEf^d1xf2gw2zl~}`4_fK!AuGKm&wF;U^6L;hlMUNbZEg2) z1MD)u_LcZIHC#?ya$=uXK5pQ0$t9QUmp6<p<8tbfQ~T$wKh+3>@cq!L)kIaXu4x8V z%+**za>6i(p_i$eAXL$iLty>(Xq?$gilVE;_&a+UmmPjhMmrq`6%#`4<iH$(c|20` zkQMEpeqr#OoL@;us(rZYh23WNJeULj)yfjyDuWMpObP|~YPjFiC_S+==53UIOT|2n z67%p{OW#NfoXJ;-1OJnP?7op2z7}QI8kMn~&R$*4<*v0TOZM9Rp;}=Qw!a<rYYB}i zu<USnlg1dGNV0;R^+ym%P^w5WG7`j~L}q<Wk`3ML#0t_VPRO!~2t|r}#^-N|D=#H3 zBoDtKT!tINaR}sF=aa<wh_RGlPLj|dH?u*nzFkzd=Pa#sShu&s9-sQ5A|Si=Pg#TP z@%O|lb#}vvtAhUQ=*rwgYWGNLBGuW=HixA7qWSzpF1a8?ku|9I>CKyCwP^l%)#2be zs32M$&~A0qam|Vcb|Lmcj}?KmwHyWy)&rUjG1?4$)6MYK$%d*@a9Ce#f*-AB$0SgQ zIVL@Y7KeU%Islj6taqDBjwzb1f=y5dM~aPqR?ijbAAu2!okVVJ2tN6XDER1;{f{R% znnQ7(dRG@Bq*T?GgQ2F;R5m-D+WB1EQAlOQ#sx)kES1YSN?JyR$B8{u?(QpdW;SP* zJ4?ncwg|vtz`^^XP=6b=C|oNJGF+ZwpWf)P@VJ-4?dYjV;okJRH@z0UuDnjK*95!! zOi&QVMHpAw;aD^b*Yy_o=$%pF0<@lOix>%A(<Q3vlBVjIU8gWRA5=nR1L+B>V-=ET zBirt1MUliDC1;C9gx#Yw8B>j4`6Nl@cfC>{BYev#;~|TlyO;$`zB}6Tl9&!>ZdChx zdxkUXM4vBqz}jc6O#AaU*@>mVs+s#20nd(^6?ZkUh4by-&7mD`&OBEAdI=yPW)obS zYK2|ze<mEVgCBlgA@thcp1W8fMB()LOF|g7&gw!Cre@bN$(OUi{&0=Y*PGeEu<gwR yIlm_zVAy7kFg{H)M;XbS5?FJLb9*aUbDVPne%74eTz?g7fOD^K&a&0H9^rR)$Bu*m diff --git a/docs/build/doctrees/notebook_luminosity_function_binaries.doctree b/docs/build/doctrees/notebook_luminosity_function_binaries.doctree new file mode 100644 index 0000000000000000000000000000000000000000..4ae3b628729370e197a3a44aab7d6644cbcc29b2 GIT binary patch literal 130454 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 EKY#O{WB>pF literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/notebook_luminosity_function_single.doctree b/docs/build/doctrees/notebook_luminosity_function_single.doctree new file mode 100644 index 0000000000000000000000000000000000000000..2943f8610c7fff7599bc92bd5c4b0695eeb1c9ec GIT binary patch literal 72896 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 U^_bBoRVH2$kX2Hko5k$^2d~pG3;+NC literal 0 HcmV?d00001 diff --git a/docs/build/doctrees/notebook_population.doctree b/docs/build/doctrees/notebook_population.doctree index 8dc7f0c81bcae8dba9df8e55481ed6ade245f1cd..daa813d00a85f0ed7e860603d3e1985cccfa8027 100644 GIT binary patch delta 18616 zcmeHP4Rlr2m1f_U<b@<nNCgrU$xZkPKgrEK=bn4dIY6*zsDu2NgdZIVq{+*R1cd|$ zGoy|MwTeqwQ|twgGox$7>ex|R8eTP6t0Hw=)B3|$U9MJ9q1rX8Gg?6D=!^`Veee6p z&wG%(mZ8q_Wo40ffA&6m@3YT7`+R#p-j9s_`)}uFZOz(M)0?#|7k;mL{~4yZdvdRG zmM^Jqu3Ols*XrHj^<B+v9h;_CZ0PI`w{~`3v$>*5Ph2#2b#`sJwxzqHb3?@pH#mCP zS>ducQju2yFwNcl>?AjozZ0q=pXHYYz;HKyeQczv=x`9s$X7~^2EmH_&!mE^Y<q3l zy60Rdo8vB=?11HNoxBL<>?#M-Jvq4-=0(0g<$i5ko{m4=QFUr#8dkZhD%S;L7wWaQ zV9GtaVWqop`s05P)x!~|x)`9%EnjqrdzWzsyzJgU-W=1?*4DA%>e-3G)$tIF8=Wwy z+X7?VuhE@@??hgwLC9SjT)lH`?UjEVpD;{VhZed*8#QW6>$+9=XU5GtZ`?V3ZT6M_ z5ousKP&`1wCU3fH)tF8wnUoN*CjO~uz>K>K?Clfd4>qTGMUh)@5>MEN;QxM@NVlj2 zxZb@_{vNhR?wkE)0PgnPW!t>p1i_7L{Q4{n?(se2KF>2E6BY(Fco=8uC-67!n#DDP zt?!<<__EX7zr;Pbcnv)68cRyxXYP?ZtK4ZzXANtIN_Wdr5}VHL>5<)<vlnNtE})(- zgBrK`@~7Y_-?t|$EOVXue}r$k@6_u_;?Hq;!`L%C`-+>puh4zIp?<=C<o-|~$v3v| z^OgIov2;YrUEp56tR${r`lKB>FZyCcmHcSgbMUJBz2$!eRelhtTd@t^h`hXFQNaEF znh6o}&r3D<g}Y}>X{2S<#{h5nAFo|~F~Fh7o;BxbIqxE~j{*v&K&^Xus0cpr=X^oS z1PwmIIbZGmIMlBFOMx;Zl(=)+ej5yhH*{|bw?(SM8}kGB!F`~s@ysuD-S|)Ee}cp8 z&q^}gl@ArTH}5m<Sqw#P*G)$g%!{^9j55FZ&L(a6cUGvwOSM9GhpG$C2Y;lfb@J{# z0Cz`TxpzetdUW}NjoN+StM|zL4{Gp8<gy3e1oThu!QSYDhaZ$h+Hb&DymoIpd@pj< z6Dzg2SnjDGu1dbO9Q|X>`A5BRPi7};$lL~26WOz`7ZPlC|F}WjUkX7;`RqHv9L?ty z)#3VQ4nUb(`)ml_z#0B2OpRRg+}k-&8M*Yuy8<vH^7>CL2+r~-7UV>yvFDQ_AgVV2 zQ{7{e3nF*DRF(_%-u0Tu=r{6nU}a?7TY;S5dXHvuFgnW8!w2B@Nb!*;Ab8hMUU&EN zTJ(NzKD^-ba#tOFB+s@;YshMKT7+A0tZne+M1S2pbgUj1|L>07l;8jEJon(CYWK0@ zR}Z@P5AWG-<HvQufAz+HJ0{o5A0I&f{njVjV5+*Aq9L3UJ@9Vi$rE>Ka5ysm(|fYu zSMK~zOWk9ipBTMs)F>F`{X{-E`JSeIpsACSp#lCqA^#H%&>Vozyz3WWvpSXsyNVfO zCKW<3OPDq@B~u$Gz)W@cX{b^9`4ChGvteQtGl(Urw1`P;;e=<IL?;H7jB;JzBZoS= zX_zK8DRb100+?P+4PjC#93~xNlNg0%Ia2BbUzHB`DTqxaW$Nw%sH`T2bdVL{4s*DS zlSpneolpZ`WKj}g+h&x+AO?!yn1oRxg&iYdoHJV|wqY}2`6Q;`l$myX7}OFqr8eH= zF&dlO9CebOQc=lF#}?9xl1PIHB01qW2=j(9QGG{nCUj~Ul37vpO(wY`RdFs%H@G29 z+p>_WgDS;HIH!W^R2rO65tYp1wlqa_7;Z3|5J@>>Xp|U@AWYi2<rt_#l!OYLi<kkp zVWEL7i*d>=&t{%vf|^3;%r>~~kQfcYiI)B_C>qi@I4&a&i;E^Gp_Xnt1{bD`(hvuA zPK?7$hHv9Qj!FB+;Y{bI!BE8*4W*V99j6-AVK_0I;uJ|UPD5~xb%D<;$#t|hGp%rS zY;I6AhDIY?pz~OXVTg?+#1w{Y3f(azm$aW|wMSzLDo`>e`mJU=mX6{Yj*V&=loRID z;Jv*1L^4|4PDQKTE=3y;w==UX)Jk}Jh%!N1oHi>IZc|4}U`Em4MMBi^Ct-XsMN`>m zHE!F~w9u8*{8G5IXl_l{rtrL-v4kwM$}+1gv&zo;DpRY9Aq=O~^Tkk#8}e(5FyY<G za@C<yxNW#CZEAYES@}emndWY`@qCz(=5FSZq`RBNhDm2P^M^@mHzUfYNpm~%Me_pl z$hWiDFllXP{WK%r&SEraZD(<H(%8=8!=$sFc{E?F?JSg8Tq92v{VC5ZE-#5oCs+K^ zF0Lm3*slJf4C>$l^>i703bXqnI$Roni`3_np;229P`!5m>DxL5PJp&F;2q4>>(ihe zR;$^SFjF6PWBqUj98XGLKb#433njB91}8&WHW7|`bvjIn-NQ2gCbUwh|DFyP7CV9& z)W%g{;YmhvF4c}%z={Os)|kRm2Xk>p*lOJj;9p3oOz#}7##A8&P(>hLT~h^xFvCM7 z)H?>03~$22Rq$kz34d7w#!wR;sfH3KYSy?3d6iz--Pzr8ZBz65md%@+nm29PP&r#q zw&|W47^nWygbR`k`+y0vqj1UpFQK=?RjQhxPq(V66js5z9)R&UtnD)_xK#_T3n0uf zGtY-?)JrR&Nb8C@J9og;wCj9l?|V_e(*@Aecgq4eSP;D5BiftiV>W7ABOK74i4v*5 zUIu${uc}#&D{0Yk=pFF+(Y~LofD+JNiY^~{1+;4yXRF;;fEo;j*3`6iY-rhZU2~}U z>P;PO&BHFPp6d}LIT?byKa$TYS3=!j7VdeAD^z70oTq-C1@fzd&!3p^<)tbOBxwF? z9TXMesax8%&ABNpL=Y6T!m<WLZxCECZHGI8AUvXXZR%`oY3;bSqx(AV08dOrElgoK z43PtAGb=A{5`9TC(ecRZAi834gf<Y^;hc|*EgsJ;$FT$+l@ZMlHXqE^LNEZObf}Ps z%1GO^e75z&NozWk5=4V2K_tU+EH;>}7q<|t5R5vu<ff25*Ncbc${Z;KN=gy9awr#h zgOBtX-}%z|4m#VJ*AM1BgMH`Q`^Kvs>!BWAQ%BZAsrKD$5Aau8g*Hyj+W<G#pQ$d^ zxgi#jnwmpReoSf_QBaz5_PJt+nyd<MfGNY)c;=oqWO=2+Vab;y1+Ld_g_X;OGyLfS z7g|nV(v&)MjfnB-LRW%uis0ojZX8bH(*>^t<K*z=@lD?a)$t#}g&D^?(?atK&>6>z zFO{?Dc;lmIoN2e=8RysPn%m%0?el<YyB*eQYXe@%R(*Iod<Q`7*aj~{K&`$58ez2h z!5#2{cB;@l_5R$x`a9vqoYY+z>YW|XKBz6@$=z^K&cHh>6Bp!dn4?zQ3xAflgMA!A zy>~Cvox7oG)w3T%Vc%2Vh0&nx%<>O(<&R=Uy1>s!FI0sSVA&ZE%-MRF*&**dCR(xP zz|2r94^wKkvlh#Cs5JTMD;8t0z-C(#3o=-hvxH@<i%Mak`bHm&QQzu?X+7yw`8d{@ zuzn_mSG@6xDrpt`h7$Xwzn+oS{*tNFsRAZb#}L$>k(4TiQm2Ra45c0ftM<feai=X4 zCX=UuuqG1^!CHIHSUXHfK4RE4nK~IG>hTJfsSAoJ$VZOFrXWs<%J!tLGNvL=r`|Yt znG88hEWnnDxn99A@6xb(><T>aWdgwP#s8sGl3p7?GIb^Z_`L&P_5jd!E&_meBAoIB z)L-y-SqNrT6ePDy-H<pV)~NlDf;{KxfXHM5BWMj88b&giz=-;ZhMFx^wdhZs353o; zAW$3kLx~UUYncU~N&RE(ahcSAXfI)kcyabq|8uqAJK#s^?fnRX9Lnl@<9XPv!I3EB z@oygFLDlCkz+NqXd>r@q8T38(E?ky9Hq}>BlEII@F|R^j!9aLp5c+Y;z$Y=_<J^r^ z+lR;pmf?11`=AFqfuKis&@01Ts7{q@-_R&mEfw0dV(h+j1a>2HY*J;|9&33W$<u+W z{S{i5Zem?VV6SG#ZV%(BpS75XdxWg8lwsOV+o%tJB=O*?xEIDv#Kv3fVm57LjwLZd z_-4JkQ^%UDj)RvK!(0yx$yd+(Cv2_4{$?Vvh1qnlF*e@v?3kvB$Om@NQbavWEQn!Y z3EOv%6l&wk5e#91=OLD1*%B-0%)xpVuIpH@G!yD*kv9Gkf_<sB?)UP>8hT@d)WDIv zqMbw_Lc|EMFlN%kh{UjkO{AJ%sZByVpov7DW!PMr5?hZ6R^wx2Hf03crelH<!!jL4 zeX<@zi%jC6m=0&AV_~(A`K`7wG3|l+5#}}5A|tPt_B3K64#XvP3R|c=NpyNsY;f)$ z9v?_-;q|zIsk*+ZmB^U%s1edJJWxAWZ5tpxf=UVL8Fr?lSW#hA{TOY0zZMuVi6bp) zqaVb`u~!?l;Fe)B3uVXlWSgV()T;-gEu*?%SFl&{q&jl77^NPLg+{R)j-B5&nn=dk zIXLUq0Crq5(Sza)<>z;FQ=Ow>y(W2&AH@NX5jKWny)-^Ih;m?CcE5PoMd3kcL)pc| zvka`83Lj?6lUSjp*kbQkJ?Qpc@464!cun*Pex}zej&0{Cprzv+c%AT3MF$FoSr?Wz z(b+74izv>BQrk{2!ai~=*2;nGqNelo>_Ni~l#Cdrg<499@*yS|b$a|pfkb;G=0OnC zaZ>XeG7ktrQ(RaS=aiUHJt<BTCviP{@VfxIV;Vv@IHNep_=}pRQWQ}x{DK44fALR3 zQQ{1g3q7cxnQt}kAKyC$DvADx-wyEG?^jTgU}mEC58&o4Mlz6Hztx6lIRp#JL_@T= ziC*M~(M&Xq#~&}2XQE;9a?C`-c-Z+<N5i_a5e+?HtiD{Uhey=za;;R`7mT+`Z21D^ zhJQO-+mXo)z1%mG8)9mi$qnPFW`CCRWzP*SISbKn06Lh7gPE)_b4Jdbk%wXxU-&cf z*@}Zx)o+(-b-`D%v0nPif@t&q+RL>A+V8SeRlRl-c8@()uXT*xbuice?+-@xjcw2l G=Ke23`sN=1 literal 154083 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 X=<$2>W1bqR2CV~9Ws=!4*h>HZAl+uP diff --git a/docs/build/doctrees/readme_link.doctree b/docs/build/doctrees/readme_link.doctree index fd66cbc8cbd1f29cc2332d668bdbc6c429422a30..e0d5b1779a1d966852f4d94e2b0fac30f86115b8 100644 GIT binary patch delta 877 zcmeCV#5m&yBWnZ8RNkD8tV^_5Bf=RO7$&dQn##xpB&F0d3lvK8GV_W{5_57Ck}~rW ziz<@~DoZl*^Ayz76pC^cQZkE6^tC2G)DoHOU}Qd-Tib>TW|&RBubohTDkLMbSfM-< zXmfH-YGR&3Nk*zdQfX#R3eeV~)Z~)<qDmcwqSV~{GN3q$+tP~ibHU2XQuE5-YC!ry z?o}vAOwLYBPc7C_NX$zCsmlWz12#D`FC8pal$t3H@ij;Uq!Fq|Phqlyj_n|Jo7v<o zI_``?oB!x6V`L23yjX7v6Jyxqel2OnXJo|aq{;k7>}2V@$rhC%ofX79d4j6SWM|_> z#@NkAjXyFo#!udEo(1G6S%fk&CT*^;v}a^YnY_a)m@#Q`g1y{iE$d>&^v(0E)0r7F zC$rf{GNuECr!wYj{${Vs$e1@-#W9vK2dr{|V=-glWD%#8jK!1pIo)9^1KM|vWpbf_ z+T@e&f|Eb+a&La*yqlS^eDXZ^G{&;Yc~KIRWjz`gD>u*c2x4Na+5FL~fn%~lI15u6 zD@fPoxxvlMjCGq8!=Ey-)dLNC1Qwn=H&}4;eIYHz8lVYfjEz9MG&l1_yE3x10M!Vx kfh}~1=i1yE)6K-z3KY|TiN!OvOkNNl!C1KYXS^^c0Ibb7jsO4v delta 389 zcmXwx-7AA(7>E14@7^^@%oI@~AGKve*_+HJvr&Xh<ZEoNVk~Q{p?oyWkrr}W?GJE5 zOV)G7i4)~WA*Fnk+NmtZ%42eJ_v^a4?!+TvcaS2gIObB)kwJ*XNn01Ek0uTN){8lx zR*Wu~Y06~HUYUILT^OL0v4maM?*fB-7PCO(hJYd3Gn5LkbN<9bhfNCp*EqeJyVRq; zvU!(C`!&_nFK=Oj-O3qJJ;~{nNGU}}Pc1G^O_m|R%eGtFAWd^wMQ2J8JzFjCQlnf> zvMq!ec4C_qB_G$_S#7YlV<xM2>?`myp~DC)P=mt_e-<YlAq1(yd5k5>xb^hqWa==_ zZ&b8cP)iTpTKde(WgndvqI#M0^gp*COxm6VR(~^g-=i0>#=d(a8mzO;;ZqSC%s7@7 vq)i^Z6Z)Fzt<Zoq-jvXRdlC_raR-1X^Gsa|*rrNl2T@8YBM35ST9@+!i%5$R diff --git a/docs/build/html/_images/notebook_luminosity_function_binaries_20_1.png b/docs/build/html/_images/notebook_luminosity_function_binaries_20_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1782b3a11abd6e0f188902b49f69eb32319f1b GIT binary patch literal 57125 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 z�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 literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/notebook_luminosity_function_single_20_1.png b/docs/build/html/_images/notebook_luminosity_function_single_20_1.png new file mode 100644 index 0000000000000000000000000000000000000000..8895750e8fce660f5b0b948fe506a414af7a4517 GIT binary patch literal 25029 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 literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/notebook_luminosity_function_single_26_1.png b/docs/build/html/_images/notebook_luminosity_function_single_26_1.png new file mode 100644 index 0000000000000000000000000000000000000000..fc990e6c4cb03cb8f70d8d5355c9f765558752b2 GIT binary patch literal 23856 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 Bq80!E literal 0 HcmV?d00001 diff --git a/docs/build/html/_images/notebook_luminosity_function_single_34_0.png b/docs/build/html/_images/notebook_luminosity_function_single_34_0.png new file mode 100644 index 0000000000000000000000000000000000000000..980e3e44d1aa73fd9907fbe0a6cf485ba5ef811c GIT binary patch literal 30847 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 b8(H-|;KfX|vjbt=Qxp|c{!ZL)c<p}xLVAz{ literal 0 HcmV?d00001 diff --git a/docs/build/html/_modules/binarycpython/utils/custom_logging_functions.html b/docs/build/html/_modules/binarycpython/utils/custom_logging_functions.html index de6d5f80a..310a1536f 100644 --- a/docs/build/html/_modules/binarycpython/utils/custom_logging_functions.html +++ b/docs/build/html/_modules/binarycpython/utils/custom_logging_functions.html @@ -644,9 +644,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/distribution_functions.html b/docs/build/html/_modules/binarycpython/utils/distribution_functions.html index 1cddf50cc..93d532d7a 100644 --- a/docs/build/html/_modules/binarycpython/utils/distribution_functions.html +++ b/docs/build/html/_modules/binarycpython/utils/distribution_functions.html @@ -2482,9 +2482,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/functions.html b/docs/build/html/_modules/binarycpython/utils/functions.html index 4e1bbc15d..c3af7ccd6 100644 --- a/docs/build/html/_modules/binarycpython/utils/functions.html +++ b/docs/build/html/_modules/binarycpython/utils/functions.html @@ -187,6 +187,8 @@ <span class="kn">import</span> <span class="nn">h5py</span> <span class="kn">import</span> <span class="nn">numpy</span> <span class="k">as</span> <span class="nn">np</span> +<span class="kn">import</span> <span class="nn">astropy.units</span> <span class="k">as</span> <span class="nn">u</span> + <span class="kn">from</span> <span class="nn">binarycpython</span> <span class="kn">import</span> <span class="n">_binary_c_bindings</span> <span class="kn">import</span> <span class="nn">binarycpython.utils.moe_di_stefano_2017_data</span> <span class="k">as</span> <span class="nn">moe_di_stefano_2017_data</span> @@ -195,6 +197,44 @@ <span class="c1">########################################################</span> <span class="c1"># Unsorted</span> <span class="c1">########################################################</span> +<div class="viewcode-block" id="AutoVivificationDict"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.AutoVivificationDict">[docs]</a><span class="k">class</span> <span class="nc">AutoVivificationDict</span><span class="p">(</span><span class="nb">dict</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Implementation of perl's autovivification feature, by overriding the</span> +<span class="sd"> get item and the __iadd__ operator (https://docs.python.org/3/reference/datamodel.html?highlight=iadd#object.__iadd__)</span> + +<span class="sd"> This allows to set values within a subdict that might not exist yet:</span> + +<span class="sd"> Example:</span> +<span class="sd"> newdict = {}</span> +<span class="sd"> newdict['example']['mass'] += 10</span> +<span class="sd"> print(newdict)</span> +<span class="sd"> >>> {'example': {'mass': 10}}</span> +<span class="sd"> """</span> + + <span class="k">def</span> <span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">):</span> + <span class="k">try</span><span class="p">:</span> + <span class="k">return</span> <span class="nb">dict</span><span class="o">.</span><span class="fm">__getitem__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">item</span><span class="p">)</span> + <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> + <span class="n">value</span> <span class="o">=</span> <span class="bp">self</span><span class="p">[</span><span class="n">item</span><span class="p">]</span> <span class="o">=</span> <span class="nb">type</span><span class="p">(</span><span class="bp">self</span><span class="p">)()</span> + <span class="k">return</span> <span class="n">value</span> + + <span class="k">def</span> <span class="fm">__iadd__</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">other</span><span class="p">):</span> + <span class="c1"># if a value does not exist, assume it is 0.0</span> + <span class="k">try</span><span class="p">:</span> + <span class="bp">self</span> <span class="o">+=</span> <span class="n">other</span> + <span class="k">except</span><span class="p">:</span> + <span class="bp">self</span> <span class="o">=</span> <span class="n">other</span> + <span class="k">return</span> <span class="bp">self</span></div> + +<div class="viewcode-block" id="bin_data"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.bin_data">[docs]</a><span class="k">def</span> <span class="nf">bin_data</span><span class="p">(</span><span class="n">value</span><span class="p">,</span> <span class="n">binwidth</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Function that bins the data</span> + +<span class="sd"> Uses the absolute value of binwidth</span> +<span class="sd"> """</span> + + <span class="k">return</span> <span class="p">((</span><span class="mf">0.5</span> <span class="k">if</span> <span class="n">value</span> <span class="o">></span> <span class="mf">0.0</span> <span class="k">else</span> <span class="o">-</span><span class="mf">0.5</span><span class="p">)</span> <span class="o">+</span> <span class="nb">int</span><span class="p">(</span><span class="n">value</span><span class="o">/</span><span class="nb">abs</span><span class="p">(</span><span class="n">binwidth</span><span class="p">)))</span> <span class="o">*</span> <span class="nb">abs</span><span class="p">(</span><span class="n">binwidth</span><span class="p">)</span></div> + <div class="viewcode-block" id="convert_bytes"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.convert_bytes">[docs]</a><span class="k">def</span> <span class="nf">convert_bytes</span><span class="p">(</span><span class="n">size</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Function to return the size + a magnitude string</span> @@ -451,6 +491,51 @@ <span class="k">yield</span> <span class="n">val</span><span class="o">.</span><span class="vm">__name__</span></div> + +<div class="viewcode-block" id="convfloat"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.convfloat">[docs]</a><span class="k">def</span> <span class="nf">convfloat</span><span class="p">(</span><span class="n">x</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Convert scalar x to a float if we can, in which case return the float, otherwise just return x without changing it. Usually, x is a string, but could be anything that float() can handle without failure.</span> +<span class="sd"> """</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">y</span> <span class="o">=</span> <span class="nb">float</span><span class="p">(</span><span class="n">x</span><span class="p">)</span> + <span class="k">return</span> <span class="n">y</span> + <span class="k">except</span> <span class="ne">ValueError</span><span class="p">:</span> + <span class="k">return</span> <span class="n">x</span></div> + +<div class="viewcode-block" id="datalinedict"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.datalinedict">[docs]</a><span class="k">def</span> <span class="nf">datalinedict</span><span class="p">(</span><span class="n">line</span> <span class="p">:</span> <span class="nb">str</span><span class="p">,</span> + <span class="n">parameters</span> <span class="p">:</span> <span class="nb">list</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Convert a line of data to a more convenient dictionary.</span> +<span class="sd"> Arguments:</span> +<span class="sd"> line = a line of data as a string</span> +<span class="sd"> parameters = a list of the parameter names</span> + +<span class="sd"> Note: if the parameter is a floating point number, it will be converted to Python's float type.</span> +<span class="sd"> """</span> + + <span class="k">return</span> <span class="p">{</span><span class="n">param</span><span class="p">:</span><span class="n">convfloat</span><span class="p">(</span><span class="n">value</span><span class="p">)</span> <span class="k">for</span> <span class="n">param</span><span class="p">,</span> <span class="n">value</span> <span class="ow">in</span> <span class="nb">zip</span><span class="p">(</span><span class="n">parameters</span><span class="p">,</span> <span class="n">line</span><span class="o">.</span><span class="n">split</span><span class="p">())}</span></div> + +<div class="viewcode-block" id="pad_output_distribution"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.pad_output_distribution">[docs]</a><span class="k">def</span> <span class="nf">pad_output_distribution</span><span class="p">(</span><span class="n">dist</span> <span class="p">:</span> <span class="nb">dict</span><span class="p">,</span> + <span class="n">binwidth</span> <span class="p">:</span> <span class="nb">float</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Given a distribution, dist (a dictionary), which should be binned every binwidth (float), fill the distribution with zeros when there is no data. Note: this changes the data in place.</span> +<span class="sd"> """</span> + + <span class="c1"># sorted list of the keys</span> + <span class="n">skeys</span> <span class="o">=</span> <span class="nb">sorted</span><span class="p">(</span><span class="n">dist</span><span class="o">.</span><span class="n">keys</span><span class="p">(),</span> <span class="n">key</span> <span class="o">=</span> <span class="k">lambda</span> <span class="n">x</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">x</span><span class="p">))</span> + + <span class="c1"># get min and max, offset by the binwidth</span> + <span class="n">min_val</span> <span class="o">=</span> <span class="n">skeys</span><span class="p">[</span> <span class="mi">0</span><span class="p">]</span> <span class="o">-</span> <span class="n">binwidth</span> + <span class="n">max_val</span> <span class="o">=</span> <span class="n">skeys</span><span class="p">[</span><span class="o">-</span><span class="mi">1</span><span class="p">]</span> <span class="o">+</span> <span class="n">binwidth</span> + + <span class="c1"># pad with zeros</span> + <span class="n">x</span> <span class="o">=</span> <span class="n">min_val</span> + <span class="k">while</span> <span class="n">x</span> <span class="o"><=</span> <span class="n">max_val</span><span class="p">:</span> + <span class="n">dist</span><span class="p">[</span><span class="n">x</span><span class="p">]</span> <span class="o">=</span> <span class="n">dist</span><span class="o">.</span><span class="n">setdefault</span><span class="p">(</span><span class="n">x</span><span class="p">,</span><span class="mf">0.0</span><span class="p">)</span> + <span class="n">x</span> <span class="o">+=</span> <span class="n">binwidth</span> + + <span class="k">return</span> <span class="n">dist</span></div> + <div class="viewcode-block" id="catchtime"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.catchtime">[docs]</a><span class="k">class</span> <span class="nc">catchtime</span><span class="p">(</span><span class="nb">object</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Context manager to calculate time spent</span> @@ -545,7 +630,6 @@ <span class="k">if</span> <span class="n">verbosity</span> <span class="o">>=</span> <span class="n">minimal_verbosity</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span><span class="n">message</span><span class="p">)</span></div> - <div class="viewcode-block" id="remove_file"><a class="viewcode-back" href="../../../functions.html#binarycpython.utils.functions.remove_file">[docs]</a><span class="k">def</span> <span class="nf">remove_file</span><span class="p">(</span><span class="n">file</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> <span class="n">verbosity</span><span class="p">:</span> <span class="nb">int</span> <span class="o">=</span> <span class="mi">0</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> <span class="sd">"""</span> <span class="sd"> Function to remove files but with verbosity</span> @@ -1033,7 +1117,7 @@ <span class="sd"> Args:</span> <span class="sd"> output: binary_c output string</span> -<span class="sd"> selected_header: string header of the output (the start of the line that you want to </span> +<span class="sd"> selected_header: string header of the output (the start of the line that you want to</span> <span class="sd"> process)</span> <span class="sd"> Returns:</span> @@ -1712,7 +1796,7 @@ <span class="sd"> """</span> <span class="c1"># Set up new dict</span> - <span class="n">new_dict</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> <span class="c1"># TODO: check if this still works</span> + <span class="n">new_dict</span> <span class="o">=</span> <span class="n">OrderedDict</span><span class="p">()</span> <span class="c1"># TODO: check if this still necessary</span> <span class="c1">#</span> <span class="n">keys_1</span> <span class="o">=</span> <span class="n">dict_1</span><span class="o">.</span><span class="n">keys</span><span class="p">()</span> @@ -1747,19 +1831,17 @@ <span class="c1"># Go over the common keys:</span> <span class="k">for</span> <span class="n">key</span> <span class="ow">in</span> <span class="n">overlapping_keys</span><span class="p">:</span> - <span class="c1"># See whether the types are actually the same</span> + <span class="c1"># If they keys are not the same, it depends on their type whether we still deal with them at all, or just raise an error</span> <span class="k">if</span> <span class="ow">not</span> <span class="nb">type</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="ow">is</span> <span class="nb">type</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">]):</span> - <span class="c1"># Exceptions:</span> - <span class="k">if</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="ow">in</span> <span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">])</span> <span class="ow">and</span> <span class="p">(</span> - <span class="nb">type</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="ow">in</span> <span class="p">[</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">]</span> - <span class="p">):</span> + <span class="c1"># Exceptions: numbers can be added</span> + <span class="k">if</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">))</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="p">(</span><span class="nb">int</span><span class="p">,</span> <span class="nb">float</span><span class="p">,</span> <span class="n">np</span><span class="o">.</span><span class="n">float64</span><span class="p">)):</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> - <span class="c1"># Exceptions:</span> - <span class="k">elif</span> <span class="p">(</span><span class="nb">type</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="ow">in</span> <span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">OrderedDict</span><span class="p">])</span> <span class="ow">and</span> <span class="p">(</span> - <span class="nb">type</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> <span class="ow">in</span> <span class="p">[</span><span class="nb">dict</span><span class="p">,</span> <span class="n">OrderedDict</span><span class="p">]</span> - <span class="p">):</span> + + <span class="c1"># Exceptions: versions of dicts can be merged</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">OrderedDict</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">AutoVivificationDict</span><span class="p">)))</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="p">(</span><span class="nb">dict</span><span class="p">,</span> <span class="n">OrderedDict</span><span class="p">,</span> <span class="nb">type</span><span class="p">(</span><span class="n">AutoVivificationDict</span><span class="p">))):</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">merge_dicts</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> + <span class="c1"># If the above cases have not dealt with it, then we should raise an error</span> <span class="k">else</span><span class="p">:</span> <span class="nb">print</span><span class="p">(</span> <span class="s2">"Error key: </span><span class="si">{}</span><span class="s2"> value: </span><span class="si">{}</span><span class="s2"> type: </span><span class="si">{}</span><span class="s2"> and key: </span><span class="si">{}</span><span class="s2"> value: </span><span class="si">{}</span><span class="s2"> type: </span><span class="si">{}</span><span class="s2"> are not of the same type and cannot be merged"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> @@ -1793,6 +1875,10 @@ <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">list</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">list</span><span class="p">):</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> + <span class="c1"># Astropy quantities (using a dummy type representing the numpy array)</span> + <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">type</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">u</span><span class="o">.</span><span class="n">m</span><span class="p">))</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">type</span><span class="p">(</span><span class="n">np</span><span class="o">.</span><span class="n">array</span><span class="p">([</span><span class="mi">1</span><span class="p">])</span><span class="o">*</span><span class="n">u</span><span class="o">.</span><span class="n">m</span><span class="p">)):</span> + <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">+</span> <span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> + <span class="c1"># dicts</span> <span class="k">elif</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">dict</span><span class="p">)</span> <span class="ow">and</span> <span class="nb">isinstance</span><span class="p">(</span><span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="nb">dict</span><span class="p">):</span> <span class="n">new_dict</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">merge_dicts</span><span class="p">(</span><span class="n">dict_1</span><span class="p">[</span><span class="n">key</span><span class="p">],</span> <span class="n">dict_2</span><span class="p">[</span><span class="n">key</span><span class="p">])</span> @@ -1928,7 +2014,7 @@ <span class="sd"> When the keys of the current dictionary are of mixed type, we first find all the unique types.</span> <span class="sd"> Sort that list of type names. Then find the values that fit that type.</span> -<span class="sd"> Sort those and append them to the sorted keys list. </span> +<span class="sd"> Sort those and append them to the sorted keys list.</span> <span class="sd"> This is done until all the keys are sorted.</span> <span class="sd"> All objects other than dictionary types are directly return as they are</span> @@ -1949,7 +2035,7 @@ <span class="c1"># If there are multiple types, then we loop over them and do a piece wise sort</span> <span class="k">if</span> <span class="nb">len</span><span class="p">(</span><span class="n">all_types_keys</span><span class="p">)</span> <span class="o">></span> <span class="mi">1</span><span class="p">:</span> <span class="n">msg</span> <span class="o">=</span> <span class="s2">"Different types in the same dictionary key set"</span> - + <span class="c1"># Create a string repr of the type name to sort them afterwards</span> <span class="n">str_types</span> <span class="o">=</span> <span class="p">{</span><span class="nb">repr</span><span class="p">(</span><span class="n">el</span><span class="p">):</span><span class="n">el</span> <span class="k">for</span> <span class="n">el</span> <span class="ow">in</span> <span class="n">all_types_keys</span><span class="p">}</span> @@ -2190,9 +2276,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/grid.html b/docs/build/html/_modules/binarycpython/utils/grid.html index 12c1a2512..ac7f7eae8 100644 --- a/docs/build/html/_modules/binarycpython/utils/grid.html +++ b/docs/build/html/_modules/binarycpython/utils/grid.html @@ -161,9 +161,6 @@ <span class="sd">Here all the functionality of a Population object is defined.</span> -<span class="sd">Useful for the user to understand the functionality,</span> -<span class="sd">but copying functionality isn't recommended except if you know what you are doing</span> - <span class="sd">Tasks:</span> <span class="sd"> - TODO: add functionality to 'on-init' set arguments</span> <span class="sd"> - TODO: add functionality to return the initial_abundance_hash</span> @@ -178,8 +175,7 @@ <span class="sd"> - TODO: fix the correct object types for the default values of the bse_options</span> <span class="sd"> - TODO: uncomment and implement the HPC functionality</span> <span class="sd"> - TODO: think of a clean and nice way to unload and remove the custom_logging_info library from memory (and from disk)</span> -<span class="sd"> - TODO: think of a nice way to remove the loaded grid_code/ generator from memory. </span> -<span class="sd"> - TODO: Create a designated dict for results</span> +<span class="sd"> - TODO: think of a nice way to remove the loaded grid_code/ generator from memory.</span> <span class="sd">"""</span> <span class="kn">import</span> <span class="nn">os</span> @@ -194,6 +190,7 @@ <span class="kn">import</span> <span class="nn">argparse</span> <span class="kn">import</span> <span class="nn">importlib.util</span> <span class="kn">import</span> <span class="nn">multiprocessing</span> +<span class="kn">import</span> <span class="nn">resource</span> <span class="kn">from</span> <span class="nn">typing</span> <span class="kn">import</span> <span class="n">Union</span><span class="p">,</span> <span class="n">Any</span> <span class="kn">from</span> <span class="nn">collections</span> <span class="kn">import</span> <span class="p">(</span> <span class="n">OrderedDict</span><span class="p">,</span> @@ -231,9 +228,9 @@ <span class="n">recursive_change_key_to_string</span><span class="p">,</span> <span class="n">multiply_values_dict</span><span class="p">,</span> <span class="n">format_ensemble_results</span><span class="p">,</span> + <span class="n">AutoVivificationDict</span><span class="p">,</span> <span class="p">)</span> - <span class="c1"># from binarycpython.utils.hpc_functions import (</span> <span class="c1"># get_condor_version,</span> <span class="c1"># get_slurm_version,</span> @@ -254,6 +251,7 @@ <span class="kn">from</span> <span class="nn">binarycpython</span> <span class="kn">import</span> <span class="n">_binary_c_bindings</span> +<span class="n">secs_per_day</span> <span class="o">=</span> <span class="mi">86400</span> <span class="c1"># probably needs to go somewhere more sensible</span> <div class="viewcode-block" id="Population"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population">[docs]</a><span class="k">class</span> <span class="nc">Population</span><span class="p">:</span> <span class="sd">"""</span> @@ -286,6 +284,9 @@ <span class="c1"># Custom options</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span> <span class="o">=</span> <span class="p">{}</span> + <span class="c1"># shared memory used for logging</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span> <span class="o">=</span> <span class="p">{}</span> + <span class="c1"># Load M&s options</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">]</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">moe_di_stefano_default_options</span><span class="p">)</span> @@ -307,7 +308,8 @@ <span class="bp">self</span><span class="o">.</span><span class="n">process_ID</span> <span class="o">=</span> <span class="mi">0</span> <span class="c1"># Create location to store results. Users should write to this dictionary.</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_results</span> <span class="o">=</span> <span class="p">{}</span> + <span class="c1"># The AutoVivificationDict allows for perls method of accessing possibly non-existant subdicts</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_results</span> <span class="o">=</span> <span class="n">AutoVivificationDict</span><span class="p">()</span> <span class="c1"># Create location where ensemble results are written to</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_ensemble_results</span> <span class="o">=</span> <span class="p">{}</span> @@ -523,6 +525,64 @@ <span class="p">):</span> <span class="k">return</span> <span class="n">grid_variable</span> +<div class="viewcode-block" id="Population.update_grid_variable"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.update_grid_variable">[docs]</a> <span class="k">def</span> <span class="nf">update_grid_variable</span><span class="p">(</span> + <span class="bp">self</span><span class="p">,</span> + <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> + <span class="o">**</span><span class="n">kwargs</span> + <span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> + <span class="sd">"""</span> +<span class="sd"> Function to update the values of a grid variable.</span> + +<span class="sd"> Args:</span> +<span class="sd"> name:</span> +<span class="sd"> name of the grid variable to be changed.</span> +<span class="sd"> **kwargs:</span> +<span class="sd"> key-value pairs to override the existing grid variable data. See add_grid_variable for these names.</span> +<span class="sd"> """</span> + + <span class="n">grid_variable</span> <span class="o">=</span> <span class="kc">None</span> + <span class="k">try</span><span class="p">:</span> + <span class="n">grid_variable</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_grid_variables"</span><span class="p">][</span><span class="n">name</span><span class="p">]</span> + <span class="k">except</span> <span class="ne">KeyError</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s2">"Unknown grid variable </span><span class="si">{}</span><span class="s2"> - please create it with the add_grid_variable() method."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">name</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">KeyError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span> + + <span class="k">for</span> <span class="n">key</span><span class="p">,</span><span class="n">value</span> <span class="ow">in</span> <span class="n">kwargs</span><span class="o">.</span><span class="n">items</span><span class="p">():</span> + <span class="n">grid_variable</span><span class="p">[</span><span class="n">key</span><span class="p">]</span> <span class="o">=</span> <span class="n">value</span> + <span class="n">verbose_print</span><span class="p">(</span> + <span class="s2">"Updated grid variable: </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span><span class="n">grid_variable</span><span class="p">,</span> <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">)),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> + <span class="mi">1</span><span class="p">,</span> + <span class="p">)</span></div> + +<div class="viewcode-block" id="Population.rename_grid_variable"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.rename_grid_variable">[docs]</a> <span class="k">def</span> <span class="nf">rename_grid_variable</span><span class="p">(</span> + <span class="bp">self</span><span class="p">,</span> + <span class="n">oldname</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> + <span class="n">newname</span><span class="p">:</span> <span class="nb">str</span> + <span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> + <span class="sd">"""</span> +<span class="sd"> Function to rename a grid variable.</span> + +<span class="sd"> note: this does NOT alter the order</span> +<span class="sd"> of the self.grid_options["_grid_variables"] dictionary.</span> + +<span class="sd"> The order in which the grid variables are loaded into the grid is based on their</span> +<span class="sd"> `grid_variable_number` property</span> + +<span class="sd"> Args:</span> +<span class="sd"> oldname:</span> +<span class="sd"> old name of the grid variable</span> +<span class="sd"> newname:</span> +<span class="sd"> new name of the grid variable</span> +<span class="sd"> """</span> + + <span class="k">try</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_grid_variables"</span><span class="p">][</span><span class="n">newname</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_grid_variables"</span><span class="p">]</span><span class="o">.</span><span class="n">pop</span><span class="p">(</span><span class="n">oldname</span><span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_grid_variables"</span><span class="p">][</span><span class="n">newname</span><span class="p">][</span><span class="s2">"name"</span><span class="p">]</span> <span class="o">=</span> <span class="n">newname</span> + <span class="k">except</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s2">"Failed to rename grid variable </span><span class="si">{}</span><span class="s2"> to </span><span class="si">{}</span><span class="s2">."</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">oldname</span><span class="p">,</span><span class="n">newname</span><span class="p">)</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span></div> + <div class="viewcode-block" id="Population.add_grid_variable"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.add_grid_variable">[docs]</a> <span class="k">def</span> <span class="nf">add_grid_variable</span><span class="p">(</span> <span class="bp">self</span><span class="p">,</span> <span class="n">name</span><span class="p">:</span> <span class="nb">str</span><span class="p">,</span> @@ -610,8 +670,6 @@ <span class="sd"> (steps starting at lower edge + 0.5 * stepsize).</span> <span class="sd"> """</span> - <span class="c1"># TODO: Add check for the grid type input value</span> - <span class="c1"># Add grid_variable</span> <span class="n">grid_variable</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"name"</span><span class="p">:</span> <span class="n">name</span><span class="p">,</span> @@ -655,7 +713,6 @@ <span class="sd"> Returns:</span> <span class="sd"> dictionary containing "bse_options", "grid_options", "custom_options"</span> <span class="sd"> """</span> - <span class="n">options</span> <span class="o">=</span> <span class="p">{</span> <span class="s2">"bse_options"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">bse_options</span><span class="p">,</span> <span class="s2">"grid_options"</span><span class="p">:</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">,</span> @@ -709,7 +766,6 @@ <span class="c1">#</span> <span class="n">all_info</span> <span class="o">=</span> <span class="p">{}</span> - <span class="c1">#</span> <span class="k">if</span> <span class="n">include_population_settings</span><span class="p">:</span> <span class="n">population_settings</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">return_population_settings</span><span class="p">()</span> @@ -778,37 +834,42 @@ <span class="n">all_info_cleaned</span> <span class="o">=</span> <span class="n">copy</span><span class="o">.</span><span class="n">deepcopy</span><span class="p">(</span><span class="n">all_info</span><span class="p">)</span> <span class="k">if</span> <span class="n">use_datadir</span><span class="p">:</span> - <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"base_filename"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span> - <span class="n">base_name</span> <span class="o">=</span> <span class="s2">"simulation_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> - <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S"</span><span class="p">)</span> - <span class="p">)</span> - <span class="k">else</span><span class="p">:</span> - <span class="n">base_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"base_filename"</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"data_dir"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span> + <span class="k">if</span> <span class="ow">not</span> <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"base_filename"</span><span class="p">,</span> <span class="kc">None</span><span class="p">):</span> + <span class="n">base_name</span> <span class="o">=</span> <span class="s2">"simulation_</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">strftime</span><span class="p">(</span><span class="n">datetime</span><span class="o">.</span><span class="n">datetime</span><span class="o">.</span><span class="n">now</span><span class="p">(),</span> <span class="s2">"%Y%m</span><span class="si">%d</span><span class="s2">_%H%M%S"</span><span class="p">)</span> + <span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">base_name</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">splitext</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"base_filename"</span><span class="p">])[</span><span class="mi">0</span><span class="p">]</span> - <span class="n">settings_name</span> <span class="o">=</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s2">"_settings.json"</span> + <span class="n">settings_name</span> <span class="o">=</span> <span class="n">base_name</span> <span class="o">+</span> <span class="s2">"_settings.json"</span> - <span class="c1"># Check directory, make if necessary</span> - <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"data_dir"</span><span class="p">],</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> + <span class="c1"># Check directory, make if necessary</span> + <span class="n">os</span><span class="o">.</span><span class="n">makedirs</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"data_dir"</span><span class="p">],</span> <span class="n">exist_ok</span><span class="o">=</span><span class="kc">True</span><span class="p">)</span> - <span class="n">settings_fullname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"data_dir"</span><span class="p">],</span> <span class="n">settings_name</span> - <span class="p">)</span> + <span class="n">settings_fullname</span> <span class="o">=</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">custom_options</span><span class="p">[</span><span class="s2">"data_dir"</span><span class="p">],</span> <span class="n">settings_name</span> + <span class="p">)</span> - <span class="n">verbose_print</span><span class="p">(</span> - <span class="s2">"Writing settings to </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">settings_fullname</span><span class="p">),</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> - <span class="mi">1</span><span class="p">,</span> - <span class="p">)</span> - <span class="c1"># if not outfile.endswith('json'):</span> - <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings_fullname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span> - <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> - <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span> - <span class="n">all_info_cleaned</span><span class="p">,</span> - <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> - <span class="n">default</span><span class="o">=</span><span class="n">binaryc_json_serializer</span><span class="p">,</span> - <span class="p">)</span> + <span class="n">verbose_print</span><span class="p">(</span> + <span class="s2">"Writing settings to </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">settings_fullname</span><span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> + <span class="mi">1</span><span class="p">,</span> <span class="p">)</span> - <span class="k">return</span> <span class="n">settings_fullname</span> + <span class="c1"># if not outfile.endswith('json'):</span> + <span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">settings_fullname</span><span class="p">,</span> <span class="s2">"w"</span><span class="p">)</span> <span class="k">as</span> <span class="n">file</span><span class="p">:</span> + <span class="n">file</span><span class="o">.</span><span class="n">write</span><span class="p">(</span> + <span class="n">json</span><span class="o">.</span><span class="n">dumps</span><span class="p">(</span> + <span class="n">all_info_cleaned</span><span class="p">,</span> + <span class="n">indent</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> + <span class="n">default</span><span class="o">=</span><span class="n">binaryc_json_serializer</span><span class="p">,</span> + <span class="p">)</span> + <span class="p">)</span> + <span class="k">return</span> <span class="n">settings_fullname</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s2">"Exporting all info without passing a value for `outfile` requires custom_options['data_dir'] to be present. That is not the cause. Either set the `data_dir` or pass a value for `outfile` "</span> + <span class="k">raise</span> <span class="ne">ValueError</span> + <span class="k">else</span><span class="p">:</span> <span class="n">verbose_print</span><span class="p">(</span> <span class="s2">"Writing settings to </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">outfile</span><span class="p">),</span> @@ -835,51 +896,61 @@ <span class="sd">"""</span> <span class="sd"> Function/routine to set all the custom logging so that the function memory pointer</span> <span class="sd"> is known to the grid.</span> + +<span class="sd"> When the memory adress is loaded and the library file is set we'll skip rebuilding the library</span> <span class="sd"> """</span> - <span class="c1"># C_logging_code gets priority of C_autogen_code</span> - <span class="n">verbose_print</span><span class="p">(</span> - <span class="s2">"Creating and loading custom logging functionality"</span><span class="p">,</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> - <span class="mi">1</span><span class="p">,</span> - <span class="p">)</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_logging_code"</span><span class="p">]:</span> - <span class="c1"># Generate entire shared lib code around logging lines</span> - <span class="n">custom_logging_code</span> <span class="o">=</span> <span class="n">binary_c_log_code</span><span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_logging_code"</span><span class="p">],</span> - <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> + <span class="c1"># Only if the values are the 'default' unset values</span> + <span class="k">if</span> <span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">]</span> <span class="o">==</span> <span class="o">-</span><span class="mi">1</span> <span class="ow">and</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">]</span> <span class="ow">is</span> <span class="kc">None</span><span class="p">):</span> + <span class="n">verbose_print</span><span class="p">(</span> + <span class="s2">"Creating and loading custom logging functionality"</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> + <span class="mi">1</span><span class="p">,</span> <span class="p">)</span> + <span class="c1"># C_logging_code gets priority of C_autogen_code</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_logging_code"</span><span class="p">]:</span> + <span class="c1"># Generate entire shared lib code around logging lines</span> + <span class="n">custom_logging_code</span> <span class="o">=</span> <span class="n">binary_c_log_code</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_logging_code"</span><span class="p">],</span> + <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> + <span class="p">)</span> - <span class="c1"># Load memory address</span> - <span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">],</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">],</span> - <span class="p">)</span> <span class="o">=</span> <span class="n">create_and_load_logging_function</span><span class="p">(</span> - <span class="n">custom_logging_code</span><span class="p">,</span> - <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> - <span class="n">custom_tmp_dir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"tmp_dir"</span><span class="p">],</span> - <span class="p">)</span> + <span class="c1"># Load memory address</span> + <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">],</span> + <span class="p">)</span> <span class="o">=</span> <span class="n">create_and_load_logging_function</span><span class="p">(</span> + <span class="n">custom_logging_code</span><span class="p">,</span> + <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> + <span class="n">custom_tmp_dir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"tmp_dir"</span><span class="p">],</span> + <span class="p">)</span> - <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_auto_logging"</span><span class="p">]:</span> - <span class="c1"># Generate real logging code</span> - <span class="n">logging_line</span> <span class="o">=</span> <span class="n">autogen_C_logging_code</span><span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_auto_logging"</span><span class="p">],</span> - <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> - <span class="p">)</span> + <span class="k">elif</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_auto_logging"</span><span class="p">]:</span> + <span class="c1"># Generate real logging code</span> + <span class="n">logging_line</span> <span class="o">=</span> <span class="n">autogen_C_logging_code</span><span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"C_auto_logging"</span><span class="p">],</span> + <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> + <span class="p">)</span> - <span class="c1"># Generate entire shared lib code around logging lines</span> - <span class="n">custom_logging_code</span> <span class="o">=</span> <span class="n">binary_c_log_code</span><span class="p">(</span> - <span class="n">logging_line</span><span class="p">,</span> <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> - <span class="p">)</span> + <span class="c1"># Generate entire shared lib code around logging lines</span> + <span class="n">custom_logging_code</span> <span class="o">=</span> <span class="n">binary_c_log_code</span><span class="p">(</span> + <span class="n">logging_line</span><span class="p">,</span> <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">)</span> + <span class="p">)</span> - <span class="c1"># Load memory address</span> - <span class="p">(</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">],</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">],</span> - <span class="p">)</span> <span class="o">=</span> <span class="n">create_and_load_logging_function</span><span class="p">(</span> - <span class="n">custom_logging_code</span><span class="p">,</span> - <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> - <span class="n">custom_tmp_dir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"tmp_dir"</span><span class="p">],</span> + <span class="c1"># Load memory address</span> + <span class="p">(</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">],</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">],</span> + <span class="p">)</span> <span class="o">=</span> <span class="n">create_and_load_logging_function</span><span class="p">(</span> + <span class="n">custom_logging_code</span><span class="p">,</span> + <span class="n">verbosity</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">]</span><span class="o">-</span><span class="p">(</span><span class="n">_CUSTOM_LOGGING_VERBOSITY_LEVEL</span><span class="o">-</span><span class="mi">1</span><span class="p">),</span> + <span class="n">custom_tmp_dir</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"tmp_dir"</span><span class="p">],</span> + <span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">verbose_print</span><span class="p">(</span> + <span class="s2">"Custom logging library already loaded. Not setting them again."</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> + <span class="mi">1</span><span class="p">,</span> <span class="p">)</span> <span class="c1">###################################################</span> @@ -893,19 +964,48 @@ <span class="c1"># Evolution functions</span> <span class="c1">###################################################</span> - <span class="k">def</span> <span class="nf">_pre_run_cleanup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="k">def</span> <span class="nf">_pre_run_cleanup</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> <span class="sd">"""</span> <span class="sd"> Function to clean up some stuff in the grid before a run (like results, ensemble results etc)</span> <span class="sd"> """</span> <span class="c1"># empty results</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"results"</span><span class="p">]</span> <span class="o">=</span> <span class="p">{}</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_results</span> <span class="o">=</span> <span class="n">AutoVivificationDict</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_ensemble_results</span> <span class="o">=</span> <span class="p">{}</span> + + <span class="c1"># Reset the process ID (should not have a value initially, but can't hurt if it does)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">process_ID</span> <span class="o">=</span> <span class="mi">0</span> + + <span class="c1"># Reset population ID:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_population_id"</span><span class="p">]</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span> + + <span class="c1"># set previous logging time</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_time"</span><span class="p">]</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">Value</span><span class="p">(</span><span class="s1">'d'</span><span class="p">,</span><span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">())</span> + <span class="c1"># set previous logging system number to 0</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_system_number"</span><span class="p">]</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">Value</span><span class="p">(</span><span class="s1">'i'</span><span class="p">,</span><span class="mi">0</span><span class="p">)</span> + <span class="c1"># array to store memory use per-thread</span> + <span class="n">mem</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mem_use</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"memory_use_per_thread"</span><span class="p">]</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">Array</span><span class="p">(</span><span class="s1">'d'</span><span class="p">,[</span><span class="mf">1.0</span><span class="o">*</span><span class="n">mem</span><span class="p">]</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"amt_cores"</span><span class="p">])</span> + +<div class="viewcode-block" id="Population.clean"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.clean">[docs]</a> <span class="k">def</span> <span class="nf">clean</span><span class="p">(</span> + <span class="bp">self</span> + <span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> + <span class="sd">"""</span> +<span class="sd"> Clean the contents of the population object so it can be reused.</span> + +<span class="sd"> Calling _pre_run_cleanup()</span> + +<span class="sd"> TODO: decide to deprecate this function</span> +<span class="sd"> """</span> + + <span class="bp">self</span><span class="o">.</span><span class="n">_pre_run_cleanup</span><span class="p">()</span></div> <div class="viewcode-block" id="Population.evolve"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.evolve">[docs]</a> <span class="k">def</span> <span class="nf">evolve</span><span class="p">(</span><span class="bp">self</span><span class="p">)</span> <span class="o">-></span> <span class="kc">None</span><span class="p">:</span> <span class="sd">"""</span> <span class="sd"> Entry point function of the whole object. From here, based on the settings,</span> <span class="sd"> we set up a SLURM or CONDOR grid, or if no setting is given we go straight</span> -<span class="sd"> to evolving the population</span> +<span class="sd"> to evolving the population.</span> <span class="sd"> There are no direct arguments to this function, rather it is based on the grid_options settings:</span> <span class="sd"> grid_options['slurm']: integer Boolean whether to use a slurm_grid evolution</span> @@ -915,7 +1015,9 @@ <span class="sd"> (that doesn't mean this cannot be run on a server with many cores)</span> <span class="sd"> Returns an dictionary containing the analytics of the run</span> + <span class="sd"> TODO: change the way this is done. Slurm & CONDOR should probably do this different</span> +<span class="sd"> NOTE: SLURM and CONDOR options are not working properly yet</span> <span class="sd"> """</span> <span class="c1"># Just to make sure we don't have stuff from a previous run hanging around</span> @@ -978,9 +1080,6 @@ <span class="sd"> - TODO: include options for different ways of generating a population here. (i.e. MC or source file)</span> <span class="sd"> """</span> - <span class="c1"># Reset some settings: population_id, results, ensemble_results etc</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_population_id"</span><span class="p">]</span> <span class="o">=</span> <span class="n">uuid</span><span class="o">.</span><span class="n">uuid4</span><span class="p">()</span><span class="o">.</span><span class="n">hex</span> - <span class="c1">##</span> <span class="c1"># Prepare code/initialise grid.</span> <span class="c1"># set custom logging, set up store_memaddr, build grid code. dry run grid code.</span> @@ -1005,7 +1104,7 @@ <span class="p">)</span> <span class="p">)</span> - <span class="c1">#</span> + <span class="c1"># finished!</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_end_time_evolution"</span><span class="p">]</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> <span class="c1"># Log and print some information</span> @@ -1119,7 +1218,7 @@ <span class="c1"># Send closing signal to workers. When they receive this they will terminate</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'verbosity'</span><span class="p">]</span> <span class="o">>=</span> <span class="n">_LOGGER_VERBOSITY_LEVEL</span><span class="p">:</span> <span class="n">stream_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Signaling stop to processes"</span><span class="p">)</span> <span class="c1"># DEBUG</span> - + <span class="k">for</span> <span class="n">_</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="n">amt_cores</span><span class="p">):</span> <span class="n">job_queue</span><span class="o">.</span><span class="n">put</span><span class="p">(</span><span class="s2">"STOP"</span><span class="p">)</span> @@ -1355,6 +1454,9 @@ <span class="n">zero_prob_stars_skipped</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">total_time_calling_binary_c</span> <span class="o">=</span> <span class="mi">0</span> + <span class="n">start_grid_time</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> + <span class="n">next_log_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_time"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"log_dt"</span><span class="p">]</span> + <span class="n">next_mem_update_time</span> <span class="o">=</span> <span class="n">start_grid_time</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"log_dt"</span><span class="p">]</span> <span class="n">total_mass_run</span> <span class="o">=</span> <span class="mi">0</span> <span class="n">total_probability_weighted_mass_run</span> <span class="o">=</span> <span class="mi">0</span> @@ -1419,11 +1521,31 @@ <span class="c1"># )</span> <span class="c1">#</span> - <span class="n">verbose_print</span><span class="p">(</span> - <span class="s2">"Process </span><span class="si">{}</span><span class="s2"> is handling system </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span> <span class="n">system_number</span><span class="p">),</span> - <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> - <span class="mi">1</span><span class="p">,</span> - <span class="p">)</span> + +<span class="c1"># verbose_print(</span> +<span class="c1"># "Process {} is handling system {}".format(ID, system_number),</span> +<span class="c1"># self.grid_options["verbosity"],</span> +<span class="c1"># 1,</span> +<span class="c1"># )</span> + + <span class="c1"># save the current time (used often)</span> + <span class="n">now</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">time</span><span class="p">()</span> + + <span class="c1"># update memory use stats every log_dt seconds (not every time, this is likely a bit expensive)</span> + <span class="k">if</span> <span class="n">now</span> <span class="o">></span> <span class="n">next_mem_update_time</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"memory_use_per_thread"</span><span class="p">][</span><span class="n">ID</span><span class="p">]</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_mem_use</span><span class="p">()</span> + <span class="n">next_mem_update</span> <span class="o">=</span> <span class="n">now</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"log_dt"</span><span class="p">]</span> + + <span class="c1"># calculate the next logging time</span> + <span class="n">next_log_time</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_time"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"log_dt"</span><span class="p">]</span> + + <span class="k">if</span> <span class="n">now</span> <span class="o">></span> <span class="n">next_log_time</span><span class="p">:</span> + <span class="c1"># we have exceeded the next log time : output and update timers</span> + <span class="n">lock</span> <span class="o">=</span> <span class="n">multiprocessing</span><span class="o">.</span><span class="n">Lock</span><span class="p">()</span> + <span class="bp">self</span><span class="o">.</span><span class="n">vb1print</span><span class="p">(</span><span class="n">ID</span><span class="p">,</span><span class="n">now</span><span class="p">,</span><span class="n">system_number</span><span class="p">)</span> + <span class="n">next_log_time</span> <span class="o">=</span> <span class="n">now</span> <span class="o">+</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"log_dt"</span><span class="p">]</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_time"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">now</span> + <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_system_number"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> <span class="o">=</span> <span class="n">system_number</span> <span class="c1"># In some cases, the whole run crashes. To be able to figure out which system</span> <span class="c1"># that was on, we log each current system to a file (each thread has one).</span> @@ -1511,7 +1633,6 @@ <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'verbosity'</span><span class="p">]</span> <span class="o">>=</span> <span class="n">_LOGGER_VERBOSITY_LEVEL</span><span class="p">:</span> <span class="n">stream_logger</span><span class="o">.</span><span class="n">debug</span><span class="p">(</span><span class="sa">f</span><span class="s2">"Process-</span><span class="si">{</span><span class="bp">self</span><span class="o">.</span><span class="n">process_ID</span><span class="si">}</span><span class="s2"> is finishing."</span><span class="p">)</span> - <span class="c1"># Handle ensemble output: is ensemble==1, then either directly write that data to a file, or combine everything into 1 file.</span> <span class="n">ensemble_json</span> <span class="o">=</span> <span class="p">{}</span> <span class="c1"># Make sure it exists already</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">bse_options</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"ensemble"</span><span class="p">,</span> <span class="mi">0</span><span class="p">)</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> @@ -1675,31 +1796,42 @@ <span class="c1">### Custom logging code:</span> <span class="bp">self</span><span class="o">.</span><span class="n">_set_custom_logging</span><span class="p">()</span> - <span class="c1"># Get argument line</span> - <span class="n">argline</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_return_argline</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bse_options</span><span class="p">)</span> - <span class="n">verbose_print</span><span class="p">(</span><span class="s2">"Running </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">argline</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> <span class="mi">1</span><span class="p">)</span> - <span class="c1"># Run system</span> - <span class="n">out</span> <span class="o">=</span> <span class="n">_binary_c_bindings</span><span class="o">.</span><span class="n">run_system</span><span class="p">(</span> - <span class="n">argstring</span><span class="o">=</span><span class="n">argline</span><span class="p">,</span> - <span class="n">custom_logging_func_memaddr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span> - <span class="s2">"custom_logging_func_memaddr"</span> - <span class="p">],</span> - <span class="n">store_memaddr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_store_memaddr"</span><span class="p">],</span> - <span class="n">population</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> - <span class="p">)</span> + <span class="c1"># Check if there are actually arguments passed:</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">bse_options</span><span class="p">:</span> + + <span class="c1"># Get argument line and</span> + <span class="n">argline</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_return_argline</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">bse_options</span><span class="p">)</span> + + <span class="n">verbose_print</span><span class="p">(</span><span class="s2">"Running </span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">argline</span><span class="p">),</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> <span class="mi">1</span><span class="p">)</span> + + <span class="c1"># Run system</span> + <span class="n">out</span> <span class="o">=</span> <span class="n">_binary_c_bindings</span><span class="o">.</span><span class="n">run_system</span><span class="p">(</span> + <span class="n">argstring</span><span class="o">=</span><span class="n">argline</span><span class="p">,</span> + <span class="n">custom_logging_func_memaddr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span> + <span class="s2">"custom_logging_func_memaddr"</span> + <span class="p">],</span> + <span class="n">store_memaddr</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_store_memaddr"</span><span class="p">],</span> + <span class="n">population</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> + <span class="p">)</span> + + <span class="c1"># Clean up custom logging</span> + <span class="k">if</span> <span class="n">clean_up_custom_logging_files</span><span class="p">:</span> + <span class="bp">self</span><span class="o">.</span><span class="n">_clean_up_custom_logging</span><span class="p">(</span><span class="n">evol_type</span><span class="o">=</span><span class="s2">"single"</span><span class="p">)</span> + + <span class="c1"># Parse output and return the result</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"parse_function"</span><span class="p">]:</span> + <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"parse_function"</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span> + + <span class="c1"># Otherwise just return the raw output</span> + <span class="k">return</span> <span class="n">out</span> + + <span class="k">else</span><span class="p">:</span> + <span class="n">msg</span> <span class="o">=</span> <span class="s2">"No actual evolution options passed to the evolve call. Aborting"</span> + <span class="k">raise</span> <span class="ne">ValueError</span><span class="p">(</span><span class="n">msg</span><span class="p">)</span></div> - <span class="c1"># TODO: add call to function that cleans up the temp custom logging dir,</span> - <span class="c1"># and unloads the loaded libraries.</span> - <span class="c1"># TODO: make a switch to turn this off</span> - <span class="k">if</span> <span class="n">clean_up_custom_logging_files</span><span class="p">:</span> - <span class="bp">self</span><span class="o">.</span><span class="n">_clean_up_custom_logging</span><span class="p">(</span><span class="n">evol_type</span><span class="o">=</span><span class="s2">"single"</span><span class="p">)</span> - <span class="c1"># Parse</span> - <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"parse_function"</span><span class="p">]:</span> - <span class="k">return</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"parse_function"</span><span class="p">](</span><span class="bp">self</span><span class="p">,</span> <span class="n">out</span><span class="p">)</span> - <span class="k">return</span> <span class="n">out</span></div> <span class="k">def</span> <span class="nf">_setup</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> <span class="sd">"""</span> @@ -2419,7 +2551,7 @@ <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> <span class="p">)</span> - <span class="c1"># Take into account the multiplicity fraction: </span> + <span class="c1"># Take into account the multiplicity fraction:</span> <span class="n">code_string</span> <span class="o">+=</span> <span class="p">(</span> <span class="n">indent</span> <span class="o">*</span> <span class="p">(</span><span class="n">depth</span> <span class="o">+</span> <span class="mi">1</span><span class="p">)</span> <span class="o">+</span> <span class="s2">"</span><span class="se">\n</span><span class="s2">"</span> @@ -3283,10 +3415,10 @@ <span class="mi">1</span><span class="p">,</span> <span class="p">)</span> - <span class="c1"># TODO: Unset custom logging code</span> + <span class="c1"># TODO: Explicitly unload the library</span> - <span class="c1"># TODO: Unset function memory address</span> - <span class="c1"># print(self.grid_options["custom_logging_func_memaddr"])</span> + <span class="c1"># Reset the memory adress location</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"custom_logging_func_memaddr"</span><span class="p">]</span> <span class="o">=</span> <span class="o">-</span><span class="mi">1</span> <span class="c1"># remove shared library files</span> <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">]:</span> @@ -3294,6 +3426,7 @@ <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> <span class="p">)</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_custom_logging_shared_library_file"</span><span class="p">]</span> <span class="o">=</span> <span class="kc">None</span> <span class="k">if</span> <span class="n">evol_type</span> <span class="o">==</span> <span class="s2">"population"</span><span class="p">:</span> <span class="n">verbose_print</span><span class="p">(</span> @@ -3441,7 +3574,7 @@ <div class="viewcode-block" id="Population.set_moe_di_stefano_settings"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.set_moe_di_stefano_settings">[docs]</a> <span class="k">def</span> <span class="nf">set_moe_di_stefano_settings</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">options</span><span class="o">=</span><span class="kc">None</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Function to set user input configurations for the moe & di Stefano methods</span> -<span class="sd"> </span> + <span class="sd"> If nothing is passed then we just use the default options</span> <span class="sd"> """</span> @@ -3784,7 +3917,7 @@ <span class="n">resolution</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">][</span><span class="s2">"resolutions"</span><span class="p">][</span><span class="s2">"logP"</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="n">probdist</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">condition</span><span class="o">=</span><span class="s1">'(self.grid_options["multiplicity"] >= 2)'</span><span class="p">,</span> - <span class="n">branchpoint</span><span class="o">=</span><span class="mi">1</span> <span class="k">if</span> <span class="n">max_multiplicity</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="c1"># Signal here to put a branchpoint if we have a max multiplicity higher than 1. </span> + <span class="n">branchpoint</span><span class="o">=</span><span class="mi">1</span> <span class="k">if</span> <span class="n">max_multiplicity</span> <span class="o">></span> <span class="mi">1</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="c1"># Signal here to put a branchpoint if we have a max multiplicity higher than 1.</span> <span class="n">gridtype</span><span class="o">=</span><span class="s2">"centred"</span><span class="p">,</span> <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"(</span><span class="si">{}</span><span class="s2"> * dlog10per)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">LOG_LN_CONVERTER</span><span class="p">),</span> <span class="n">valuerange</span><span class="o">=</span><span class="p">[</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">][</span><span class="s2">"ranges"</span><span class="p">][</span><span class="s2">"logP"</span><span class="p">][</span><span class="mi">0</span><span class="p">],</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">][</span><span class="s2">"ranges"</span><span class="p">][</span><span class="s2">"logP"</span><span class="p">][</span><span class="mi">1</span><span class="p">]],</span> @@ -3799,7 +3932,7 @@ <span class="s2">"""</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">]</span><span class="o">.</span><span class="n">get</span><span class="p">(</span><span class="s2">"Mmin"</span><span class="p">,</span> <span class="mf">0.07</span><span class="p">)</span> <span class="p">),</span> - <span class="p">)</span> <span class="c1"># TODO: change the maximum_mass_ratio_for_RLOF </span> + <span class="p">)</span> <span class="c1"># TODO: change the maximum_mass_ratio_for_RLOF</span> <span class="c1"># binaries: mass ratio</span> <span class="bp">self</span><span class="o">.</span><span class="n">add_grid_variable</span><span class="p">(</span> @@ -3865,7 +3998,7 @@ <span class="n">resolution</span><span class="o">=</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'m&s_options'</span><span class="p">][</span><span class="s2">"resolutions"</span><span class="p">][</span><span class="s2">"logP"</span><span class="p">][</span><span class="mi">1</span><span class="p">],</span> <span class="n">probdist</span><span class="o">=</span><span class="mf">1.0</span><span class="p">,</span> <span class="n">condition</span><span class="o">=</span><span class="s1">'(self.grid_options["multiplicity"] >= 3)'</span><span class="p">,</span> - <span class="n">branchpoint</span><span class="o">=</span><span class="mi">2</span> <span class="k">if</span> <span class="n">max_multiplicity</span> <span class="o">></span> <span class="mi">2</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="c1"># Signal here to put a branchpoint if we have a max multiplicity higher than 1. </span> + <span class="n">branchpoint</span><span class="o">=</span><span class="mi">2</span> <span class="k">if</span> <span class="n">max_multiplicity</span> <span class="o">></span> <span class="mi">2</span> <span class="k">else</span> <span class="mi">0</span><span class="p">,</span> <span class="c1"># Signal here to put a branchpoint if we have a max multiplicity higher than 1.</span> <span class="n">gridtype</span><span class="o">=</span><span class="s2">"centred"</span><span class="p">,</span> <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"(</span><span class="si">{}</span><span class="s2"> * dlog10per2)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">LOG_LN_CONVERTER</span><span class="p">),</span> <span class="n">valuerange</span><span class="o">=</span><span class="p">[</span> @@ -4198,7 +4331,91 @@ <span class="mi">2</span><span class="p">,</span> <span class="p">)</span> - <span class="k">return</span> <span class="n">multiplicity_fraction_dict</span><span class="p">[</span><span class="n">system_dict</span><span class="p">[</span><span class="s1">'multiplicity'</span><span class="p">]]</span></div> + <span class="k">return</span> <span class="n">multiplicity_fraction_dict</span><span class="p">[</span><span class="n">system_dict</span><span class="p">[</span><span class="s1">'multiplicity'</span><span class="p">]]</span> + + <span class="k">def</span> <span class="nf">_trem</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">dt</span><span class="p">,</span><span class="n">count</span><span class="p">,</span><span class="n">dn</span><span class="p">,</span><span class="n">n</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Estimate time remaining (seconds) given a differential time and count (i.e. progress = $count/$n). $dt is the time since the last call, $count is the current progress count, $dn is the number run since the last call, and $n is the total number required.</span> +<span class="sd"> """</span> + <span class="n">tpr</span> <span class="o">=</span> <span class="n">dt</span> <span class="o">/</span> <span class="nb">max</span><span class="p">(</span><span class="mi">1</span><span class="p">,</span><span class="n">dn</span><span class="p">)</span> + <span class="n">etasecs</span> <span class="o">=</span> <span class="n">tpr</span> <span class="o">*</span> <span class="p">(</span><span class="n">n</span> <span class="o">-</span> <span class="n">count</span><span class="p">)</span> + <span class="p">(</span><span class="n">eta</span><span class="p">,</span><span class="n">units</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_conv_time_units</span><span class="p">(</span><span class="n">etasecs</span><span class="p">)</span> + <span class="k">return</span> <span class="p">(</span><span class="n">eta</span><span class="p">,</span><span class="n">units</span><span class="p">,</span><span class="n">tpr</span><span class="p">,</span><span class="n">etasecs</span><span class="p">)</span> + + <span class="k">def</span> <span class="nf">_conv_time_units</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">t</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Converts time (t, in seconds, passing in as the only argument) to seconds, minutes or hours depending on its magnitude. Returns a tuple (t,units).</span> +<span class="sd"> """</span> + <span class="n">units</span><span class="o">=</span><span class="s1">'s'</span><span class="p">;</span> <span class="c1"># default to seconds</span> + <span class="k">if</span> <span class="n">t</span> <span class="o">></span> <span class="mi">60</span><span class="p">:</span> + <span class="n">t</span> <span class="o">/=</span> <span class="mi">60</span><span class="p">;</span> + <span class="n">units</span><span class="o">=</span><span class="s1">'m'</span><span class="p">;</span> + <span class="k">if</span> <span class="n">t</span> <span class="o">></span> <span class="mi">60</span><span class="p">:</span> + <span class="n">t</span> <span class="o">/=</span><span class="mi">60</span><span class="p">;</span> + <span class="n">units</span><span class="o">=</span><span class="s1">'h'</span><span class="p">;</span> + <span class="k">return</span> <span class="p">(</span><span class="n">t</span><span class="p">,</span><span class="n">units</span><span class="p">)</span> + +<div class="viewcode-block" id="Population.vb1print"><a class="viewcode-back" href="../../../grid.html#binarycpython.utils.grid.Population.vb1print">[docs]</a> <span class="k">def</span> <span class="nf">vb1print</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span><span class="n">ID</span><span class="p">,</span><span class="n">now</span><span class="p">,</span><span class="n">system_number</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Verbosity-level 1 printing, to keep an eye on a grid.</span> +<span class="sd"> Arguments:</span> +<span class="sd"> ID : thread ID for debugging (int)</span> +<span class="sd"> now : the time now as a UNIX-style epoch in seconds (float)</span> +<span class="sd"> system_number : the system number</span> +<span class="sd"> """</span> + <span class="c1"># calculate estimated time of arrive (eta and eta_secs), time per run (tpr)</span> + <span class="n">localtime</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">now</span><span class="p">)</span> + <span class="n">dt</span> <span class="o">=</span> <span class="n">now</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_time"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> + <span class="n">dn</span> <span class="o">=</span> <span class="n">system_number</span> <span class="o">-</span> <span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"prev_log_system_number"</span><span class="p">]</span><span class="o">.</span><span class="n">value</span> + <span class="p">(</span><span class="n">eta</span><span class="p">,</span><span class="n">units</span><span class="p">,</span><span class="n">tpr</span><span class="p">,</span><span class="n">eta_secs</span><span class="p">)</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">_trem</span><span class="p">(</span><span class="n">dt</span><span class="p">,</span> + <span class="n">system_number</span><span class="p">,</span> + <span class="n">dn</span><span class="p">,</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_total_starcount"</span><span class="p">])</span> + <span class="k">if</span> <span class="n">eta_secs</span> <span class="o"><</span> <span class="n">secs_per_day</span><span class="p">:</span> + <span class="n">fintime</span> <span class="o">=</span> <span class="n">time</span><span class="o">.</span><span class="n">localtime</span><span class="p">(</span><span class="n">now</span> <span class="o">+</span> <span class="n">eta_secs</span><span class="p">)</span> + <span class="n">etf</span> <span class="o">=</span> <span class="s2">"</span><span class="si">{hours:02d}</span><span class="s2">:</span><span class="si">{minutes:02d}</span><span class="s2">:</span><span class="si">{seconds:02d}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">hours</span> <span class="o">=</span> <span class="n">fintime</span><span class="o">.</span><span class="n">tm_hour</span><span class="p">,</span> + <span class="n">minutes</span> <span class="o">=</span> <span class="n">fintime</span><span class="o">.</span><span class="n">tm_min</span><span class="p">,</span> + <span class="n">seconds</span> <span class="o">=</span> <span class="n">fintime</span><span class="o">.</span><span class="n">tm_sec</span><span class="p">)</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">d</span> <span class="o">=</span> <span class="nb">int</span><span class="p">(</span><span class="n">eta_secs</span><span class="o">/</span><span class="n">secs_per_day</span><span class="p">)</span> + <span class="k">if</span> <span class="n">d</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">etf</span> <span class="o">=</span> <span class="s2">"Tomorrow"</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">etf</span> <span class="o">=</span> <span class="s2">"In "</span> <span class="o">+</span> <span class="n">d</span> <span class="o">+</span> <span class="s2">" days"</span> + + <span class="c1"># modulo information</span> + <span class="k">if</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'modulo'</span><span class="p">]</span> <span class="o">==</span> <span class="mi">1</span><span class="p">:</span> + <span class="n">modulo</span> <span class="o">=</span> <span class="s1">''</span> <span class="c1"># usual case</span> + <span class="k">else</span><span class="p">:</span> + <span class="n">modulo</span> <span class="o">=</span> <span class="s1">'%'</span> <span class="o">+</span> <span class="nb">str</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'modulo'</span><span class="p">])</span> + + <span class="c1"># add up memory use from each thread</span> + <span class="n">mem_use</span> <span class="o">=</span> <span class="nb">sum</span><span class="p">(</span><span class="bp">self</span><span class="o">.</span><span class="n">shared_memory</span><span class="p">[</span><span class="s2">"memory_use_per_thread"</span><span class="p">])</span> + + <span class="n">verbose_print</span><span class="p">(</span> + <span class="s2">"</span><span class="si">{system_number}</span><span class="s2">/</span><span class="si">{total_starcount}{modulo}</span><span class="s2"> </span><span class="si">{complete:5.1f}% c</span><span class="s2">omplete </span><span class="si">{hours:02d}</span><span class="s2">:</span><span class="si">{minutes:02d}</span><span class="s2">:</span><span class="si">{seconds:02d}</span><span class="s2"> ETA=</span><span class="si">{eta:7.1f}{units}</span><span class="s2"> tpr=</span><span class="si">{tpr:2.2e}</span><span class="s2"> ETF=</span><span class="si">{etf}</span><span class="s2"> mem:</span><span class="si">{mem_use:.1f}</span><span class="s2">MB"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span> + <span class="n">system_number</span> <span class="o">=</span> <span class="n">system_number</span><span class="p">,</span> + <span class="n">total_starcount</span> <span class="o">=</span> <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_total_starcount"</span><span class="p">],</span> + <span class="n">complete</span><span class="o">=</span><span class="p">(</span><span class="mf">100.0</span><span class="o">*</span><span class="n">system_number</span><span class="p">)</span><span class="o">/</span><span class="p">(</span><span class="mf">1.0</span><span class="o">*</span><span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"_total_starcount"</span><span class="p">]),</span> + <span class="n">modulo</span> <span class="o">=</span> <span class="n">modulo</span><span class="p">,</span> + <span class="n">hours</span> <span class="o">=</span> <span class="n">localtime</span><span class="o">.</span><span class="n">tm_hour</span><span class="p">,</span> + <span class="n">minutes</span> <span class="o">=</span> <span class="n">localtime</span><span class="o">.</span><span class="n">tm_min</span><span class="p">,</span> + <span class="n">seconds</span> <span class="o">=</span> <span class="n">localtime</span><span class="o">.</span><span class="n">tm_sec</span><span class="p">,</span> + <span class="n">eta</span> <span class="o">=</span> <span class="n">eta</span><span class="p">,</span> + <span class="n">units</span> <span class="o">=</span> <span class="n">units</span><span class="p">,</span> + <span class="n">tpr</span> <span class="o">=</span> <span class="n">tpr</span><span class="p">,</span> + <span class="n">etf</span> <span class="o">=</span> <span class="n">etf</span><span class="p">,</span> + <span class="n">mem_use</span> <span class="o">=</span> <span class="n">mem_use</span> + <span class="p">),</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s2">"verbosity"</span><span class="p">],</span> + <span class="mi">1</span> + <span class="p">)</span></div> + + <span class="k">def</span> <span class="nf">_mem_use</span><span class="p">(</span><span class="bp">self</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Return current process memory use in MB. (Takes no arguments) Note: this is per-thread only.</span> +<span class="sd"> """</span> + <span class="k">return</span> <span class="n">resource</span><span class="o">.</span><span class="n">getrusage</span><span class="p">(</span><span class="n">resource</span><span class="o">.</span><span class="n">RUSAGE_SELF</span><span class="p">)</span><span class="o">.</span><span class="n">ru_maxrss</span> <span class="o">/</span> <span class="mf">1024.0</span></div> </pre></div> </div> @@ -4225,9 +4442,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/grid_options_defaults.html b/docs/build/html/_modules/binarycpython/utils/grid_options_defaults.html index e0fdf688e..4811d9522 100644 --- a/docs/build/html/_modules/binarycpython/utils/grid_options_defaults.html +++ b/docs/build/html/_modules/binarycpython/utils/grid_options_defaults.html @@ -157,16 +157,16 @@ <h1>Source code for binarycpython.utils.grid_options_defaults</h1><div class="highlight"><pre> <span></span><span class="sd">"""</span> -<span class="sd">Module that contains the default options for the population grid code along with the description for these options, in the form of dictionaries: </span> +<span class="sd">Module that contains the default options for the population grid code along with the description for these options, in the form of dictionaries:</span> <span class="sd"> - grid_options_defaults_dict: dictionary containing the default values for all the options</span> <span class="sd"> - grid_options_descriptions: dictionary containing the description for these options.</span> <span class="sd">There are several other functions in this module, mostly to generate help texts or documents:</span> -<span class="sd"> - grid_options_help: interactive function for the user to get descriptions for options </span> +<span class="sd"> - grid_options_help: interactive function for the user to get descriptions for options</span> <span class="sd"> - grid_options_description_checker: function that checks that checks which options have a description.</span> <span class="sd"> - write_grid_options_to_rst_file: function to generate the .rst document for the docs</span> -<span class="sd">With this its also possible to automatically generate a document containing all the setting names + descriptions. </span> +<span class="sd">With this its also possible to automatically generate a document containing all the setting names + descriptions.</span> <span class="sd">All the options starting with _ should not be changed by the user except when you really know what you're doing (which is probably hacking the code :P)</span> <span class="sd">"""</span> @@ -208,6 +208,7 @@ <span class="s2">"log_file"</span><span class="p">:</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> <span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"binary_c_python.log"</span> <span class="p">),</span> <span class="c1"># Set to None to not log to file. The directory will be created</span> + <span class="s2">"log_dt"</span> <span class="p">:</span> <span class="mi">5</span><span class="p">,</span> <span class="c1"># time between vb=1 logging outputs</span> <span class="c1">##########################</span> <span class="c1"># binary_c files</span> <span class="c1">##########################</span> @@ -633,7 +634,7 @@ <span class="s2">"_main_pid"</span><span class="p">:</span> <span class="s2">"Main process ID of the master process. Used and set by the population object."</span><span class="p">,</span> <span class="s2">"_store_memaddr"</span><span class="p">:</span> <span class="s2">"Memory address of the store object for binary_c."</span><span class="p">,</span> <span class="s2">"failed_systems_threshold"</span><span class="p">:</span> <span class="s2">"Variable storing the maximum amount of systems that are allowed to fail before logging their command line arguments to failed_systems log files"</span><span class="p">,</span> - <span class="s2">"parse_function"</span><span class="p">:</span> <span class="s2">"Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the grid_options['results'] dictionary, or just output results to a file"</span><span class="p">,</span> + <span class="s2">"parse_function"</span><span class="p">:</span> <span class="s2">"Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the self.grid_results dictionary, or just output results to a file"</span><span class="p">,</span> <span class="s2">"condor"</span><span class="p">:</span> <span class="s2">"Int flag whether to use a condor type population evolution. Not implemented yet."</span><span class="p">,</span> <span class="c1"># TODO: describe this in more detail</span> <span class="s2">"slurm"</span><span class="p">:</span> <span class="s2">"Int flag whether to use a Slurm type population evolution."</span><span class="p">,</span> <span class="c1"># TODO: describe this in more detail</span> <span class="s2">"weight"</span><span class="p">:</span> <span class="s2">"Weight factor for each system. The calculated probability is multiplied by this. If the user wants each system to be repeated several times, then this variable should not be changed, rather change the _repeat variable instead, as that handles the reduction in probability per system. This is useful for systems that have a process with some random element in it."</span><span class="p">,</span> <span class="c1"># TODO: add more info here, regarding the evolution splitting.</span> @@ -692,7 +693,7 @@ <span class="s2">"ecc"</span><span class="p">:</span> <span class="p">[</span><span class="mf">0.0</span><span class="p">,</span> <span class="mf">0.99</span><span class="p">],</span> <span class="p">},</span> <span class="c1"># minimum stellar mass</span> - <span class="s2">"Mmin"</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">return_binary_c_version_info</span><span class="p">(</span><span class="n">parsed</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="s1">'macros'</span><span class="p">][</span><span class="s1">'BINARY_C_MINIMUM_STELLAR_MASS'</span><span class="p">]),</span> <span class="c1"># We take the value that binary_c has set as the default </span> + <span class="s2">"Mmin"</span><span class="p">:</span> <span class="nb">float</span><span class="p">(</span><span class="n">return_binary_c_version_info</span><span class="p">(</span><span class="n">parsed</span><span class="o">=</span><span class="kc">True</span><span class="p">)[</span><span class="s1">'macros'</span><span class="p">][</span><span class="s1">'BINARY_C_MINIMUM_STELLAR_MASS'</span><span class="p">]),</span> <span class="c1"># We take the value that binary_c has set as the default</span> <span class="c1"># multiplicity model (as a function of log10M1)</span> <span class="c1">#</span> @@ -1007,9 +1008,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/plot_functions.html b/docs/build/html/_modules/binarycpython/utils/plot_functions.html index 64e1f27cc..6269a61c3 100644 --- a/docs/build/html/_modules/binarycpython/utils/plot_functions.html +++ b/docs/build/html/_modules/binarycpython/utils/plot_functions.html @@ -829,9 +829,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/run_system_wrapper.html b/docs/build/html/_modules/binarycpython/utils/run_system_wrapper.html index 70d649d6a..7f1a50500 100644 --- a/docs/build/html/_modules/binarycpython/utils/run_system_wrapper.html +++ b/docs/build/html/_modules/binarycpython/utils/run_system_wrapper.html @@ -298,9 +298,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/spacing_functions.html b/docs/build/html/_modules/binarycpython/utils/spacing_functions.html index 6fa1aeaec..c890ee053 100644 --- a/docs/build/html/_modules/binarycpython/utils/spacing_functions.html +++ b/docs/build/html/_modules/binarycpython/utils/spacing_functions.html @@ -209,9 +209,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/binarycpython/utils/useful_funcs.html b/docs/build/html/_modules/binarycpython/utils/useful_funcs.html index 8a34e2326..0a193b389 100644 --- a/docs/build/html/_modules/binarycpython/utils/useful_funcs.html +++ b/docs/build/html/_modules/binarycpython/utils/useful_funcs.html @@ -566,9 +566,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_modules/index.html b/docs/build/html/_modules/index.html index 5306f95ef..fc09ef11f 100644 --- a/docs/build/html/_modules/index.html +++ b/docs/build/html/_modules/index.html @@ -189,9 +189,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/_sources/binary_c_parameters.rst.txt b/docs/build/html/_sources/binary_c_parameters.rst.txt index 9d05193ac..cdce51580 100644 --- a/docs/build/html/_sources/binary_c_parameters.rst.txt +++ b/docs/build/html/_sources/binary_c_parameters.rst.txt @@ -4,7 +4,7 @@ The following chapter contains all the parameters that the current version of bi This information was obtained by the following binary_c build: - **binary_c git branch**: branch_david **binary_c git revision**: 6162:20210825:093caf0e9 **Built on**: Aug 25 2021 18:02:39 + **binary_c git branch**: newmaster **binary_c git revision**: 6185:20210910:1621c23a5 **Built on**: Sep 10 2021 15:05:46 Section: stars @@ -424,6 +424,11 @@ Section: stars | **Parameter input type**: Float(scanf) | **Default value**: NULL +| **Parameter**: artificial_mass_accretion_rate_by_stellar_type%d +| **Description**: Constant mass accretion rate for stellar type <n>. +| **Parameter input type**: Float(scanf) +| **Default value**: NULL + | **Parameter**: artificial_angular_momentum_accretion_rate%d | **Description**: Constant angular momentum accretion for star <n>. | **Parameter input type**: Float(scanf) @@ -468,13 +473,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['BH_HURLEY2002 = 0', 'BH_BELCZYNSKI = 1', 'BH_SPERA2015 = 2', 'BH_FRYER12_DELAYED = 3', 'BH_FRYER12_RAPID = 4', 'BH_FRYER12_STARTRACK = 5'] -| **Parameter**: PPISN_prescription -| **Description**: (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. -| **Parameter input type**: Integer -| **Default value**: 1 -| **Macros**: ['PPISN_NONE = 0', 'PPISN_FARMER19 = 1'] -| **Extra**: Ignore - | **Parameter**: sn_kick_distribution_II | **Description**: Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Integer @@ -502,7 +500,7 @@ Section: stars | **Parameter**: sn_kick_distribution_GRB_COLLAPSAR | **Description**: Set the distribution of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Integer -| **Default value**: 0 +| **Default value**: 1 | **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] | **Parameter**: sn_kick_distribution_TZ @@ -541,24 +539,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] -| **Parameter**: sn_kick_distribution_PPISN -| **Description**: Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 1 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - -| **Parameter**: sn_kick_distribution_PISN -| **Description**: Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 0 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - -| **Parameter**: sn_kick_distribution_PHDIS -| **Description**: Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 0 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - | **Parameter**: sn_kick_dispersion_II | **Description**: Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Float @@ -582,7 +562,7 @@ Section: stars | **Parameter**: sn_kick_dispersion_GRB_COLLAPSAR | **Description**: Set the dispersion of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Float -| **Default value**: 0 +| **Default value**: 190 | **Parameter**: sn_kick_dispersion_TZ | **Description**: Set the dispersion of speeds applied to kick newly-born neutron stars and black holes at the death of a Thorne-Zytkow object. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). @@ -614,21 +594,6 @@ Section: stars | **Parameter input type**: Float | **Default value**: 0 -| **Parameter**: sn_kick_dispersion_PPISN -| **Description**: Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 190 - -| **Parameter**: sn_kick_dispersion_PISN -| **Description**: Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 0 - -| **Parameter**: sn_kick_dispersion_PHDIS -| **Description**: Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 0 - | **Parameter**: sn_kick_companion_IA_He | **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. | **Parameter input type**: Float @@ -749,24 +714,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] -| **Parameter**: sn_kick_companion_PPISN -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - -| **Parameter**: sn_kick_companion_PISN -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - -| **Parameter**: sn_kick_companion_PHDIS -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - | **Parameter**: wd_sigma | **Description**: Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. | **Parameter input type**: Float @@ -827,22 +774,22 @@ Section: stars | **Parameter**: delta_mcmin | **Description**: A parameter to reduce the minimum core mass for third dredge up to occur on the TPAGB. As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lambda_min | **Description**: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. See also lambda_multiplier. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lambda_multiplier | **Description**: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: minimum_envelope_mass_for_third_dredgeup | **Description**: The minimum envelope mass for third dredge up on the TPAGB. Early, solar metallicity models by Straniero et al suggested 0.5Msun is typical. However, circumstantial evidence (Izzard et al 2009) as well as newer models by Stancliffe and Karakas suggest that at low metallicity a value nearer zero is more appropriate. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.5 | **Parameter**: mass_of_pmz | **Description**: The mass in the partial mixing zone of a TPAGB star, using the Karakas 2012 tables. Ask Carlo Abate for more details, or see the series of papers Abate et al 2012, 2013, 2014. Requires NUCSYN and USE_TABULAR_INTERSHELL_ABUNDANCES_KARAKAS_2012. @@ -852,12 +799,12 @@ Section: stars | **Parameter**: c13_eff | **Description**: The "efficiency" of partial mixing in a TPAGB star intershell region, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: mc13_pocket_multiplier | **Description**: Multiplies the mass in the partial mixing zone of a TPAGB star, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: tides_convective_damping | **Description**: Tidal convective damping algorithm. 0=TIDES_HURLEY2002 Zahn 197x timescales + Hut, as in Hurley et al (2002), 1 = TIDES_ZAHN1989: Zahn 1989 lambdas + Hut. @@ -879,7 +826,7 @@ Section: stars | **Parameter**: hbbtfac | **Description**: A parameter to modulate the temperature at the base of the hot-bottom burning zone in TPAGB stars. (Works only if NUCSYN is defined) | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: wind_multiplier_%d | **Description**: Wind multiplier for the stellar type specified by the intger %d. By default these are all 1.0. @@ -951,7 +898,7 @@ Section: stars | **Parameter**: MINT_metallicity | **Description**: This sets the metallicity for MINT. It is ignored if set to -1.0, the default, in which case the normal metallicity parameter is used. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -1 | **Parameter**: gaia_Teff_binwidth | **Description**: log10(Effective temperature) bin width used to make Gaia-like HRDs @@ -978,25 +925,25 @@ Section: stars | **Parameter**: AGB_core_algorithm | **Description**: Algorithm to use for calculating AGB core masses. 0=Hurley et al. 2002 if no NUCSYN, Karakas 2002 if NUCSYN is defined; 1=Hurley et al. 2002 (overshooting models); 1=Karakas 2002 (non-overshooting models). | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_CORE_ALGORITHM_DEFAULT = 0', 'AGB_CORE_ALGORITHM_HURLEY = 1', 'AGB_CORE_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_radius_algorithm | **Description**: Algorithm to use for calculating radii on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_RADIUS_ALGORITHM_DEFAULT = 0', 'AGB_RADIUS_ALGORITHM_HURLEY = 1', 'AGB_RADIUS_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_luminosity_algorithm | **Description**: Algorithm to use for calculating luminosities on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_LUMINOSITY_ALGORITHM_DEFAULT = 0', 'AGB_LUMINOSITY_ALGORITHM_HURLEY = 1', 'AGB_LUMINOSITY_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_3dup_algorithm | **Description**: Algorithm to use for calculating third dredge up efficiency on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_THIRD_DREDGE_UP_ALGORITHM_DEFAULT = 0', 'AGB_THIRD_DREDGE_UP_ALGORITHM_HURLEY = 1', 'AGB_THIRD_DREDGE_UP_ALGORITHM_KARAKAS = 2', 'AGB_THIRD_DREDGE_UP_ALGORITHM_STANCLIFFE = 3'] | **Parameter**: overspin_algorithm @@ -1136,6 +1083,21 @@ Section: stars | **Parameter input type**: True|False | **Default value**: False +| **Parameter**: degenerate_core_merger_nucsyn +| **Description**: If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) +| **Parameter input type**: True|False +| **Default value**: False + +| **Parameter**: degenerate_core_helium_merger_ignition +| **Description**: If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) +| **Parameter input type**: True|False +| **Default value**: True + +| **Parameter**: degenerate_core_merger_dredgeup_fraction +| **Description**: If non-zero, mix this fraction of the degenerate core during a merger.(0.0). +| **Parameter input type**: Float +| **Default value**: 0 + Section: binary --------------- @@ -1308,7 +1270,7 @@ Section: binary | **Parameter**: post_ce_objects_have_envelopes | **Description**: If TRUE then post-common-envelope objects have thin envelopes. You need this if you are to have post-CE post-AGB stars. Note that this *may* be unstable, i.e. you may end up having many CEEs. The mass in the envelope is controlled by post_ce_adaptive_menv. TRUE by default. | **Parameter input type**: True|False -| **Default value**: True +| **Default value**: False | **Parameter**: PN_comenv_transition_time | **Description**: post-common envelope transition time in years (1e2). This is the time taken to move from CEE ejection to Teff > 30e4 K. Hall et al. (2013) suggest ~100 years. @@ -1478,18 +1440,20 @@ Section: binary | **Parameter**: type_Ia_MCh_supernova_algorithm | **Description**: Algorithm to be used when calculating type Ia yields from Chandrasekhar-mass exploders. 0 = DD7 (Iwamoto 1999), 1 = Seitenzahl 2013 3D hydro yields (you must also set Seitenzahl2013_model) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['TYPE_IA_MCH_SUPERNOVA_ALGORITHM_DD2 = 0', 'TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013 = 1', 'TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013_AUTOMATIC = 2'] | **Parameter**: Seitenzahl2013_model | **Description**: Which of Seitenzahl et al. 2013's models to use? One of N1,N3,N5,N10,N20,N40,N100L,N100,N100H,N150,N200,N300C,N1600,N1600C,N100_Z0.5,N100_Z0.1,N100_Z0.01 (defaults to N100). | **Parameter input type**: String -| **Default value**: NULL +| **Default value**: N100 | **Extra**: N1 | **Parameter**: type_Ia_sub_MCh_supernova_algorithm | **Description**: Algorithm to be used when calculating type Ia yields from sub-Chandrasekhar-mass exploders. (Currently unused.) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['TYPE_IA_SUB_MCH_SUPERNOVA_ALGORITHM_LIVNE_ARNETT_1995 = 0'] | **Parameter**: max_HeWD_mass | **Description**: The maximum mass a HeWD can have before it ignites helium (0.7). @@ -2130,7 +2094,7 @@ Section: nucsyn | **Parameter**: NeNaMgAl | **Description**: Enables NeNaMgAl reaction network. Requires NUCSYN and NUCSYN_HBB. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: Ignore | **Parameter**: nucsyn_network%d @@ -2151,19 +2115,21 @@ Section: nucsyn | **Parameter**: nucsyn_metallicity | **Description**: This sets the metallicity of the nucleosynthesis algorithms, i.e. the amount (by mass) of matter which is not hydrogen or helium. Usually you'd just set this with the metallicity parameter, but if you want the nucleosynthesis to be outside the range of the stellar evolution algorithm (e.g. Z=0 or Z=0.04) then you need to use nucsyn_metallicity. That said, it's also outside the range of some of the nucleosynthesis algorithms as well, so you have been warned! | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['DEFAULT_TO_METALLICITY = -1'] | **Parameter**: nucsyn_solver | **Description**: Choose the solver used in nuclear burning. 0 = KAPS_RENTROP is a Kaps-Rentrop scheme (fast, not great for stiff problems), 1 = LSODA (Adams/BSF switcher), 2 = CVODE library (https://computing.llnl.gov/projects/sundials. Default 0. | **Parameter input type**: Unsigned integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['NUCSYN_SOLVER_KAPS_RENTROP = 0', 'NUCSYN_SOLVER_LSODA = 1', 'NUCSYN_SOLVER_CVODE = 2', 'NUCSYN_SOLVER_NUMBER = 3', 'NUCSYN_SOLVER_KAPS_RENTROP = 0', 'NUCSYN_SOLVER_LSODA = 1', 'NUCSYN_SOLVER_CVODE = 2', 'NUCSYN_SOLVER_NUMBER = 3'] | **Extra**: 0 | **Parameter**: initial_abundance_mix | **Description**: initial abundance mixture: 0=AG89, 1=Karakas 2002, 2=Lodders 2003, 3=Asplund 2005 (not available?), 4=Garcia Berro, 5=Grevesse Noels 1993 | **Parameter input type**: Unsigned integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['NUCSYN_INIT_ABUND_MIX_AG89 = 0', 'NUCSYN_INIT_ABUND_MIX_KARAKAS2002 = 1', 'NUCSYN_INIT_ABUND_MIX_LODDERS2003 = 2', 'NUCSYN_INIT_ABUND_MIX_ASPLUND2005 = 3', 'NUCSYN_INIT_ABUND_MIX_GARCIABERRO = 4', 'NUCSYN_INIT_ABUND_MIX_GREVESSE_NOELS_1993 = 5', 'NUCSYN_INIT_ABUND_MIX_ASPLUND2009 = 6', 'NUCSYN_INIT_ABUND_MIX_KOBAYASHI2011_ASPLUND2009 = 7', 'NUCSYN_INIT_ABUND_MIX_LODDERS2010 = 8'] | **Extra**: 0 | **Parameter**: init_abund @@ -2187,37 +2153,38 @@ Section: nucsyn | **Parameter**: init_abunds_only | **Description**: If True, outputs only the initial abundances, then exits. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: initial_abunds_only | **Description**: If True, outputs only the initial abundances, then exits. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: no_thermohaline_mixing | **Description**: If True, disables thermohaline mixing. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: lithium_GB_post_Heflash | **Description**: Sets the lithium abundances after the helium flash. Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lithium_GB_post_1DUP | **Description**: Sets the lithium abundance after first dredge up. Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lithium_hbb_multiplier | **Description**: Multiplies the lithium abundances on the AGB during HBB (based on Karakas/Fishlock et al models).Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: angelou_lithium_decay_function | **Description**: Functional form which describes Li7 decay. Requires NUCSYN and NUCSYN_ANGELOU_LITHIUM. Choices are: 0 expoential (see angelou_lithium_decay_time). | **Parameter input type**: Integer | **Default value**: NULL +| **Macros**: ['ANGELOU_LITHIUM_DECAY_FUNCTION_EXPONENTIAL = 0'] | **Parameter**: angelou_lithium_LMMS_time | **Description**: Time at which lithium manufacture is triggered in a low-mass (convective) main sequence (Myr). Requires NUCSYN and NUCSYN_ANGELOU_LITHIUM. Ignored if 0 (for the start, use 1e-6). @@ -2337,16 +2304,10 @@ Section: nucsyn Section: output --------------- -| **Parameter**: david_logging_function -| **Description**: Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions -| **Parameter input type**: Integer -| **Default value**: 0 -| **Extra**: Ignore - | **Parameter**: cf_amanda_log | **Description**: Enable logging to compare to Amanda's models. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: float_overflow_checks | **Description**: Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) @@ -2386,7 +2347,7 @@ Section: output | **Parameter**: legacy_yields | **Description**: Turn on ensemble legacy yield output. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: ensemble_defer | **Description**: Defer ensemble output. @@ -2426,27 +2387,27 @@ Section: output | **Parameter**: EMP_logg_maximum | **Description**: Maximum logg that EMP stars are allowed to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_minimum_age. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 4 | **Parameter**: EMP_minimum_age | **Description**: Minimum age that EMP stars are required to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 10 | **Parameter**: EMP_feh_maximum | **Description**: Maximum [Fe/H] that an EMP stars may have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default -2.0. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -2 | **Parameter**: CEMP_cfe_minimum | **Description**: Minimum [C/Fe] that CEMP stars are required to have. See Izzard et al 2009. See also NEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 0.7. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.7 | **Parameter**: NEMP_cfe_minimum | **Description**: Minimum [N/Fe] that NEMP stars are required to have. See Izzard et al 2009, Pols et al. 2012. See also CEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 1.0. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: thick_disc_start_age | **Description**: Lookback time for the start of the thick disc star formation, e.g. 13e3 Myr. Units = Myr. @@ -2582,99 +2543,99 @@ Section: input | **Parameter**: MINT_dir | **Description**: Location of MINT algorithm data. | **Parameter input type**: String -| **Default value**: NULL +| **Default value**: | **Extra**: | **Parameter**: MINT_data_cleanup | **Description**: Activate checks on incoming data to try to account for problems. Will make data-loading slower, but may fix a few things. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_MS_rejuvenation | **Description**: Turn on or off (hydrogen) main-sequence rejuvenation. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_remesh | **Description**: Turn on or off MINT's remeshing. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_use_ZAMS_profiles | **Description**: Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_fallback_to_test_data | **Description**: If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_disable_grid_load_warnings | **Description**: Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_Kippenhahn | **Description**: Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 | **Extra**: | **Parameter**: MINT_nshells | **Description**: Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 200 | **Extra**: | **Parameter**: MINT_maximum_nshells | **Description**: Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 1000 | **Extra**: | **Parameter**: MINT_minimum_nshells | **Description**: Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 10 | **Extra**: | **Parameter**: MINT_Kippenhahn_stellar_type | **Description**: Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['LOW_MASS_MS = 0', 'MS = 1', 'HG = 2', 'GIANT_BRANCH = 3', 'CHeB = 4', 'EAGB = 5', 'TPAGB = 6', 'HeMS = 7', 'HeHG = 8', 'HeGB = 9', 'HeWD = 10', 'COWD = 11', 'ONeWD = 12', 'NS = 13', 'BH = 14', 'MASSLESS_REMNANT = 15'] | **Extra**: | **Parameter**: MINT_Kippenhahn_companion_stellar_type | **Description**: Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['LOW_MASS_MS = 0', 'MS = 1', 'HG = 2', 'GIANT_BRANCH = 3', 'CHeB = 4', 'EAGB = 5', 'TPAGB = 6', 'HeMS = 7', 'HeHG = 8', 'HeGB = 9', 'HeWD = 10', 'COWD = 11', 'ONeWD = 12', 'NS = 13', 'BH = 14', 'MASSLESS_REMNANT = 15'] | **Extra**: | **Parameter**: MINT_nuclear_burning | **Description**: Turn on or off MINT's nuclear burning algorithm. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_minimum_shell_mass | **Description**: Minimum shell mass in MINT's nuclear burning routines. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1e-06 | **Extra**: | **Parameter**: MINT_maximum_shell_mass | **Description**: Maximum shell mass in MINT's nuclear burning routines. : | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.1 | **Extra**: Section: i/o diff --git a/docs/build/html/_sources/example_notebooks.rst.txt b/docs/build/html/_sources/example_notebooks.rst.txt index 7e2eef403..d15ea559a 100644 --- a/docs/build/html/_sources/example_notebooks.rst.txt +++ b/docs/build/html/_sources/example_notebooks.rst.txt @@ -2,7 +2,7 @@ Example notebooks ================= We have a set of notebooks that explain and show the usage of the binarycpython features. The notebooks are also stored in the examples/ directory in the `repository <https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master/examples>`_ -The order of the notebooks below is more or less the recommended order to read. +The order of the notebooks below is more or less the recommended order to read. The last couple of notebooks are example usecases .. toctree:: :maxdepth: 2 @@ -12,4 +12,6 @@ The order of the notebooks below is more or less the recommended order to read. notebook_custom_logging.ipynb notebook_population.ipynb notebook_extra_features.ipynb - notebook_api_functionality.ipynb \ No newline at end of file + notebook_api_functionality.ipynb + notebook_luminosity_function_single.ipynb + notebook_luminosity_function_binaries.ipynb \ No newline at end of file diff --git a/docs/build/html/_sources/grid_options_descriptions.rst.txt b/docs/build/html/_sources/grid_options_descriptions.rst.txt index 319b8d56a..84538e2c4 100644 --- a/docs/build/html/_sources/grid_options_descriptions.rst.txt +++ b/docs/build/html/_sources/grid_options_descriptions.rst.txt @@ -1,7 +1,7 @@ Population grid code options ============================ The following chapter contains all grid code options, along with their descriptions -There are 1 options that are not described yet. +There are 2 options that are not described yet. Public options @@ -35,6 +35,8 @@ The following options are meant to be changed by the user. | **log_args_dir**: Directory to log the arguments to. Unused +| **log_dt**: No description available yet + | **log_file**: Log file for the population object. Unused | **log_runtime_systems**: Whether to log the runtime of the systems . Each systems run by the thread is logged to a file and is stored in the tmp_dir. (1 file per thread). Don't use this if you are planning to run a lot of systems. This is mostly for debugging and finding systems that take long to run. Integer, default = 0. if value is 1 then the systems are logged @@ -47,7 +49,7 @@ The following options are meant to be changed by the user. | **multiplicity_fraction_function**: Which multiplicity fraction function to use. 0: None, 1: Arenou 2010, 2: Rhagavan 2010, 3: M&S 2017 -| **parse_function**: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the grid_options['results'] dictionary, or just output results to a file +| **parse_function**: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the self.grid_results dictionary, or just output results to a file | **repeat**: Factor of how many times a system should be repeated. Consider the evolution splitting binary_c argument for supernovae kick repeating. diff --git a/docs/build/html/_sources/notebook_api_functionality.ipynb.txt b/docs/build/html/_sources/notebook_api_functionality.ipynb.txt index d81c31711..8d454880c 100644 --- a/docs/build/html/_sources/notebook_api_functionality.ipynb.txt +++ b/docs/build/html/_sources/notebook_api_functionality.ipynb.txt @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "ded7eaf6-e1ba-46c2-9f6f-9ebcb14a264d", "metadata": {}, "outputs": [ @@ -30,37 +30,69 @@ "\n", "FUNCTIONS\n", " free_persistent_data_memaddr_and_return_json_output(...)\n", - " Frees the persistent_data memory and returns the json output\n", + " Frees the persistent_data memory and returns the json output.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the persistent data object (contains the ensemble)\n", " \n", " free_store_memaddr(...)\n", - " Frees the store memaddr\n", + " Frees the store memaddr.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the store object\n", " \n", " return_arglines(...)\n", " Return the default args for a binary_c system\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_help(...)\n", " Return the help info for a given parameter\n", + " \n", + " Arguments:\n", + " parameter: parameter name.\n", " \n", " return_help_all(...)\n", " Return an overview of all the parameters, their description, categorized in sections\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_maximum_mass_ratio_for_RLOF(...)\n", - " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at zams. Optionally accepts a store_capsule. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_minimum_orbit_for_RLOF(...)\n", - " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at zams. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_persistent_data_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_store_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_version_info(...)\n", " Return the version information of the used binary_c build\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " run_system(...)\n", - " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things. \n", + " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things.\n", " \n", " Arguments:\n", " argstring: argument string for binary_c\n", @@ -126,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "10a74d5a-a3d5-4543-a5bc-20d1fe885bb4", "metadata": {}, "outputs": [ @@ -134,8 +166,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "<capsule object \"STORE\" at 0x7f163859d0c0>\n", - "SINGLE_STAR_LIFETIME 10 27.7358\n", + "<capsule object \"STORE\" at 0x7fa6a45ed180>\n", + "SINGLE_STAR_LIFETIME 10 28.4838\n", "\n" ] } @@ -183,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "318874f6-7acf-49bb-9786-299d4dffc0b3", "metadata": {}, "outputs": [ @@ -217,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "id": "d7e757ae-579c-42a2-a310-f0401b7800e8", "metadata": { "scrolled": true, @@ -291,6 +323,9 @@ "opacity_algorithm : Set the opacity algorithm. 0 = Paczynski, 1 = Ferguson/Opal. : (null)\n", "wind_mass_loss : Defines the algorithm used for stellar winds. 0 = none, 1 = Hurley et al. (2002), 2 = Schneider (2018). : 0\n", "gbwind : Wind prescription for first red giant branch stars. 0=Reimers (Hurley et al 2000/2002; choose gb_reimers_eta=0.5 for their mass loss rate), 1=Schroeder+Cuntz 2005 (set gb_reimers_eta=1.0 for their mass loss rate). : (null)\n", + "postagbwind : Apply special post-(A)GB prescription. Default is POSTAGB_WIND_USE_GIANT which means we just use whatever is prescribed on the giant branch. Other options include: POSTAGB_WIND_NONE = 1 (no wind on the post (A)GB), POSTAGB_WIND_KRTICKA2020 = 2 which uses Krticka, Kubát and Krticková (2020, A&A 635, A173). : (null)\n", + "Teff_postAGB_min : The minimum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_max. (6000 K) : (null)\n", + "Teff_postAGB_max : The maximum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_min. (120000 K) : (null)\n", "mattsson_Orich_tpagbwind : Experimental : turns on Mattsson's TPAGB wind when the star is oxygen rich. Requires MATTSSON_MASS_LOSS. : (null)\n", "magnetic_braking_factor : Multiplier for the magnetic braking angular momentum loss rate. : (null)\n", "magnetic_braking_gamma : gamma factor in Rappaport style magnetic braking expression. : (null)\n", @@ -310,7 +345,9 @@ "vw93_mira_shift : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate depends on the Mira period plus this offset. Requires VW93_MIRA_SHIFT. : (null)\n", "vw93_multiplier : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate is multiplied by this factor. Requires VW93_MULTIPLIER. : (null)\n", "tpagb_reimers_eta : TPAGB Reimers wind multiplication factor, cf. eta in Reimers' mass loss formula. (This multiplies the 4e-13 in Reimers' formula, or the 8e-14 in Schroeder and Cuntz.) Note that Reimers is not the default TPAGB wind prescription. See also tpagbwind. : (null)\n", + "Tout_Pringle_1992_multiplier : Multiplier for the Tout & Pringle (1992) magnetic wind. (0.0) : (null)\n", "artificial_mass_accretion_rate%d : Constant mass accretion rate for star <n>. : (null)\n", + "artificial_mass_accretion_rate_by_stellar_type%d : Constant mass accretion rate for stellar type <n>. : (null)\n", "artificial_angular_momentum_accretion_rate%d : Constant angular momentum accretion for star <n>. : (null)\n", "artificial_orbital_angular_momentum_accretion_rate : Constant angular momentum accretion rate on the orbit. : (null)\n", "artificial_accretion_start_time : Time at which artificial accretion stars. Ignored if <0 (default is -1). : (null)\n", @@ -318,8 +355,7 @@ "wr_wind : Massive-star (WR) wind prescription. 0 = Hurley et al 2000/2002, 1=Maeder and Meynet, 2=Nugis and Lamers, 3=John Eldridge's version of Vink's early-2000s wind (See Lynnette Dray's thesis, or John Eldridge's thesis) : (null)\n", "wr_wind_fac : Massive-star (WR) wind multiplication factor. : (null)\n", "wrwindfac : Massive-star (WR) wind multiplication factor. Synonymous with wr_wind_fac (which you should use instead). : (null)\n", - "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. 0=Hurley et al 2000/2002, 1=Belczynski (early 2000s). : (null)\n", - "PPISN_prescription : (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. : Ignore\n", + "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. BH_HURLEY2002 = 0 = Hurley et al 2000/2002, BH_BELCZYNSKI = 1 = Belczynski (early 2000s), BH_SPERA2015 = Spera+ 2015, BH_FRYER12_DELAYED = 3 = Fryer et al. (2012) delayed prescription, BH_FRYER12_RAPID = 4 = Fryer et al. (2012) rapid prescription, BH_FRYER12_STARTRACK = 5 = Fryer et al. (2012) startrack prescription. : (null)\n", "sn_kick_distribution_II : Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_ECAP : Set the distribution of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_NS_NS : Set the distribution of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -331,9 +367,6 @@ "sn_kick_distribution_BH_NS : Set the distribution of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD : Set the distribution of speeds applied to any survivor of a hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD_subluminous : Set the distribution of speeds applied to any survivor of a subluminous hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PPISN : Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PISN : Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PHDIS : Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_II : Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_ECAP : Set the dispersion of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_NS_NS : Set the dispersion of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -345,9 +378,6 @@ "sn_kick_dispersion_BH_NS : Set the dispersion of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD : Set the dispersion of speeds applied to the survivor of a SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD_subluminous : Set the dispersion of speeds applied to the survivor of a subluminous SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PPISN : Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PISN : Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PHDIS : Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_companion_IA_He : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_ELD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia ELD (sub-Mch) supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_CHAND : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia Mch supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", @@ -368,9 +398,6 @@ "sn_kick_companion_BH_NS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a black hole merges with a neutron star. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD_subluminous : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a subluminous hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PPISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PHDIS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "wd_sigma : Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. : (null)\n", "wd_kick_direction : Set the direction of white dwarf kicks. 0 = random, 1 = up, 2 = forward, 3 = backward, 4 = inward, 5 = outward. Requires WD_KICKS. : (null)\n", "wd_kick_when : Decide when to kick a white dwarf. 0=at birth, 1=at first RLOF, 2=at given pulse number (see wd_kick_pulse_number), 3 at every pulse Requires WD_KICKS. : (null)\n", @@ -443,6 +470,11 @@ "HeWD_HeWD_ignition_mass : HeWD-HeWD mergers above this mass reignite helium. (0.3) : (null)\n", "wind_Nieuwenhuijzen_luminosity_lower_limit : Above this luminosity we activate the Nieuwenhuijzen and de Jager wind (4e3 Lsun). : (null)\n", "wind_LBV_luminosity_lower_limit : Above this luminosity we activate the LBV wind (6e5 Lsun). : (null)\n", + "colour%d : Sets colour %d (0 to NUM_ANSI_COLOURS-1) to the extended ANSI set colour you choose (1-255, 0 means ignore). The colour numbers are defined in src/logging/ansi_colours.h : (null)\n", + "apply_Darwin_Radau_correction : Apply Darwin-Radau correction to the moment of inertia to take rotation into account? : (null)\n", + "degenerate_core_merger_nucsyn : If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) : (null)\n", + "degenerate_core_helium_merger_ignition : If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) : (null)\n", + "degenerate_core_merger_dredgeup_fraction : If non-zero, mix this fraction of the degenerate core during a merger.(0.0). : (null)\n", "\n", "############################################################\n", "##### Section Binary\n", @@ -709,7 +741,6 @@ "############################################################\n", "##### Section Output\n", "############################################################\n", - "david_logging_function : Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions : Ignore\n", "cf_amanda_log : Enable logging to compare to Amanda's models. : (null)\n", "float_overflow_checks : Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) : (null)\n", "save_pre_events_stardata : Enable this to save a copy of stardata to stardata->pre_events_stardata just before an event. : (null)\n", @@ -739,6 +770,7 @@ "escape_fraction : A parameter used in constructing galactic chemical evolution (GCE) models. If the stellar wind velocity exceeds this value, any chemical yield from the wind is ignored, i.e. assumed lost. (km/s) Requires NUCSYN_GCE_OUTFLOW_CHECKS. Default 0.0. See also escape_velocity. : (null)\n", "colour_log : If set to True, thelog is coloured with ANSI colour formatting. Requires FILE_LOG to be defined. : \n", "log_filename : Location of the output logging filename. If set to \"/dev/null\" then there is no logging. : \n", + "log_arrows : Add arrows to the output log to show whether values are increasing or decreasing. : \n", "stopfile : File which, when it exists, will stop the current binary_c repeat run. : \n", "stardata_dump_filename : Location of the stardata dump file. : \n", "stardata_load_filename : Location of the stardata file to load. : \n", @@ -763,8 +795,12 @@ "MINT_MS_rejuvenation : Turn on or off (hydrogen) main-sequence rejuvenation. : \n", "MINT_remesh : Turn on or off MINT's remeshing. : \n", "MINT_use_ZAMS_profiles : Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) : \n", + "MINT_fallback_to_test_data : If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) : \n", "MINT_disable_grid_load_warnings : Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. : \n", "MINT_Kippenhahn : Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. : \n", + "MINT_nshells : Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) : \n", + "MINT_maximum_nshells : Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) : \n", + "MINT_minimum_nshells : Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) : \n", "MINT_Kippenhahn_stellar_type : Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. : \n", "MINT_Kippenhahn_companion_stellar_type : Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. : \n", "MINT_nuclear_burning : Turn on or off MINT's nuclear burning algorithm. : \n", @@ -825,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "3d29ca9d-ac66-4f9e-81cf-2edd14a98b79", "metadata": {}, "outputs": [ @@ -854,7 +890,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "e517f561-09c6-419d-ba89-d9cb61e6ebab", "metadata": {}, "outputs": [ @@ -887,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 7, "id": "7da75a95-8831-4346-a584-e042ced75249", "metadata": {}, "outputs": [ diff --git a/docs/build/html/_sources/notebook_custom_logging.ipynb.txt b/docs/build/html/_sources/notebook_custom_logging.ipynb.txt index 05ffbccfc..84e41e6bc 100644 --- a/docs/build/html/_sources/notebook_custom_logging.ipynb.txt +++ b/docs/build/html/_sources/notebook_custom_logging.ipynb.txt @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 1, "id": "696ecbb9-1efd-48f4-a57e-2cf6dfe416f1", "metadata": {}, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "236cf821-09ac-4237-9b8f-6e36d2edf446", "metadata": {}, "outputs": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "id": "feb423d5-5cc3-433c-9801-f8017abbc03a", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "id": "2f5defbf-c623-49ed-a238-fba52a563a58", "metadata": {}, "outputs": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "id": "dcd74bbc-478b-43e4-b495-8c456e8d1d88", "metadata": {}, "outputs": [ @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "id": "77bd09b0-1a94-499d-97db-a1f991c67c12", "metadata": {}, "outputs": [ @@ -203,10 +203,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_ABOVE_MS 1.041660877905e+02 4.99198 4.99198 6.1357 6.1357 2 1\n", - "EXAMPLE_ABOVE_MS 1.041662558619e+02 4.99198 4.99198 6.14057 6.1357 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662560111e+02 4.99198 4.99198 6.14057 6.14057 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 2 2\n" + "EXAMPLE_ABOVE_MS 1.044142002936e+02 4.99194 4.99194 6.13567 6.13567 2 1\n", + "EXAMPLE_ABOVE_MS 1.044572277695e+02 4.99192 4.99194 7.51803 6.13567 2 2\n", + "EXAMPLE_ABOVE_MS 1.044654032097e+02 4.99192 4.99192 7.81395 7.51803 2 2\n", + "EXAMPLE_ABOVE_MS 1.045084306856e+02 4.99191 4.99192 9.57443 7.81395 2 2\n" ] } ], @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 7, "id": "30142286-34ce-433e-82c8-565e2160ff5b", "metadata": {}, "outputs": [ @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 8, "id": "6f0edc65-a788-4706-a0c5-2ace030765ec", "metadata": {}, "outputs": [ @@ -344,8 +344,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "SINGLE_STAR_LIFETIME 10 27.7358\n", - "EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.446 13 5\n" + "SINGLE_STAR_LIFETIME 10 28.4838\n", + "EXAMPLE_LOG_CO 2.848380621869e+01 1.33469 9.1865 1.72498e-05 724.338 13 5\n" ] } ], @@ -395,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "id": "8f58fdf9-3e76-4c18-a1c5-eed0980d4133", "metadata": {}, "outputs": [ @@ -403,8 +403,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_MASSLOSS 9.878236827680e+00 1.61349 8.38063 20 13 1\n", - "EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4.92267 6.74037 0 0\n" + "EXAMPLE_MASSLOSS 1.050651207308e+01 1.59452 9.34213 20 13 1\n", + "EXAMPLE_SN 1.050651207308e+01 1.59452 9.34213 20 12 13 5 1 6.55458 4.71662 6.55458\n" ] } ], @@ -424,58 +424,27 @@ "{\n", " if (stardata->model.time < stardata->model.max_evolution_time)\n", " {\n", - " if(stardata->pre_events_stardata != NULL)\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", - "\n", - " stardata->star[0].mass, //2\n", - " stardata->pre_events_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", + " \"%g %g %g %d \" // 2-5\n", + " \"%d %d %g %g \" // 6-9\n", + " \"%g %g\\\\n\", // 10-13\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->pre_events_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->pre_events_stardata->star[0].core_mass[ID_core(stardata->pre_events_stardata->star[0].stellar_type)], // 9\n", - "\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", - " else\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", + " // \n", + " stardata->model.time, // 1\n", "\n", - " stardata->star[0].mass, //2\n", - " stardata->previous_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " stardata->star[0].mass, //2\n", + " stardata->previous_stardata->star[0].mass, //3\n", + " stardata->common.zero_age.mass[0], //4\n", + " stardata->star[0].SN_type, //5\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->previous_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", + " stardata->star[0].stellar_type, //6\n", + " stardata->previous_stardata->star[0].stellar_type, //7\n", + " stardata->model.probability, //8\n", + " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", "\n", - " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->previous_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", + " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", + " stardata->previous_stardata->star[0].core_mass[CORE_He] // 11\n", + " );\n", " };\n", " /* Kill the simulation to save time */\n", " stardata->model.max_evolution_time = stardata->model.time - stardata->model.dtm;\n", @@ -491,6 +460,14 @@ "# print (abridged) output\n", "print(\"\\n\".join(output.splitlines()[-2:]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "484297c0-accb-4efc-a9c8-dbd2f32b89a6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/build/html/_sources/notebook_luminosity_function_binaries.ipynb.txt b/docs/build/html/_sources/notebook_luminosity_function_binaries.ipynb.txt new file mode 100644 index 000000000..fb64dbcc9 --- /dev/null +++ b/docs/build/html/_sources/notebook_luminosity_function_binaries.ipynb.txt @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": {}, + "source": [ + "# Zero-age stellar luminosity function in binaries\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c. \n", + "\n", + "Before you go through this notebook, you should look at notebook_luminosity_function.ipynb which is for the - conceptually more simple - single stars.\n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " )\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 1.0 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up the binary grid in \"cubic\" M1 - M2=q*M1 - log10 period space\n", + "\n", + "population = Population()\n", + "\n", + "# resolution on each side of the cube, with more stars for the primary mass\n", + "nres = 10\n", + "resolution = {\"M_1\": 2*nres,\n", + " \"q\": nres,\n", + " \"per\": nres}\n", + "\n", + "massrange = [0.07,100]\n", + "logperrange = [0.15, 5.5]\n", + "\n", + "population.add_grid_variable(\n", + " name=\"lnm1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{}\".format(resolution[\"M_1\"]),\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min=massrange[0],max=massrange[1],res=resolution[\"M_1\"]),\n", + " precode=\"M_1=math.exp(lnm1)\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnm1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")\n", + "\n", + "# Mass ratio\n", + "population.add_grid_variable(\n", + " name=\"q\",\n", + " longname=\"Mass ratio\",\n", + " valuerange=[\"0.1/M_1\", 1],\n", + " resolution=\"{}\".format(resolution['q']),\n", + " spacingfunc=\"const({}/M_1, 1, {})\".format(massrange[0],resolution['q']),\n", + " probdist=\"flatsections(q, [{{'min': {}/M_1, 'max': 1.0, 'height': 1}}])\".format(massrange[0]),\n", + " dphasevol=\"dq\",\n", + " precode=\"M_2 = q * M_1\",\n", + " parameter_name=\"M_2\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + " )\n", + "\n", + "# Orbital period\n", + "population.add_grid_variable(\n", + " name=\"log10per\", # in days\n", + " longname=\"log10(Orbital_Period)\",\n", + " valuerange=[0.15, 5.5],\n", + " resolution=\"{}\".format(resolution[\"per\"]),\n", + " spacingfunc=\"const({}, {}, {})\".format(logperrange[0],logperrange[1],resolution[\"per\"]),\n", + " precode=\"\"\"orbital_period = 10.0 ** log10per\n", + "sep = calc_sep_from_period(M_1, M_2, orbital_period)\n", + "sep_min = calc_sep_from_period(M_1, M_2, 10**{})\n", + "sep_max = calc_sep_from_period(M_1, M_2, 10**{})\"\"\".format(logperrange[0],logperrange[1]),\n", + " probdist=\"sana12(M_1, M_2, sep, orbital_period, sep_min, sep_max, math.log10(10**{}), math.log10(10**{}), {})\".format(logperrange[0],logperrange[1],-0.55),\n", + " parameter_name=\"orbital_period\",\n", + " dphasevol=\"dlog10per\",\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The \n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STARn\n", + "#\n", + "# where:\n", + "#\n", + "# n = PRIMARY = 0 is star 0 (primary star)\n", + "# n = SECONDARY = 1 is star 1 (secondary star)\n", + "# n = UNRESOLVED = 2 is the unresolved system (both stars added)\n", + "\n", + "PRIMARY = 0\n", + "SECONDARY = 1\n", + "UNRESOLVED = 2\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "// select ZAMS\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->model.time == 0)\n", + "{\n", + " // loop over the stars individually (equivalent to a resolved binary) \n", + " Foreach_star(star)\n", + " {\n", + " // select main-sequence stars\n", + " if(star->stellar_type <= MAIN_SEQUENCE)\n", + " {\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " star->starnum,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " star->mass, // 3\n", + " star->luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + " }\n", + " \n", + " // unresolved MS-MS binary\n", + " if(stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->star[1].stellar_type <= MAIN_SEQUENCE) \n", + " {\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " 2,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0] + stardata->common.zero_age.mass[1], // 2\n", + " stardata->star[0].mass + stardata->star[1].mass, // 3\n", + " stardata->star[0].luminosity + stardata->star[1].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + "}\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "import re\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " \n", + " # check if we match a ZERO_AGE_MAIN_SEQUENCE_STAR\n", + " match = re.search('ZERO_AGE_MAIN_SEQUENCE_STAR(\\d)',line) \n", + " if match:\n", + " nstar = match.group(1) \n", + " #print(\"matched star\",nstar)\n", + "\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + "\n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][int(nstar)][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: amt_cores=4 to grid_options\n", + "Running the population now, this may take a little while...\n", + "Creating and loading custom logging functionality\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "Grid has handled 2000 stars\n", + "with a total probability of 0.6495098935846658\n", + "Total starcount for this run will be: 2000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:14:08,077 DEBUG Process-2] --- Setting up processor: process-0[2021-09-10 15:14:08,080 DEBUG Process-3] --- Setting up processor: process-1[2021-09-10 15:14:08,086 DEBUG MainProcess] --- setting up the system_queue_filler now\n", + "\n", + "[2021-09-10 15:14:08,084 DEBUG Process-4] --- Setting up processor: process-2\n", + "\n", + "[2021-09-10 15:14:08,117 DEBUG Process-5] --- Setting up processor: process-3" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 started at 2021-09-10T15:14:08.119437.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>Process 0 started at 2021-09-10T15:14:08.126435.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>\n", + "Process 2 started at 2021-09-10T15:14:08.138353.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Process 3 started at 2021-09-10T15:14:08.186492.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "624/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB625/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.04e-03 ETF=15:14:23 mem:800.5MB\n", + "626/2000 31.3% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB\n", + "\n", + "713/2000 35.6% complete 15:14:17 ETA= 1.3m tpr=6.00e-02 ETF=15:15:34 mem:547.8MB\n", + "728/2000 36.4% complete 15:14:22 ETA= 7.1m tpr=3.37e-01 ETF=15:21:30 mem:548.1MB\n", + "743/2000 37.1% complete 15:14:27 ETA= 7.0m tpr=3.34e-01 ETF=15:21:26 mem:549.5MB\n", + "759/2000 38.0% complete 15:14:33 ETA= 7.7m tpr=3.73e-01 ETF=15:22:16 mem:550.5MB\n", + "774/2000 38.7% complete 15:14:38 ETA= 6.9m tpr=3.35e-01 ETF=15:21:29 mem:551.1MB\n", + "787/2000 39.4% complete 15:14:43 ETA= 7.8m tpr=3.88e-01 ETF=15:22:33 mem:551.1MB\n", + "799/2000 40.0% complete 15:14:48 ETA= 8.5m tpr=4.24e-01 ETF=15:23:17 mem:552.5MB\n", + "812/2000 40.6% complete 15:14:54 ETA= 8.4m tpr=4.23e-01 ETF=15:23:16 mem:554.8MB\n", + "830/2000 41.5% complete 15:14:59 ETA= 5.5m tpr=2.80e-01 ETF=15:20:26 mem:555.2MB\n", + "847/2000 42.4% complete 15:15:05 ETA= 6.8m tpr=3.52e-01 ETF=15:21:50 mem:555.2MB\n", + "864/2000 43.2% complete 15:15:10 ETA= 6.2m tpr=3.28e-01 ETF=15:21:23 mem:557.0MB\n", + "876/2000 43.8% complete 15:15:15 ETA= 8.2m tpr=4.38e-01 ETF=15:23:27 mem:559.7MB\n", + "887/2000 44.4% complete 15:15:21 ETA= 9.2m tpr=4.95e-01 ETF=15:24:32 mem:560.5MB\n", + "898/2000 44.9% complete 15:15:26 ETA= 9.2m tpr=4.99e-01 ETF=15:24:37 mem:560.5MB\n", + "908/2000 45.4% complete 15:15:32 ETA= 9.5m tpr=5.23e-01 ETF=15:25:03 mem:560.5MB\n", + "919/2000 46.0% complete 15:15:37 ETA= 8.3m tpr=4.60e-01 ETF=15:23:54 mem:560.9MB\n", + "934/2000 46.7% complete 15:15:42 ETA= 6.4m tpr=3.60e-01 ETF=15:22:06 mem:561.7MB\n", + "947/2000 47.4% complete 15:15:47 ETA= 7.2m tpr=4.08e-01 ETF=15:22:57 mem:561.7MB\n", + "956/2000 47.8% complete 15:15:53 ETA= 11.1m tpr=6.39e-01 ETF=15:27:01 mem:561.7MB\n", + "963/2000 48.1% complete 15:15:58 ETA= 12.6m tpr=7.30e-01 ETF=15:28:35 mem:561.7MB\n", + "969/2000 48.5% complete 15:16:04 ETA= 15.2m tpr=8.85e-01 ETF=15:31:16 mem:561.9MB\n", + "979/2000 49.0% complete 15:16:11 ETA= 11.9m tpr=7.01e-01 ETF=15:28:06 mem:562.0MB\n", + "988/2000 49.4% complete 15:16:16 ETA= 9.7m tpr=5.76e-01 ETF=15:25:59 mem:562.0MB\n", + "995/2000 49.8% complete 15:16:21 ETA= 12.3m tpr=7.37e-01 ETF=15:28:42 mem:562.2MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:16:25,175 DEBUG MainProcess] --- Signaling stop to processes\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1003/2000 50.1% complete 15:16:26 ETA= 11.2m tpr=6.76e-01 ETF=15:27:40 mem:563.0MB\n", + "1015/2000 50.8% complete 15:16:32 ETA= 7.6m tpr=4.65e-01 ETF=15:24:10 mem:563.0MB\n", + "1025/2000 51.2% complete 15:16:37 ETA= 8.1m tpr=5.01e-01 ETF=15:24:45 mem:563.0MB\n", + "1033/2000 51.6% complete 15:16:42 ETA= 10.7m tpr=6.65e-01 ETF=15:27:26 mem:563.0MB\n", + "1040/2000 52.0% complete 15:16:47 ETA= 12.1m tpr=7.55e-01 ETF=15:28:52 mem:563.5MB\n", + "1048/2000 52.4% complete 15:16:53 ETA= 11.8m tpr=7.45e-01 ETF=15:28:42 mem:563.5MB\n", + "1057/2000 52.9% complete 15:16:59 ETA= 9.1m tpr=5.78e-01 ETF=15:26:03 mem:563.6MB\n", + "1062/2000 53.1% complete 15:17:04 ETA= 15.7m tpr=1.01e+00 ETF=15:32:47 mem:564.4MB\n", + "1069/2000 53.5% complete 15:17:09 ETA= 12.4m tpr=7.97e-01 ETF=15:29:31 mem:564.9MB\n", + "1077/2000 53.9% complete 15:17:15 ETA= 11.5m tpr=7.46e-01 ETF=15:28:44 mem:565.0MB\n", + "1085/2000 54.2% complete 15:17:20 ETA= 10.0m tpr=6.55e-01 ETF=15:27:20 mem:565.0MB\n", + "1091/2000 54.5% complete 15:17:26 ETA= 13.8m tpr=9.10e-01 ETF=15:31:13 mem:565.9MB\n", + "1099/2000 55.0% complete 15:17:32 ETA= 12.1m tpr=8.05e-01 ETF=15:29:37 mem:566.5MB\n", + "1114/2000 55.7% complete 15:17:37 ETA= 5.0m tpr=3.35e-01 ETF=15:22:34 mem:566.5MB\n", + "1126/2000 56.3% complete 15:17:43 ETA= 6.8m tpr=4.64e-01 ETF=15:24:29 mem:566.5MB\n", + "1134/2000 56.7% complete 15:17:48 ETA= 9.2m tpr=6.37e-01 ETF=15:27:00 mem:566.6MB\n", + "1139/2000 57.0% complete 15:17:54 ETA= 16.3m tpr=1.14e+00 ETF=15:34:13 mem:567.4MB\n", + "1148/2000 57.4% complete 15:17:59 ETA= 8.8m tpr=6.20e-01 ETF=15:26:47 mem:567.4MB\n", + "1156/2000 57.8% complete 15:18:05 ETA= 9.3m tpr=6.60e-01 ETF=15:27:22 mem:567.5MB\n", + "1162/2000 58.1% complete 15:18:11 ETA= 14.3m tpr=1.02e+00 ETF=15:32:28 mem:567.6MB\n", + "1168/2000 58.4% complete 15:18:17 ETA= 15.2m tpr=1.09e+00 ETF=15:33:27 mem:568.6MB\n", + "1177/2000 58.9% complete 15:18:23 ETA= 8.8m tpr=6.45e-01 ETF=15:27:14 mem:568.6MB\n", + "1181/2000 59.0% complete 15:18:28 ETA= 17.8m tpr=1.30e+00 ETF=15:36:16 mem:568.7MB\n", + "1187/2000 59.4% complete 15:18:34 ETA= 12.1m tpr=8.93e-01 ETF=15:30:40 mem:568.7MB\n", + "1194/2000 59.7% complete 15:18:39 ETA= 9.8m tpr=7.29e-01 ETF=15:28:26 mem:568.8MB\n", + "1202/2000 60.1% complete 15:18:44 ETA= 9.5m tpr=7.12e-01 ETF=15:28:12 mem:568.8MB\n", + "1219/2000 61.0% complete 15:18:51 ETA= 5.3m tpr=4.07e-01 ETF=15:24:09 mem:569.7MB\n", + "1228/2000 61.4% complete 15:18:57 ETA= 7.4m tpr=5.76e-01 ETF=15:26:21 mem:569.7MB\n", + "1234/2000 61.7% complete 15:19:02 ETA= 11.8m tpr=9.22e-01 ETF=15:30:48 mem:571.7MB1235/2000 61.8% complete 15:19:02 ETA= 10.1m tpr=7.92e-01 ETF=15:29:08 mem:571.7MB\n", + "\n", + "1243/2000 62.1% complete 15:19:07 ETA= 7.3m tpr=5.79e-01 ETF=15:26:26 mem:573.4MB\n", + "1251/2000 62.5% complete 15:19:13 ETA= 8.3m tpr=6.68e-01 ETF=15:27:33 mem:575.4MB\n", + "1260/2000 63.0% complete 15:19:19 ETA= 8.2m tpr=6.65e-01 ETF=15:27:31 mem:575.4MB\n", + "1268/2000 63.4% complete 15:19:24 ETA= 7.8m tpr=6.41e-01 ETF=15:27:13 mem:576.8MB\n", + "1276/2000 63.8% complete 15:19:29 ETA= 7.6m tpr=6.30e-01 ETF=15:27:05 mem:577.0MB\n", + "1282/2000 64.1% complete 15:19:34 ETA= 10.1m tpr=8.44e-01 ETF=15:29:40 mem:578.0MB\n", + "1289/2000 64.5% complete 15:19:40 ETA= 10.8m tpr=9.08e-01 ETF=15:30:26 mem:578.0MB\n", + "1295/2000 64.8% complete 15:19:46 ETA= 10.5m tpr=8.95e-01 ETF=15:30:16 mem:578.1MB\n", + "1309/2000 65.5% complete 15:19:51 ETA= 4.3m tpr=3.70e-01 ETF=15:24:06 mem:578.1MB\n", + "1323/2000 66.2% complete 15:19:58 ETA= 6.1m tpr=5.45e-01 ETF=15:26:07 mem:579.2MB\n", + "1332/2000 66.6% complete 15:20:03 ETA= 6.2m tpr=5.58e-01 ETF=15:26:16 mem:579.3MB\n", + "1338/2000 66.9% complete 15:20:09 ETA= 10.1m tpr=9.11e-01 ETF=15:30:12 mem:579.3MB\n", + "1346/2000 67.3% complete 15:20:18 ETA= 12.5m tpr=1.14e+00 ETF=15:32:46 mem:581.5MB\n", + "1355/2000 67.8% complete 15:20:25 ETA= 8.5m tpr=7.90e-01 ETF=15:28:54 mem:581.6MB\n", + "1359/2000 68.0% complete 15:20:30 ETA= 13.9m tpr=1.30e+00 ETF=15:34:26 mem:581.6MB\n", + "1366/2000 68.3% complete 15:20:38 ETA= 11.7m tpr=1.10e+00 ETF=15:32:18 mem:581.7MB\n", + "1376/2000 68.8% complete 15:20:44 ETA= 6.1m tpr=5.89e-01 ETF=15:26:51 mem:581.7MB\n", + "1384/2000 69.2% complete 15:20:49 ETA= 6.9m tpr=6.76e-01 ETF=15:27:46 mem:581.7MB\n", + "1393/2000 69.7% complete 15:20:55 ETA= 6.2m tpr=6.13e-01 ETF=15:27:07 mem:581.8MB1394/2000 69.7% complete 15:20:55 ETA= 5.6m tpr=5.52e-01 ETF=15:26:29 mem:581.8MB\n", + "\n", + "1423/2000 71.2% complete 15:21:00 ETA= 1.6m tpr=1.69e-01 ETF=15:22:37 mem:581.9MB\n", + "1435/2000 71.8% complete 15:21:07 ETA= 5.6m tpr=5.92e-01 ETF=15:26:42 mem:582.3MB\n", + "1443/2000 72.2% complete 15:21:12 ETA= 6.1m tpr=6.54e-01 ETF=15:27:17 mem:582.5MB\n", + "1445/2000 72.2% complete 15:21:18 ETA= 28.2m tpr=3.05e+00 ETF=15:49:28 mem:582.6MB\n", + "1448/2000 72.4% complete 15:21:25 ETA= 20.0m tpr=2.18e+00 ETF=15:41:27 mem:582.6MB\n", + "1454/2000 72.7% complete 15:21:31 ETA= 8.6m tpr=9.49e-01 ETF=15:30:09 mem:583.0MB\n", + "1455/2000 72.8% complete 15:21:37 ETA= 54.9m tpr=6.05e+00 ETF=16:16:32 mem:583.0MB\n", + "1459/2000 73.0% complete 15:21:43 ETA= 13.5m tpr=1.50e+00 ETF=15:35:12 mem:583.0MB\n", + "1465/2000 73.2% complete 15:21:48 ETA= 8.6m tpr=9.65e-01 ETF=15:30:25 mem:583.0MB\n", + "1474/2000 73.7% complete 15:21:54 ETA= 5.6m tpr=6.38e-01 ETF=15:27:30 mem:583.0MB\n", + "1482/2000 74.1% complete 15:21:59 ETA= 5.4m tpr=6.30e-01 ETF=15:27:26 mem:583.0MB\n", + "1485/2000 74.2% complete 15:22:04 ETA= 14.8m tpr=1.73e+00 ETF=15:36:54 mem:583.5MB\n", + "1487/2000 74.3% complete 15:22:10 ETA= 24.9m tpr=2.91e+00 ETF=15:47:02 mem:583.5MB\n", + "1496/2000 74.8% complete 15:22:16 ETA= 5.0m tpr=5.91e-01 ETF=15:27:13 mem:583.7MB\n", + "1509/2000 75.5% complete 15:22:21 ETA= 3.6m tpr=4.40e-01 ETF=15:25:57 mem:583.9MB\n", + "1523/2000 76.2% complete 15:22:27 ETA= 3.0m tpr=3.80e-01 ETF=15:25:28 mem:583.9MB\n", + "1531/2000 76.5% complete 15:22:33 ETA= 5.9m tpr=7.60e-01 ETF=15:28:29 mem:583.9MB\n", + "1537/2000 76.8% complete 15:22:38 ETA= 6.7m tpr=8.71e-01 ETF=15:29:21 mem:583.9MB\n", + "1545/2000 77.2% complete 15:22:44 ETA= 5.4m tpr=7.14e-01 ETF=15:28:08 mem:584.0MB\n", + "1555/2000 77.8% complete 15:22:49 ETA= 4.1m tpr=5.52e-01 ETF=15:26:55 mem:584.2MB\n", + "1564/2000 78.2% complete 15:22:54 ETA= 4.2m tpr=5.78e-01 ETF=15:27:06 mem:584.2MB\n", + "1574/2000 78.7% complete 15:23:00 ETA= 4.4m tpr=6.16e-01 ETF=15:27:23 mem:584.4MB\n", + "1584/2000 79.2% complete 15:23:07 ETA= 4.4m tpr=6.28e-01 ETF=15:27:28 mem:584.8MB\n", + "1594/2000 79.7% complete 15:23:12 ETA= 3.8m tpr=5.66e-01 ETF=15:27:02 mem:584.9MB\n", + "1607/2000 80.3% complete 15:23:17 ETA= 2.5m tpr=3.86e-01 ETF=15:25:49 mem:585.0MB\n", + "1618/2000 80.9% complete 15:23:24 ETA= 3.8m tpr=5.97e-01 ETF=15:27:12 mem:585.4MB\n", + "1628/2000 81.4% complete 15:23:29 ETA= 3.3m tpr=5.28e-01 ETF=15:26:46 mem:585.5MB\n", + "1635/2000 81.8% complete 15:23:34 ETA= 4.4m tpr=7.30e-01 ETF=15:28:01 mem:585.9MB\n", + "1645/2000 82.2% complete 15:23:40 ETA= 3.4m tpr=5.81e-01 ETF=15:27:06 mem:585.9MB\n", + "1655/2000 82.8% complete 15:23:47 ETA= 4.0m tpr=7.02e-01 ETF=15:27:49 mem:586.0MB1656/2000 82.8% complete 15:23:47 ETA= 3.7m tpr=6.39e-01 ETF=15:27:27 mem:586.0MB\n", + "\n", + "1664/2000 83.2% complete 15:23:54 ETA= 4.5m tpr=8.01e-01 ETF=15:28:23 mem:586.1MB\n", + "1674/2000 83.7% complete 15:24:02 ETA= 4.5m tpr=8.27e-01 ETF=15:28:31 mem:586.2MB\n", + "1684/2000 84.2% complete 15:24:07 ETA= 2.9m tpr=5.55e-01 ETF=15:27:03 mem:586.2MB\n", + "1691/2000 84.5% complete 15:24:13 ETA= 4.2m tpr=8.21e-01 ETF=15:28:27 mem:586.5MB\n", + "1699/2000 85.0% complete 15:24:19 ETA= 3.4m tpr=6.75e-01 ETF=15:27:42 mem:586.5MB\n", + "1713/2000 85.7% complete 15:24:24 ETA= 1.9m tpr=4.07e-01 ETF=15:26:21 mem:586.6MB\n", + "1725/2000 86.2% complete 15:24:31 ETA= 2.6m tpr=5.57e-01 ETF=15:27:04 mem:586.7MB\n", + "1735/2000 86.8% complete 15:24:38 ETA= 3.0m tpr=6.76e-01 ETF=15:27:37 mem:586.7MB\n", + "1745/2000 87.2% complete 15:24:44 ETA= 2.7m tpr=6.40e-01 ETF=15:27:27 mem:586.9MB\n", + "1755/2000 87.8% complete 15:24:51 ETA= 2.8m tpr=6.88e-01 ETF=15:27:40 mem:586.9MB\n", + "1763/2000 88.2% complete 15:24:56 ETA= 2.6m tpr=6.59e-01 ETF=15:27:32 mem:586.9MB\n", + "1767/2000 88.3% complete 15:25:02 ETA= 5.3m tpr=1.36e+00 ETF=15:30:18 mem:586.9MB\n", + "1776/2000 88.8% complete 15:25:09 ETA= 2.9m tpr=7.71e-01 ETF=15:28:01 mem:586.9MB\n", + "1785/2000 89.2% complete 15:25:14 ETA= 2.1m tpr=5.90e-01 ETF=15:27:21 mem:586.9MB\n", + "1793/2000 89.7% complete 15:25:19 ETA= 2.2m tpr=6.29e-01 ETF=15:27:29 mem:587.1MB\n", + "1801/2000 90.0% complete 15:25:24 ETA= 2.2m tpr=6.59e-01 ETF=15:27:35 mem:587.1MB\n", + "1812/2000 90.6% complete 15:25:29 ETA= 1.5m tpr=4.68e-01 ETF=15:26:57 mem:587.1MB\n", + "1822/2000 91.1% complete 15:25:35 ETA= 1.6m tpr=5.54e-01 ETF=15:27:14 mem:587.4MB\n", + "1830/2000 91.5% complete 15:25:41 ETA= 2.1m tpr=7.49e-01 ETF=15:27:48 mem:587.4MB\n", + "1839/2000 92.0% complete 15:25:47 ETA= 1.7m tpr=6.21e-01 ETF=15:27:27 mem:587.4MB\n", + "1847/2000 92.3% complete 15:25:52 ETA= 1.8m tpr=7.10e-01 ETF=15:27:41 mem:587.4MB\n", + "1855/2000 92.8% complete 15:25:59 ETA= 2.0m tpr=8.17e-01 ETF=15:27:57 mem:587.6MB\n", + "1864/2000 93.2% complete 15:26:05 ETA= 1.5m tpr=6.79e-01 ETF=15:27:37 mem:587.8MB\n", + "1873/2000 93.7% complete 15:26:10 ETA= 1.3m tpr=6.07e-01 ETF=15:27:27 mem:588.0MB\n", + "1884/2000 94.2% complete 15:26:16 ETA= 57.0s tpr=4.91e-01 ETF=15:27:13 mem:588.1MB\n", + "1895/2000 94.8% complete 15:26:21 ETA= 48.7s tpr=4.63e-01 ETF=15:27:09 mem:588.8MB\n", + "1907/2000 95.3% complete 15:26:27 ETA= 45.6s tpr=4.91e-01 ETF=15:27:12 mem:588.9MB\n", + "1916/2000 95.8% complete 15:26:33 ETA= 57.5s tpr=6.84e-01 ETF=15:27:30 mem:589.1MB\n", + "1926/2000 96.3% complete 15:26:39 ETA= 46.5s tpr=6.28e-01 ETF=15:27:26 mem:589.1MB\n", + "1936/2000 96.8% complete 15:26:46 ETA= 42.0s tpr=6.57e-01 ETF=15:27:28 mem:589.1MB\n", + "1946/2000 97.3% complete 15:26:53 ETA= 40.1s tpr=7.42e-01 ETF=15:27:33 mem:589.2MB\n", + "1956/2000 97.8% complete 15:26:59 ETA= 25.1s tpr=5.70e-01 ETF=15:27:24 mem:589.2MB\n", + "1966/2000 98.3% complete 15:27:04 ETA= 19.1s tpr=5.62e-01 ETF=15:27:24 mem:589.5MB\n", + "1976/2000 98.8% complete 15:27:10 ETA= 14.4s tpr=6.01e-01 ETF=15:27:25 mem:589.5MB\n", + "1987/2000 99.3% complete 15:27:16 ETA= 6.4s tpr=4.92e-01 ETF=15:27:22 mem:589.5MB\n", + "1998/2000 99.9% complete 15:27:21 ETA= 1.0s tpr=4.85e-01 ETF=15:27:22 mem:589.6MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,382 DEBUG Process-5] --- Process-3 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 3 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.117391, done at 2021-09-10T15:27:22.400722 (total: 794.283331s of which 792.6935975551605s interfacing with binary_c).\n", + "\tRan 499 systems with a total probability of 0.17005450973840136.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,435 DEBUG Process-5] --- Process-3 is finished.\n", + "[2021-09-10 15:27:22,480 DEBUG Process-3] --- Process-1 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.080367, done at 2021-09-10T15:27:22.505288 (total: 794.424921s of which 793.1943278312683s interfacing with binary_c).\n", + "\tRan 474 systems with a total probability of 0.15740832333567983.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,531 DEBUG Process-3] --- Process-1 is finished.\n", + "[2021-09-10 15:27:22,846 DEBUG Process-2] --- Process-0 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 0 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.077117, done at 2021-09-10T15:27:22.851971 (total: 794.774854s of which 793.4976091384888s interfacing with binary_c).\n", + "\tRan 507 systems with a total probability of 0.16018641159091498.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,872 DEBUG Process-2] --- Process-0 is finished.\n", + "[2021-09-10 15:27:22,976 DEBUG Process-4] --- Process-2 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 2 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.084369, done at 2021-09-10T15:27:22.981706 (total: 794.897337s of which 793.4600214958191s interfacing with binary_c).\n", + "\tRan 520 systems with a total probability of 0.1618606489196724.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,986 DEBUG Process-4] --- Process-2 is finished.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Population-0fa295ee5c76444bace8fd0ee17a3e11 finished! The total probability was: 0.6495098935846686. It took a total of 795.1383104324341s to run 2000 systems on 4 cores\n", + "There were no errors found in this run.\n", + "Done population run!\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=1,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=4,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "print(\"Running the population now, this may take a little while...\")\n", + "analytics = population.evolve() \n", + "print(\"Done population run!\")\n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '0fa295ee5c76444bace8fd0ee17a3e11', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.6495098935846686, 'total_count': 2000, 'start_timestamp': 1631283248.057525, 'end_timestamp': 1631284043.1958354, 'total_mass_run': 41112.220964392276, 'total_probability_weighted_mass_run': 0.6452116023479681, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAADekklEQVR4nOzddXyVZR/H8c99ask2WMLozlEjBekuUcQCRRS7O1BRxO4u8FFsQEFSUAREurs7BhtsrLdTzx/IcNJs415836+Xr+dwzn2u+3vu3c8Yv12/6zK8Xq8XERERERERERGRi2QxO4CIiIiIiIiIiBRtKjCJiIiIiIiIiEieqMAkIiIiIiIiIiJ5ogKTiIiIiIiIiIjkiQpMIiIiIiIiIiKSJyowiYiIiIiIiIhInqjAJCIiIiIiIiIieWIzO0BBSkxMw+PxXtB7QkMDOXIktYASSUmge0jySveQ5JXuIckr3UOSV7qHJK90D0le6R4qGBaLQenSAad9rVgXmDwe7wUXmE68TyQvdA9JXukekrzSPSR5pXtI8kr3kOSV7iHJK91Dl5Za5EREREREREREJE9UYBIRERERERERkTwp1i1yIiIiIiIiYj6v10tq6jEyMlLxeNznPP7wYQsej+cSJJPiSvdQ3thsDkqXDsdqPf+ykQpMIiIiIiIiUqASE+MxDIMyZSKxWm0YhnHW4202Cy6XigNy8XQPXTyv10taWjKJifGEhZU97/epRU5EREREREQKVHZ2JiEhodhs9nMWl0TEXIZhEBAQhMuVfUHvU4FJRERERERECpgXw9A/P0WKiospBOv/4SIiIiIiIiIikicqMImIiIiIiEiJcvDgAdq3b8mQIddz883XM2jQQB544C4OHz50yrEJCfE88sh9lzxjVlYmQ4Zcn+u/bt3a8corI3OO2bFjG23axDJnzh+53nvPPbfRtWs7srNztzgNGXI999xzGwDZ2dm8+earDB48kJtuupa77x7Gxo3rT8mxYsWynPfkxfz5c/nii0/yPM4JmzZtyLkWkyb9zKxZMy5qnNGjP2X06E+B49fnbO699/ZzZrnnnttYsWLZeZ//wIH9vPzyC6eMUxRpkW8REREREREpccLCwvnf/77L+fMnn3zA22+/zssvv3HKcW+88d6ljoePj2+ufOvWreWJJx7i+utvzHlu6tTJtG/fiYkTJ9C+fadc7w8MDGTJkkW0aXM5AHv27CIhIZ7AwEAAfvrpO7xeD19//SOGYbBmzSqeeOIhJkyYis2W/6WCNm3a0aZNu3wbr3btujzxRF0A1q1bQ+PGTfM85r+v9+msXLn8nFkuVFzcQfbv35fncQoDzWASERERERGREq9hw8bs3bsHgAED+vDss09y3XVXsmHDOgYM6APAqFEjePPNV7nppuu46qrezJ37J0899SgDB/bj/fffBiAtLZXhwx/n9ttv5qqrejNy5DN4vV5WrFjGsGE3MnToIEaOfIYBA/qwZ89uADIyMrjyyl5kZWWdNltiYiLPPPM4Dz/8OBUrVgLA5XIxc+Z0brvtLrZu3ZxTpDihXbuOuWY2/fHHrFxFqKNHj+B0OnG5XADExDTiySefw+12n/Ea/Xt2zsGDBy7oukybNplRo0bkXN/PP/+YYcNuZNCggWzatBGAPXt2c889t3HTTddy++0358yomjlzBkOGXM/QoYMYPvwxsrKycmZWLV26mPnz5/HFF5/w119z6NWrE2lpqTkZBw0aeMrn+O67r7n22v65zgHQpk0sAMuWLWHo0EHccstgHnjgLpKSknjnndcBGDbsJgB69+7MQw/dy5Ah17N06aJcs7x+/fUXhg69gZtvvj7nev17ptSJa3Dw4AHeffcNNm/eyJtvvpprttiZrsWoUSN45503uPPOWxgwoA9Tp/56xq/XpaYZTCIiIiIiInJJ/b32IPPXHDzj64YBXu/Fjd0mpiyXNTj/rdXheLFm9uxZNGjQMOe5li1b88ILL3Pw4IFcxyYkxPPVV98zffoUXn75eb7//md8fHy44oqe3HzzMBYunE+NGjV58cVXcTqdDBp0NZs3bwJg7949jB8/hcDAQEaP/pSZM6dz6613MGfOH7Ru3QYfH59Tsnk8Hl54YTgdOnSiQ4fOOc8vXDifqKgoKlasRNu27Zk0aQJ33XV/zustWrTi9ddfwuVyYbPZWLDgL4YOvY1du3YAcPXV1/Hoow/Qu3dnGjduStOmzenRo/dpM5yPc12X/woODubzz79m/PgfGDt2DKNGvc7Ikc8waNAQ2rXryLp1axk+/HG+//5nPv/8Yz777EtKly7DZ599xJ49u3LGadasBW3aXE7jxk1p27Y9c+f+yZ9//sEVV/RnxoypdO/eM9d5N23awNSpvzJmzLcYhsEdd9xMnTr1ch3z1VejefTRJ6lTpx7jxv3Ali2beOCBRxk//kc+//wrAJKSkhg06CaaNIk9pSXOz8+fMWO+Zdu2rTz22AP88MMvZ7xu99//CGPGfMbDDz+ea5wzXQuAw4cP8dFHX7Bjx3buvfd2evXqe35fpAKmGUwiIiIiIiJS4iQkxOesbXTTTdfi9Xq58857cl6vW7f+ad/XsmVrACIjo6hSpRqlS5fB3z+AoKAgUlKS6dKlO82ateCnn77j7bdf49ixY2RkpANQoUKlnBa1nj375KwbNGPGVHr06HPa8/3vf1+QmZmRq3gEx2cEde7cDYBOnbowbdoUnE5nzusOh4OGDRuzdOliduzYRrly0fj4+Oa8XrZsOcaO/ZG33/6QunXrM2PGVG6++XpSUlIu6Dqe73X5rxYtjh9ftWp1kpOTSU9PZ9++fbRr1xGA+vUbEBQUxJ49u7nssrbceectfPjhu7Ru3ZYaNWqdMUevXn357bdpAMyaNYPu3Xvlen3FiuW0bHkZ/v7++Pn55SrandCmzeU89dSjvPXWq1SuXJnmzVue9lz16p3+Hundux8A1avXICQkhN27d50x7+mc7VoANG/eAsMwqFq1GsnJxy5o7IKkGUwiIiIiIiJySV3W4OyzjGw2Cy6Xp0Az/HcNpv8600weu92e89hqtZ7y+vjxPzBnzmz69u3PgAHN2blzO95/pmP9e8yyZcsRFVWWuXNnc/TokdMWK5YtW8KkSRP4/POvc62LlJh4lIUL/2bTpo2MG/cDXq+XlJRk5sz5gy5duucc16FDJ+bM+YPw8Ag6duyaa+xPP/2QK6+8mrp161O3bn1uvHEod945lKVLF9Ox46lFF8i9df2J1rrzvS7/5XA4ch57vV68Xk/OdTr5PLjdbh544BG2bevHwoXzGTnyGYYOvY3w8IjTjtuoURPi4+P5888/KFs2mrCw8FM+g9d78t6yWq2ntAVec80NXHbZ5SxY8BcfffQe7duv56abbjnlXP8u2P3bvz+/1+vFZrP9c96Tn++/1y/35z7ztQBwOHxyPkthohlMIiIiIiIiIvlk6dLF9O17JV279gAMtm7dgsdz+mJZr159eeedN+jWrecpryUkxDNy5LMMH/4CERGRuV777bdpNG3anF9+mcb48ZOZMGEKN944lEmTfs51XIsWrVmxYjmLFi3ImWF0Qnz8Yf73vy9yZj0lJx8jMTGJatWqn/GzBQeHsHPndgD++mvO2S/EBQoICCQ6ujxz584Gji9qfvToEapWrca11/YnJCSEwYNvpnv3XmzZsjnXe/9dJDIMgx49evHWW6/Ts2fvU84TG9uMBQvmk5qaSlZWFvPm/XnKMcOG3UR6ehoDB17PwIHXs2XLppzznK0wdMKsWdOB4+14aWlpVKhQ8Z9rd7w9ccOGdRw5kvDPmLZTClxnuxaFmWYwiYiIiIiIiOSTgQOv5403XuaHH8bi7x9A/foxHDx4gOjo8qcc265dB1599cVT2rgAJk+eSFpaKh9++G6u52vXrsOGDeu47ba7cz1/5ZVX8913X+dqx3I4HMTExACnzsh66KHHeP/9d7juuivx9fXDbrdx5533UKlS5TN+thtuuJFRo0YwdeqvtG3b/hxX4sI9++xIXn/9JUaP/hS73cGoUa9ht9u55ZbbeeCBu/Dx8SUwsBTDh4/IWZAdIDa2OZ9++hGBgYF06NCZzp278eOP3542Y40atbj66uu49dYbKVWqFJGRp86ku/32uxk16nmsVis+Pj48+uiTwPHWuSFDrmf06LFn/Rzp6RncfPP1WCxWnntuFDabjc6duzJ37mwGDbqaWrVq57T5Va5cmdTUFEaOfIZevfqd81oUZob3v/OuipEjR1LxeC7s44WHlyI+/uJ6TkVA95Dkne4hySvdQ5JXuockr3QPyX/Fxe0mKqrSeR9/KVrkzOb1elm06G8mTpzAq6++bXacYsPj8TBx4gT27t3N/fc/YnacIu10/7+1WAxCQwNPe7xmMImIiIiIiIhcYu+99xZ//z2PN954z+woxcrTTz/KoUNxvPvuR2ZHKXFUYBIRERERERG5xO6//2Huv/9hs2MUOy+//CZQMmbBFTZa5FtERERERERERPJEBSYREREREREREckTFZhEpETbeziV1Ayn2TFERERERESKNK3BJCIlltPlZuRXy3DYLPRuXZlOTctjt6nuLiIiIiIicqH0LykRKbHcHi8utweLxeCnP7cx/ItFLNt0GK/Xa3Y0ERERERGRIkUFJhEp8Xq2rMRDAxvisFn5aOI6Xvl2BTsPJpsdS0REREQK0J9//s7QoYO46abruPHGa/juu69NyTFt2mRGjRqRr2P++OO3DBlyfc5/1113JW3axHL48KGcY4YPf4ybbro21/tWrFhGmzaxjB37Za7n582bQ5s2saxYsSznuNtvv5mbbrqOQYMG8tFH7+J2u0/Jcc89t+W8Jy8eeeQ+EhLi8zzOCa+8MpJNmzaQmprKk09e/E5+bdrEAjBx4ngmThx/xuPmz5/HDz98c9YsK1Ys4557brug848e/SmrV6/MNY6Z1CInIgLUrxpKncql+WvNQSbO28HIr5bRsl4kV11ejdBgX7PjiYiIiEg+io8/zAcfvMOYMd8QHBxCeno699xzGxUrVqJNm3Zmx8uza665gWuuuQEAr9fLU089QpMmsURERAJw7FgSW7ZspkyZUNasWUVMTKOc94aHRzBnzmwGD74557k//phJSEhpALKzs3n++eF8/PFoypWLxul08vTTj/Hzz+O4+urcBav88sYb7+XreE888QwABw8eYOvWLXke74orBpz19c2bN54zy8UU4lauXE7jxk1zjWMmFZhEpMTyOjNp77sB/4xSQEWsFgvtG0XTok4k0xbt5rcle1m+OZ6uzSrQs2Ul/Hz0LVNEREQkv6RPfvm0z/v3eRKAzAXf4jmy55TXfVpdjzWsEs7Nf+HcMv+M7z+bpKQkXC4XmZmZBAeDv78/w4ePwOHwAWDjxvW8995bZGVlEhwcwqOPPkW5ctFs3bqZ1157iaysTIKCgnn22ZFERETy9ddjmDlzOhaLhWbNWnLXXfdx+PAhnnrqEapWrZZTzBk58hWCgoKZMWMqX301moCAQKKiovDz8wdg9uzf+eGHb8jKyiIrK4snnhhOo0ZNuOee2wgKCmbnzu307XslmzdvZMSIUQCMGfMZDoeDQYOGnPazjh37JYcPH+b5509e75kzZ9CwYWOqVq3OpEk/5yowRUeXJy0tlQMH9lOuXDSZmZkcOLCPypWrHP+6ZGaSlpZKZmYGAHa7nfvvf5iMjIwzXu8VK5YxZsxnfPDBZwCMGjWCxo2b0rhxU5588hHKlYtmx45t1KpVh8aNmzJ9+hRSUpJ56aU3qFy5CgMG9OH99z9l5crlLF68gOTkZA4c2E+zZi155JEnAE75Gtx33wOkpaUxYsTTHDlyBIChQ4fRpk077rnnNoYOvY0ff/yWhIR4nnzy+NfJ4/Fw++13A/DSS8/TokUrOnXqmvM5Dh48wAsvPENGRgb16tXPeX706E8BuOmmW3j55efZsWM7AP37X02DBg2ZNOlnAKKiyhIXd5D169dx+HAcV145kNmzZzF06PGZS8eOJfHQQ/eSkHCYunXr89BDj+NwOGjTJpb5848XoKZNm8zKlctp0iSWzZs38uqrL/LSS2/w9tuvMXTobTRpEnvB92N+UYuciJRYnu0L6e+/jIZbPyV7w+yctZf8fGxc1a4aL93WgqY1w5m6cDdPfraIOav24/Z4TE4tIiIiInlVo0ZN2rZtx8CB/Rg27EY++ug93G4P5ctXwOl08sorL/Lcc6MYM+Zbrr12EK++eryY8/zzzzBkyK18/fWPdOrUlXHjfmDhwvnMnz+P0aPHMmbMt+zfv5eJEycAsG3bVq655gbGjv2JwMBAZs6cTkJCPB9//B4ffvg5n3wyhvT0dAA8Hg+TJk3gtdfe4auvvmfQoJv47ruxOZmrVavO99//TL9+V7J8+VLS09Pxer3MnDmD7t17nfZzrly5nJ9++o6RI1/B4XDkPD9t2q907NiZjh07M2fOHyQnH8v1vg4djj8PsGDBfFq1apPzWlBQEIMH3/xPe+G1vPPOGyQkJFC9eo2L+lps376VIUNu4bvvJrBp0wbi4g7y6adf0rlzN3799edTjl+7dg2jRr3GV1/9wIIFf7F9+7bTfg1++WU88+bNISqqHGPGfMOzz45k9epVucZ64IFHCQsL5+WX36Bnzz78/vtveL1eMjIyWLZsCW3bts91/Ntvv0bPnn343/++o0GDhqfJtprk5GS+/PI73nnnI9auXU2VKlXp1+9K+vW7kl69+gKQnZ3FN9+M48orr871/oMHD/Dgg4/y1Vc/kJ6ennMfnU6PHr2pVasOjz8+nGrVquc8f6H3Y37Sr+NFpETxJB/GHbcFe802WGpezvszD3F99C4s87/GvW89vu2GYvgEABAW7MdtfevRObYCP8zeytczNvPH8n1c07E69auEmvxJRERERIq2c8008m19w1lft9dqi71W24s+/yOPPMlNN93CkiWLWLJkIbfffjPPPTeSChUqcuDAPp544qGcY9PS0khKSuLIkQQuu+z4Ofv3P94W9cEH79C5czd8fI4vq9CrV1+mT59K69ZtKF26DDVr1gagatXqJCcns3btaurXj6FMmeM/T3bt2oPly5disVh46aXX+fvvv9izZzcrVy7HYjk5J6Ru3eMzZvz9/WnV6jLmzp1NuXLRREeXJyws/JTPd/ToEZ5/fjhPPvkc5cpF5zy/detmDh8+RLNmLbHZbNSsWYvp06fktNQBdOzYhRdeeIbrr7+R2bNnMmzYXblauG666Rb69buKpUsXsXTpYh555D6GDbuDgQOvv+CvQ5kyoTnXKDw8gqZNmwHHZ/usXHnglOMbNIjB3//4z+vlykWTnHyM5cuXnfI1mDFjKnfccS+ffvohCQmHadWqDUOG3HLGHNHR5YmKKsuqVSs4dCiO1q3b5CrKwfGC3YmZY1279uCVV0bmer1q1Wrs2bObhx66h5YtL+POO+897blOfC3/q2HDJlSoUPGf8bszdepkBg687oyZT+d01+Js92N+UoFJREoEr9tJ9uppZK+cAjYHtspNwbCzxVWODVXa0NFvI1lLxpM++RX8r3oewzj5l3nVckE8eUMTlm+OZ9ycbbz142rqVy3DNR2qEx0eaOKnEhEREZGLsWDBfDIy0unUqSu9evWlV6++/PrrL0yZMonbbrubcuWi+d//vgPA7XaTmHgUmy33P5+zsrJISIjH6809w93rBbfbBXBKgcLr9WIYBh7PyV2LrVYrAOnp6dx6641069aThg0bU61adSZM+CnnOB8fn5zHvXr15auvjq+B1LNn71M+n9vtZsSIp+nRo3dOQeyEqVMnk53t5Npr++ecd9Kkn3MVmMqXr4DL5WLnzh0cPnyYSpUq57y2bt1atmzZxJVXXk2XLt3/+a8b77771hkLTIZh5Pqzy+XKeWy323O9duJ6nMmJNsYTvF7vGb4GbipUqMh3341n0aKF/P338YW2v/32zItx9+rVl1mzZnDo0KGctrX/fJKcr51hGLkKgADBwSGMHfsTS5cuZuHCvxk6dBBjx/50yij//lr+278/u9frzXXPnbh3/n3tTudC78f8pBY5ESn2XPs3kDb+GbKX/YKtUmMCBryI4fA7eYBhwdGwB/79nsan2VUYhgWvKxvvv9rhDMMgtnYEL97akoEdqrN9fzLPjlnC179tJjkt24RPJSIiIiIXy9fXl08++ZCDB4/PkPF6vezatYMaNWpRqVJlkpOTc3bnmjr1V0aMeJrAwEAiIiJZunQRAL/9No3Roz+lSZNm/P77b2RlZeJyuZg27VeaNIk947ljYhqxYcNa4uMP4/F4mD17FgB79+7BYrFw441Dadq0GYsWLcBzhuUZGjZszOHDh1mxYtkpbVxwfE0gwzC49dY7cj3vdDqZNWs677zzEePHT2b8+MmMGzeJI0cSTllkukOHTrz66ou0aXN5rueDgoIYM+azXItj79y5g5o1a53xMwcHh3DgwH6ysrJITj6Wc23zy+m+Bk2bxjJhwo+MHv0pHTt25uGHnyAxMZHU1NSc91mt1ly733Xo0Inly5dy9GhCrjWWToiNbc5vv00DYO7c2WRn5/53wPz5c3nhhWdo3boNDzzwCH5+fhw+fOiU85zJmjWriIuLw+PxMH36VGJjmwMQEhLCzp3b8Xq9zJ8/71/5baeMe6H3Y37SDCYRKday1/1O1oJvMIIi8OvxMLYKDc54rDWias7jrL+/wZOagG+H27D4h+Q8b7dZ6N6iIpc1iOLXv3fx54r9LFofR69WlejarAJ229l/4yIiIiIi5mvSJJahQ4fx2GMP5MwIadGiFTffPAy73c7Ika/w7rtvkJ2djb9/AMOHPw/As8+O5I03XubDD98jODiEZ555gbCwMLZu3cwtt9yI2+2iRYtWXHXVNcTHHz7tucuUCeWBBx7lgQfuwtfXL2fx7OrVa1C9ek2uv34Avr6+NGrUhLi4g2f8DO3adeDYsWOnzEqB4wt7ly1bjltuGZzr+c6duxIZWTZX8SQgIJDeva9g0qQJ9Ot3Vc7zHTt24dNPP+SZZ17INUbFipV4+unneOWVkaSlpWIYBnXr1ufBBx87Y9aqVavRqtVlDB48kLJly9GwYeMzHnsxLrus7Slfg6uvvpa0tHRGjHiaG2+8BpvNxtCht1GqVKmc95UpE0pkZBT33ns777//KT4+vtSv34CqVauf9jwPPfQYI0c+y6+//kzt2nVzWvVOaNnyMv788w8GDx6Iw+GgXbuOVKtWnZSUZEaNGkGZMmXO+jmqVKnKyy+/wJEjCTRtGkvv3v0AuOOOe3jssQcpUyaUmJhGHDuWBBy/Z9944+Wc+/NM1+Js92N+Mrz5PSeqEDlyJDXX1MPzER5eivj4lAJKJCWB7iHzeT0evKkJWIIi8KQl4tw0D0fDHhi23H/5ZmS5uPvteQzsUJ3uLSrmei174xyyFnyH4fDFt/2wMxamDh5JY9yf21m1LYHQIF8GtK9G8zoRp0wDvhC6hySvdA9JXukekrzSPST/FRe3m6ioSud9vM1mweXS5iqn4/V6cTqdPPjg3dx338PUqlXb7EiF0oXeQ16vl/T0NG6/fSjvvvsRoaFhBZiuaDjd/28tFoPQ0NMvE6IWOREpVtyHd5A+8XnSJ7+C15WFJaA0Pk37nVJcOhdHnfb4938Ow7cUGdPfJGvxT3g9p/Y7lw0N4L4BMTx6bSMCfG18+ut6Xhq7nG37j51mVBERERGRvDly5Ah9+3ajXr36Ki7lo40b1zNgQF/69u2v4tJFUouciBQL3qw0spZOwLnhTwz/YHxaXQfWCysq/Ze1TDT+/Z8la+H3ZK+eBjYffJr2O+2xdSqX4dkhzfh73UF+nreDl8Yup1ntCAa0r0Z4iN9p3yMiIiIicqHCwsKYMeNPs2MUO3Xr1mf69NlmxyjSVGASkSLPtWslmX99iTczBXv9zvjE9sdw+OfL2IbNB9+2Q7BVaIg1ug4AnvSkXOsynWCxGLSNKUfz2pFMX7ybGUv2sHJrPJ1jK9C7VSX8fe2nvEdERERERKQ4UIFJRIqsE1t1YrNjBIbh1+MhrGGVC+RctsrHFyL0pB4lbcIz2Ks0w6f1dRi2U7cY9XFYuaJtVdo1iubnedv5bfEe5q85SL82VWjXqBw2q7qTRURERESkeNG/ckSkyPG6sshaMp7MWR/g9Xqxla+P/xXPXHRxabdzPbuS9wCwOn4dB1LjANiWtJMjGUcBOJh2iJTsVAz/ILJqtSZt8xzSf3kB55F9Zxy3dCkfbulVl2eHNKN8eADfztrCc2OWsHpbAsV4fwURERERESmBVGASkSLFtXsVaeOeJnvVFLD7wj8Lb+dl17a12XNZHb8egDHrvmXpoZUAvLfyM+YfWAzAK0ve4Y898zAsNkZmrGNubAe8mSk8vOpdfln8KV6vlyfnj2T6zj8AGLX4LWbvmQfALwe+pdXlWdx7VQNSIxfzwZ8zeOOHVXy+8gdWxa8DYPL2GWw8sgWAqZv/YHvSLgAWH1zO3pQDAKw/sonD6fEA7E7eS1LW8YXEEzKOku7MACDDlYnb477oayEiIiIiInIxVGASkSLBk3qEjJnvkfHbOxhWB369n8CvwzAM68Wva+TyuLBFb6Wpb1e6VmoPwGPN7qNd+dYA3NPoFlqVbQbATfWuIzayEQBX1ehLo6rt8b/qBTq5Aqi8dQXeY3E0joghOjAKgHKBUQQ5SgFgs9iwWmw0rhFOVJSX2Hoh7DmUwsq4DUxbsZ6k1Cz+2PsX24/tBODr1RPYcHQzXq+XsRt/YlX8WgA+Xv0liw8uB+D1ZR/w176FAIxY+Cp/7JkLwKPznmPazlkAPDjnaab+83j43y8xa/ccAF5Z+i7z/nnvB6u+YNHBZQB8uf47VhxeA8C4LZNYl7ARgJWH1170NRYREREpjA4ePMCAAX1Oeb5Nm1gT0sCAAX04ePBAnsY402f68MN3GTLk+pz/rr66L+3atch1zK233shjjz2Y67lp0ybTpk0ss2bNyPX8Tz99R5s2sTl5//zzd4YOHcRNN13HjTdew3fffX3afPnxGQGGDLk+z2P82yOP3EdCQjwHDuzn5ZdfuKgx/n3tv/jiE+bPn3vGYydN+vmUa/rfLNOmTWbUqBEXlOGll54nLu5grnEuNa3BJCJFgnPLfFx71+FoPgBHg+4Y1rx/+3J7Pdijt5PuicTPdnynt+jAsjmv1yxdPedxk4iYnMeXl2+V87hv12fxHN6BJaQsVwf1wZO0H4Cb6538i++eRrfmPH6y+QMApDVxMvnvsvyxfB9PrltEj5a30qVCRQD+1/8tjh5JB2BEq8fxtfng9Xp5NPYeghyl8Hq93BEzhDC/ULxeL4PrDKRsYCRer5crqvekclBFvF4v7Su0oWpQJbxeL3XK1CTcPwyv10tpnxD8bL54vV6y3Nm4PW68Xi97U/bnvHdp3EqCHKWoUboaX6wby811ryM2qnGer7mIiIiIXFp3331/zuOsrCzuuec2+va9Mue57du3Ybfb2LZtC4cOxREZGZXzWkREJHPm/EGXLt1znps7908CA4//IjU+/jAffPAOY8Z8Q3BwCOnp6dxzz21UrFiJNm3aFcjn+d//vsvX8d544z0AVqxYxv79Z17+4nzdeusdZ3193bo1NG7c9KxZLsaKFcu4+eZheR4nL1RgEpFCy3VwM97kw9hrtcUR0wN7jdZYSoXn2/g+VgcZS7pTvWP1cx98BoZhwRp5/P3O9bPIWvQTPs2vwh7THcM48yTRAF8713aqQccm0Yybs52Jf+1k7qoDXHl5Vfq2r4HD6gQgzK9MznsqBVXIeVw/rE7O4xZlT/4F1bniyb/I+1XrkfP4hjoDch7fHnNTzuOHm96V8/jZlo/mPH7t8hEAuD1uelfpRv2wOjjdTux5mDEmIiIiUlRMmzaZxYsXkJyczIED+2nWrCWPPPIEK1Ys4+OP38Pt9lC1ajUeeuhx3nrrVXbs2I7H4+GGG26kS5fubNu2lddeG4Xb7cbhcPDUU89RoUJF/v77Lz7//GO8Xg/lykXz6KNPUaZMaM55hw69gccee5ratevidrsZMKAPY8Z8Q1zcQd577y2ysjIJDg7h0Uefoly5aLZs2cQrr4wEoHr1muf8XO+88wZlypRh0KCTPw9Om/YrsbEtSE4+xuTJE3MVSBo1asLq1SvJyMjAz8+PuLiD+Pv7ExgYCEBSUhIul4vMzEyCg8Hf35/hw0fgcJy6Ec6/r+3Klct5+ukRANxzz20MHXobAF9/PQavFw4c2Ef79p0ICAjgr7/m4vV6eeONdylTJpQ2bWKZP38Zo0d/SkJCPHv37uHQoTh69+7HTTfdgsfj4b333mT58qUAdOvWk0GDhnD48CFeeOEZMjIysFgM7r//UerXb8CAAX14//1PeffdNzhwYD9vvvkq6empxMQ0pl+/44W4e++9nTvuuJd69ernfI4zXftRo0bQuHFT2rXrwIgRT3PkyJF/vrbD8PHxZf78eSxfvpTQ0DB+//03jh07xv79e7nzzvt4553Xef/9TwHYt28vd989jGPHjnHZZW254457iIs7yL333s748ZMBGD36+LEOhw8JCfE8+uj9fPjh59xyy2Def/9TIiOjeO+9N1m2bCmGcfJarFixjLFjv8TX15ddu3ZSrVp1nntuFHZ73n7WV4uciBQ6noxkMuZ8Qcbkl8lePQ2vx41hc+RrcQlOtsgddR/Ml/HsNdtgq9yYrMU/kTH9LTzpx875nojS/tzdvwFP3NCE4AAHo6du5KF357J5T2K+ZMorq8VKjyqdOJqZxIhFr7Hx6BazI4mIiEgx8c6KT1j4T6v+fx8v2L/0nMec6XF+Wbt2DaNGvcZXX/3AggV/sX37NgD27t3De+99wvDhz/PVV6OpVasOY8Z8w4cffsbXX49h//59/PTTd1x77SBGjx7LgAHXsH79WhITj/L66y/x8stv8NVXP9CgQUPeeuu1XOfs1q0nv/8+E4AVK5ZSrVp1AgNL8corL/Lcc6MYM+Zbrr12EK++OgqAF198jjvvvI8xY76lXLnos36e336bxrJlS3j66edz1i91uVz89tt0OnbsQseOXZkyZRIulyvnPVarlebNW7Fw4d8AzJ49i44du+S8XqNGTdq2bcfAgf0YNuxGPvroePGtfPkKXIwNG9bz1FPPMnbsT0ycOJ6QkNKMHj2W6tVr5FyXf9u2bStvv/0hn332P7755itSUlKYOHEChw4d4ptvfuTzz79m7tzZLFgwnylTJtG6dRtGjx7LnXfex5o1q3KNdf/9j1CrVh0efvhxevXqx8yZ0wGIiztIYmJiruISnPvaz5s3h6iocowZ8w3PPjuS1atX0axZC9q0uZxbb72DFi2Od0UEBwfz7bfjadPm8lzvP3jwAC+++Bpffvkta9asOmvb3eDBQwgLC+f1198lODgk5/kT1+Krr77PdS3g+EyqBx98jG+/Hc+hQ3EsXrzwzF+Y86QCk4gUGl6vh+xNc0n76UlcWxfiaNgT//4jMCzWAjmf2+vGHr093wpMhk8Avp3vxqfNjbgPbiJ9wjO49q0/r/fWrBDC8JtiGdanLsdSs3n1u5W8P2ENh46m50u2vArxCaZCqXKU9gkxO4qIiIhInp1uprnX6821cUyDBjH4+wfg6+tLuXLRJCcf/+VhhQqVcmbwLFu2hEmTJjBkyPXcffdtZGZmsnPnDlq1uoy3336Nl19+AZvNTpcu3dmwYT116tSjbNlyAPTte2XOLJsTOnfuxty5f+L1epk16ze6du3J3r27OXBgH0888RBDhlzPxx+/z4ED+0lKSiIhIYFmzY6vp9SjR+8zft6dO3fw7rtv8uKLrxIUFJTz/IIF8wkNDaNKlarExDTEYrHw999/5Xpvx46dmTPn+EY2f/01h7Zt2+d6/ZFHnmT8+MlcccUADh06yO2338zcubPPcvXPrGrVakRGRuHr60twcAixsc0BiIyMIiUl+ZTjmzSJxW63U7p0GYKCgkhLS2XFiqX07Nkbq9WKr68vXbr0YPnyJcTGNuf7779hxIinSUiI56qrBp4xR+PGTUlIiOfgwQPMmDGV7t175nr9fK59/fox/PXXHJ588mHWrFnFkCG3nPZcdevWP+3zbdpcTunSpbHb7XTs2IWVK5efMe+ZnOlaAFSpUo2IiEgsFguVKlU57fW9UGqRE5FCI2vxTzjXzMBathY+l92ItczZfwuTVw6LT55b5P7LMAwcdTtijapB5u8fk71qCtbouue1y53FMGhVL4pul1Xlu2kbmLpoN8O/WEzHJuXpc1llAv3Ma0/zt/txR8zNpDnT+WTNl1xRrRdRARGm5REREZGi74Emd5zxsc1mweXynPWYcz0+m6CgUqSmpuZ6LjHxKKVKnSy+/LfNy+v1AuDjc/J5j8fNM8+MpFat2gAcPXqEoKBgbDYb9evH8PfffzFu3PcsWvQ3l13W9pTx3O7cu/+GhoZRoUJFVq5czrJlS3joocfZu3cP5cpF56w95Ha7SUw8imGczARgPcMapRkZGTzzzBPcfvvdOTlPmDbtVw4distZoDotLZVJkybQrl2HnGOaNInltddGsWPHNoKDQ3KKa3C8QJWRkU6nTl3p1asvvXr15ddff2HKlEm0a9fxtHkMw8iV2+0+OWPKZsv9GazWs/+i2eFwnDKux+P9z1HHr3NMTCO++eYnFiyYzx9/zGTatMm8885HZ8zYo0dvfv/9N2bPnsVbb33wn9fPfe0rVKjId9+NZ9Gihfz99zx++OEbvv12/CnH/ft++rd/f3av14vNZjvl2rlcrlOu2b+d6VrA6a9dXmkGk4iYypudgTvp+G4Sjjod8G0/DL/eTxR4cQnyv0Xu36xlKuDf/zl8O92JYRi4j+zBk5JwXu/1sVvp3boyr9zWkjYxZfl9+V6e/HQhM5fuxeX25HvWC5HuzGBfykHiM87vs4iIiIgURv7+AVSoUCFnZg7Ar7/+kjNj5nw1adKMiROPFw0SEhK46abrOHQojmeffZING9ZzxRVXceutd7B58ybq1q3Phg1rc3ZS+/XXn2nS5NTFnrt378kHH7xN48ZN8fX1pVKlyiQnJ7N69UoApk79lREjniY4OISoqKiclqcz7Uz2xhsvUbt2nZz1hE44evQIS5YsZuzYHxk/fjLjx09mzJhvWb58aa7Frq1WK82ateC1116iY8euucbw9fXlk08+zPlMXq+XXbt2UKNGrTNes+DgEHbv3onX6+XAgf1s27btrNf4QjVtGsv06VNxu91kZmYyc+YMGjeO5aOP3uW336bRo0dvHnzwcbZs2ZzrfVarLVfBr0eP3kycOIGIiEjCwnIv1XE+137ChB8ZPfpTOnbszMMPP0FiYiKpqalYrdZTCouns3Dh36SkpJCVlcXvv/9GbGwLAgNLkZKSQmJiItnZ2bna2k437pmuRUHRDCYRMYXX68W1cxlZC7/DsPvhf/WLWIIjsQRHXrIMJ1rkEt0Fc07D7oNhP74DXOac0XhS4vG9/GbsVZud1/uDA324qXttOjUpz4+zt/LDH1uZvWIfAztUp3GNsPOaFZXfwv1Dea7lo1gtVn7bNZs20S0JsPtf8hwiIiIiefXMMyN5881X+PLLL3C5nFSrVoOHHnr8gsYYOnQYb775KoMHD8Tj8XDXXfcRHV2ewYNv5tVXX+Srr77AarVy770PUqZMKI8++jRPPfUITqeLqKgonnji2VPGvPzyDrz++svccce9wPGZJiNHvsK7775BdnY2/v4BDB/+fM5nePnl5/n884+oVy/mlLHi4uL47bfpVKpUmSFDrs/1WocOnWjVqjXh4SdnpUdHl6dNm8v59ddfqFSpcs7zHTt24bffpp2yTlCTJrEMHTqMxx57IGftphYtWuXsZnY6sbHNmTp1EtdddxWVKlUiJqbR2S/yBerX7yr27t3D4MHX4nQ66datJ+3adaB27To8//xwpk2bgsVi4eGHn8j1vsqVK5OamsLIkc/wzDMjiYyMIjIyih49+pz2POe69t2792LEiKe58cZrsNlsDB16G6VKlSI2tjmffvpRrplgp1OpUmUeffR+UlNT6Ny5G82btwTg+usHM2zYjURERFK3br2c41u3bssjj9zPW2+9f8q1GDLkOlwuV861WLFi2XlfzwthePNjHlQhdeRI6mmmhJ1deHgp4uNTCiiRlAS6h87Nk3yYzL/H4t67FktoRXzb3JizE9ullJ7p4p535nFtx+p0bV6xQM/lST5Mxh+f4Infgb1uR3xaXothc5z22NPdQ16vl7U7jvLTn9s4kJBGzQohXNupOpWjgk47RkHbn3qQ15a+x5U1+tCufGtTMsiZ6fuQ5JXuIckr3UPyX3Fxu4mKqnTex59okRO5WHm5h7xeL0eOJHDPPbfx9dc/5monK0lO9/9bi8UgNPT0xTHNYBKRSyp7/e9kLfoRLFZ8Wl2PvV6nAlvE+1xOtsgFAAVbYLIEReDf9ymylk7AuWY67rgt+Ha6C2vpcuf1fsMwiKkWSr0qpZm3+iAT/9rBC/9bRqt6UVzVriplgnwLNP9/RQeW5akWDxHpH87mo9uoHlIFq0lfRxERERGR/DRnzh+8+eYrPPzwEyW2uHQxVGASkUvC63FjWKwYfkHYKjXGp9V1WAJKm5rJlbOLXNQlOZ9hteHb8hps0XXI/PNzPIn7z7vAdILVYqFD42ha1o1k6sLdzFy6l+WbD9OteUV6tKyIr+PSfVuP9A/nYNoh3l/1OX2rdadrpQ7nfpOIiIiISCHXoUNnOnTobHaMIkcFJhEpUJ70JLIW/gCGgV/H27FXbY696oUtnlhQfK35v4vc+bBViCHg2tcwHH4AZG+cg71ai5w/nw8/HxsD2lejfaNyTJi3g8kLdjFv9QH6X16VNg3KYrFcmvWZygZEMrT+DTQIrcOxrGSCHKVMWRtKRERERETMpV3kRKRAeD0estfNIu3HJ3HtXIYlODJftr7MTy6Ps8B2kTuXE8Ukd+J+suZ/TdrPz+GO33nB44SF+HF733o8PbgpYSG+/G/6JkZ8uZT1u47md+QzahIRQ2LWMUYufpO5+xZcsvOKiIhIUWLg9WpNJZGi4mL+7aYCk4jkO/fhHaRPfJ6sBd9ijahKwNUv4tP0ikI3s+Vki1ycaRmspaPx6/MkuF2kT3qR7DUzLuqHr2rRwTw1qCl39KtHZraLN39YxTvjVnMgIa0AUp8qzK8Mbcq1oEFYHTz64VFERET+w+HwJSkpAZfLWeh+6SgiuXm9XtLSkrGdYVOiM1GLnIjkO+e2RXjTj+Hb6U5sVZsXusLSCTktcp1qmJrDFlWDgKteIHPel2Qt+oG4+C1YLxuK4Xv2rUv/yzAMmteJpHGNcP5Yvo/JC3by7OgltG9cjr5tqhDkX3ALFFoMC1dU70lKdiqvL/uAHpU7ERNe79xvFBERkRKhdOlwUlOPcfToITwe9zmPt1gseDz6pZVcPN1DeWOzOShdOvzC3lNAWUSkBPF6vbi2LQSvB3vNNvg0uxKf2P4XtKaQGU7uIhcIVDA1i+EbiG+Xe3BumI1723ysVvtFj2W3WejeoiKtG0Tx6/ydzFl5gIXr4+jdujKdm1bAbiu4yat2ix1fmy82i/56ERERkZMMw6BUqRBKlQo5r+PDw0sRH59SsKGkWNM9dOmpRU5E8sSdeICMKa+S+ednx2cueb0Ydt9CX1yC4wUms1vk/s0wDBz1OhE99FUMuw+elHiyVkzCex6/5TudIH8Hg7rW4oVbmlOzfAjj/tzO058vYsnGQwU2Nd3X5sN9jYZRq3R1ftw8kf2pl359KxERERERufT0K2YRuSheVxbZKyaTvWY62HzwaXMT9trtCm073On42nwLRYvcfxkWKwCuHUvJXvYL7n3r8e14O5bA0Isar1xYAPdf3ZD1u47y4x/b+GTSemYt28u1HWtQLTo4P6MDxwtlqdlprElYT7hfGaIDy+b7OUREREREpHDRDCYRuSiZc0aTvWoKtuotCbjmFRx1O2BYita3lJMtcoVzlo2jYU98O96O+8ge0iY8i3PXijyNV69yGUbc3Iybe9QmISmTUWOX88mkdSQkZeRT4pOCfYJ4uvlDdKx4OUvjVpKcrenJIiIiIiLFmWYwich586QewevMwlq6HI4mfbDX7YitXG2zY100Z06LXOGdYWOv3gpreFUy/viYzJnv4W7QDd9W1130eBaLQduG5WhWJ4IZi/cwY/EeVmxJoGuzCvRqVQk/n/z7a8Hf7kdS1jG+2zSeNtEtuapGn3wbW0REREREChcVmETknLweF861M8laPhFreBX8+zyJtYy5i2Lnh8LaIvdfluBI/PsNJ2vJOCwBIfkypq/DxhVtq3J5w3L8PG8H0xbt5q81B/55rizWfJqNFuITzINN7yQ6oCz7Uw8S4ReGPQ8LmIuIiIiISOGkApOInJXr4Gay5n+NJ3E/tkqN8Wl9g9mR8s2JFrnEQrCL3LkYVluumUtZq6Zh8Q/CXrNNnsYtE+TLrb3r0jm2PD/+sY2xv23mj+X7uKZjdRpUvbg1n/6rYqnypGSn8tbyj2hZNpara/bLl3FFRERERKTwUIFJRM4oc+H3ONf+hhEYil/X+7FVbmx2pHzlKgItcqfj9Xhw719H9v4NuPZvwPeywXneta9yVBCPXd+YlVsTGPfnNt7+aTX1qpThmg7VKR8RmOfMpRyBDKx5BbXL1CDDlYmv1adILQgvIiIiIiJnV7RW5BWRAuf1evC6sgGwlo7G0bAnAVe/VOyKS/CvFjlH0fpshsWCX49HcDTtj2vbQtJ+GYE7YVfexzUMmtQMZ+StLbiuUw12HUzmuS+X8NWMTaRmOPM8fouyTbFZbLy+7H2m7/o9z+OJiIiIiEjhoRlMIpLDfWQPmfO/xhpaCd82g7HXvtzsSAXK6XH+s4tc4W+R+y/DYsGnaT+s5WqTOftT0ie+iG+nO7FXaZrnsW1WC12aVaBV/Sgm/72L2Sv2sXxzPAPaV6NNTFkseZh55G/zo25oLWqWro7X69UsJhERERGRYkIzmEQEb3YGmQu/J/3nEXiPHcIaUdXsSJeEy+P+p0UuzuwoF81WthYBV72ArXqLnK+b1+vNl7ED/exc17kGz93cjHKh/vxv+iZe/mY5ew6lXPSYhmEwoEZfKgVVYPT6b1l2aFW+ZBUREREREXOpwCRSwjl3LCVt3FM4187EXvtyAga+jL3mZWbHuiR8rUWzRe6/DN9A/NoPwxJQGm9WGhmTX8Z1YFO+jV8+PJDHb2jCLb3qcDgxg+f/t5Tvft9CRpbrosf0er2kZqeSmp2WbzlFRERERMQ8apETKeFce1Zj+JbCr/PdWCOrmx3nkirKLXJn4s1IwZNxjIypr+Jo3BdHk34Ylrz/LsEwDC5rUJZGNcL4ed4O/li2j6WbDnNtxxo0rxNxwa1uDqud+xrfhsWw8Ofe+VQJrkjloIp5zikiIiIiIuZQgUmkhPG6nWSvnoYlKBJ79Zb4XjYIrHYMi9XsaJfcyRa5orWL3NlYQqII6D+CzL/Hkr1iEu6Dm/DtcDuWwDL5Mn6Ar53BXWvRpkFZxv62mU9/Xc+81QcY1LUmZUMDLiyrYSHTlcmfe+cTl1ZDBSYRERERkSJMLXIiJYhr33rSxg8ne9kvuOO2AmDYfUtkcQnA78Qucj5Fu0XuvwyHH34dbsO3/TDc8btIn/AsnozkfD1HlbJBDL8xlsHdarE7LoVnRy9hwtztZDndFzSOr82Xh5vexTW1+rMtaSeJmUn5mlNERERERC4NzWASKQE8aYlkLfoB1/bFGEGR+PV8BFv5+mbHMl1Oi5yr+LTI/Zu95mVYI6rh2rMSi18QAF6PC8OSP9/6LRaDDo2jaVoznHF/bmPqwt0sWn+I67vUoHGN8PMeJ9gniCx3Nl+sHUu1kCoMazA4X/KJiIiIiMilowKTSAmQ8fuHeBJ24Wh6BY6GPTFsDrMjFQouj+ufFrlyZkcpMJaQKBwhPQBwbvmb7LUz8et8J5bgqHw7R1CAg1t616Vtw3KMnbmZ9yespVH1MK7rXIPwEL/zGsPH6uD2mJsI9w/jWFYyvjZffKy6T0VEREREigq1yImUAL6XDSZgwIv4NL1CxaV/8bP5/dMi18jsKJeE4ROAJzWBtJ9H4Ny6IN/Hr1khhOeGNGNgh+ps3J3I8C8WM3nBLpwuz3m9v0pwJXwsDt5a/hHfbhyX7/lERERERKTgqMAkUoy59m8ga/lErGGV8nXGSnFxskUuzuwol4StUiMCrnoBa2hFMv/8jIw5n+N1ZubvOawWureoyKhhLWhYLZRf5u3g2TFLWL/r6Hm93261071KZzpXbIfb48bjPb/ilIiIiIiImEsFJpFizH1gI9krfjU7RqF1skWuZBSYACyBofj1fhxHk364tiwgc/anBXKeMkG+3NW/AQ8NbIjX6+XNH1bxyaR1JKZknfO9rcrGUi4wio/XfMnEbdMKJJ+IiIiIiOQvrcEkIiXWiRa5Gp1rmB3lkjIsVnxi+2MtVxvDNxAAb1YaOPwxDCNfz1W/aigjb2nO9EV7mLJwN2u2H+GKNlXoFFseq+XMv+OwGlaiAiKICojM1zwiIiIiIlIwVGASkRLrZItcKYrjLnLnYitXBzi+s1z6tDex+Afj2+6WnKJTfrHbrPRtU4WW9SL57vet/DB7G/PXxjG4W01qlA857XsMw2BAjb54vV6m7phJGd/StCrXLF9ziYiIiIhI/lGLnIiUWCWxRe60DAv2ai1w7V1D2oRncR3cXCCniSjtz/0DYri7fwPSs5y8/M0KxkzdSHJ69hnf4/F62Jm8h53Jewokk4iIiIiI5A/NYBKREitnF7kS1iL3X4ZhwRHTDWvZmmT88TEZU17B0fQKHI36YJylje3izmXQtFY49auU4dcFO5m5ZC8rt8ZzVftqXN6wHJb/tOhZLVZub3ATNouN9Uc24WP1oXpIlXzNJCIiIiIieacZTCLFmLVcHRxN+pkdo9ByukvWLnLnYg2vQsCVz2Or2oLsZb/g2rGkwM7l47BydfvqjBjanAoRgXw9YzOjvl7O7riUU461W+14vB4mbpvG1J2z8Hq9BZZLREREREQujmYwiRRjtui62KLrmh2j0HJ6T7TIlTM7SqFhOPzw7Xg77pqtsZZvAIAnOR5LUHiBnC86LIBHr2vMog2H+HH2Nl74aikdG5en/+VV8Pe15xxntVi5q+FQfG2+HMlMBCDMr0yBZBIRERERkQunGUwixZgn+TCuA5vMjlFo+Vl9j7fI+TQyO0qhYhgGtgoxGIaBO24raeOexBW3tUDP16peFC8Na0HHJuWZvXIfT32+mIXr4nLNVirtG4KP1cHHa77ky/XfaSaTiIiIiEghogKTSDHm3DSPjKmvmx2j0Dq5i5xa5M7EUrocRmAombPex5OWWKDn8ve1c0OXmjx7UzNCg3z5fMoGXvtuJfsT0k7mMSwMqj2AG2oPwOlxkenKLNBMIiIiIiJyflRgEpESy/nPLnKJnkNmRym0DJ8A/Lreh9eVTcbM9/G6zrzjW36pFFWKp29syo3da7EvPpURY5Yw7s9tZGa7AKgSXImyAZF8vHoMn68dq5lMIiIiIiKFgApMIlJi+Z/YRU4tcmdlLR2Nb4dheOJ3kDn/60tS0LEYBu0bRTPqtpa0qh/F9MV7GP7FYpZvPozX6z3eVleuGa3LNQfA4/UUeCYRERERETkzFZhEpMQ62SJ30OwohZ69clMcTfrh2rUcb+qRS3beIH8HQ3vW4clBTfD3sfPhL+t4Z9waDiem0zyqCU0iYpiwbTI/bpmomUwiIiIiIiZSgUlESiynx/nPLnJqkTsfjqb9CBjwIpZSYZf83DXKh/DczbFc26kGW/YlMfyLJUyavxOX24PdYsdmWPGiApOIiIiIiFlsZgcQkYJjBIVjLVvT7BiFlr/N/3iLXBddo/NhGBaMwFC8riyyFv2Io1EvLIGhl+z8VouFrs0q0Kx2BD/O3sqk+TtZuC6O67s0o0GNUFbGryU1O43Ly7e6ZJlEREREROQ4FZhEijFH7XY4arczO0ahlZ3TIhcElDc7TpHhTUvEuXUh7sPb8e/7NIbNcUnPX7qUD3f0q0/bhkf5ZuYW3hm3hia1wqDScrK9mbSJboHF0ARdEREREZFLST+Bi0iJdbJFLs7sKEWKJTgKv4634UnYTea8L01b+6he5TK8MLQ5V15elbXbj7J+TiVqOrtyIOUwm49uMyWTiIiIiEhJVegLTHv37uXKK680O4ZIkZS1ZDwpn99idoxCK6dFTrvIXTBbpcY4Yvvj2rYQ59qZpuWw2yz0bl2ZF29tQZ2KYfw8Zzev/zWWr9aPw+1xm5ZLRERERKSkKdQtcsnJyfzwww8EBASYHUWk6DLMDlB4OdUilyeOxn3wJOwha/GPWCKqYIsyby2r8BA/7hsQw8qt8Xw7Gw6lp/PFsXV0axVJ5dAo03KJiIiIiJQUharA9OOPPzJlypScP7/11ls8+uij3H777SamEpHi6mSLXLTZUYokw7Dg2/5WsldNwRpWyew4ADSuEU7dyu2YsmAXvx/9mTVL0rgy4mY6NK6IxaJqq4iIiIhIQSlUBaZrrrmGa665xuwYIlJCaBe5vDMcfvg0vxoAT/JhDP9gDJuPqZl87FaualeNKnv7M3nJJr6dtY356w5wY9d6VCkbZGo2EREREZHiqtCvwSQiUlCy3dn/tMhpke+88malkfbL82TOHWPaot//1aRCdZ69sheN2scRHzqHF79ezNjfNpOW6TQ7moiIiIhIsXNJCkypqan07t2bffv25Tw3efJkevbsSZcuXfj222/P+v5PP/20oCOKSAnkdLuwR28n0X3I7ChFnuETgCOmB67ti3GumWF2nByGYdC2agydajaiY9OKzFm1n6c+W8Tfaw8WmkKYiIiIiEhxYHgL+Cfs1atXM3z4cHbu3MmMGTMoX748hw4d4rrrruPnn3/G4XBw7bXX8tZbb1G9evWCjCIikktSShaDR8zgjv4N6NWmqtlxijyv18vhn98kbfNioq59Gv+qjcyOlMufOxawdM9GDq+pzubdSdSrGsqdV8ZQSW1zIiIiIiJ5VuBrMP30008899xzPPbYYznPLViwgJYtWxISEgJAt27dmDFjBvfcc0++nvvIkVQ8ngurn4WHlyI+PiVfc0jJonuo6EhITsUWvZU9x4KIjw83O06OonwPGa1uwnJ4L3E/v0VA/+ewBEWYHSnH3oRDpDmTuf/q+ixZn8D4Odu57805dGlWnr6XVcHPp1AtS5gnRfkeksJB95Dkle4hySvdQ5JXuocKhsViEBoaePrXCvrko0aNIjY2Ntdzhw8fJjz85D/mIiIiOHRILSoi+S174xzSp75mdoxCy+lx/bOLnL7/5BfD7otf1/swLFbc8TvNjpNL98qduDPmZg5nHMYbuouXbmtJm5iy/LZkL8O/WMzSTYfVNiciIiIicpFMWeT7dD/AG4a2jxbJb96UeNwHt5gdo9AKsP+zi5xPQ7OjFCuWoAgCrn0de7UWZkfJxTAMrBYrf+1bxO975mKzexjSozZPD25KKT87H09cx1s/rebQ0XSzo4qIiIiIFDmmFJgiIyNJSEjI+fPhw4eJiCg8bRQiUjJoF7mCY9h98Ho9ZC2dQNaqKWbHyeWaWlfwSNN7cHvdbEncTrXoYJ4ZEsv1nWuw48Axnhm9mF/m7SDb6TY7qoiIiIhIkWFKgal169YsXLiQo0ePkpGRwcyZM7n88svNiCIiJZjT41SLXIEy8CTHk71kAq49a8wOk8NmsRHsU4pxW37ls7Vfk+HKwGqx0Dm2AqOGtSS2dgSTF+xi+BeLWbM94dwDioiIiIiIeTOYHnzwQW688UauuOIKevfuTUxMjBlRRKQE87cHqEWuABmGgW+7m7GEViBj9sd4jhWumWIDavThzpib8bH6cDQzEYCQQB9u61OPR69rjN1m4Z1xa3h/whqOHMs0Oa2IiIiISOF2yQpMs2fPpnz58jl/7tOnD1OmTOG3335j2LBhlyqGiEgOtcgVPMPm88+i3zYyZr6HNzvD7Eg5Ah0BVAupzPitk3lj2QekOU+uvVSnUmmeH9qcq9pVZf3Oozz9xSKmLdqNy+0xMbGIiIiISOFlygwmEbk07LXb4dfzEbNjFFonWuQS1SJXoCylwvDtfBeepDiyFv9odpxTtCnXgi6VOhBg98ftObnuks1qoVeryrw4rAX1Kpdh/JztPDdmCRt3J5qYVkRERESkcFKBSaQYswRFYCtX2+wYhVaAWuQuGVu5Ovh2uhNH7JVmRzlFucAoOlRow9x9C3hj+QdkuHK3w4UF+3HvVTHcNyAGp8vD69+v5LPJ6zmWmmVSYhERERGRwsdmdgARKTiufetxH96GT5N+ZkcplE62yAUB5c95vOSNvWozADyZKXgSD2ArW8vkRLmF+pYm1C8Um2E97euNqodRt1Jppi7czfTFu1m9LYH+bavSoUk0Vot+XyMiIiIiJZt+IhYpxtz715O9crLZMQqtbO0iZ4qsv74iY8bbuJMOmB0ll/phdbi1/iB2p+zj243j8HhPXW/JYbfS//KqvHBLC6qWDeK737cy8qtlHEpMP82IIiIiIiIlhwpMIlJiBapFzhQ+ra7DsDnI+O09vNmFrzCzN2U/247tzLXo939FlfHnoWsacecV9TmanMXbP64mOT37EqYUERERESlcVGASkRIr25WlXeRMYAkMxbfz3XiT48mY/Sne08wUMlOHCm14otkDeLwe/tq/6IzHGYZBs9oR3DcghsTULN6fsIZsp/uMx4uIiIiIFGcqMIlIiaUWOfPYytbCp/V1uPesJnv5RLPjnMLH6mDOvr/5edsUEjOTznps9ehghvWuy479yXwxdSMer/fShBQRERERKURUYBKREiunRc63kdlRSiR73U7Ya10ObhfeQliU6V2lK4/F3kuQoxQ7ju0+67GxtSO4ukN1lm06zIQ52y9RQhERERGRwkO7yIkUY9boejjsvmbHKLRO7iIXDESbHafEMQwDn8uHYBjHf9fh9bgxLKffwc0MVouVsgGRTN4+g9/3zOXZlo8S6lfmjMd3a16B+GMZTF+8h7AQPzo01j0lIiIiIiWHCkwixZitfD1s5euZHaPQymmRc1UwO0qJdaK45Ny2iOyVk/Hv+xSGT4DJqXLrVLEdZQOjCPUrQ6ozjUD76fMZhsH1nWtw5Fgm38zcTGiQDzHVwi5xWhERERERc6hFTqQY8yQfxnVws9kxCq2TLXLaRc5sRmAonmNxZMz+BK+ncC367W/3IzayEXP3LWDkojc4knH0jMdaLRbu6FePChGBfDxpPXsOpVzCpCIiIiIi5lGBSaQYc26cQ8a0N8yOUWidbJHTLnJms0XVwOeywbj3riV72QSz45xWnTI1aBbZmBCf4LOuGeXrsHH/gIYE+Np4Z9xqjiZnXsKUIiIiIiLmUIFJREqsbE829ujtJLq0i1xh4KjTHnud9mSvmopz+xKz45wiwj+cATX7siVxO28s/5A0Z/oZjy1dyocHBjQky+nmnXFryMhyXcKkIiIiIiKXngpMIlJiBdgDyVjSnWpqkSs0fFoPwhJZnawF3+J1ZZsd57QshgUvXlwe91mPKx8RyF39G3DwSBofT1yHy124Wv9ERERERPKTCkwiUmKpRa7wMaw2/Lrcg1/vxzFsDrPjnFatMtV5pOnduDwuftoyEfdZCk31Kpfhxm61WLfzKN/M3HzW1joRERERkaJMBSYRKbHUIlc4WfxDsJYuh9eVTfaaGXjPMVPIDBbDwpak7SyJW0l8RsJZj23bsBy9W1di3uqDTFu0+xIlFBERERG5tGxmBxCRgmOUCscaVdPsGIVW4D8tctW71TI7ipyGa+9ashb9gCc9Cd+W15od5xStysZSP7Q2vjZfPlv7NZ0rtqNqcKXTHtu/bVUSkjKZMHcHYcF+tKgbeYnTioiIiIgULM1gEinGHHU74N/rUbNjFFpZ7iy1yBVi9ipNsdfthHPNDJzbFpod57RKOQJJyDjCnuR9ZLmzSM5OYdPRrae0whmGwc0961CzfDCjp25gy94kcwKLiIiIiBQQFZhEpMRyepzHW+Tch82OImfg0/o6rGVrkTn3S9wJhbO9rGxAJCNaPUbt0jWYt28BH64eTWJWEtnu3IuU220W7rkqhrBgP96fsIa4o2fehU5EREREpKhRgUmkGMtc9AMpo28zO0ahdaJFrppPjNlR5AwMiw3fzndj+AaSMfM9PBnJZkc6LZvFhmEYdKvcibsb3kIZ39KMXvctn6/9OtdxgX52HhjYEIvF4J2fVpOcXjh3yhMRERERuVAqMIkUd4bZAQqvTJda5IoCi18Qfl3vxRpVs9DuLHeC3WKjdpkaeL1eapepQa3S1fF4PXy7cRy7k/cCEBHix31XxZCYmsX7E9aQ7Sx8i5iLiIiIiFwoFZhEpMRSi1zRYQ2vgl/H2zHsvngzU82Oc06GYdChQhsuL9+a+PQE1iZs5EhmIhmuDHYe20216GCG9a7Ljv3JfDFlA57/rNkkIiIiIlLUqMAkIiVWToucr1rkigp34n5Sf3wc55a/zY5y3iIDIni+9RM0Cq/PvH0LeWP5hxxOT6BxzVAGdqzOss3xjJ+z3eyYIiIiIiJ5YjM7gIiIWU7uIhcMRJsdR86DJTgSa5kKZP71JZbS5bCGVzE70nnxsR5v7WtX/jLC/cOI8A/jf+t/wOPvpkOTpsxYvIfwYF86NClvclIRERERkYujGUwiUmLltMi51CJXVBxf9PsuDL9gMma+jyf9mNmRLoivzYcmETF4vV7KBURSLjCK6zrVoFyDPXw7fzlrtieYHVFERERE5KKowCRSjPm2vJZSQz8zO0ahpRa5oun4ot/34c1MJfP3D/F6XGZHumCGYdC1cge6V+5EUnYSGYE7CCubyceT1rBsl9rlRERERKToUYFJREqsky1yh8yOIhfIGlYJ33Y34z60DXfcVrPj5EmYXygjWz/JI91641N2P1/u+JSNh/bg1cLfIiIiIlKEaA0mkWIse8NsXLtW4N/zEbOjFErZnux/WuQqmh1FLoK9eiusEdWwBEWYHSXP/O1++Nvh7vbdeWcmfL/zIHVaL8fpzWZwnYEYhmF2RBERERGRs9IMJpFizJN8uMjP7ihIpeyl1CJXxFmCIvB6PWSt+BX3oW1mx8mzGmXDuatdLw4eSWfdthR8rb4YhsGs3XM4nB5vdjwRERERkTNSgUlESqwTLXKJapEr2pyZODf/RcasD/CkJ5mdJs/qVS7Djd1qcXB9edJ31ORoRiJTd85idfx63B43CRlHzI4oIiIiInIKFZhEpMQ60SKnNZiKNsPhf3zR7+x0MmZ9gNftNDtSnrVtWI7erSszb/VBFq46xgutn6Bd+dYsO7SK5xe9zp6UfWZHFBERERHJRQUmESmxTrTIVVeLXJFnDa2Ab7tb8RzaRtbf35odJ1/0b1uFlnUjmTB3Bxu2peGwOqhdpgZ9qnSjQmA003bO4vtNE/B4PWZHFRERERFRgUlESi7tIle82Ks1x9GoF85Nc3Bu/svsOHlmGAY396xDzQohjJm6kS17kwj2CaJr5Q4YhoHT4yLL7cRiWFhwYAmJmUlmRxYRERGREkwFJpFizFG3I349HjI7RqGV7T6xi9xhs6NIPnHEXoWjYU+s5eubHSVf2G0W7rmyAWHBfrw/YQ0Hj6TlvNavWg9uqnsNydkp/LhlIn/tX4TX6+VYVoqJiUVERESkpFKBSaQYswRFYCtby+wYhVagPfCfXeQamB1F8olhseDTYiCWgNJ4s9KKxaLfgX52HhjYEIvF4J1xq0lOz855zTAMghyleLbFo3SueDlrEzbw7MKX2XZkl3mBRURERKREUoFJpBhz7V1L1srJZscotNQiV3x5vR7Sp7xKxsz3isWi3xEhftw3IIak1GzeH7+GbKc71+uhfqXxt/sTHViW9uUvo0rpCszdt4AJWyfj9rjPMKqIiIiISP5RgUmkGHPtW0f2qqlmxyi0clrk3GqRK24Mw4KjSV88h3eQNf9rvF6v2ZHyrFq5YG7rU5cdB5L5fMoGPKf5TKF+ZehfvRdWi5WEjCPEpR/GarGy6vBaUrJTTUgtIiIiIiWFCkwiUmKVcmgXueLMXiUWR5O+ODf/hXPDbLPj5IumtSK4pmN1lm+OZ/yf28967FU1+nBHgyGkOdP5csP3TN/1BwAZroxLEVVEREREShgVmESkxFKLXPHnaHoF1ooNyVrwHa6Dm82Oky+6NKtApyblmbFkD7NX7DvrsVaLlQC7P082e4BulTqyNXE7w/9+iR3Hdl2asCIiIiJSYqjAJCIlVpY7S7vIFXOGYcGv4+1YgsJxH9hodpx8YRgG13WuQcNqoXw7awurtyWc8z1RAREE+5QiyCeIJhENKR8YzZK4FUzdMROXx3UJUouIiIhIcacCk4iUWEGOIO0iVwIYDn/8+z+HT9MrzI6SbywWg9v71aNiRCk+mbSe3XEp5/W+SP9wbqgzAIfVzu7kvaw/uhmrYWXz0W1kuDILOLWIiIiIFGcqMIkUY7by9XE06mV2jEJLLXIlh+HwA8C5dQGZ8/5XLBb99nXYuP/qGAL8bLwzfjVHky+sQHR1zX480PgOMt1ZfLL2f/y89fiOk07NaBIRERGRi6ACk0gxZqvQAJ/GfcyOUWipRa7k8STH49w0B+e6WWZHyRchgT48cHVDsp1u3h63mvTMCysOOax2/Gy+PNj4DrpV7sjelAMM/3sU25J2FlBiERERESmuVGASKcY8xw4Vm4WNC4Ja5EoeR5M+2Co3IWvRD7iKyZpM5cMDuat/A+KOpPPxxLW43J4LHqNiUHnC/EKxWazUCKlKuYAo1iVs5Pc9c7VGk4iIiIicFxWYRIqx7A2zyZjxttkxCi21yJU8hmHBt/0wLCFRZM76EE9KvNmR8kW9ymW4sXst1u9KZOxvmy+6BbBsQCS3NhiMv92PDUc3s+DAEiyGhd3Je8l2O/M5tYiIiIgUJyowiUiJpRa5kslw+OHX9T68XjeZf35eLNZjAmgbU44+rSvz15qDjPtja57HG1jzCh5pejcuj4sPV43mu00TAPB4L3yGlIiIiIgUfzazA4iImCWnRa5HbbOjyCVmCY7Cr/M9GP5BGIZhdpx8c0XbKiQcy2Ds9I342Qxa1ovK03j+dn8AhjUYTIA9gPj0I7y36jNuqnst1UOq5EdkERERESkmNINJREqsTHemWuRKMFv5eljLVMDrduHat87sOPnCMAyG9KhD/WqhjJm2kc17EvNl3Bqlq1EuMIpsTzYRfmGE+4WyLWknf+1fhNvjzpdziIiIiEjRpgKTiJRY2e5stcgJ2SsnkzH9zWJTZLLbLDw9pDnhIX588PNaDh5Jy7exowPLcm/jYQT7BLH80Cpm7PoDD17i0g6r0CQiIiJSwqnAJFKMWYLCsUbVNDtGoVXKrl3kBBwNe2ApHU3GHx/jSS4excZAfwcPXN0Qq8XgnXGrSU7LzvdzDKx5BY/G3gPA+6s+56sNPwAUmzWtREREROTCqMAkUow56nXGv8dDZscotNQiJwCG3Re/rvcBkDHzPbzOLJMT5Y/wED/uG9CQY6nZvDdhDdnO/J1hZBgGIT7B2Awr19bqT4cKbTiWlczLS99hW9LOfD2XiIiIiBR+KjCJSIl1okUuSS1yJZ4lKAK/TnfiSdxP5twvis0snKrlghjWpx47DyTz+eQNeArgcxmGQYOwulQJrkRKdipWw0qwI4i9KQdYGrdSu86JiIiIlBAqMIkUY5kLviPlyzvMjlFo5ewipxY5AWzl6+PT/Gpwu8DtNDtOvmlaK5xrOlZn+ZZ4xv25rUDPVb5UOR5vdh/h/qEsOLCEcVsmkeXOJsOVUaDnFRERERHz2cwOICIFrfhswZ7fTrbIlQbKmR1HCgF7TA/sMd0xDAtejwfDUjx+D9OlWQXikzL5bclewkP86NikfIGf8+qafWlfvjVWw8IrS98jJqwuV1TvWeDnFRERERFzFI+fnEVELkKWO+ufXeTizY4ihYRhGBiGBfehbaSNewrPsTizI+ULwzC4rnMNGlUP49tZW1i9LaHAz2kxLEQGRGA1rDSOaEDtMjXIdGWyJ3lfgZ9bRERERC49FZhEpMQKdgT/0yJX3+woUsgY/sGQmXp80e/s4tHeZbEY3N63HhUjS/HJpPXsjku5JOe1Wqz0qdqN2mVqMG3n77y54iOOZSVfknOLiIiIyKWjApOIlFgZ7ox/WuS0yLfkZikVjm/nu/AkxZE55wu8xWShah+HlfsHxBDoZ+Od8as5cizzkp6/e+WO3FT3WoIcpZi1ew5JWccu6flFREREpOCowCQiJdbJFjkVmORUtui6+LS8Bteu5WSvnGJ2nHwTEujDA1c3JNvp5p3xq0nPdF2yc/vb/WkSEcORzKNM2/U7S+JWXLJzi4iIiEjBUoFJpBjzbX09pW7+2OwYhVZOi5yfWuTk9Oz1u2Kr3ors5ZPwJBeftbqiwwO5u38D4o6k89HEtbjcl3aGVphfKE83f4jOFdux4MASvts0Aafn0hW6RERERCT/qcAkIiXWyV3kNINJTs8wDHwvvxm/3o9hCQo3O06+qlu5DDd1r82GXYl8/dtmvF7vJT1/mF8ZLIaFxMwkjmQcxWpYyHAVj/WuREREREoiFZhEirHsdb+TPv0ts2MUWmqRk/Nh2BzYytbC6/WSveFPvNnpZkfKN21iytL3ssrMX3OQKQt3m5KhV9Wu3NVwKHFph3lmwcusjl9nSg4RERERyRsVmESKMU/yIdyHtpodo9DSLnJyITyJ+8n6+xsyZn9WbBb9BujXpgqt6kXxy7wdLFwfZ0oGq8VKkKMUDcPqUyW4EnFphzmWdWl2uRMRERGR/KECk4iUWGqRkwthLVMen1bX4d6ziuzlk8yOk28Mw+DmnrWpXTGEL6dtZPOeRFNyBDoCGFx3IKXsgXy14Xs+XP3FJW/bExEREZGLpwKTiJRYWS61yMmFsdfrhK1mG7JXTMK5a7nZcfKNzWrh7isbEB7ixwc/r+XgkTTTshiGwY11r2VgzSvIcmczbecsnG6naXlERERE5PyowCQiJZZa5ORCGYaBb5sbsYRXIfPPz3En7jc7Ur4J8LXzwNUNsVoM3v5pNclp2aZlKRsQSfWQKqw/spHpu/5gb+oB07KIiIiIyPlRgUlESqwTLXKawSQXwrA58OtyL9aytTDsvmbHyVfhIX7cN6AhyWnZvDdhDVlOt6l5mkY24pkWj1A1uBLfbhzPX/sXmppHRERERM5MBSaRYsxRrzN+3R80O0ahdXIXuXizo0gRYwksg3/3B7EEhuLNzsDrKT6LflctF8SwPvXYeSCZzydvwOMxdx2kCP8wnG4nSdnHSM1Ow+v1kuHKMDWTiIiIiJxKBSaRYswSHIktqqbZMQottchJXnmz0kj/5XkyJr+MO2G32XHyTdNa4VzTqQYrtsTz05/bzI6D3WrnrpihdKvckYUHl/LCojdIyDhidiwRERER+RcVmESKMdeeNWStmmJ2jELr5C5yh8yOIkWVwx9Hw554jsWR/ssIMud/jTcz1exU+aJLbHk6NS3PzKV7+WP5PrPjYBgGFsNCxVLliQmvRxnf0uw4tguXx2V2NBERERFBBSaRYs21by3Zq6aZHaPQynRnqkVO8sQwDOy1Lyfgmlew1+2Ec+OfpP34BM5ti8yOlmeGYXBdpxo0qh7Gd79vYdW2BLMjAVC+VDmuq3UlKdlpvLfyMyZu0/c4ERERkcJABSYRKbGCHSFqkZN8YfgE4HvZIPyvegFLmeic54v62kwWi8HtfetRMbIUn0xax664ZLMj5Qj2KcUt9QfRpVIH9qUc4O8Di/F6zV0vSkRERKQkU4FJREqsky1y2kVO8oe1TAX8ej+BrVoLADLnjibjz8/xpCeZGywPfBxWHhgQQyk/B++OW8ORY5lmR8rRIKwuwT6l+OvAIqbsmEmmu/BkExERESlpVGASkRLrRItckgpMko8Mw8AwDLxeL5aA0ri2LybtxyfIXjMdr7torhcUHOjDA1fHkO3y8M641aRnFq7PcU3NK3i46V0YWHh35WdsS9ppdiQRERGREkcFJhEpsUJOtMj5qUVO8p9hGPg0H0DA1aOwlq1F1qIfSZ/wDK5968yOdlGiwwO5p3994o6m8+Eva3G5C0/7n8WwEOYXSnJ2CseykvF6PWS5s3F73GZHExERESkxVGASKcZs5RvgaNTT7BiFVk6LnFMzmKTgWIIj8e/+IH7dHsDrcePas9rsSBetTuUyDOlRm427E/l6xuZCt+ZRhH8YTzd/kBqlq/H9pp95Z+UnKjKJiIiIXCI2swOISMGxVYzBVjHG7BiF1sld5KqaHUVKAFulRgSUrwf/FDyyN83Fm3oUR6NeGDaHyenO32UNyhKflMGvf+8iPMSXPpdVMTtSLlaLFYCY8LoczUzEYljYkridmqWrmZxMREREpHjTDCaRYsxzLA5X3BazYxRaapGTS82w2jHsvgB44neRvWISaT89iXPnskI3G+hs+rWpQqt6Ufzy104WroszO85pNYmIoXPFdqxN2MC7Kz9ldfx6syOJiIiIFGsqMIkUY9nrZpHx27tmxyi0MlwZapET0/i2vQm/3o9j2P3InPUBGdPewJ10wOxY58UwDG7uWZvaFUMYM20jm/ckmh3pjOqH1WFQnYE0CKvDsriV7Di22+xIIiIiIsWSCkwiUmJlurOOt8i5482OIiWUrVwd/K96Hp/WN+CO30HWvP+ZHem82awW7r6yARGl/Xh/wloOJKSZHem0LIaFVmVj8Xq9TN89mxm7/jA7koiIiEixpAKTiJRYIT7/tMj51jM7ipRghsWKo34XAq55Fd92QwFwx+/CueVvvN7Cs1Pb6QT42nng6obYrAbvjFvNsbRssyOdkdVi5ZGmdzG4zkD2px7k/ZWfk5iZZHYsERERkWJDBSYRKbEy1SInhYjFLwhLcBQAzk1zyJzzOem/voQ7YZe5wc4hPMSP+wY0JDktm/fGryHLWXh3bfOz+VHKEcjRzESOZiVis9jIcGWYHUtERESkWFCBSURKLLXISWHl0+ZGfNvdgjf5MOk/P0/mvP/hyUwxO9YZVS0XxG1967HrYDKfT96Ax1O4FyxvEFaX4c0fxmF18Nqy95m0fbrZkURERESKPBWYRIoxS1Ak1sgaZscotNQiJ4WVYViw12pLwDWvYK/fBefmeaRPHInXU3hb5prUDOfaTjVYsSWen/7cZnacc7JarNgMK00iGlKnTE0yXJnsSd5ndiwRERGRIstmdgARKTiOBl1xNOhqdoxC60SLXKIrFChrdhyRUxgOf3xbX4+9Tju8yYcxLBa8WWm4E/dji6ppdrxTdGlWgfikDGYu3Ut4iB+dmpY3O9JZWS1W+lTtBsD4rb8yf/8inm/1JME+pUxOJiIiIlL0qMAkIiVWpjvzeIucq5rZUUTOylo6GkpHA5C9ZgbZKydjq94SnxbXYAkobXK63K7tVIOEY5l89/sWQoN8aVQjzOxI56Vn5c5UDa5MkCOQmbv+pHnZJoT4BJsdS0RERKTIUIucSDGWOX8sKV/dbXaMQivEcbxFrqpa5KQIcTTujaNJX1w7l5H24xNkrZqK1+00O1YOi8Xg9r71qBRZik9+XceuuGSzI50Xf7s/TSJiSMg4yvRdv7M0bqXZkURERESKFM1gEinmDAyzIxRaapGTosiw+eATeyX2mm3IWvg92UvG4dr8F/5XjsCw+5odDwAfh5X7B8Tw4tfLeXfcGp4a3JTSpXzwer14PODxeo8/9v7z2HP88fHn/vXYk/ux95/jj7+ff577z3s9Jx/nHAP/jOXNyXC6c50Yv63PdWQfCOCj3VM55omntrUNBpZcY+bO8O9cp8nwn/FzHe/xYrdZubJdVcqHB5r9pRMRERG5aCowiUiJpRY5KcosQRH4dbsf1941uOO2Yth98Xq9eNOOQrj5awgFB/rwwMCGvDR2OY9/stDsOBfFFr0PS8Axtm7ZDVYXhseOxTAwDAOLheP/axhYjH8eWwwMg3+e++ex5Z/j/3n+dO/dFZfC2z+tZviNsZQu5WP2xxYRERG5KCowiUiJFeJT+vgucr3rmB1F5KLZKsRgqxADgGv7YjLnfsHRllfgrdUFw2ZusSI6LIDHr2/Mqm0JpxZZDDAs+VOg+e97TxyT61znM77FwODf47fHg5vDGfG8s+ITbqp7DTHh+d9Su+dQCi9/u4J3x63m8Rua4OejH89ERESk6NFPMCJSYmX80yJ31KkWOSkerGVrYasSS9Lf4zFWzcan1bXYqjTDMMxrla0YWYqKkebPqLp4Fkr7BNM4ogFVgitxMO0Q/jb/fN1prmJkKe66oj7vjlvDJ5PWc9+ABlgtWiZTREREihb99CIiJdaJFrkkV7zZUUTyhSWgNH4d76Ds4JEYvgFk/v4RGVNfw5NRNBbaLqwCHQEMqnM1gfYA/rf+ez5ePRqv15uv52hQNZRB3WqydscRvp21Nd/HFxERESlomsEkUoz5thkMbQabHaPQKv1Pi1xVtchJMeNXsS7+/Ufg3DgH1/bFGD7+AHg9LgyL/uq/WIZhMKTedWS4MshyZ/HH3r/oWrE9dqs9X8Zv3yia+KQMpi/aQ3iILz1aVMqXcUVEREQuBc1gEpESKz2nRe6w2VFE8p1hseKo1wm/Pk9iWGy4kw6Q9v1jODf/hdfrMTtekVU2IJKqwZVZl7CRGbv+YF/qwXwd/6p21WhWO4Jxf25n6SZ9bxIREZGiQ7/GFCnGstf+hvvAJvy63W92lELpZIucdpGT4itn/SWvFyOwDJlzR2PZ+Ce+rQdhjahqbrgiLDaqMZWCKhLmV4axG36icnBF2ka3zPO4FsPg1t51SEzJ4vPJGygd6EP18sH5kFhERESkYGkGk0gx5jl2CPehbWbHKLROtMhV86tvdhSRAmctHY1/36fwbT8Mb0oC6RNHkjl3DJ7MFLOjFVnh/qE4PS6Ss1NIc6bj9XpJd2bkeVy7zcq9VzWgTJAP701Yw6HE9HxIKyIiIlKwVGASkRIrQy1yUsIYhgV7zcsIuOZV7DHdcO5cCq5ss2MVaQ6rnTsb3kzXSu1ZcGAJIxe/QULG0TyPW8rfwYNXNwTgnZ9Wk5rhzPOYIiIiIgVJBSYRKbFOtMglahc5KWEMhx++La8l8Pq3sASG4nVlkT7jbVwHNpkdrUiyGBYshoVKQRVoGF6fMr4hbE/ahcvjytO4kWX8ufeqBhxJzuL9CWtwutz5lFhEREQk/6nAJCIl1skWuXpmRxExheHwA8CTnIAncT8ZU14h4/eP8KQeMTlZ0VS+VDmurdWflOxU3l/1GZO2T8/zmDXKh3Br7zps3XeM0VM34vF68yGpiIiISP7TIt8iUmKdaJFLdIYDUWbHETGNtUw0AVe/RPbqaWSvmoprzyocjXrjiOmOYXOYHa/ICfYJ4pb6g6gcVJG9KfvZk7KP1mWbn1xw/QI1rxPJkWOZjJuznfAQP65qp40JREREpPBRgUmkGHPU74qteiuzYxRama6Mf1rkapgdRcR0hs2BT9MrsNe8jKyFP5C97GesEVWxldci+BejQVhdAKbs+I21CRtpEtEQP5vvRY/XvUVF4pMymLpwN2HBvrRrFJ1fUUVERETyhQpMIsWYJSQKi2bmnFFpnzJkLOlO1d51zY4iUmhYSoXj1/Ve3PG7sIZXBiBr5WTsVZthCdb3kwt1Ta3+dKnUAQN4d8Wn9K7ajWohlS94HMMwuKFrTRKSMxn72xZCg3ypXzU03/OKiIiIXCytwSRSjLn2rCJr1TSzYxRaOS1yWuRb5BQnikue1CNkr5pK2rjhZC0Zh9eZaW6wIsZiWAjzK8Ox7BSOZafgxUumKwu358IX7LZaLNzZrz7R4QF8NHEdew6lFEBiERERkYujApNIMebaswbnmrwvMltcZboztIucyDlYAkMJuOYVbNVaHC80/fQkzm2L8Gqx6QsS6R/O080fpHpIFb7fPIF3V36Kx+u54HH8fGzcPyAGPx8b745fQ2JKVgGkFREREblwKjCJSImV0yLnpxY5kbOx+Ifg12EY/n2fxvANInP2Jzg3zTU7VpFjtVgBiAmrR6Pw+hgYbEncdsHjlAny5f4BMaRnuXhn3Goyslz5HVVERETkgqnAJCIlVoYr/Z9d5DSDSeR8WKNq4N//OXzb3YK9xvENBFz71uHNSjM5WdHSNLIhHStezuqE9by78jPWJmzA6XZe0KywipGluOuK+uyPT+PjSetwey58NpSIiIhIflKBSURKrAx3plrkRC6QYbFgr9UWw+aDNzuDjFkfkPbjE2Rvmov3Ilq+SrKYsLoMrjOQeqG1mb7rD0YsfBWXx0ViZhLZ7uxzvr9B1VAGdavJuh1H+WbmFrUtioiIiKlUYBKREkstciJ5Yzj88O/zJJaQsmTN+5L0iSNxH95udqwiw2JYaFk2FothoVJQBWKjGmOz2Phxy0ReWfouANuSdnIk4+gZx2jfKJqeLSsxd9UBZizec6mii4iIiJxCBSaRYsxWMQZHwx5mxyi01CInknfWsEr49XkS3463401LJH3iSLLXzjQ7VpHTMLwefap2A6BThbb0/ufxNxt/4octvwAwf/8idifvPeW9V7arSvM6EYybs52lmw5futAiIiIi/2IzO4CIFBxbxUZQsZHZMQqtEy1ySa4aZkcRKdIMw8BevRW2io3IXjkZa4X6AHhSEjACQjAs+nHjQtQoXS3n8V0Nh5LtduJ0O5mwbQpty7WkYqnyfL95As0iG1OjdDUshsEtvepwNCWLzydvoHSgD9XLB5v4CURERKQk0gwmkWLMkxSHK26r2TEKrTJqkRPJV4bDD58WA7GGlMPrcZMx423SJzyLa88arc90kSL8wylfqhx2q52XLhtOl0rtSco6xpqEDSRkHCXVmcYbyz5kV8ou7u5fjzJBDt6bsIZDielmRxcREZESRgUmkWIse+1vZM563+wYhdaJFrmjapETyX+GBZ9mA/C6nGTMeIu0n54ie+1M7TiXB342X0o5AintG8JLlw2neVQTkrNS8Hg9OKwOEpxxUPcPvH5JvDVuOQkpKWZHFhERkRJEBSYRKbFOtsipwCSS3wzDwFa5MQEDX8K3w20YPgFkLfyO9GlvmB2tWLAYFqwWK+UCo3is2b1UCqqA3WKjeukq3N6tOUn2nTy3ZBRxqQkcyUjkcHqC2ZFFRESkmNOiCCJSYuW0yPVRi5xIQTGsduw1WmOv0Rp3wi68WcdbtzxJcWTOG4O9bkdsVWIxrPqRJK8qBpXn1vqDAOjftDE/r8rklz8OElZnB38fWMxrbZ9nd/Je3F43tUpXxzAMkxOLiIhIcaKf5kSkxEp3nthFLhyIMjuOSLFnDauc89iTnognLZHM2Z9g+AVjr9MOe50OWAJKmxewGOke0wBvehDj5mynQ1Albq5fHYfVzszdf3I0M5FnWj7CX/sX4WfzJTaykdlxRUREpBhQgUlESqwMdwb26O0kahc5kUvOVq4OAde+invvOrI3/EH2islkr5yCb/tbsddobXa8YqF7i4rEJ2Xw5+IDVChdC8Lh1gaDOZqZCMDCg0sp7RNCbGQjvts0nspBFWldrrnJqUVERKSoUoFJpBizBEdijaxudoxCK6dFrq9a5ETMYBgWbBVjsFWMwZN8mOwNf2KNqgmAc8vfeJ2Z2Gu0xnD4mZy0aDIMgxu61iQhOZNvfttCaJAvDaqGUjYgEoBHm95DpjsTt8dNXNphQnyC8Xg9jFryNv3qdCYmqCFZ7mx8rA6TP4mIiIgUBVrkW6QYc8R0x6/rfWbHKLQyXBn/tMhpkW8Rs1mCIvBteQ2WUmEAuHavJOvvsaR++yCZ88fiTtxvcsKiyWqxcGe/+kSHB/DRxHXsOXRyZznDMPCz+WG1WHmo6V30qNyZdFcG0QFRBPsGkZiZxKPznmNp3EpcHheH0g7j9XpN/DQiIiJSmKnAJCIl1skWORWYRAobvy734H/Fs9gqN8G5aS7p454mfcqreLMzzI5W5Pj52Hjg6ob4+9h4d/wajiZnnvY4wzAItAcwtP4NxEbHYBgGHSu0pWJQebYm7eCFxW+wKXErSVnH2HhkCy6P6xJ/EhERESnMVGASKcYy//ofqWM1g+lMclrk/NQiJ1IYWSOq4tfhNgJueAtH8wEYDv+cdrnsTXPxpCeZG7AIKV3KhweubkhGlot3x68hI+vcxaEQn2CuqN6TSP9wogPLck3NK6gWXJkVh9fwweovSMpKZuexPfy9fzFOt/MSfAoREREpzFRgEpESK92VrhY5kSLA4heET6Pe+HW9FwBP8mGy5n1J2ncPk/HHx7jitqh16zxUiAjkrivqsz8+jY8nrcPt8Zz3e4Mcpbi8fGscVgdtyrXgvka3EeZXhpXxa/h521QshoWFB5cxZcdv+lqIiIiUUCowiUiJlZnTIpdgdhQRuQCWoAgCBr6CvW4nXHvXkPHrS6T//CzO7UvMjlbo1a8ayuBuNVm34yjfzLy4wpzD6qBWmeMbSPSv1ovhLR7CarGyJ3kfm45uxTAMftoyifFbfwXA7XHn62cQERGRwqnQ7iK3detWPvvsM0qVKkVYWBh33XWX2ZFEpJgp4xP6zy5ydcyOIiIXyBIShW/r6/FpdhXObQtxbvgDz7E4ADwZyZCVjiUkyuSUhVO7RtEkHMtk6sLdRIT40aNlpYseyzAMSvuGAHBNrStOW0x6Y/mHVAuuzICafUnMTCLEJxjDMC76nCIiIlI4FdoCU2JiIo8//jhhYWEMGzbM7DgiUgydaJFLckYA+oeoSFFk2H1w1GmPvXY78B4vbjjX/0H2iklYy9fHUbcT1ooNMSyatP1v/S+vSnxSBuPmbCc02JfmdSLzZVyrxQrAwJr9APB4PdQtU5MI/3CcHhcvLH6D9uUvo1+1Hmw+uo0qwZVwWO35cm4RERExV6EpMP34449MmTIl589vvfUWYWFhfPbZZ/Tq1cvEZCJSXJ1skatldhQRySPDMMA4/mONvW4HsFhwbpxDxsx3MQJDsdftgKN2ewzfQJOTFg4Ww+CWXnU4mpLFF1M2UrqUDzXKhxTAeSz0qdYdgGy3k6uq96ZCqWgOp8fz3qrPGFjzClpENWXpoRU0Cm9AKYe+PiIiIkWV4S2kKzFmZWXx8ssv06lTJ9q2bXtRYxw5korHc2EfLzy8FPHxKRd1PhHQPVSUHDySxtOfL+b2vvVoUTd/fnufH3QPSV7pHjrO63Hj2rUC54bZuA9sxH/Ai1jLlMeblQYOf7VpASnp2bw0djlpmS6eHtyUyDL+QMHfQ06Pi62J24kOLMfelH18vOZL7m98G0GOUiyOW0H78m0I9ilVYOeXgqfvQ5JXuockr3QPFQyLxSA09PS/ELrg+eJO56XZhvaDDz5g/fr1TJo0iaeffvqSnFNEShbtIidSvBkWK/aqzfDv/TgB175+vLjk9ZI+5VXSf3ke5+a/8LqyzY5pqlL+Dh4Y2BCAt8etJiX90lwPu8VG3dBaBPuUol5obZ5p8QjVgquwO3kfs/fMA2B1/Dq+XP8d6c70S5JJRERE8uacBaZly5bx0UcfkZ2dTf/+/YmNjWXatGnnfYLU1FR69+7Nvn37cp6bPHkyPXv2pEuXLnz77benfd/DDz/MuHHjeOONNxg1atR5n09ETspeM52Mme+bHaPQytAuciIlhiUo/PgDr/f4ek3ubDLnjib12wfJXPQDnuTD5gY0UWRpf+67KoajyVm8P2EtTtel3fXNMAyiAiKwWqy0KNuU1y5/nmCfUiRnp3IgNQ5fmy/z9y9i7r4FF7XrnYiIiFwa51yD6fXXX+f+++/n999/JywsjPfff58HHniAnj17nnPw1atXM3z4cHbt2pXz3KFDh3j77bf5+eefcTgcXHvttbRo0YLq1avn6YOczpmmbZ1LeLimZEveFJZ7KD7rKOnx2wtNnsKmuqciGV93p9GgxoXuGhW2PFL06B46i8gr8LbrR+ae9SQvm0Ha2pmwfw3lb38PwzDwer0lrn0uPLwUD1sMXv16GWNnbeXRQbGm30NXhnfhykZdANi+ZQdOj4urwrtyJCORMP8ypmaT82P2PSRFn+4hySvdQ5fWOQtMbreb1q1bM3z4cDp37kz58uXxeDznNfhPP/3Ec889x2OPPZbz3IIFC2jZsiUhISEAdOvWjRkzZnDPPfdc3Cc4C63BJGYoTPdQZoYTj8dbaPIUNvsOx2OL3sruIxHExwebHSdHYbqHpGjSPXSe/Cthufx2ApoOxJuSQEJCKp7kw6RPe/P4znS12paoRcFrlQvi6g7VGPfndiLLbKBXi4pmR8pxY83ryHJns3b3dl5e8g7X1b6KVmVjzY4lZ6HvQ5JXuockr3QPFYyzrcF0zgKTx+NhzZo1zJkzhzvuuIMtW7ac9zpMp2ttO3z4MOHh4Tl/joiIYM2aNec1nohIfsrQLnIiAlgCSkNAaQC82RlY/IPJWvwjWct+xlatJY76nbCGVTY35CXSvXlF4pMymfDnNgJ8rLRvFG12JOB4G52vzYfShNC1UgcahNZha+IO9qUe4PLoVlgtVrMjioiIlHjnLDDdeeedPPzwwwwYMIDy5cvTsWPHPC26fbre+ZI2DV1ECodQn1AylnSnWr86ZkcRkULCGlYJ/75P4T6yF+eGP3BuXYBry1/4tLoOR4NuZscrcIZhcEOXGqRkOPnmty2EBvnSoGqo2bFy+Np86F21KwArdq5h/ZGNXFauBVnObPztfianExERKdnOWWA6fPgws2bNyvnzrFmzsFov/rdEkZGRLFu2LNf4ERERFz2eiMjFOrmLXAQQaXYcESlErKEVsLYdgk+LgTi3/I2t4vGd1pyb5uFJPoS9TgcspcJMTlkwrBYLjw2O5dF35/HRxHU8eUMTKkYWvjUsBtbsR4qzEx6vmxcXv0nb6Fb0qNLJ7FgiIiIl1jl3kfv+++9z/TkvxSWA1q1bs3DhQo4ePUpGRgYzZ87k8ssvz9OYInJ6jphu+HXJ//XNigvtIici52I4/HHU74Il6Pgvw9xH95K9ehppPzxKxm/v4tq3Dq/3/NamLEr8fe3cf3VD/H1svDt+DUeTM82OdArDMAhylMJiWGlVrhl1QmuQlHWM2Xv/wu25tDvhiYiIyHnMYKpSpQrDhw8nNjYWf3//nOe7du16USeMjIzkwQcf5MYbb8TpdDJgwABiYmIuaiwROTtLSFmzIxRqJ1rkqqpFTkTOk2/rG3A06IZz4xycm+bi2r0SIzgK/z5PYvEvPJsF5IfSpXx44OqGvPzNct4Zt4YnBzXBz+ecPzpecg6rnT5Vj7cvzto9hyk7ZxITVo9gRynsVrvJ6UREREqOc/6UkJSURFJSErt37855zjCMCyowzZ49O9ef+/TpQ58+fS4gpohcDNfulXiOxeGI6WF2lEJJLXIicjEspcLwaT4AR9N+uHYsxbV/PYZfEADZq6djLV8fa2gFk1PmjwoRgdx1RX3eGbeGjyeu474BMdis55wAb5rOFdsRE16PUN/SvLvyU8oGRHJNrf5mxxIRESkRzllgGjt27KXIISIFwLV7Fa49q1VgOoN0V7p2kRORi2ZY7dhrtMZeozUAnvQkspb9Aot/xBpVE3vdjtiqxGJYC9+snwtRv2oog7vV5KsZm/lm5hZu6l6r0G7QYhgGkf7huD1uaoRUpbRvadweNwsOLqVV2VhslqL9tRARESnMzvm37K5du/jmm29IT0/H6/Xi8XjYvXs3P/zww6XIJyJSYEJ9w9QiJyL5xuIfQuANb+Hc8hfZ62eTOfsTDL9gHI164WhwcUsLFBbtGkWTcCyTqQt3E1Haj54tK5kd6aysFiu9/tltbuXhtfyw+WfCfMtQq0x1LEbhnYElIiJSlJ3zb9iHH34Yp9PJypUriY6OZtu2bdSsWfNSZBMRKVAnW+TizY4iIsWE4RuII6YHAde+il/3h7CEV8abnQ6AJyMZ14GNeL1ek1NenP6XV6V5nQjGz9nOko2HzI5z3hpHNOCRpndTJ7Qmv2ybyph13+Iphguzi4iImO2cBaa0tDSef/552rRpw+WXX86XX37J+vXrL0U2EZEClZHTIqdd5EQkfxmGBVvFGPy7P4ijST8AnJv/ImPKq6SPf5rs9X/gzc4wOeWFsRgGt/SqQ43ywXwxZSNb9iaZHem8VQk+PuMq0B7wz85zFlbHr8PlcZmcTEREpPg4Z4EpJCQEgEqVKrF161aCgoLwePRbHxEp+nJa5PzUIiciBefEekWO+l3wbXcLWB1k/T2W1G8fJHP+WDwpRafIbbdZufeqGEKDfHh/whoOHU03O9IF6Va5IwNq9mVfygE+W/s18/YvLLIzykRERAqbcxaYKlWqxKhRo2jSpAnffPMNY8eOJTs7+1JkE5E8slVqhCOmm9kxCi21yInIpWTYHNhrtcW//3P4X/EMtspNcG6aizcr1exoFyTQz84DAxtiGAZvj1tNSnrR+7mwfKly3NPwVtqUa8nSQyv5fO3XZLiK1owyERGRwuacBaYRI0YQGxtL3bp1ufrqq1m0aBEjR468FNlEJI9slRprB7mzOLGLXJLriNlRRKQEMQwDa0Q1/DrcRuDgd7GGVcbr8ZAx6wNcu1eZHe+8RJb2574BMRxNzuL9CWtxutxmR7pgdUJr4rDayXRlku7MwMfqw45ju3GqbU5EROSinLPA9Omnn9Kt2/EZENdffz0ffvgh06ZNK/BgIpJ3nqSDuOO2mh2j0ArzCSVjSXeq+NU2O4qIlFCGTwAA3sxkPMfiyPjtHTJmf4onM8XkZOdWPTqY2/rUZdv+Y3wxZSOeItpqdnn51tzX+DYyXJm8v+pzJmydbHYkERGRIsl2phfee+89kpOTmTZtGqmpJ6duO51OZs+ezfDhwy9JQBG5eNmrp+Pat5bAG942O0qhdLJFLhKINDuOiJRgFv8Q/PuPIHvVFLJXTMa9bx0+bQZjq9IsZw2nwii2dgQDO1Tnpz+3ERbiy9Xtq5sd6aIYhkGA3Z/bGtxIuF8Y+1MPMnXnLAbW7EeIT7DZ8URERIqEM85gatiwISEhIVgsFkJCQnL+i4qK4v3337+UGUVECkROi5xbLXIiYj7DasOn6RX4XzkCIzCUzN8/wr1nldmxzqlb8wq0bxzN9EV7mLNyv9lx8qROmZqE+ZUhLu0Qe1P2Y/t/e/cdX3V1/3H8/b0zO2QDYYW9N7KHylYUBQtqHdXWra2/tk6cdY9aK1WrtlpF60bEAQi4EAQBAdlL9iaE7Nz5+wMIRUVAkpzvvff1fDx4mHtzc+/bcI25n3ve5zhc2lW6R/6g33Q0AABs76grmPr376/+/furX79+at++feX1fr9fbre7RsIBQHXKPHSK3EgqcgDsw5lRXwkj71BgzWw563eQJAX3bJAjo6EtVzNZlqULBzXT3v3lmjBttdJT4tS+SYbpWCelS05HdcxqJ8uy9NcFzyjNm6rrO/3OdCwAAGztmHsw+Xw+Pf300/L5fDrnnHPUtWtX9mACEBU4RQ6AXVkOp9wt+spyOBTM36zSifeobMoTChXbc8Wl0+HQVWe3Ub2sRD0zaak27bT/HlLH4nQ45bAcGtN8pIY0Ok1lgTL9Z/nr2lOWbzoaAAC2dMwB06OPPqqOHTtq+vTpyszM1Icffqh///vfNZENAKrVoYrcPk6RA2BjjrRceXteoOD2lSp563b5ln+qcDhkOtaPxHtd+v15HZTgdelvby1WfmG56UhVokV6UzVPa6LNRVv13Z7lKvWXqthXIl/QZzoaAAC2cswBUzAYVK9evTR79mwNHDhQ9erVUyhkv19qAPyYo1ZtObObmI5hW5UVOU6RA2BjluWQp+0gJY6+T86sPFXM+o/KPnzUlquZ0pK9+sN5HVTuC+pvby1RWUXAdKQq0zytqe7rdZsapNTT66sn6qFv/q5gKGg6FgAAtnHMAVMoFNKSJUv02WefqXfv3lq9erX8fjY6BCKBp8NwxQ+6znQM2yoJlFCRAxAxHCnZij/jJnn7XqpQ0R7J4TQd6SfVz07SNee01bY9JXrmvaUKBKPnjck4V5wkqX9uT53eoK8clkPvrf1IO0v5/wgAAMccMF111VX64x//qNGjR6tevXq66qqr9Ic//KEGogFA9ao8RY6KHIAIYVmWPK0GKHHMg3Ik1FLYV6qyaU8puG+b6WhHaJuXoYuHttDS7/M1YdpqhcNh05GqVLO0Jupdt7t2lu7Wl1vnaF3B9wqEAqqgNgcAiGFHPUXukMGDB2vw4MGVlz/55BM5nfZ8xwzAkco//5cCW5Yq6cInTEexpcy4LE6RAxCRLMeBX+FC+7YpsH2lAu/cKU+XkfJ0GFr5OdP6dair3QVl+nDORmWnxWt4j4amI1W52onZuqvnTUpyJ2r6ps/1xZY5uqXb75XkSTQdDQCAGnfMFUw/xHAJiDT2O9LaLkqpyAGIcM6cpko87wG5GnaU75u3VfreXxTcu8l0rErn9Gus7q1z9PZn6zRvxU7TcapFiidZDsuhJql56prTUUmeRM3a+rV2lOwyHQ0AgBp1wgMmAIgWnCIHIBo4ElIVP+g6xQ28VuGSfSqdeI9CRfYYnDssS5cNb6Xm9VL1wgcrtHpzgelI1aZJrUYa2XS4ygLlen/9FH2+ZbYkyR9k71IAQGw46oDpk08+kST5fHTJAUSnyoocp8gBiALuxt2UeN4Diut7qRzJWQqHw7bYm8ntcui6Ue2VkRqnp95Zop35paYjVat4V5zGdf+jRjQerBV7V+vurx/RtuIdpmMBAFDtjjpg+vvf/y5JGjNmTI2FAYCaREUOQLSx4pLkbtFXkhRYN1elb9+u8q9fVzhQYTRXUrxbN57XXpZl6Yk3F6uwNLrfwEzxJCvBnaAEd7zyUhooKyFTK/au1o6S6KwJAgAg/cwm34mJiRoyZIh27typESNG/OjzkydPrtZgAFDdDp8i18p0FACocq4GHeRu2V/+JVMU2PCt4vpfJledFsbyZKcl6IbR7fXIa9/qqXeW6M9jO8njju69PRum1Ndv212kUDikt9a8r2RPom7sfLVC4ZAcFjtVAACiy1EHTC+88IJWrFih22+/XXfccUdNZgJQReL6X246gq1leg9U5PI4RQ5AFLI88Yrre6lcjU9R+Rcvqmzyg3K3Pl3eHr+S5fIaydQ0N1VXjGitp99bqhc+XKGrzm4jhxX9h1E4LIdu7HyVygLlyi/fp6e+fV4XtBytZmmNTUcDAKDKHPWtk6SkJHXr1k3//Oc/1aZNG0lSIBBQ69atdcopp9RYQACoLocrcntMRwGAauPKba3E0ffJ3XaQgjtWS5bZVUNdW2brV6c21fyVu/TOZ+uMZqlJyZ4kZSdkqiLoU4o3WelxadpeslNbi7ebjgYAQJU46gqmQ4qKinTRRRcpMzNTwWBQO3fu1LPPPqvOnTvXRD4AJ6Fi0YcK7dmg+IHXmo5iS1TkAMQKy+1VXK8LFQ74ZDldChZsk3/JVHm7/0qWN7HG8ww5pb52F5Tp47mblFkrXqd2yq3xDKbUSczRjZ2vliQ9s/hFbS7aont73Sqn5ZQVA6u5AADR65gDpocffliPPfaYevToIUmaM2eOHnroIb355pvVHg7AyQkV7FBwZ+y8O3yiDp0iR0UOQKywXB5JUnDHGvlXfanApsWK63OJXI061WwOy9IFg5ppb2G5JkxbpYwUr9o3yazRDHZwUetfaWfJboUlPbHwWQ1s0E/ts9qYjgUAwC9yzN0Fi4uLK4dLktSzZ0+VlZVVaygAqAlU5ADEKk/L/koYeaesuGSVTXtSZTOeVai8qEYzOB0OXXV2G9XPTtIzk5Zp086afXw7SHInqkmtRir2FSsQDsjlcKnUX6otRdtMRwMA4IQdc8DkcDi0devWystbtmyR0xndJ34AiA2HK3IMmADEHmdWIyWcc5c8Xc5R4PtvVDrxHoWDgRrNEOdx6fejOyjB69Lf3lqs/MLyGn18u0iLq6U/d7lOrTNaaOrGT/Xo/Ke0v6LQdCwAAE7IMSty1157rcaMGaOePXtKkr766ivddddd1R4MAKobFTkAsc5yuuTtcrZceV0U2rdNltOlcMCnQNE+HceviVUiLdmrG8/roAcmLNDf3lqiW3/dWfHemnlsOzm0/9LghqeqYUp9pXpT9NrKd9S0Vp5Oqc3epwAA+zvmCqaBAwfq5ZdfVqdOndSxY0e98sorGjJkSE1kA4BqVUxFDgAkSc70enI3OXBKsG/hJG157vfyr/pS4XC4Rh6/XnaSrj2nnbbvLdEz7y1VIBiqkce1o0R3gjpnt1dF0KdtxTuUX16gUDikbcU7TEcDAOBnHdfbQ40bN1bjxo2rOwuAKubpOExq1d90DNsqDZTInbtO+4OtTUcBANtwN+8rx971Kv/8X3Kum6u4fr+RIymj2h+3TV66LhrSQi99vFITpq3SJUNbxvSpal6nR//X5WqFw2HN27FQE1a8pT92uUZ5qQ1NRwMA4CcdcwUTgMjlrFVXzpympmPYVlZc9oGKXHwL01EAwDYctWqrzkX3ytvr1wruWKOSt26Xb/nMGlnN1K9DXZ3Rs6G+WLxdH329sdofz+4clkNOh1PtM9toZNPhaphSX59t/kpfbZtbY6vLAAA4XgyYgCjm37BAviVTTcewrRIqcgDwkyzLIU/bgUo87z45s5souGVZja0mOqdfY3VvnaN3Pl+vuct31shj2l2CO14DG/SXJUtL967Q8r2rZVmW9pUXmI4GAEClYw6YbrrppprIAaAaBDZ8K9/SaaZj2NahilxBYK/pKABgS47kLMUP/5PiTr1CkhTYtES+JVMVDlXfHkkOy9Jlw1upeb1U/evD5Vq9uaDaHivSWJalaztcrota/UqbirbozjkPacHORaZjAQAg6Tj2YFq5cqXC4XBMd+ABRKfKitw5VOQA4Ggsy5LcXklSYONC+Vd8Jv/6eYrrf5mcabnV8phul0PXjWqv+19ZoKfeWaIbRrdXUrxbobAUDoUVCocVDkuh8MGPQzp4XVihg9cfuN3/XB/Swc//z9eHfnA/ldcd+NrK2//P7Q7d5n8z/Pj+D34c+sFtfur+Q0c+1g8z/NT9h8NSUD65ajXVm5P2663E99WjbaZGduhVLX8fAAAcj2MOmLKysnTGGWeoQ4cOSkxMrLx+3Lhx1RoMAKrb4YpcbUnZpuMAgO15+1wiZ52WqvhqgkrfuUuezmfJ03G4LMdxnRtzQpLi3brxvPa67+UFenDCwiq//5PlsCxZluRwHPynZf3gOksOSwf/acnhOPxx5W104PoD1x15G4fDkvPgP3/6/hPlsHrIUdvSCi3S1C0LVb43Q+cNaCang10wAAA175i/DXTq1EmdOnWqiSwAUKNK/MUHK3KcIgcAx8OyLLmb9pAzt7Uqvpog3/x3FdqzQfGDb6iWx8tOS9Cdl3TVmi37ZTn+d8hycHjjOPBPh2Ud+Fj/O9w5PIyp/PgnBkCHhzs/vs2RX3fkMMhOynzNNOHTJZq2cL3ml32iG3qOVYP0TNOxAAAx5pgDpuuuu07l5eXauHGjmjVrJp/Pp7i4uJrIBgDVioocAPwyjvgUxQ+8Rv4N3WV5EiRJ4fJiye2V5XRX6WNl1opXZq34Kr3PaBPv8eh3Q7oqI2uupu+ZpcffmaurBvVUq0bppqMBAGLIMdfPLl68WAMHDtSVV16pXbt2qX///lq40H7LlAH8mKtRJ3naDjYdw7YOV+TY5BsAfgl3oy5y1W0lSSr77HmVvnuXgrvWGU4Vu87t3F1/bv9HJYTT9eTCf2n8l5MUCodNxwIAxIhjDpgefvhhvfTSS6pVq5Zq166tRx55RPfff39NZANwktyNusjTfojpGLbFKXIAUHU8rU9X2Feu0kn3qXzOfxUOVJiOFJPyaqfr1l93VFpighavLtBT7yzR3uIi07EAADHgmAOm8vJyNW3atPJy//79FQwGqzUUgKoRLNim4M61pmPYVmVFLp6KHACcLFeD9ko87365Ww6Q/7upKnn7DgW2rTAdKyalJMTr/kFX61ftT9Xysnm6a9bjWrFlh+lYAIAod8wBk8vl0v79+ys3M1y/fn21hwJQNXyLPlTZjGdMx7CtkkDxwYrcHtNRACAqWJ54xfW9RPFn3iyFwwpuW2k6UsxyOBwa1K2Bft2ztxxFdfTEf1do0vxFCoVCpqMBAKLUMQdMV199tX79619r+/bt+r//+z+df/75uvrqq2siGwBUq0MVuf1U5ACgSrnqtlLieffJ02mEJMm34jMFNi8xnCo29W3aWvef8Rs1ahzW1P2v6ZFp76nCTxsBAFD1jnmK3KmnnqrGjRvrq6++UigU0jXXXHNEZQ4AIlVWXI7K5g1VI06RA4AqZ7m8kqRwKCT/8k8V2rtRruZ9FNfzfFneRMPpYktygkc3jeyvp78s1OIFCbp7zzT9+rQ2alO3geloAIAocswVTJIUCAQUCoXkcrnkdlft0bMAYAoVOQCofpbDoYSzb5en45kKrJmtkjdvk3/DAtOxYo7L6dQNA0bqD6M6qzBtvv6x8BV9s2Kn6VgAgChyzAHTO++8o4suukjfffedFixYoAsvvFBTp06tiWwAUK2oyAFAzbBcHnlPGa2Ec+6UlZCi8mlPqeLbD0zHikntmmTqT92vUFZhDz3z4UI9PON1Vfj9pmMBAKLAMStyL730kt577z1lZ2dLkrZt26Yrr7xSQ4Zw9Dlgd45adaQAvzQezaGKXN65VOQAoCY4Mxsp4Zy75Fv0kdxNTpEkhcqLZHmTKg+UQfXLy8zRHWOy9PdPJ2tteJEeejtb15/RS+kpcaajAQAi2DFXMLnd7srhkiTVrVuXmhwQIbwdz1T8wGtMx7AtKnIAUPMsh0vezmfJkZKtcMCnskn3q3za3xUq2Wc6WkxxOR36v4Fna3TO5dqx3aE7p/9TU5ZTXQQA/HJHHTAtW7ZMy5YtU4sWLXTvvfdq1apVWrt2rR555BF17ty5JjMCQLU4VJEr8FORAwAjHC65Ww1QYMtSlbx1m/wrv1A4HDadKqac1q6Z/u+CVnIkFOrdOUs1adZ6BUKcMgcAOHFHrchdf/31R1z+7LPPKj+2LEvjxo2rtlAAqkbZp88ruH2lki543HQUW6IiBwBmWQ6HPO2HytWwo8q/eFHlX/xbznVzFdfvN3IkZ5qOFzOa1c7RAwP+rFc/WasP183QrOIS3dbnCqUlJZiOBgCIIEcdMM2cObMmcwCoLuxpcVTF/gMVuQJ/XUlZpuMAQMxypNZW/Jk3y7/8U1XMe0vB3esZMNWwpLg4XXFmG/177hbN37RK97+8UJee2URtG9QxHQ0AECGOucn37t27NXHiRBUUFBxx/U033VRdmQCgRpQcqsgF2pqOAgAxz7Ic8rQ5Xa7G3WTFJUuSKhZ9JHdeZzlSaxtOFxssy9LlPYbqtIa99NSUz/T0qg/Ud/sIjT2lF5uwAwCO6ZibfF999dVasmSJwuHwEX8AINJlH6rIxTc3HQUAcJAjPkWWZSlUWiDfog9U8vYdqlg4SeGKEtPRYkZenRTdMqq/avmb6pPPS/T3D7/S/jK+/wCAn3fMFUx+v1/jx4+viSwAUKMOnyJHRQ4A7MaRUEuJ592viq8myDd/onyLP5a71QB52g2RIzHNdLyol52SqvuGXa7Jqes0tehl3Tn9G93c8wrVzUw0HQ0AYFPHXMHUpk0brV69uiayAECNOlyR4xQ5ALAjR2Ka4gdfr4Rz75GrQUf5v5sq/8ovJIkV9TXAYVk6u3dTjWw4UuFtzfWXV7/Smwu/NB0LAGBTx1zB1LlzZ40cOVJZWVlyuQ7ffMaMGdUaDMDJiz/1d6Yj2FplRe5cKnIAYGfOzIaKP/0qhbqNkuU9cLKZ79v3Fdq9QZ4Ow+Ws3cxwwug2uFVndatXoYc+naDP8teoaFqiLj6to9yuY75XDQCIIcccMI0fP16PPfaYGjRoUBN5AKDGFFORA4CI4kg5/LPacsUpsGO1Ahu/lbN2c3k6DJOzQQdZFkOP6pCW7NW9wy7Wf76Yq68W7tPK0hd1Za/haprNKXMAgAOOOWBKTU3V8OHDayILgCpW8e1khfK3KP70q01HsaXSQLHcueu0n1PkACDieNoPkbvVAPlXfSHfkikqm/qkHGl1lXD2HbI88abjRSWv260rTu+jxjnLNXH7DP1tygxd2WeY2jXOMB0NAGADxxwwDRgwQA8//LAGDx4sj8dTeX2bNm2qNRiAkxcq2K7grvWmY9hWdlxtlc0bqkZU5AAgIllurzxtB8nd+lQF1s1TcOc6WZ54hcNhBdZ8JVejLgybqsHAtq2Vl/V7vbRpg5768l0135SiP/QdLZfTaToaAMCgYw6YJk+eLEmaOnVq5XWWZbEHE4CIV1mRC1CRA4BIZjlccjfrJXezXpKk0J4NKv/sBcnzmjytT5O77SA5ElINp4wuTXJydPtFGXrgsyVas2ub/vbWYl12ZkulJyWYjgYAMOSYA6aZM2fWRA4AqHGVFTk/FTkAiCbOrDwljLxTvsUfybfoQ/m+myJ38z7ytB8mR2qO6XhRI87j0j2DfqvPF2/Rf+fM0x2zJumiZhepR5OmpqMBAAw45oDpxRdf/Mnrf/Ob31R5GACoSZUVuVFU5AAg2jizGyt+0HUKFeyQb8kU+VfNkiMtV57UQQqHQrIcbAZeFSzL0oCO9ZVQq1wTlmzQvyZ+r519/bpseFfT0QAANeyYA6bVq1dXfuzz+bRgwQJ17969WkMBQE3gFDkAiH6OWrUV1+9SebqOlOU+sB9Txdw3FNq7SZ6OZ8iZ20aWZRlOGflOadRMbWvfoOcCizR132ta9N9vdFP/CxTvPebLDQBAlDjmT/wHH3zwiMv5+fm66aabqi0QgKrj6Xim5Cs1HcO2qMgBQOxwJNQ6/HFKtgLr5qrso8fkyGggT4fhcjXuJsvBJtUnIyHOrRtGdtHTX23V4kUO3b3pK40dXF+dGjQ2HQ0AUANOeG1wenq6tm7dWh1ZAFQxZ1pdOXPYB+FoKityCVTkACCWeNqcrsTzH1Vc/8uloF/lM59VyZu3KhyoMB0t4jkcDl3Xd6T+cskQlaYv0vMr/6XPl2w0HQsAUANOaA+mcDispUuXKiMjo1pDAaga/u/nK1ycL0+7waaj2FJRoEiu3DUqoCIHADHHcrrlbtFXrua9Fdi4SKE9G2W5vAqHQ/Iv/UTuZr1lxSWZjhmx2jXJ1M2BC/XCzK/1n4VrNXfHfF034AwleOJMRwMAVJNjrmBavXp15Z81a9aoTp06euyxx2oiG4CTFPh+gXzLppuOYVsllRW5faajAAAMsSyH3I06y9v1HElSaOc6Vcz5r4pf+z+Vz35VoaI9hhNGrnrpmbrj3OHq0d2lja65+svEj7S7oMx0LABANTnhPZgAIFrkVJ4i18x0FACATThrN1PC6PvlW/KR/Mtmyr9shlxNusvT6Uw503JNx4s4TodDV5zaX58sS9d7i/N19+Q3NLhDS53dvofpaACAKnbUAdOtt9561C+yLEsPPPBAtQQCgJpy6BS5An+upEzTcQAANuFMz1X8gN8p1PVc+b6bJv/Kz+XKbS1nWq7CAZ/kdHPy3Aka1Kad2tYt1kNfz9ZHK/fJn5+lkX0byeVkY3UAiBZHHTA1a/bjd/T37dun//znP8rN5d0bAJHvUEWuwN/edBQAgA05kjIU1/N8eTufJbm8kqSKryYomL9Fno7D5WrYWZbjhM/MiVl10pL04Ok36r8z1mjKsoWaU/ae/q/Hb5Sblm46GgCgChx1wHTZZZcdcXn27Nm6+eabNWLECI0bN67agwFAdaMiBwA4HpY3sfJjZ05TBbavVPkn42Wl1pan/VC5m/WS5fIYTBg5EjxxunxYO8V/s1ezdq7So/9dot+d0UZtGnLYBgBEumPuwRQIBPT4449r4sSJuvvuuzV06NCayAWgCrjyusiZ3dh0DNsq9hdRkQMAnBB3y35yNe+jwIb58i36SBVfviTft5OVOOYhWU636XgR44JuA9RnZ2f9Y8cC/WP5U+q4uZd+13sI1UMAiGA/O2DauHGjbrzxRiUkJGjixImqU6dOTeUCUAXceV1NR7C14kDJgYpcgIocAOD4WQ6H3I1PkSuvm4LbViiUv0WW061wMCDft5PlbjVAjsQ00zFtr0FOim45v5se/XKl5i6oUMmub3Tx4JbKSEoxHQ0A8AsctTT+9ttv67zzztOgQYM0YcIEhktABAru26rgrnWmY9hWZUUunoocAODEWZYlV25redoNliQFd66V79v3VfLfP6n8838puG+b4YT2l5aYpPuHXKUxvTprtT7X3V/+XRt27DcdCwDwCxx1BdO4cePkcDj03HPP6fnnn6+8PhwOy7IsLVy4sEYCAvjlfN9OVnDX90oa+7DpKLZUWZELUJEDAJw8V92WShzziHzfTZF/5Zfyr/pSroad5OkyUs7Mhqbj2ZZlWRrcrb68tYbp3TlL9cArC3XaAI/GduttOhoA4AQcdcA0Y8aMmswBADWuJFjCKXIAgCrlSMlSXO+L5Ol8tvzLZsi3bLpcRXvkzGyocEWJ5ImXZXHy3E/p36ytOtVtrsenTdaXRXO14+NyXTNwgDxup+loAIDjcNQBU25ubk3mAIAaV1mRG01FDgBQtRzxKfJ2PUeeDsOlg5t/l3/xokIF2+XpMEyuJj1kOY953k7MSUn06I6zRur5L1P0zWLpjqJ3dGm/nmpVu77paACAY+DtEwAx6/ApcntNRwEARCnL7ZXlOPArtyuvq2RZKv/sBZW8fpN8S6Yo7CsznNB+XE6nrh4wSFePaqXiWks0/sv3tGDVbtOxAADHwIAJQMw6XJHLNx0FABAD3E17KGHUXxQ/7P/kSMlWxdevq+St2xUOBU1Hs6Vuzerqxo7XKrusq56Z/rkenDlBFX6/6VgAgKNgwAREMUetunJm55mOYVuVFbkEKnIAgJphWZZc9dsrYcQtShh5p7zdRslyOBX2V6h89qsK7d9pOqKtNM2uo9su6K7GLXzaVLZOj725QPmF5aZjAQB+AsVvIIp5O59lOoKtHa7IcYocAKDmObMby5ndWJIU3LVO/uWfyr9sulx5XeXpcIacWY3MBrQJt8uh2wZeoC++26jX1q7UHV8+pnObnKXTW3JIBwDYCQMmADGrJFAsd+467ecUOQCAYa7c1kq84DH5l34i3/KZCqz/Rs66reQ95bzKIVSs69euodLSLT2/eIH+O+17Fe2N05k9m8jl4JQ5ALADKnJAFCub8ayKX7/ZdAzbyomvQ0UOAGAbjoRa8p5ynpIu+Ku83ccoVLBdYf+BOliotIC9miS1y22gh0//s7o0zNOUXRN1+9RnVFTqMx0LACAGTED0s0wHsC9OkQMA2JHliZenwzAlnv+YnHVbSZLKP31eJW/cLN/S6QoHKgwnNCve69aVI9qqc05bFWxL1b3/+UbzN6w3HQsAYh4DJgAx61BFjlPkAAB2ZDldsqwD7xS525wuK6GWKmZPUMlrf1LFgkkKlxcbTmiOw+HQFb3O0E3DzpKv1lr9e+0/9f787xQOh01HA4CYxYAJQMyiIgcAiBTuRp2VePY4xZ91mxzZjeVbMFEl796lcChkOppRTeqm6rYzRiqztJPem75Lj388VYVlZaZjAUBMYsAEIGYV+ajIAQAii6t2cyUMvVEJo++Xt9eFshwOhX2l8i3+SOFQwHQ8I3JSUnX3iDEa0idL6z2f6p6PX9X2vSWmYwFAzGHABCBmlQQPnSK3z3QUAABOiDM9V+5GnSVJ/vXfqGLumyqddL+CBdsMJzPDYVka06e9RtYdK9/WJrr37al6c+EXpmMBQExhwAREsfjTr1LSmIdNx7CtnLiDFbnEpqajAADwi3la9lfcwGsVLtyt0nfukm/pJwqHY7M6N7h1J91zSU8l1NusT7d/qgmfrFAgGJvfCwCoaQyYAMQsTpEDAEQLd+NuSjjvPjlzW6ti9qsq++hxhYOxWZlLT4nT/YOv1ineEZq5eINunvKU1u/eaToWAEQ9BkxAFKtYOEllM/9pOoZtHarIFVCRAwBEAUdCLcUP+YO8fS+VI72eLKdL4XA4Jk9Wi3N79JuBnTVyUJbK3Lv08Ovf6OUZi7WniL2ZAKC6uEwHAFB9Qvu2Kbhno+kYtlVZkTuPihwAIDpYliVPqwGVlwNrZiuw8Vt5+14iR1yyuWCGnNWhqzrtbaJp/u2aXfiBvv78ffVPGKth3RsqJdFjOh4ARBUGTABi1uGKXK6kTNNxAACocmFfqQIbv1VwxxrF9f+NXA06mo5U4+pnpOnyM9LUdpP0+dL1mvbNRn229yN1yzxF53XvouQEBk0AUBUYMAGIWcWBooOnyHUwHQUAgGrhaTtIzjotVP7pcyqb8je5Ww6Qt+dYWe4409FqXPcGrdW9QWst7bBRz6/4UnNWf69vFpeqT8dMnd29tZLi3aYjAkBEYw8mADErJ/5ARa5hAhU5AED0cmY0UMI5d8ndfpj8Kz9X2YxnTUcyqm1uQz1y6u2669yzlNNim77yv66bnv9UE79Yr5Jyv+l4ABCxWMEEIGYdrsjVFxU5AEA0s5xuxfUYI1fDjpWrl0KlBbK8SbKcsfeSwOv0qF6WR9cPOEOzNtbT1uJMfbx5iqavS9PgZj00qGt9JcTF3vcFAE4GPzWBKObpfJbkLzcdw7YOV+Q6mo4CAECNcNVpIUkKh0Mq+2S8FKhQ3KlXyJle33AyMzLi03V2y1Plb+bXw/NmyLfPr0mz1mvad0s1pH1bDepaX/FeXjIBwPGgIgdEMWdarpzZTUzHsK3a8XWpyAEAYpJlOeTteIbCpftV+u498i3+WOFQyHQsY9xOt27rcYPuGHqBzj83RWrxpd5f/I1uema2Ppi9QWUVAdMRAcD2GMcDUcy//huFSwvkaTvIdBRbOrIil2E6DgAANcrVsJMSRjdRxZf/UcXcNxTYtEhx/X8rR0qW6WhGOCyHHJZD/Zp0kCu+Qg1attUr86fp/fXLNfWbVhrWvZFO65yrOA8voQDgp7CCCYhigfXfyL9shukYtnW4IpdvOgoAAEY44lMUN+g6xQ34rYJ7NiqwaZHpSMZ5nR6dWr+PmtStpVYtPGrWzFJenVS9880C3fTsbE2Zu0kV/qDpmABgO4zfAcSsyorceVTkAACxy7IsuZv3kTO3jayEVEmSf81sOXPbyHHwcqwa02KkgqGg9rUv0D1zXldKcRu9+WlAU+Zt0vDuDTSgU648bqfpmABgCwyYAMSsIl8hFTkAAA5yJKZJkkJlhSr/8iVZLq+8/S6Vu1EXw8nMcjqcyohL1yWtx6h5elPNb7FeH6/7XK9/UayP523S8B4NNaBjXbldDJoAxDYqcgBiVkmgWO7cdSoM7DMdBQAA23DEpyhh5F2yEtNVPu0plX32vMK+UtOxjLIsS11rd1KKJ1nxyT6lZPj1f6M6Ky2rXP+duUK3/PNrzVy4Rf5A7G6UDgCsYAIQsyorcr/ipD0AAP6XMz1XCSPvkG/hJPkWfaCSbSsVP/h6OTMbmY5mXM+63dS9TheFw2H5ts1VywaZCq7rqgnTVuujrzfqzJ6N1Kd9HbmcvJcPILYwYAKimKtxN4VrNzcdw7aK/FTkAAA4GsvpkrfbKLkadFDF12/ISkgzHck2HJZDsqQr2l0iy7KU1ClJTy14ScHNrfXy1FX6cM5GjejdSL3a1mbQBCBm8NMOiGLuxt3kaTvQdAzbOlSR2++nIgcAwNE4c5oq4ezb5UhIVbiiRKUfPabgno2mY9lCg5R6qp+cq4KK/ZLTp2vP6qTfnFNfCakVeunjlbrtua/15ZJtCoaozgGIfgyYgCgWzN+q4K71pmPYVmVFLoGKHAAAxyNUtFuh/C0qnXivKha+r3AoaDqSLeSlNtC47n9UdkKmllV8JV/DWbpuVBslxLv04kcrdftzc/XVd9sZNAGIagyYgCjmWzhJ5Z89bzqGbR2uyOWbjgIAQERwZjZS4uj75MrrIt/8d1X6/gMK7d9hOpYtOKwDL63ObzFKl7Y+Xx2aZCql3QINH+ZSnMepf324QuOen6s5S3coFAobTgsAVY8BE4CYVRwooiIHAMAJsuKSFD/wGsWddpVCBdtV8s5dCpUWmI5lG6neZLVIb6qSQKkclqXmdTN000VtNXJYktwup57/YLnu+Ndcfb2cQROA6MIm3wBiVu34XE6RAwDgF3I37SFnnRYKbFwkR0IthcNhhSuK5YhLNh3NFlI8yfp9pyslSVM3ztS0vdM0buyftHlTSO9/tUHPvb9cH8zeqLN6N1LXltlyWJbhxABwcljBBCBmFR+syO2nIgcAwC/iSEyTp/WpkqTA6lkqeeMW+dfNNZzKPizLkmVZOr1Bf13d4TLVTszS0tAMdR6wR1ed3UbhcFjPTlqmu/49T/NX7lIozIomAJGLFUwAYtbhilwn01EAAIh4ztrN5EjNUfmMZ7Rzx3eyuoyVFZdkOpYtuB0utclooVA4pHhXvOKcXnVrkq1wra0K7q2vybM36+n3lqp+dpLO7pOnTs0yZbGiCUCEYQUTEMUcaXXlyMozHcO2KitynCIHAMBJc6TWVsJZt8vT9VyVrJijkrfHKbBlqelYtuKwHBrb4hwNyxuoVfvW6uUVr8uTuUv3Xt5Vl5/RUhX+oMa/+53ufWm+Fq3ZozArmgBEEFYwAVHM22Wk6Qi2Vlx5ilx9SRmm4wAAEPEsh1Pezmcpq30PbX/3b6qY+4acdVvLcvC+9g+1SGuq6zv+Ts3TmmjGpi+0MrBGd112kRas2KfJs7/X399Zoka1kzWyb57aNc5gRRMA22PABCBmUZEDAKB6eOs0UcK5dytcVijL4VCoYLvCvlI5s1k1fIhlWWqZ3kySlOCKV6o3RfHuOMXn7NStl7TVktXF+mD2Bv3trSVqXDdFI/vkqU1eOoMmALbFgAmIYmXT/6FQ/lYl/uoB01FsqXYcp8gBAFBdLJdHVnKmJKli3tsKbPxWnk5nytP5LFkOXob8r9653dU7t7uKfMV6ZcWb6pPbQ6M7nKXurbM0Z9kufTB7g/765mI1zU3V2X3z1LphGoMmALbDWlUAMauosiLHKXIAAFSnuAGXy9W0p3wL31fpe39RcN9W05FsKdmTpFu6/UFDG56uFfmr9cD8v6pVM7cevKKnLhrcXHsLy/X464v08KsLtWLjPtNxAeAIDJgAxKzKilyAX9AAAKhOlidB8af+TnGDrlO4OF+l794l3/KZpmPZUu3EbCV5EuV2uFU7IUvp8elavX+1mjZz6KEre+jCQc21q6BMj/73Wz3y2kKt2sTvMQDsgbWpAGJWnUOnyI2hIgcAQE1w53WVM6epyr94UeKEtJ/VtFaemtbKUzgc1ntrP1KcK05/7HKN+nWqrb7t6+jzRdv00dcb9fBr36pVwzSN7JunZvVqmY4NIIYxYAIQs4o4RQ4AgBrnSKil+CF/qLxcseA9OZKz5GrWi32FfoJlWbqx81Uq8ZdpX3mBHp7/d13QYpQGdWujfh3r6rNvt+rjrzfqwQkL1SYvXSP75KlJbqrp2ABikG0HTCtXrtTzzz+v+Ph4DRs2TL179zYdCUCU4RQ5AADMODRICoeCCm5bId/29+TasFDefpfKEZdsOJ39JLgTlOBO0N6yfWqSmqfcpDraUrRNu8r2aHC3dhrQMVczv92ij7/epPtfWaB2jTM0sm+e8uqkmI4OIIbYdsBUWlqqm2++WS6XS48++igDJuAXiB94rekItkZFDgAAsyyHU/Fn3CzfkinyzX9XwbduV1y/y+Rq2NF0NFvKiE/T79pdJEl6dcXbWrJnmVqlN5fT6dCw7g11aqdczViwRVPmbtJf/jNfHZpk6Oy+eWpUm0ETgOpnmwHTG2+8oQ8++KDy8l//+lcVFxfr1ltv1cUXX2wwGYBoVejfT0UOAADDLIdD3o7D5arfTuWfPqeyqX+Tt88l8rQ+1XQ0Wzu/5bk6vbSf3A6X7p/3V3XN7qgzGg/WGT0b6bTO9TR9wRZNm7dJ9740X52aZersPnlqkMPqMADVxzYDpjFjxmjMmDGVl7/77js1btxYr7/+ui677DINHz7cYDogMlXMn6hQ8R7FD/id6Si2dKgiV+jvbDoKAAAxz5lRXwnn3Cnfog/lyusiSQr7y2W54wwnsyeH5VDtxGz5gj51yGyrvNSGKvWXatbWuRpQv7dG9Gqk0zvX0/T5mzX1m8369sVv1KV5ls7uk6d62Umm4wOIQrYZMP1QeXm5br/9dqWnp6t///6m4wARKbRvq0IF203HsC0qcgAA2IvldMvbZaQkKVxerJJ37pS7aQ95up4jy+k2G86mPE6PRjY98Gb8nG3f6P31U9Qms6Uy4tIU7/XqrD55Gti1nqZ9s1mfzN+sBat3q2vLbJ3du5Fysxg0Aag61T5gKi4u1tixY/Xss8+qXr16kqTJkyfrmWeekd/v16WXXqoLL7zwR1/XrVs3devWrbrjAYhhh06R2+9vKCnddBwAAPC/nC656reTb/FHCmz+TnGnXiFnRn3TqWytZ91ualIrT9kJmXr+u5dVHqjQdR1/q4Q4t0b2bayBXetr2jeb9Mn8LVqwcpe6tcrWWb3zVDcz0XR0AFGgWgdMixcv1rhx47Rhw4bK63bu3KknnnhC7777rjwej8aOHavu3buradOmVf74GRm/bCKflUU3GSfHLs+hnV6XfC6HbfLYzg6/3Lnr5Pf0tN33yG55EHl4DuFk8RzCyTr551CyNOoGla7prd0fPq3Sifcovf9YpfY4S5bDWSUZo1GWkhUOh9WzUSdVBH3KzErSW0s/1OlNeisvK11XNkjX2CGt9N7n6/TBrPX6ZuUuDehcT9ed11Eet72+r/wcwsniOVSzqnXA9Oabb+quu+7STTfdVHnd7Nmz1aNHD9WqVUuSNGTIEE2ZMkXXXXddlT/+3r3FCoXCJ/Q1WVnJ2r27qMqzIHbY6TlUURFQKBCyTR67SQ5kqGzeUGXm1bPV98hOzyFEJp5DOFk8h3CyqvQ5VKu54kb9RRVf/kf5n05QeUojOXOq/s3paNM2uZ0kafH3azRp5TQlhpPVObu9QgrL6/Ro+Cn11adtjt6cuVafLtiifu3qqGFt+7wY5+cQThbPoerhcFhHXczjqM4Hvv/++9W1a9cjrtu1a5eysrIqL2dnZ2vnzp3VGQMAftLhitw+01EAAMDPcMQlK27gtUo45y45c5oqHA4rsGmxwuETezM5FtVLrqu7e9ykbrU7acbmL3TPnEdU7C+RJKUkeNSlRdYx7gEAjk+Nb/L9U/8TsCyrpmMAMcHT5RwpUGE6hm0VBQrlzl2n/f4upqMAAIBjsCxLzqw8SVJw4yKVTXtSzgYdFNfvN3Ik1DIbzubS4mpJkpqnNZU/6FeSO1HTN32uRikNJLHRN4CqUa0rmH5KTk6O9uzZU3l5165dys7OrukYQExwpufKmd3YdAzbqhNXT2XzhqpBAt8jAAAiibNhB3l7XqDg1uUqfWuc/N/PNx0pIjRObagRTYaqIujTZ5u/0qLd3x34hJs3JAGcvBofMPXq1Utz5sxRfn6+ysrKNG3aNPXr16+mYwAxwb9urnzLZpiOYVuVFbkAFTkAACKJZTnkaTdYCefeIys5U+WfjFfZp88p7C83HS0ieJ0e3dHjTzojb7A2l61XXPvPtadit+lYACJcjVfkcnJydOONN+riiy+W3+/X6NGj1b59+5qOAcSEwLp5Cu3fKU+b001HsaViKnIAAEQ0Z1pdJYwcJ9/CyQpsXiI5avzlTcTyOj2SpFR3mgK7Giq+VYLhRAAiXY38BJ45c+YRl0eMGKERI0bUxEMDwFHViT9YkRtLRQ4AgEhlOVzydj1Hns5nyXI4FczfKv+qL+TtNkqWy2M6nu2luNIU2Nxcu8p3KLPUqewENv0G8MvUeEUOAOyCU+QAAIgelsMpSQpuWSr/d1NV+u7dCu7eYDZUpHAG9N7mt/Tp5q9MJwEQwRgwAYhZhytyDJgAAIgWnvZDFD/8Twr7y1T63l9UsWCSwqGg6Vi2ZcmSgm79quGvdW6zM03HARDBGDABiFmVFTlOkQMAIKq46rVV4uj75GrSTb4FE1U25QmFw2HTsWytbkKu5u1YoPfWfmQ6CoAIxS54QBRzNTlF4fJi0zFs63BFrqGkdNNxAABAFbK8iYo/7Sr5c9tILq8syzIdyfZ2lOzS5qKtCoaCch6sHALA8WLABEQxd5PupiPYWtHBilyhv6vpKAAAoJq4W/St/Ni/+iu5GneV5fIaTGRfI5sMl8NyqCJYwYAJwAmjIgdEsWD+FgV3rTcdw7bqVlbk8kxHAQAA1Sy4d5PKP3tBZVP/rnDAZzqOLTkdTi3avVS3fXWf9pTlm44DIMIwYAKimG/+RJV/8W/TMWyLU+QAAIgdzowGihtwuYJbl6ts6pMMmY4iL7WBumR3lNPipSKAE8NPDQAxq6jyFLkC01EAAEANcDfvo7j+lx0YMk1jJdP/OrQHei1vqi5sNVoFFYXaV15gNBOAyMKACUDMoiIHAEDscbfoe2DItGWZKmZPMB3HvJ/Y+7zIV6y/LXxGMzZ9UfN5AEQsNvkGELMK/fs5RQ4AgBjkbtFXcrrlzGlqOootJXuSdGX7S9U4taHpKAAiCCuYAMSsIv+hU+QKTEcBAAA1zN20hxzJmQr7SlUx902Fg37TkWyldUYLLd27UtM2fmo6CoAIwYAJiGKOtLpyZFL/OhoqcgAAILB1uXyLP1LZJ+MZMv3Aqvy1WrRrqULhkOkoACIAFTkginm7jTIdwdaKqMgBABDz3HldFe5ziSpm/Udln4xX/KDrZDndpmPZwqhmI+RxuhUOh39yryYA+F+sYAIQs4oCRZwiBwAA5Gl9qrx9LlZw02KVT39a4WDAdCRbiHN59d2e5Ro3+wHtrygyHQeAzTFgAqJY2bS/q+TtcaZj2BYVOQAAcIin9Wny9r5IgY3fyr98puk4tlEnsbaapDZSIER9EMDPoyIHRD3WMx8NFTkAAPC/PG1OlyMlW87c1qaj1Jhj/aaYnZCp37a7SDtKdqrIV6xkT1KN5AIQeVjBBCBmUZEDAAA/5KrfTpbDqeDOtSr79HmFQ9TlCn1Fun/eE5qx6QvTUQDYGAMmADGLihwAADia4N5NCqz5SuUzno35IVOKJ1mXth6r0xv0Mx0FgI0xYAIQsw5X5ApMRwEAADbjaX2avD3PV+D7+QyZJHXJ6aiNhZs1a+vXpqMAsCkGTABiVlGgUO7cdSoMFJiOAgAAbMjTboi8PQ4OmWb+U+FQ0HQko+btWKgvts5RKBwyHQWADbHJNxDF4gffYDqCrdWNr6+yeUNV/3wqcgAA4Kd52g+RFFLF3LcU3LVOrtrNTUcy5lctRireGSeLQ2QA/ARWMAGIWYcrcvtMRwEAADbmaT9MiefdXzlcCkfhCp5w+Ni3SXInakX+at0791GV+kurPxSAiMKACYhiFd+8o/LP/2U6hm1VVuTYgwkAAByDo1YdSVLF/Ikq//S5qKnLWSe4GCktrpbSvLVU4i+rnkAAIhYDJiCKhfK3KLhng+kYtlVZkeMUOQAAcLxcbgXWfq3yz15QOBR9K5mOJTepjm7odIWcDofKAuWm4wCwEQZMAGLWfh8VOQAAcGK8Hc+Up9toBdbOUfnnsTlkKqjYr3vmPKLPNs8yHQWAjbDJN4CYdbgid4rpKAAAIIJ4O50phUPyzX9X5bIU1/9yWY7Yee++ljdVo5qNUJuMVqajALCR2PkpCAA/kHuwItcgoZHpKAAAIMJ4O58lT9dzFdyxSuHyItNxaly/er20r6JAC3YuMh0FgE2wgglAzCqsPEWukaQ003EAAECE8XY+S562A2V5EhT2V0gutywrdt7Dn7pxpvLLC9Q5u4OsE90tHEDUYcAERDFPt1FS0G86hm1RkQMAACfL8iQoHPSr9MNH5EyrK2+/30TkkCms8Al/zYUtRyvBFc9wCYAkKnJAVHOm15MzixPSjia38hS5RqajAACASOZwyVWvjfyrvlTFly8pHI6kjb9/+XColjdV6wo26LH541UR9FVhJgCRiBVMQBTzr/1aYV+pPK1PMx3FlqjIAQCAqmBZljxdzpHCYfm+nSzJkrfvJRG5kulEeV0eBcNB7a/Yr+yELNNxABjEgAmIYoF1cxUq3suA6SioyAEAgKpiWZY8Xc89MGRa9IEODJkujvohU+PURrqp6w0qCZTKF/TL43SbjgTAkOj+aQcAP6MuFTkAAFCFLMuSp9soeTqeoXCgXL9gW6OItK+iQHfMflBfbZtrOgoAg1jBBCBmHarIFQbyREUOAABUhQNDptGSwrIsh0KFu2QlZ0X1RtjpcWka3GCAWqY3Mx0FgEGsYAIQs4oC+w9W5ApMRwEAAFHEsqwDw6Wi3Sp5505VfDVB4XB0L2caljdQoXBIy/auMh0FgCEMmADErNz4BlTkAABAtbGSMuVuNUD+5TNUMftVew+ZqiDam6vf07trP7D3vyeAakNFDohiribdFfaVmo5hW4dPkaMiBwAAqp5lWfJ2HyOFw/J/N1WyLHl7XmCrulxVRrmw5WgluRNt9e8HoOYwYAKimLtpD9MRbI2KHAAAqG6WZcnbY+yBIdPSaZLDqbgeY03HqhbZCVlavW+dZmz6Qr9rd5FcDl5uArGEihwQxYL5mxXc/b3pGLZFRQ4AANQEy7Lk7Xm+3O2HypmVZzpOtQqEAtpVtlv55ftMRwFQwxgwAVGsYt47Kv/iJdMxbKvQt+9gRa7AdBQAABDlLMtSXI+xcjfpLkkKbFkalXsVtUpvrju6/0kpnhQFQ0HTcQDUIAZMAGJWUaDwYEVuv+koAAAghgQ2LVHZR4+pYu4bUTdksixL+eUFumvOQ5q7Y6HpOABqEAMmADHrcEWuoekoAAAghjjrt5O79WnyL5ki37y3om7IlBGXpm45nZSbVNt0FAA1iAETgJhV6C+gIgcAAGqcZVny9r5I7tanybf4I/m+edv4kKkqH92yLI1ufpYS3QlaV7ChCu8ZgJ0xYAIQs6jIAQAAUw4MmX4td6sB8i36UP4lU8zkqMb7/vfS1/T6qneND88A1AzOjQSimDO9nsIJKaZj2FZlRe4CKnIAAKDmWZZD3j4Xy4pLlqtxN9Nxqtz5LUcp2ZMoy6rOMRYAu2AFExDFvKeMVly/y0zHsC0qcgAAwDTLcsjbbZQcyZkK+8rkW/m56UhVpn5yXe0rL9DLy99QKBwyHQdANWPABCBmFQb2y527TkVU5AAAgA34ls9UxRcvqmL+RNNRqsy+iv1amb9Ge8r2mo4CoJpRkQOiWOmUJxQuLVDiufeYjmJLufEND1TkLmxkOgoAAIA8HYYpVLBDvoWTJMuSt8tI05FOWsestmqX0UqWZSkUDslhscYBiFb81w0gZh2qyBVSkQMAADZgWQ7F9f+NXM37yLfgPVUsnGQ60klzWA4VVBTq7jmPaNHupabjAKhGrGACELOKDlbkOEUOAADYhWU5FNfvMpWHw/LNnyhHej25G3Wp/geuxoPeMuLT1LRWnlI8ydX3IACMYwUTgJh1qCJXL4FT5AAAgH1YDofi+l8ub99L5WrQsZofrHrvXjqwiunSNucrOyFTW4q2Vf8DAjCCAROAmEVFDgAA2JXlcMjTaoAsh1PBnWvlWzLFdKSTEg6HNX7RC5qw8i2Fw9W4XAqAMVTkAMQsKnIAACAS+FfPkn/FZwqHQvJ2HG46zi9iWZZ+1Xykkj1JsqwaWDYFoMaxggmIYglDb+QEuZ9Rl4ocAACIAN7eF8nVpId8896Ub/FHpuP8Yk1r5ckf9OvdNR+wigmIQgyYAMQsKnIAACASWA6n4k79nVxNuqti7pvyLf7YdKRfbFPRVs3e/o32lOWbjgKgilGRA6JYxdw3Fa4oVVy/S01HsSUqcgAAIFIcGDJdofJwWBXz3pKrYUc5atUxHeuEda/dWZ2y28nr9CgcDlOXA6IIK5iAKBbM36Lg3o2mY9gWp8gBAIBIYjmcijvtSsWfeXOVD5fCqpnKmtPhVLGvRPfPe0Ir8lfXyGMCqBkMmADELCpyAAAg0lgOp1x1WkiSKhZMku+7aSd3f6r5FURpcalK99aSw+LlKBBNqMgBiFlU5AAAQKQKh0IK7d2kwIYFkmXJ03aQ6UjHzeVw6dqOl6ssUK7dpXuVlZBhOhKAKsDIGEDMoiIHAAAileVwKG7g1XI16qKK2a/Kt3S66UgnJBwO668LntYrK940HQVAFWEFE4CYVeg7VJFrLKmW6TgAAAAnxHK4FHf61Sqf/g9VzJ4gWZKnzUDTsY6LZVk6u8kwpXiSTUcBUEVYwQREMe8p5ymuzyWmY9hWYaBA7tx1KgoUmo4CAADwi1hOl+IGXitXw07yLZmisL/CdKTj1jazleJcXk3dMNN0FABVgBVMQBRzZtQ3HcHW6sU3OlCRa97AdBQAAIBf7NCQKVxeJMvtVTgUlOVwmo51XJbtXaWPN8xQ15yOyohPNx0HwElgwAREMf+a2QoHfPK0GmA6ii0dPkWuiajIAQCASGY5XbIS0xT2lan048flbt7nhH4HDIerL9vP6V23u7rkdFCyO8lMAABVhoocEMX8a7+Wf+XnpmPY1qGKHKfIAQCAqOF0yfIkqOLLl+Rb8dmxb29Ve6Kf5XG65Qv69PiCp7V+/wazYQCcFAZMAGJWZUUugYocAACIDpbTrfhB18lZv/2BIVMEvNmY7ElWKBxSqb/MdBQAJ4EBE4CYdbgixwomAAAQPSyX5+CQqZ0qvnhJ/pVfmI70s7xOj27qdr1apDVVQQW/lwGRigETgJhFRQ4AAESrA0Om6+Ws10aBbSsUNrXJ0nEKh8N6dMF4vbbyHdNRAPxCbPINIGblxjfkFDkAABC1LJdH8YNvkBxOWZalcHmxrDh7bqZtWZYGNxigZE+y6SgAfiFWMAFRzN20h9wt+5uOYVuHKnJF/kLTUQAAAKqF5fLIcjgV3LtZxa/fJP/qr0xHOqqutTspJzFLs7Z+bToKgF+AFUxAFHM362U6gq1RkQMAALHCkZotZ1YjlX/2gmRZtv09cc62b/TRhunq27yLJLfpOABOACuYgCgW3LtZwd0bTMewLU6RAwAAscJyeRU/5Pdy1m2p8s+el3/N7APXG871QwPq99ZdPW5SZkK66SgAThADJiCKVcx7U+WzXjYdw7Y4RQ4AAMSSA0OmP8hZu8WBIdPaOaYj/Ui8K16WpAe/GK+txdtNxwFwAhgwAYhZVOQAAECssdxexQ+9Uc66rWS/9UsHxLvitK1ol/aU5ZuOAuAEsAcTgJhVWZHjFDkAABBDLLdX8cP/LMuypA35ynEUmI50hAR3gp4cfrd27SpUqb9UCe4E05EAHAdWMAGIWYU+KnIAACA2WdaB1UuJW+bo5tTJcpQVmA30Ex5bMF6vr5poOgaA48QKJgAx61BFrihQaDoKAACAESF3opxWWA5fkekoR3BYDvWsc4pSvMmmowA4TqxgAqKYI62enJkNTcewrUMVudyE+qajAAAAGBG2Dr4kDIfNBvkJ/er1VLNajbVw1xLTUQAcB1YwAVEsrscY0xFs7fApck0lpZqOAwAAUOPsuc33YdM3fa7pmz5Xk9RGSvWmmI4D4GcwYAIQsyorcn4qcgAAAHZ0Wv2+6prTkeESEAGoyAFRrPSjx1Qy8V7TMWyLihwAAIh1YYdbBaF4hR1O01F+UrInSQmueL247DXtKt1jOg6An8GACYh2dl/3bNB+/z5OkQMAADGtIrOF7io4T4HkuqajHJXDcmpl/hptLd5uOgqAn0FFDkDM2k9FDgAAwPZSvcm6r/ftcllO+YI+eZwe05EA/ARWMAGIWfXj81Q2b6jqUZEDAAAxyrt3jcalTpSryN6rg5yWQ39d+IzeXvO+6SgAjoIBE4CYRUUOAADEOivoU5azSFYoYDrKz3JYDrXNaKkmqXmmowA4CipyAGIWp8gBAICYF0H7dQ5pdJp8QZ9W5q9Ry/RmpuMA+AFWMAFRLGH4n5Q48k7TMWzrUEWOU+QAAAAiw+T1U/X04n+ryFdsOgqAH2AFE4CYdbgi11RSquk4AAAAOIbT6vdVh6y2SvYkmY4C4AdYwQREsfKvX1f5rJdNx7AtKnIAAACRJS2ulrLiM/TGqokqqGAfTcBOGDABUSyUv0XBPRtNx7CtenFU5AAAQGyrSG+m+wpGyp9U23SU4+YP+fX19vlaV7DBdBQA/4OKHICYdagiVxRoJipyAAAgFoVdXu0OpUhOt+koxy0zPkMP9BmneFe8gqGgnA6n6UgAxAomADGMihwAAIh17qJtGpMwW46SvaajnBCv06vxi17Qe+s+Mh0FwEEMmADErEOnyNVNqGc6CgAAgBHO8n3qFbdWDn+J6SgnxGE5VDextrLiM0xHAXAQFTkAMauyIuenIgcAABBpzm12poKhoDYWblbDFPbUBExjBRMQxbzdf6W4PheZjmFbVOQAAAAi27trP9Dfvv2niiNsBRYQjVjBBEQxZ0YD0xFsrbIi15KKHAAAQCTqV6+XWqY3U6IrwXQUIOaxggmIYv7VX8m38nPTMWxrvz//YEWOFUwAAACRKCchS3kpDTV5/VSV+EtNxwFiGgMmIIr518yWf9WXpmPYVmVFLsCACQAAxKZAUl29XtJDwfh001F+sUJfkT7Z9JlW5q82HQWIaQyYAMSsQxW53Hg2hQQAALEpGJ+mORXNFfQkmY7yi9VNqq2/9LpVXXI6KhwOm44DxCwGTABi1qFT5Ar9+01HAQAAMMJZUaAunvVy+IpNRzkpye4kPf/dK/p4w3TTUYCYxYAJQMw6VJErDhSZjgIAAGCEu2ibLk6aJWfpXtNRTorT4VSc0yuP02M6ChCzOEUOQMziFDkAAIDocVHrXykUDmln6W7lJGSZjgPEHFYwAVHM3ayX3C36mo5hW1TkAAAAoss7aybrsfnjVRYoNx0FiDmsYAKimLt5b9MRbI2KHAAAQHTpUaebGqbUl8fhNh0FiDmsYAKiWHDvJgX3bDAdw7bqxR2syMVTkQMAAIgG9ZPrqn1ma326ZZbKAxWm4wAxhQETEMUqvn5D5V9NMB3Dtg5V5IoDhaajAAAAGBH0pmp+RZ5C7njTUarM9pJdmrj2Qy3du8J0FCCmMGACELMKA/vkzl2nIgZMAAAgRgVScvVKSV8Fo2hT7LzUBrqj+x/VNaej6ShATGHABCBm1Y9vTEUOAADEtqBfqVapFAqYTlKlMuMzNGHFW/p08yzTUYCYwYAJQMw6VJEr8rOCCQAAxCZv/lrdm/a2PIVbTUepUi6HS0W+IpUGykxHAWIGp8gBiFlU5AAAAKLXVe1/I0naX1GoVG+K4TRA9GMFExDFHOn15MxoaDqGbVGRAwAAiF6WZemdtZP18DdPyh/0m44DRD1WMAFRLK7n+aYj2FqBP/9gRa65JN7VAgAAiDadstorKz5TsizTUYCoxwomADGrMFAgd+46FQeKTEcBAAAwKmw6QDVpUquRetU9RfN3fCt/lG1kDtgNAyYgipV+8LBKJ91vOoZtHarI1YnPNR0FAADADKdbBaF4hR1O00mqzbqC7zVh5VtasnuZ6ShAVGPABEQ7lgMf1f7KihybfAMAgNjky2imuwrOkz8levekbJHWVH/sco06Z7c3HQWIagyYAMQsKnIAAADRz7Is1U+up3fXfqC52xeYjgNELTb5BhCzKityrajIAQCA2OTJX6dxqRMVLMySlG46TrVxWU5tKNwkl4OXwEB14b8uADFrP6fIAQCAGGcFfcpyFmlnyG86SrWyLEt/6HSVnA6nygLlinfFmY4ERB0qcgBiVqGfihwAAECscDqcem/tR3romycVDAVNxwGiDiuYgCiWcObNpiPY2qGKXN3WVOQAAEBsC5sOUEOapzVRnMurUDgkp6L35DzABFYwAYhZnCIHAAAQW1pntNDghqdqef4qhcIh03GAqGLrAVMgENCvf/1rfffdd6ajABGpfPZrKv9qgukYtrU/sI+KHAAAQIxZvneVnvvuZS3Zvcx0FCCq2HrANH78eNWuXdt0DCBihfI3K7R3k+kYttUgvsmBU+TiqcgBAIDY5EtrrPsKRsqfXNd0lBrTOqOFrmp/qdpntTEdBYgqttmD6Y033tAHH3xQeXnUqFHq2LGjnE56sQCqB6fIAQCAWBd2ebU7lKKw02M6So1xWA61TG+uqRtmqm5SbXXIams6EhAVbDNgGjNmjMaMGVN5+eqrr1ZWVpaWLl2qDRs26PHHHzeYDkA0oiIHAABinatou8YkzJartJ6kdNNxaozTcmjBrsUqDZQxYAKqiG0GTD/0zDPPSJKeeuopDRgwwGwYAFHp0ClydThFDgAAxChHeYF6xa3VDl+x6Sg1ymE59Kcu1ynO5VUgFJDLYduXxkDEqPY9mIqLi3XmmWdqy5YtlddNnjxZw4cP16BBg/Tqq6/+7Ndff/31ateuXXXHBBCDDlXkiv2sYAIAADEubDpAzYtzeTV5/VQ9Nn88J8oBVaBax7SLFy/WuHHjtGHDhsrrdu7cqSeeeELvvvuuPB6Pxo4dq+7du6tp06ZV/vgZGUm/6OuyspKrOAlijV2eQxXDLpcUltcmeewm4CmRO3edrHi/bf7ODrFbHkQenkM4WTyHcLJ4DkWGvUlxkqSkJK/t/s5qIk/Lsjy5vJbS0uPlccXOPlSxwm7P6WhXrQOmN998U3fddZduuummyutmz56tHj16qFatWpKkIUOGaMqUKbruuuuq/PH37i1WKHRio/isrGTt3s1qBvxytnoOOTMP/NMueWwmI1xfZfOGKql1hn3+zmSz5xAiEs8hnCyeQzhZPIciR3FJudIlFRdX2OrvrKaeQ83im6tp3Waav365mtZqLMuyqv0xUTP4OVQ9HA7rqIt5qrUid//996tr165HXLdr1y5lZWVVXs7OztbOnTurMwYQs/yrvpR/1ZemY9jW4VPkCk1HAQAAgCFL9izT3779p5btXWk6ChDRqn0Pph8Kh3+8oogpMVA9/Ku/kn/1LNMxbOvwKXKxtaklAADAIYGkOnq9pIcC8RmmoxjTNqOVLm41Ri3Tm5mOAkS0Gh8w5eTkaM+ePZWXd+3apezs7JqOAQBqEN/kwCly8XVNRwEAADAiFF9LcyqaK+SN3b1qnA6nuuR00Kxtc7Uqf63pOEDEqvEBU69evTRnzhzl5+errKxM06ZNU79+/Wo6BgBov4+KHAAAiG2O8v3q4lkvh48V3TM2faFFu5eajgFErGrd5Pun5OTk6MYbb9TFF18sv9+v0aNHq3379jUdAwCoyAEAgJjnKtqui5NmaUdpR0kNTMcxxuVw6aau1yvZk6RQOCSHVeNrMYCIVyMDppkzZx5xecSIERoxYkRNPDQAHFVlRa41FTkAABCbLLEf7iHJniRN2TBDq/at0w0df8dewcAJqvEVTABqjrt5b9MRbO3wKXItJcXuvgMAAAA4INmdpMy4NAVCAbmdbtNxgIjCgAmIYu4WfU1HsLXDFbki01EAAABgA71zu6t3bndtLd6u3KQ6puMAEYViKRDFgns2Krhno+kYtsUpcgAAAPihRbuX6oF5T2j1vnWmowARhQETEMUq5rymijmvmY5hW4crcqxgAgAAsSnkTdH8ijwF3Ummo9hGm/QWGtVshBok1zMdBYgoDJgAxCwqcgAAINYFUurqlZK+CiRmmY5iG26nW/1ze2nx7qXaULjJdBwgYjBgAhCz6lORAwAAsS7oV6pVKgUDppPYSjAc1MR1H2rO9vmmowARg02+AcSsgoMVueIAp8gBAIDY5Nm3Tvemva0dhbUl5ZiOYxsep0d/6nKt0uPSTEcBIgYrmADErMJAvty561QSKDYdBQAAADaTGZ+hTzfP0r+WTjAdBYgIrGACopgjo4HpCLbWIL6pyuYNVe02HEELAACAHwuFQwqFw/KHAnI7ePkM/Bz+CwGiWFyvC01HsLWCylPkqMgBAADgxwY26C/LskzHACICFTkAMYuKHAAAAH6OZVl6fME/NGHFW6ajALbHCiYgipVOflCSlDDiVsNJ7ImKHAAAiHVhh0sFoXiFLafpKLbVOr2FUr0ppmMAtscKJiDqsaT3aAp8hypyRaajAAAAGOHPaKq7Cs5TRSp7dx7NsLyB6lX3FNMxANtjwAQgZu2nIgcAAGIcb0Ue2+MLnqYiBxwHKnIAYhYVOQAAEOtc+d9rXOpE+fenScowHceWWqe3UIo3yXQMwPYYMAGIWfsPniJXzClyAAAgRlkhn7KcRdoeCpiOYlvD8k43HQGICFTkAMSsQxW5YipyAAAAOAoqcsDxYQUTEMU4Pe7nUZEDAADAsVCRA44PAyYAMYuKHAAAAI6FihxwfKjIAVGs/KsJKp/9mukYtrU/sJeKHAAAgKRw2HQC+6IiBxwfBkxAFAvt3aRQ/mbTMWzrUEWuTkJd01EAAACM8Kfn6b6CkfKl1DcdxbZap7dQXmoD0zEA26MiByBmFfj3HqzItZJErx4AAMQgp0e7QykKO92mk9gWFTng+LCCCUDM2h/YR0UOAADENGfxTo1JmC1X6W7TUWzrrwue1isr3jQdA7A9BkwAYlbDQ6fIxXOKHAAAiE2O8v3qFbdWropC01Fsq1V6CzVOaWg6BmB7VOQAxCwqcgAAADgWKnLA8WHABEQxb68LTUewNSpyAAAAOJa/LnhaWQmZuqjVr0xHAWyNARMQxZyZLOX9OQ3iDlbk2lKRAwAAsS5sOoBttUpvoRQPq92BY2HABEQx/8ovJIdD7uZ9TEexpUMVuRIqcgAAIEZZskxHsD0qcsDxYZNvIIr5V8+Sf/VXpmPY1v5Avty561QSKDEdBQAAwIhgUo5eL+khf0KW6Si29dcFz+iV5ZwiBxwLAyYAMathfDOVzRuqnPjapqMAAAAYEYpL1ZyK5gp6U0xHsa3WGc3VOJWtJ4BjoSIHIGYdPkWutajIAQCAWGSVF6qLZ70cFXmSMk3HsaWhjajIAceDFUwAYtbhihynyAEAgNjkKt6hi5NmyVO6y3QU26IiBxwfBkwAYhYVOQAAABwLFTng+ER1Rc7h+GUnIvzSrwMOsctzKK7dIMnhsE0eu/E7i1Sn1U75rXI5HMmm4xyBvzOcLJ5DOFk8h3CyeA5FBk9cnFypWfLExdnu78wueYY3Hmg6An4huzyHosnPfU+tcDgcrsEsAAAAAAAAiDJU5AAAAAAAAHBSGDABAAAAAADgpDBgAgAAAAAAwElhwAQAAAAAAICTwoAJAAAAAAAAJ4UBEwAAAAAAAE4KAyYAAAAAAACcFAZMAAAAAAAAOCkMmAAAAAAAAHBSGDD9wK5du3TFFVdo5MiRGjt2rLZs2WI6EiLU8uXL1bZtW9MxEIEWLFigUaNG6eyzz9Yll1yirVu3mo6ECDF58mQNHz5cgwYN0quvvmo6DiLQ+PHjdcYZZ+iMM87QI488YjoOItjDDz+sW265xXQMRKCZM2fq3HPP1dChQ3XfffeZjoMINGnSpMr/lz388MOm48QUBkw/cNNNN+nUU0/Ve++9p7PPPluPPfaY6UiIQGVlZbr33nvl9/tNR0EE+vOf/6z7779fkyZN0ogRI/jlCsdl586deuKJJ/Taa69p0qRJeuONN7R27VrTsRBBZs+erVmzZmnixIl67733tGzZMn3yySemYyECzZkzRxMnTjQdAxFo8+bNuuuuu/T0009r8uTJWr58uT7//HPTsRBBysrKdP/99+uVV17RpEmTNH/+fM2ePdt0rJjBgOl/5Ofna+XKlRo7dqwkadSoUfrDH/5gNhQi0kMPPaRLL73UdAxEIJ/Pp9///vdq2bKlJKlFixbavn274VSIBLNnz1aPHj1Uq1YtJSQkaMiQIZoyZYrpWIggWVlZuuWWW+TxeOR2u9WkSRNt27bNdCxEmIKCAj3xxBO66qqrTEdBBPrkk080fPhw1a5dW263W0888YQ6dOhgOhYiSDAYVCgUUllZmQKBgAKBgLxer+lYMYMB0//YvHmz6tatqwceeEBnnXWWbrjhBrndbtOxEGFmzJih8vJyDR061HQURCCPx6Ozzz5bkhQKhTR+/HgNHDjQcCpEgl27dikrK6vycnZ2tnbu3GkwESJNs2bN1LFjR0nShg0b9NFHH6l///5mQyHi3HnnnbrxxhuVkpJiOgoi0MaNGxUMBnX55ZfrrLPO0muvvabU1FTTsRBBkpKS9Pvf/17Dhg1Tv379lJubq86dO5uOFTNcpgOY8vHHH+vBBx884rqGDRtq+fLluv7663X77bfrrbfe0i233KJXXnnFUErY2U89hxo3bqzi4mK99NJLZkIhohztOfTSSy/J5/PplltuUSAQ0JVXXmkoISJJOBz+0XWWZRlIgki3Zs0aXXnllbr55pvVqFEj03EQQd566y3VqVNHPXv21Lvvvms6DiJQMBjU/Pnz9corryghIUHXXHONJk6cqHPPPdd0NESIlStX6p133tGnn36q5ORk/elPf9K//vUv/fa3vzUdLSZY4Z/6jTRGbdq0Seecc44WLFgg6UB/s0ePHlq8eLHhZIgUb731lv75z38qMTFR0oEfcC1bttSrr76qpKQkw+kQKUpKSnT11VerVq1aeuyxx+TxeExHQgSYOHGi5s+fr/vvv1+S9I9//EPhcFjXXXed4WSIJAsWLNANN9yg2267TWeccYbpOIgwv/nNb7R79245nU7t379fpaWlGjlypG677TbT0RAh/va3v6m4uFjjxo2TJL366qtas2aN7r77brPBEDFeeOEF7d27VzfffLMk6bPPPtNrr72m5557znCy2EBF7n80aNBAOTk5lRvJffrpp2rTpo3hVIgk5513nqZPn65JkyZp0qRJkg6cYsBwCSfiz3/+sxo2bKgnn3yS4RKOW69evTRnzhzl5+errKxM06ZNU79+/UzHQgTZvn27rr32Wj322GMMl/CLvPjii/rggw80adIk3XDDDTrttNMYLuGEnHrqqZo1a5YKCwsVDAb15Zdf8noMJ6Rly5aaPXu2SktLFQ6HNXPmTLVr1850rJgRsxW5oxk/frzuuusuPfroo0pKStJDDz1kOhKAGLJ8+XLNmDFDTZs21ciRIyUd2Evn+eefNxsMtpeTk6Mbb7xRF198sfx+v0aPHq327dubjoUI8q9//UsVFRVH/O4zduxYnX/++QZTAYglHTp00G9/+1tdcMEF8vv96t27t0aNGmU6FiJInz59tHz5cp177rlyu91q166drrjiCtOxYgYVOQAAAAAAAJwUKnIAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASWHABAAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAEPFOO+00zZ4923QMAACAmMWACQAAoIrl5+erRYsW2rlzp+koAAAANYIBEwAAQBV47LHH9OWXX0qSVq5cqfT0dOXk5BhOdcANN9yg1atXV17esmWLOnXq9Ivuq6SkRL/97W9VXl5eVfEAAEAUYMAEAACiyrp163TRRRepa9euOuOMMzRjxozKzy1btkwjR45Up06ddMMNN+gPf/iDnnjiiZN+zEWLFmnt2rXq27evJGnFihVq2bLlSd9vVfD5fNq4caOaN29eJfeXmJioM888U08++WSV3B8AAIgODJgAAEDU8Pv9uuqqq9S7d2/Nnj1b48aN05/+9CetX79ePp9P1113nc455xzNmzdPZ555pqZPn14lj/vUU09pzJgxlZftNGCaPXu2evbsWaX3OWzYME2ePFl79uyp0vsFAACRiwETAACIGosXL1ZpaamuuOIKeTwe9ezZU6eeeqo+/PBDLV68WIFAQBdffLHcbrcGDx6sdu3aVX5tUVGRRo8erU6dOh1RJ3v00Ud1wQUX6M9//rP8fv+PHrOwsFALFixQ7969K69buXKlWrVq9aPbvvHGG7rooosq/7Rv315Lliyp/PzYsWM1fvx4SQdqbC1atNDXX38t6cBKpG7dumnChAmSpOLiYl111VW66KKLNGbMGH3++ec/+T2ZMWOGBg4ceCLfxmPyer3q3LnzUR8TAADEHpfpAAAAAFVl165dql27thyOw++h1a1bVzt37tSuXbuUk5Mjy7IqP1enTp3Kj+Pi4vTcc8/pkUceqbxu5cqV2rlzp1577TU988wzmjp1qs4888wjHnPjxo3KysqSx+ORJFVUVOj7779X69atf5RvzJgxlSudZs6cqYkTJ6p9+/aSpO3btysnJ0fz5s2rvH3btm31ySefqEePHpozZ44aNmxY+blJkyapb9++uvDCCxUOh1VUVPSjxwuFQlq0aJHuvvvu4/r+HbJz5069/PLLCgQCCofDatWqlc4555wjbtOgQQN9//33J3S/AAAgerGCCQAARI3s7Gzt2LFDoVCo8rpDg5usrCzt3LlT4XD4iM8d4na7lZ6efsT9LVy4UH369JEk9e3bVwsXLvzRYzocDgWDwcrLq1evlsvlUl5e3lFz5ufn68knn9Q999xTed3UqVM1YsQINW7cWOvWrZMk5ebmatu2bQqHw/rkk080ePDgytt7vV4tWrRIe/bskWVZSklJ+dHjLF68WG3btpXT6Txqlh8KhUJ6//33deONN+rWW2/VbbfdpiZNmuizzz474nbBYPCE7hcAAEQ3BkwAACBqtG/fXnFxcXrhhRfk9/s1d+5czZw5U8OHD1fHjh3ldDo1YcIEBQIBTZ8+Xd99993P3l9hYaGSkpIkScnJydq/f/+PblO/fn3l5+eroqJC0oFVT02aNFEgEFBFRYUqKirk8/mO+Jq7775bv//9748YaM2aNUv9+vXTmWeeqSlTplRe36lTJ33zzTfKz89XZmZm5fVnn3228vLydPnll2vMmDFav379j7JNnz5dp59++nF85w5bsmSJRo4cKZfLpY8//lhbt25V+/btVVZWdsTttmzZ8rNDNAAAEFsYMAEAgKjh8Xj07LPP6osvvlCPHj10zz336JFHHlGTJk3k8Xj01FNP6e2331a3bt30/vvva8CAAZXVtp+SnJys4uJiSQf2aEpNTf3RbVJSUtSlS5fKvZJWrFihZcuWqX379pV/hg8fXnn79957T8nJyTrttNMqr9uxY4fWrFmjq6++Ws8888wRexsNHjxYDz74oE455ZQjHtftduuaa67RpEmTdMMNN+ipp576UbbZs2dXrsD6odLSUnXq1OmIP6tWrZLT6axcAfbss89q/vz5knTEaiWfz6dvv/32iH8HAAAQ29iDCQAARLyZM2dWftysWbPKjbB/qF27dpo0aVLl5fPOO0+nnnrqUe+3c+fOevHFFzVy5EjNmjVLnTt3/snbXXvttXr22WfVv39/3Xnnnbrzzjt/8nbbt2/XSy+99KN8U6ZM0a233qqhQ4dKOrDC6dCqp0aNGqlLly4aOnSoZs+eXfk1W7durdz7KSMj44jq3yETJ078yRz16tXTqlWrfvJzfr9fL7/8si655JLK79V33313xIDpgw8+0IgRI36ylgcAAGITAyYAABAz5s2bp7y8PKWlpWny5MlatWqV+vbtW/n53/3ud1qxYoW+//57jRkzRueee64yMjJ0wQUXqE6dOrrssst+8n47d+6svLw8ffHFF+rXr99RH/+f//ynCgsLdfXVV1ded80112jatGn6xz/+UXld9+7d9fHHH1deHjdu3I/ua/Xq1brxxhvl9XoVDoePOtQ6UW63W8OGDdPjjz9euZKpWbNmGj16tKQDp9d98MEHlafdAQAASJIV/qm3uwAAAKLQG2+8oSeffFJlZWWqV6+e/vjHP2rAgAGmYwEAAEQ8BkwAAAAAAAA4KWzyDQAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAAAAAAJwUBkwAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASfl/6hNZaplFmREAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "titles = { 0 : \"Primary\",\n", + " 1 : \"Secondary\",\n", + " 2 : \"Unresolved\" }\n", + "\n", + "# choose to plot the \n", + "# PRIMARY, SECONDARY or UNRESOLVED\n", + "nstar = UNRESOLVED\n", + "\n", + "plots = {}\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "for n in range(0,3):\n", + " pad_output_distribution(population.grid_results['luminosity distribution'][n],\n", + " binwidth['luminosity'])\n", + " plots[titles[n] + ' ZAMS luminosity distribution'] = population.grid_results['luminosity distribution'][n]\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict(plots)\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7541ebf-fe9a-4fb0-a88e-bb318d06f9eb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/html/_sources/notebook_luminosity_function_single.ipynb.txt b/docs/build/html/_sources/notebook_luminosity_function_single.ipynb.txt new file mode 100644 index 000000000..fb971b34a --- /dev/null +++ b/docs/build/html/_sources/notebook_luminosity_function_single.ipynb.txt @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": { + "tags": [] + }, + "source": [ + "# Example use case: Zero-age stellar luminosity function\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of single stars using binary_c. \n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from binarycpython.utils.functions import temp_dir\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_luminosity\")\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_luminosity to grid_options\n", + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 0.5 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Mass\n", + "population = Population()\n", + "population.set(\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "population.add_grid_variable(\n", + " name=\"M_1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{res}\".format(res = resolution[\"M_1\"]),\n", + " spacingfunc=\"const({min}, {max}, {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"{probtot}/({max} - {min})\".format(probtot = total_probability, min = massrange[0], max = massrange[1]), # dprob/dm1 : all stars are equally likely so this is 1.0 / (Mmax - Mmin)\n", + " dphasevol=\"dM_1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STAR\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->model.time == 0)\n", + "{\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR %30.12e %g %g %g %g\\\\n\",\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " stardata->star[0].mass, // 3\n", + " stardata->star[0].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + "};\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + " \n", + " # Check the header and act accordingly\n", + " if linedata['header'] == \"ZERO_AGE_MAIN_SEQUENCE_STAR\":\n", + " \n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 1.0000000000000004\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-08f8230453084e4ca6a2391d45ce658b finished! The total probability was: 1.0000000000000002. It took a total of 1.5262682437896729s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.025), (3.75, 0.05), (4.25, 0.05), (0.25, 0.025), (3.25, 0.025), (5.25, 0.2), (4.75, 0.1), (5.75, 0.39999999999999997), (6.25, 0.125)]))])\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=0,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=2,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '08f8230453084e4ca6a2391d45ce658b', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 1.0000000000000002, 'total_count': 40, 'start_timestamp': 1631124829.303065, 'end_timestamp': 1631124830.8293333, 'total_mass_run': 2001.4, 'total_probability_weighted_mass_run': 50.035000000000004, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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n9eyZcs0atQovf3225o8eXLr4WwXExkZqZqaGkmfnZOpW7duF9wmKipKI0aMaD030sGDB7V//34NHjy49a+ZM2e23v7NN99UZGSkpk6d2nrZmTNnlJeXpwceeEC/+93vzjuX0YwZM/Tzn/9co0ePPu9xAwMD9c1vflNvvfWWHn74YT3//PMXtG3cuLH1lVf/qq6uTsOGDTvvr8OHD8vhcLS+8uuFF17Q9u3bJem8Vyk1NTVp165d5/0ZAACAf+OcSwAAwKutXr269e/T09NbT3r9r6699lq99dZbrR/feeedmjJlyiXvd/jw4XrxxRd16623av369Ro+fPhFb/fggw/qhRde0KRJk/TDH/5QP/zhDy96u9OnT+uvf/3rBX0ffPCBvv/97+uGG26Q9Nkrmz5/tVO/fv00YsQI3XDDDdq4cWPr55w8ebL1XE+xsbHnHe73ueXLl1+0IykpSYcPH77odc3Nzfrb3/6mL33pS61fq3379p03Lr3zzju6+eabL3ooHgAA8E+MSwAAwC9s3bpVycnJio6O1ooVK3T48GFNmDCh9fqvf/3rOnjwoI4ePaq5c+fq9ttvV2xsrBYsWKAePXroq1/96kXvd/jw4UpOTta6des0ceLESz7+73//e1VVVemBBx5oveyb3/ymPvroI/3P//xP62VZWVl6//33Wz9etGjRBfeVm5urRx55RMHBwbIs65KD1pUKDAzUjTfeqF/96letr2BKT0/XnDlzJH32LnXvvPNO67vaAQAASJLNutj/6gIAAPAxr776qp599lnV19crKSlJjz76qCZPnmw6CwAAwOsxLgEAAAAAAKDdOKE3AAAAAAAA2o1xCQAAAAAAAO3GuAQAAAAAAIB2Y1wCAAAAAABAuzEuAQAAAAAAoN0YlwAAAAAAANBujEsAAAAAAABoN8YlAAAAAAAAtNv/D2ltZ660RybEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "# this saves a lot of typing! \n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "7d7b275e-be92-4d59-b44d-ef6f24023cc3", + "metadata": {}, + "source": [ + "Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 10<sup>5.8</sup> L<sub>☉</sub>! Clearly, this is not very realistic... let's see what went wrong." + ] + }, + { + "cell_type": "markdown", + "id": "44586e42-b7cb-4a55-be0a-330b98b20de4", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "markdown", + "id": "e32c3bbf-390f-45da-ad9c-cc3e7c9449dc", + "metadata": {}, + "source": [ + "## ZAMS Luminosity distribution with the initial mass function\n", + "\n", + "In the previous example, all the stars in our grid had an equal weighting. This is very unlikely to be true in reality: indeed, we know that low mass stars are far more likely than high mass stars. So we now include an initial mass function as a three-part power law based on Kroupa (2001). Kroupa's distribution is a three-part power law: we have a function that does this for us (it's very common to use power laws in astrophysics).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "1f37d2c0-1108-4ab9-a309-20b1e6b6e3fd", + "metadata": {}, + "outputs": [], + "source": [ + "# Update the probability distribution to use the three-part power law IMF \n", + "population.update_grid_variable(\n", + " name=\"M_1\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6f4463e8-1935-45f2-8c5f-e7b215f8dc47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.2182216189410787\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-92de7c9221c54206ab4dd10e58e09a34 finished! The total probability was: 0.21822161894107872. It took a total of 1.5900418758392334s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.0164166), (3.25, 0.00515685), (0.25, 0.189097), (3.75, 0.0037453900000000004), (4.25, 0.0014346559999999999), (5.25, 0.0007493004), (4.75, 0.001171479), (5.75, 0.00039801020000000003), (6.25, 5.2369339999999996e-05)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cfe45a9e-1121-43b6-b6b6-4de6f8946a18", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABcnUlEQVR4nO3dd3SUZf7+8Wtm0gvpjQRIo0PovSNNiiDiBnXBsrqCsq6sK66CirroWlZ/lu/ay6oooIIIItIEhID03ksCBJIACYTQ0ub3R3TcCBjIk+SZSd6vczgn82QycyW5HTPX3M9nLHa73S4AAAAAAACgnKxmBwAAAAAAAIBro2ACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ9zMDlCZcnLOqrjYbnaMaickxE8nT+aZHQMuivUDo1hDMIo1BKNYQzCKNQSjWEMwqrxryGq1KCjI97Kfq9YFU3GxnYKpkvBzhRGsHxjFGoJRrCEYxRqCUawhGMUaglEVvYY4RQ4AAAAAAACGUDABAAAAAADAkGp9ihwAAAAAAFWpqKhQOTnHVViYX2n3kZVlVXFxcaXdPqq/staQm5uHgoLCZLNdfW1EwQQAAAAAQAXJyTkuLy8f+fpGymKxVMp9uLlZVVhIwYTy+701ZLfbdfZsrnJyjis0NOqqb5NT5AAAAAAAqCCFhfny9a1VaeUSUNksFot8fWtd8y48CiYAAAAAACoQ5RJcXXnWMAUTAAAAAAAADKFgAgAAAACgGtq8eaPuuOPWUv+6d2+v77+f57jOV19NV8+eHXXy5IlSX9u1a1v97W/jSh07deqUevTooPfff1uSlJGRoQkTxuv220dq1Kg/6PHH/6GcnOxLcrz//tuOrzHivffe0ooVywzfzi++/vpLff31l5KkZ599ShkZx8p1O+PG/VkbNqzTrl079K9/PXPF6x09mq7nnnu6zCxdu7a9pvtfsWK5pk379JLbqWoM+QYAAAAAoBpq0aKVPvroM8fl6dOnav78b9Wz53WOY99+O0ddu/bQ3Lmzdfvtfyr19YcPH1Zubq5q1aolSVq6dLH8/Ws5Pv/ii89qwICB6tt3gCTpk08+1IsvPqdnn32xUr6fu+8eU6G3N2zYCMfHGzas05133mPo9ho1aqJ//KPJFT+fkXFM6elHysxyrXbv3lkht2MUBRMAAAAAANXc5s0b9fHHH+idd/4rT09PSdK+fXuVm3taEyZM1KRJEzRq1J2yWn890alr1+768celGjToBkklBVP37j0dn8/OPqGLFy84Lt900x+0c+eO383RtWtbrVixTpI0b94cbdy4XhMnTtaIEUPUu3dfpaSskM1m07333q9p0z7VkSOHdf/9D+q66/pqypTJatWqjVq1aqPHHvu74uMTtGfPbgUHh+iZZ/6lWrUCtHLlj3r33Tdltxerdu1oPfzwYwoODtEbb/w/rV37k2w2q7p27aG77vqzY1eVh4enTpw4rocf/qvuvnuMpk2bqrfe+kCS9N13c7V9+1b9/e+POr6H/Px8Pf/8M9q1a6ciI2vr9OlTkkpKqg8+eEdvvPGOpk37VN99962sVosaN26qCRMm6tVXX9LRo+n697+fV69e1+nNN19TUVGx4uMTFBVVW5L0pz/dK0l6/vkp2rlzuwICAvXoo08oMjJS48b9WXfd9We1bt1Wx44d1V/+cq9efPFVzZ49U5IUGRnl2IX1pz/de8WfxYgRQ3T99YO0enWKzp+/oEmTnlKjRo2vei1dCQUTAAAAAACVYOXWY1qxpXynXf0ei0Xq0jxKXZpf3VvI5+Rka/LkiXrkkccVHR3jOD5v3jfq3buPGjVqLJvNpp9+SlGnTl0dn+/du48+/vgDDRp0g06ePCG7XQoJCXV8/t57x+nppx/X+++/ozZt2qljx87q3btvub+v0NAwffrpDD377FP69NOP9Nprb2nr1s167bV/67rrSt/uvn179eijT6hBg0aaOPFhLVjwna67rp9efPFZvfnm+4qKqq3PPvtYL7/8gsaNe1CrV6fo009n6OLFi3r++X/q4sWLjtsaNeoOzZ79lV588VVFRkbp//7vNaWnH1F0dIy++26u7r239KmCX345XZI0deqXOnz4kG6//ZZSny8sLNSnn36kr7+eL6vVqpdffl7Hj2fpr3/9uz744B099NAj2rBhnQ4fPqQvv5wrPz+/S04hbNWqtR55ZKJmzvxCr776kp577qXL/szi4uI1dOhwSdKgQTc4bicnJ/uyP4t//vN5SVJAQIDeffdjffnlNH3yyQeaMsX4rjNmMAEAAAAAUE0VFxdr8uRJ6tOnf6ndR4WFhVqwYL769OkvSerdu69jJ8wvmjVL0qFDacrLy9PSpYvVq1fvUp/v2LGzZs2ap0cemaTAwCD95z+vaeLEh8udtWPHzpKkiIhItWzZWm5uboqMjNKZM2cuuW5QULAaNGgkSYqPT1Rubq527Niuxo2bOnYD3XDDcK1fv1ahoWHy9PTU2LF3acaMz3TPPWMdu7h+y2Kx6PrrB+n77+cpIyND2dnZatq0WanrbNq0Xr16lRRederUVfPmSaU+7+bmpmbNknT33aP14YfvavjwmxUWFn7JfdWpU09+fn6XHPf09FS/ftdLkvr3v14bN67/3Z/b5VzpZ/GLX37Wv/zsKgI7mAAAAAAAqATXssvoWri5WVVYWHxV1/3ww3dVWFige++9v9TxlSt/1JkzuXrssZJCqLCwUDk52crKylR4eISkkrKlS5duWrFimZYt+0FPPfWcZs6cIUnKzT2tjz56Tw888JA6duysjh0764477tbQof2Vk5OjoKCgK2ay2+2yWCwqLCwsddzd3d3xsc1m+93vy8PD45LbtNuLLzlWVFQkNzc3vfPOR9q0aYNWrVqpMWPu1Ouvv3PF2x44cIgeeugv8vDw0IABAy9zDUup+7pc1uee+7e2b9+q1atT9NBDD+iJJy4d/n2lkstq/fX27PaSwkoq+X384rc/u9+60s/iFx4enqU+VxHYwQQAAAAAQDW0du1qzZnztZ566jlHSfGLefO+0T33jNWXX87Rl1/O0ddff6fmzVtozpyvS12vd+++mjnzC7m5uZcqjXx9/bRixXJ9991cx7H09CMKDg5xDAW/nMDAQB08uF92u10rViyvmG/0Z02aNNOOHVt17NhRSdI338xU69ZttGfPLo0b92e1aNFK48Y9qNjYeB06lFbqa202m6OAiYyMUlhYuL7++isNGDDokvtp27a9Fi78XsXFxcrIOKatW7eU+nxOTo5uu22E4uMTdffdY9SuXQft379XNptbqZLnSs6fP+d4t7xvv52ttm3bS5ICAkp+dpL0449LL5u9rJ9FZWIHEwAAAAAA1dAnn3ykoqIi/f3vD5Q63r17T23YsE6PPvpkqeMjR/5R//73v3THHXc7jjVt2lwnT57QDTcMK3Vdm82ml156Va+//oree+8teXl5KTQ0TM8///Lv7j4aM2acJkwYr+DgECUltXQMyK4IwcEhevjhiXrssb+roKBQkZGR+sc/nlBoaKiaNUvS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zY4DF/TFF184Hn+GDh2qNm3a6Omnn66Q23arkFtBtZeZmalXXnlFM2fOlIeHh0aOHKkOHTooMTHR7GhwIZs3b9akSZOUmppqdhS4oJSUFK1YsUKzZs2SxWLR3XffrYULF6pv375mR4OLWLNmjVavXq1vvvlGhYWFGjhwoHr06KH4+Hizo8GFrFq1SrNmzVLPnj3NjgIXZLfbdeDAAS1dulRubjwVw7U5fPiwnnzySX3xxRcKCQnR7bffrmXLlqlHjx5mR4MLufnmm3XzzTdLkvbu3av7779f48aNq5DbZgcTrkpKSoo6duyowMBA+fj4qH///po/f77ZseBiZsyYoSeffFLh4eFmR4ELCgsL0z/+8Q95eHjI3d1dCQkJOnr0qNmx4ELat2+vjz/+WG5ubjp58qSKiork4+Njdiy4kFOnTumVV17RmDFjzI4CF3XgwAFZLBbdc889uuGGG/Tpp5+aHQkuZOHChRo4cKAiIyPl7u6uV155RS1atDA7FlzY5MmTNX78eAUHB1fI7VGb46pkZWUpLCzMcTk8PFxbtmwxMRFc0ZQpU8yOABdWv359x8epqamaN2+epk2bZmIiuCJ3d3e99tpr+uCDDzRgwABFRESYHQku5IknntD48eN17Ngxs6PAReXm5qpTp06aPHmyLly4oNGjRysuLk5dunQxOxpcQFpamtzd3fWnP/1Jx48fV69evfTggw+aHQsuKiUlRRcuXND1119fYbfJDiZcFbvdfskxi8ViQhIANd3evXt111136ZFHHlFsbKzZceCCHnjgAa1atUrHjh3TjBkzzI4DF/HFF18oKipKnTp1MjsKXFirVq30wgsvyMfHR8HBwRoxYoSWLVtmdiy4iKKiIq1atUovvviiZsyYoa1bt2rWrFlmx4KLmjZtmu68884KvU0KJlyViIgInThxwnE5KyuL05wAVLn169frjjvu0EMPPaQbb7zR7DhwMfv379fOnTslSd7e3urXr592795tciq4innz5mnlypUaOnSoXnvtNS1ZskTPPvus2bHgYtatW6dVq1Y5LtvtdmYx4aqFhoaqU6dOCg4OlpeXl6677jrOKkG55Ofna+3aterdu3eF3i4FE65K586dtWrVKmVnZ+v8+fNasGCBunfvbnYsADXIsWPHdP/99+ull17SoEGDzI4DF3TkyBFNmjRJ+fn5ys/P1+LFi9WmTRuzY8FFfPjhh5o7d65mz56tBx54QL1799Zjjz1mdiy4mDNnzuiFF17QxYsXlZeXp1mzZvFmFbhqvXr10ooVK5Sbm6uioiL9+OOPatq0qdmx4IJ2796t2NjYCp9FSV2OqxIREaHx48dr9OjRKigo0IgRI5SUlGR2LAA1yPvvv6+LFy/qX//6l+PYyJEjdcstt5iYCq6kR48e2rx5s4YNGyabzaZ+/fpRVgKoUr169XI8DhUXF+vWW29Vq1atzI4FF9GiRQvdfffduvXWW1VQUKAuXbropptuMjsWXNDhw4cVGRlZ4bdrsV9uuA4AAAAAAABwlThFDgAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAMDl9e7dWykpKWbHAAAAqLEomAAAACpYdna2GjZsqMzMTLOjAAAAVAkKJgAAgArw0ksv6ccff5Qk7dq1S8HBwYqIiDA5VYkHHnhAe/bscVw+cuSIWrVqVa7bOnv2rO6++25duHChouIBAIBqgIIJAABUK/v379eoUaPUtm1bDRo0SIsXL3Z8bvv27Ro2bJhatWqlBx54QA8++KBeeeUVw/e5adMm7du3T926dZMk7dy5U40aNTJ8uxUhPz9faWlpatCgQYXcnq+vrwYPHqxXX321Qm4PAABUDxRMAACg2igoKNCYMWPUpUsXpaSkaNKkSfr73/+uAwcOKD8/X+PGjdONN96oNWvWaPDgwVq0aFGF3O/rr7+u5ORkx2VnKphSUlLUqVOnCr3N66+/XnPmzNGJEycq9HYBAIDromACAADVxubNm3Xu3Dn9+c9/loeHhzp16qRevXrp22+/1ebNm1VYWKjRo0fL3d1d/fr1U/PmzR1fe+bMGY0YMUKtWrUqdTrZiy++qFtvvVUPP/ywCgoKLrnP3NxcrV+/Xl26dHEc27Vrlxo3bnzJdadPn65Ro0Y5/iUlJWnLli2Oz48cOVJvvPGGpJLT2Bo2bKjVq1dLKtmJ1K5dO3366aeSpLy8PI0ZM0ajRo1ScnKyli1bdtmfyeLFi9WnT59r+TGWydPTU61bt77ifQIAgJrHzewAAAAAFSUrK0uRkZGyWn99Da127drKzMxUVlaWIiIiZLFYHJ+LiopyfOzl5aV33nlHL7zwguPYrl27lJmZqc8++0xvvvmmvv/+ew0ePLjUfaalpSksLEweHh6SpIsXL+rgwYNq0qTJJfmSk5MdO52WLFmiWbNmKSkpSZJ07NgxRUREaM2aNY7rN2vWTAsXLlTHjh21atUq1atXz/G52bNnq1u3brrttttkt9t15syZS+6vuLhYmzZt0uTJk6/q5/eLzMxMffzxxyosLJTdblfjxo114403lrpO3bp1dfDgwWu6XQAAUH2xgwkAAFQb4eHhysjIUHFxsePYL8VNWFiYMjMzZbfbS33uF+7u7goODi51exs2bFDXrl0lSd26ddOGDRsuuU+r1aqioiLH5T179sjNzU1xcXFXzJmdna1XX31VTz31lOPY999/ryFDhig+Pl779++XJEVHR+vo0aOy2+1auHCh+vXr57i+p6enNm3apBMnTshisahWrVqX3M/mzZvVrFkz2Wy2K2b5reLiYn3zzTcaP368Hn30UT322GNKSEjQ0qVLS12vqKjomm4XAABUbxRMAACg2khKSpKXl5fee+89FRQU6KefftKSJUs0cOBAtWzZUjabTZ9++qkKCwu1aNEibd269XdvLzc3V35+fpIkf39/nT59+pLr1KlTR9nZ2bp48aKkkl1PCQkJKiws1MWLF3Xx4kXl5+eX+prJkyfrr3/9a6lCa8WKFerevbsGDx6s+fPnO463atVKa9euVXZ2tkJDQx3Hhw4dqri4OP3pT39ScnKyDhw4cEm2RYsW6brrrruKn9yvtmzZomHDhsnNzU3fffed0tPTlZSUpPPnz5e63pEjR363RAMAADULBRMAAKg2PDw89NZbb2n58uXq2LGjnnrqKb3wwgtKSEiQh4eHXn/9dX355Zdq166dvvnmG/Xs2dNxatvl+Pv7Ky8vT1LJjKaAgIBLrlOrVi21adPGMStp586d2r59u5KSkhz/Bg4c6Lj+119/LX9/f/Xu3dtxLCMjQ3v37tXYsWP15ptvlppt1K9fPz333HNq3759qft1d3fXfffdp9mzZ+uBBx7Q66+/fkm2lJQUxw6s3zp37pxatWpV6t/u3btls9kcO8DeeustrVu3TpJK7VbKz8/Xxo0bS30PAACgZmMGEwAAcHlLlixxfFy/fn3HIOzfat68uWbPnu24fPPNN6tXr15XvN3WrVvrww8/1LBhw7RixQq1bt36ste7//779dZbb6lHjx564okn9MQTT1z2eseOHdNHH310Sb758+fr0Ucf1YABAySV7HD6ZddTbGys2rRpowEDBiglJcXxNenp6Y7ZTyEhIaVO/fvFrFmzLpsjJiZGu3fvvuznCgoK9PHHH+v22293/Ky2bt1aqmCaO3euhgwZctnT8gAAQM1EwQQAAGqMNWvWKC4uTkFBQZozZ452796tbt26OT5/zz33aOfOnTp48KCSk5M1fPhwhYSE6NZbb1VUVJTuuuuuy95u69atFRcXp+XLl6t79+5XvP+3335bubm5Gjt2rOPYfffdpwULFuj//u//HMc6dOig7777znF50qRJl9zWnj17NH78eHl6esput1+x1LpW7u7uuv766/Xvf//bsZOpfv36GjFihKSSd6+bO3eu493uAAAAJMliv9zLXQAAANXQ9OnT9eqrr+r8+fOKiYnRQw89pJ49e5odCwAAwOVRMAEAAAAAAMAQhnwDAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIb8fxzqA03KlXkqAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "0546f2f3-4732-4841-8ef3-565fbf6b9961", + "metadata": {}, + "source": [ + "This distribution is peaked at low luminosity, as one expects from observations, but the resolution is clearly not great because it's not smooth - it's spiky! \n", + "\n", + "If you noticed above, the total probability of the grid was about 0.2. Given that the total probability of a probability distribution function should be 1.0, this shows that our sampling is (very) poor. \n", + "\n", + "We could simply increase the resolution to compensate, but this is very CPU intensive and a complete waste of time and resources. Instead, let's try sampling the masses of the stars in a smarter way." + ] + }, + { + "cell_type": "markdown", + "id": "673031c9-7d80-45d4-b209-301c127d3edf", + "metadata": {}, + "source": [ + "# A better-sampled grid\n", + "\n", + "The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space. \n", + "\n", + "To do this we first rename the mass grid variable so that it is clear we are working in (natural) logarithmic phase space." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5956f746-e3b9-4912-b75f-8eb0af66d3f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename the old variable (M_1) because we want it to be called lnM_1 now\n", + "population.rename_grid_variable(\"M_1\",\"lnM_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "532f691c-c1f6-46cc-84f2-970ec1216e40", + "metadata": {}, + "source": [ + "Next, we change the spacing function so that it works in the log space. We also adapt the probability calculation so that it calculates dprob/dlnM = M * dprob/dM. Finally, we set the precode to compute M_1 because binary_c requires the actual mass, not the logarithm of the mass." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "108d470a-bb21-40b0-8387-2caa7ab0f923", + "metadata": {}, + "outputs": [], + "source": [ + "# update the sampling, note that the IMF is dprob/dM1, and the phase \n", + "# space is now sampled in lnM1, so we multiply by M_1 to \n", + "# because M * dprob/dM = dprob/dlnM\n", + "population.update_grid_variable(\n", + " name=\"lnM_1\",\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnM_1\",\n", + " parameter_name=\"M_1\",\n", + " precode=\"M_1=math.exp(lnM_1)\",\n", + ")\n", + "# print(population.grid_options[\"_grid_variables\"]) # debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fb8db646-f3d0-4ccd-81ba-7fde23f29c79", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.9956307907476224\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Population-83f80d829dbd418aa2bc745c99b71991 finished! The total probability was: 0.9956307907476224. It took a total of 0.9961590766906738s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(0.25, 0.0212294), (2.75, 0.00321118), (-0.25, 0.0268827), (1.25, 0.0104553), (3.75, 0.00283037), (6.25, 7.34708e-05), (-0.75, 0.0771478), (0.75, 0.030004499999999996), (2.25, 0.00921541), (3.25, 0.0045385), (1.75, 0.014776889999999999), (4.25, 0.002380189), (4.75, 0.000869303), (5.25, 0.0007310379999999999), (5.75, 0.00036002859999999996), (-2.75, 0.1961345), (-1.75, 0.2181597), (-3.25, 0.0), (-2.25, 0.2568974), (-1.25, 0.11973310000000001)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "182b1094-5057-4ccf-bac6-9b0e560ad4f6", + "metadata": {}, + "source": [ + "You should see that the total probability is very close to 1.0, as you would expect for a well-sampled grid. The total will never be exactly 1.0, but that is because we are running a simulation, not a perfect copy of reality." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "68ee1e56-21e5-48f4-b74c-50e48685ae94", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB37ElEQVR4nOzdd3iV9f3/8dcZ2XtPstkhrLD3ElkyREGtA+vA0eHXqq1SRa221rb+2lpx1C3WVYaAKEtUlpAwE0YgJJCQkAGEEFbW+f2BpqUKAZJz7pOc5+O6uC7PneTcrxy8Q/LK5/O+TTabzSYAAAAAAADgCpmNDgAAAAAAAICWjYIJAAAAAAAATULBBAAAAAAAgCahYAIAAAAAAECTUDABAAAAAACgSSiYAAAAAAAA0CQUTAAAAAAAAGgSq9EB7OnYsZOqr7fZ9RwhIb46cqTKrucAnBnXAMB1AHANwNVxDcDVcQ24DrPZpKAgnx99W6sumOrrbXYvmL4/D+DKuAYArgOAawCujmsAro5rAGyRAwAAAAAAQJNQMAEAAAAAAKBJWvUWOQAAAAAAHKmurlbHjpWptrba6CgOU1pqVn19vdEx0IysVncFBYXJYrn02oiCCQAAAACAZnLsWJk8Pb3l4xMpk8lkdByHsFrNqq2lYGotbDabTp6s1LFjZQoNjbrkj2OLHAAAAAAAzaS2tlo+Pv4uUy6h9TGZTPLx8b/sVXgUTAAAAAAANCPKJbR0V/L/MAUTAAAAAAAAmoSCCQAAAACAVmjbti267bYbz/szeHBvffHFZw3v8+9/f6ihQ/vqyJHy8z524MB0/d//3X/esYqKCg0Z0kevv/6KJOnw4cN6+OEHdNNN1+vmm6/Xb3/7ax07dvQHOV5//ZWGj2mKf/7zZa1Z81WTn+d7CxZ8ogULPpEkPfvskzp8uPiKnuf+++/S5s0Z2r17p/7wh6cv+H5FRYf0+98/1WiWgQPTL+v8a9Z8rQ8+eO8Hz+NoDPkGAAAAAKAV6tq1u9566/2Gxx9+OFeff75EQ4eOaDi2ZMkiDRw4RIsXL9Stt/70vI8vKChQZWWl/P39JUmrV6+Un59/w9uff/5ZXX31WI0ZM1a1tfV699039fzzv9ezzz5vl8/njjtmNuvzTZo0teG/N2/O0IwZdzbp+Tp06KRf/7rTBd9++HCxDh0qbDTL5dqzZ1ezPE9TUTABAAAAANDKbdu2Re+884ZeffVteXh4SJL27durysrjevjhxzRr1sO6+eYZMpv/s9Fp4MDB+uab1Ro37hpJ5wqmwYOHNrz96NFynT17puHxtdder127dl40x8CB6VqzJkOS9Nlni7RlS6Yee2y2pk6doOHDR2ndujWyWCy6++779MEH76mwsED33fdLjRgxSs88M1vdu/dU9+499eijv1JSUrJycvYoODhETz/9B/n7B2jt2m/02mtzZLPVKzo6Rg899KiCg0P04ov/T5s2fSuLxayBA4fo9tvvalhV5e7uofLyMj300C90xx0z9cEHc/Xyy29IkpYuXazs7B361a9+0/A5VFdX67nnntbu3bsUGRmt48crJJ0rqd5441W9+OKr+uCD97R06RKZzSZ17NhZDz/8mP761z+pqOiQ/vzn5zRs2AjNmfM31dXVKykpWVFR0ZKkn/70bknSc889o127shUQEKjf/OZxRUZG6v7779Ltt9+lHj3SVVxcpJ/97G49//xftXDhPElSZGRUwyqsn/707gu+FlOnTtDo0WO1ceN6nT59RrNmPakOHTpe8v9LF0LBBAAAAACAHazdUaw1269s21VjBqZFaUCXS7uF/LFjRzV79mN65JHfKiYmtuH4Z599quHDR6pDh46yWCz69tt16tdvYMPbhw8fqXfeeUPjxl2jI0fKZbNJISGhDW+/++779dRTv9Xrr7+qnj17qW/f/ho+fNQVf06hoWF6772P9OyzT+q9997S3/72snbs2Ka//e3PGjHi/Ofdt2+vfvObx9WuXQc99thDWrZsqUaMuErPP/+s5sx5XVFR0Xr//Xf0l7/8Ufff/0tt2LBO7733kc6ePavnnvudzp492/BcN998mxYu/Leef/6vioyM0j/+8TcdOlSomJhYLV26WHffff5WwU8++VCSNHfuJyooOKhbb73hvLfX1tbqvffe0oIFn8tsNusvf3lOZWWl+sUvfqU33nhVDz74iDZvzlBBwUF98sli+fr6/mALYffuPfTII49p3ryP9de//km///2ffvQ1S0xM0sSJUyRJ48Zd0/A8x44d/dHX4ne/e06SFBAQoNdee0effPKB3n33DT3zTNNXnTGDCQAAAACAVqq+vl6zZ8/SyJGjz1t9VFtbq2XLPtfIkaMlScOHj2pYCfO91NQ0HTx4QFVVVVq9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hQsXasKECfzDApdQUlKiF154Qe+//74WLlyoDz/8UPv27TM6FuAw69at05o1azR//nwtWLBA2dnZWr58udGxAIdbv3695s+fb3QMwBAFBQV64okn9NJLL2nRokXauXOnvvrqK6NjwSAUTM3gD3/4g2677TajYwCGqK6u1i9+8Qt16NBBktS+fXsVFxcbnAqwv3Xr1qlv374KDAyUt7e3Ro8erc8//9zoWIDDhIWF6de//rXc3d3l5uam5ORkFRUVGR0LcKiKigq98MILmjlzptFRAEMsX75cY8eOVWRkpNzc3PTCCy+oa9euRseCQSiYmmjlypU6c+aMrr76aqOjAIZwd3fXxIkTJUn19fV68cUXNXLkSINTAfZXWlqqsLCwhsfh4eEqKSkxMBHgWG3btlW3bt0kSfn5+frss880ZMgQY0MBDvb444/rgQcekL+/v9FRAEMcOHBAdXV1+ulPf6prrrlG77//vgICAoyOBYNYjQ7QUixdulS///3vzzuWlJSkqqoqvfXWW8aEAhzsQtfBW2+9perqav36179WbW2t7r77boMSAo5js9l+cMxkMhmQBDDW3r17dffdd+uRRx5RQkKC0XEAh/n4448VFRWlfv36ad68eUbHAQxRV1enjIwMvfvuu/L29ta9996r+fPna8qUKUZHgwEomC7RmDFjNGbMmPOOffzxx3rllVd00003NRybOHGi5s6dK19fX0dHBOzux64DSTp58qTuueceBQYGas6cOXJzczMgHeBYERERysjIaHhcWlqq8PBwAxMBjpeZmamf//znevTRRzVu3Dij4wAO9dlnn6msrEwTJ07U8ePHderUKT377LN69NFHjY4GOExoaKj69eun4OBgSdKIESO0fft2CiYXZbL92K9gcUXat2+vPXv2GB0DcLh7771XISEheuqpp1jBAZdRUlKiG264QZ988om8vLw0ffp0Pf3000pLSzM6GuAQxcXFmjx5sl544QX169fP6DiAoebNm6eNGzfqD3/4g9FRAIfatm2bHnnkEX300Ufy8fHRfffdpxEjRui6664zOhoMwAomAE2yc+dOrVy5UikpKZo0aZKkc7NoXnvtNWODAXYWERGhBx54QLfccotqamo0depUyiW4lNdff11nz5497wfq6dOn64YbbjAwFQDAkbp27ao77rhDN954o2pqajRgwABde+21RseCQVjBBAAAAAAAgCbhLnIAAAAAAABoEgomAAAAAAAANAkFEwAAAAAAAJqEggkAAAAAAABNQsEEAAAAAACAJqFgAgAAAAAAQJNQMAEAAAAAAKBJKJgAAECLN3z4cK1bt87oGAAAAC6LggkAAKCZHT16VO3bt1dJSYnRUQAAAByCggkAAKAZ/OlPf9I333wjSdq9e7eCg4MVERFhcKpzfv7znysnJ6fhcWFhobp3735Fz3Xy5EndcccdOnPmTHPFAwAArQAFEwAAaFVyc3N18803Kz09XePGjdPKlSsb3padna1Jkyape/fu+vnPf65f/vKXeuGFF5p8zq1bt2rfvn0aNGiQJGnXrl3q0KFDk5+3OVRXV+vAgQNq165dszyfj4+Pxo8fr7/+9a/N8nwAAKB1oGACAACtRk1NjWbOnKkBAwZo3bp1mjVrln71q19p//79qq6u1v3336/Jkydr48aNGj9+vFasWNEs5/373/+uadOmNTx2poJp3bp16tevX7M+55gxY7Ro0SKVl5c36/MCAICWi4IJAAC0Gtu2bdOpU6d01113yd3dXf369dOwYcO0ZMkSbdu2TbW1tbrlllvk5uamq666Sl26dGn42BMnTmjq1Knq3r37edvJnn/+ed1444166KGHVFNT84NzVlZWKjMzUwMGDGg4tnv3bnXs2PEH7/vhhx/q5ptvbviTlpam7du3N7x9+vTpevHFFyWd28bWvn17bdiwQdK5lUi9evXSe++9J0mqqqrSzJkzdfPNN2vatGn66quvfvQ1WblypUaOHHk5L2OjPDw81KNHjwueEwAAuB6r0QEAAACaS2lpqSIjI2U2/+d3aNHR0SopKVFpaakiIiJkMpka3hYVFdXw356ennr11Vf1xz/+seHY7t27VVJSovfff19z5szRF198ofHjx593zgMHDigsLEzu7u6SpLNnzyovL0+dOnX6Qb5p06Y1rHRatWqV5s+fr7S0NElScXGxIiIitHHjxob3T01N1fLly9W3b1+tX79e8fHxDW9buHChBg0apJtuukk2m00nTpz4wfnq6+u1detWzZ49+5Jev++VlJTonXfeUW1trWw2mzp27KjJkyef9z5xcXHKy8u7rOcFAACtFyuYAABAqxEeHq7Dhw+rvr6+4dj3xU1YWJhKSkpks9nOe9v33NzcFBwcfN7zbd68WQMHDpQkDRo0SJs3b/7BOc1ms+rq6hoe5+TkyGq1KjEx8YI5jx49qr/+9a968sknG4598cUXmjBhgpKSkpSbmytJiomJUVFRkWw2m5YvX67/3979hTT1xnEc/8icduEWsm4EhcbYXY02Mb1xLgMxMRpSDLoRjC5cUIhXioy6EgQvRKQJQRHeCEFtDiYxhgwZ9Af6IyIrqJtGXYSQRGN/yt+FdH6szfjFLn6k7xcc2HnO9zznOefys+c8p6+vz6hvbGzUy5cv9fnzZ9XV1clqtVZc59WrVzpx4oRMJtO+Y/nVjx8/FI1GNTY2pomJCU1OTsrhcGhtba2s7vv373/ULwAAONgImAAAwIHhcrl05MgR3blzR8ViUU+ePFEymdTAwIBOnTolk8mkpaUllUolJRIJbWxs/La/nZ0dNTU1SZIsFou+fPlSUdPW1qbt7W3l83lJe7OeHA6HSqWS8vm88vm8CoVC2Tk3b97UjRs3ygKt9fV1eb1eDQ4OanV11Wh3u9169uyZtre3dezYMaP9woULstvtunLligKBgN69e1cxtkQiobNnz/6HJ/ev169fy+/3q76+XvF4XNlsVi6XS7lcrqzuw4cPvw3RAADA4ULABAAADoyGhgaFw2GlUil1dXXp1q1bmpmZkcPhUENDg+bn5/XgwQN1dHQoGo3K5/MZr7ZVY7FY9PXrV0l7azQdPXq0osZqtaq9vd1YK2lra0ubm5tyuVzGNjAwYNQ/evRIFotFvb29RtunT5/09u1bjY6O6vbt22VrG/X19Wl6elqnT58uu67ZbFYwGFQkEtH169c1Pz9fMbZ0Om3MwPrVt2/f5Ha7y7ZMJiOTyWTMAAuHw3r+/Lkklc1WKhQKevHiRdk9AACAw401mAAAwF8vmUwav51Op7EQ9q9OnjypSCRi7F+6dElnzpzZt1+Px6O7d+/K7/drfX1dHo+nat21a9cUDofV09OjUCikUChUte7jx4+6d+9exfhWV1c1MTGh/v5+SXsznH7Oejp+/Lja29vV39+vdDptnJPNZo21n2w2W9mrfz89fPiw6jhaW1uVyWSqHisWi7p//76Gh4eNZ7WxsVEWMMViMZ0/f77qa3kAAOBwImACAACHxtOnT2W329Xc3KyVlRVlMhl1d3cbx69evaqtrS29f/9egUBAQ0NDstlsunz5slpaWjQyMlK1X4/HI7vdrlQqJa/Xu+/1FxcXtbOzo9HRUaMtGAzq8ePHWlhYMNo6OzsVj8eN/ampqYq+3rx5o7GxMTU2Nmp3d3ffUOtPmc1mnTt3TrOzs8ZMJqfTqYsXL0ra+3pdLBYzvnYHAAAgSXW71f7uAgAAOICWl5c1NzenXC6n1tZWjY+Py+fz/d/DAgAA+OsRMAEAAAAAAKAmLPINAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABqQsAEAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABq8g/wlbD9p3152QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "31fe91bb-177d-4e4e-90cf-298a3f8a8b61", + "metadata": {}, + "source": [ + "Most stars are low mass red dwarfs, with small luminosities. Without the IMF weighting, our model population would have got this completely wrong! \n", + "\n", + "As you increase the resolution, you will see this curve becomes even smoother. The wiggles in the curve are (usually) sampling artefacts because the curve should monotonically brighten above about log(*L*/L<sub>☉</sub>)=-2. \n", + " \n", + "Remember you can play with the binwidth too. If you want a very accurate distribution you need a narrow binwidth, but then you'll also need high resolution (lots of stars) so lots of CPU time, hence cost, CO<sub>2</sub>, etc." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/html/_sources/notebook_population.ipynb.txt b/docs/build/html/_sources/notebook_population.ipynb.txt index b6a37baa8..f6f27ee43 100644 --- a/docs/build/html/_sources/notebook_population.ipynb.txt +++ b/docs/build/html/_sources/notebook_population.ipynb.txt @@ -23,9 +23,12 @@ "outputs": [], "source": [ "import os\n", + "\n", "from binarycpython.utils.custom_logging_functions import temp_dir\n", "from binarycpython.utils.grid import Population\n", "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_population\")\n", + "\n", "# help(Population) # Uncomment to see the public functions of this object" ] }, @@ -60,7 +63,8 @@ "adding: max_evolution_time=15000 to BSE_options\n", "adding: eccentricity=0.02 to BSE_options\n", "adding: amt_cores=2 to grid_options\n", - "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/example_python_population_result to custom_options >>>>\n", + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_population to grid_options\n", + "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result to custom_options >>>>\n", "<<<< Warning: Key does not match previously known parameter: adding: base_filename=example_pop.dat to custom_options >>>>\n", "1\n", "example_pop.dat\n", @@ -88,11 +92,12 @@ "\n", "\n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", " \n", " # Custom options # TODO: need to be set in grid_options probably\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -133,13 +138,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Writing settings to /tmp/binary_c_python/example_python_population_result/example_pop_settings.json\n" + "Writing settings to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json\n" ] }, { "data": { "text/plain": [ - "'/tmp/binary_c_python/example_python_population_result/example_pop_settings.json'" + "'/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json'" ] }, "execution_count": 3, @@ -181,7 +186,7 @@ "text": [ "Help on method add_grid_variable in module binarycpython.utils.grid:\n", "\n", - "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='edge', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", + "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='centred', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", " Function to add grid variables to the grid_options.\n", " \n", " The execution of the grid generation will be through a nested for loop.\n", @@ -199,25 +204,25 @@ " name:\n", " name of parameter. This is evaluated as a parameter and you can use it throughout\n", " the rest of the function\n", - " \n", + " \n", " Examples:\n", " name = 'lnm1'\n", " longname:\n", " Long name of parameter\n", - " \n", + " \n", " Examples:\n", " longname = 'Primary mass'\n", " range:\n", " Range of values to take. Does not get used really, the spacingfunction is used to\n", " get the values from\n", - " \n", + " \n", " Examples:\n", " range = [math.log(m_min), math.log(m_max)]\n", " resolution:\n", " Resolution of the sampled range (amount of samples).\n", " TODO: check if this is used anywhere\n", " \n", - " Examples: \n", + " Examples:\n", " resolution = resolution[\"M_1\"]\n", " spacingfunction:\n", " Function determining how the range is sampled. You can either use a real function,\n", @@ -230,12 +235,12 @@ " precode:\n", " Extra room for some code. This code will be evaluated within the loop of the\n", " sampling function (i.e. a value for lnm1 is chosen already)\n", - " \n", + " \n", " Examples:\n", " precode = 'M_1=math.exp(lnm1);'\n", " probdist:\n", " Function determining the probability that gets assigned to the sampled parameter\n", - " \n", + " \n", " Examples:\n", " probdist = 'Kroupa2001(M_1)*M_1'\n", " dphasevol:\n", @@ -249,7 +254,7 @@ " condition = 'self.grid_options['binary']==1'\n", " gridtype:\n", " Method on how the value range is sampled. Can be either 'edge' (steps starting at\n", - " the lower edge of the value range) or 'center'\n", + " the lower edge of the value range) or 'centred'\n", " (steps starting at lower edge + 0.5 * stepsize).\n", "\n" ] @@ -313,7 +318,7 @@ " \"dphasevol\": \"dlnm1\",\n", " \"parameter_name\": \"M_1\",\n", " \"condition\": \"\",\n", - " \"gridtype\": \"edge\",\n", + " \"gridtype\": \"centred\",\n", " \"branchpoint\": 0,\n", " \"grid_variable_number\": 0\n", "}\n" @@ -457,7 +462,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "adding: parse_function=<function parse_function at 0x7ff3bdf79620> to grid_options\n" + "adding: parse_function=<function parse_function at 0x7f531bc3b6a8> to grid_options\n" ] } ], @@ -536,25 +541,25 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", - "EXAMPLE_COMPACT_OBJECT 2.867655467480e+01 1.33079 9.81391 0.00167028 13\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "EXAMPLE_COMPACT_OBJECT 1.931266944719e+01 1.3933 12.3177 0.00124307 13\n", - "EXAMPLE_COMPACT_OBJECT 4.439623364590e+01 1.38004 7.81906 0.00224431 13\n", - "EXAMPLE_COMPACT_OBJECT 1.364277535630e+01 1.47961 15.4603 0.000925128 13\n", - "EXAMPLE_COMPACT_OBJECT 1.017435498578e+01 1.59052 19.4046 0.000688507 13\n", - "EXAMPLE_COMPACT_OBJECT 8.294870923827e+00 1.7197 24.3552 0.000512406 13\n", - "EXAMPLE_COMPACT_OBJECT 6.802132608769e+00 1.84162 30.5689 0.000381347 13\n", - "EXAMPLE_COMPACT_OBJECT 5.723570798020e+00 1.99471 38.3678 0.00028381 13\n", - "EXAMPLE_COMPACT_OBJECT 4.933751523833e+00 2.15875 48.1564 0.000211219 13\n", - "EXAMPLE_COMPACT_OBJECT 4.337250536639e+00 2.35209 60.4424 0.000157195 14\n", - "EXAMPLE_COMPACT_OBJECT 3.862081089332e+00 2.56776 75.8628 0.000116989 14\n", - "EXAMPLE_COMPACT_OBJECT 3.449960890183e+00 2.80457 95.2174 8.70668e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.172196856333e+00 3.05193 119.51 6.47976e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.069627290216e+00 3.27563 150 4.82242e-05 14\n", - "Population-2a7732d03e594ef4b5dfe9051b41d9c0 finished! The total probability was: 0.05150046619238191. It took a total of 0.7797017097473145s to run 20 systems on 2 cores\n", + "EXAMPLE_COMPACT_OBJECT 4.139293101586e+01 1.29427 8.13626 0.00202467 13\n", + "EXAMPLE_COMPACT_OBJECT 2.802986496151e+01 1.33699 10.0967 0.00152924 13\n", + "EXAMPLE_COMPACT_OBJECT 1.963621764679e+01 1.39754 12.5294 0.00115504 13\n", + "EXAMPLE_COMPACT_OBJECT 1.427601421985e+01 1.47745 15.5483 0.000872405 13\n", + "EXAMPLE_COMPACT_OBJECT 1.094409257247e+01 1.57571 19.2947 0.00065893 13\n", + "EXAMPLE_COMPACT_OBJECT 9.181971798545e+00 1.68748 23.9436 0.000497691 13\n", + "EXAMPLE_COMPACT_OBJECT 7.905335716621e+00 1.77287 29.7128 0.000375908 13\n", + "EXAMPLE_COMPACT_OBJECT 7.451192744924e+00 1.81495 36.872 0.000283924 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396133472739e+00 1.82088 45.7561 0.000214449 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396675941641e+00 1.82123 56.7809 0.000161974 13\n", + "EXAMPLE_COMPACT_OBJECT 7.404641347602e+00 1.82074 70.4621 0.000122339 13\n", + "EXAMPLE_COMPACT_OBJECT 7.444217227690e+00 1.81636 87.4397 9.2403e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.453317880232e+00 1.81536 108.508 6.97923e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.450828476484e+00 1.81563 134.653 5.27143e-05 13\n", + "Population-f28b5f98d7ef40dcb17fc2481a6d3ced finished! The total probability was: 0.04440288843805411. It took a total of 2.785212755203247s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n" ] } @@ -586,7 +591,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'population_name': '2a7732d03e594ef4b5dfe9051b41d9c0', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.05150046619238191, 'total_count': 20, 'start_timestamp': 1628444120.234709, 'end_timestamp': 1628444121.0144107, 'total_mass_run': 730.1048014407228, 'total_probability_weighted_mass_run': 0.2983275843337705, 'zero_prob_stars_skipped': 0}\n" + "{'population_name': 'f28b5f98d7ef40dcb17fc2481a6d3ced', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.04440288843805411, 'total_count': 20, 'start_timestamp': 1629459533.935186, 'end_timestamp': 1629459536.7203987, 'total_mass_run': 684.2544031669779, 'total_probability_weighted_mass_run': 0.28134439269236855, 'zero_prob_stars_skipped': 0}\n" ] } ], @@ -660,42 +665,22 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Saving grid code to grid_options\n", - "Writing grid code to /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", - "Loading grid code function from /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", + "Writing grid code to /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", + "Loading grid code function from /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", "Grid code loaded\n", - "Writing binary_c calls to /tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", + "Writing binary_c calls to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", - "/tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "binary_c M_1 2.0 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.013208238029791246\n", - "binary_c M_1 2.5102526289471614 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.009829948023831718\n", - "binary_c M_1 3.1506841305680684 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.0073157281034221516\n", - "binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.005444573822104362\n" + "with a total probability of 0.044402888438054094\n", + "/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", + "binary_c M_1 2.227955577093495 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.010905083645619543\n", + "binary_c M_1 2.7647737053496777 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.008236638755149857\n", + "binary_c M_1 3.4309362899259503 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.006221155214163634\n", + "binary_c M_1 4.257608426597089 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.004698855121516278\n" ] } ], "source": [ - "example_pop.set(verbosity=10)\n", + "example_pop.set(verbosity=1)\n", "calls_filename = example_pop.write_binary_c_calls_to_file()\n", "print(calls_filename)\n", "\n", @@ -725,39 +710,34 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "Population-3680f3882c0a449c944462abffea2447 finished! The total probability was: 0.05150046619238191. It took a total of 0.6246354579925537s to run 20 systems on 2 cores\n", + "Population-e45c25448b32440cb7e220f4a3562907 finished! The total probability was: 0.04440288843805411. It took a total of 1.9539172649383545s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass zams_mass probability radius stellar_type\n", - "2.867655467480e+01 1.33079 9.81391 0.00167028 1.72498e-05 13\n", - "1.931266944719e+01 1.3933 12.3177 0.00124307 1.72498e-05 13\n", - "4.439623364590e+01 1.38004 7.81906 0.00224431 1.72498e-05 13\n", - "1.364277535630e+01 1.47961 15.4603 0.000925128 1.72498e-05 13\n", - "1.017435498578e+01 1.59052 19.4046 0.000688507 1.72498e-05 13\n", - "8.294870923827e+00 1.7197 24.3552 0.000512406 1.72498e-05 13\n", - "6.802132608769e+00 1.84162 30.5689 0.000381347 1.72498e-05 13\n", - "5.723570798020e+00 1.99471 38.3678 0.00028381 1.72498e-05 13\n", - "4.933751523833e+00 2.15875 48.1564 0.000211219 1.72498e-05 13\n", - "4.337250536639e+00 2.35209 60.4424 0.000157195 9.97286e-06 14\n", - "3.862081089332e+00 2.56776 75.8628 0.000116989 1.08873e-05 14\n", - "3.449960890183e+00 2.80457 95.2174 8.70668e-05 1.18914e-05 14\n", - "3.172196856333e+00 3.05193 119.51 6.47976e-05 1.29402e-05 14\n", - "3.069627290216e+00 3.27563 150 4.82242e-05 1.38887e-05 14\n", + "4.139293101586e+01 1.29427 8.13626 0.00202467 1.72498e-05 13\n", + "2.802986496151e+01 1.33699 10.0967 0.00152924 1.72498e-05 13\n", + "1.963621764679e+01 1.39754 12.5294 0.00115504 1.72498e-05 13\n", + "1.427601421985e+01 1.47745 15.5483 0.000872405 1.72498e-05 13\n", + "1.094409257247e+01 1.57571 19.2947 0.00065893 1.72498e-05 13\n", + "9.181971798545e+00 1.68748 23.9436 0.000497691 1.72498e-05 13\n", + "7.905335716621e+00 1.77287 29.7128 0.000375908 1.72498e-05 13\n", + "7.451192744924e+00 1.81495 36.872 0.000283924 1.72498e-05 13\n", + "7.396133472739e+00 1.82088 45.7561 0.000214449 1.72498e-05 13\n", + "7.396675941641e+00 1.82123 56.7809 0.000161974 1.72498e-05 13\n", + "7.404641347602e+00 1.82074 70.4621 0.000122339 1.72498e-05 13\n", + "7.444217227690e+00 1.81636 87.4397 9.2403e-05 1.72498e-05 13\n", + "7.453317880232e+00 1.81536 108.508 6.97923e-05 1.72498e-05 13\n", + "7.450828476484e+00 1.81563 134.653 5.27143e-05 1.72498e-05 13\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -817,11 +797,12 @@ " eccentricity=0.02, # bse_options\n", " \n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -876,15 +857,15 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" @@ -912,96 +893,39 @@ "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Grid has handled 125 stars\n", - "with a total probability of 0.0862478164626921\n", - "Total starcount for this run will be: 125\n", + "Grid has handled 27 stars\n", + "with a total probability of 0.024868380796643753\n", + "Total starcount for this run will be: 27\n", "Generating grid code\n", "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Population-d20a4c74d20a43b881c0c9e5def5f76c finished! The total probability was: 0.08624781646269201. It took a total of 8.561265707015991s to run 125 systems on 2 cores\n", + "Population-05128ef4c5fe4274a0356c3e99e2f2d2 finished! The total probability was: 0.024868380796643757. It took a total of 9.792905807495117s to run 27 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 stellar_type_2 prev_stellar_type_2 metallicity probability\n", - "8.863377990313e+01 1.29444 5.88566 0 2.99283 13 5 15 15 0.02 0.000627913\n", - "1.146421815741e+02 0 5.88566 1.33062 4.43925 15 15 13 5 0.02 0.000627913\n", - "7.222715508467e+01 1.34922 5.88566 0 5.88566 13 5 15 15 0.02 0.000627913\n", - "1.350021848285e+01 1.48488 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171108213270e+01 1.53113 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171086983243e+01 1.53177 17.3205 0 0.1 13 9 15 15 0.02 0.000154349\n", - "1.170770599495e+01 1.53176 17.3205 0 4.40513 13 5 15 15 0.02 0.000172877\n", - "1.230407246199e+01 1.59499 17.3205 0 4.40513 13 5 15 15 0.02 0.000610573\n", - "1.108751340926e+01 1.70319 17.3205 0 8.71025 13 4 15 15 0.02 0.000610573\n", - "1.941017702765e+01 1.34903 17.3205 1.65097 8.71025 13 13 13 5 0.02 0.000172877\n", - "1.980988739731e+01 1.36979 17.3205 1.60808 8.71025 13 13 13 5 0.02 0.000121486\n", - "3.571858031651e+01 1.53174 17.3205 1.30504 8.71025 13 13 13 5 0.02 8.42148e-05\n", - "3.459153942631e+01 1.53176 17.3205 1.31004 8.71025 13 13 13 5 0.02 9.8162e-05\n", - "1.687368550125e+01 1.34937 17.3205 1.73856 13.0154 13 13 13 8 0.02 0.000172877\n", - "1.194842917007e+01 1.78096 17.3205 0 13.0154 13 8 15 15 0.02 0.000610573\n", - "1.733614170983e+01 1.53184 17.3205 1.42375 13.0154 13 13 13 5 0.02 9.8162e-05\n", - "1.723547465714e+01 1.38403 17.3205 1.71288 13.0154 13 13 13 8 0.02 0.000121486\n", - "1.764340254985e+01 1.53174 17.3205 1.41264 13.0154 13 13 13 5 0.02 8.42148e-05\n", - "1.170425790780e+01 1.52963 17.3205 0 17.3205 13 5 15 15 0.02 0.000172877\n", - "8.922967341481e+00 1.85486 17.3205 0 17.3205 13 8 15 15 0.02 0.000610573\n", - "1.232906623449e+01 1.41074 17.3205 1.34281 17.3205 13 13 13 8 0.02 0.000121486\n", - "1.170775828562e+01 1.53183 17.3205 1.53183 17.3205 13 5 13 5 0.02 9.8162e-05\n", - "1.170770422321e+01 1.53175 17.3205 1.53175 17.3205 13 5 13 5 0.02 8.42148e-05\n", - "5.075844624794e+00 2.12303 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.766606588165e+00 2.20484 50.9713 0 0.1 14 8 15 15 0.02 3.79411e-05\n", - "4.768305081494e+00 2.18838 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.458869865939e+00 2.29864 50.9713 0 12.8178 14 8 15 15 0.02 0.000150087\n", - "1.806014211040e+01 2.10446 50.9713 1.40749 12.8178 13 13 13 5 0.02 2.9863e-05\n", - "4.797342083485e+00 2.10328 50.9713 0 12.8178 13 13 15 1 0.02 4.24954e-05\n", - "1.721374713429e+01 2.21673 50.9713 1.42212 12.8178 14 14 13 5 0.02 2.41295e-05\n", - "4.055645404546e+00 2.47276 50.9713 0 25.5357 14 7 15 15 0.02 0.000150087\n", - "1.806123543037e+01 2.21893 50.9713 1.40745 12.8178 14 14 13 5 0.02 2.07011e-05\n", - "8.117519147635e+00 2.10433 50.9713 2.21473 25.5357 13 13 14 8 0.02 4.24954e-05\n", - "8.315554923168e+00 2.15343 50.9713 2.08519 25.5357 13 13 13 8 0.02 2.9863e-05\n", - "7.917420996633e+00 2.21892 50.9713 1.7431 25.5357 14 14 13 8 0.02 2.07011e-05\n", - "7.693213405973e+00 2.21805 50.9713 1.78384 25.5357 14 14 13 8 0.02 2.41295e-05\n", - "3.753837732894e+00 2.62517 50.9713 0 38.2535 14 7 15 15 0.02 0.000150087\n", - "7.087296558990e+00 2.10417 50.9713 2.40935 38.2535 13 13 14 8 0.02 4.24954e-05\n", - "7.007109286263e+00 2.15854 50.9713 2.28672 38.2535 13 13 14 8 0.02 2.9863e-05\n", - "5.653200958306e+00 2.21878 50.9713 2.0587 38.2535 14 14 13 8 0.02 2.41295e-05\n", - "5.733794947644e+00 2.21892 50.9713 1.99255 38.2535 14 14 13 8 0.02 2.07011e-05\n", - "3.513216011269e+00 2.76647 50.9713 0 50.9713 14 7 15 15 0.02 0.000150087\n", - "4.750574783854e+00 2.27442 50.9713 0 50.9713 14 8 15 15 0.02 4.24954e-05\n", - "7.278384712062e+00 1.29678 50.9713 2.09216 50.9713 13 8 13 13 0.02 2.9863e-05\n", - "4.765996194699e+00 2.20787 50.9713 2.20787 50.9713 14 8 14 8 0.02 2.07011e-05\n", - "4.765535914728e+00 2.21331 50.9713 2.21331 50.9713 14 8 14 8 0.02 2.41295e-05\n", - "3.104706358826e+00 3.17639 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.069363482023e+00 3.27572 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.047074050271e+00 3.3836 150 0 37.575 14 7 15 15 0.02 3.68933e-05\n", - "5.974759306305e+00 3.23604 150 2.53922 37.575 14 14 14 7 0.02 1.04459e-05\n", - "6.074084349384e+00 3.30145 150 2.13876 37.575 14 14 13 8 0.02 7.34071e-06\n", - "5.733865371895e+00 3.29994 150 2.00498 37.575 14 14 13 8 0.02 5.93135e-06\n", - "3.027099358410e+00 3.53631 150 0 75.05 14 7 15 15 0.02 3.68933e-05\n", - "5.807147339697e+00 3.30197 150 1.9791 37.575 14 14 13 8 0.02 5.08861e-06\n", - "4.862942347290e+00 3.25294 150 2.97823 75.05 14 14 14 7 0.02 1.04459e-05\n", - "4.556479830908e+00 3.29942 150 2.73221 75.05 14 14 14 7 0.02 7.34071e-06\n", - "3.853070305680e+00 3.29977 150 2.62486 75.05 14 14 14 7 0.02 5.93135e-06\n", - "3.881529045940e+00 3.30149 150 2.55924 75.05 14 14 14 7 0.02 5.08861e-06\n", - "3.015033359333e+00 3.64419 150 0 112.525 14 7 15 15 0.02 3.68933e-05\n", - "4.126828648362e+00 3.32047 150 0 112.525 14 14 15 3 0.02 1.04459e-05\n", - "3.990017992944e+00 3.3032 150 2.94027 112.525 14 14 14 7 0.02 7.34071e-06\n", - "3.206771867883e+00 3.07671 150 3.11282 112.525 14 14 14 7 0.02 5.93135e-06\n", - "3.006827156705e+00 3.72638 150 0 150 14 7 15 15 0.02 3.68933e-05\n", - "3.218786094847e+00 3.30337 150 3.01344 112.525 14 14 14 7 0.02 5.08861e-06\n", - "4.527722847382e+00 1.42238 150 0 150 13 5 15 15 0.02 1.04459e-05\n", - "3.069567332611e+00 3.27804 150 3.27804 150 14 7 14 7 0.02 5.93135e-06\n", - "5.726405299909e+00 1.29746 150 3.22759 150 13 8 14 14 0.02 7.34071e-06\n", - "3.069626478211e+00 3.27565 150 3.27565 150 14 7 14 7 0.02 5.08861e-06\n", + "1.219029061236e+01 1.60007 17.3205 0 2.97008 13 5 15 15 0.02 0.000498487\n", + "1.935920346899e+01 1.29448 17.3205 0 8.71025 13 13 15 2 0.02 0.000498487\n", + "2.123795595728e+01 1.30902 17.3205 1.58519 8.71025 13 13 13 5 0.02 0.000287968\n", + "3.579099761269e+01 1.52414 17.3205 1.30642 8.71025 13 13 13 5 0.02 0.000220016\n", + "1.674063083432e+01 1.29457 17.3205 0 14.4504 13 13 15 2 0.02 0.000498487\n", + "1.779197348711e+01 1.3228 17.3205 1.71196 14.4504 13 13 13 8 0.02 0.000287968\n", + "1.548740826516e+01 1.52415 17.3205 1.45407 14.4504 13 13 13 5 0.02 0.000220016\n", + "1.772169325356e+01 1.81957 73.0434 1.46573 12.2572 13 13 13 5 0.02 4.43422e-05\n", + "1.367065500196e+01 1.66003 73.0434 1.79487 12.2572 13 13 13 8 0.02 7.67586e-05\n", + "2.021960493499e+01 1.82061 73.0434 1.39205 12.2572 13 13 13 5 0.02 3.38788e-05\n", + "9.012246630357e+00 1.81529 73.0434 0 36.5717 13 8 15 15 0.02 7.67586e-05\n", + "7.462779538274e+00 1.82255 73.0434 1.81499 36.5717 13 13 13 8 0.02 3.38788e-05\n", + "1.030499912298e+01 1.80592 73.0434 1.81066 36.5717 13 13 13 8 0.02 4.43422e-05\n", + "4.227002356107e+00 2.43719 73.0434 0 60.8862 14 14 15 1 0.02 7.67586e-05\n", + "7.396288708628e+00 1.8216 73.0434 1.8216 60.8862 13 8 13 8 0.02 3.38788e-05\n", + "7.394728392218e+00 1.80919 73.0434 1.79091 60.8862 13 13 13 8 0.02 4.43422e-05\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -1067,10 +991,11 @@ " \n", " # grid_options\n", " amt_cores=2, # grid_options\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -1168,14 +1093,14 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" diff --git a/docs/build/html/binary_c_parameters.html b/docs/build/html/binary_c_parameters.html index ecb6bba95..b1131e2db 100644 --- a/docs/build/html/binary_c_parameters.html +++ b/docs/build/html/binary_c_parameters.html @@ -40,7 +40,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> <link rel="next" title="Population grid code options" href="grid_options_descriptions.html" /> - <link rel="prev" title="Using the API functionality of binarycpython" href="notebook_api_functionality.html" /> + <link rel="prev" title="Zero-age stellar luminosity function in binaries" href="notebook_luminosity_function_binaries.html" /> </head> <body class="wy-body-for-nav"> @@ -197,7 +197,7 @@ <h1>Binary_c parameters<a class="headerlink" href="#binary-c-parameters" title="Permalink to this headline">¶</a></h1> <p>The following chapter contains all the parameters that the current version of binary_c can handle, along with their descriptions and other properties.</p> <dl class="simple"> -<dt>This information was obtained by the following binary_c build:</dt><dd><p><strong>binary_c git branch</strong>: branch_david <strong>binary_c git revision</strong>: 6162:20210825:093caf0e9 <strong>Built on</strong>: Aug 25 2021 18:02:39</p> +<dt>This information was obtained by the following binary_c build:</dt><dd><p><strong>binary_c git branch</strong>: newmaster <strong>binary_c git revision</strong>: 6185:20210910:1621c23a5 <strong>Built on</strong>: Sep 10 2021 15:05:46</p> </dd> </dl> <div class="section" id="section-stars"> @@ -695,6 +695,12 @@ <div class="line"><strong>Default value</strong>: NULL</div> </div> <div class="line-block"> +<div class="line"><strong>Parameter</strong>: artificial_mass_accretion_rate_by_stellar_type%d</div> +<div class="line"><strong>Description</strong>: Constant mass accretion rate for stellar type <n>.</div> +<div class="line"><strong>Parameter input type</strong>: Float(scanf)</div> +<div class="line"><strong>Default value</strong>: NULL</div> +</div> +<div class="line-block"> <div class="line"><strong>Parameter</strong>: artificial_angular_momentum_accretion_rate%d</div> <div class="line"><strong>Description</strong>: Constant angular momentum accretion for star <n>.</div> <div class="line"><strong>Parameter input type</strong>: Float(scanf)</div> @@ -747,14 +753,6 @@ <div class="line"><strong>Macros</strong>: [‘BH_HURLEY2002 = 0’, ‘BH_BELCZYNSKI = 1’, ‘BH_SPERA2015 = 2’, ‘BH_FRYER12_DELAYED = 3’, ‘BH_FRYER12_RAPID = 4’, ‘BH_FRYER12_STARTRACK = 5’]</div> </div> <div class="line-block"> -<div class="line"><strong>Parameter</strong>: PPISN_prescription</div> -<div class="line"><strong>Description</strong>: (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019.</div> -<div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> -<div class="line"><strong>Macros</strong>: [‘PPISN_NONE = 0’, ‘PPISN_FARMER19 = 1’]</div> -<div class="line"><strong>Extra</strong>: Ignore</div> -</div> -<div class="line-block"> <div class="line"><strong>Parameter</strong>: sn_kick_distribution_II</div> <div class="line"><strong>Description</strong>: Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> @@ -786,7 +784,7 @@ <div class="line"><strong>Parameter</strong>: sn_kick_distribution_GRB_COLLAPSAR</div> <div class="line"><strong>Description</strong>: Set the distribution of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Default value</strong>: 1</div> <div class="line"><strong>Macros</strong>: [‘KICK_VELOCITY_FIXED = 0’, ‘KICK_VELOCITY_MAXWELLIAN = 1’, ‘KICK_VELOCITY_CUSTOM = 2’]</div> </div> <div class="line-block"> @@ -832,27 +830,6 @@ <div class="line"><strong>Macros</strong>: [‘KICK_VELOCITY_FIXED = 0’, ‘KICK_VELOCITY_MAXWELLIAN = 1’, ‘KICK_VELOCITY_CUSTOM = 2’]</div> </div> <div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_distribution_PPISN</div> -<div class="line"><strong>Description</strong>: Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> -<div class="line"><strong>Macros</strong>: [‘KICK_VELOCITY_FIXED = 0’, ‘KICK_VELOCITY_MAXWELLIAN = 1’, ‘KICK_VELOCITY_CUSTOM = 2’]</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_distribution_PISN</div> -<div class="line"><strong>Description</strong>: Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Macros</strong>: [‘KICK_VELOCITY_FIXED = 0’, ‘KICK_VELOCITY_MAXWELLIAN = 1’, ‘KICK_VELOCITY_CUSTOM = 2’]</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_distribution_PHDIS</div> -<div class="line"><strong>Description</strong>: Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Macros</strong>: [‘KICK_VELOCITY_FIXED = 0’, ‘KICK_VELOCITY_MAXWELLIAN = 1’, ‘KICK_VELOCITY_CUSTOM = 2’]</div> -</div> -<div class="line-block"> <div class="line"><strong>Parameter</strong>: sn_kick_dispersion_II</div> <div class="line"><strong>Description</strong>: Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> <div class="line"><strong>Parameter input type</strong>: Float</div> @@ -880,7 +857,7 @@ <div class="line"><strong>Parameter</strong>: sn_kick_dispersion_GRB_COLLAPSAR</div> <div class="line"><strong>Description</strong>: Set the dispersion of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Default value</strong>: 190</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: sn_kick_dispersion_TZ</div> @@ -919,24 +896,6 @@ <div class="line"><strong>Default value</strong>: 0</div> </div> <div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_dispersion_PPISN</div> -<div class="line"><strong>Description</strong>: Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 190</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_dispersion_PISN</div> -<div class="line"><strong>Description</strong>: Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_dispersion_PHDIS</div> -<div class="line"><strong>Description</strong>: Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c).</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> -</div> -<div class="line-block"> <div class="line"><strong>Parameter</strong>: sn_kick_companion_IA_He</div> <div class="line"><strong>Description</strong>: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> @@ -1077,27 +1036,6 @@ <div class="line"><strong>Macros</strong>: [‘SN_IMPULSE_NONE = 0’, ‘SN_IMPULSE_LIU2015 = 1’, ‘SN_IMPULSE_WHEELER1975 = 2’]</div> </div> <div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_companion_PPISN</div> -<div class="line"><strong>Description</strong>: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975.</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Macros</strong>: [‘SN_IMPULSE_NONE = 0’, ‘SN_IMPULSE_LIU2015 = 1’, ‘SN_IMPULSE_WHEELER1975 = 2’]</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_companion_PISN</div> -<div class="line"><strong>Description</strong>: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975.</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Macros</strong>: [‘SN_IMPULSE_NONE = 0’, ‘SN_IMPULSE_LIU2015 = 1’, ‘SN_IMPULSE_WHEELER1975 = 2’]</div> -</div> -<div class="line-block"> -<div class="line"><strong>Parameter</strong>: sn_kick_companion_PHDIS</div> -<div class="line"><strong>Description</strong>: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975.</div> -<div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Macros</strong>: [‘SN_IMPULSE_NONE = 0’, ‘SN_IMPULSE_LIU2015 = 1’, ‘SN_IMPULSE_WHEELER1975 = 2’]</div> -</div> -<div class="line-block"> <div class="line"><strong>Parameter</strong>: wd_sigma</div> <div class="line"><strong>Description</strong>: Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> @@ -1169,25 +1107,25 @@ <div class="line"><strong>Parameter</strong>: delta_mcmin</div> <div class="line"><strong>Description</strong>: A parameter to reduce the minimum core mass for third dredge up to occur on the TPAGB. As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: lambda_min</div> <div class="line"><strong>Description</strong>: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. See also lambda_multiplier.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: lambda_multiplier</div> <div class="line"><strong>Description</strong>: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: minimum_envelope_mass_for_third_dredgeup</div> <div class="line"><strong>Description</strong>: The minimum envelope mass for third dredge up on the TPAGB. Early, solar metallicity models by Straniero et al suggested 0.5Msun is typical. However, circumstantial evidence (Izzard et al 2009) as well as newer models by Stancliffe and Karakas suggest that at low metallicity a value nearer zero is more appropriate.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0.5</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: mass_of_pmz</div> @@ -1199,13 +1137,13 @@ <div class="line"><strong>Parameter</strong>: c13_eff</div> <div class="line"><strong>Description</strong>: The “efficiency†of partial mixing in a TPAGB star intershell region, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: mc13_pocket_multiplier</div> <div class="line"><strong>Description</strong>: Multiplies the mass in the partial mixing zone of a TPAGB star, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: tides_convective_damping</div> @@ -1231,7 +1169,7 @@ <div class="line"><strong>Parameter</strong>: hbbtfac</div> <div class="line"><strong>Description</strong>: A parameter to modulate the temperature at the base of the hot-bottom burning zone in TPAGB stars. (Works only if NUCSYN is defined)</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: wind_multiplier_%d</div> @@ -1317,7 +1255,7 @@ <div class="line"><strong>Parameter</strong>: MINT_metallicity</div> <div class="line"><strong>Description</strong>: This sets the metallicity for MINT. It is ignored if set to -1.0, the default, in which case the normal metallicity parameter is used.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: -1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: gaia_Teff_binwidth</div> @@ -1349,28 +1287,28 @@ <div class="line"><strong>Parameter</strong>: AGB_core_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to use for calculating AGB core masses. 0=Hurley et al. 2002 if no NUCSYN, Karakas 2002 if NUCSYN is defined; 1=Hurley et al. 2002 (overshooting models); 1=Karakas 2002 (non-overshooting models).</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> +<div class="line"><strong>Default value</strong>: 2</div> <div class="line"><strong>Macros</strong>: [‘AGB_CORE_ALGORITHM_DEFAULT = 0’, ‘AGB_CORE_ALGORITHM_HURLEY = 1’, ‘AGB_CORE_ALGORITHM_KARAKAS = 2’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: AGB_radius_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to use for calculating radii on the TPAGB.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> +<div class="line"><strong>Default value</strong>: 2</div> <div class="line"><strong>Macros</strong>: [‘AGB_RADIUS_ALGORITHM_DEFAULT = 0’, ‘AGB_RADIUS_ALGORITHM_HURLEY = 1’, ‘AGB_RADIUS_ALGORITHM_KARAKAS = 2’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: AGB_luminosity_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to use for calculating luminosities on the TPAGB.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> +<div class="line"><strong>Default value</strong>: 2</div> <div class="line"><strong>Macros</strong>: [‘AGB_LUMINOSITY_ALGORITHM_DEFAULT = 0’, ‘AGB_LUMINOSITY_ALGORITHM_HURLEY = 1’, ‘AGB_LUMINOSITY_ALGORITHM_KARAKAS = 2’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: AGB_3dup_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to use for calculating third dredge up efficiency on the TPAGB.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 1</div> +<div class="line"><strong>Default value</strong>: 2</div> <div class="line"><strong>Macros</strong>: [‘AGB_THIRD_DREDGE_UP_ALGORITHM_DEFAULT = 0’, ‘AGB_THIRD_DREDGE_UP_ALGORITHM_HURLEY = 1’, ‘AGB_THIRD_DREDGE_UP_ALGORITHM_KARAKAS = 2’, ‘AGB_THIRD_DREDGE_UP_ALGORITHM_STANCLIFFE = 3’]</div> </div> <div class="line-block"> @@ -1537,6 +1475,24 @@ <div class="line"><strong>Parameter input type</strong>: True|False</div> <div class="line"><strong>Default value</strong>: False</div> </div> +<div class="line-block"> +<div class="line"><strong>Parameter</strong>: degenerate_core_merger_nucsyn</div> +<div class="line"><strong>Description</strong>: If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE)</div> +<div class="line"><strong>Parameter input type</strong>: True|False</div> +<div class="line"><strong>Default value</strong>: False</div> +</div> +<div class="line-block"> +<div class="line"><strong>Parameter</strong>: degenerate_core_helium_merger_ignition</div> +<div class="line"><strong>Description</strong>: If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE)</div> +<div class="line"><strong>Parameter input type</strong>: True|False</div> +<div class="line"><strong>Default value</strong>: True</div> +</div> +<div class="line-block"> +<div class="line"><strong>Parameter</strong>: degenerate_core_merger_dredgeup_fraction</div> +<div class="line"><strong>Description</strong>: If non-zero, mix this fraction of the degenerate core during a merger.(0.0).</div> +<div class="line"><strong>Parameter input type</strong>: Float</div> +<div class="line"><strong>Default value</strong>: 0</div> +</div> </div> <div class="section" id="section-binary"> <h2>Section: binary<a class="headerlink" href="#section-binary" title="Permalink to this headline">¶</a></h2> @@ -1742,7 +1698,7 @@ <div class="line"><strong>Parameter</strong>: post_ce_objects_have_envelopes</div> <div class="line"><strong>Description</strong>: If TRUE then post-common-envelope objects have thin envelopes. You need this if you are to have post-CE post-AGB stars. Note that this <em>may</em> be unstable, i.e. you may end up having many CEEs. The mass in the envelope is controlled by post_ce_adaptive_menv. TRUE by default.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: True</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: PN_comenv_transition_time</div> @@ -1944,20 +1900,22 @@ <div class="line"><strong>Parameter</strong>: type_Ia_MCh_supernova_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to be used when calculating type Ia yields from Chandrasekhar-mass exploders. 0 = DD7 (Iwamoto 1999), 1 = Seitenzahl 2013 3D hydro yields (you must also set Seitenzahl2013_model)</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Macros</strong>: [‘TYPE_IA_MCH_SUPERNOVA_ALGORITHM_DD2 = 0’, ‘TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013 = 1’, ‘TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013_AUTOMATIC = 2’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: Seitenzahl2013_model</div> <div class="line"><strong>Description</strong>: Which of Seitenzahl et al. 2013’s models to use? One of N1,N3,N5,N10,N20,N40,N100L,N100,N100H,N150,N200,N300C,N1600,N1600C,N100_Z0.5,N100_Z0.1,N100_Z0.01 (defaults to N100).</div> <div class="line"><strong>Parameter input type</strong>: String</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: N100</div> <div class="line"><strong>Extra</strong>: N1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: type_Ia_sub_MCh_supernova_algorithm</div> <div class="line"><strong>Description</strong>: Algorithm to be used when calculating type Ia yields from sub-Chandrasekhar-mass exploders. (Currently unused.)</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Macros</strong>: [‘TYPE_IA_SUB_MCH_SUPERNOVA_ALGORITHM_LIVNE_ARNETT_1995 = 0’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: max_HeWD_mass</div> @@ -2719,7 +2677,7 @@ <div class="line"><strong>Parameter</strong>: NeNaMgAl</div> <div class="line"><strong>Description</strong>: Enables NeNaMgAl reaction network. Requires NUCSYN and NUCSYN_HBB.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: True</div> <div class="line"><strong>Extra</strong>: Ignore</div> </div> <div class="line-block"> @@ -2744,21 +2702,23 @@ <div class="line"><strong>Parameter</strong>: nucsyn_metallicity</div> <div class="line"><strong>Description</strong>: This sets the metallicity of the nucleosynthesis algorithms, i.e. the amount (by mass) of matter which is not hydrogen or helium. Usually you’d just set this with the metallicity parameter, but if you want the nucleosynthesis to be outside the range of the stellar evolution algorithm (e.g. Z=0 or Z=0.04) then you need to use nucsyn_metallicity. That said, it’s also outside the range of some of the nucleosynthesis algorithms as well, so you have been warned!</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: -1</div> <div class="line"><strong>Macros</strong>: [‘DEFAULT_TO_METALLICITY = -1’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: nucsyn_solver</div> <div class="line"><strong>Description</strong>: Choose the solver used in nuclear burning. 0 = KAPS_RENTROP is a Kaps-Rentrop scheme (fast, not great for stiff problems), 1 = LSODA (Adams/BSF switcher), 2 = CVODE library (<a class="reference external" href="https://computing.llnl.gov/projects/sundials">https://computing.llnl.gov/projects/sundials</a>. Default 0.</div> <div class="line"><strong>Parameter input type</strong>: Unsigned integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Macros</strong>: [‘NUCSYN_SOLVER_KAPS_RENTROP = 0’, ‘NUCSYN_SOLVER_LSODA = 1’, ‘NUCSYN_SOLVER_CVODE = 2’, ‘NUCSYN_SOLVER_NUMBER = 3’, ‘NUCSYN_SOLVER_KAPS_RENTROP = 0’, ‘NUCSYN_SOLVER_LSODA = 1’, ‘NUCSYN_SOLVER_CVODE = 2’, ‘NUCSYN_SOLVER_NUMBER = 3’]</div> <div class="line"><strong>Extra</strong>: 0</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: initial_abundance_mix</div> <div class="line"><strong>Description</strong>: initial abundance mixture: 0=AG89, 1=Karakas 2002, 2=Lodders 2003, 3=Asplund 2005 (not available?), 4=Garcia Berro, 5=Grevesse Noels 1993</div> <div class="line"><strong>Parameter input type</strong>: Unsigned integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> +<div class="line"><strong>Macros</strong>: [‘NUCSYN_INIT_ABUND_MIX_AG89 = 0’, ‘NUCSYN_INIT_ABUND_MIX_KARAKAS2002 = 1’, ‘NUCSYN_INIT_ABUND_MIX_LODDERS2003 = 2’, ‘NUCSYN_INIT_ABUND_MIX_ASPLUND2005 = 3’, ‘NUCSYN_INIT_ABUND_MIX_GARCIABERRO = 4’, ‘NUCSYN_INIT_ABUND_MIX_GREVESSE_NOELS_1993 = 5’, ‘NUCSYN_INIT_ABUND_MIX_ASPLUND2009 = 6’, ‘NUCSYN_INIT_ABUND_MIX_KOBAYASHI2011_ASPLUND2009 = 7’, ‘NUCSYN_INIT_ABUND_MIX_LODDERS2010 = 8’]</div> <div class="line"><strong>Extra</strong>: 0</div> </div> <div class="line-block"> @@ -2786,43 +2746,44 @@ <div class="line"><strong>Parameter</strong>: init_abunds_only</div> <div class="line"><strong>Description</strong>: If True, outputs only the initial abundances, then exits.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: initial_abunds_only</div> <div class="line"><strong>Description</strong>: If True, outputs only the initial abundances, then exits.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: no_thermohaline_mixing</div> <div class="line"><strong>Description</strong>: If True, disables thermohaline mixing.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: lithium_GB_post_Heflash</div> <div class="line"><strong>Description</strong>: Sets the lithium abundances after the helium flash. Requires NUCSYN and LITHIUM_TABLES.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: lithium_GB_post_1DUP</div> <div class="line"><strong>Description</strong>: Sets the lithium abundance after first dredge up. Requires NUCSYN and LITHIUM_TABLES.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: lithium_hbb_multiplier</div> <div class="line"><strong>Description</strong>: Multiplies the lithium abundances on the AGB during HBB (based on Karakas/Fishlock et al models).Requires NUCSYN and LITHIUM_TABLES.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: angelou_lithium_decay_function</div> <div class="line"><strong>Description</strong>: Functional form which describes Li7 decay. Requires NUCSYN and NUCSYN_ANGELOU_LITHIUM. Choices are: 0 expoential (see angelou_lithium_decay_time).</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> <div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Macros</strong>: [‘ANGELOU_LITHIUM_DECAY_FUNCTION_EXPONENTIAL = 0’]</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: angelou_lithium_LMMS_time</div> @@ -2966,17 +2927,10 @@ <div class="section" id="section-output"> <h2>Section: output<a class="headerlink" href="#section-output" title="Permalink to this headline">¶</a></h2> <div class="line-block"> -<div class="line"><strong>Parameter</strong>: david_logging_function</div> -<div class="line"><strong>Description</strong>: Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions</div> -<div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: 0</div> -<div class="line"><strong>Extra</strong>: Ignore</div> -</div> -<div class="line-block"> <div class="line"><strong>Parameter</strong>: cf_amanda_log</div> <div class="line"><strong>Description</strong>: Enable logging to compare to Amanda’s models.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: float_overflow_checks</div> @@ -3024,7 +2978,7 @@ <div class="line"><strong>Parameter</strong>: legacy_yields</div> <div class="line"><strong>Description</strong>: Turn on ensemble legacy yield output.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: ensemble_defer</div> @@ -3072,31 +3026,31 @@ <div class="line"><strong>Parameter</strong>: EMP_logg_maximum</div> <div class="line"><strong>Description</strong>: Maximum logg that EMP stars are allowed to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_minimum_age.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 4</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: EMP_minimum_age</div> <div class="line"><strong>Description</strong>: Minimum age that EMP stars are required to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 10</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: EMP_feh_maximum</div> <div class="line"><strong>Description</strong>: Maximum [Fe/H] that an EMP stars may have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default -2.0.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: -2</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: CEMP_cfe_minimum</div> <div class="line"><strong>Description</strong>: Minimum [C/Fe] that CEMP stars are required to have. See Izzard et al 2009. See also NEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 0.7.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0.7</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: NEMP_cfe_minimum</div> <div class="line"><strong>Description</strong>: Minimum [N/Fe] that NEMP stars are required to have. See Izzard et al 2009, Pols et al. 2012. See also CEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 1.0.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: thick_disc_start_age</div> @@ -3256,84 +3210,84 @@ <div class="line"><strong>Parameter</strong>: MINT_dir</div> <div class="line"><strong>Description</strong>: Location of MINT algorithm data.</div> <div class="line"><strong>Parameter input type</strong>: String</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>:</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_data_cleanup</div> <div class="line"><strong>Description</strong>: Activate checks on incoming data to try to account for problems. Will make data-loading slower, but may fix a few things.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_MS_rejuvenation</div> <div class="line"><strong>Description</strong>: Turn on or off (hydrogen) main-sequence rejuvenation.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: True</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_remesh</div> <div class="line"><strong>Description</strong>: Turn on or off MINT’s remeshing.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: True</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_use_ZAMS_profiles</div> <div class="line"><strong>Description</strong>: Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.)</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: True</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_fallback_to_test_data</div> <div class="line"><strong>Description</strong>: If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE)</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_disable_grid_load_warnings</div> <div class="line"><strong>Description</strong>: Use this to explicitly disable MINT’s warnings when loading a grid with, e.g., missing or too much data.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_Kippenhahn</div> <div class="line"><strong>Description</strong>: Turn on or off MINT’s Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_nshells</div> <div class="line"><strong>Description</strong>: Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200)</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 200</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_maximum_nshells</div> <div class="line"><strong>Description</strong>: Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000)</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1000</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_minimum_nshells</div> <div class="line"><strong>Description</strong>: Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0)</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 10</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_Kippenhahn_stellar_type</div> <div class="line"><strong>Description</strong>: Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: -1</div> <div class="line"><strong>Macros</strong>: [‘LOW_MASS_MS = 0’, ‘MS = 1’, ‘HG = 2’, ‘GIANT_BRANCH = 3’, ‘CHeB = 4’, ‘EAGB = 5’, ‘TPAGB = 6’, ‘HeMS = 7’, ‘HeHG = 8’, ‘HeGB = 9’, ‘HeWD = 10’, ‘COWD = 11’, ‘ONeWD = 12’, ‘NS = 13’, ‘BH = 14’, ‘MASSLESS_REMNANT = 15’]</div> <div class="line"><strong>Extra</strong>:</div> </div> @@ -3341,7 +3295,7 @@ <div class="line"><strong>Parameter</strong>: MINT_Kippenhahn_companion_stellar_type</div> <div class="line"><strong>Description</strong>: Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output.</div> <div class="line"><strong>Parameter input type</strong>: Integer</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: -1</div> <div class="line"><strong>Macros</strong>: [‘LOW_MASS_MS = 0’, ‘MS = 1’, ‘HG = 2’, ‘GIANT_BRANCH = 3’, ‘CHeB = 4’, ‘EAGB = 5’, ‘TPAGB = 6’, ‘HeMS = 7’, ‘HeHG = 8’, ‘HeGB = 9’, ‘HeWD = 10’, ‘COWD = 11’, ‘ONeWD = 12’, ‘NS = 13’, ‘BH = 14’, ‘MASSLESS_REMNANT = 15’]</div> <div class="line"><strong>Extra</strong>:</div> </div> @@ -3349,21 +3303,21 @@ <div class="line"><strong>Parameter</strong>: MINT_nuclear_burning</div> <div class="line"><strong>Description</strong>: Turn on or off MINT’s nuclear burning algorithm.</div> <div class="line"><strong>Parameter input type</strong>: True|False</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: False</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_minimum_shell_mass</div> <div class="line"><strong>Description</strong>: Minimum shell mass in MINT’s nuclear burning routines.</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 1e-06</div> <div class="line"><strong>Extra</strong>:</div> </div> <div class="line-block"> <div class="line"><strong>Parameter</strong>: MINT_maximum_shell_mass</div> <div class="line"><strong>Description</strong>: Maximum shell mass in MINT’s nuclear burning routines. :</div> <div class="line"><strong>Parameter input type</strong>: Float</div> -<div class="line"><strong>Default value</strong>: NULL</div> +<div class="line"><strong>Default value</strong>: 0.1</div> <div class="line"><strong>Extra</strong>:</div> </div> </div> @@ -3532,7 +3486,7 @@ <a href="grid_options_descriptions.html" class="btn btn-neutral float-right" title="Population grid code options" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> - <a href="notebook_api_functionality.html" class="btn btn-neutral float-left" title="Using the API functionality of binarycpython" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + <a href="notebook_luminosity_function_binaries.html" class="btn btn-neutral float-left" title="Zero-age stellar luminosity function in binaries" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> </div> @@ -3555,9 +3509,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/custom_logging_functions.html b/docs/build/html/custom_logging_functions.html index c7e8dfe67..4903f865a 100644 --- a/docs/build/html/custom_logging_functions.html +++ b/docs/build/html/custom_logging_functions.html @@ -420,9 +420,9 @@ I recommend using this in function in combination with a function that generates provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/distribution_functions.html b/docs/build/html/distribution_functions.html index 2ab05aaf8..dbddacf90 100644 --- a/docs/build/html/distribution_functions.html +++ b/docs/build/html/distribution_functions.html @@ -911,9 +911,9 @@ and is be given by dp/dlogP ~ (logP)^p for all other binary configurations (defa provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/example_notebooks.html b/docs/build/html/example_notebooks.html index 57f157057..ec6f583d0 100644 --- a/docs/build/html/example_notebooks.html +++ b/docs/build/html/example_notebooks.html @@ -95,6 +95,9 @@ <li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -193,7 +196,7 @@ <div class="section" id="example-notebooks"> <h1>Example notebooks<a class="headerlink" href="#example-notebooks" title="Permalink to this headline">¶</a></h1> <p>We have a set of notebooks that explain and show the usage of the binarycpython features. The notebooks are also stored in the examples/ directory in the <a class="reference external" href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master/examples">repository</a></p> -<p>The order of the notebooks below is more or less the recommended order to read.</p> +<p>The order of the notebooks below is more or less the recommended order to read. The last couple of notebooks are example usecases</p> <div class="toctree-wrapper compound"> <p class="caption"><span class="caption-text">Contents:</span></p> <ul> @@ -229,6 +232,22 @@ <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html#Example-usage:">Example usage:</a></li> </ul> </li> +<li class="toctree-l1"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a><ul> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#Setting-up-the-Population-object">Setting up the Population object</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#Adding-grid-variables">Adding grid variables</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#Setting-logging-and-handling-the-output">Setting logging and handling the output</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#Evolving-the-grid">Evolving the grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#ZAMS-Luminosity-distribution-with-the-initial-mass-function">ZAMS Luminosity distribution with the initial mass function</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l1"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a><ul> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html#Setting-up-the-Population-object">Setting up the Population object</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html#Adding-grid-variables">Adding grid variables</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html#Setting-logging-and-handling-the-output">Setting logging and handling the output</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html#Evolving-the-grid">Evolving the grid</a></li> +</ul> +</li> </ul> </div> </div> @@ -267,9 +286,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/functions.html b/docs/build/html/functions.html index 5974c283c..7b864f4e9 100644 --- a/docs/build/html/functions.html +++ b/docs/build/html/functions.html @@ -209,6 +209,20 @@ useful functions for the user</p> </ul> </dd> </dl> +<dl class="py class"> +<dt id="binarycpython.utils.functions.AutoVivificationDict"> +<em class="property">class </em><code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">AutoVivificationDict</code><a class="reference internal" href="_modules/binarycpython/utils/functions.html#AutoVivificationDict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.AutoVivificationDict" title="Permalink to this definition">¶</a></dt> +<dd><p>Bases: <code class="xref py py-class docutils literal notranslate"><span class="pre">dict</span></code></p> +<p>Implementation of perl’s autovivification feature, by overriding the +get item and the __iadd__ operator (<a class="reference external" href="https://docs.python.org/3/reference/datamodel.html?highlight=iadd#object.__iadd__">https://docs.python.org/3/reference/datamodel.html?highlight=iadd#object.__iadd__</a>)</p> +<p>This allows to set values within a subdict that might not exist yet:</p> +<p class="rubric">Example</p> +<p>newdict = {} +newdict[‘example’][‘mass’] += 10 +print(newdict) +>>> {‘example’: {‘mass’: 10}}</p> +</dd></dl> + <dl class="py class"> <dt id="binarycpython.utils.functions.BinaryCEncoder"> <em class="property">class </em><code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">BinaryCEncoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">skipkeys</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">ensure_ascii</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">check_circular</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">allow_nan</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">sort_keys</span><span class="o">=</span><span class="default_value">False</span></em>, <em class="sig-param"><span class="n">indent</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">separators</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">default</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#BinaryCEncoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.BinaryCEncoder" title="Permalink to this definition">¶</a></dt> @@ -241,6 +255,13 @@ useful functions for the user</p> </dd></dl> +<dl class="py function"> +<dt id="binarycpython.utils.functions.bin_data"> +<code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">bin_data</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">value</span></em>, <em class="sig-param"><span class="n">binwidth</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#bin_data"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.bin_data" title="Permalink to this definition">¶</a></dt> +<dd><p>Function that bins the data</p> +<p>Uses the absolute value of binwidth</p> +</dd></dl> + <dl class="py class"> <dt id="binarycpython.utils.functions.binarycDecoder"> <em class="property">class </em><code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">binarycDecoder</code><span class="sig-paren">(</span><em class="sig-param"><span class="o">*</span></em>, <em class="sig-param"><span class="n">object_hook</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parse_float</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parse_int</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">parse_constant</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">strict</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">object_pairs_hook</span><span class="o">=</span><span class="default_value">None</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#binarycDecoder"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.binarycDecoder" title="Permalink to this definition">¶</a></dt> @@ -318,6 +339,12 @@ that we want to export.</p> <dd><p>Function to return the size + a magnitude string</p> </dd></dl> +<dl class="py function"> +<dt id="binarycpython.utils.functions.convfloat"> +<code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">convfloat</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">x</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#convfloat"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.convfloat" title="Permalink to this definition">¶</a></dt> +<dd><p>Convert scalar x to a float if we can, in which case return the float, otherwise just return x without changing it. Usually, x is a string, but could be anything that float() can handle without failure.</p> +</dd></dl> + <dl class="py function"> <dt id="binarycpython.utils.functions.count_keys_recursive"> <code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">count_keys_recursive</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">input_dict</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#count_keys_recursive"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.count_keys_recursive" title="Permalink to this definition">¶</a></dt> @@ -382,6 +409,15 @@ This is done until all the keys are sorted.</p> <p>All objects other than dictionary types are directly return as they are</p> </dd></dl> +<dl class="py function"> +<dt id="binarycpython.utils.functions.datalinedict"> +<code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">datalinedict</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">line</span></em>, <em class="sig-param"><span class="n">parameters</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#datalinedict"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.datalinedict" title="Permalink to this definition">¶</a></dt> +<dd><p>Convert a line of data to a more convenient dictionary. +:param line = a line of data as a string: +:param parameters = a list of the parameter names:</p> +<p>Note: if the parameter is a floating point number, it will be converted to Python’s float type.</p> +</dd></dl> + <dl class="py function"> <dt id="binarycpython.utils.functions.example_parse_output"> <code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">example_parse_output</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">output</span></em>, <em class="sig-param"><span class="n">selected_header</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#example_parse_output"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.example_parse_output" title="Permalink to this definition">¶</a></dt> @@ -736,6 +772,12 @@ it will return the type of what the value would be in the input_dict</p> </dl> </dd></dl> +<dl class="py function"> +<dt id="binarycpython.utils.functions.pad_output_distribution"> +<code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">pad_output_distribution</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">dist</span></em>, <em class="sig-param"><span class="n">binwidth</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#pad_output_distribution"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.pad_output_distribution" title="Permalink to this definition">¶</a></dt> +<dd><p>Given a distribution, dist (a dictionary), which should be binned every binwidth (float), fill the distribution with zeros when there is no data. Note: this changes the data in place.</p> +</dd></dl> + <dl class="py function"> <dt id="binarycpython.utils.functions.parse_binary_c_version_info"> <code class="sig-prename descclassname">binarycpython.utils.functions.</code><code class="sig-name descname">parse_binary_c_version_info</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">version_info_string</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/functions.html#parse_binary_c_version_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.functions.parse_binary_c_version_info" title="Permalink to this definition">¶</a></dt> @@ -985,9 +1027,9 @@ of all the binary_c parameters.</p> provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/genindex.html b/docs/build/html/genindex.html index eae56de59..59a3dccf3 100644 --- a/docs/build/html/genindex.html +++ b/docs/build/html/genindex.html @@ -209,11 +209,13 @@ <td style="width: 33%; vertical-align: top;"><ul> <li><a href="grid.html#binarycpython.utils.grid.Population.add_grid_variable">add_grid_variable() (binarycpython.utils.grid.Population method)</a> </li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li><a href="distribution_functions.html#binarycpython.utils.distribution_functions.Arenou2010_binary_fraction">Arenou2010_binary_fraction() (in module binarycpython.utils.distribution_functions)</a> </li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li><a href="custom_logging_functions.html#binarycpython.utils.custom_logging_functions.autogen_C_logging_code">autogen_C_logging_code() (in module binarycpython.utils.custom_logging_functions)</a> +</li> + <li><a href="functions.html#binarycpython.utils.functions.AutoVivificationDict">AutoVivificationDict (class in binarycpython.utils.functions)</a> </li> </ul></td> </tr></table> @@ -221,6 +223,8 @@ <h2 id="B">B</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="functions.html#binarycpython.utils.functions.bin_data">bin_data() (in module binarycpython.utils.functions)</a> +</li> <li><a href="custom_logging_functions.html#binarycpython.utils.custom_logging_functions.binary_c_log_code">binary_c_log_code() (in module binarycpython.utils.custom_logging_functions)</a> </li> <li><a href="custom_logging_functions.html#binarycpython.utils.custom_logging_functions.binary_c_write_log_code">binary_c_write_log_code() (in module binarycpython.utils.custom_logging_functions)</a> @@ -259,6 +263,8 @@ <li><a href="grid.html#module-binarycpython.utils.grid">module</a> </li> </ul></li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> <li> binarycpython.utils.grid_options_defaults @@ -266,8 +272,6 @@ <li><a href="grid_options_defaults.html#module-binarycpython.utils.grid_options_defaults">module</a> </li> </ul></li> - </ul></td> - <td style="width: 33%; vertical-align: top;"><ul> <li> binarycpython.utils.hpc_functions @@ -335,6 +339,8 @@ <li><a href="functions.html#binarycpython.utils.functions.Capturing">Capturing (class in binarycpython.utils.functions)</a> </li> <li><a href="functions.html#binarycpython.utils.functions.catchtime">catchtime (class in binarycpython.utils.functions)</a> +</li> + <li><a href="grid.html#binarycpython.utils.grid.Population.clean">clean() (binarycpython.utils.grid.Population method)</a> </li> <li><a href="plot_functions.html#binarycpython.utils.plot_functions.color_by_index">color_by_index() (in module binarycpython.utils.plot_functions)</a> </li> @@ -349,6 +355,8 @@ </li> </ul></li> <li><a href="functions.html#binarycpython.utils.functions.convert_bytes">convert_bytes() (in module binarycpython.utils.functions)</a> +</li> + <li><a href="functions.html#binarycpython.utils.functions.convfloat">convfloat() (in module binarycpython.utils.functions)</a> </li> <li><a href="distribution_functions.html#binarycpython.utils.distribution_functions.cosmic_SFH_madau_dickinson2014">cosmic_SFH_madau_dickinson2014() (in module binarycpython.utils.distribution_functions)</a> </li> @@ -368,12 +376,14 @@ <h2 id="D">D</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> - <li><a href="functions.html#binarycpython.utils.functions.binarycDecoder.decode">decode() (binarycpython.utils.functions.binarycDecoder method)</a> + <li><a href="functions.html#binarycpython.utils.functions.datalinedict">datalinedict() (in module binarycpython.utils.functions)</a> </li> - <li><a href="functions.html#binarycpython.utils.functions.BinaryCEncoder.default">default() (binarycpython.utils.functions.BinaryCEncoder method)</a> + <li><a href="functions.html#binarycpython.utils.functions.binarycDecoder.decode">decode() (binarycpython.utils.functions.binarycDecoder method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="functions.html#binarycpython.utils.functions.BinaryCEncoder.default">default() (binarycpython.utils.functions.BinaryCEncoder method)</a> +</li> <li><a href="plot_functions.html#binarycpython.utils.plot_functions.dummy">dummy() (in module binarycpython.utils.plot_functions)</a> </li> <li><a href="distribution_functions.html#binarycpython.utils.distribution_functions.duquennoy1991">duquennoy1991() (in module binarycpython.utils.distribution_functions)</a> @@ -591,6 +601,8 @@ <h2 id="P">P</h2> <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="functions.html#binarycpython.utils.functions.pad_output_distribution">pad_output_distribution() (in module binarycpython.utils.functions)</a> +</li> <li><a href="functions.html#binarycpython.utils.functions.parse_binary_c_version_info">parse_binary_c_version_info() (in module binarycpython.utils.functions)</a> </li> <li><a href="grid.html#binarycpython.utils.grid.Population.parse_cmdline">parse_cmdline() (binarycpython.utils.grid.Population method)</a> @@ -604,11 +616,11 @@ <li><a href="plot_functions.html#binarycpython.utils.plot_functions.plot_HR_diagram">plot_HR_diagram() (in module binarycpython.utils.plot_functions)</a> </li> <li><a href="plot_functions.html#binarycpython.utils.plot_functions.plot_masses">plot_masses() (in module binarycpython.utils.plot_functions)</a> -</li> - <li><a href="plot_functions.html#binarycpython.utils.plot_functions.plot_orbit">plot_orbit() (in module binarycpython.utils.plot_functions)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="plot_functions.html#binarycpython.utils.plot_functions.plot_orbit">plot_orbit() (in module binarycpython.utils.plot_functions)</a> +</li> <li><a href="plot_functions.html#binarycpython.utils.plot_functions.plot_system">plot_system() (in module binarycpython.utils.plot_functions)</a> </li> <li><a href="distribution_functions.html#binarycpython.utils.distribution_functions.poisson">poisson() (in module binarycpython.utils.distribution_functions)</a> @@ -641,12 +653,14 @@ </li> <li><a href="functions.html#binarycpython.utils.functions.remove_file">remove_file() (in module binarycpython.utils.functions)</a> </li> - <li><a href="grid.html#binarycpython.utils.grid.Population.return_all_info">return_all_info() (binarycpython.utils.grid.Population method)</a> + <li><a href="grid.html#binarycpython.utils.grid.Population.rename_grid_variable">rename_grid_variable() (binarycpython.utils.grid.Population method)</a> </li> - <li><a href="grid.html#binarycpython.utils.grid.Population.return_binary_c_defaults">return_binary_c_defaults() (binarycpython.utils.grid.Population method)</a> + <li><a href="grid.html#binarycpython.utils.grid.Population.return_all_info">return_all_info() (binarycpython.utils.grid.Population method)</a> </li> </ul></td> <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="grid.html#binarycpython.utils.grid.Population.return_binary_c_defaults">return_binary_c_defaults() (binarycpython.utils.grid.Population method)</a> +</li> <li><a href="grid.html#binarycpython.utils.grid.Population.return_binary_c_version_info">return_binary_c_version_info() (binarycpython.utils.grid.Population method)</a> <ul> @@ -700,12 +714,20 @@ <table style="width: 100%" class="indextable genindextable"><tr> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="functions.html#binarycpython.utils.functions.update_dicts">update_dicts() (in module binarycpython.utils.functions)</a> +</li> + </ul></td> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="grid.html#binarycpython.utils.grid.Population.update_grid_variable">update_grid_variable() (binarycpython.utils.grid.Population method)</a> </li> </ul></td> </tr></table> <h2 id="V">V</h2> <table style="width: 100%" class="indextable genindextable"><tr> + <td style="width: 33%; vertical-align: top;"><ul> + <li><a href="grid.html#binarycpython.utils.grid.Population.vb1print">vb1print() (binarycpython.utils.grid.Population method)</a> +</li> + </ul></td> <td style="width: 33%; vertical-align: top;"><ul> <li><a href="functions.html#binarycpython.utils.functions.verbose_print">verbose_print() (in module binarycpython.utils.functions)</a> </li> @@ -760,9 +782,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/grid.html b/docs/build/html/grid.html index 35540c71a..540448534 100644 --- a/docs/build/html/grid.html +++ b/docs/build/html/grid.html @@ -202,8 +202,6 @@ <span id="grid-class-module"></span><h1>grid_class module<a class="headerlink" href="#module-binarycpython.utils.grid" title="Permalink to this headline">¶</a></h1> <p>Module containing the Population grid class object.</p> <p>Here all the functionality of a Population object is defined.</p> -<p>Useful for the user to understand the functionality, -but copying functionality isn’t recommended except if you know what you are doing</p> <dl class="simple"> <dt>Tasks:</dt><dd><ul class="simple"> <li><p>TODO: add functionality to ‘on-init’ set arguments</p></li> @@ -220,7 +218,6 @@ but copying functionality isn’t recommended except if you know what you are do <li><p>TODO: uncomment and implement the HPC functionality</p></li> <li><p>TODO: think of a clean and nice way to unload and remove the custom_logging_info library from memory (and from disk)</p></li> <li><p>TODO: think of a nice way to remove the loaded grid_code/ generator from memory.</p></li> -<li><p>TODO: Create a designated dict for results</p></li> </ul> </dd> </dl> @@ -312,12 +309,25 @@ the lower edge of the value range) or ‘centred’ </dl> </dd></dl> +<dl class="py method"> +<dt id="binarycpython.utils.grid.Population.clean"> +<code class="sig-name descname">clean</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.clean"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.clean" title="Permalink to this definition">¶</a></dt> +<dd><p>Clean the contents of the population object so it can be reused.</p> +<p>Calling _pre_run_cleanup()</p> +<p>TODO: decide to deprecate this function</p> +<dl class="field-list simple"> +<dt class="field-odd">Return type</dt> +<dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">None</span></code></p> +</dd> +</dl> +</dd></dl> + <dl class="py method"> <dt id="binarycpython.utils.grid.Population.evolve"> <code class="sig-name descname">evolve</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.evolve"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.evolve" title="Permalink to this definition">¶</a></dt> <dd><p>Entry point function of the whole object. From here, based on the settings, we set up a SLURM or CONDOR grid, or if no setting is given we go straight -to evolving the population</p> +to evolving the population.</p> <dl class="simple"> <dt>There are no direct arguments to this function, rather it is based on the grid_options settings:</dt><dd><p>grid_options[‘slurm’]: integer Boolean whether to use a slurm_grid evolution grid_options[‘condor’]: integer Boolean whether to use a condor_grid evolution</p> @@ -325,8 +335,9 @@ grid_options[‘condor’]: integer Boolean whether to use a condor_grid evoluti </dl> <p>If neither of the above is set, we continue without using HPC routines (that doesn’t mean this cannot be run on a server with many cores)</p> -<p>Returns an dictionary containing the analytics of the run -TODO: change the way this is done. Slurm & CONDOR should probably do this different</p> +<p>Returns an dictionary containing the analytics of the run</p> +<p>TODO: change the way this is done. Slurm & CONDOR should probably do this different +NOTE: SLURM and CONDOR options are not working properly yet</p> <dl class="field-list simple"> <dt class="field-odd">Return type</dt> <dd class="field-odd"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">None</span></code></p> @@ -422,6 +433,27 @@ can change to ints.</p> </dl> </dd></dl> +<dl class="py method"> +<dt id="binarycpython.utils.grid.Population.rename_grid_variable"> +<code class="sig-name descname">rename_grid_variable</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">oldname</span></em>, <em class="sig-param"><span class="n">newname</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.rename_grid_variable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.rename_grid_variable" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to rename a grid variable.</p> +<p>note: this does NOT alter the order +of the self.grid_options[“_grid_variablesâ€] dictionary.</p> +<p>The order in which the grid variables are loaded into the grid is based on their +<cite>grid_variable_number</cite> property</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>oldname</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – old name of the grid variable</p></li> +<li><p><strong>newname</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – new name of the grid variable</p></li> +</ul> +</dd> +<dt class="field-even">Return type</dt> +<dd class="field-even"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">None</span></code></p> +</dd> +</dl> +</dd></dl> + <dl class="py method"> <dt id="binarycpython.utils.grid.Population.return_all_info"> <code class="sig-name descname">return_all_info</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">include_population_settings</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">include_binary_c_defaults</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">include_binary_c_version_info</span><span class="o">=</span><span class="default_value">True</span></em>, <em class="sig-param"><span class="n">include_binary_c_help_all</span><span class="o">=</span><span class="default_value">True</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.return_all_info"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.return_all_info" title="Permalink to this definition">¶</a></dt> @@ -504,6 +536,32 @@ in the self.grid_options</p> <p>If nothing is passed then we just use the default options</p> </dd></dl> +<dl class="py method"> +<dt id="binarycpython.utils.grid.Population.update_grid_variable"> +<code class="sig-name descname">update_grid_variable</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">name</span></em>, <em class="sig-param"><span class="o">**</span><span class="n">kwargs</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.update_grid_variable"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.update_grid_variable" title="Permalink to this definition">¶</a></dt> +<dd><p>Function to update the values of a grid variable.</p> +<dl class="field-list simple"> +<dt class="field-odd">Parameters</dt> +<dd class="field-odd"><ul class="simple"> +<li><p><strong>name</strong> (<code class="xref py py-class docutils literal notranslate"><span class="pre">str</span></code>) – name of the grid variable to be changed.</p></li> +<li><p><strong>**kwargs</strong> – key-value pairs to override the existing grid variable data. See add_grid_variable for these names.</p></li> +</ul> +</dd> +<dt class="field-even">Return type</dt> +<dd class="field-even"><p><code class="xref py py-obj docutils literal notranslate"><span class="pre">None</span></code></p> +</dd> +</dl> +</dd></dl> + +<dl class="py method"> +<dt id="binarycpython.utils.grid.Population.vb1print"> +<code class="sig-name descname">vb1print</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">ID</span></em>, <em class="sig-param"><span class="n">now</span></em>, <em class="sig-param"><span class="n">system_number</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.vb1print"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.vb1print" title="Permalink to this definition">¶</a></dt> +<dd><p>Verbosity-level 1 printing, to keep an eye on a grid. +:param ID: thread ID for debugging (int) +:param now: the time now as a UNIX-style epoch in seconds (float) +:param system_number: the system number</p> +</dd></dl> + <dl class="py method"> <dt id="binarycpython.utils.grid.Population.write_binary_c_calls_to_file"> <code class="sig-name descname">write_binary_c_calls_to_file</code><span class="sig-paren">(</span><em class="sig-param"><span class="n">output_dir</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">output_filename</span><span class="o">=</span><span class="default_value">None</span></em>, <em class="sig-param"><span class="n">include_defaults</span><span class="o">=</span><span class="default_value">False</span></em><span class="sig-paren">)</span><a class="reference internal" href="_modules/binarycpython/utils/grid.html#Population.write_binary_c_calls_to_file"><span class="viewcode-link">[source]</span></a><a class="headerlink" href="#binarycpython.utils.grid.Population.write_binary_c_calls_to_file" title="Permalink to this definition">¶</a></dt> @@ -575,9 +633,9 @@ like m1,m2,sep, orb-per, ecc, probability etc.</p> provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/grid_options_defaults.html b/docs/build/html/grid_options_defaults.html index 151d7f683..4a2331f54 100644 --- a/docs/build/html/grid_options_defaults.html +++ b/docs/build/html/grid_options_defaults.html @@ -308,9 +308,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/grid_options_descriptions.html b/docs/build/html/grid_options_descriptions.html index 65faf9f07..2f50ad947 100644 --- a/docs/build/html/grid_options_descriptions.html +++ b/docs/build/html/grid_options_descriptions.html @@ -190,7 +190,7 @@ <div class="section" id="population-grid-code-options"> <h1>Population grid code options<a class="headerlink" href="#population-grid-code-options" title="Permalink to this headline">¶</a></h1> <p>The following chapter contains all grid code options, along with their descriptions -There are 1 options that are not described yet.</p> +There are 2 options that are not described yet.</p> <div class="section" id="public-options"> <h2>Public options<a class="headerlink" href="#public-options" title="Permalink to this headline">¶</a></h2> <p>The following options are meant to be changed by the user.</p> @@ -234,6 +234,9 @@ There are 1 options that are not described yet.</p> <div class="line"><strong>log_args_dir</strong>: Directory to log the arguments to. Unused</div> </div> <div class="line-block"> +<div class="line"><strong>log_dt</strong>: No description available yet</div> +</div> +<div class="line-block"> <div class="line"><strong>log_file</strong>: Log file for the population object. Unused</div> </div> <div class="line-block"> @@ -252,7 +255,7 @@ There are 1 options that are not described yet.</p> <div class="line"><strong>multiplicity_fraction_function</strong>: Which multiplicity fraction function to use. 0: None, 1: Arenou 2010, 2: Rhagavan 2010, 3: M&S 2017</div> </div> <div class="line-block"> -<div class="line"><strong>parse_function</strong>: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the grid_options[‘results’] dictionary, or just output results to a file</div> +<div class="line"><strong>parse_function</strong>: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the self.grid_results dictionary, or just output results to a file</div> </div> <div class="line-block"> <div class="line"><strong>repeat</strong>: Factor of how many times a system should be repeated. Consider the evolution splitting binary_c argument for supernovae kick repeating.</div> @@ -479,9 +482,9 @@ q extrapolation (below 0.15) method provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/hpc_functions.html b/docs/build/html/hpc_functions.html index eaeff7cea..8369b0da4 100644 --- a/docs/build/html/hpc_functions.html +++ b/docs/build/html/hpc_functions.html @@ -239,9 +239,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/index.html b/docs/build/html/index.html index 66993241b..5ff56a81b 100644 --- a/docs/build/html/index.html +++ b/docs/build/html/index.html @@ -238,12 +238,13 @@ <p>For this it is best to set up a virtual environment. Activate the virtualenvironment and enter the cloned version of the repo.</p> <p>Then run:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> +<span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">uninstall</span> <span class="n">binarycpython</span> <span class="o">&&</span> <span class="n">rm</span> <span class="n">dist</span><span class="o">/*</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> </pre></div> </div> -<p>You can find the version of this package in setup.py.</p> +<p>This will clean the build directory, remove binarycpython from the venv, remove the dist packages, and then rebuilding and reinstalling the package. You can find the version of this package in setup.py.</p> <p>This will install this package into the virtual environment. Making changes to the sourcecode can be “installed†into the virtual env with the same command.</p> <p>If this is not the first time you install the package, but rather rebuild it because you make changes in either binary_c or binarycpython, you should ignore the currently installed version, and also skip installing the dependencies again, by executing the following command:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">ignore</span><span class="o">-</span><span class="n">installed</span> <span class="o">--</span><span class="n">no</span><span class="o">-</span><span class="n">dependencies</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">uninstall</span> <span class="n">binarycpython</span> <span class="o">&&</span> <span class="n">rm</span> <span class="n">dist</span><span class="o">/*</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">ignore</span><span class="o">-</span><span class="n">installed</span> <span class="o">--</span><span class="n">no</span><span class="o">-</span><span class="n">dependencies</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> </pre></div> </div> <div class="section" id="after-installation"> @@ -316,6 +317,9 @@ <li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a><ul> @@ -382,9 +386,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/modules.html b/docs/build/html/modules.html index 076e1dc8c..84f5c150a 100644 --- a/docs/build/html/modules.html +++ b/docs/build/html/modules.html @@ -250,9 +250,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_api_functionality.html b/docs/build/html/notebook_api_functionality.html index c4b2e364a..155f85e6b 100644 --- a/docs/build/html/notebook_api_functionality.html +++ b/docs/build/html/notebook_api_functionality.html @@ -39,7 +39,7 @@ <link rel="index" title="Index" href="genindex.html" /> <link rel="search" title="Search" href="search.html" /> - <link rel="next" title="Binary_c parameters" href="binary_c_parameters.html" /> + <link rel="next" title="Example use case: Zero-age stellar luminosity function" href="notebook_luminosity_function_single.html" /> <link rel="prev" title="Extra features and functionality of binarycpython" href="notebook_extra_features.html" /> </head> @@ -102,6 +102,9 @@ </li> </ul> </li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -451,7 +454,7 @@ div.rendered_html tbody tr:hover { <p>Binarycpython uses the Python-C extension framework to interface Python with C. The sourcecode for this is contained in <code class="docutils literal notranslate"><span class="pre">src/binary_c_python.c</span></code>, and the functions are available via <code class="docutils literal notranslate"><span class="pre">from</span> <span class="pre">binarycpython</span> <span class="pre">import</span> <span class="pre">_binary_c_bindings</span></code>.</p> <p>The following functions are available through the API: (run cell below)</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[2]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[1]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -472,35 +475,67 @@ NAME FUNCTIONS free_persistent_data_memaddr_and_return_json_output(...) - Frees the persistent_data memory and returns the json output + Frees the persistent_data memory and returns the json output. + + Arguments: + store capsule: capsule containing the memory adress of the persistent data object (contains the ensemble) free_store_memaddr(...) - Frees the store memaddr + Frees the store memaddr. + + Arguments: + store capsule: capsule containing the memory adress of the store object return_arglines(...) Return the default args for a binary_c system + Arguments: + No arguments. + return_help(...) Return the help info for a given parameter + Arguments: + parameter: parameter name. + return_help_all(...) Return an overview of all the parameters, their description, categorized in sections + Arguments: + No arguments. + return_maximum_mass_ratio_for_RLOF(...) - Returns a string containing the maximum mass ratio for which a binary system does not RLOF at zams. Optionally accepts a store_capsule. Please use the wrapper functions in utils for this except when you know what you're doing + Returns a string containing the maximum mass ratio for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing. + + Arguments: + argstring: argument string for binary_c + (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null return_minimum_orbit_for_RLOF(...) - Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at zams. Please use the wrapper functions in utils for this except when you know what you're doing + Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing. + + Arguments: + argstring: argument string for binary_c + (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null return_persistent_data_memaddr(...) Return the store memory adress that will be passed to run_population + Arguments: + No arguments. + return_store_memaddr(...) Return the store memory adress that will be passed to run_population + Arguments: + No arguments. + return_version_info(...) Return the version information of the used binary_c build + Arguments: + No arguments. + run_system(...) Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things. @@ -550,7 +585,7 @@ FILE <div class="section" id="Setting-up,-using-and-freeing-store"> <h3>Setting up, using and freeing store<a class="headerlink" href="#Setting-up,-using-and-freeing-store" title="Permalink to this headline">¶</a></h3> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[10]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[2]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -583,8 +618,8 @@ FILE </div> <div class="output_area docutils container"> <div class="highlight"><pre> -<capsule object "STORE" at 0x7f163859d0c0> -SINGLE_STAR_LIFETIME 10 27.7358 +<capsule object "STORE" at 0x7fa6a45ed180> +SINGLE_STAR_LIFETIME 10 28.4838 </pre></div></div> </div> @@ -593,7 +628,7 @@ SINGLE_STAR_LIFETIME 10 27.7358 <h3>Getting information from binary_c<a class="headerlink" href="#Getting-information-from-binary_c" title="Permalink to this headline">¶</a></h3> <p>We can get information for a parameter via return_help(parameter_name): This will return an unparsed output</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[11]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[3]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -619,7 +654,7 @@ Default : 0 </div> <p>We can get information on all available parameters via return_help(parameter_name):</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[16]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[4]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -695,6 +730,9 @@ equation_of_state_algorithm : Set the equation of state algorithm. 0 = Paczynski opacity_algorithm : Set the opacity algorithm. 0 = Paczynski, 1 = Ferguson/Opal. : (null) wind_mass_loss : Defines the algorithm used for stellar winds. 0 = none, 1 = Hurley et al. (2002), 2 = Schneider (2018). : 0 gbwind : Wind prescription for first red giant branch stars. 0=Reimers (Hurley et al 2000/2002; choose gb_reimers_eta=0.5 for their mass loss rate), 1=Schroeder+Cuntz 2005 (set gb_reimers_eta=1.0 for their mass loss rate). : (null) +postagbwind : Apply special post-(A)GB prescription. Default is POSTAGB_WIND_USE_GIANT which means we just use whatever is prescribed on the giant branch. Other options include: POSTAGB_WIND_NONE = 1 (no wind on the post (A)GB), POSTAGB_WIND_KRTICKA2020 = 2 which uses Krticka, Kubát and Krticková (2020, A&A 635, A173). : (null) +Teff_postAGB_min : The minimum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_max. (6000 K) : (null) +Teff_postAGB_max : The maximum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_min. (120000 K) : (null) mattsson_Orich_tpagbwind : Experimental : turns on Mattsson's TPAGB wind when the star is oxygen rich. Requires MATTSSON_MASS_LOSS. : (null) magnetic_braking_factor : Multiplier for the magnetic braking angular momentum loss rate. : (null) magnetic_braking_gamma : gamma factor in Rappaport style magnetic braking expression. : (null) @@ -714,7 +752,9 @@ superwind_mira_switchon : In the Vassiliadis and Wood (1993) AGB wind prescripti vw93_mira_shift : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate depends on the Mira period plus this offset. Requires VW93_MIRA_SHIFT. : (null) vw93_multiplier : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate is multiplied by this factor. Requires VW93_MULTIPLIER. : (null) tpagb_reimers_eta : TPAGB Reimers wind multiplication factor, cf. eta in Reimers' mass loss formula. (This multiplies the 4e-13 in Reimers' formula, or the 8e-14 in Schroeder and Cuntz.) Note that Reimers is not the default TPAGB wind prescription. See also tpagbwind. : (null) +Tout_Pringle_1992_multiplier : Multiplier for the Tout & Pringle (1992) magnetic wind. (0.0) : (null) artificial_mass_accretion_rate%d : Constant mass accretion rate for star <n>. : (null) +artificial_mass_accretion_rate_by_stellar_type%d : Constant mass accretion rate for stellar type <n>. : (null) artificial_angular_momentum_accretion_rate%d : Constant angular momentum accretion for star <n>. : (null) artificial_orbital_angular_momentum_accretion_rate : Constant angular momentum accretion rate on the orbit. : (null) artificial_accretion_start_time : Time at which artificial accretion stars. Ignored if <0 (default is -1). : (null) @@ -722,8 +762,7 @@ artificial_accretion_end_time : Time at which artificial accretion ends. Ignored wr_wind : Massive-star (WR) wind prescription. 0 = Hurley et al 2000/2002, 1=Maeder and Meynet, 2=Nugis and Lamers, 3=John Eldridge's version of Vink's early-2000s wind (See Lynnette Dray's thesis, or John Eldridge's thesis) : (null) wr_wind_fac : Massive-star (WR) wind multiplication factor. : (null) wrwindfac : Massive-star (WR) wind multiplication factor. Synonymous with wr_wind_fac (which you should use instead). : (null) -BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. 0=Hurley et al 2000/2002, 1=Belczynski (early 2000s). : (null) -PPISN_prescription : (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. : Ignore +BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. BH_HURLEY2002 = 0 = Hurley et al 2000/2002, BH_BELCZYNSKI = 1 = Belczynski (early 2000s), BH_SPERA2015 = Spera+ 2015, BH_FRYER12_DELAYED = 3 = Fryer et al. (2012) delayed prescription, BH_FRYER12_RAPID = 4 = Fryer et al. (2012) rapid prescription, BH_FRYER12_STARTRACK = 5 = Fryer et al. (2012) startrack prescription. : (null) sn_kick_distribution_II : Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_distribution_ECAP : Set the distribution of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_distribution_NS_NS : Set the distribution of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) @@ -735,9 +774,6 @@ sn_kick_distribution_BH_BH : Set the distribution of speeds applied to black hol sn_kick_distribution_BH_NS : Set the distribution of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_distribution_IA_Hybrid_HeCOWD : Set the distribution of speeds applied to any survivor of a hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_distribution_IA_Hybrid_HeCOWD_subluminous : Set the distribution of speeds applied to any survivor of a subluminous hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_distribution_PPISN : Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_distribution_PISN : Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_distribution_PHDIS : Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_dispersion_II : Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_dispersion_ECAP : Set the dispersion of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_dispersion_NS_NS : Set the dispersion of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) @@ -749,9 +785,6 @@ sn_kick_dispersion_BH_BH : Set the dispersion of speeds applied to black holes f sn_kick_dispersion_BH_NS : Set the dispersion of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_dispersion_IA_Hybrid_HeCOWD : Set the dispersion of speeds applied to the survivor of a SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_dispersion_IA_Hybrid_HeCOWD_subluminous : Set the dispersion of speeds applied to the survivor of a subluminous SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_dispersion_PPISN : Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_dispersion_PISN : Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) -sn_kick_dispersion_PHDIS : Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null) sn_kick_companion_IA_He : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) sn_kick_companion_IA_ELD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia ELD (sub-Mch) supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) sn_kick_companion_IA_CHAND : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia Mch supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) @@ -772,9 +805,6 @@ sn_kick_companion_BH_BH : Set the speed (if >=0) of, or the algothim (if < sn_kick_companion_BH_NS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a black hole merges with a neutron star. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) sn_kick_companion_IA_Hybrid_HeCOWD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) sn_kick_companion_IA_Hybrid_HeCOWD_subluminous : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a subluminous hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) -sn_kick_companion_PPISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) -sn_kick_companion_PISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) -sn_kick_companion_PHDIS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null) wd_sigma : Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. : (null) wd_kick_direction : Set the direction of white dwarf kicks. 0 = random, 1 = up, 2 = forward, 3 = backward, 4 = inward, 5 = outward. Requires WD_KICKS. : (null) wd_kick_when : Decide when to kick a white dwarf. 0=at birth, 1=at first RLOF, 2=at given pulse number (see wd_kick_pulse_number), 3 at every pulse Requires WD_KICKS. : (null) @@ -847,6 +877,11 @@ PN_fast_wind_mdot_AGB : The envelope mass below which fast wind used during the HeWD_HeWD_ignition_mass : HeWD-HeWD mergers above this mass reignite helium. (0.3) : (null) wind_Nieuwenhuijzen_luminosity_lower_limit : Above this luminosity we activate the Nieuwenhuijzen and de Jager wind (4e3 Lsun). : (null) wind_LBV_luminosity_lower_limit : Above this luminosity we activate the LBV wind (6e5 Lsun). : (null) +colour%d : Sets colour %d (0 to NUM_ANSI_COLOURS-1) to the extended ANSI set colour you choose (1-255, 0 means ignore). The colour numbers are defined in src/logging/ansi_colours.h : (null) +apply_Darwin_Radau_correction : Apply Darwin-Radau correction to the moment of inertia to take rotation into account? : (null) +degenerate_core_merger_nucsyn : If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) : (null) +degenerate_core_helium_merger_ignition : If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) : (null) +degenerate_core_merger_dredgeup_fraction : If non-zero, mix this fraction of the degenerate core during a merger.(0.0). : (null) ############################################################ ##### Section Binary @@ -1113,7 +1148,6 @@ angelou_lithium_vrotfrac_trigger : Fraction of Keplerian (breakup) equatorial ro ############################################################ ##### Section Output ############################################################ -david_logging_function : Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions : Ignore cf_amanda_log : Enable logging to compare to Amanda's models. : (null) float_overflow_checks : Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) : (null) save_pre_events_stardata : Enable this to save a copy of stardata to stardata->pre_events_stardata just before an event. : (null) @@ -1143,6 +1177,7 @@ escape_velocity : A parameter used in constructing galactic chemical evolution ( escape_fraction : A parameter used in constructing galactic chemical evolution (GCE) models. If the stellar wind velocity exceeds this value, any chemical yield from the wind is ignored, i.e. assumed lost. (km/s) Requires NUCSYN_GCE_OUTFLOW_CHECKS. Default 0.0. See also escape_velocity. : (null) colour_log : If set to True, thelog is coloured with ANSI colour formatting. Requires FILE_LOG to be defined. : log_filename : Location of the output logging filename. If set to "/dev/null" then there is no logging. : +log_arrows : Add arrows to the output log to show whether values are increasing or decreasing. : stopfile : File which, when it exists, will stop the current binary_c repeat run. : stardata_dump_filename : Location of the stardata dump file. : stardata_load_filename : Location of the stardata file to load. : @@ -1167,8 +1202,12 @@ MINT_data_cleanup : Activate checks on incoming data to try to account for probl MINT_MS_rejuvenation : Turn on or off (hydrogen) main-sequence rejuvenation. : MINT_remesh : Turn on or off MINT's remeshing. : MINT_use_ZAMS_profiles : Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) : +MINT_fallback_to_test_data : If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) : MINT_disable_grid_load_warnings : Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. : MINT_Kippenhahn : Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. : +MINT_nshells : Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) : +MINT_maximum_nshells : Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) : +MINT_minimum_nshells : Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) : MINT_Kippenhahn_stellar_type : Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. : MINT_Kippenhahn_companion_stellar_type : Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. : MINT_nuclear_burning : Turn on or off MINT's nuclear burning algorithm. : @@ -1216,7 +1255,7 @@ list_args : Display list of arguments with their default values. Useful for batc </div> <p>We can get all the parameter names and their default values with return_arglines(): (abridged output)</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[20]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[5]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -1237,7 +1276,7 @@ M_1 = 0 </div> <p>Lastly, we can ask binary_c to determine the minimum period or maximum mass for RLOF at the ZAMS: Both of them need an argstring as input</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[6]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -1269,7 +1308,7 @@ MINIMUM PERIOD 0.00632092 </pre></div></div> </div> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[46]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -1321,7 +1360,7 @@ MAXIMUM MASS RATIO 0.0141 <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> - <a href="binary_c_parameters.html" class="btn btn-neutral float-right" title="Binary_c parameters" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + <a href="notebook_luminosity_function_single.html" class="btn btn-neutral float-right" title="Example use case: Zero-age stellar luminosity function" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> <a href="notebook_extra_features.html" class="btn btn-neutral float-left" title="Extra features and functionality of binarycpython" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> @@ -1347,9 +1386,9 @@ MAXIMUM MASS RATIO 0.0141 provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_api_functionality.ipynb b/docs/build/html/notebook_api_functionality.ipynb index d81c31711..8d454880c 100644 --- a/docs/build/html/notebook_api_functionality.ipynb +++ b/docs/build/html/notebook_api_functionality.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "ded7eaf6-e1ba-46c2-9f6f-9ebcb14a264d", "metadata": {}, "outputs": [ @@ -30,37 +30,69 @@ "\n", "FUNCTIONS\n", " free_persistent_data_memaddr_and_return_json_output(...)\n", - " Frees the persistent_data memory and returns the json output\n", + " Frees the persistent_data memory and returns the json output.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the persistent data object (contains the ensemble)\n", " \n", " free_store_memaddr(...)\n", - " Frees the store memaddr\n", + " Frees the store memaddr.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the store object\n", " \n", " return_arglines(...)\n", " Return the default args for a binary_c system\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_help(...)\n", " Return the help info for a given parameter\n", + " \n", + " Arguments:\n", + " parameter: parameter name.\n", " \n", " return_help_all(...)\n", " Return an overview of all the parameters, their description, categorized in sections\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_maximum_mass_ratio_for_RLOF(...)\n", - " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at zams. Optionally accepts a store_capsule. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_minimum_orbit_for_RLOF(...)\n", - " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at zams. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_persistent_data_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_store_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_version_info(...)\n", " Return the version information of the used binary_c build\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " run_system(...)\n", - " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things. \n", + " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things.\n", " \n", " Arguments:\n", " argstring: argument string for binary_c\n", @@ -126,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "10a74d5a-a3d5-4543-a5bc-20d1fe885bb4", "metadata": {}, "outputs": [ @@ -134,8 +166,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "<capsule object \"STORE\" at 0x7f163859d0c0>\n", - "SINGLE_STAR_LIFETIME 10 27.7358\n", + "<capsule object \"STORE\" at 0x7fa6a45ed180>\n", + "SINGLE_STAR_LIFETIME 10 28.4838\n", "\n" ] } @@ -183,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "318874f6-7acf-49bb-9786-299d4dffc0b3", "metadata": {}, "outputs": [ @@ -217,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "id": "d7e757ae-579c-42a2-a310-f0401b7800e8", "metadata": { "scrolled": true, @@ -291,6 +323,9 @@ "opacity_algorithm : Set the opacity algorithm. 0 = Paczynski, 1 = Ferguson/Opal. : (null)\n", "wind_mass_loss : Defines the algorithm used for stellar winds. 0 = none, 1 = Hurley et al. (2002), 2 = Schneider (2018). : 0\n", "gbwind : Wind prescription for first red giant branch stars. 0=Reimers (Hurley et al 2000/2002; choose gb_reimers_eta=0.5 for their mass loss rate), 1=Schroeder+Cuntz 2005 (set gb_reimers_eta=1.0 for their mass loss rate). : (null)\n", + "postagbwind : Apply special post-(A)GB prescription. Default is POSTAGB_WIND_USE_GIANT which means we just use whatever is prescribed on the giant branch. Other options include: POSTAGB_WIND_NONE = 1 (no wind on the post (A)GB), POSTAGB_WIND_KRTICKA2020 = 2 which uses Krticka, Kubát and Krticková (2020, A&A 635, A173). : (null)\n", + "Teff_postAGB_min : The minimum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_max. (6000 K) : (null)\n", + "Teff_postAGB_max : The maximum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_min. (120000 K) : (null)\n", "mattsson_Orich_tpagbwind : Experimental : turns on Mattsson's TPAGB wind when the star is oxygen rich. Requires MATTSSON_MASS_LOSS. : (null)\n", "magnetic_braking_factor : Multiplier for the magnetic braking angular momentum loss rate. : (null)\n", "magnetic_braking_gamma : gamma factor in Rappaport style magnetic braking expression. : (null)\n", @@ -310,7 +345,9 @@ "vw93_mira_shift : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate depends on the Mira period plus this offset. Requires VW93_MIRA_SHIFT. : (null)\n", "vw93_multiplier : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate is multiplied by this factor. Requires VW93_MULTIPLIER. : (null)\n", "tpagb_reimers_eta : TPAGB Reimers wind multiplication factor, cf. eta in Reimers' mass loss formula. (This multiplies the 4e-13 in Reimers' formula, or the 8e-14 in Schroeder and Cuntz.) Note that Reimers is not the default TPAGB wind prescription. See also tpagbwind. : (null)\n", + "Tout_Pringle_1992_multiplier : Multiplier for the Tout & Pringle (1992) magnetic wind. (0.0) : (null)\n", "artificial_mass_accretion_rate%d : Constant mass accretion rate for star <n>. : (null)\n", + "artificial_mass_accretion_rate_by_stellar_type%d : Constant mass accretion rate for stellar type <n>. : (null)\n", "artificial_angular_momentum_accretion_rate%d : Constant angular momentum accretion for star <n>. : (null)\n", "artificial_orbital_angular_momentum_accretion_rate : Constant angular momentum accretion rate on the orbit. : (null)\n", "artificial_accretion_start_time : Time at which artificial accretion stars. Ignored if <0 (default is -1). : (null)\n", @@ -318,8 +355,7 @@ "wr_wind : Massive-star (WR) wind prescription. 0 = Hurley et al 2000/2002, 1=Maeder and Meynet, 2=Nugis and Lamers, 3=John Eldridge's version of Vink's early-2000s wind (See Lynnette Dray's thesis, or John Eldridge's thesis) : (null)\n", "wr_wind_fac : Massive-star (WR) wind multiplication factor. : (null)\n", "wrwindfac : Massive-star (WR) wind multiplication factor. Synonymous with wr_wind_fac (which you should use instead). : (null)\n", - "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. 0=Hurley et al 2000/2002, 1=Belczynski (early 2000s). : (null)\n", - "PPISN_prescription : (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. : Ignore\n", + "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. BH_HURLEY2002 = 0 = Hurley et al 2000/2002, BH_BELCZYNSKI = 1 = Belczynski (early 2000s), BH_SPERA2015 = Spera+ 2015, BH_FRYER12_DELAYED = 3 = Fryer et al. (2012) delayed prescription, BH_FRYER12_RAPID = 4 = Fryer et al. (2012) rapid prescription, BH_FRYER12_STARTRACK = 5 = Fryer et al. (2012) startrack prescription. : (null)\n", "sn_kick_distribution_II : Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_ECAP : Set the distribution of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_NS_NS : Set the distribution of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -331,9 +367,6 @@ "sn_kick_distribution_BH_NS : Set the distribution of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD : Set the distribution of speeds applied to any survivor of a hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD_subluminous : Set the distribution of speeds applied to any survivor of a subluminous hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PPISN : Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PISN : Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PHDIS : Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_II : Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_ECAP : Set the dispersion of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_NS_NS : Set the dispersion of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -345,9 +378,6 @@ "sn_kick_dispersion_BH_NS : Set the dispersion of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD : Set the dispersion of speeds applied to the survivor of a SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD_subluminous : Set the dispersion of speeds applied to the survivor of a subluminous SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PPISN : Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PISN : Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PHDIS : Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_companion_IA_He : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_ELD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia ELD (sub-Mch) supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_CHAND : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia Mch supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", @@ -368,9 +398,6 @@ "sn_kick_companion_BH_NS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a black hole merges with a neutron star. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD_subluminous : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a subluminous hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PPISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PHDIS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "wd_sigma : Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. : (null)\n", "wd_kick_direction : Set the direction of white dwarf kicks. 0 = random, 1 = up, 2 = forward, 3 = backward, 4 = inward, 5 = outward. Requires WD_KICKS. : (null)\n", "wd_kick_when : Decide when to kick a white dwarf. 0=at birth, 1=at first RLOF, 2=at given pulse number (see wd_kick_pulse_number), 3 at every pulse Requires WD_KICKS. : (null)\n", @@ -443,6 +470,11 @@ "HeWD_HeWD_ignition_mass : HeWD-HeWD mergers above this mass reignite helium. (0.3) : (null)\n", "wind_Nieuwenhuijzen_luminosity_lower_limit : Above this luminosity we activate the Nieuwenhuijzen and de Jager wind (4e3 Lsun). : (null)\n", "wind_LBV_luminosity_lower_limit : Above this luminosity we activate the LBV wind (6e5 Lsun). : (null)\n", + "colour%d : Sets colour %d (0 to NUM_ANSI_COLOURS-1) to the extended ANSI set colour you choose (1-255, 0 means ignore). The colour numbers are defined in src/logging/ansi_colours.h : (null)\n", + "apply_Darwin_Radau_correction : Apply Darwin-Radau correction to the moment of inertia to take rotation into account? : (null)\n", + "degenerate_core_merger_nucsyn : If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) : (null)\n", + "degenerate_core_helium_merger_ignition : If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) : (null)\n", + "degenerate_core_merger_dredgeup_fraction : If non-zero, mix this fraction of the degenerate core during a merger.(0.0). : (null)\n", "\n", "############################################################\n", "##### Section Binary\n", @@ -709,7 +741,6 @@ "############################################################\n", "##### Section Output\n", "############################################################\n", - "david_logging_function : Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions : Ignore\n", "cf_amanda_log : Enable logging to compare to Amanda's models. : (null)\n", "float_overflow_checks : Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) : (null)\n", "save_pre_events_stardata : Enable this to save a copy of stardata to stardata->pre_events_stardata just before an event. : (null)\n", @@ -739,6 +770,7 @@ "escape_fraction : A parameter used in constructing galactic chemical evolution (GCE) models. If the stellar wind velocity exceeds this value, any chemical yield from the wind is ignored, i.e. assumed lost. (km/s) Requires NUCSYN_GCE_OUTFLOW_CHECKS. Default 0.0. See also escape_velocity. : (null)\n", "colour_log : If set to True, thelog is coloured with ANSI colour formatting. Requires FILE_LOG to be defined. : \n", "log_filename : Location of the output logging filename. If set to \"/dev/null\" then there is no logging. : \n", + "log_arrows : Add arrows to the output log to show whether values are increasing or decreasing. : \n", "stopfile : File which, when it exists, will stop the current binary_c repeat run. : \n", "stardata_dump_filename : Location of the stardata dump file. : \n", "stardata_load_filename : Location of the stardata file to load. : \n", @@ -763,8 +795,12 @@ "MINT_MS_rejuvenation : Turn on or off (hydrogen) main-sequence rejuvenation. : \n", "MINT_remesh : Turn on or off MINT's remeshing. : \n", "MINT_use_ZAMS_profiles : Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) : \n", + "MINT_fallback_to_test_data : If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) : \n", "MINT_disable_grid_load_warnings : Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. : \n", "MINT_Kippenhahn : Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. : \n", + "MINT_nshells : Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) : \n", + "MINT_maximum_nshells : Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) : \n", + "MINT_minimum_nshells : Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) : \n", "MINT_Kippenhahn_stellar_type : Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. : \n", "MINT_Kippenhahn_companion_stellar_type : Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. : \n", "MINT_nuclear_burning : Turn on or off MINT's nuclear burning algorithm. : \n", @@ -825,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "3d29ca9d-ac66-4f9e-81cf-2edd14a98b79", "metadata": {}, "outputs": [ @@ -854,7 +890,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "e517f561-09c6-419d-ba89-d9cb61e6ebab", "metadata": {}, "outputs": [ @@ -887,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 7, "id": "7da75a95-8831-4346-a584-e042ced75249", "metadata": {}, "outputs": [ diff --git a/docs/build/html/notebook_custom_logging.html b/docs/build/html/notebook_custom_logging.html index 1c8c66116..a703be91f 100644 --- a/docs/build/html/notebook_custom_logging.html +++ b/docs/build/html/notebook_custom_logging.html @@ -107,6 +107,9 @@ <li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -454,7 +457,7 @@ div.rendered_html tbody tr:hover { <h1>Using custom logging routines with binarycpython<a class="headerlink" href="#Using-custom-logging-routines-with-binarycpython" title="Permalink to this headline">¶</a></h1> <p>In this notebook you’ll learn how to use the custom logging functionality</p> <div class="nbinput nblast docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[37]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[1]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -477,7 +480,7 @@ div.rendered_html tbody tr:hover { <h2>Usage<a class="headerlink" href="#Usage" title="Permalink to this headline">¶</a></h2> <p>There are two methods to create the C-code that will be compiled: - Automatically generate the print statement and use the wrapper to generate the full function string, by using <code class="docutils literal notranslate"><span class="pre">autogen_C_logging_code</span></code> - Create your custom print statement and use the wrapper to generate the full function string, by writing out the print statement. Here the logging statement obviously has to be valid C code</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[2]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -501,7 +504,7 @@ Printf("MY_STELLAR_DATA %g %g\n",((double)stardata->model.time),((dou </pre></div></div> </div> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[30]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[3]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -520,7 +523,7 @@ Printf("MY_STELLAR_DATA time=%g mass=%g\n", stardata->model.time, sta </pre></div></div> </div> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[31]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[4]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -557,7 +560,7 @@ void binary_c_API_function custom_output_function(struct stardata_t * stardata) </div> <p>Combining the above with e.g. run_system() (see notebook_individual_systems for more examples):</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[32]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[5]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -590,7 +593,7 @@ MY_STELLAR_DATA time=2e-06 mass=2 <h3>Using custom logging with the population object<a class="headerlink" href="#Using-custom-logging-with-the-population-object" title="Permalink to this headline">¶</a></h3> <p>Custom logging can be used for a whole population by setting the print statement (so not the entire logging script) in <code class="docutils literal notranslate"><span class="pre">C_logging_code</span></code></p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[33]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[6]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -638,10 +641,10 @@ MY_STELLAR_DATA time=2e-06 mass=2 </div> <div class="output_area docutils container"> <div class="highlight"><pre> -EXAMPLE_ABOVE_MS 1.041660877905e+02 4.99198 4.99198 6.1357 6.1357 2 1 -EXAMPLE_ABOVE_MS 1.041662558619e+02 4.99198 4.99198 6.14057 6.1357 2 2 -EXAMPLE_ABOVE_MS 1.041662560111e+02 4.99198 4.99198 6.14057 6.14057 2 2 -EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 2 2 +EXAMPLE_ABOVE_MS 1.044142002936e+02 4.99194 4.99194 6.13567 6.13567 2 1 +EXAMPLE_ABOVE_MS 1.044572277695e+02 4.99192 4.99194 7.51803 6.13567 2 2 +EXAMPLE_ABOVE_MS 1.044654032097e+02 4.99192 4.99192 7.81395 7.51803 2 2 +EXAMPLE_ABOVE_MS 1.045084306856e+02 4.99191 4.99192 9.57443 7.81395 2 2 </pre></div></div> </div> </div> @@ -649,7 +652,7 @@ EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 <h3>Using custom logging when running directly from the API<a class="headerlink" href="#Using-custom-logging-when-running-directly-from-the-API" title="Permalink to this headline">¶</a></h3> <p>When running a system directly with the API we need to manually load the custom logging into memory (via <code class="docutils literal notranslate"><span class="pre">create_and_load_logging_function</span></code>) and pass the memory address to the binary_c binding via <code class="docutils literal notranslate"><span class="pre">_binary_c_bindings.run_system(argstring,</span> <span class="pre">custom_logging_func_memaddr=custom_logging_memaddr)</span></code></p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[40]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -714,7 +717,7 @@ MY_STELLAR_DATA 2e-06 15 <h3>Compact object<a class="headerlink" href="#Compact-object" title="Permalink to this headline">¶</a></h3> <p>This logging will print the timestep when the star becomes a compact object. After it does, we change the maximum time to be the current time, effectively terminating the evolution</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[42]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[8]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -758,8 +761,8 @@ MY_STELLAR_DATA 2e-06 15 </div> <div class="output_area docutils container"> <div class="highlight"><pre> -SINGLE_STAR_LIFETIME 10 27.7358 -EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.446 13 5 +SINGLE_STAR_LIFETIME 10 28.4838 +EXAMPLE_LOG_CO 2.848380621869e+01 1.33469 9.1865 1.72498e-05 724.338 13 5 </pre></div></div> </div> </div> @@ -767,7 +770,7 @@ EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.44 <h3>Logging mass evolution and the supernova<a class="headerlink" href="#Logging-mass-evolution-and-the-supernova" title="Permalink to this headline">¶</a></h3> <p>This logging code prints the mass evolution and the moment the star goes supernova</p> <div class="nbinput docutils container"> -<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[47]: +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[10]: </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> @@ -786,58 +789,27 @@ EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.44 <span class="s2">{</span> <span class="s2"> if (stardata->model.time < stardata->model.max_evolution_time)</span> <span class="s2"> {</span> -<span class="s2"> if(stardata->pre_events_stardata != NULL)</span> -<span class="s2"> {</span> -<span class="s2"> Printf("EXAMPLE_SN </span><span class="si">%30.12e</span><span class="s2"> " // 1</span> -<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> " // 2-5</span> -<span class="s2"> "</span><span class="si">%d</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> " // 6-9</span> -<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n", // 10-13</span> - -<span class="s2"> //</span> -<span class="s2"> stardata->model.time, // 1</span> - -<span class="s2"> stardata->star[0].mass, //2</span> -<span class="s2"> stardata->pre_events_stardata->star[0].mass, //3</span> -<span class="s2"> stardata->common.zero_age.mass[0], //4</span> -<span class="s2"> stardata->star[0].SN_type, //5</span> - -<span class="s2"> stardata->star[0].stellar_type, //6</span> -<span class="s2"> stardata->pre_events_stardata->star[0].stellar_type, //7</span> -<span class="s2"> stardata->model.probability, //8</span> -<span class="s2"> stardata->pre_events_stardata->star[0].core_mass[ID_core(stardata->pre_events_stardata->star[0].stellar_type)], // 9</span> - -<span class="s2"> stardata->pre_events_stardata->star[0].core_mass[CORE_CO], // 10</span> -<span class="s2"> stardata->pre_events_stardata->star[0].core_mass[CORE_He], // 11</span> -<span class="s2"> stardata->star[0].fallback, // 12</span> -<span class="s2"> stardata->star[0].fallback_mass // 13</span> -<span class="s2"> );</span> -<span class="s2"> }</span> -<span class="s2"> else</span> -<span class="s2"> {</span> -<span class="s2"> Printf("EXAMPLE_SN </span><span class="si">%30.12e</span><span class="s2"> " // 1</span> -<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> " // 2-5</span> -<span class="s2"> "</span><span class="si">%d</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> " // 6-9</span> -<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n", // 10-13</span> - -<span class="s2"> //</span> -<span class="s2"> stardata->model.time, // 1</span> - -<span class="s2"> stardata->star[0].mass, //2</span> -<span class="s2"> stardata->previous_stardata->star[0].mass, //3</span> -<span class="s2"> stardata->common.zero_age.mass[0], //4</span> -<span class="s2"> stardata->star[0].SN_type, //5</span> - -<span class="s2"> stardata->star[0].stellar_type, //6</span> -<span class="s2"> stardata->previous_stardata->star[0].stellar_type, //7</span> -<span class="s2"> stardata->model.probability, //8</span> -<span class="s2"> stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9</span> - -<span class="s2"> stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10</span> -<span class="s2"> stardata->previous_stardata->star[0].core_mass[CORE_He], // 11</span> -<span class="s2"> stardata->star[0].fallback, // 12</span> -<span class="s2"> stardata->star[0].fallback_mass // 13</span> -<span class="s2"> );</span> -<span class="s2"> }</span> +<span class="s2"> Printf("EXAMPLE_SN </span><span class="si">%30.12e</span><span class="s2"> " // 1</span> +<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> " // 2-5</span> +<span class="s2"> "</span><span class="si">%d</span><span class="s2"> </span><span class="si">%d</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> " // 6-9</span> +<span class="s2"> "</span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n", // 10-13</span> + +<span class="s2"> //</span> +<span class="s2"> stardata->model.time, // 1</span> + +<span class="s2"> stardata->star[0].mass, //2</span> +<span class="s2"> stardata->previous_stardata->star[0].mass, //3</span> +<span class="s2"> stardata->common.zero_age.mass[0], //4</span> +<span class="s2"> stardata->star[0].SN_type, //5</span> + +<span class="s2"> stardata->star[0].stellar_type, //6</span> +<span class="s2"> stardata->previous_stardata->star[0].stellar_type, //7</span> +<span class="s2"> stardata->model.probability, //8</span> +<span class="s2"> stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9</span> + +<span class="s2"> stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10</span> +<span class="s2"> stardata->previous_stardata->star[0].core_mass[CORE_He] // 11</span> +<span class="s2"> );</span> <span class="s2"> };</span> <span class="s2"> /* Kill the simulation to save time */</span> <span class="s2"> stardata->model.max_evolution_time = stardata->model.time - stardata->model.dtm;</span> @@ -860,10 +832,19 @@ EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.44 </div> <div class="output_area docutils container"> <div class="highlight"><pre> -EXAMPLE_MASSLOSS 9.878236827680e+00 1.61349 8.38063 20 13 1 -EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4.92267 6.74037 0 0 +EXAMPLE_MASSLOSS 1.050651207308e+01 1.59452 9.34213 20 13 1 +EXAMPLE_SN 1.050651207308e+01 1.59452 9.34213 20 12 13 5 1 6.55458 4.71662 6.55458 </pre></div></div> </div> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[ ]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span> +</pre></div> +</div> +</div> </div> </div> </div> @@ -902,9 +883,9 @@ EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4 provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_custom_logging.ipynb b/docs/build/html/notebook_custom_logging.ipynb index 05ffbccfc..84e41e6bc 100644 --- a/docs/build/html/notebook_custom_logging.ipynb +++ b/docs/build/html/notebook_custom_logging.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 1, "id": "696ecbb9-1efd-48f4-a57e-2cf6dfe416f1", "metadata": {}, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "236cf821-09ac-4237-9b8f-6e36d2edf446", "metadata": {}, "outputs": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "id": "feb423d5-5cc3-433c-9801-f8017abbc03a", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "id": "2f5defbf-c623-49ed-a238-fba52a563a58", "metadata": {}, "outputs": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "id": "dcd74bbc-478b-43e4-b495-8c456e8d1d88", "metadata": {}, "outputs": [ @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "id": "77bd09b0-1a94-499d-97db-a1f991c67c12", "metadata": {}, "outputs": [ @@ -203,10 +203,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_ABOVE_MS 1.041660877905e+02 4.99198 4.99198 6.1357 6.1357 2 1\n", - "EXAMPLE_ABOVE_MS 1.041662558619e+02 4.99198 4.99198 6.14057 6.1357 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662560111e+02 4.99198 4.99198 6.14057 6.14057 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 2 2\n" + "EXAMPLE_ABOVE_MS 1.044142002936e+02 4.99194 4.99194 6.13567 6.13567 2 1\n", + "EXAMPLE_ABOVE_MS 1.044572277695e+02 4.99192 4.99194 7.51803 6.13567 2 2\n", + "EXAMPLE_ABOVE_MS 1.044654032097e+02 4.99192 4.99192 7.81395 7.51803 2 2\n", + "EXAMPLE_ABOVE_MS 1.045084306856e+02 4.99191 4.99192 9.57443 7.81395 2 2\n" ] } ], @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 7, "id": "30142286-34ce-433e-82c8-565e2160ff5b", "metadata": {}, "outputs": [ @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 8, "id": "6f0edc65-a788-4706-a0c5-2ace030765ec", "metadata": {}, "outputs": [ @@ -344,8 +344,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "SINGLE_STAR_LIFETIME 10 27.7358\n", - "EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.446 13 5\n" + "SINGLE_STAR_LIFETIME 10 28.4838\n", + "EXAMPLE_LOG_CO 2.848380621869e+01 1.33469 9.1865 1.72498e-05 724.338 13 5\n" ] } ], @@ -395,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "id": "8f58fdf9-3e76-4c18-a1c5-eed0980d4133", "metadata": {}, "outputs": [ @@ -403,8 +403,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_MASSLOSS 9.878236827680e+00 1.61349 8.38063 20 13 1\n", - "EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4.92267 6.74037 0 0\n" + "EXAMPLE_MASSLOSS 1.050651207308e+01 1.59452 9.34213 20 13 1\n", + "EXAMPLE_SN 1.050651207308e+01 1.59452 9.34213 20 12 13 5 1 6.55458 4.71662 6.55458\n" ] } ], @@ -424,58 +424,27 @@ "{\n", " if (stardata->model.time < stardata->model.max_evolution_time)\n", " {\n", - " if(stardata->pre_events_stardata != NULL)\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", - "\n", - " stardata->star[0].mass, //2\n", - " stardata->pre_events_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", + " \"%g %g %g %d \" // 2-5\n", + " \"%d %d %g %g \" // 6-9\n", + " \"%g %g\\\\n\", // 10-13\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->pre_events_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->pre_events_stardata->star[0].core_mass[ID_core(stardata->pre_events_stardata->star[0].stellar_type)], // 9\n", - "\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", - " else\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", + " // \n", + " stardata->model.time, // 1\n", "\n", - " stardata->star[0].mass, //2\n", - " stardata->previous_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " stardata->star[0].mass, //2\n", + " stardata->previous_stardata->star[0].mass, //3\n", + " stardata->common.zero_age.mass[0], //4\n", + " stardata->star[0].SN_type, //5\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->previous_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", + " stardata->star[0].stellar_type, //6\n", + " stardata->previous_stardata->star[0].stellar_type, //7\n", + " stardata->model.probability, //8\n", + " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", "\n", - " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->previous_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", + " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", + " stardata->previous_stardata->star[0].core_mass[CORE_He] // 11\n", + " );\n", " };\n", " /* Kill the simulation to save time */\n", " stardata->model.max_evolution_time = stardata->model.time - stardata->model.dtm;\n", @@ -491,6 +460,14 @@ "# print (abridged) output\n", "print(\"\\n\".join(output.splitlines()[-2:]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "484297c0-accb-4efc-a9c8-dbd2f32b89a6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/build/html/notebook_extra_features.html b/docs/build/html/notebook_extra_features.html index bd6f0c339..8c058cd55 100644 --- a/docs/build/html/notebook_extra_features.html +++ b/docs/build/html/notebook_extra_features.html @@ -102,6 +102,9 @@ </ul> </li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -646,9 +649,9 @@ get_defaults(filter_values:bool=False) -> dict provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_individual_systems.html b/docs/build/html/notebook_individual_systems.html index f2110d005..fc0232238 100644 --- a/docs/build/html/notebook_individual_systems.html +++ b/docs/build/html/notebook_individual_systems.html @@ -100,6 +100,9 @@ <li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -927,9 +930,9 @@ SINGLE_STAR_LIFETIME 15 14.9947 provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_luminosity_function_binaries.html b/docs/build/html/notebook_luminosity_function_binaries.html new file mode 100644 index 000000000..850f413f1 --- /dev/null +++ b/docs/build/html/notebook_luminosity_function_binaries.html @@ -0,0 +1,1247 @@ + + +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Zero-age stellar luminosity function in binaries — binary_c-python documentation</title> + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + + + + + + + + <!--[if lt IE 9]> + <script src="_static/js/html5shiv.min.js"></script> + <![endif]--> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"inlineMath": [["$", "$"], ["\\(", "\\)"]], "processEscapes": true, "ignoreClass": "document", "processClass": "math|output_area"}})</script> + + <script type="text/javascript" src="_static/js/theme.js"></script> + + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="Binary_c parameters" href="binary_c_parameters.html" /> + <link rel="prev" title="Example use case: Zero-age stellar luminosity function" href="notebook_luminosity_function_single.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home" alt="Documentation Home"> binary_c-python + + + + </a> + + + + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="readme_link.html">Python module for binary_c</a></li> +<li class="toctree-l1"><a class="reference internal" href="modules.html">Binarycpython code</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="example_notebooks.html">Example notebooks</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="notebook_individual_systems.html">Running individual systems with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_custom_logging.html">Using custom logging routines with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Zero-age stellar luminosity function in binaries</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#Setting-up-the-Population-object">Setting up the Population object</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Adding-grid-variables">Adding grid variables</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Setting-logging-and-handling-the-output">Setting logging and handling the output</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Evolving-the-grid">Evolving the grid</a></li> +</ul> +</li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> +<li class="toctree-l1"><a class="reference internal" href="grid_options_descriptions.html">Population grid code options</a></li> +<li class="toctree-l1"><a class="reference external" href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python">Visit the GitLab repo</a></li> +<li class="toctree-l1"><a class="reference external" href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/issues/new">Submit an issue</a></li> +</ul> + + + + </div> + + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">binary_c-python</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html" class="icon icon-home"></a> »</li> + + <li><a href="example_notebooks.html">Example notebooks</a> »</li> + + <li>Zero-age stellar luminosity function in binaries</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/notebook_luminosity_function_binaries.ipynb.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + +<style> +/* CSS for nbsphinx extension */ + +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copybtn icon on prompts (needed for 'sphinx_copybutton') */ +.prompt a.copybtn { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +div.rendered_html th { + font-weight: bold; +} +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + +/* CSS overrides for sphinx_rtd_theme */ + +/* 24px margin */ +.nbinput.nblast.container, +.nboutput.nblast.container { + margin-bottom: 19px; /* padding has already 5px */ +} + +/* ... except between code cells! */ +.nblast.container + .nbinput.container { + margin-top: -19px; +} + +.admonition > p:before { + margin-right: 4px; /* make room for the exclamation icon */ +} + +/* Fix math alignment, see https://github.com/rtfd/sphinx_rtd_theme/pull/686 */ +.math { + text-align: unset; +} +</style> +<div class="section" id="Zero-age-stellar-luminosity-function-in-binaries"> +<h1>Zero-age stellar luminosity function in binaries<a class="headerlink" href="#Zero-age-stellar-luminosity-function-in-binaries" title="Permalink to this headline">¶</a></h1> +<p>In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c.</p> +<p>Before you go through this notebook, you should look at notebook_luminosity_function.ipynb which is for the - conceptually more simple - single stars.</p> +<p>We start by loading in some standard Python modules and the binary_c module.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[1]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">math</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.grid</span> <span class="kn">import</span> <span class="n">Population</span> + +<span class="c1"># help(Population) # Uncomment this line to see the public functions of this object</span> +</pre></div> +</div> +</div> +<div class="section" id="Setting-up-the-Population-object"> +<h2>Setting up the Population object<a class="headerlink" href="#Setting-up-the-Population-object" title="Permalink to this headline">¶</a></h2> +<p>To set up and configure the population object we need to make a new instance of the <code class="docutils literal notranslate"><span class="pre">Population</span></code> object and configure it with the <code class="docutils literal notranslate"><span class="pre">.set()</span></code> function.</p> +<p>In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero.</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[2]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Create population object</span> +<span class="n">population</span> <span class="o">=</span> <span class="n">Population</span><span class="p">()</span> + +<span class="c1"># If you want verbosity, set this before other things</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">verbosity</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + +<span class="c1"># Setting values can be done via .set(<parameter_name>=<value>)</span> +<span class="c1"># Values that are known to be binary_c_parameters are loaded into bse_options.</span> +<span class="c1"># Those that are present in the default grid_options are set in grid_options</span> +<span class="c1"># All other values that you set are put in a custom_options dict</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="c1"># binary_c physics options</span> + <span class="n">max_evolution_time</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="c1"># maximum stellar evolution time in Myr</span> + <span class="p">)</span> + +<span class="c1"># We can access the options through</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"verbosity is"</span><span class="p">,</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'verbosity'</span><span class="p">])</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +adding: max_evolution_time=0.1 to BSE_options +verbosity is 1 +</pre></div></div> +</div> +</div> +<div class="section" id="Adding-grid-variables"> +<h2>Adding grid variables<a class="headerlink" href="#Adding-grid-variables" title="Permalink to this headline">¶</a></h2> +<p>The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.</p> +<p>Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters.</p> +<p>To add a grid variable to the population object we use <code class="docutils literal notranslate"><span class="pre">population.add_grid_variable</span></code></p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[3]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># help(population.add_grid_variable)</span> +</pre></div> +</div> +</div> +<p>All the distribution functions that we can use are stored in the <code class="docutils literal notranslate"><span class="pre">binarycpython.utils.distribution_functions</span></code> or <code class="docutils literal notranslate"><span class="pre">binarycpython/utils/distribution_functions.py</span></code> on git. If you uncomment the help statement below you can see which functions are available now:</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[4]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="kn">import</span> <span class="nn">binarycpython.utils.distribution_functions</span> +<span class="c1"># help(binarycpython.utils.distribution_functions)</span> +</pre></div> +</div> +</div> +<p>First let us set up some global variables that will be useful throughout. * The resolution is the number of stars we simulate in our model population. * The massrange is a list of the min and max masses * The total_probability is the theoretical integral of a probability density function, i.e. 1.0. * The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log<em>L</em> are 0.5dex wide.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[5]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Set resolution and mass range that we simulate</span> +<span class="n">resolution</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"M_1"</span><span class="p">:</span> <span class="mi">40</span><span class="p">}</span> <span class="c1"># start with resolution = 10, and increase later if you want "more accurate" data</span> +<span class="n">massrange</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.07</span><span class="p">,</span> <span class="mf">100.0</span><span class="p">)</span> <span class="c1"># we work with stars of mass 0.07 to 100 Msun</span> +<span class="n">total_probability</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="c1"># theoretical integral of the mass probability density function over all masses</span> +<span class="c1"># distribution binwidths :</span> +<span class="c1"># (log10) luminosity distribution</span> +<span class="n">binwidth</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'luminosity'</span> <span class="p">:</span> <span class="mf">1.0</span> <span class="p">}</span> +</pre></div> +</div> +</div> +<p>The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass <em>M</em>_1.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[6]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Set up the binary grid in "cubic" M1 - M2=q*M1 - log10 period space</span> + +<span class="n">population</span> <span class="o">=</span> <span class="n">Population</span><span class="p">()</span> + +<span class="c1"># resolution on each side of the cube, with more stars for the primary mass</span> +<span class="n">nres</span> <span class="o">=</span> <span class="mi">10</span> +<span class="n">resolution</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"M_1"</span><span class="p">:</span> <span class="mi">2</span><span class="o">*</span><span class="n">nres</span><span class="p">,</span> + <span class="s2">"q"</span><span class="p">:</span> <span class="n">nres</span><span class="p">,</span> + <span class="s2">"per"</span><span class="p">:</span> <span class="n">nres</span><span class="p">}</span> + +<span class="n">massrange</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.07</span><span class="p">,</span><span class="mi">100</span><span class="p">]</span> +<span class="n">logperrange</span> <span class="o">=</span> <span class="p">[</span><span class="mf">0.15</span><span class="p">,</span> <span class="mf">5.5</span><span class="p">]</span> + +<span class="n">population</span><span class="o">.</span><span class="n">add_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"lnm1"</span><span class="p">,</span> + <span class="n">longname</span><span class="o">=</span><span class="s2">"Primary mass"</span><span class="p">,</span> + <span class="n">valuerange</span><span class="o">=</span><span class="n">massrange</span><span class="p">,</span> + <span class="n">resolution</span><span class="o">=</span><span class="s2">"</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">resolution</span><span class="p">[</span><span class="s2">"M_1"</span><span class="p">]),</span> + <span class="n">spacingfunc</span><span class="o">=</span><span class="s2">"const(math.log(</span><span class="si">{min}</span><span class="s2">), math.log(</span><span class="si">{max}</span><span class="s2">), </span><span class="si">{res}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">min</span><span class="o">=</span><span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="nb">max</span><span class="o">=</span><span class="n">massrange</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">res</span><span class="o">=</span><span class="n">resolution</span><span class="p">[</span><span class="s2">"M_1"</span><span class="p">]),</span> + <span class="n">precode</span><span class="o">=</span><span class="s2">"M_1=math.exp(lnm1)"</span><span class="p">,</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1"</span><span class="p">,</span> + <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"dlnm1"</span><span class="p">,</span> + <span class="n">parameter_name</span><span class="o">=</span><span class="s2">"M_1"</span><span class="p">,</span> + <span class="n">condition</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="c1"># Impose a condition on this grid variable. Mostly for a check for yourself</span> +<span class="p">)</span> + +<span class="c1"># Mass ratio</span> +<span class="n">population</span><span class="o">.</span><span class="n">add_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"q"</span><span class="p">,</span> + <span class="n">longname</span><span class="o">=</span><span class="s2">"Mass ratio"</span><span class="p">,</span> + <span class="n">valuerange</span><span class="o">=</span><span class="p">[</span><span class="s2">"0.1/M_1"</span><span class="p">,</span> <span class="mi">1</span><span class="p">],</span> + <span class="n">resolution</span><span class="o">=</span><span class="s2">"</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">resolution</span><span class="p">[</span><span class="s1">'q'</span><span class="p">]),</span> + <span class="n">spacingfunc</span><span class="o">=</span><span class="s2">"const(</span><span class="si">{}</span><span class="s2">/M_1, 1, </span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">resolution</span><span class="p">[</span><span class="s1">'q'</span><span class="p">]),</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"flatsections(q, [{{'min': </span><span class="si">{}</span><span class="s2">/M_1, 'max': 1.0, 'height': 1}}])"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">]),</span> + <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"dq"</span><span class="p">,</span> + <span class="n">precode</span><span class="o">=</span><span class="s2">"M_2 = q * M_1"</span><span class="p">,</span> + <span class="n">parameter_name</span><span class="o">=</span><span class="s2">"M_2"</span><span class="p">,</span> + <span class="n">condition</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="c1"># Impose a condition on this grid variable. Mostly for a check for yourself</span> + <span class="p">)</span> + +<span class="c1"># Orbital period</span> +<span class="n">population</span><span class="o">.</span><span class="n">add_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"log10per"</span><span class="p">,</span> <span class="c1"># in days</span> + <span class="n">longname</span><span class="o">=</span><span class="s2">"log10(Orbital_Period)"</span><span class="p">,</span> + <span class="n">valuerange</span><span class="o">=</span><span class="p">[</span><span class="mf">0.15</span><span class="p">,</span> <span class="mf">5.5</span><span class="p">],</span> + <span class="n">resolution</span><span class="o">=</span><span class="s2">"</span><span class="si">{}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">resolution</span><span class="p">[</span><span class="s2">"per"</span><span class="p">]),</span> + <span class="n">spacingfunc</span><span class="o">=</span><span class="s2">"const(</span><span class="si">{}</span><span class="s2">, </span><span class="si">{}</span><span class="s2">, </span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="n">resolution</span><span class="p">[</span><span class="s2">"per"</span><span class="p">]),</span> + <span class="n">precode</span><span class="o">=</span><span class="s2">"""orbital_period = 10.0 ** log10per</span> +<span class="s2">sep = calc_sep_from_period(M_1, M_2, orbital_period)</span> +<span class="s2">sep_min = calc_sep_from_period(M_1, M_2, 10**</span><span class="si">{}</span><span class="s2">)</span> +<span class="s2">sep_max = calc_sep_from_period(M_1, M_2, 10**</span><span class="si">{}</span><span class="s2">)"""</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"sana12(M_1, M_2, sep, orbital_period, sep_min, sep_max, math.log10(10**</span><span class="si">{}</span><span class="s2">), math.log10(10**</span><span class="si">{}</span><span class="s2">), </span><span class="si">{}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span><span class="n">logperrange</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span><span class="o">-</span><span class="mf">0.55</span><span class="p">),</span> + <span class="n">parameter_name</span><span class="o">=</span><span class="s2">"orbital_period"</span><span class="p">,</span> + <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"dlog10per"</span><span class="p">,</span> + <span class="p">)</span> +</pre></div> +</div> +</div> +</div> +<div class="section" id="Setting-logging-and-handling-the-output"> +<h2>Setting logging and handling the output<a class="headerlink" href="#Setting-logging-and-handling-the-output" title="Permalink to this headline">¶</a></h2> +<p>By default, binary_c will not output anything (except for ‘SINGLE STAR LIFETIME’). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into <code class="docutils literal notranslate"><span class="pre">binary_c</span></code> (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook <code class="docutils literal notranslate"><span class="pre">notebook_custom_logging.ipynb</span></code>), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, +it works perfectly well.</p> +<p>After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook <code class="docutils literal notranslate"><span class="pre">notebook_individual_systems.ipynb</span></code>).</p> +<p>In the code below we will set up both the custom logging and a parse function to handle that output.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Create custom logging statement</span> +<span class="c1">#</span> +<span class="c1"># we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)</span> +<span class="c1"># we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star</span> +<span class="c1"># we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)</span> +<span class="c1">#</span> +<span class="c1"># The</span> +<span class="c1">#</span> +<span class="c1"># The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STARn</span> +<span class="c1">#</span> +<span class="c1"># where:</span> +<span class="c1">#</span> +<span class="c1"># n = PRIMARY = 0 is star 0 (primary star)</span> +<span class="c1"># n = SECONDARY = 1 is star 1 (secondary star)</span> +<span class="c1"># n = UNRESOLVED = 2 is the unresolved system (both stars added)</span> + +<span class="n">PRIMARY</span> <span class="o">=</span> <span class="mi">0</span> +<span class="n">SECONDARY</span> <span class="o">=</span> <span class="mi">1</span> +<span class="n">UNRESOLVED</span> <span class="o">=</span> <span class="mi">2</span> + +<span class="n">custom_logging_statement</span> <span class="o">=</span> <span class="s2">"""</span> +<span class="s2">// select ZAMS</span> +<span class="s2">if(stardata->model.model_number == 0 &&</span> +<span class="s2"> stardata->model.time == 0)</span> +<span class="s2">{</span> +<span class="s2"> // loop over the stars individually (equivalent to a resolved binary)</span> +<span class="s2"> Foreach_star(star)</span> +<span class="s2"> {</span> +<span class="s2"> // select main-sequence stars</span> +<span class="s2"> if(star->stellar_type <= MAIN_SEQUENCE)</span> +<span class="s2"> {</span> +<span class="s2"> /* Note that we use Printf - with a capital P! */</span> +<span class="s2"> Printf("ZERO_AGE_MAIN_SEQUENCE_STAR</span><span class="si">%d</span><span class="s2"> </span><span class="si">%30.12e</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n",</span> +<span class="s2"> star->starnum,</span> +<span class="s2"> stardata->model.time, // 1</span> +<span class="s2"> stardata->common.zero_age.mass[0], // 2</span> +<span class="s2"> star->mass, // 3</span> +<span class="s2"> star->luminosity, // 4</span> +<span class="s2"> stardata->model.probability // 5</span> +<span class="s2"> );</span> +<span class="s2"> }</span> +<span class="s2"> }</span> + +<span class="s2"> // unresolved MS-MS binary</span> +<span class="s2"> if(stardata->star[0].stellar_type <= MAIN_SEQUENCE &&</span> +<span class="s2"> stardata->star[1].stellar_type <= MAIN_SEQUENCE)</span> +<span class="s2"> {</span> +<span class="s2"> Printf("ZERO_AGE_MAIN_SEQUENCE_STAR</span><span class="si">%d</span><span class="s2"> </span><span class="si">%30.12e</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n",</span> +<span class="s2"> 2,</span> +<span class="s2"> stardata->model.time, // 1</span> +<span class="s2"> stardata->common.zero_age.mass[0] + stardata->common.zero_age.mass[1], // 2</span> +<span class="s2"> stardata->star[0].mass + stardata->star[1].mass, // 3</span> +<span class="s2"> stardata->star[0].luminosity + stardata->star[1].luminosity, // 4</span> +<span class="s2"> stardata->model.probability // 5</span> +<span class="s2"> );</span> +<span class="s2"> }</span> +<span class="s2">}</span> +<span class="s2">"""</span> + +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="n">C_logging_code</span><span class="o">=</span><span class="n">custom_logging_statement</span> +<span class="p">)</span> + +</pre></div> +</div> +</div> +<p>The parse function must now catch lines that start with “ZERO_AGE_MAIN_SEQUENCE_STAR†and process the associated data.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[8]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># import the bin_data function so we can construct finite-resolution probability distributions</span> +<span class="c1"># import the datalinedict to make a dictionary from each line of data from binary_c</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.functions</span> <span class="kn">import</span> <span class="n">bin_data</span><span class="p">,</span><span class="n">datalinedict</span> +<span class="kn">import</span> <span class="nn">re</span> + +<span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Example parse function</span> +<span class="sd"> """</span> + + <span class="c1"># list of the data items</span> + <span class="n">parameters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"header"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"zams_mass"</span><span class="p">,</span> <span class="s2">"mass"</span><span class="p">,</span> <span class="s2">"luminosity"</span><span class="p">,</span> <span class="s2">"probability"</span><span class="p">]</span> + + <span class="c1"># Loop over the output.</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span> + + <span class="c1"># check if we match a ZERO_AGE_MAIN_SEQUENCE_STAR</span> + <span class="n">match</span> <span class="o">=</span> <span class="n">re</span><span class="o">.</span><span class="n">search</span><span class="p">(</span><span class="s1">'ZERO_AGE_MAIN_SEQUENCE_STAR(\d)'</span><span class="p">,</span><span class="n">line</span><span class="p">)</span> + <span class="k">if</span> <span class="n">match</span><span class="p">:</span> + <span class="n">nstar</span> <span class="o">=</span> <span class="n">match</span><span class="o">.</span><span class="n">group</span><span class="p">(</span><span class="mi">1</span><span class="p">)</span> + <span class="c1">#print("matched star",nstar)</span> + + <span class="c1"># obtain the line of data in dictionary form</span> + <span class="n">linedata</span> <span class="o">=</span> <span class="n">datalinedict</span><span class="p">(</span><span class="n">line</span><span class="p">,</span><span class="n">parameters</span><span class="p">)</span> + + <span class="c1"># bin the log10(luminosity) to the nearest 0.1dex</span> + <span class="n">binned_log_luminosity</span> <span class="o">=</span> <span class="n">bin_data</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">linedata</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">]),</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + + <span class="c1"># append the data to the results_dictionary</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">][</span><span class="nb">int</span><span class="p">(</span><span class="n">nstar</span><span class="p">)][</span><span class="n">binned_log_luminosity</span><span class="p">]</span> <span class="o">+=</span> <span class="n">linedata</span><span class="p">[</span><span class="s1">'probability'</span><span class="p">]</span> + + <span class="c1">#print (self.grid_results)</span> + + <span class="c1"># verbose reporting</span> + <span class="c1">#print("parse out results_dictionary=",self.grid_results)</span> + +<span class="c1"># Add the parsing function</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="n">parse_function</span><span class="o">=</span><span class="n">parse_function</span><span class="p">,</span> +<span class="p">)</span> +</pre></div> +</div> +</div> +</div> +<div class="section" id="Evolving-the-grid"> +<h2>Evolving the grid<a class="headerlink" href="#Evolving-the-grid" title="Permalink to this headline">¶</a></h2> +<p>Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: <code class="docutils literal notranslate"><span class="pre">population.evolve()</span></code></p> +<p>This will start up the processing of all the systems. We can control how many cores are used by settings <code class="docutils literal notranslate"><span class="pre">amt_cores</span></code>. By setting the <code class="docutils literal notranslate"><span class="pre">verbosity</span></code> of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.</p> +<p>There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: <a class="reference external" href="https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html">grid options docs</a>, and try</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[9]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># set number of threads</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="c1"># verbose output is not required</span> + <span class="n">verbosity</span><span class="o">=</span><span class="mi">1</span><span class="p">,</span> + <span class="c1"># set number of threads (i.e. number of CPU cores we use)</span> + <span class="n">amt_cores</span><span class="o">=</span><span class="mi">4</span><span class="p">,</span> + <span class="p">)</span> + +<span class="c1"># Evolve the population - this is the slow, number-crunching step</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Running the population now, this may take a little while..."</span><span class="p">)</span> +<span class="n">analytics</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"Done population run!"</span><span class="p">)</span> + +<span class="c1"># Show the results (debugging)</span> +<span class="c1"># print (population.grid_results)</span> +</pre></div> +</div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +adding: amt_cores=4 to grid_options +Running the population now, this may take a little while... +Creating and loading custom logging functionality +Generating grid code +Generating grid code +Constructing/adding: lnm1 +Constructing/adding: q +Constructing/adding: log10per +Saving grid code to grid_options +Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py +Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py +Grid code loaded +Grid has handled 2000 stars +with a total probability of 0.6495098935846658 +Total starcount for this run will be: 2000 +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:14:08,077 DEBUG Process-2] --- Setting up processor: process-0[2021-09-10 15:14:08,080 DEBUG Process-3] --- Setting up processor: process-1[2021-09-10 15:14:08,086 DEBUG MainProcess] --- setting up the system_queue_filler now + +[2021-09-10 15:14:08,084 DEBUG Process-4] --- Setting up processor: process-2 + +[2021-09-10 15:14:08,117 DEBUG Process-5] --- Setting up processor: process-3 +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Process 1 started at 2021-09-10T15:14:08.119437. Using store memaddr <capsule object "STORE" at 0x7f351ff53810>Process 0 started at 2021-09-10T15:14:08.126435. Using store memaddr <capsule object "STORE" at 0x7f351ff539f0> +Process 2 started at 2021-09-10T15:14:08.138353. Using store memaddr <capsule object "STORE" at 0x7f351ff539f0> +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> + +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> + + +Process 3 started at 2021-09-10T15:14:08.186492. Using store memaddr <capsule object "STORE" at 0x7f351ff53810> +Generating grid code +Generating grid code +Constructing/adding: lnm1 +Constructing/adding: q +Constructing/adding: log10per +Saving grid code to grid_options +Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py +Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py +Grid code loaded +624/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB625/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.04e-03 ETF=15:14:23 mem:800.5MB +626/2000 31.3% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB + +713/2000 35.6% complete 15:14:17 ETA= 1.3m tpr=6.00e-02 ETF=15:15:34 mem:547.8MB +728/2000 36.4% complete 15:14:22 ETA= 7.1m tpr=3.37e-01 ETF=15:21:30 mem:548.1MB +743/2000 37.1% complete 15:14:27 ETA= 7.0m tpr=3.34e-01 ETF=15:21:26 mem:549.5MB +759/2000 38.0% complete 15:14:33 ETA= 7.7m tpr=3.73e-01 ETF=15:22:16 mem:550.5MB +774/2000 38.7% complete 15:14:38 ETA= 6.9m tpr=3.35e-01 ETF=15:21:29 mem:551.1MB +787/2000 39.4% complete 15:14:43 ETA= 7.8m tpr=3.88e-01 ETF=15:22:33 mem:551.1MB +799/2000 40.0% complete 15:14:48 ETA= 8.5m tpr=4.24e-01 ETF=15:23:17 mem:552.5MB +812/2000 40.6% complete 15:14:54 ETA= 8.4m tpr=4.23e-01 ETF=15:23:16 mem:554.8MB +830/2000 41.5% complete 15:14:59 ETA= 5.5m tpr=2.80e-01 ETF=15:20:26 mem:555.2MB +847/2000 42.4% complete 15:15:05 ETA= 6.8m tpr=3.52e-01 ETF=15:21:50 mem:555.2MB +864/2000 43.2% complete 15:15:10 ETA= 6.2m tpr=3.28e-01 ETF=15:21:23 mem:557.0MB +876/2000 43.8% complete 15:15:15 ETA= 8.2m tpr=4.38e-01 ETF=15:23:27 mem:559.7MB +887/2000 44.4% complete 15:15:21 ETA= 9.2m tpr=4.95e-01 ETF=15:24:32 mem:560.5MB +898/2000 44.9% complete 15:15:26 ETA= 9.2m tpr=4.99e-01 ETF=15:24:37 mem:560.5MB +908/2000 45.4% complete 15:15:32 ETA= 9.5m tpr=5.23e-01 ETF=15:25:03 mem:560.5MB +919/2000 46.0% complete 15:15:37 ETA= 8.3m tpr=4.60e-01 ETF=15:23:54 mem:560.9MB +934/2000 46.7% complete 15:15:42 ETA= 6.4m tpr=3.60e-01 ETF=15:22:06 mem:561.7MB +947/2000 47.4% complete 15:15:47 ETA= 7.2m tpr=4.08e-01 ETF=15:22:57 mem:561.7MB +956/2000 47.8% complete 15:15:53 ETA= 11.1m tpr=6.39e-01 ETF=15:27:01 mem:561.7MB +963/2000 48.1% complete 15:15:58 ETA= 12.6m tpr=7.30e-01 ETF=15:28:35 mem:561.7MB +969/2000 48.5% complete 15:16:04 ETA= 15.2m tpr=8.85e-01 ETF=15:31:16 mem:561.9MB +979/2000 49.0% complete 15:16:11 ETA= 11.9m tpr=7.01e-01 ETF=15:28:06 mem:562.0MB +988/2000 49.4% complete 15:16:16 ETA= 9.7m tpr=5.76e-01 ETF=15:25:59 mem:562.0MB +995/2000 49.8% complete 15:16:21 ETA= 12.3m tpr=7.37e-01 ETF=15:28:42 mem:562.2MB +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:16:25,175 DEBUG MainProcess] --- Signaling stop to processes +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +1003/2000 50.1% complete 15:16:26 ETA= 11.2m tpr=6.76e-01 ETF=15:27:40 mem:563.0MB +1015/2000 50.8% complete 15:16:32 ETA= 7.6m tpr=4.65e-01 ETF=15:24:10 mem:563.0MB +1025/2000 51.2% complete 15:16:37 ETA= 8.1m tpr=5.01e-01 ETF=15:24:45 mem:563.0MB +1033/2000 51.6% complete 15:16:42 ETA= 10.7m tpr=6.65e-01 ETF=15:27:26 mem:563.0MB +1040/2000 52.0% complete 15:16:47 ETA= 12.1m tpr=7.55e-01 ETF=15:28:52 mem:563.5MB +1048/2000 52.4% complete 15:16:53 ETA= 11.8m tpr=7.45e-01 ETF=15:28:42 mem:563.5MB +1057/2000 52.9% complete 15:16:59 ETA= 9.1m tpr=5.78e-01 ETF=15:26:03 mem:563.6MB +1062/2000 53.1% complete 15:17:04 ETA= 15.7m tpr=1.01e+00 ETF=15:32:47 mem:564.4MB +1069/2000 53.5% complete 15:17:09 ETA= 12.4m tpr=7.97e-01 ETF=15:29:31 mem:564.9MB +1077/2000 53.9% complete 15:17:15 ETA= 11.5m tpr=7.46e-01 ETF=15:28:44 mem:565.0MB +1085/2000 54.2% complete 15:17:20 ETA= 10.0m tpr=6.55e-01 ETF=15:27:20 mem:565.0MB +1091/2000 54.5% complete 15:17:26 ETA= 13.8m tpr=9.10e-01 ETF=15:31:13 mem:565.9MB +1099/2000 55.0% complete 15:17:32 ETA= 12.1m tpr=8.05e-01 ETF=15:29:37 mem:566.5MB +1114/2000 55.7% complete 15:17:37 ETA= 5.0m tpr=3.35e-01 ETF=15:22:34 mem:566.5MB +1126/2000 56.3% complete 15:17:43 ETA= 6.8m tpr=4.64e-01 ETF=15:24:29 mem:566.5MB +1134/2000 56.7% complete 15:17:48 ETA= 9.2m tpr=6.37e-01 ETF=15:27:00 mem:566.6MB +1139/2000 57.0% complete 15:17:54 ETA= 16.3m tpr=1.14e+00 ETF=15:34:13 mem:567.4MB +1148/2000 57.4% complete 15:17:59 ETA= 8.8m tpr=6.20e-01 ETF=15:26:47 mem:567.4MB +1156/2000 57.8% complete 15:18:05 ETA= 9.3m tpr=6.60e-01 ETF=15:27:22 mem:567.5MB +1162/2000 58.1% complete 15:18:11 ETA= 14.3m tpr=1.02e+00 ETF=15:32:28 mem:567.6MB +1168/2000 58.4% complete 15:18:17 ETA= 15.2m tpr=1.09e+00 ETF=15:33:27 mem:568.6MB +1177/2000 58.9% complete 15:18:23 ETA= 8.8m tpr=6.45e-01 ETF=15:27:14 mem:568.6MB +1181/2000 59.0% complete 15:18:28 ETA= 17.8m tpr=1.30e+00 ETF=15:36:16 mem:568.7MB +1187/2000 59.4% complete 15:18:34 ETA= 12.1m tpr=8.93e-01 ETF=15:30:40 mem:568.7MB +1194/2000 59.7% complete 15:18:39 ETA= 9.8m tpr=7.29e-01 ETF=15:28:26 mem:568.8MB +1202/2000 60.1% complete 15:18:44 ETA= 9.5m tpr=7.12e-01 ETF=15:28:12 mem:568.8MB +1219/2000 61.0% complete 15:18:51 ETA= 5.3m tpr=4.07e-01 ETF=15:24:09 mem:569.7MB +1228/2000 61.4% complete 15:18:57 ETA= 7.4m tpr=5.76e-01 ETF=15:26:21 mem:569.7MB +1234/2000 61.7% complete 15:19:02 ETA= 11.8m tpr=9.22e-01 ETF=15:30:48 mem:571.7MB1235/2000 61.8% complete 15:19:02 ETA= 10.1m tpr=7.92e-01 ETF=15:29:08 mem:571.7MB + +1243/2000 62.1% complete 15:19:07 ETA= 7.3m tpr=5.79e-01 ETF=15:26:26 mem:573.4MB +1251/2000 62.5% complete 15:19:13 ETA= 8.3m tpr=6.68e-01 ETF=15:27:33 mem:575.4MB +1260/2000 63.0% complete 15:19:19 ETA= 8.2m tpr=6.65e-01 ETF=15:27:31 mem:575.4MB +1268/2000 63.4% complete 15:19:24 ETA= 7.8m tpr=6.41e-01 ETF=15:27:13 mem:576.8MB +1276/2000 63.8% complete 15:19:29 ETA= 7.6m tpr=6.30e-01 ETF=15:27:05 mem:577.0MB +1282/2000 64.1% complete 15:19:34 ETA= 10.1m tpr=8.44e-01 ETF=15:29:40 mem:578.0MB +1289/2000 64.5% complete 15:19:40 ETA= 10.8m tpr=9.08e-01 ETF=15:30:26 mem:578.0MB +1295/2000 64.8% complete 15:19:46 ETA= 10.5m tpr=8.95e-01 ETF=15:30:16 mem:578.1MB +1309/2000 65.5% complete 15:19:51 ETA= 4.3m tpr=3.70e-01 ETF=15:24:06 mem:578.1MB +1323/2000 66.2% complete 15:19:58 ETA= 6.1m tpr=5.45e-01 ETF=15:26:07 mem:579.2MB +1332/2000 66.6% complete 15:20:03 ETA= 6.2m tpr=5.58e-01 ETF=15:26:16 mem:579.3MB +1338/2000 66.9% complete 15:20:09 ETA= 10.1m tpr=9.11e-01 ETF=15:30:12 mem:579.3MB +1346/2000 67.3% complete 15:20:18 ETA= 12.5m tpr=1.14e+00 ETF=15:32:46 mem:581.5MB +1355/2000 67.8% complete 15:20:25 ETA= 8.5m tpr=7.90e-01 ETF=15:28:54 mem:581.6MB +1359/2000 68.0% complete 15:20:30 ETA= 13.9m tpr=1.30e+00 ETF=15:34:26 mem:581.6MB +1366/2000 68.3% complete 15:20:38 ETA= 11.7m tpr=1.10e+00 ETF=15:32:18 mem:581.7MB +1376/2000 68.8% complete 15:20:44 ETA= 6.1m tpr=5.89e-01 ETF=15:26:51 mem:581.7MB +1384/2000 69.2% complete 15:20:49 ETA= 6.9m tpr=6.76e-01 ETF=15:27:46 mem:581.7MB +1393/2000 69.7% complete 15:20:55 ETA= 6.2m tpr=6.13e-01 ETF=15:27:07 mem:581.8MB1394/2000 69.7% complete 15:20:55 ETA= 5.6m tpr=5.52e-01 ETF=15:26:29 mem:581.8MB + +1423/2000 71.2% complete 15:21:00 ETA= 1.6m tpr=1.69e-01 ETF=15:22:37 mem:581.9MB +1435/2000 71.8% complete 15:21:07 ETA= 5.6m tpr=5.92e-01 ETF=15:26:42 mem:582.3MB +1443/2000 72.2% complete 15:21:12 ETA= 6.1m tpr=6.54e-01 ETF=15:27:17 mem:582.5MB +1445/2000 72.2% complete 15:21:18 ETA= 28.2m tpr=3.05e+00 ETF=15:49:28 mem:582.6MB +1448/2000 72.4% complete 15:21:25 ETA= 20.0m tpr=2.18e+00 ETF=15:41:27 mem:582.6MB +1454/2000 72.7% complete 15:21:31 ETA= 8.6m tpr=9.49e-01 ETF=15:30:09 mem:583.0MB +1455/2000 72.8% complete 15:21:37 ETA= 54.9m tpr=6.05e+00 ETF=16:16:32 mem:583.0MB +1459/2000 73.0% complete 15:21:43 ETA= 13.5m tpr=1.50e+00 ETF=15:35:12 mem:583.0MB +1465/2000 73.2% complete 15:21:48 ETA= 8.6m tpr=9.65e-01 ETF=15:30:25 mem:583.0MB +1474/2000 73.7% complete 15:21:54 ETA= 5.6m tpr=6.38e-01 ETF=15:27:30 mem:583.0MB +1482/2000 74.1% complete 15:21:59 ETA= 5.4m tpr=6.30e-01 ETF=15:27:26 mem:583.0MB +1485/2000 74.2% complete 15:22:04 ETA= 14.8m tpr=1.73e+00 ETF=15:36:54 mem:583.5MB +1487/2000 74.3% complete 15:22:10 ETA= 24.9m tpr=2.91e+00 ETF=15:47:02 mem:583.5MB +1496/2000 74.8% complete 15:22:16 ETA= 5.0m tpr=5.91e-01 ETF=15:27:13 mem:583.7MB +1509/2000 75.5% complete 15:22:21 ETA= 3.6m tpr=4.40e-01 ETF=15:25:57 mem:583.9MB +1523/2000 76.2% complete 15:22:27 ETA= 3.0m tpr=3.80e-01 ETF=15:25:28 mem:583.9MB +1531/2000 76.5% complete 15:22:33 ETA= 5.9m tpr=7.60e-01 ETF=15:28:29 mem:583.9MB +1537/2000 76.8% complete 15:22:38 ETA= 6.7m tpr=8.71e-01 ETF=15:29:21 mem:583.9MB +1545/2000 77.2% complete 15:22:44 ETA= 5.4m tpr=7.14e-01 ETF=15:28:08 mem:584.0MB +1555/2000 77.8% complete 15:22:49 ETA= 4.1m tpr=5.52e-01 ETF=15:26:55 mem:584.2MB +1564/2000 78.2% complete 15:22:54 ETA= 4.2m tpr=5.78e-01 ETF=15:27:06 mem:584.2MB +1574/2000 78.7% complete 15:23:00 ETA= 4.4m tpr=6.16e-01 ETF=15:27:23 mem:584.4MB +1584/2000 79.2% complete 15:23:07 ETA= 4.4m tpr=6.28e-01 ETF=15:27:28 mem:584.8MB +1594/2000 79.7% complete 15:23:12 ETA= 3.8m tpr=5.66e-01 ETF=15:27:02 mem:584.9MB +1607/2000 80.3% complete 15:23:17 ETA= 2.5m tpr=3.86e-01 ETF=15:25:49 mem:585.0MB +1618/2000 80.9% complete 15:23:24 ETA= 3.8m tpr=5.97e-01 ETF=15:27:12 mem:585.4MB +1628/2000 81.4% complete 15:23:29 ETA= 3.3m tpr=5.28e-01 ETF=15:26:46 mem:585.5MB +1635/2000 81.8% complete 15:23:34 ETA= 4.4m tpr=7.30e-01 ETF=15:28:01 mem:585.9MB +1645/2000 82.2% complete 15:23:40 ETA= 3.4m tpr=5.81e-01 ETF=15:27:06 mem:585.9MB +1655/2000 82.8% complete 15:23:47 ETA= 4.0m tpr=7.02e-01 ETF=15:27:49 mem:586.0MB1656/2000 82.8% complete 15:23:47 ETA= 3.7m tpr=6.39e-01 ETF=15:27:27 mem:586.0MB + +1664/2000 83.2% complete 15:23:54 ETA= 4.5m tpr=8.01e-01 ETF=15:28:23 mem:586.1MB +1674/2000 83.7% complete 15:24:02 ETA= 4.5m tpr=8.27e-01 ETF=15:28:31 mem:586.2MB +1684/2000 84.2% complete 15:24:07 ETA= 2.9m tpr=5.55e-01 ETF=15:27:03 mem:586.2MB +1691/2000 84.5% complete 15:24:13 ETA= 4.2m tpr=8.21e-01 ETF=15:28:27 mem:586.5MB +1699/2000 85.0% complete 15:24:19 ETA= 3.4m tpr=6.75e-01 ETF=15:27:42 mem:586.5MB +1713/2000 85.7% complete 15:24:24 ETA= 1.9m tpr=4.07e-01 ETF=15:26:21 mem:586.6MB +1725/2000 86.2% complete 15:24:31 ETA= 2.6m tpr=5.57e-01 ETF=15:27:04 mem:586.7MB +1735/2000 86.8% complete 15:24:38 ETA= 3.0m tpr=6.76e-01 ETF=15:27:37 mem:586.7MB +1745/2000 87.2% complete 15:24:44 ETA= 2.7m tpr=6.40e-01 ETF=15:27:27 mem:586.9MB +1755/2000 87.8% complete 15:24:51 ETA= 2.8m tpr=6.88e-01 ETF=15:27:40 mem:586.9MB +1763/2000 88.2% complete 15:24:56 ETA= 2.6m tpr=6.59e-01 ETF=15:27:32 mem:586.9MB +1767/2000 88.3% complete 15:25:02 ETA= 5.3m tpr=1.36e+00 ETF=15:30:18 mem:586.9MB +1776/2000 88.8% complete 15:25:09 ETA= 2.9m tpr=7.71e-01 ETF=15:28:01 mem:586.9MB +1785/2000 89.2% complete 15:25:14 ETA= 2.1m tpr=5.90e-01 ETF=15:27:21 mem:586.9MB +1793/2000 89.7% complete 15:25:19 ETA= 2.2m tpr=6.29e-01 ETF=15:27:29 mem:587.1MB +1801/2000 90.0% complete 15:25:24 ETA= 2.2m tpr=6.59e-01 ETF=15:27:35 mem:587.1MB +1812/2000 90.6% complete 15:25:29 ETA= 1.5m tpr=4.68e-01 ETF=15:26:57 mem:587.1MB +1822/2000 91.1% complete 15:25:35 ETA= 1.6m tpr=5.54e-01 ETF=15:27:14 mem:587.4MB +1830/2000 91.5% complete 15:25:41 ETA= 2.1m tpr=7.49e-01 ETF=15:27:48 mem:587.4MB +1839/2000 92.0% complete 15:25:47 ETA= 1.7m tpr=6.21e-01 ETF=15:27:27 mem:587.4MB +1847/2000 92.3% complete 15:25:52 ETA= 1.8m tpr=7.10e-01 ETF=15:27:41 mem:587.4MB +1855/2000 92.8% complete 15:25:59 ETA= 2.0m tpr=8.17e-01 ETF=15:27:57 mem:587.6MB +1864/2000 93.2% complete 15:26:05 ETA= 1.5m tpr=6.79e-01 ETF=15:27:37 mem:587.8MB +1873/2000 93.7% complete 15:26:10 ETA= 1.3m tpr=6.07e-01 ETF=15:27:27 mem:588.0MB +1884/2000 94.2% complete 15:26:16 ETA= 57.0s tpr=4.91e-01 ETF=15:27:13 mem:588.1MB +1895/2000 94.8% complete 15:26:21 ETA= 48.7s tpr=4.63e-01 ETF=15:27:09 mem:588.8MB +1907/2000 95.3% complete 15:26:27 ETA= 45.6s tpr=4.91e-01 ETF=15:27:12 mem:588.9MB +1916/2000 95.8% complete 15:26:33 ETA= 57.5s tpr=6.84e-01 ETF=15:27:30 mem:589.1MB +1926/2000 96.3% complete 15:26:39 ETA= 46.5s tpr=6.28e-01 ETF=15:27:26 mem:589.1MB +1936/2000 96.8% complete 15:26:46 ETA= 42.0s tpr=6.57e-01 ETF=15:27:28 mem:589.1MB +1946/2000 97.3% complete 15:26:53 ETA= 40.1s tpr=7.42e-01 ETF=15:27:33 mem:589.2MB +1956/2000 97.8% complete 15:26:59 ETA= 25.1s tpr=5.70e-01 ETF=15:27:24 mem:589.2MB +1966/2000 98.3% complete 15:27:04 ETA= 19.1s tpr=5.62e-01 ETF=15:27:24 mem:589.5MB +1976/2000 98.8% complete 15:27:10 ETA= 14.4s tpr=6.01e-01 ETF=15:27:25 mem:589.5MB +1987/2000 99.3% complete 15:27:16 ETA= 6.4s tpr=4.92e-01 ETF=15:27:22 mem:589.5MB +1998/2000 99.9% complete 15:27:21 ETA= 1.0s tpr=4.85e-01 ETF=15:27:22 mem:589.6MB +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:27:22,382 DEBUG Process-5] --- Process-3 is finishing. +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Process 3 finished: + generator started at 2021-09-10T15:14:08.117391, done at 2021-09-10T15:27:22.400722 (total: 794.283331s of which 792.6935975551605s interfacing with binary_c). + Ran 499 systems with a total probability of 0.17005450973840136. + This thread had 0 failing systems with a total probability of 0. + Skipped a total of 0 systems because they had 0 probability +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:27:22,435 DEBUG Process-5] --- Process-3 is finished. +[2021-09-10 15:27:22,480 DEBUG Process-3] --- Process-1 is finishing. +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Process 1 finished: + generator started at 2021-09-10T15:14:08.080367, done at 2021-09-10T15:27:22.505288 (total: 794.424921s of which 793.1943278312683s interfacing with binary_c). + Ran 474 systems with a total probability of 0.15740832333567983. + This thread had 0 failing systems with a total probability of 0. + Skipped a total of 0 systems because they had 0 probability +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:27:22,531 DEBUG Process-3] --- Process-1 is finished. +[2021-09-10 15:27:22,846 DEBUG Process-2] --- Process-0 is finishing. +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Process 0 finished: + generator started at 2021-09-10T15:14:08.077117, done at 2021-09-10T15:27:22.851971 (total: 794.774854s of which 793.4976091384888s interfacing with binary_c). + Ran 507 systems with a total probability of 0.16018641159091498. + This thread had 0 failing systems with a total probability of 0. + Skipped a total of 0 systems because they had 0 probability +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:27:22,872 DEBUG Process-2] --- Process-0 is finished. +[2021-09-10 15:27:22,976 DEBUG Process-4] --- Process-2 is finishing. +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Process 2 finished: + generator started at 2021-09-10T15:14:08.084369, done at 2021-09-10T15:27:22.981706 (total: 794.897337s of which 793.4600214958191s interfacing with binary_c). + Ran 520 systems with a total probability of 0.1618606489196724. + This thread had 0 failing systems with a total probability of 0. + Skipped a total of 0 systems because they had 0 probability +</pre></div></div> +</div> +<div class="nboutput docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area stderr docutils container"> +<div class="highlight"><pre> +[2021-09-10 15:27:22,986 DEBUG Process-4] --- Process-2 is finished. +</pre></div></div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Population-0fa295ee5c76444bace8fd0ee17a3e11 finished! The total probability was: 0.6495098935846686. It took a total of 795.1383104324341s to run 2000 systems on 4 cores +There were no errors found in this run. +Done population run! +</pre></div></div> +</div> +<p>After the run is complete, some technical report on the run is returned. I stored that in <code class="docutils literal notranslate"><span class="pre">analytics</span></code>. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging.</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[12]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="nb">print</span><span class="p">(</span><span class="n">analytics</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +{'population_name': '0fa295ee5c76444bace8fd0ee17a3e11', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.6495098935846686, 'total_count': 2000, 'start_timestamp': 1631283248.057525, 'end_timestamp': 1631284043.1958354, 'total_mass_run': 41112.220964392276, 'total_probability_weighted_mass_run': 0.6452116023479681, 'zero_prob_stars_skipped': 0} +</pre></div></div> +</div> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[13]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># make a plot of the luminosity distribution using Seaborn and Pandas</span> +<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span> +<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.functions</span> <span class="kn">import</span> <span class="n">pad_output_distribution</span> + +<span class="c1"># set the figure size (for a Jupyter notebook in a web browser)</span> +<span class="n">sns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> <span class="n">rc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'figure.figsize'</span><span class="p">:(</span><span class="mi">20</span><span class="p">,</span><span class="mi">10</span><span class="p">)}</span> <span class="p">)</span> + +<span class="n">titles</span> <span class="o">=</span> <span class="p">{</span> <span class="mi">0</span> <span class="p">:</span> <span class="s2">"Primary"</span><span class="p">,</span> + <span class="mi">1</span> <span class="p">:</span> <span class="s2">"Secondary"</span><span class="p">,</span> + <span class="mi">2</span> <span class="p">:</span> <span class="s2">"Unresolved"</span> <span class="p">}</span> + +<span class="c1"># choose to plot the</span> +<span class="c1"># PRIMARY, SECONDARY or UNRESOLVED</span> +<span class="n">nstar</span> <span class="o">=</span> <span class="n">UNRESOLVED</span> + +<span class="n">plots</span> <span class="o">=</span> <span class="p">{}</span> + +<span class="c1"># pad the distribution with zeros where data is missing</span> +<span class="k">for</span> <span class="n">n</span> <span class="ow">in</span> <span class="nb">range</span><span class="p">(</span><span class="mi">0</span><span class="p">,</span><span class="mi">3</span><span class="p">):</span> + <span class="n">pad_output_distribution</span><span class="p">(</span><span class="n">population</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">][</span><span class="n">n</span><span class="p">],</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + <span class="n">plots</span><span class="p">[</span><span class="n">titles</span><span class="p">[</span><span class="n">n</span><span class="p">]</span> <span class="o">+</span> <span class="s1">' ZAMS luminosity distribution'</span><span class="p">]</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">][</span><span class="n">n</span><span class="p">]</span> + +<span class="c1"># make pandas dataframe from our sorted dictionary of data</span> +<span class="n">plot_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">(</span><span class="n">plots</span><span class="p">)</span> + +<span class="c1"># make the plot</span> +<span class="n">p</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">lineplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"$\log_</span><span class="si">{10}</span><span class="s2">$ ($L_\mathrm</span><span class="si">{ZAMS}</span><span class="s2">$ / L$_{☉}$)"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">"Number of stars"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">yscale</span><span class="o">=</span><span class="s2">"log"</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nboutput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[13]: +</pre></div> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +[None] +</pre></div></div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<img alt="_images/notebook_luminosity_function_binaries_20_1.png" src="_images/notebook_luminosity_function_binaries_20_1.png" /> +</div> +</div> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[ ]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span> +</pre></div> +</div> +</div> +</div> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="binary_c_parameters.html" class="btn btn-neutral float-right" title="Binary_c parameters" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="notebook_luminosity_function_single.html" class="btn btn-neutral float-left" title="Example use case: Zero-age stellar luminosity function" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + + © Copyright 2021, David Hendriks, Robert Izzard + + </p> + </div> + + + + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a + + <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> + + provided by <a href="https://readthedocs.org">Read the Docs</a>. +<br><br> +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +<br><br> +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. + + + +</footer> + + </div> + </div> + + </section> + + </div> + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/docs/build/html/notebook_luminosity_function_binaries.ipynb b/docs/build/html/notebook_luminosity_function_binaries.ipynb new file mode 100644 index 000000000..fb64dbcc9 --- /dev/null +++ b/docs/build/html/notebook_luminosity_function_binaries.ipynb @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": {}, + "source": [ + "# Zero-age stellar luminosity function in binaries\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c. \n", + "\n", + "Before you go through this notebook, you should look at notebook_luminosity_function.ipynb which is for the - conceptually more simple - single stars.\n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " )\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 1.0 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up the binary grid in \"cubic\" M1 - M2=q*M1 - log10 period space\n", + "\n", + "population = Population()\n", + "\n", + "# resolution on each side of the cube, with more stars for the primary mass\n", + "nres = 10\n", + "resolution = {\"M_1\": 2*nres,\n", + " \"q\": nres,\n", + " \"per\": nres}\n", + "\n", + "massrange = [0.07,100]\n", + "logperrange = [0.15, 5.5]\n", + "\n", + "population.add_grid_variable(\n", + " name=\"lnm1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{}\".format(resolution[\"M_1\"]),\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min=massrange[0],max=massrange[1],res=resolution[\"M_1\"]),\n", + " precode=\"M_1=math.exp(lnm1)\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnm1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")\n", + "\n", + "# Mass ratio\n", + "population.add_grid_variable(\n", + " name=\"q\",\n", + " longname=\"Mass ratio\",\n", + " valuerange=[\"0.1/M_1\", 1],\n", + " resolution=\"{}\".format(resolution['q']),\n", + " spacingfunc=\"const({}/M_1, 1, {})\".format(massrange[0],resolution['q']),\n", + " probdist=\"flatsections(q, [{{'min': {}/M_1, 'max': 1.0, 'height': 1}}])\".format(massrange[0]),\n", + " dphasevol=\"dq\",\n", + " precode=\"M_2 = q * M_1\",\n", + " parameter_name=\"M_2\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + " )\n", + "\n", + "# Orbital period\n", + "population.add_grid_variable(\n", + " name=\"log10per\", # in days\n", + " longname=\"log10(Orbital_Period)\",\n", + " valuerange=[0.15, 5.5],\n", + " resolution=\"{}\".format(resolution[\"per\"]),\n", + " spacingfunc=\"const({}, {}, {})\".format(logperrange[0],logperrange[1],resolution[\"per\"]),\n", + " precode=\"\"\"orbital_period = 10.0 ** log10per\n", + "sep = calc_sep_from_period(M_1, M_2, orbital_period)\n", + "sep_min = calc_sep_from_period(M_1, M_2, 10**{})\n", + "sep_max = calc_sep_from_period(M_1, M_2, 10**{})\"\"\".format(logperrange[0],logperrange[1]),\n", + " probdist=\"sana12(M_1, M_2, sep, orbital_period, sep_min, sep_max, math.log10(10**{}), math.log10(10**{}), {})\".format(logperrange[0],logperrange[1],-0.55),\n", + " parameter_name=\"orbital_period\",\n", + " dphasevol=\"dlog10per\",\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The \n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STARn\n", + "#\n", + "# where:\n", + "#\n", + "# n = PRIMARY = 0 is star 0 (primary star)\n", + "# n = SECONDARY = 1 is star 1 (secondary star)\n", + "# n = UNRESOLVED = 2 is the unresolved system (both stars added)\n", + "\n", + "PRIMARY = 0\n", + "SECONDARY = 1\n", + "UNRESOLVED = 2\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "// select ZAMS\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->model.time == 0)\n", + "{\n", + " // loop over the stars individually (equivalent to a resolved binary) \n", + " Foreach_star(star)\n", + " {\n", + " // select main-sequence stars\n", + " if(star->stellar_type <= MAIN_SEQUENCE)\n", + " {\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " star->starnum,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " star->mass, // 3\n", + " star->luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + " }\n", + " \n", + " // unresolved MS-MS binary\n", + " if(stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->star[1].stellar_type <= MAIN_SEQUENCE) \n", + " {\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " 2,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0] + stardata->common.zero_age.mass[1], // 2\n", + " stardata->star[0].mass + stardata->star[1].mass, // 3\n", + " stardata->star[0].luminosity + stardata->star[1].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + "}\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "import re\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " \n", + " # check if we match a ZERO_AGE_MAIN_SEQUENCE_STAR\n", + " match = re.search('ZERO_AGE_MAIN_SEQUENCE_STAR(\\d)',line) \n", + " if match:\n", + " nstar = match.group(1) \n", + " #print(\"matched star\",nstar)\n", + "\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + "\n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][int(nstar)][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: amt_cores=4 to grid_options\n", + "Running the population now, this may take a little while...\n", + "Creating and loading custom logging functionality\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "Grid has handled 2000 stars\n", + "with a total probability of 0.6495098935846658\n", + "Total starcount for this run will be: 2000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:14:08,077 DEBUG Process-2] --- Setting up processor: process-0[2021-09-10 15:14:08,080 DEBUG Process-3] --- Setting up processor: process-1[2021-09-10 15:14:08,086 DEBUG MainProcess] --- setting up the system_queue_filler now\n", + "\n", + "[2021-09-10 15:14:08,084 DEBUG Process-4] --- Setting up processor: process-2\n", + "\n", + "[2021-09-10 15:14:08,117 DEBUG Process-5] --- Setting up processor: process-3" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 started at 2021-09-10T15:14:08.119437.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>Process 0 started at 2021-09-10T15:14:08.126435.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>\n", + "Process 2 started at 2021-09-10T15:14:08.138353.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Process 3 started at 2021-09-10T15:14:08.186492.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "624/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB625/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.04e-03 ETF=15:14:23 mem:800.5MB\n", + "626/2000 31.3% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB\n", + "\n", + "713/2000 35.6% complete 15:14:17 ETA= 1.3m tpr=6.00e-02 ETF=15:15:34 mem:547.8MB\n", + "728/2000 36.4% complete 15:14:22 ETA= 7.1m tpr=3.37e-01 ETF=15:21:30 mem:548.1MB\n", + "743/2000 37.1% complete 15:14:27 ETA= 7.0m tpr=3.34e-01 ETF=15:21:26 mem:549.5MB\n", + "759/2000 38.0% complete 15:14:33 ETA= 7.7m tpr=3.73e-01 ETF=15:22:16 mem:550.5MB\n", + "774/2000 38.7% complete 15:14:38 ETA= 6.9m tpr=3.35e-01 ETF=15:21:29 mem:551.1MB\n", + "787/2000 39.4% complete 15:14:43 ETA= 7.8m tpr=3.88e-01 ETF=15:22:33 mem:551.1MB\n", + "799/2000 40.0% complete 15:14:48 ETA= 8.5m tpr=4.24e-01 ETF=15:23:17 mem:552.5MB\n", + "812/2000 40.6% complete 15:14:54 ETA= 8.4m tpr=4.23e-01 ETF=15:23:16 mem:554.8MB\n", + "830/2000 41.5% complete 15:14:59 ETA= 5.5m tpr=2.80e-01 ETF=15:20:26 mem:555.2MB\n", + "847/2000 42.4% complete 15:15:05 ETA= 6.8m tpr=3.52e-01 ETF=15:21:50 mem:555.2MB\n", + "864/2000 43.2% complete 15:15:10 ETA= 6.2m tpr=3.28e-01 ETF=15:21:23 mem:557.0MB\n", + "876/2000 43.8% complete 15:15:15 ETA= 8.2m tpr=4.38e-01 ETF=15:23:27 mem:559.7MB\n", + "887/2000 44.4% complete 15:15:21 ETA= 9.2m tpr=4.95e-01 ETF=15:24:32 mem:560.5MB\n", + "898/2000 44.9% complete 15:15:26 ETA= 9.2m tpr=4.99e-01 ETF=15:24:37 mem:560.5MB\n", + "908/2000 45.4% complete 15:15:32 ETA= 9.5m tpr=5.23e-01 ETF=15:25:03 mem:560.5MB\n", + "919/2000 46.0% complete 15:15:37 ETA= 8.3m tpr=4.60e-01 ETF=15:23:54 mem:560.9MB\n", + "934/2000 46.7% complete 15:15:42 ETA= 6.4m tpr=3.60e-01 ETF=15:22:06 mem:561.7MB\n", + "947/2000 47.4% complete 15:15:47 ETA= 7.2m tpr=4.08e-01 ETF=15:22:57 mem:561.7MB\n", + "956/2000 47.8% complete 15:15:53 ETA= 11.1m tpr=6.39e-01 ETF=15:27:01 mem:561.7MB\n", + "963/2000 48.1% complete 15:15:58 ETA= 12.6m tpr=7.30e-01 ETF=15:28:35 mem:561.7MB\n", + "969/2000 48.5% complete 15:16:04 ETA= 15.2m tpr=8.85e-01 ETF=15:31:16 mem:561.9MB\n", + "979/2000 49.0% complete 15:16:11 ETA= 11.9m tpr=7.01e-01 ETF=15:28:06 mem:562.0MB\n", + "988/2000 49.4% complete 15:16:16 ETA= 9.7m tpr=5.76e-01 ETF=15:25:59 mem:562.0MB\n", + "995/2000 49.8% complete 15:16:21 ETA= 12.3m tpr=7.37e-01 ETF=15:28:42 mem:562.2MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:16:25,175 DEBUG MainProcess] --- Signaling stop to processes\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1003/2000 50.1% complete 15:16:26 ETA= 11.2m tpr=6.76e-01 ETF=15:27:40 mem:563.0MB\n", + "1015/2000 50.8% complete 15:16:32 ETA= 7.6m tpr=4.65e-01 ETF=15:24:10 mem:563.0MB\n", + "1025/2000 51.2% complete 15:16:37 ETA= 8.1m tpr=5.01e-01 ETF=15:24:45 mem:563.0MB\n", + "1033/2000 51.6% complete 15:16:42 ETA= 10.7m tpr=6.65e-01 ETF=15:27:26 mem:563.0MB\n", + "1040/2000 52.0% complete 15:16:47 ETA= 12.1m tpr=7.55e-01 ETF=15:28:52 mem:563.5MB\n", + "1048/2000 52.4% complete 15:16:53 ETA= 11.8m tpr=7.45e-01 ETF=15:28:42 mem:563.5MB\n", + "1057/2000 52.9% complete 15:16:59 ETA= 9.1m tpr=5.78e-01 ETF=15:26:03 mem:563.6MB\n", + "1062/2000 53.1% complete 15:17:04 ETA= 15.7m tpr=1.01e+00 ETF=15:32:47 mem:564.4MB\n", + "1069/2000 53.5% complete 15:17:09 ETA= 12.4m tpr=7.97e-01 ETF=15:29:31 mem:564.9MB\n", + "1077/2000 53.9% complete 15:17:15 ETA= 11.5m tpr=7.46e-01 ETF=15:28:44 mem:565.0MB\n", + "1085/2000 54.2% complete 15:17:20 ETA= 10.0m tpr=6.55e-01 ETF=15:27:20 mem:565.0MB\n", + "1091/2000 54.5% complete 15:17:26 ETA= 13.8m tpr=9.10e-01 ETF=15:31:13 mem:565.9MB\n", + "1099/2000 55.0% complete 15:17:32 ETA= 12.1m tpr=8.05e-01 ETF=15:29:37 mem:566.5MB\n", + "1114/2000 55.7% complete 15:17:37 ETA= 5.0m tpr=3.35e-01 ETF=15:22:34 mem:566.5MB\n", + "1126/2000 56.3% complete 15:17:43 ETA= 6.8m tpr=4.64e-01 ETF=15:24:29 mem:566.5MB\n", + "1134/2000 56.7% complete 15:17:48 ETA= 9.2m tpr=6.37e-01 ETF=15:27:00 mem:566.6MB\n", + "1139/2000 57.0% complete 15:17:54 ETA= 16.3m tpr=1.14e+00 ETF=15:34:13 mem:567.4MB\n", + "1148/2000 57.4% complete 15:17:59 ETA= 8.8m tpr=6.20e-01 ETF=15:26:47 mem:567.4MB\n", + "1156/2000 57.8% complete 15:18:05 ETA= 9.3m tpr=6.60e-01 ETF=15:27:22 mem:567.5MB\n", + "1162/2000 58.1% complete 15:18:11 ETA= 14.3m tpr=1.02e+00 ETF=15:32:28 mem:567.6MB\n", + "1168/2000 58.4% complete 15:18:17 ETA= 15.2m tpr=1.09e+00 ETF=15:33:27 mem:568.6MB\n", + "1177/2000 58.9% complete 15:18:23 ETA= 8.8m tpr=6.45e-01 ETF=15:27:14 mem:568.6MB\n", + "1181/2000 59.0% complete 15:18:28 ETA= 17.8m tpr=1.30e+00 ETF=15:36:16 mem:568.7MB\n", + "1187/2000 59.4% complete 15:18:34 ETA= 12.1m tpr=8.93e-01 ETF=15:30:40 mem:568.7MB\n", + "1194/2000 59.7% complete 15:18:39 ETA= 9.8m tpr=7.29e-01 ETF=15:28:26 mem:568.8MB\n", + "1202/2000 60.1% complete 15:18:44 ETA= 9.5m tpr=7.12e-01 ETF=15:28:12 mem:568.8MB\n", + "1219/2000 61.0% complete 15:18:51 ETA= 5.3m tpr=4.07e-01 ETF=15:24:09 mem:569.7MB\n", + "1228/2000 61.4% complete 15:18:57 ETA= 7.4m tpr=5.76e-01 ETF=15:26:21 mem:569.7MB\n", + "1234/2000 61.7% complete 15:19:02 ETA= 11.8m tpr=9.22e-01 ETF=15:30:48 mem:571.7MB1235/2000 61.8% complete 15:19:02 ETA= 10.1m tpr=7.92e-01 ETF=15:29:08 mem:571.7MB\n", + "\n", + "1243/2000 62.1% complete 15:19:07 ETA= 7.3m tpr=5.79e-01 ETF=15:26:26 mem:573.4MB\n", + "1251/2000 62.5% complete 15:19:13 ETA= 8.3m tpr=6.68e-01 ETF=15:27:33 mem:575.4MB\n", + "1260/2000 63.0% complete 15:19:19 ETA= 8.2m tpr=6.65e-01 ETF=15:27:31 mem:575.4MB\n", + "1268/2000 63.4% complete 15:19:24 ETA= 7.8m tpr=6.41e-01 ETF=15:27:13 mem:576.8MB\n", + "1276/2000 63.8% complete 15:19:29 ETA= 7.6m tpr=6.30e-01 ETF=15:27:05 mem:577.0MB\n", + "1282/2000 64.1% complete 15:19:34 ETA= 10.1m tpr=8.44e-01 ETF=15:29:40 mem:578.0MB\n", + "1289/2000 64.5% complete 15:19:40 ETA= 10.8m tpr=9.08e-01 ETF=15:30:26 mem:578.0MB\n", + "1295/2000 64.8% complete 15:19:46 ETA= 10.5m tpr=8.95e-01 ETF=15:30:16 mem:578.1MB\n", + "1309/2000 65.5% complete 15:19:51 ETA= 4.3m tpr=3.70e-01 ETF=15:24:06 mem:578.1MB\n", + "1323/2000 66.2% complete 15:19:58 ETA= 6.1m tpr=5.45e-01 ETF=15:26:07 mem:579.2MB\n", + "1332/2000 66.6% complete 15:20:03 ETA= 6.2m tpr=5.58e-01 ETF=15:26:16 mem:579.3MB\n", + "1338/2000 66.9% complete 15:20:09 ETA= 10.1m tpr=9.11e-01 ETF=15:30:12 mem:579.3MB\n", + "1346/2000 67.3% complete 15:20:18 ETA= 12.5m tpr=1.14e+00 ETF=15:32:46 mem:581.5MB\n", + "1355/2000 67.8% complete 15:20:25 ETA= 8.5m tpr=7.90e-01 ETF=15:28:54 mem:581.6MB\n", + "1359/2000 68.0% complete 15:20:30 ETA= 13.9m tpr=1.30e+00 ETF=15:34:26 mem:581.6MB\n", + "1366/2000 68.3% complete 15:20:38 ETA= 11.7m tpr=1.10e+00 ETF=15:32:18 mem:581.7MB\n", + "1376/2000 68.8% complete 15:20:44 ETA= 6.1m tpr=5.89e-01 ETF=15:26:51 mem:581.7MB\n", + "1384/2000 69.2% complete 15:20:49 ETA= 6.9m tpr=6.76e-01 ETF=15:27:46 mem:581.7MB\n", + "1393/2000 69.7% complete 15:20:55 ETA= 6.2m tpr=6.13e-01 ETF=15:27:07 mem:581.8MB1394/2000 69.7% complete 15:20:55 ETA= 5.6m tpr=5.52e-01 ETF=15:26:29 mem:581.8MB\n", + "\n", + "1423/2000 71.2% complete 15:21:00 ETA= 1.6m tpr=1.69e-01 ETF=15:22:37 mem:581.9MB\n", + "1435/2000 71.8% complete 15:21:07 ETA= 5.6m tpr=5.92e-01 ETF=15:26:42 mem:582.3MB\n", + "1443/2000 72.2% complete 15:21:12 ETA= 6.1m tpr=6.54e-01 ETF=15:27:17 mem:582.5MB\n", + "1445/2000 72.2% complete 15:21:18 ETA= 28.2m tpr=3.05e+00 ETF=15:49:28 mem:582.6MB\n", + "1448/2000 72.4% complete 15:21:25 ETA= 20.0m tpr=2.18e+00 ETF=15:41:27 mem:582.6MB\n", + "1454/2000 72.7% complete 15:21:31 ETA= 8.6m tpr=9.49e-01 ETF=15:30:09 mem:583.0MB\n", + "1455/2000 72.8% complete 15:21:37 ETA= 54.9m tpr=6.05e+00 ETF=16:16:32 mem:583.0MB\n", + "1459/2000 73.0% complete 15:21:43 ETA= 13.5m tpr=1.50e+00 ETF=15:35:12 mem:583.0MB\n", + "1465/2000 73.2% complete 15:21:48 ETA= 8.6m tpr=9.65e-01 ETF=15:30:25 mem:583.0MB\n", + "1474/2000 73.7% complete 15:21:54 ETA= 5.6m tpr=6.38e-01 ETF=15:27:30 mem:583.0MB\n", + "1482/2000 74.1% complete 15:21:59 ETA= 5.4m tpr=6.30e-01 ETF=15:27:26 mem:583.0MB\n", + "1485/2000 74.2% complete 15:22:04 ETA= 14.8m tpr=1.73e+00 ETF=15:36:54 mem:583.5MB\n", + "1487/2000 74.3% complete 15:22:10 ETA= 24.9m tpr=2.91e+00 ETF=15:47:02 mem:583.5MB\n", + "1496/2000 74.8% complete 15:22:16 ETA= 5.0m tpr=5.91e-01 ETF=15:27:13 mem:583.7MB\n", + "1509/2000 75.5% complete 15:22:21 ETA= 3.6m tpr=4.40e-01 ETF=15:25:57 mem:583.9MB\n", + "1523/2000 76.2% complete 15:22:27 ETA= 3.0m tpr=3.80e-01 ETF=15:25:28 mem:583.9MB\n", + "1531/2000 76.5% complete 15:22:33 ETA= 5.9m tpr=7.60e-01 ETF=15:28:29 mem:583.9MB\n", + "1537/2000 76.8% complete 15:22:38 ETA= 6.7m tpr=8.71e-01 ETF=15:29:21 mem:583.9MB\n", + "1545/2000 77.2% complete 15:22:44 ETA= 5.4m tpr=7.14e-01 ETF=15:28:08 mem:584.0MB\n", + "1555/2000 77.8% complete 15:22:49 ETA= 4.1m tpr=5.52e-01 ETF=15:26:55 mem:584.2MB\n", + "1564/2000 78.2% complete 15:22:54 ETA= 4.2m tpr=5.78e-01 ETF=15:27:06 mem:584.2MB\n", + "1574/2000 78.7% complete 15:23:00 ETA= 4.4m tpr=6.16e-01 ETF=15:27:23 mem:584.4MB\n", + "1584/2000 79.2% complete 15:23:07 ETA= 4.4m tpr=6.28e-01 ETF=15:27:28 mem:584.8MB\n", + "1594/2000 79.7% complete 15:23:12 ETA= 3.8m tpr=5.66e-01 ETF=15:27:02 mem:584.9MB\n", + "1607/2000 80.3% complete 15:23:17 ETA= 2.5m tpr=3.86e-01 ETF=15:25:49 mem:585.0MB\n", + "1618/2000 80.9% complete 15:23:24 ETA= 3.8m tpr=5.97e-01 ETF=15:27:12 mem:585.4MB\n", + "1628/2000 81.4% complete 15:23:29 ETA= 3.3m tpr=5.28e-01 ETF=15:26:46 mem:585.5MB\n", + "1635/2000 81.8% complete 15:23:34 ETA= 4.4m tpr=7.30e-01 ETF=15:28:01 mem:585.9MB\n", + "1645/2000 82.2% complete 15:23:40 ETA= 3.4m tpr=5.81e-01 ETF=15:27:06 mem:585.9MB\n", + "1655/2000 82.8% complete 15:23:47 ETA= 4.0m tpr=7.02e-01 ETF=15:27:49 mem:586.0MB1656/2000 82.8% complete 15:23:47 ETA= 3.7m tpr=6.39e-01 ETF=15:27:27 mem:586.0MB\n", + "\n", + "1664/2000 83.2% complete 15:23:54 ETA= 4.5m tpr=8.01e-01 ETF=15:28:23 mem:586.1MB\n", + "1674/2000 83.7% complete 15:24:02 ETA= 4.5m tpr=8.27e-01 ETF=15:28:31 mem:586.2MB\n", + "1684/2000 84.2% complete 15:24:07 ETA= 2.9m tpr=5.55e-01 ETF=15:27:03 mem:586.2MB\n", + "1691/2000 84.5% complete 15:24:13 ETA= 4.2m tpr=8.21e-01 ETF=15:28:27 mem:586.5MB\n", + "1699/2000 85.0% complete 15:24:19 ETA= 3.4m tpr=6.75e-01 ETF=15:27:42 mem:586.5MB\n", + "1713/2000 85.7% complete 15:24:24 ETA= 1.9m tpr=4.07e-01 ETF=15:26:21 mem:586.6MB\n", + "1725/2000 86.2% complete 15:24:31 ETA= 2.6m tpr=5.57e-01 ETF=15:27:04 mem:586.7MB\n", + "1735/2000 86.8% complete 15:24:38 ETA= 3.0m tpr=6.76e-01 ETF=15:27:37 mem:586.7MB\n", + "1745/2000 87.2% complete 15:24:44 ETA= 2.7m tpr=6.40e-01 ETF=15:27:27 mem:586.9MB\n", + "1755/2000 87.8% complete 15:24:51 ETA= 2.8m tpr=6.88e-01 ETF=15:27:40 mem:586.9MB\n", + "1763/2000 88.2% complete 15:24:56 ETA= 2.6m tpr=6.59e-01 ETF=15:27:32 mem:586.9MB\n", + "1767/2000 88.3% complete 15:25:02 ETA= 5.3m tpr=1.36e+00 ETF=15:30:18 mem:586.9MB\n", + "1776/2000 88.8% complete 15:25:09 ETA= 2.9m tpr=7.71e-01 ETF=15:28:01 mem:586.9MB\n", + "1785/2000 89.2% complete 15:25:14 ETA= 2.1m tpr=5.90e-01 ETF=15:27:21 mem:586.9MB\n", + "1793/2000 89.7% complete 15:25:19 ETA= 2.2m tpr=6.29e-01 ETF=15:27:29 mem:587.1MB\n", + "1801/2000 90.0% complete 15:25:24 ETA= 2.2m tpr=6.59e-01 ETF=15:27:35 mem:587.1MB\n", + "1812/2000 90.6% complete 15:25:29 ETA= 1.5m tpr=4.68e-01 ETF=15:26:57 mem:587.1MB\n", + "1822/2000 91.1% complete 15:25:35 ETA= 1.6m tpr=5.54e-01 ETF=15:27:14 mem:587.4MB\n", + "1830/2000 91.5% complete 15:25:41 ETA= 2.1m tpr=7.49e-01 ETF=15:27:48 mem:587.4MB\n", + "1839/2000 92.0% complete 15:25:47 ETA= 1.7m tpr=6.21e-01 ETF=15:27:27 mem:587.4MB\n", + "1847/2000 92.3% complete 15:25:52 ETA= 1.8m tpr=7.10e-01 ETF=15:27:41 mem:587.4MB\n", + "1855/2000 92.8% complete 15:25:59 ETA= 2.0m tpr=8.17e-01 ETF=15:27:57 mem:587.6MB\n", + "1864/2000 93.2% complete 15:26:05 ETA= 1.5m tpr=6.79e-01 ETF=15:27:37 mem:587.8MB\n", + "1873/2000 93.7% complete 15:26:10 ETA= 1.3m tpr=6.07e-01 ETF=15:27:27 mem:588.0MB\n", + "1884/2000 94.2% complete 15:26:16 ETA= 57.0s tpr=4.91e-01 ETF=15:27:13 mem:588.1MB\n", + "1895/2000 94.8% complete 15:26:21 ETA= 48.7s tpr=4.63e-01 ETF=15:27:09 mem:588.8MB\n", + "1907/2000 95.3% complete 15:26:27 ETA= 45.6s tpr=4.91e-01 ETF=15:27:12 mem:588.9MB\n", + "1916/2000 95.8% complete 15:26:33 ETA= 57.5s tpr=6.84e-01 ETF=15:27:30 mem:589.1MB\n", + "1926/2000 96.3% complete 15:26:39 ETA= 46.5s tpr=6.28e-01 ETF=15:27:26 mem:589.1MB\n", + "1936/2000 96.8% complete 15:26:46 ETA= 42.0s tpr=6.57e-01 ETF=15:27:28 mem:589.1MB\n", + "1946/2000 97.3% complete 15:26:53 ETA= 40.1s tpr=7.42e-01 ETF=15:27:33 mem:589.2MB\n", + "1956/2000 97.8% complete 15:26:59 ETA= 25.1s tpr=5.70e-01 ETF=15:27:24 mem:589.2MB\n", + "1966/2000 98.3% complete 15:27:04 ETA= 19.1s tpr=5.62e-01 ETF=15:27:24 mem:589.5MB\n", + "1976/2000 98.8% complete 15:27:10 ETA= 14.4s tpr=6.01e-01 ETF=15:27:25 mem:589.5MB\n", + "1987/2000 99.3% complete 15:27:16 ETA= 6.4s tpr=4.92e-01 ETF=15:27:22 mem:589.5MB\n", + "1998/2000 99.9% complete 15:27:21 ETA= 1.0s tpr=4.85e-01 ETF=15:27:22 mem:589.6MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,382 DEBUG Process-5] --- Process-3 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 3 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.117391, done at 2021-09-10T15:27:22.400722 (total: 794.283331s of which 792.6935975551605s interfacing with binary_c).\n", + "\tRan 499 systems with a total probability of 0.17005450973840136.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,435 DEBUG Process-5] --- Process-3 is finished.\n", + "[2021-09-10 15:27:22,480 DEBUG Process-3] --- Process-1 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.080367, done at 2021-09-10T15:27:22.505288 (total: 794.424921s of which 793.1943278312683s interfacing with binary_c).\n", + "\tRan 474 systems with a total probability of 0.15740832333567983.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,531 DEBUG Process-3] --- Process-1 is finished.\n", + "[2021-09-10 15:27:22,846 DEBUG Process-2] --- Process-0 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 0 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.077117, done at 2021-09-10T15:27:22.851971 (total: 794.774854s of which 793.4976091384888s interfacing with binary_c).\n", + "\tRan 507 systems with a total probability of 0.16018641159091498.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,872 DEBUG Process-2] --- Process-0 is finished.\n", + "[2021-09-10 15:27:22,976 DEBUG Process-4] --- Process-2 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 2 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.084369, done at 2021-09-10T15:27:22.981706 (total: 794.897337s of which 793.4600214958191s interfacing with binary_c).\n", + "\tRan 520 systems with a total probability of 0.1618606489196724.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,986 DEBUG Process-4] --- Process-2 is finished.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Population-0fa295ee5c76444bace8fd0ee17a3e11 finished! The total probability was: 0.6495098935846686. It took a total of 795.1383104324341s to run 2000 systems on 4 cores\n", + "There were no errors found in this run.\n", + "Done population run!\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=1,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=4,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "print(\"Running the population now, this may take a little while...\")\n", + "analytics = population.evolve() \n", + "print(\"Done population run!\")\n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '0fa295ee5c76444bace8fd0ee17a3e11', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.6495098935846686, 'total_count': 2000, 'start_timestamp': 1631283248.057525, 'end_timestamp': 1631284043.1958354, 'total_mass_run': 41112.220964392276, 'total_probability_weighted_mass_run': 0.6452116023479681, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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p9///vdq2bKlJKlFixbavn274VSIBLNnz1aPHj1Uq1YtJSQkaMiQIZoyZYrpWIggWVlZuuWWW+TxeOR2u9WkSRNt27bNdCxEmIKCAj3xxBO66qqrTEdBBPrkk080fPhw1a5dW263W0888YQ6dOhgOhYiSDAYVCgUUllZmQKBgAKBgLxer+lYMYMB0//YvHmz6tatqwceeEBnnXWWbrjhBrndbtOxEGFmzJih8vJyDR061HQURCCPx6Ozzz5bkhQKhTR+/HgNHDjQcCpEgl27dikrK6vycnZ2tnbu3GkwESJNs2bN1LFjR0nShg0b9NFHH6l///5mQyHi3HnnnbrxxhuVkpJiOgoi0MaNGxUMBnX55ZfrrLPO0muvvabU1FTTsRBBkpKS9Pvf/17Dhg1Tv379lJubq86dO5uOFTNcpgOY8vHHH+vBBx884rqGDRtq+fLluv7663X77bfrrbfe0i233KJXXnnFUErY2U89hxo3bqzi4mK99NJLZkIhohztOfTSSy/J5/PplltuUSAQ0JVXXmkoISJJOBz+0XWWZRlIgki3Zs0aXXnllbr55pvVqFEj03EQQd566y3VqVNHPXv21Lvvvms6DiJQMBjU/Pnz9corryghIUHXXHONJk6cqHPPPdd0NESIlStX6p133tGnn36q5ORk/elPf9K//vUv/fa3vzUdLSZY4Z/6jTRGbdq0Seecc44WLFgg6UB/s0ePHlq8eLHhZIgUb731lv75z38qMTFR0oEfcC1bttSrr76qpKQkw+kQKUpKSnT11VerVq1aeuyxx+TxeExHQgSYOHGi5s+fr/vvv1+S9I9//EPhcFjXXXed4WSIJAsWLNANN9yg2267TWeccYbpOIgwv/nNb7R79245nU7t379fpaWlGjlypG677TbT0RAh/va3v6m4uFjjxo2TJL366qtas2aN7r77brPBEDFeeOEF7d27VzfffLMk6bPPPtNrr72m5557znCy2EBF7n80aNBAOTk5lRvJffrpp2rTpo3hVIgk5513nqZPn65JkyZp0qRJkg6cYsBwCSfiz3/+sxo2bKgnn3yS4RKOW69evTRnzhzl5+errKxM06ZNU79+/UzHQgTZvn27rr32Wj322GMMl/CLvPjii/rggw80adIk3XDDDTrttNMYLuGEnHrqqZo1a5YKCwsVDAb15Zdf8noMJ6Rly5aaPXu2SktLFQ6HNXPmTLVr1850rJgRsxW5oxk/frzuuusuPfroo0pKStJDDz1kOhKAGLJ8+XLNmDFDTZs21ciRIyUd2Evn+eefNxsMtpeTk6Mbb7xRF198sfx+v0aPHq327dubjoUI8q9//UsVFRVH/O4zduxYnX/++QZTAYglHTp00G9/+1tdcMEF8vv96t27t0aNGmU6FiJInz59tHz5cp177rlyu91q166drrjiCtOxYgYVOQAAAAAAAJwUKnIAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASWHABAAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAEPFOO+00zZ4923QMAACAmMWACQAAoIrl5+erRYsW2rlzp+koAAAANYIBEwAAQBV47LHH9OWXX0qSVq5cqfT0dOXk5BhOdcANN9yg1atXV17esmWLOnXq9Ivuq6SkRL/97W9VXl5eVfEAAEAUYMAEAACiyrp163TRRRepa9euOuOMMzRjxozKzy1btkwjR45Up06ddMMNN+gPf/iDnnjiiZN+zEWLFmnt2rXq27evJGnFihVq2bLlSd9vVfD5fNq4caOaN29eJfeXmJioM888U08++WSV3B8AAIgODJgAAEDU8Pv9uuqqq9S7d2/Nnj1b48aN05/+9CetX79ePp9P1113nc455xzNmzdPZ555pqZPn14lj/vUU09pzJgxlZftNGCaPXu2evbsWaX3OWzYME2ePFl79uyp0vsFAACRiwETAACIGosXL1ZpaamuuOIKeTwe9ezZU6eeeqo+/PBDLV68WIFAQBdffLHcbrcGDx6sdu3aVX5tUVGRRo8erU6dOh1RJ3v00Ud1wQUX6M9//rP8fv+PHrOwsFALFixQ7969K69buXKlWrVq9aPbvvHGG7rooosq/7Rv315Lliyp/PzYsWM1fvx4SQdqbC1atNDXX38t6cBKpG7dumnChAmSpOLiYl111VW66KKLNGbMGH3++ec/+T2ZMWOGBg4ceCLfxmPyer3q3LnzUR8TAADEHpfpAAAAAFVl165dql27thyOw++h1a1bVzt37tSuXbuUk5Mjy7IqP1enTp3Kj+Pi4vTcc8/pkUceqbxu5cqV2rlzp1577TU988wzmjp1qs4888wjHnPjxo3KysqSx+ORJFVUVOj7779X69atf5RvzJgxlSudZs6cqYkTJ6p9+/aSpO3btysnJ0fz5s2rvH3btm31ySefqEePHpozZ44aNmxY+blJkyapb9++uvDCCxUOh1VUVPSjxwuFQlq0aJHuvvvu4/r+HbJz5069/PLLCgQCCofDatWqlc4555wjbtOgQQN9//33J3S/AAAgerGCCQAARI3s7Gzt2LFDoVCo8rpDg5usrCzt3LlT4XD4iM8d4na7lZ6efsT9LVy4UH369JEk9e3bVwsXLvzRYzocDgWDwcrLq1evlsvlUl5e3lFz5ufn68knn9Q999xTed3UqVM1YsQINW7cWOvWrZMk5ebmatu2bQqHw/rkk080ePDgytt7vV4tWrRIe/bskWVZSklJ+dHjLF68WG3btpXT6Txqlh8KhUJ6//33deONN+rWW2/VbbfdpiZNmuizzz474nbBYPCE7hcAAEQ3BkwAACBqtG/fXnFxcXrhhRfk9/s1d+5czZw5U8OHD1fHjh3ldDo1YcIEBQIBTZ8+Xd99993P3l9hYaGSkpIkScnJydq/f/+PblO/fn3l5+eroqJC0oFVT02aNFEgEFBFRYUqKirk8/mO+Jq7775bv//9748YaM2aNUv9+vXTmWeeqSlTplRe36lTJ33zzTfKz89XZmZm5fVnn3228vLydPnll2vMmDFav379j7JNnz5dp59++nF85w5bsmSJRo4cKZfLpY8//lhbt25V+/btVVZWdsTttmzZ8rNDNAAAEFsYMAEAgKjh8Xj07LPP6osvvlCPHj10zz336JFHHlGTJk3k8Xj01FNP6e2331a3bt30/vvva8CAAZXVtp+SnJys4uJiSQf2aEpNTf3RbVJSUtSlS5fKvZJWrFihZcuWqX379pV/hg8fXnn79957T8nJyTrttNMqr9uxY4fWrFmjq6++Ws8888wRexsNHjxYDz74oE455ZQjHtftduuaa67RpEmTdMMNN+ipp576UbbZs2dXrsD6odLSUnXq1OmIP6tWrZLT6axcAfbss89q/vz5knTEaiWfz6dvv/32iH8HAAAQ29iDCQAARLyZM2dWftysWbPKjbB/qF27dpo0aVLl5fPOO0+nnnrqUe+3c+fOevHFFzVy5EjNmjVLnTt3/snbXXvttXr22WfVv39/3Xnnnbrzzjt/8nbbt2/XSy+99KN8U6ZM0a233qqhQ4dKOrDC6dCqp0aNGqlLly4aOnSoZs+eXfk1W7durdz7KSMj44jq3yETJ078yRz16tXTqlWrfvJzfr9fL7/8si655JLK79V33313xIDpgw8+0IgRI36ylgcAAGITAyYAABAz5s2bp7y8PKWlpWny5MlatWqV+vbtW/n53/3ud1qxYoW+//57jRkzRueee64yMjJ0wQUXqE6dOrrssst+8n47d+6svLw8ffHFF+rXr99RH/+f//ynCgsLdfXVV1ded80112jatGn6xz/+UXld9+7d9fHHH1deHjdu3I/ua/Xq1brxxhvl9XoVDoePOtQ6UW63W8OGDdPjjz9euZKpWbNmGj16tKQDp9d98MEHlafdAQAASJIV/qm3uwAAAKLQG2+8oSeffFJlZWWqV6+e/vjHP2rAgAGmYwEAAEQ8BkwAAAAAAAA4KWzyDQAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAAAAAAJwUBkwAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASfl/6hNZaplFmREAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "titles = { 0 : \"Primary\",\n", + " 1 : \"Secondary\",\n", + " 2 : \"Unresolved\" }\n", + "\n", + "# choose to plot the \n", + "# PRIMARY, SECONDARY or UNRESOLVED\n", + "nstar = UNRESOLVED\n", + "\n", + "plots = {}\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "for n in range(0,3):\n", + " pad_output_distribution(population.grid_results['luminosity distribution'][n],\n", + " binwidth['luminosity'])\n", + " plots[titles[n] + ' ZAMS luminosity distribution'] = population.grid_results['luminosity distribution'][n]\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict(plots)\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7541ebf-fe9a-4fb0-a88e-bb318d06f9eb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/html/notebook_luminosity_function_single.html b/docs/build/html/notebook_luminosity_function_single.html new file mode 100644 index 000000000..e2821b3be --- /dev/null +++ b/docs/build/html/notebook_luminosity_function_single.html @@ -0,0 +1,1035 @@ + + +<!DOCTYPE html> +<html class="writer-html5" lang="en" > +<head> + <meta charset="utf-8"> + + <meta name="viewport" content="width=device-width, initial-scale=1.0"> + + <title>Example use case: Zero-age stellar luminosity function — binary_c-python documentation</title> + + + + <link rel="stylesheet" href="_static/css/theme.css" type="text/css" /> + <link rel="stylesheet" href="_static/pygments.css" type="text/css" /> + + + + + + + + <!--[if lt IE 9]> + <script src="_static/js/html5shiv.min.js"></script> + <![endif]--> + + + <script type="text/javascript" id="documentation_options" data-url_root="./" src="_static/documentation_options.js"></script> + <script src="_static/jquery.js"></script> + <script src="_static/underscore.js"></script> + <script src="_static/doctools.js"></script> + <script src="_static/language_data.js"></script> + <script crossorigin="anonymous" integrity="sha256-Ae2Vz/4ePdIu6ZyI/5ZGsYnb+m0JlOmKPjt6XZ9JJkA=" src="https://cdnjs.cloudflare.com/ajax/libs/require.js/2.3.4/require.min.js"></script> + <script async="async" src="https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.7/latest.js?config=TeX-AMS-MML_HTMLorMML"></script> + <script type="text/x-mathjax-config">MathJax.Hub.Config({"tex2jax": {"inlineMath": [["$", "$"], ["\\(", "\\)"]], "processEscapes": true, "ignoreClass": "document", "processClass": "math|output_area"}})</script> + + <script type="text/javascript" src="_static/js/theme.js"></script> + + + <link rel="index" title="Index" href="genindex.html" /> + <link rel="search" title="Search" href="search.html" /> + <link rel="next" title="Zero-age stellar luminosity function in binaries" href="notebook_luminosity_function_binaries.html" /> + <link rel="prev" title="Using the API functionality of binarycpython" href="notebook_api_functionality.html" /> +</head> + +<body class="wy-body-for-nav"> + + + <div class="wy-grid-for-nav"> + + <nav data-toggle="wy-nav-shift" class="wy-nav-side"> + <div class="wy-side-scroll"> + <div class="wy-side-nav-search" > + + + + <a href="index.html" class="icon icon-home" alt="Documentation Home"> binary_c-python + + + + </a> + + + + + + + +<div role="search"> + <form id="rtd-search-form" class="wy-form" action="search.html" method="get"> + <input type="text" name="q" placeholder="Search docs" /> + <input type="hidden" name="check_keywords" value="yes" /> + <input type="hidden" name="area" value="default" /> + </form> +</div> + + + </div> + + + <div class="wy-menu wy-menu-vertical" data-spy="affix" role="navigation" aria-label="main navigation"> + + + + + + + <p class="caption"><span class="caption-text">Contents:</span></p> +<ul class="current"> +<li class="toctree-l1"><a class="reference internal" href="readme_link.html">Python module for binary_c</a></li> +<li class="toctree-l1"><a class="reference internal" href="modules.html">Binarycpython code</a></li> +<li class="toctree-l1 current"><a class="reference internal" href="example_notebooks.html">Example notebooks</a><ul class="current"> +<li class="toctree-l2"><a class="reference internal" href="notebook_individual_systems.html">Running individual systems with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_custom_logging.html">Using custom logging routines with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_population.html">Running populations with binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2 current"><a class="current reference internal" href="#">Example use case: Zero-age stellar luminosity function</a><ul> +<li class="toctree-l3"><a class="reference internal" href="#Setting-up-the-Population-object">Setting up the Population object</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Adding-grid-variables">Adding grid variables</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Setting-logging-and-handling-the-output">Setting logging and handling the output</a></li> +<li class="toctree-l3"><a class="reference internal" href="#Evolving-the-grid">Evolving the grid</a></li> +<li class="toctree-l3"><a class="reference internal" href="#ZAMS-Luminosity-distribution-with-the-initial-mass-function">ZAMS Luminosity distribution with the initial mass function</a></li> +</ul> +</li> +<li class="toctree-l2"><a class="reference internal" href="#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> +</ul> +</li> +<li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> +<li class="toctree-l1"><a class="reference internal" href="grid_options_descriptions.html">Population grid code options</a></li> +<li class="toctree-l1"><a class="reference external" href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python">Visit the GitLab repo</a></li> +<li class="toctree-l1"><a class="reference external" href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/issues/new">Submit an issue</a></li> +</ul> + + + + </div> + + </div> + </nav> + + <section data-toggle="wy-nav-shift" class="wy-nav-content-wrap"> + + + <nav class="wy-nav-top" aria-label="top navigation"> + + <i data-toggle="wy-nav-top" class="fa fa-bars"></i> + <a href="index.html">binary_c-python</a> + + </nav> + + + <div class="wy-nav-content"> + + <div class="rst-content"> + + + + + + + + + + + + + + + + + +<div role="navigation" aria-label="breadcrumbs navigation"> + + <ul class="wy-breadcrumbs"> + + <li><a href="index.html" class="icon icon-home"></a> »</li> + + <li><a href="example_notebooks.html">Example notebooks</a> »</li> + + <li>Example use case: Zero-age stellar luminosity function</li> + + + <li class="wy-breadcrumbs-aside"> + + + <a href="_sources/notebook_luminosity_function_single.ipynb.txt" rel="nofollow"> View page source</a> + + + </li> + + </ul> + + + <hr/> +</div> + <div role="main" class="document" itemscope="itemscope" itemtype="http://schema.org/Article"> + <div itemprop="articleBody"> + + +<style> +/* CSS for nbsphinx extension */ + +/* remove conflicting styling from Sphinx themes */ +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt *, +div.nbinput.container div.input_area pre, +div.nboutput.container div.output_area pre, +div.nbinput.container div.input_area .highlight, +div.nboutput.container div.output_area .highlight { + border: none; + padding: 0; + margin: 0; + box-shadow: none; +} + +div.nbinput.container > div[class*=highlight], +div.nboutput.container > div[class*=highlight] { + margin: 0; +} + +div.nbinput.container div.prompt *, +div.nboutput.container div.prompt * { + background: none; +} + +div.nboutput.container div.output_area .highlight, +div.nboutput.container div.output_area pre { + background: unset; +} + +div.nboutput.container div.output_area div.highlight { + color: unset; /* override Pygments text color */ +} + +/* avoid gaps between output lines */ +div.nboutput.container div[class*=highlight] pre { + line-height: normal; +} + +/* input/output containers */ +div.nbinput.container, +div.nboutput.container { + display: -webkit-flex; + display: flex; + align-items: flex-start; + margin: 0; + width: 100%; +} +@media (max-width: 540px) { + div.nbinput.container, + div.nboutput.container { + flex-direction: column; + } +} + +/* input container */ +div.nbinput.container { + padding-top: 5px; +} + +/* last container */ +div.nblast.container { + padding-bottom: 5px; +} + +/* input prompt */ +div.nbinput.container div.prompt pre { + color: #307FC1; +} + +/* output prompt */ +div.nboutput.container div.prompt pre { + color: #BF5B3D; +} + +/* all prompts */ +div.nbinput.container div.prompt, +div.nboutput.container div.prompt { + width: 4.5ex; + padding-top: 5px; + position: relative; + user-select: none; +} + +div.nbinput.container div.prompt > div, +div.nboutput.container div.prompt > div { + position: absolute; + right: 0; + margin-right: 0.3ex; +} + +@media (max-width: 540px) { + div.nbinput.container div.prompt, + div.nboutput.container div.prompt { + width: unset; + text-align: left; + padding: 0.4em; + } + div.nboutput.container div.prompt.empty { + padding: 0; + } + + div.nbinput.container div.prompt > div, + div.nboutput.container div.prompt > div { + position: unset; + } +} + +/* disable scrollbars on prompts */ +div.nbinput.container div.prompt pre, +div.nboutput.container div.prompt pre { + overflow: hidden; +} + +/* input/output area */ +div.nbinput.container div.input_area, +div.nboutput.container div.output_area { + -webkit-flex: 1; + flex: 1; + overflow: auto; +} +@media (max-width: 540px) { + div.nbinput.container div.input_area, + div.nboutput.container div.output_area { + width: 100%; + } +} + +/* input area */ +div.nbinput.container div.input_area { + border: 1px solid #e0e0e0; + border-radius: 2px; + /*background: #f5f5f5;*/ +} + +/* override MathJax center alignment in output cells */ +div.nboutput.container div[class*=MathJax] { + text-align: left !important; +} + +/* override sphinx.ext.imgmath center alignment in output cells */ +div.nboutput.container div.math p { + text-align: left; +} + +/* standard error */ +div.nboutput.container div.output_area.stderr { + background: #fdd; +} + +/* ANSI colors */ +.ansi-black-fg { color: #3E424D; } +.ansi-black-bg { background-color: #3E424D; } +.ansi-black-intense-fg { color: #282C36; } +.ansi-black-intense-bg { background-color: #282C36; } +.ansi-red-fg { color: #E75C58; } +.ansi-red-bg { background-color: #E75C58; } +.ansi-red-intense-fg { color: #B22B31; } +.ansi-red-intense-bg { background-color: #B22B31; } +.ansi-green-fg { color: #00A250; } +.ansi-green-bg { background-color: #00A250; } +.ansi-green-intense-fg { color: #007427; } +.ansi-green-intense-bg { background-color: #007427; } +.ansi-yellow-fg { color: #DDB62B; } +.ansi-yellow-bg { background-color: #DDB62B; } +.ansi-yellow-intense-fg { color: #B27D12; } +.ansi-yellow-intense-bg { background-color: #B27D12; } +.ansi-blue-fg { color: #208FFB; } +.ansi-blue-bg { background-color: #208FFB; } +.ansi-blue-intense-fg { color: #0065CA; } +.ansi-blue-intense-bg { background-color: #0065CA; } +.ansi-magenta-fg { color: #D160C4; } +.ansi-magenta-bg { background-color: #D160C4; } +.ansi-magenta-intense-fg { color: #A03196; } +.ansi-magenta-intense-bg { background-color: #A03196; } +.ansi-cyan-fg { color: #60C6C8; } +.ansi-cyan-bg { background-color: #60C6C8; } +.ansi-cyan-intense-fg { color: #258F8F; } +.ansi-cyan-intense-bg { background-color: #258F8F; } +.ansi-white-fg { color: #C5C1B4; } +.ansi-white-bg { background-color: #C5C1B4; } +.ansi-white-intense-fg { color: #A1A6B2; } +.ansi-white-intense-bg { background-color: #A1A6B2; } + +.ansi-default-inverse-fg { color: #FFFFFF; } +.ansi-default-inverse-bg { background-color: #000000; } + +.ansi-bold { font-weight: bold; } +.ansi-underline { text-decoration: underline; } + + +div.nbinput.container div.input_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight] > pre, +div.nboutput.container div.output_area div[class*=highlight].math, +div.nboutput.container div.output_area.rendered_html, +div.nboutput.container div.output_area > div.output_javascript, +div.nboutput.container div.output_area:not(.rendered_html) > img{ + padding: 5px; + margin: 0; +} + +/* fix copybtn overflow problem in chromium (needed for 'sphinx_copybutton') */ +div.nbinput.container div.input_area > div[class^='highlight'], +div.nboutput.container div.output_area > div[class^='highlight']{ + overflow-y: hidden; +} + +/* hide copybtn icon on prompts (needed for 'sphinx_copybutton') */ +.prompt a.copybtn { + display: none; +} + +/* Some additional styling taken form the Jupyter notebook CSS */ +div.rendered_html table { + border: none; + border-collapse: collapse; + border-spacing: 0; + color: black; + font-size: 12px; + table-layout: fixed; +} +div.rendered_html thead { + border-bottom: 1px solid black; + vertical-align: bottom; +} +div.rendered_html tr, +div.rendered_html th, +div.rendered_html td { + text-align: right; + vertical-align: middle; + padding: 0.5em 0.5em; + line-height: normal; + white-space: normal; + max-width: none; + border: none; +} +div.rendered_html th { + font-weight: bold; +} +div.rendered_html tbody tr:nth-child(odd) { + background: #f5f5f5; +} +div.rendered_html tbody tr:hover { + background: rgba(66, 165, 245, 0.2); +} + +/* CSS overrides for sphinx_rtd_theme */ + +/* 24px margin */ +.nbinput.nblast.container, +.nboutput.nblast.container { + margin-bottom: 19px; /* padding has already 5px */ +} + +/* ... except between code cells! */ +.nblast.container + .nbinput.container { + margin-top: -19px; +} + +.admonition > p:before { + margin-right: 4px; /* make room for the exclamation icon */ +} + +/* Fix math alignment, see https://github.com/rtfd/sphinx_rtd_theme/pull/686 */ +.math { + text-align: unset; +} +</style> +<div class="section" id="Example-use-case:-Zero-age-stellar-luminosity-function"> +<h1>Example use case: Zero-age stellar luminosity function<a class="headerlink" href="#Example-use-case:-Zero-age-stellar-luminosity-function" title="Permalink to this headline">¶</a></h1> +<p>In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of single stars using binary_c.</p> +<p>We start by loading in some standard Python modules and the binary_c module.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[1]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="kn">import</span> <span class="nn">os</span> +<span class="kn">import</span> <span class="nn">math</span> +<span class="kn">import</span> <span class="nn">matplotlib.pyplot</span> <span class="k">as</span> <span class="nn">plt</span> + +<span class="kn">from</span> <span class="nn">binarycpython.utils.functions</span> <span class="kn">import</span> <span class="n">temp_dir</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.grid</span> <span class="kn">import</span> <span class="n">Population</span> + +<span class="n">TMP_DIR</span> <span class="o">=</span> <span class="n">temp_dir</span><span class="p">(</span><span class="s2">"notebooks"</span><span class="p">,</span> <span class="s2">"notebook_luminosity"</span><span class="p">)</span> + +<span class="c1"># help(Population) # Uncomment this line to see the public functions of this object</span> +</pre></div> +</div> +</div> +<div class="section" id="Setting-up-the-Population-object"> +<h2>Setting up the Population object<a class="headerlink" href="#Setting-up-the-Population-object" title="Permalink to this headline">¶</a></h2> +<p>To set up and configure the population object we need to make a new instance of the <code class="docutils literal notranslate"><span class="pre">Population</span></code> object and configure it with the <code class="docutils literal notranslate"><span class="pre">.set()</span></code> function.</p> +<p>In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero.</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[2]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Create population object</span> +<span class="n">population</span> <span class="o">=</span> <span class="n">Population</span><span class="p">()</span> + +<span class="c1"># If you want verbosity, set this before other things</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">verbosity</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> + +<span class="c1"># Setting values can be done via .set(<parameter_name>=<value>)</span> +<span class="c1"># Values that are known to be binary_c_parameters are loaded into bse_options.</span> +<span class="c1"># Those that are present in the default grid_options are set in grid_options</span> +<span class="c1"># All other values that you set are put in a custom_options dict</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="c1"># binary_c physics options</span> + <span class="n">max_evolution_time</span><span class="o">=</span><span class="mf">0.1</span><span class="p">,</span> <span class="c1"># maximum stellar evolution time in Myr</span> + <span class="n">tmp_dir</span><span class="o">=</span><span class="n">TMP_DIR</span><span class="p">,</span> +<span class="p">)</span> + +<span class="c1"># We can access the options through</span> +<span class="nb">print</span><span class="p">(</span><span class="s2">"verbosity is"</span><span class="p">,</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_options</span><span class="p">[</span><span class="s1">'verbosity'</span><span class="p">])</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_luminosity to grid_options +adding: max_evolution_time=0.1 to BSE_options +verbosity is 1 +</pre></div></div> +</div> +</div> +<div class="section" id="Adding-grid-variables"> +<h2>Adding grid variables<a class="headerlink" href="#Adding-grid-variables" title="Permalink to this headline">¶</a></h2> +<p>The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.</p> +<p>Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters.</p> +<p>To add a grid variable to the population object we use <code class="docutils literal notranslate"><span class="pre">population.add_grid_variable</span></code></p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[3]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># help(population.add_grid_variable)</span> +</pre></div> +</div> +</div> +<p>All the distribution functions that we can use are stored in the <code class="docutils literal notranslate"><span class="pre">binarycpython.utils.distribution_functions</span></code> or <code class="docutils literal notranslate"><span class="pre">binarycpython/utils/distribution_functions.py</span></code> on git. If you uncomment the help statement below you can see which functions are available now:</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[4]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="kn">import</span> <span class="nn">binarycpython.utils.distribution_functions</span> +<span class="c1"># help(binarycpython.utils.distribution_functions)</span> +</pre></div> +</div> +</div> +<p>First let us set up some global variables that will be useful throughout. * The resolution is the number of stars we simulate in our model population. * The massrange is a list of the min and max masses * The total_probability is the theoretical integral of a probability density function, i.e. 1.0. * The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log<em>L</em> are 0.5dex wide.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[ ]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Set resolution and mass range that we simulate</span> +<span class="n">resolution</span> <span class="o">=</span> <span class="p">{</span><span class="s2">"M_1"</span><span class="p">:</span> <span class="mi">40</span><span class="p">}</span> <span class="c1"># start with resolution = 10, and increase later if you want "more accurate" data</span> +<span class="n">massrange</span> <span class="o">=</span> <span class="p">(</span><span class="mf">0.07</span><span class="p">,</span> <span class="mf">100.0</span><span class="p">)</span> <span class="c1"># we work with stars of mass 0.07 to 100 Msun</span> +<span class="n">total_probability</span> <span class="o">=</span> <span class="mf">1.0</span> <span class="c1"># theoretical integral of the mass probability density function over all masses</span> +<span class="c1"># distribution binwidths :</span> +<span class="c1"># (log10) luminosity distribution</span> +<span class="n">binwidth</span> <span class="o">=</span> <span class="p">{</span> <span class="s1">'luminosity'</span> <span class="p">:</span> <span class="mf">0.5</span> <span class="p">}</span> +</pre></div> +</div> +</div> +<p>The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass <em>M</em>_1.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[5]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Mass</span> +<span class="n">population</span> <span class="o">=</span> <span class="n">Population</span><span class="p">()</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="n">tmp_dir</span><span class="o">=</span><span class="n">TMP_DIR</span><span class="p">,</span> +<span class="p">)</span> +<span class="n">population</span><span class="o">.</span><span class="n">add_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"M_1"</span><span class="p">,</span> + <span class="n">longname</span><span class="o">=</span><span class="s2">"Primary mass"</span><span class="p">,</span> + <span class="n">valuerange</span><span class="o">=</span><span class="n">massrange</span><span class="p">,</span> + <span class="n">resolution</span><span class="o">=</span><span class="s2">"</span><span class="si">{res}</span><span class="s2">"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">res</span> <span class="o">=</span> <span class="n">resolution</span><span class="p">[</span><span class="s2">"M_1"</span><span class="p">]),</span> + <span class="n">spacingfunc</span><span class="o">=</span><span class="s2">"const(</span><span class="si">{min}</span><span class="s2">, </span><span class="si">{max}</span><span class="s2">, </span><span class="si">{res}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">min</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">max</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">res</span> <span class="o">=</span> <span class="n">resolution</span><span class="p">[</span><span class="s2">"M_1"</span><span class="p">]),</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"</span><span class="si">{probtot}</span><span class="s2">/(</span><span class="si">{max}</span><span class="s2"> - </span><span class="si">{min}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="n">probtot</span> <span class="o">=</span> <span class="n">total_probability</span><span class="p">,</span> <span class="nb">min</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">max</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">1</span><span class="p">]),</span> <span class="c1"># dprob/dm1 : all stars are equally likely so this is 1.0 / (Mmax - Mmin)</span> + <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"dM_1"</span><span class="p">,</span> + <span class="n">parameter_name</span><span class="o">=</span><span class="s2">"M_1"</span><span class="p">,</span> + <span class="n">condition</span><span class="o">=</span><span class="s2">""</span><span class="p">,</span> <span class="c1"># Impose a condition on this grid variable. Mostly for a check for yourself</span> +<span class="p">)</span> +</pre></div> +</div> +</div> +</div> +<div class="section" id="Setting-logging-and-handling-the-output"> +<h2>Setting logging and handling the output<a class="headerlink" href="#Setting-logging-and-handling-the-output" title="Permalink to this headline">¶</a></h2> +<p>By default, binary_c will not output anything (except for ‘SINGLE STAR LIFETIME’). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into <code class="docutils literal notranslate"><span class="pre">binary_c</span></code> (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook <code class="docutils literal notranslate"><span class="pre">notebook_custom_logging.ipynb</span></code>), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, +it works perfectly well.</p> +<p>After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook <code class="docutils literal notranslate"><span class="pre">notebook_individual_systems.ipynb</span></code>).</p> +<p>In the code below we will set up both the custom logging and a parse function to handle that output.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[18]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Create custom logging statement</span> +<span class="c1">#</span> +<span class="c1"># we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)</span> +<span class="c1"># we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star</span> +<span class="c1"># we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)</span> +<span class="c1">#</span> +<span class="c1"># The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STAR</span> + +<span class="n">custom_logging_statement</span> <span class="o">=</span> <span class="s2">"""</span> +<span class="s2">if(stardata->model.model_number == 0 &&</span> +<span class="s2"> stardata->star[0].stellar_type <= MAIN_SEQUENCE &&</span> +<span class="s2"> stardata->model.time == 0)</span> +<span class="s2">{</span> +<span class="s2"> /* Note that we use Printf - with a capital P! */</span> +<span class="s2"> Printf("ZERO_AGE_MAIN_SEQUENCE_STAR </span><span class="si">%30.12e</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="s2"> </span><span class="si">%g</span><span class="se">\\</span><span class="s2">n",</span> +<span class="s2"> stardata->model.time, // 1</span> +<span class="s2"> stardata->common.zero_age.mass[0], // 2</span> +<span class="s2"> stardata->star[0].mass, // 3</span> +<span class="s2"> stardata->star[0].luminosity, // 4</span> +<span class="s2"> stardata->model.probability // 5</span> +<span class="s2"> );</span> +<span class="s2">};</span> +<span class="s2">"""</span> + +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="n">C_logging_code</span><span class="o">=</span><span class="n">custom_logging_statement</span> +<span class="p">)</span> + +</pre></div> +</div> +</div> +<p>The parse function must now catch lines that start with “ZERO_AGE_MAIN_SEQUENCE_STAR†and process the associated data.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[7]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># import the bin_data function so we can construct finite-resolution probability distributions</span> +<span class="c1"># import the datalinedict to make a dictionary from each line of data from binary_c</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.functions</span> <span class="kn">import</span> <span class="n">bin_data</span><span class="p">,</span><span class="n">datalinedict</span> + +<span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> + <span class="sd">"""</span> +<span class="sd"> Example parse function</span> +<span class="sd"> """</span> + + <span class="c1"># list of the data items</span> + <span class="n">parameters</span> <span class="o">=</span> <span class="p">[</span><span class="s2">"header"</span><span class="p">,</span> <span class="s2">"time"</span><span class="p">,</span> <span class="s2">"zams_mass"</span><span class="p">,</span> <span class="s2">"mass"</span><span class="p">,</span> <span class="s2">"luminosity"</span><span class="p">,</span> <span class="s2">"probability"</span><span class="p">]</span> + + <span class="c1"># Loop over the output.</span> + <span class="k">for</span> <span class="n">line</span> <span class="ow">in</span> <span class="n">output</span><span class="o">.</span><span class="n">splitlines</span><span class="p">():</span> + <span class="c1"># obtain the line of data in dictionary form</span> + <span class="n">linedata</span> <span class="o">=</span> <span class="n">datalinedict</span><span class="p">(</span><span class="n">line</span><span class="p">,</span><span class="n">parameters</span><span class="p">)</span> + + <span class="c1"># Check the header and act accordingly</span> + <span class="k">if</span> <span class="n">linedata</span><span class="p">[</span><span class="s1">'header'</span><span class="p">]</span> <span class="o">==</span> <span class="s2">"ZERO_AGE_MAIN_SEQUENCE_STAR"</span><span class="p">:</span> + + <span class="c1"># bin the log10(luminosity) to the nearest 0.1dex</span> + <span class="n">binned_log_luminosity</span> <span class="o">=</span> <span class="n">bin_data</span><span class="p">(</span><span class="n">math</span><span class="o">.</span><span class="n">log10</span><span class="p">(</span><span class="n">linedata</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">]),</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + + <span class="c1"># append the data to the results_dictionary</span> + <span class="bp">self</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">][</span><span class="n">binned_log_luminosity</span><span class="p">]</span> <span class="o">+=</span> <span class="n">linedata</span><span class="p">[</span><span class="s1">'probability'</span><span class="p">]</span> + + <span class="c1">#print (self.grid_results)</span> + + <span class="c1"># verbose reporting</span> + <span class="c1">#print("parse out results_dictionary=",self.grid_results)</span> + +<span class="c1"># Add the parsing function</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="n">parse_function</span><span class="o">=</span><span class="n">parse_function</span><span class="p">,</span> +<span class="p">)</span> +</pre></div> +</div> +</div> +</div> +<div class="section" id="Evolving-the-grid"> +<h2>Evolving the grid<a class="headerlink" href="#Evolving-the-grid" title="Permalink to this headline">¶</a></h2> +<p>Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: <code class="docutils literal notranslate"><span class="pre">population.evolve()</span></code></p> +<p>This will start up the processing of all the systems. We can control how many cores are used by settings <code class="docutils literal notranslate"><span class="pre">amt_cores</span></code>. By setting the <code class="docutils literal notranslate"><span class="pre">verbosity</span></code> of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.</p> +<p>There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: <a class="reference external" href="https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html">grid options docs</a>, and try</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[8]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># set number of threads</span> +<span class="n">population</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> + <span class="c1"># verbose output is not required</span> + <span class="n">verbosity</span><span class="o">=</span><span class="mi">0</span><span class="p">,</span> + <span class="c1"># set number of threads (i.e. number of CPU cores we use)</span> + <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> + <span class="p">)</span> + +<span class="c1"># Evolve the population - this is the slow, number-crunching step</span> +<span class="n">analytics</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> + +<span class="c1"># Show the results (debugging)</span> +<span class="c1"># print (population.grid_results)</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Generating grid code +Constructing/adding: M_1 +Grid has handled 40 stars +with a total probability of 1.0000000000000004 +Total starcount for this run will be: 40 +Generating grid code +Constructing/adding: M_1 +Population-08f8230453084e4ca6a2391d45ce658b finished! The total probability was: 1.0000000000000002. It took a total of 1.5262682437896729s to run 40 systems on 2 cores +There were no errors found in this run. +OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.025), (3.75, 0.05), (4.25, 0.05), (0.25, 0.025), (3.25, 0.025), (5.25, 0.2), (4.75, 0.1), (5.75, 0.39999999999999997), (6.25, 0.125)]))]) +</pre></div></div> +</div> +<p>After the run is complete, some technical report on the run is returned. I stored that in <code class="docutils literal notranslate"><span class="pre">analytics</span></code>. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging.</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[9]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="nb">print</span><span class="p">(</span><span class="n">analytics</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +{'population_name': '08f8230453084e4ca6a2391d45ce658b', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 1.0000000000000002, 'total_count': 40, 'start_timestamp': 1631124829.303065, 'end_timestamp': 1631124830.8293333, 'total_mass_run': 2001.4, 'total_probability_weighted_mass_run': 50.035000000000004, 'zero_prob_stars_skipped': 0} +</pre></div></div> +</div> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[10]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># make a plot of the luminosity distribution using Seaborn and Pandas</span> +<span class="kn">import</span> <span class="nn">seaborn</span> <span class="k">as</span> <span class="nn">sns</span> +<span class="kn">import</span> <span class="nn">pandas</span> <span class="k">as</span> <span class="nn">pd</span> +<span class="kn">from</span> <span class="nn">binarycpython.utils.functions</span> <span class="kn">import</span> <span class="n">pad_output_distribution</span> + +<span class="c1"># set the figure size (for a Jupyter notebook in a web browser)</span> +<span class="n">sns</span><span class="o">.</span><span class="n">set</span><span class="p">(</span> <span class="n">rc</span> <span class="o">=</span> <span class="p">{</span><span class="s1">'figure.figsize'</span><span class="p">:(</span><span class="mi">20</span><span class="p">,</span><span class="mi">10</span><span class="p">)}</span> <span class="p">)</span> + +<span class="c1"># this saves a lot of typing!</span> +<span class="n">ldist</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">]</span> + +<span class="c1"># pad the distribution with zeros where data is missing</span> +<span class="n">pad_output_distribution</span><span class="p">(</span><span class="n">ldist</span><span class="p">,</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + +<span class="c1"># make pandas dataframe from our sorted dictionary of data</span> +<span class="n">plot_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({</span><span class="s1">'ZAMS luminosity distribution'</span> <span class="p">:</span> <span class="n">ldist</span><span class="p">})</span> + +<span class="c1"># make the plot</span> +<span class="n">p</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">lineplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"$\log_</span><span class="si">{10}</span><span class="s2">$ ($L_\mathrm</span><span class="si">{ZAMS}</span><span class="s2">$ / L$_{☉}$)"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">"Number of stars"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">yscale</span><span class="o">=</span><span class="s2">"log"</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nboutput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[10]: +</pre></div> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +[None] +</pre></div></div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<img alt="_images/notebook_luminosity_function_single_20_1.png" src="_images/notebook_luminosity_function_single_20_1.png" /> +</div> +</div> +<p>Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 105.8 L☉! Clearly, this is not very realistic… let’s see what went wrong.</p> +</div> +<div class="section" id="ZAMS-Luminosity-distribution-with-the-initial-mass-function"> +<h2>ZAMS Luminosity distribution with the initial mass function<a class="headerlink" href="#ZAMS-Luminosity-distribution-with-the-initial-mass-function" title="Permalink to this headline">¶</a></h2> +<p>In the previous example, all the stars in our grid had an equal weighting. This is very unlikely to be true in reality: indeed, we know that low mass stars are far more likely than high mass stars. So we now include an initial mass function as a three-part power law based on Kroupa (2001). Kroupa’s distribution is a three-part power law: we have a function that does this for us (it’s very common to use power laws in astrophysics).</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[11]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Update the probability distribution to use the three-part power law IMF</span> +<span class="n">population</span><span class="o">.</span><span class="n">update_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"M_1"</span><span class="p">,</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)"</span><span class="p">,</span> +<span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[12]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Clean and re-evolve the population</span> +<span class="n">population</span><span class="o">.</span><span class="n">clean</span><span class="p">()</span> +<span class="n">analytics</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> + +<span class="c1"># Show the results (debugging)</span> +<span class="c1"># print (population.grid_results)</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Generating grid code +Constructing/adding: M_1 +Grid has handled 40 stars +with a total probability of 0.2182216189410787 +Total starcount for this run will be: 40 +Generating grid code +Constructing/adding: M_1 +Population-92de7c9221c54206ab4dd10e58e09a34 finished! The total probability was: 0.21822161894107872. It took a total of 1.5900418758392334s to run 40 systems on 2 cores +There were no errors found in this run. +OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.0164166), (3.25, 0.00515685), (0.25, 0.189097), (3.75, 0.0037453900000000004), (4.25, 0.0014346559999999999), (5.25, 0.0007493004), (4.75, 0.001171479), (5.75, 0.00039801020000000003), (6.25, 5.2369339999999996e-05)]))]) +</pre></div></div> +</div> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[13]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># plot luminosity distribution</span> +<span class="n">ldist</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">]</span> + +<span class="c1"># pad the distribution with zeros where data is missing</span> +<span class="n">pad_output_distribution</span><span class="p">(</span><span class="n">ldist</span><span class="p">,</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + +<span class="c1"># make pandas dataframe from our sorted dictionary of data</span> +<span class="n">plot_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({</span><span class="s1">'ZAMS luminosity distribution'</span> <span class="p">:</span> <span class="n">ldist</span><span class="p">})</span> + +<span class="c1"># make the plot</span> +<span class="n">p</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">lineplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"$\log_</span><span class="si">{10}</span><span class="s2">$ ($L_\mathrm</span><span class="si">{ZAMS}</span><span class="s2">$ / L$_{☉}$)"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">"Number of stars"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">yscale</span><span class="o">=</span><span class="s2">"log"</span><span class="p">)</span> +</pre></div> +</div> +</div> +<div class="nboutput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[13]: +</pre></div> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +[None] +</pre></div></div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<img alt="_images/notebook_luminosity_function_single_26_1.png" src="_images/notebook_luminosity_function_single_26_1.png" /> +</div> +</div> +<p>This distribution is peaked at low luminosity, as one expects from observations, but the resolution is clearly not great because it’s not smooth - it’s spiky!</p> +<p>If you noticed above, the total probability of the grid was about 0.2. Given that the total probability of a probability distribution function should be 1.0, this shows that our sampling is (very) poor.</p> +<p>We could simply increase the resolution to compensate, but this is very CPU intensive and a complete waste of time and resources. Instead, let’s try sampling the masses of the stars in a smarter way.</p> +</div> +</div> +<div class="section" id="A-better-sampled-grid"> +<h1>A better-sampled grid<a class="headerlink" href="#A-better-sampled-grid" title="Permalink to this headline">¶</a></h1> +<p>The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space.</p> +<p>To do this we first rename the mass grid variable so that it is clear we are working in (natural) logarithmic phase space.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[14]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Rename the old variable (M_1) because we want it to be called lnM_1 now</span> +<span class="n">population</span><span class="o">.</span><span class="n">rename_grid_variable</span><span class="p">(</span><span class="s2">"M_1"</span><span class="p">,</span><span class="s2">"lnM_1"</span><span class="p">)</span> +</pre></div> +</div> +</div> +<p>Next, we change the spacing function so that it works in the log space. We also adapt the probability calculation so that it calculates dprob/dlnM = M * dprob/dM. Finally, we set the precode to compute M_1 because binary_c requires the actual mass, not the logarithm of the mass.</p> +<div class="nbinput nblast docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[15]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># update the sampling, note that the IMF is dprob/dM1, and the phase</span> +<span class="c1"># space is now sampled in lnM1, so we multiply by M_1 to</span> +<span class="c1"># because M * dprob/dM = dprob/dlnM</span> +<span class="n">population</span><span class="o">.</span><span class="n">update_grid_variable</span><span class="p">(</span> + <span class="n">name</span><span class="o">=</span><span class="s2">"lnM_1"</span><span class="p">,</span> + <span class="n">spacingfunc</span><span class="o">=</span><span class="s2">"const(math.log(</span><span class="si">{min}</span><span class="s2">), math.log(</span><span class="si">{max}</span><span class="s2">), </span><span class="si">{res}</span><span class="s2">)"</span><span class="o">.</span><span class="n">format</span><span class="p">(</span><span class="nb">min</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">0</span><span class="p">],</span> <span class="nb">max</span> <span class="o">=</span> <span class="n">massrange</span><span class="p">[</span><span class="mi">1</span><span class="p">],</span> <span class="n">res</span> <span class="o">=</span> <span class="n">resolution</span><span class="p">[</span><span class="s2">"M_1"</span><span class="p">]),</span> + <span class="n">probdist</span><span class="o">=</span><span class="s2">"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1"</span><span class="p">,</span> + <span class="n">dphasevol</span><span class="o">=</span><span class="s2">"dlnM_1"</span><span class="p">,</span> + <span class="n">parameter_name</span><span class="o">=</span><span class="s2">"M_1"</span><span class="p">,</span> + <span class="n">precode</span><span class="o">=</span><span class="s2">"M_1=math.exp(lnM_1)"</span><span class="p">,</span> +<span class="p">)</span> +<span class="c1"># print(population.grid_options["_grid_variables"]) # debugging</span> +</pre></div> +</div> +</div> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[16]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># Clean and re-evolve the population</span> +<span class="n">population</span><span class="o">.</span><span class="n">clean</span><span class="p">()</span> +<span class="n">analytics</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> + +<span class="c1"># Show the results (debugging)</span> +<span class="c1"># print (population.grid_results)</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<div class="highlight"><pre> +Generating grid code +Constructing/adding: lnM_1 +Grid has handled 40 stars +with a total probability of 0.9956307907476224 +Total starcount for this run will be: 40 +Generating grid code +Constructing/adding: lnM_1 +Population-83f80d829dbd418aa2bc745c99b71991 finished! The total probability was: 0.9956307907476224. It took a total of 0.9961590766906738s to run 40 systems on 2 cores +There were no errors found in this run. +OrderedDict([('luminosity distribution', OrderedDict([(0.25, 0.0212294), (2.75, 0.00321118), (-0.25, 0.0268827), (1.25, 0.0104553), (3.75, 0.00283037), (6.25, 7.34708e-05), (-0.75, 0.0771478), (0.75, 0.030004499999999996), (2.25, 0.00921541), (3.25, 0.0045385), (1.75, 0.014776889999999999), (4.25, 0.002380189), (4.75, 0.000869303), (5.25, 0.0007310379999999999), (5.75, 0.00036002859999999996), (-2.75, 0.1961345), (-1.75, 0.2181597), (-3.25, 0.0), (-2.25, 0.2568974), (-1.25, 0.11973310000000001)]))]) +</pre></div></div> +</div> +<p>You should see that the total probability is very close to 1.0, as you would expect for a well-sampled grid. The total will never be exactly 1.0, but that is because we are running a simulation, not a perfect copy of reality.</p> +<div class="nbinput docutils container"> +<div class="prompt highlight-none notranslate"><div class="highlight"><pre><span></span>[17]: +</pre></div> +</div> +<div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> +<span></span><span class="c1"># plot luminosity distribution</span> +<span class="n">ldist</span> <span class="o">=</span> <span class="n">population</span><span class="o">.</span><span class="n">grid_results</span><span class="p">[</span><span class="s1">'luminosity distribution'</span><span class="p">]</span> + +<span class="c1"># pad the distribution with zeros where data is missing</span> +<span class="n">pad_output_distribution</span><span class="p">(</span><span class="n">ldist</span><span class="p">,</span> + <span class="n">binwidth</span><span class="p">[</span><span class="s1">'luminosity'</span><span class="p">])</span> + +<span class="c1"># make pandas dataframe from our sorted dictionary of data</span> +<span class="n">plot_data</span> <span class="o">=</span> <span class="n">pd</span><span class="o">.</span><span class="n">DataFrame</span><span class="o">.</span><span class="n">from_dict</span><span class="p">({</span><span class="s1">'ZAMS luminosity distribution'</span> <span class="p">:</span> <span class="n">ldist</span><span class="p">})</span> + +<span class="c1"># make the plot</span> +<span class="n">p</span> <span class="o">=</span> <span class="n">sns</span><span class="o">.</span><span class="n">lineplot</span><span class="p">(</span><span class="n">data</span><span class="o">=</span><span class="n">plot_data</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_xlabel</span><span class="p">(</span><span class="s2">"$\log_</span><span class="si">{10}</span><span class="s2">$ ($L_\mathrm</span><span class="si">{ZAMS}</span><span class="s2">$ / L$_{☉}$)"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set_ylabel</span><span class="p">(</span><span class="s2">"Number of stars"</span><span class="p">)</span> +<span class="n">p</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">yscale</span><span class="o">=</span><span class="s2">"log"</span><span class="p">)</span> +<span class="n">plt</span><span class="o">.</span><span class="n">show</span><span class="p">()</span> +</pre></div> +</div> +</div> +<div class="nboutput nblast docutils container"> +<div class="prompt empty docutils container"> +</div> +<div class="output_area docutils container"> +<img alt="_images/notebook_luminosity_function_single_34_0.png" src="_images/notebook_luminosity_function_single_34_0.png" /> +</div> +</div> +<p>Most stars are low mass red dwarfs, with small luminosities. Without the IMF weighting, our model population would have got this completely wrong!</p> +<p>As you increase the resolution, you will see this curve becomes even smoother. The wiggles in the curve are (usually) sampling artefacts because the curve should monotonically brighten above about log(<em>L</em>/L☉)=-2.</p> +<p>Remember you can play with the binwidth too. If you want a very accurate distribution you need a narrow binwidth, but then you’ll also need high resolution (lots of stars) so lots of CPU time, hence cost, CO2, etc.</p> +</div> + + + </div> + + </div> + <footer> + + <div class="rst-footer-buttons" role="navigation" aria-label="footer navigation"> + + <a href="notebook_luminosity_function_binaries.html" class="btn btn-neutral float-right" title="Zero-age stellar luminosity function in binaries" accesskey="n" rel="next">Next <span class="fa fa-arrow-circle-right"></span></a> + + + <a href="notebook_api_functionality.html" class="btn btn-neutral float-left" title="Using the API functionality of binarycpython" accesskey="p" rel="prev"><span class="fa fa-arrow-circle-left"></span> Previous</a> + + </div> + + + <hr/> + + <div role="contentinfo"> + <p> + + © Copyright 2021, David Hendriks, Robert Izzard + + </p> + </div> + + + + Built with <a href="http://sphinx-doc.org/">Sphinx</a> using a + + <a href="https://github.com/rtfd/sphinx_rtd_theme">theme</a> + + provided by <a href="https://readthedocs.org">Read the Docs</a>. +<br><br> +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +<br><br> +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. + + + +</footer> + + </div> + </div> + + </section> + + </div> + + + <script type="text/javascript"> + jQuery(function () { + SphinxRtdTheme.Navigation.enable(true); + }); + </script> + + + + + + +</body> +</html> \ No newline at end of file diff --git a/docs/build/html/notebook_luminosity_function_single.ipynb b/docs/build/html/notebook_luminosity_function_single.ipynb new file mode 100644 index 000000000..fb971b34a --- /dev/null +++ b/docs/build/html/notebook_luminosity_function_single.ipynb @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": { + "tags": [] + }, + "source": [ + "# Example use case: Zero-age stellar luminosity function\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of single stars using binary_c. \n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from binarycpython.utils.functions import temp_dir\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_luminosity\")\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_luminosity to grid_options\n", + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 0.5 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Mass\n", + "population = Population()\n", + "population.set(\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "population.add_grid_variable(\n", + " name=\"M_1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{res}\".format(res = resolution[\"M_1\"]),\n", + " spacingfunc=\"const({min}, {max}, {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"{probtot}/({max} - {min})\".format(probtot = total_probability, min = massrange[0], max = massrange[1]), # dprob/dm1 : all stars are equally likely so this is 1.0 / (Mmax - Mmin)\n", + " dphasevol=\"dM_1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STAR\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->model.time == 0)\n", + "{\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR %30.12e %g %g %g %g\\\\n\",\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " stardata->star[0].mass, // 3\n", + " stardata->star[0].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + "};\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + " \n", + " # Check the header and act accordingly\n", + " if linedata['header'] == \"ZERO_AGE_MAIN_SEQUENCE_STAR\":\n", + " \n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 1.0000000000000004\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-08f8230453084e4ca6a2391d45ce658b finished! The total probability was: 1.0000000000000002. It took a total of 1.5262682437896729s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.025), (3.75, 0.05), (4.25, 0.05), (0.25, 0.025), (3.25, 0.025), (5.25, 0.2), (4.75, 0.1), (5.75, 0.39999999999999997), (6.25, 0.125)]))])\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=0,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=2,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '08f8230453084e4ca6a2391d45ce658b', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 1.0000000000000002, 'total_count': 40, 'start_timestamp': 1631124829.303065, 'end_timestamp': 1631124830.8293333, 'total_mass_run': 2001.4, 'total_probability_weighted_mass_run': 50.035000000000004, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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n9eyZcs0atQovf3225o8eXLr4WwXExkZqZqaGkmfnZOpW7duF9wmKipKI0aMaD030sGDB7V//34NHjy49a+ZM2e23v7NN99UZGSkpk6d2nrZmTNnlJeXpwceeEC/+93vzjuX0YwZM/Tzn/9co0ePPu9xAwMD9c1vflNvvfWWHn74YT3//PMXtG3cuLH1lVf/qq6uTsOGDTvvr8OHD8vhcLS+8uuFF17Q9u3bJem8Vyk1NTVp165d5/0ZAACAf+OcSwAAwKutXr269e/T09NbT3r9r6699lq99dZbrR/feeedmjJlyiXvd/jw4XrxxRd16623av369Ro+fPhFb/fggw/qhRde0KRJk/TDH/5QP/zhDy96u9OnT+uvf/3rBX0ffPCBvv/97+uGG26Q9Nkrmz5/tVO/fv00YsQI3XDDDdq4cWPr55w8ebL1XE+xsbHnHe73ueXLl1+0IykpSYcPH77odc3Nzfrb3/6mL33pS61fq3379p03Lr3zzju6+eabL3ooHgAA8E+MSwAAwC9s3bpVycnJio6O1ooVK3T48GFNmDCh9fqvf/3rOnjwoI4ePaq5c+fq9ttvV2xsrBYsWKAePXroq1/96kXvd/jw4UpOTta6des0ceLESz7+73//e1VVVemBBx5oveyb3/ymPvroI/3P//xP62VZWVl6//33Wz9etGjRBfeVm5urRx55RMHBwbIs65KD1pUKDAzUjTfeqF/96letr2BKT0/XnDlzJH32LnXvvPNO67vaAQAASJLNutj/6gIAAPAxr776qp599lnV19crKSlJjz76qCZPnmw6CwAAwOsxLgEAAAAAAKDdOKE3AAAAAAAA2o1xCQAAAAAAAO3GuAQAAAAAAIB2Y1wCAAAAAABAuzEuAQAAAAAAoN0YlwAAAAAAANBujEsAAAAAAABoN8YlAAAAAAAAtNv/D2ltZ660RybEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "# this saves a lot of typing! \n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "7d7b275e-be92-4d59-b44d-ef6f24023cc3", + "metadata": {}, + "source": [ + "Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 10<sup>5.8</sup> L<sub>☉</sub>! Clearly, this is not very realistic... let's see what went wrong." + ] + }, + { + "cell_type": "markdown", + "id": "44586e42-b7cb-4a55-be0a-330b98b20de4", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "markdown", + "id": "e32c3bbf-390f-45da-ad9c-cc3e7c9449dc", + "metadata": {}, + "source": [ + "## ZAMS Luminosity distribution with the initial mass function\n", + "\n", + "In the previous example, all the stars in our grid had an equal weighting. This is very unlikely to be true in reality: indeed, we know that low mass stars are far more likely than high mass stars. So we now include an initial mass function as a three-part power law based on Kroupa (2001). Kroupa's distribution is a three-part power law: we have a function that does this for us (it's very common to use power laws in astrophysics).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "1f37d2c0-1108-4ab9-a309-20b1e6b6e3fd", + "metadata": {}, + "outputs": [], + "source": [ + "# Update the probability distribution to use the three-part power law IMF \n", + "population.update_grid_variable(\n", + " name=\"M_1\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6f4463e8-1935-45f2-8c5f-e7b215f8dc47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.2182216189410787\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-92de7c9221c54206ab4dd10e58e09a34 finished! The total probability was: 0.21822161894107872. It took a total of 1.5900418758392334s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.0164166), (3.25, 0.00515685), (0.25, 0.189097), (3.75, 0.0037453900000000004), (4.25, 0.0014346559999999999), (5.25, 0.0007493004), (4.75, 0.001171479), (5.75, 0.00039801020000000003), (6.25, 5.2369339999999996e-05)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cfe45a9e-1121-43b6-b6b6-4de6f8946a18", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABcnUlEQVR4nO3dd3SUZf7+8Wtm0gvpjQRIo0PovSNNiiDiBnXBsrqCsq6sK66CirroWlZ/lu/ay6oooIIIItIEhID03ksCBJIACYTQ0ub3R3TcCBjIk+SZSd6vczgn82QycyW5HTPX3M9nLHa73S4AAAAAAACgnKxmBwAAAAAAAIBro2ACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ9zMDlCZcnLOqrjYbnaMaickxE8nT+aZHQMuivUDo1hDMIo1BKNYQzCKNQSjWEMwqrxryGq1KCjI97Kfq9YFU3GxnYKpkvBzhRGsHxjFGoJRrCEYxRqCUawhGMUaglEVvYY4RQ4AAAAAAACGUDABAAAAAADAkGp9ihwAAAAAAFWpqKhQOTnHVViYX2n3kZVlVXFxcaXdPqq/staQm5uHgoLCZLNdfW1EwQQAAAAAQAXJyTkuLy8f+fpGymKxVMp9uLlZVVhIwYTy+701ZLfbdfZsrnJyjis0NOqqb5NT5AAAAAAAqCCFhfny9a1VaeUSUNksFot8fWtd8y48CiYAAAAAACoQ5RJcXXnWMAUTAAAAAAAADKFgAgAAAACgGtq8eaPuuOPWUv+6d2+v77+f57jOV19NV8+eHXXy5IlSX9u1a1v97W/jSh07deqUevTooPfff1uSlJGRoQkTxuv220dq1Kg/6PHH/6GcnOxLcrz//tuOrzHivffe0ooVywzfzi++/vpLff31l5KkZ599ShkZx8p1O+PG/VkbNqzTrl079K9/PXPF6x09mq7nnnu6zCxdu7a9pvtfsWK5pk379JLbqWoM+QYAAAAAoBpq0aKVPvroM8fl6dOnav78b9Wz53WOY99+O0ddu/bQ3Lmzdfvtfyr19YcPH1Zubq5q1aolSVq6dLH8/Ws5Pv/ii89qwICB6tt3gCTpk08+1IsvPqdnn32xUr6fu+8eU6G3N2zYCMfHGzas05133mPo9ho1aqJ//KPJFT+fkXFM6elHysxyrXbv3lkht2MUBRMAAAAAANXc5s0b9fHHH+idd/4rT09PSdK+fXuVm3taEyZM1KRJEzRq1J2yWn890alr1+768celGjToBkklBVP37j0dn8/OPqGLFy84Lt900x+0c+eO383RtWtbrVixTpI0b94cbdy4XhMnTtaIEUPUu3dfpaSskM1m07333q9p0z7VkSOHdf/9D+q66/pqypTJatWqjVq1aqPHHvu74uMTtGfPbgUHh+iZZ/6lWrUCtHLlj3r33Tdltxerdu1oPfzwYwoODtEbb/w/rV37k2w2q7p27aG77vqzY1eVh4enTpw4rocf/qvuvnuMpk2bqrfe+kCS9N13c7V9+1b9/e+POr6H/Px8Pf/8M9q1a6ciI2vr9OlTkkpKqg8+eEdvvPGOpk37VN99962sVosaN26qCRMm6tVXX9LRo+n697+fV69e1+nNN19TUVGx4uMTFBVVW5L0pz/dK0l6/vkp2rlzuwICAvXoo08oMjJS48b9WXfd9We1bt1Wx44d1V/+cq9efPFVzZ49U5IUGRnl2IX1pz/de8WfxYgRQ3T99YO0enWKzp+/oEmTnlKjRo2vei1dCQUTAAAAAACVYOXWY1qxpXynXf0ei0Xq0jxKXZpf3VvI5+Rka/LkiXrkkccVHR3jOD5v3jfq3buPGjVqLJvNpp9+SlGnTl0dn+/du48+/vgDDRp0g06ePCG7XQoJCXV8/t57x+nppx/X+++/ozZt2qljx87q3btvub+v0NAwffrpDD377FP69NOP9Nprb2nr1s167bV/67rrSt/uvn179eijT6hBg0aaOPFhLVjwna67rp9efPFZvfnm+4qKqq3PPvtYL7/8gsaNe1CrV6fo009n6OLFi3r++X/q4sWLjtsaNeoOzZ79lV588VVFRkbp//7vNaWnH1F0dIy++26u7r239KmCX345XZI0deqXOnz4kG6//ZZSny8sLNSnn36kr7+eL6vVqpdffl7Hj2fpr3/9uz744B099NAj2rBhnQ4fPqQvv5wrPz+/S04hbNWqtR55ZKJmzvxCr776kp577qXL/szi4uI1dOhwSdKgQTc4bicnJ/uyP4t//vN5SVJAQIDeffdjffnlNH3yyQeaMsX4rjNmMAEAAAAAUE0VFxdr8uRJ6tOnf6ndR4WFhVqwYL769OkvSerdu69jJ8wvmjVL0qFDacrLy9PSpYvVq1fvUp/v2LGzZs2ap0cemaTAwCD95z+vaeLEh8udtWPHzpKkiIhItWzZWm5uboqMjNKZM2cuuW5QULAaNGgkSYqPT1Rubq527Niuxo2bOnYD3XDDcK1fv1ahoWHy9PTU2LF3acaMz3TPPWMdu7h+y2Kx6PrrB+n77+cpIyND2dnZatq0WanrbNq0Xr16lRRederUVfPmSaU+7+bmpmbNknT33aP14YfvavjwmxUWFn7JfdWpU09+fn6XHPf09FS/ftdLkvr3v14bN67/3Z/b5VzpZ/GLX37Wv/zsKgI7mAAAAAAAqATXssvoWri5WVVYWHxV1/3ww3dVWFige++9v9TxlSt/1JkzuXrssZJCqLCwUDk52crKylR4eISkkrKlS5duWrFimZYt+0FPPfWcZs6cIUnKzT2tjz56Tw888JA6duysjh0764477tbQof2Vk5OjoKCgK2ay2+2yWCwqLCwsddzd3d3xsc1m+93vy8PD45LbtNuLLzlWVFQkNzc3vfPOR9q0aYNWrVqpMWPu1Ouvv3PF2x44cIgeeugv8vDw0IABAy9zDUup+7pc1uee+7e2b9+q1atT9NBDD+iJJy4d/n2lkstq/fX27PaSwkoq+X384rc/u9+60s/iFx4enqU+VxHYwQQAAAAAQDW0du1qzZnztZ566jlHSfGLefO+0T33jNWXX87Rl1/O0ddff6fmzVtozpyvS12vd+++mjnzC7m5uZcqjXx9/bRixXJ9991cx7H09CMKDg5xDAW/nMDAQB08uF92u10rViyvmG/0Z02aNNOOHVt17NhRSdI338xU69ZttGfPLo0b92e1aNFK48Y9qNjYeB06lFbqa202m6OAiYyMUlhYuL7++isNGDDokvtp27a9Fi78XsXFxcrIOKatW7eU+nxOTo5uu22E4uMTdffdY9SuXQft379XNptbqZLnSs6fP+d4t7xvv52ttm3bS5ICAkp+dpL0449LL5u9rJ9FZWIHEwAAAAAA1dAnn3ykoqIi/f3vD5Q63r17T23YsE6PPvpkqeMjR/5R//73v3THHXc7jjVt2lwnT57QDTcMK3Vdm82ml156Va+//oree+8teXl5KTQ0TM8///Lv7j4aM2acJkwYr+DgECUltXQMyK4IwcEhevjhiXrssb+roKBQkZGR+sc/nlBoaKiaNUvS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zY4DF/TFF184Hn+GDh2qNm3a6Omnn66Q23arkFtBtZeZmalXXnlFM2fOlIeHh0aOHKkOHTooMTHR7GhwIZs3b9akSZOUmppqdhS4oJSUFK1YsUKzZs2SxWLR3XffrYULF6pv375mR4OLWLNmjVavXq1vvvlGhYWFGjhwoHr06KH4+Hizo8GFrFq1SrNmzVLPnj3NjgIXZLfbdeDAAS1dulRubjwVw7U5fPiwnnzySX3xxRcKCQnR7bffrmXLlqlHjx5mR4MLufnmm3XzzTdLkvbu3av7779f48aNq5DbZgcTrkpKSoo6duyowMBA+fj4qH///po/f77ZseBiZsyYoSeffFLh4eFmR4ELCgsL0z/+8Q95eHjI3d1dCQkJOnr0qNmx4ELat2+vjz/+WG5ubjp58qSKiork4+Njdiy4kFOnTumVV17RmDFjzI4CF3XgwAFZLBbdc889uuGGG/Tpp5+aHQkuZOHChRo4cKAiIyPl7u6uV155RS1atDA7FlzY5MmTNX78eAUHB1fI7VGb46pkZWUpLCzMcTk8PFxbtmwxMRFc0ZQpU8yOABdWv359x8epqamaN2+epk2bZmIiuCJ3d3e99tpr+uCDDzRgwABFRESYHQku5IknntD48eN17Ngxs6PAReXm5qpTp06aPHmyLly4oNGjRysuLk5dunQxOxpcQFpamtzd3fWnP/1Jx48fV69evfTggw+aHQsuKiUlRRcuXND1119fYbfJDiZcFbvdfskxi8ViQhIANd3evXt111136ZFHHlFsbKzZceCCHnjgAa1atUrHjh3TjBkzzI4DF/HFF18oKipKnTp1MjsKXFirVq30wgsvyMfHR8HBwRoxYoSWLVtmdiy4iKKiIq1atUovvviiZsyYoa1bt2rWrFlmx4KLmjZtmu68884KvU0KJlyViIgInThxwnE5KyuL05wAVLn169frjjvu0EMPPaQbb7zR7DhwMfv379fOnTslSd7e3urXr592795tciq4innz5mnlypUaOnSoXnvtNS1ZskTPPvus2bHgYtatW6dVq1Y5LtvtdmYx4aqFhoaqU6dOCg4OlpeXl6677jrOKkG55Ofna+3aterdu3eF3i4FE65K586dtWrVKmVnZ+v8+fNasGCBunfvbnYsADXIsWPHdP/99+ull17SoEGDzI4DF3TkyBFNmjRJ+fn5ys/P1+LFi9WmTRuzY8FFfPjhh5o7d65mz56tBx54QL1799Zjjz1mdiy4mDNnzuiFF17QxYsXlZeXp1mzZvFmFbhqvXr10ooVK5Sbm6uioiL9+OOPatq0qdmx4IJ2796t2NjYCp9FSV2OqxIREaHx48dr9OjRKigo0IgRI5SUlGR2LAA1yPvvv6+LFy/qX//6l+PYyJEjdcstt5iYCq6kR48e2rx5s4YNGyabzaZ+/fpRVgKoUr169XI8DhUXF+vWW29Vq1atzI4FF9GiRQvdfffduvXWW1VQUKAuXbropptuMjsWXNDhw4cVGRlZ4bdrsV9uuA4AAAAAAABwlThFDgAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAMDl9e7dWykpKWbHAAAAqLEomAAAACpYdna2GjZsqMzMTLOjAAAAVAkKJgAAgArw0ksv6ccff5Qk7dq1S8HBwYqIiDA5VYkHHnhAe/bscVw+cuSIWrVqVa7bOnv2rO6++25duHChouIBAIBqgIIJAABUK/v379eoUaPUtm1bDRo0SIsXL3Z8bvv27Ro2bJhatWqlBx54QA8++KBeeeUVw/e5adMm7du3T926dZMk7dy5U40aNTJ8uxUhPz9faWlpatCgQYXcnq+vrwYPHqxXX321Qm4PAABUDxRMAACg2igoKNCYMWPUpUsXpaSkaNKkSfr73/+uAwcOKD8/X+PGjdONN96oNWvWaPDgwVq0aFGF3O/rr7+u5ORkx2VnKphSUlLUqVOnCr3N66+/XnPmzNGJEycq9HYBAIDromACAADVxubNm3Xu3Dn9+c9/loeHhzp16qRevXrp22+/1ebNm1VYWKjRo0fL3d1d/fr1U/PmzR1fe+bMGY0YMUKtWrUqdTrZiy++qFtvvVUPP/ywCgoKLrnP3NxcrV+/Xl26dHEc27Vrlxo3bnzJdadPn65Ro0Y5/iUlJWnLli2Oz48cOVJvvPGGpJLT2Bo2bKjVq1dLKtmJ1K5dO3366aeSpLy8PI0ZM0ajRo1ScnKyli1bdtmfyeLFi9WnT59r+TGWydPTU61bt77ifQIAgJrHzewAAAAAFSUrK0uRkZGyWn99Da127drKzMxUVlaWIiIiZLFYHJ+LiopyfOzl5aV33nlHL7zwguPYrl27lJmZqc8++0xvvvmmvv/+ew0ePLjUfaalpSksLEweHh6SpIsXL+rgwYNq0qTJJfmSk5MdO52WLFmiWbNmKSkpSZJ07NgxRUREaM2aNY7rN2vWTAsXLlTHjh21atUq1atXz/G52bNnq1u3brrttttkt9t15syZS+6vuLhYmzZt0uTJk6/q5/eLzMxMffzxxyosLJTdblfjxo114403lrpO3bp1dfDgwWu6XQAAUH2xgwkAAFQb4eHhysjIUHFxsePYL8VNWFiYMjMzZbfbS33uF+7u7goODi51exs2bFDXrl0lSd26ddOGDRsuuU+r1aqioiLH5T179sjNzU1xcXFXzJmdna1XX31VTz31lOPY999/ryFDhig+Pl779++XJEVHR+vo0aOy2+1auHCh+vXr57i+p6enNm3apBMnTshisahWrVqX3M/mzZvVrFkz2Wy2K2b5reLiYn3zzTcaP368Hn30UT322GNKSEjQ0qVLS12vqKjomm4XAABUbxRMAACg2khKSpKXl5fee+89FRQU6KefftKSJUs0cOBAtWzZUjabTZ9++qkKCwu1aNEibd269XdvLzc3V35+fpIkf39/nT59+pLr1KlTR9nZ2bp48aKkkl1PCQkJKiws1MWLF3Xx4kXl5+eX+prJkyfrr3/9a6lCa8WKFerevbsGDx6s+fPnO463atVKa9euVXZ2tkJDQx3Hhw4dqri4OP3pT39ScnKyDhw4cEm2RYsW6brrrruKn9yvtmzZomHDhsnNzU3fffed0tPTlZSUpPPnz5e63pEjR363RAMAADULBRMAAKg2PDw89NZbb2n58uXq2LGjnnrqKb3wwgtKSEiQh4eHXn/9dX355Zdq166dvvnmG/Xs2dNxatvl+Pv7Ky8vT1LJjKaAgIBLrlOrVi21adPGMStp586d2r59u5KSkhz/Bg4c6Lj+119/LX9/f/Xu3dtxLCMjQ3v37tXYsWP15ptvlppt1K9fPz333HNq3759qft1d3fXfffdp9mzZ+uBBx7Q66+/fkm2lJQUxw6s3zp37pxatWpV6t/u3btls9kcO8DeeustrVu3TpJK7VbKz8/Xxo0bS30PAACgZmMGEwAAcHlLlixxfFy/fn3HIOzfat68uWbPnu24fPPNN6tXr15XvN3WrVvrww8/1LBhw7RixQq1bt36ste7//779dZbb6lHjx564okn9MQTT1z2eseOHdNHH310Sb758+fr0Ucf1YABAySV7HD6ZddTbGys2rRpowEDBiglJcXxNenp6Y7ZTyEhIaVO/fvFrFmzLpsjJiZGu3fvvuznCgoK9PHHH+v22293/Ky2bt1aqmCaO3euhgwZctnT8gAAQM1EwQQAAGqMNWvWKC4uTkFBQZozZ452796tbt26OT5/zz33aOfOnTp48KCSk5M1fPhwhYSE6NZbb1VUVJTuuuuuy95u69atFRcXp+XLl6t79+5XvP+3335bubm5Gjt2rOPYfffdpwULFuj//u//HMc6dOig7777znF50qRJl9zWnj17NH78eHl6esput1+x1LpW7u7uuv766/Xvf//bsZOpfv36GjFihKSSd6+bO3eu493uAAAAJMliv9zLXQAAANXQ9OnT9eqrr+r8+fOKiYnRQw89pJ49e5odCwAAwOVRMAEAAAAAAMAQhnwDAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIb8fxzqA03KlXkqAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "0546f2f3-4732-4841-8ef3-565fbf6b9961", + "metadata": {}, + "source": [ + "This distribution is peaked at low luminosity, as one expects from observations, but the resolution is clearly not great because it's not smooth - it's spiky! \n", + "\n", + "If you noticed above, the total probability of the grid was about 0.2. Given that the total probability of a probability distribution function should be 1.0, this shows that our sampling is (very) poor. \n", + "\n", + "We could simply increase the resolution to compensate, but this is very CPU intensive and a complete waste of time and resources. Instead, let's try sampling the masses of the stars in a smarter way." + ] + }, + { + "cell_type": "markdown", + "id": "673031c9-7d80-45d4-b209-301c127d3edf", + "metadata": {}, + "source": [ + "# A better-sampled grid\n", + "\n", + "The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space. \n", + "\n", + "To do this we first rename the mass grid variable so that it is clear we are working in (natural) logarithmic phase space." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5956f746-e3b9-4912-b75f-8eb0af66d3f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename the old variable (M_1) because we want it to be called lnM_1 now\n", + "population.rename_grid_variable(\"M_1\",\"lnM_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "532f691c-c1f6-46cc-84f2-970ec1216e40", + "metadata": {}, + "source": [ + "Next, we change the spacing function so that it works in the log space. We also adapt the probability calculation so that it calculates dprob/dlnM = M * dprob/dM. Finally, we set the precode to compute M_1 because binary_c requires the actual mass, not the logarithm of the mass." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "108d470a-bb21-40b0-8387-2caa7ab0f923", + "metadata": {}, + "outputs": [], + "source": [ + "# update the sampling, note that the IMF is dprob/dM1, and the phase \n", + "# space is now sampled in lnM1, so we multiply by M_1 to \n", + "# because M * dprob/dM = dprob/dlnM\n", + "population.update_grid_variable(\n", + " name=\"lnM_1\",\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnM_1\",\n", + " parameter_name=\"M_1\",\n", + " precode=\"M_1=math.exp(lnM_1)\",\n", + ")\n", + "# print(population.grid_options[\"_grid_variables\"]) # debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fb8db646-f3d0-4ccd-81ba-7fde23f29c79", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.9956307907476224\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Population-83f80d829dbd418aa2bc745c99b71991 finished! The total probability was: 0.9956307907476224. It took a total of 0.9961590766906738s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(0.25, 0.0212294), (2.75, 0.00321118), (-0.25, 0.0268827), (1.25, 0.0104553), (3.75, 0.00283037), (6.25, 7.34708e-05), (-0.75, 0.0771478), (0.75, 0.030004499999999996), (2.25, 0.00921541), (3.25, 0.0045385), (1.75, 0.014776889999999999), (4.25, 0.002380189), (4.75, 0.000869303), (5.25, 0.0007310379999999999), (5.75, 0.00036002859999999996), (-2.75, 0.1961345), (-1.75, 0.2181597), (-3.25, 0.0), (-2.25, 0.2568974), (-1.25, 0.11973310000000001)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "182b1094-5057-4ccf-bac6-9b0e560ad4f6", + "metadata": {}, + "source": [ + "You should see that the total probability is very close to 1.0, as you would expect for a well-sampled grid. The total will never be exactly 1.0, but that is because we are running a simulation, not a perfect copy of reality." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "68ee1e56-21e5-48f4-b74c-50e48685ae94", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB37ElEQVR4nOzdd3iV9f3/8dcZ2XtPstkhrLD3ElkyREGtA+vA0eHXqq1SRa221rb+2lpx1C3WVYaAKEtUlpAwE0YgJJCQkAGEEFbW+f2BpqUKAZJz7pOc5+O6uC7PneTcrxy8Q/LK5/O+TTabzSYAAAAAAADgCpmNDgAAAAAAAICWjYIJAAAAAAAATULBBAAAAAAAgCahYAIAAAAAAECTUDABAAAAAACgSSiYAAAAAAAA0CQUTAAAAAAAAGgSq9EB7OnYsZOqr7fZ9RwhIb46cqTKrucAnBnXAMB1AHANwNVxDcDVcQ24DrPZpKAgnx99W6sumOrrbXYvmL4/D+DKuAYArgOAawCujmsAro5rAGyRAwAAAAAAQJNQMAEAAAAAAKBJWvUWOQAAAAAAHKmurlbHjpWptrba6CgOU1pqVn19vdEx0IysVncFBYXJYrn02oiCCQAAAACAZnLsWJk8Pb3l4xMpk8lkdByHsFrNqq2lYGotbDabTp6s1LFjZQoNjbrkj2OLHAAAAAAAzaS2tlo+Pv4uUy6h9TGZTPLx8b/sVXgUTAAAAAAANCPKJbR0V/L/MAUTAAAAAAAAmoSCCQAAAACAVmjbti267bYbz/szeHBvffHFZw3v8+9/f6ihQ/vqyJHy8z524MB0/d//3X/esYqKCg0Z0kevv/6KJOnw4cN6+OEHdNNN1+vmm6/Xb3/7ax07dvQHOV5//ZWGj2mKf/7zZa1Z81WTn+d7CxZ8ogULPpEkPfvskzp8uPiKnuf+++/S5s0Z2r17p/7wh6cv+H5FRYf0+98/1WiWgQPTL+v8a9Z8rQ8+eO8Hz+NoDPkGAAAAAKAV6tq1u9566/2Gxx9+OFeff75EQ4eOaDi2ZMkiDRw4RIsXL9Stt/70vI8vKChQZWWl/P39JUmrV6+Un59/w9uff/5ZXX31WI0ZM1a1tfV699039fzzv9ezzz5vl8/njjtmNuvzTZo0teG/N2/O0IwZdzbp+Tp06KRf/7rTBd9++HCxDh0qbDTL5dqzZ1ezPE9TUTABAAAAANDKbdu2Re+884ZeffVteXh4SJL27durysrjevjhxzRr1sO6+eYZMpv/s9Fp4MDB+uab1Ro37hpJ5wqmwYOHNrz96NFynT17puHxtdder127dl40x8CB6VqzJkOS9Nlni7RlS6Yee2y2pk6doOHDR2ndujWyWCy6++779MEH76mwsED33fdLjRgxSs88M1vdu/dU9+499eijv1JSUrJycvYoODhETz/9B/n7B2jt2m/02mtzZLPVKzo6Rg899KiCg0P04ov/T5s2fSuLxayBA4fo9tvvalhV5e7uofLyMj300C90xx0z9cEHc/Xyy29IkpYuXazs7B361a9+0/A5VFdX67nnntbu3bsUGRmt48crJJ0rqd5441W9+OKr+uCD97R06RKZzSZ17NhZDz/8mP761z+pqOiQ/vzn5zRs2AjNmfM31dXVKykpWVFR0ZKkn/70bknSc889o127shUQEKjf/OZxRUZG6v7779Ltt9+lHj3SVVxcpJ/97G49//xftXDhPElSZGRUwyqsn/707gu+FlOnTtDo0WO1ceN6nT59RrNmPakOHTpe8v9LF0LBBAAAAACAHazdUaw1269s21VjBqZFaUCXS7uF/LFjRzV79mN65JHfKiYmtuH4Z599quHDR6pDh46yWCz69tt16tdvYMPbhw8fqXfeeUPjxl2jI0fKZbNJISGhDW+/++779dRTv9Xrr7+qnj17qW/f/ho+fNQVf06hoWF6772P9OyzT+q9997S3/72snbs2Ka//e3PGjHi/Ofdt2+vfvObx9WuXQc99thDWrZsqUaMuErPP/+s5sx5XVFR0Xr//Xf0l7/8Ufff/0tt2LBO7733kc6ePavnnvudzp492/BcN998mxYu/Leef/6vioyM0j/+8TcdOlSomJhYLV26WHffff5WwU8++VCSNHfuJyooOKhbb73hvLfX1tbqvffe0oIFn8tsNusvf3lOZWWl+sUvfqU33nhVDz74iDZvzlBBwUF98sli+fr6/mALYffuPfTII49p3ryP9de//km///2ffvQ1S0xM0sSJUyRJ48Zd0/A8x44d/dHX4ne/e06SFBAQoNdee0effPKB3n33DT3zTNNXnTGDCQAAAACAVqq+vl6zZ8/SyJGjz1t9VFtbq2XLPtfIkaMlScOHj2pYCfO91NQ0HTx4QFVVVVq9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hQsXasKECfzDApdQUlKiF154Qe+//74WLlyoDz/8UPv27TM6FuAw69at05o1azR//nwtWLBA2dnZWr58udGxAIdbv3695s+fb3QMwBAFBQV64okn9NJLL2nRokXauXOnvvrqK6NjwSAUTM3gD3/4g2677TajYwCGqK6u1i9+8Qt16NBBktS+fXsVFxcbnAqwv3Xr1qlv374KDAyUt7e3Ro8erc8//9zoWIDDhIWF6de//rXc3d3l5uam5ORkFRUVGR0LcKiKigq98MILmjlzptFRAEMsX75cY8eOVWRkpNzc3PTCCy+oa9euRseCQSiYmmjlypU6c+aMrr76aqOjAIZwd3fXxIkTJUn19fV68cUXNXLkSINTAfZXWlqqsLCwhsfh4eEqKSkxMBHgWG3btlW3bt0kSfn5+frss880ZMgQY0MBDvb444/rgQcekL+/v9FRAEMcOHBAdXV1+ulPf6prrrlG77//vgICAoyOBYNYjQ7QUixdulS///3vzzuWlJSkqqoqvfXWW8aEAhzsQtfBW2+9perqav36179WbW2t7r77boMSAo5js9l+cMxkMhmQBDDW3r17dffdd+uRRx5RQkKC0XEAh/n4448VFRWlfv36ad68eUbHAQxRV1enjIwMvfvuu/L29ta9996r+fPna8qUKUZHgwEomC7RmDFjNGbMmPOOffzxx3rllVd00003NRybOHGi5s6dK19fX0dHBOzux64DSTp58qTuueceBQYGas6cOXJzczMgHeBYERERysjIaHhcWlqq8PBwAxMBjpeZmamf//znevTRRzVu3Dij4wAO9dlnn6msrEwTJ07U8ePHderUKT377LN69NFHjY4GOExoaKj69eun4OBgSdKIESO0fft2CiYXZbL92K9gcUXat2+vPXv2GB0DcLh7771XISEheuqpp1jBAZdRUlKiG264QZ988om8vLw0ffp0Pf3000pLSzM6GuAQxcXFmjx5sl544QX169fP6DiAoebNm6eNGzfqD3/4g9FRAIfatm2bHnnkEX300Ufy8fHRfffdpxEjRui6664zOhoMwAomAE2yc+dOrVy5UikpKZo0aZKkc7NoXnvtNWODAXYWERGhBx54QLfccotqamo0depUyiW4lNdff11nz5497wfq6dOn64YbbjAwFQDAkbp27ao77rhDN954o2pqajRgwABde+21RseCQVjBBAAAAAAAgCbhLnIAAAAAAABoEgomAAAAAAAANAkFEwAAAAAAAJqEggkAAAAAAABNQsEEAAAAAACAJqFgAgAAAAAAQJNQMAEAAAAAAKBJKJgAAECLN3z4cK1bt87oGAAAAC6LggkAAKCZHT16VO3bt1dJSYnRUQAAAByCggkAAKAZ/OlPf9I333wjSdq9e7eCg4MVERFhcKpzfv7znysnJ6fhcWFhobp3735Fz3Xy5EndcccdOnPmTHPFAwAArQAFEwAAaFVyc3N18803Kz09XePGjdPKlSsb3padna1Jkyape/fu+vnPf65f/vKXeuGFF5p8zq1bt2rfvn0aNGiQJGnXrl3q0KFDk5+3OVRXV+vAgQNq165dszyfj4+Pxo8fr7/+9a/N8nwAAKB1oGACAACtRk1NjWbOnKkBAwZo3bp1mjVrln71q19p//79qq6u1v3336/Jkydr48aNGj9+vFasWNEs5/373/+uadOmNTx2poJp3bp16tevX7M+55gxY7Ro0SKVl5c36/MCAICWi4IJAAC0Gtu2bdOpU6d01113yd3dXf369dOwYcO0ZMkSbdu2TbW1tbrlllvk5uamq666Sl26dGn42BMnTmjq1Knq3r37edvJnn/+ed1444166KGHVFNT84NzVlZWKjMzUwMGDGg4tnv3bnXs2PEH7/vhhx/q5ptvbviTlpam7du3N7x9+vTpevHFFyWd28bWvn17bdiwQdK5lUi9evXSe++9J0mqqqrSzJkzdfPNN2vatGn66quvfvQ1WblypUaOHHk5L2OjPDw81KNHjwueEwAAuB6r0QEAAACaS2lpqSIjI2U2/+d3aNHR0SopKVFpaakiIiJkMpka3hYVFdXw356ennr11Vf1xz/+seHY7t27VVJSovfff19z5szRF198ofHjx593zgMHDigsLEzu7u6SpLNnzyovL0+dOnX6Qb5p06Y1rHRatWqV5s+fr7S0NElScXGxIiIitHHjxob3T01N1fLly9W3b1+tX79e8fHxDW9buHChBg0apJtuukk2m00nTpz4wfnq6+u1detWzZ49+5Jev++VlJTonXfeUW1trWw2mzp27KjJkyef9z5xcXHKy8u7rOcFAACtFyuYAABAqxEeHq7Dhw+rvr6+4dj3xU1YWJhKSkpks9nOe9v33NzcFBwcfN7zbd68WQMHDpQkDRo0SJs3b/7BOc1ms+rq6hoe5+TkyGq1KjEx8YI5jx49qr/+9a968sknG4598cUXmjBhgpKSkpSbmytJiomJUVFRkWw2m5YvX67/3979hTT1xnEc/8icduEWsm4EhcbYXY02Mb1xLgMxMRpSDLoRjC5cUIhXioy6EgQvRKQJQRHeCEFtDiYxhgwZ9Af6IyIrqJtGXYSQRGN/yt+FdH6szfjFLn6k7xcc2HnO9zznOefys+c8p6+vz6hvbGzUy5cv9fnzZ9XV1clqtVZc59WrVzpx4oRMJtO+Y/nVjx8/FI1GNTY2pomJCU1OTsrhcGhtba2s7vv373/ULwAAONgImAAAwIHhcrl05MgR3blzR8ViUU+ePFEymdTAwIBOnTolk8mkpaUllUolJRIJbWxs/La/nZ0dNTU1SZIsFou+fPlSUdPW1qbt7W3l83lJe7OeHA6HSqWS8vm88vm8CoVC2Tk3b97UjRs3ygKt9fV1eb1eDQ4OanV11Wh3u9169uyZtre3dezYMaP9woULstvtunLligKBgN69e1cxtkQiobNnz/6HJ/ev169fy+/3q76+XvF4XNlsVi6XS7lcrqzuw4cPvw3RAADA4ULABAAADoyGhgaFw2GlUil1dXXp1q1bmpmZkcPhUENDg+bn5/XgwQN1dHQoGo3K5/MZr7ZVY7FY9PXrV0l7azQdPXq0osZqtaq9vd1YK2lra0ubm5tyuVzGNjAwYNQ/evRIFotFvb29RtunT5/09u1bjY6O6vbt22VrG/X19Wl6elqnT58uu67ZbFYwGFQkEtH169c1Pz9fMbZ0Om3MwPrVt2/f5Ha7y7ZMJiOTyWTMAAuHw3r+/Lkklc1WKhQKevHiRdk9AACAw401mAAAwF8vmUwav51Op7EQ9q9OnjypSCRi7F+6dElnzpzZt1+Px6O7d+/K7/drfX1dHo+nat21a9cUDofV09OjUCikUChUte7jx4+6d+9exfhWV1c1MTGh/v5+SXsznH7Oejp+/Lja29vV39+vdDptnJPNZo21n2w2W9mrfz89fPiw6jhaW1uVyWSqHisWi7p//76Gh4eNZ7WxsVEWMMViMZ0/f77qa3kAAOBwImACAACHxtOnT2W329Xc3KyVlRVlMhl1d3cbx69evaqtrS29f/9egUBAQ0NDstlsunz5slpaWjQyMlK1X4/HI7vdrlQqJa/Xu+/1FxcXtbOzo9HRUaMtGAzq8ePHWlhYMNo6OzsVj8eN/ampqYq+3rx5o7GxMTU2Nmp3d3ffUOtPmc1mnTt3TrOzs8ZMJqfTqYsXL0ra+3pdLBYzvnYHAAAgSXW71f7uAgAAOICWl5c1NzenXC6n1tZWjY+Py+fz/d/DAgAA+OsRMAEAAAAAAKAmLPINAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABqQsAEAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABq8g/wlbD9p3152QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "31fe91bb-177d-4e4e-90cf-298a3f8a8b61", + "metadata": {}, + "source": [ + "Most stars are low mass red dwarfs, with small luminosities. Without the IMF weighting, our model population would have got this completely wrong! \n", + "\n", + "As you increase the resolution, you will see this curve becomes even smoother. The wiggles in the curve are (usually) sampling artefacts because the curve should monotonically brighten above about log(*L*/L<sub>☉</sub>)=-2. \n", + " \n", + "Remember you can play with the binwidth too. If you want a very accurate distribution you need a narrow binwidth, but then you'll also need high resolution (lots of stars) so lots of CPU time, hence cost, CO<sub>2</sub>, etc." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/build/html/notebook_population.html b/docs/build/html/notebook_population.html index 5336a7fdf..0b0937d50 100644 --- a/docs/build/html/notebook_population.html +++ b/docs/build/html/notebook_population.html @@ -103,6 +103,9 @@ </li> <li class="toctree-l2"><a class="reference internal" href="notebook_extra_features.html">Extra features and functionality of binarycpython</a></li> <li class="toctree-l2"><a class="reference internal" href="notebook_api_functionality.html">Using the API functionality of binarycpython</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html">Example use case: Zero-age stellar luminosity function</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_single.html#A-better-sampled-grid">A better-sampled grid</a></li> +<li class="toctree-l2"><a class="reference internal" href="notebook_luminosity_function_binaries.html">Zero-age stellar luminosity function in binaries</a></li> </ul> </li> <li class="toctree-l1"><a class="reference internal" href="binary_c_parameters.html">Binary_c parameters</a></li> @@ -457,9 +460,12 @@ div.rendered_html tbody tr:hover { </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> <span></span><span class="kn">import</span> <span class="nn">os</span> + <span class="kn">from</span> <span class="nn">binarycpython.utils.custom_logging_functions</span> <span class="kn">import</span> <span class="n">temp_dir</span> <span class="kn">from</span> <span class="nn">binarycpython.utils.grid</span> <span class="kn">import</span> <span class="n">Population</span> +<span class="n">TMP_DIR</span> <span class="o">=</span> <span class="n">temp_dir</span><span class="p">(</span><span class="s2">"notebooks"</span><span class="p">,</span> <span class="s2">"notebook_population"</span><span class="p">)</span> + <span class="c1"># help(Population) # Uncomment to see the public functions of this object</span> </pre></div> </div> @@ -497,11 +503,12 @@ you have set them.</p> <span class="c1"># grid_options</span> - <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="c1"># grid_options</span> + <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> + <span class="n">tmp_dir</span><span class="o">=</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="c1"># Custom options # TODO: need to be set in grid_options probably</span> <span class="n">data_dir</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span> + <span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span> <span class="p">),</span> <span class="c1"># custom_options</span> <span class="n">base_filename</span><span class="o">=</span><span class="s2">"example_pop.dat"</span><span class="p">,</span> <span class="c1"># custom_options</span> <span class="p">)</span> @@ -523,7 +530,8 @@ adding: orbital_period=45000000080 to BSE_options adding: max_evolution_time=15000 to BSE_options adding: eccentricity=0.02 to BSE_options adding: amt_cores=2 to grid_options -<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/example_python_population_result to custom_options >>>> +adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_population to grid_options +<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result to custom_options >>>> <<<< Warning: Key does not match previously known parameter: adding: base_filename=example_pop.dat to custom_options >>>> 1 example_pop.dat @@ -548,7 +556,7 @@ include_binary_c_version_info=False - include_binary_c_help_all (all the help in </div> <div class="output_area docutils container"> <div class="highlight"><pre> -Writing settings to /tmp/binary_c_python/example_python_population_result/example_pop_settings.json +Writing settings to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json </pre></div></div> </div> <div class="nboutput nblast docutils container"> @@ -557,7 +565,7 @@ Writing settings to /tmp/binary_c_python/example_python_population_result/exampl </div> <div class="output_area docutils container"> <div class="highlight"><pre> -'/tmp/binary_c_python/example_python_population_result/example_pop_settings.json' +'/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json' </pre></div></div> </div> </div> @@ -584,7 +592,7 @@ Writing settings to /tmp/binary_c_python/example_python_population_result/exampl <div class="highlight"><pre> Help on method add_grid_variable in module binarycpython.utils.grid: -add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='edge', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance +add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='centred', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance Function to add grid variables to the grid_options. The execution of the grid generation will be through a nested for loop. @@ -652,7 +660,7 @@ add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolutio condition = 'self.grid_options['binary']==1' gridtype: Method on how the value range is sampled. Can be either 'edge' (steps starting at - the lower edge of the value range) or 'center' + the lower edge of the value range) or 'centred' (steps starting at lower edge + 0.5 * stepsize). </pre></div></div> @@ -743,7 +751,7 @@ Added grid variable: { "dphasevol": "dlnm1", "parameter_name": "M_1", "condition": "", - "gridtype": "edge", + "gridtype": "centred", "branchpoint": 0, "grid_variable_number": 0 } @@ -868,7 +876,7 @@ if(stardata->star[0].stellar_type >= 13) </div> <div class="output_area docutils container"> <div class="highlight"><pre> -adding: parse_function=<function parse_function at 0x7ff3bdf79620> to grid_options +adding: parse_function=<function parse_function at 0x7f531bc3b6a8> to grid_options </pre></div></div> </div> </div> @@ -900,25 +908,25 @@ adding: verbosity=0 to grid_options Generating grid code Constructing/adding: lnm1 Grid has handled 20 stars -with a total probability of 0.05150046619238192 +with a total probability of 0.044402888438054094 Total starcount for this run will be: 20 -EXAMPLE_COMPACT_OBJECT 2.867655467480e+01 1.33079 9.81391 0.00167028 13 Generating grid code Constructing/adding: lnm1 -EXAMPLE_COMPACT_OBJECT 1.931266944719e+01 1.3933 12.3177 0.00124307 13 -EXAMPLE_COMPACT_OBJECT 4.439623364590e+01 1.38004 7.81906 0.00224431 13 -EXAMPLE_COMPACT_OBJECT 1.364277535630e+01 1.47961 15.4603 0.000925128 13 -EXAMPLE_COMPACT_OBJECT 1.017435498578e+01 1.59052 19.4046 0.000688507 13 -EXAMPLE_COMPACT_OBJECT 8.294870923827e+00 1.7197 24.3552 0.000512406 13 -EXAMPLE_COMPACT_OBJECT 6.802132608769e+00 1.84162 30.5689 0.000381347 13 -EXAMPLE_COMPACT_OBJECT 5.723570798020e+00 1.99471 38.3678 0.00028381 13 -EXAMPLE_COMPACT_OBJECT 4.933751523833e+00 2.15875 48.1564 0.000211219 13 -EXAMPLE_COMPACT_OBJECT 4.337250536639e+00 2.35209 60.4424 0.000157195 14 -EXAMPLE_COMPACT_OBJECT 3.862081089332e+00 2.56776 75.8628 0.000116989 14 -EXAMPLE_COMPACT_OBJECT 3.449960890183e+00 2.80457 95.2174 8.70668e-05 14 -EXAMPLE_COMPACT_OBJECT 3.172196856333e+00 3.05193 119.51 6.47976e-05 14 -EXAMPLE_COMPACT_OBJECT 3.069627290216e+00 3.27563 150 4.82242e-05 14 -Population-2a7732d03e594ef4b5dfe9051b41d9c0 finished! The total probability was: 0.05150046619238191. It took a total of 0.7797017097473145s to run 20 systems on 2 cores +EXAMPLE_COMPACT_OBJECT 4.139293101586e+01 1.29427 8.13626 0.00202467 13 +EXAMPLE_COMPACT_OBJECT 2.802986496151e+01 1.33699 10.0967 0.00152924 13 +EXAMPLE_COMPACT_OBJECT 1.963621764679e+01 1.39754 12.5294 0.00115504 13 +EXAMPLE_COMPACT_OBJECT 1.427601421985e+01 1.47745 15.5483 0.000872405 13 +EXAMPLE_COMPACT_OBJECT 1.094409257247e+01 1.57571 19.2947 0.00065893 13 +EXAMPLE_COMPACT_OBJECT 9.181971798545e+00 1.68748 23.9436 0.000497691 13 +EXAMPLE_COMPACT_OBJECT 7.905335716621e+00 1.77287 29.7128 0.000375908 13 +EXAMPLE_COMPACT_OBJECT 7.451192744924e+00 1.81495 36.872 0.000283924 13 +EXAMPLE_COMPACT_OBJECT 7.396133472739e+00 1.82088 45.7561 0.000214449 13 +EXAMPLE_COMPACT_OBJECT 7.396675941641e+00 1.82123 56.7809 0.000161974 13 +EXAMPLE_COMPACT_OBJECT 7.404641347602e+00 1.82074 70.4621 0.000122339 13 +EXAMPLE_COMPACT_OBJECT 7.444217227690e+00 1.81636 87.4397 9.2403e-05 13 +EXAMPLE_COMPACT_OBJECT 7.453317880232e+00 1.81536 108.508 6.97923e-05 13 +EXAMPLE_COMPACT_OBJECT 7.450828476484e+00 1.81563 134.653 5.27143e-05 13 +Population-f28b5f98d7ef40dcb17fc2481a6d3ced finished! The total probability was: 0.04440288843805411. It took a total of 2.785212755203247s to run 20 systems on 2 cores There were no errors found in this run. </pre></div></div> </div> @@ -937,7 +945,7 @@ There were no errors found in this run. </div> <div class="output_area docutils container"> <div class="highlight"><pre> -{'population_name': '2a7732d03e594ef4b5dfe9051b41d9c0', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.05150046619238191, 'total_count': 20, 'start_timestamp': 1628444120.234709, 'end_timestamp': 1628444121.0144107, 'total_mass_run': 730.1048014407228, 'total_probability_weighted_mass_run': 0.2983275843337705, 'zero_prob_stars_skipped': 0} +{'population_name': 'f28b5f98d7ef40dcb17fc2481a6d3ced', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.04440288843805411, 'total_count': 20, 'start_timestamp': 1629459533.935186, 'end_timestamp': 1629459536.7203987, 'total_mass_run': 684.2544031669779, 'total_probability_weighted_mass_run': 0.28134439269236855, 'zero_prob_stars_skipped': 0} </pre></div></div> </div> </div> @@ -990,7 +998,7 @@ write_binary_c_calls_to_file(output_dir:Union[str, NoneType]=None, output_filena </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> -<span></span><span class="n">example_pop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">verbosity</span><span class="o">=</span><span class="mi">10</span><span class="p">)</span> +<span></span><span class="n">example_pop</span><span class="o">.</span><span class="n">set</span><span class="p">(</span><span class="n">verbosity</span><span class="o">=</span><span class="mi">1</span><span class="p">)</span> <span class="n">calls_filename</span> <span class="o">=</span> <span class="n">example_pop</span><span class="o">.</span><span class="n">write_binary_c_calls_to_file</span><span class="p">()</span> <span class="nb">print</span><span class="p">(</span><span class="n">calls_filename</span><span class="p">)</span> @@ -1008,37 +1016,17 @@ Generating grid code Generating grid code Constructing/adding: lnm1 Saving grid code to grid_options -Writing grid code to /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py -Loading grid code function from /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py +Writing grid code to /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py +Loading grid code function from /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py Grid code loaded -Writing binary_c calls to /tmp/binary_c_python/example_python_population_result/binary_c_calls.txt -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. -_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction. +Writing binary_c calls to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt Grid has handled 20 stars -with a total probability of 0.05150046619238192 -/tmp/binary_c_python/example_python_population_result/binary_c_calls.txt -binary_c M_1 2.0 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.013208238029791246 -binary_c M_1 2.5102526289471614 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.009829948023831718 -binary_c M_1 3.1506841305680684 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.0073157281034221516 -binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.005444573822104362 +with a total probability of 0.044402888438054094 +/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt +binary_c M_1 2.227955577093495 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.010905083645619543 +binary_c M_1 2.7647737053496777 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.008236638755149857 +binary_c M_1 3.4309362899259503 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.006221155214163634 +binary_c M_1 4.257608426597089 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.004698855121516278 </pre></div></div> </div> </div> @@ -1050,12 +1038,7 @@ binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbit </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> -<span></span><span class="kn">import</span> <span class="nn">os</span> - -<span class="kn">from</span> <span class="nn">binarycpython.utils.grid</span> <span class="kn">import</span> <span class="n">Population</span> -<span class="kn">from</span> <span class="nn">binarycpython.utils.custom_logging_functions</span> <span class="kn">import</span> <span class="n">temp_dir</span> - -<span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> +<span></span><span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Example parsing function</span> <span class="sd"> """</span> @@ -1114,11 +1097,12 @@ binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbit <span class="n">eccentricity</span><span class="o">=</span><span class="mf">0.02</span><span class="p">,</span> <span class="c1"># bse_options</span> <span class="c1"># grid_options</span> - <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="c1"># grid_options</span> + <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> + <span class="n">tmp_dir</span><span class="o">=</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="c1"># Custom options: the data directory and the output filename</span> <span class="n">data_dir</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span> + <span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span> <span class="p">),</span> <span class="c1"># custom_options</span> <span class="n">base_filename</span><span class="o">=</span><span class="s2">"example_pop.dat"</span><span class="p">,</span> <span class="c1"># custom_options</span> <span class="p">)</span> @@ -1173,15 +1157,15 @@ binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbit <span class="n">example_pop</span><span class="o">.</span><span class="n">export_all_info</span><span class="p">()</span> <span class="c1"># remove the result file if it exists</span> -<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">)):</span> - <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">))</span> +<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">)):</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">))</span> <span class="c1"># Evolve the population</span> <span class="n">example_pop</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> <span class="c1">#</span> -<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> +<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> <span class="n">output</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> @@ -1196,29 +1180,29 @@ binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbit Generating grid code Constructing/adding: lnm1 Grid has handled 20 stars -with a total probability of 0.05150046619238192 +with a total probability of 0.044402888438054094 Total starcount for this run will be: 20 Generating grid code Constructing/adding: lnm1 -Population-3680f3882c0a449c944462abffea2447 finished! The total probability was: 0.05150046619238191. It took a total of 0.6246354579925537s to run 20 systems on 2 cores +Population-e45c25448b32440cb7e220f4a3562907 finished! The total probability was: 0.04440288843805411. It took a total of 1.9539172649383545s to run 20 systems on 2 cores There were no errors found in this run. time mass zams_mass probability radius stellar_type -2.867655467480e+01 1.33079 9.81391 0.00167028 1.72498e-05 13 -1.931266944719e+01 1.3933 12.3177 0.00124307 1.72498e-05 13 -4.439623364590e+01 1.38004 7.81906 0.00224431 1.72498e-05 13 -1.364277535630e+01 1.47961 15.4603 0.000925128 1.72498e-05 13 -1.017435498578e+01 1.59052 19.4046 0.000688507 1.72498e-05 13 -8.294870923827e+00 1.7197 24.3552 0.000512406 1.72498e-05 13 -6.802132608769e+00 1.84162 30.5689 0.000381347 1.72498e-05 13 -5.723570798020e+00 1.99471 38.3678 0.00028381 1.72498e-05 13 -4.933751523833e+00 2.15875 48.1564 0.000211219 1.72498e-05 13 -4.337250536639e+00 2.35209 60.4424 0.000157195 9.97286e-06 14 -3.862081089332e+00 2.56776 75.8628 0.000116989 1.08873e-05 14 -3.449960890183e+00 2.80457 95.2174 8.70668e-05 1.18914e-05 14 -3.172196856333e+00 3.05193 119.51 6.47976e-05 1.29402e-05 14 -3.069627290216e+00 3.27563 150 4.82242e-05 1.38887e-05 14 +4.139293101586e+01 1.29427 8.13626 0.00202467 1.72498e-05 13 +2.802986496151e+01 1.33699 10.0967 0.00152924 1.72498e-05 13 +1.963621764679e+01 1.39754 12.5294 0.00115504 1.72498e-05 13 +1.427601421985e+01 1.47745 15.5483 0.000872405 1.72498e-05 13 +1.094409257247e+01 1.57571 19.2947 0.00065893 1.72498e-05 13 +9.181971798545e+00 1.68748 23.9436 0.000497691 1.72498e-05 13 +7.905335716621e+00 1.77287 29.7128 0.000375908 1.72498e-05 13 +7.451192744924e+00 1.81495 36.872 0.000283924 1.72498e-05 13 +7.396133472739e+00 1.82088 45.7561 0.000214449 1.72498e-05 13 +7.396675941641e+00 1.82123 56.7809 0.000161974 1.72498e-05 13 +7.404641347602e+00 1.82074 70.4621 0.000122339 1.72498e-05 13 +7.444217227690e+00 1.81636 87.4397 9.2403e-05 1.72498e-05 13 +7.453317880232e+00 1.81536 108.508 6.97923e-05 1.72498e-05 13 +7.450828476484e+00 1.81563 134.653 5.27143e-05 1.72498e-05 13 </pre></div></div> </div> @@ -1228,12 +1212,7 @@ time mass zams_mass probability radius stellar_type </pre></div> </div> <div class="input_area highlight-ipython3 notranslate"><div class="highlight"><pre> -<span></span><span class="kn">import</span> <span class="nn">os</span> - -<span class="kn">from</span> <span class="nn">binarycpython.utils.grid</span> <span class="kn">import</span> <span class="n">Population</span> -<span class="kn">from</span> <span class="nn">binarycpython.utils.custom_logging_functions</span> <span class="kn">import</span> <span class="n">temp_dir</span> - -<span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> +<span></span><span class="k">def</span> <span class="nf">parse_function</span><span class="p">(</span><span class="bp">self</span><span class="p">,</span> <span class="n">output</span><span class="p">):</span> <span class="sd">"""</span> <span class="sd"> Example parsing function</span> <span class="sd"> """</span> @@ -1298,10 +1277,11 @@ time mass zams_mass probability radius stellar_type <span class="c1"># grid_options</span> <span class="n">amt_cores</span><span class="o">=</span><span class="mi">2</span><span class="p">,</span> <span class="c1"># grid_options</span> + <span class="n">tmp_dir</span><span class="o">=</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="c1"># Custom options: the data directory and the output filename</span> <span class="n">data_dir</span><span class="o">=</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span> - <span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span> + <span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span> <span class="p">),</span> <span class="c1"># custom_options</span> <span class="n">base_filename</span><span class="o">=</span><span class="s2">"example_pop.dat"</span><span class="p">,</span> <span class="c1"># custom_options</span> <span class="p">)</span> @@ -1399,14 +1379,14 @@ time mass zams_mass probability radius stellar_type <span class="n">example_pop</span><span class="o">.</span><span class="n">export_all_info</span><span class="p">()</span> <span class="c1"># remove the result file if it exists</span> -<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">)):</span> - <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">))</span> +<span class="k">if</span> <span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">isfile</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">)):</span> + <span class="n">os</span><span class="o">.</span><span class="n">remove</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">))</span> <span class="c1"># Evolve the population</span> <span class="n">example_pop</span><span class="o">.</span><span class="n">evolve</span><span class="p">()</span> <span class="c1">#</span> -<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">temp_dir</span><span class="p">(),</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> +<span class="k">with</span> <span class="nb">open</span><span class="p">(</span><span class="n">os</span><span class="o">.</span><span class="n">path</span><span class="o">.</span><span class="n">join</span><span class="p">(</span><span class="n">TMP_DIR</span><span class="p">,</span> <span class="s2">"example_python_population_result"</span><span class="p">,</span> <span class="s2">"example_pop.dat"</span><span class="p">),</span> <span class="s1">'r'</span><span class="p">)</span> <span class="k">as</span> <span class="n">f</span><span class="p">:</span> <span class="n">output</span> <span class="o">=</span> <span class="n">f</span><span class="o">.</span><span class="n">read</span><span class="p">()</span> <span class="nb">print</span><span class="p">(</span><span class="s2">"</span><span class="se">\n</span><span class="s2">"</span><span class="p">)</span> <span class="nb">print</span><span class="p">(</span><span class="n">output</span><span class="p">)</span> @@ -1422,86 +1402,34 @@ Generating grid code Constructing/adding: lnm1 Constructing/adding: q Constructing/adding: log10per -Grid has handled 125 stars -with a total probability of 0.0862478164626921 -Total starcount for this run will be: 125 +Grid has handled 27 stars +with a total probability of 0.024868380796643753 +Total starcount for this run will be: 27 Generating grid code Constructing/adding: lnm1 Constructing/adding: q Constructing/adding: log10per -Population-d20a4c74d20a43b881c0c9e5def5f76c finished! The total probability was: 0.08624781646269201. It took a total of 8.561265707015991s to run 125 systems on 2 cores +Population-05128ef4c5fe4274a0356c3e99e2f2d2 finished! The total probability was: 0.024868380796643757. It took a total of 9.792905807495117s to run 27 systems on 2 cores There were no errors found in this run. time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 stellar_type_2 prev_stellar_type_2 metallicity probability -8.863377990313e+01 1.29444 5.88566 0 2.99283 13 5 15 15 0.02 0.000627913 -1.146421815741e+02 0 5.88566 1.33062 4.43925 15 15 13 5 0.02 0.000627913 -7.222715508467e+01 1.34922 5.88566 0 5.88566 13 5 15 15 0.02 0.000627913 -1.350021848285e+01 1.48488 17.3205 0 0.1 13 5 15 15 0.02 0.000154349 -1.171108213270e+01 1.53113 17.3205 0 0.1 13 5 15 15 0.02 0.000154349 -1.171086983243e+01 1.53177 17.3205 0 0.1 13 9 15 15 0.02 0.000154349 -1.170770599495e+01 1.53176 17.3205 0 4.40513 13 5 15 15 0.02 0.000172877 -1.230407246199e+01 1.59499 17.3205 0 4.40513 13 5 15 15 0.02 0.000610573 -1.108751340926e+01 1.70319 17.3205 0 8.71025 13 4 15 15 0.02 0.000610573 -1.941017702765e+01 1.34903 17.3205 1.65097 8.71025 13 13 13 5 0.02 0.000172877 -1.980988739731e+01 1.36979 17.3205 1.60808 8.71025 13 13 13 5 0.02 0.000121486 -3.571858031651e+01 1.53174 17.3205 1.30504 8.71025 13 13 13 5 0.02 8.42148e-05 -3.459153942631e+01 1.53176 17.3205 1.31004 8.71025 13 13 13 5 0.02 9.8162e-05 -1.687368550125e+01 1.34937 17.3205 1.73856 13.0154 13 13 13 8 0.02 0.000172877 -1.194842917007e+01 1.78096 17.3205 0 13.0154 13 8 15 15 0.02 0.000610573 -1.733614170983e+01 1.53184 17.3205 1.42375 13.0154 13 13 13 5 0.02 9.8162e-05 -1.723547465714e+01 1.38403 17.3205 1.71288 13.0154 13 13 13 8 0.02 0.000121486 -1.764340254985e+01 1.53174 17.3205 1.41264 13.0154 13 13 13 5 0.02 8.42148e-05 -1.170425790780e+01 1.52963 17.3205 0 17.3205 13 5 15 15 0.02 0.000172877 -8.922967341481e+00 1.85486 17.3205 0 17.3205 13 8 15 15 0.02 0.000610573 -1.232906623449e+01 1.41074 17.3205 1.34281 17.3205 13 13 13 8 0.02 0.000121486 -1.170775828562e+01 1.53183 17.3205 1.53183 17.3205 13 5 13 5 0.02 9.8162e-05 -1.170770422321e+01 1.53175 17.3205 1.53175 17.3205 13 5 13 5 0.02 8.42148e-05 -5.075844624794e+00 2.12303 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05 -4.766606588165e+00 2.20484 50.9713 0 0.1 14 8 15 15 0.02 3.79411e-05 -4.768305081494e+00 2.18838 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05 -4.458869865939e+00 2.29864 50.9713 0 12.8178 14 8 15 15 0.02 0.000150087 -1.806014211040e+01 2.10446 50.9713 1.40749 12.8178 13 13 13 5 0.02 2.9863e-05 -4.797342083485e+00 2.10328 50.9713 0 12.8178 13 13 15 1 0.02 4.24954e-05 -1.721374713429e+01 2.21673 50.9713 1.42212 12.8178 14 14 13 5 0.02 2.41295e-05 -4.055645404546e+00 2.47276 50.9713 0 25.5357 14 7 15 15 0.02 0.000150087 -1.806123543037e+01 2.21893 50.9713 1.40745 12.8178 14 14 13 5 0.02 2.07011e-05 -8.117519147635e+00 2.10433 50.9713 2.21473 25.5357 13 13 14 8 0.02 4.24954e-05 -8.315554923168e+00 2.15343 50.9713 2.08519 25.5357 13 13 13 8 0.02 2.9863e-05 -7.917420996633e+00 2.21892 50.9713 1.7431 25.5357 14 14 13 8 0.02 2.07011e-05 -7.693213405973e+00 2.21805 50.9713 1.78384 25.5357 14 14 13 8 0.02 2.41295e-05 -3.753837732894e+00 2.62517 50.9713 0 38.2535 14 7 15 15 0.02 0.000150087 -7.087296558990e+00 2.10417 50.9713 2.40935 38.2535 13 13 14 8 0.02 4.24954e-05 -7.007109286263e+00 2.15854 50.9713 2.28672 38.2535 13 13 14 8 0.02 2.9863e-05 -5.653200958306e+00 2.21878 50.9713 2.0587 38.2535 14 14 13 8 0.02 2.41295e-05 -5.733794947644e+00 2.21892 50.9713 1.99255 38.2535 14 14 13 8 0.02 2.07011e-05 -3.513216011269e+00 2.76647 50.9713 0 50.9713 14 7 15 15 0.02 0.000150087 -4.750574783854e+00 2.27442 50.9713 0 50.9713 14 8 15 15 0.02 4.24954e-05 -7.278384712062e+00 1.29678 50.9713 2.09216 50.9713 13 8 13 13 0.02 2.9863e-05 -4.765996194699e+00 2.20787 50.9713 2.20787 50.9713 14 8 14 8 0.02 2.07011e-05 -4.765535914728e+00 2.21331 50.9713 2.21331 50.9713 14 8 14 8 0.02 2.41295e-05 -3.104706358826e+00 3.17639 150 0 0.1 14 7 15 15 0.02 9.32641e-06 -3.069363482023e+00 3.27572 150 0 0.1 14 7 15 15 0.02 9.32641e-06 -3.047074050271e+00 3.3836 150 0 37.575 14 7 15 15 0.02 3.68933e-05 -5.974759306305e+00 3.23604 150 2.53922 37.575 14 14 14 7 0.02 1.04459e-05 -6.074084349384e+00 3.30145 150 2.13876 37.575 14 14 13 8 0.02 7.34071e-06 -5.733865371895e+00 3.29994 150 2.00498 37.575 14 14 13 8 0.02 5.93135e-06 -3.027099358410e+00 3.53631 150 0 75.05 14 7 15 15 0.02 3.68933e-05 -5.807147339697e+00 3.30197 150 1.9791 37.575 14 14 13 8 0.02 5.08861e-06 -4.862942347290e+00 3.25294 150 2.97823 75.05 14 14 14 7 0.02 1.04459e-05 -4.556479830908e+00 3.29942 150 2.73221 75.05 14 14 14 7 0.02 7.34071e-06 -3.853070305680e+00 3.29977 150 2.62486 75.05 14 14 14 7 0.02 5.93135e-06 -3.881529045940e+00 3.30149 150 2.55924 75.05 14 14 14 7 0.02 5.08861e-06 -3.015033359333e+00 3.64419 150 0 112.525 14 7 15 15 0.02 3.68933e-05 -4.126828648362e+00 3.32047 150 0 112.525 14 14 15 3 0.02 1.04459e-05 -3.990017992944e+00 3.3032 150 2.94027 112.525 14 14 14 7 0.02 7.34071e-06 -3.206771867883e+00 3.07671 150 3.11282 112.525 14 14 14 7 0.02 5.93135e-06 -3.006827156705e+00 3.72638 150 0 150 14 7 15 15 0.02 3.68933e-05 -3.218786094847e+00 3.30337 150 3.01344 112.525 14 14 14 7 0.02 5.08861e-06 -4.527722847382e+00 1.42238 150 0 150 13 5 15 15 0.02 1.04459e-05 -3.069567332611e+00 3.27804 150 3.27804 150 14 7 14 7 0.02 5.93135e-06 -5.726405299909e+00 1.29746 150 3.22759 150 13 8 14 14 0.02 7.34071e-06 -3.069626478211e+00 3.27565 150 3.27565 150 14 7 14 7 0.02 5.08861e-06 +1.219029061236e+01 1.60007 17.3205 0 2.97008 13 5 15 15 0.02 0.000498487 +1.935920346899e+01 1.29448 17.3205 0 8.71025 13 13 15 2 0.02 0.000498487 +2.123795595728e+01 1.30902 17.3205 1.58519 8.71025 13 13 13 5 0.02 0.000287968 +3.579099761269e+01 1.52414 17.3205 1.30642 8.71025 13 13 13 5 0.02 0.000220016 +1.674063083432e+01 1.29457 17.3205 0 14.4504 13 13 15 2 0.02 0.000498487 +1.779197348711e+01 1.3228 17.3205 1.71196 14.4504 13 13 13 8 0.02 0.000287968 +1.548740826516e+01 1.52415 17.3205 1.45407 14.4504 13 13 13 5 0.02 0.000220016 +1.772169325356e+01 1.81957 73.0434 1.46573 12.2572 13 13 13 5 0.02 4.43422e-05 +1.367065500196e+01 1.66003 73.0434 1.79487 12.2572 13 13 13 8 0.02 7.67586e-05 +2.021960493499e+01 1.82061 73.0434 1.39205 12.2572 13 13 13 5 0.02 3.38788e-05 +9.012246630357e+00 1.81529 73.0434 0 36.5717 13 8 15 15 0.02 7.67586e-05 +7.462779538274e+00 1.82255 73.0434 1.81499 36.5717 13 13 13 8 0.02 3.38788e-05 +1.030499912298e+01 1.80592 73.0434 1.81066 36.5717 13 13 13 8 0.02 4.43422e-05 +4.227002356107e+00 2.43719 73.0434 0 60.8862 14 14 15 1 0.02 7.67586e-05 +7.396288708628e+00 1.8216 73.0434 1.8216 60.8862 13 8 13 8 0.02 3.38788e-05 +7.394728392218e+00 1.80919 73.0434 1.79091 60.8862 13 13 13 8 0.02 4.43422e-05 </pre></div></div> </div> @@ -1542,9 +1470,9 @@ time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 st provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/notebook_population.ipynb b/docs/build/html/notebook_population.ipynb index b6a37baa8..f6f27ee43 100644 --- a/docs/build/html/notebook_population.ipynb +++ b/docs/build/html/notebook_population.ipynb @@ -23,9 +23,12 @@ "outputs": [], "source": [ "import os\n", + "\n", "from binarycpython.utils.custom_logging_functions import temp_dir\n", "from binarycpython.utils.grid import Population\n", "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_population\")\n", + "\n", "# help(Population) # Uncomment to see the public functions of this object" ] }, @@ -60,7 +63,8 @@ "adding: max_evolution_time=15000 to BSE_options\n", "adding: eccentricity=0.02 to BSE_options\n", "adding: amt_cores=2 to grid_options\n", - "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/example_python_population_result to custom_options >>>>\n", + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_population to grid_options\n", + "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result to custom_options >>>>\n", "<<<< Warning: Key does not match previously known parameter: adding: base_filename=example_pop.dat to custom_options >>>>\n", "1\n", "example_pop.dat\n", @@ -88,11 +92,12 @@ "\n", "\n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", " \n", " # Custom options # TODO: need to be set in grid_options probably\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -133,13 +138,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Writing settings to /tmp/binary_c_python/example_python_population_result/example_pop_settings.json\n" + "Writing settings to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json\n" ] }, { "data": { "text/plain": [ - "'/tmp/binary_c_python/example_python_population_result/example_pop_settings.json'" + "'/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json'" ] }, "execution_count": 3, @@ -181,7 +186,7 @@ "text": [ "Help on method add_grid_variable in module binarycpython.utils.grid:\n", "\n", - "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='edge', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", + "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='centred', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", " Function to add grid variables to the grid_options.\n", " \n", " The execution of the grid generation will be through a nested for loop.\n", @@ -199,25 +204,25 @@ " name:\n", " name of parameter. This is evaluated as a parameter and you can use it throughout\n", " the rest of the function\n", - " \n", + " \n", " Examples:\n", " name = 'lnm1'\n", " longname:\n", " Long name of parameter\n", - " \n", + " \n", " Examples:\n", " longname = 'Primary mass'\n", " range:\n", " Range of values to take. Does not get used really, the spacingfunction is used to\n", " get the values from\n", - " \n", + " \n", " Examples:\n", " range = [math.log(m_min), math.log(m_max)]\n", " resolution:\n", " Resolution of the sampled range (amount of samples).\n", " TODO: check if this is used anywhere\n", " \n", - " Examples: \n", + " Examples:\n", " resolution = resolution[\"M_1\"]\n", " spacingfunction:\n", " Function determining how the range is sampled. You can either use a real function,\n", @@ -230,12 +235,12 @@ " precode:\n", " Extra room for some code. This code will be evaluated within the loop of the\n", " sampling function (i.e. a value for lnm1 is chosen already)\n", - " \n", + " \n", " Examples:\n", " precode = 'M_1=math.exp(lnm1);'\n", " probdist:\n", " Function determining the probability that gets assigned to the sampled parameter\n", - " \n", + " \n", " Examples:\n", " probdist = 'Kroupa2001(M_1)*M_1'\n", " dphasevol:\n", @@ -249,7 +254,7 @@ " condition = 'self.grid_options['binary']==1'\n", " gridtype:\n", " Method on how the value range is sampled. Can be either 'edge' (steps starting at\n", - " the lower edge of the value range) or 'center'\n", + " the lower edge of the value range) or 'centred'\n", " (steps starting at lower edge + 0.5 * stepsize).\n", "\n" ] @@ -313,7 +318,7 @@ " \"dphasevol\": \"dlnm1\",\n", " \"parameter_name\": \"M_1\",\n", " \"condition\": \"\",\n", - " \"gridtype\": \"edge\",\n", + " \"gridtype\": \"centred\",\n", " \"branchpoint\": 0,\n", " \"grid_variable_number\": 0\n", "}\n" @@ -457,7 +462,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "adding: parse_function=<function parse_function at 0x7ff3bdf79620> to grid_options\n" + "adding: parse_function=<function parse_function at 0x7f531bc3b6a8> to grid_options\n" ] } ], @@ -536,25 +541,25 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", - "EXAMPLE_COMPACT_OBJECT 2.867655467480e+01 1.33079 9.81391 0.00167028 13\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "EXAMPLE_COMPACT_OBJECT 1.931266944719e+01 1.3933 12.3177 0.00124307 13\n", - "EXAMPLE_COMPACT_OBJECT 4.439623364590e+01 1.38004 7.81906 0.00224431 13\n", - "EXAMPLE_COMPACT_OBJECT 1.364277535630e+01 1.47961 15.4603 0.000925128 13\n", - "EXAMPLE_COMPACT_OBJECT 1.017435498578e+01 1.59052 19.4046 0.000688507 13\n", - "EXAMPLE_COMPACT_OBJECT 8.294870923827e+00 1.7197 24.3552 0.000512406 13\n", - "EXAMPLE_COMPACT_OBJECT 6.802132608769e+00 1.84162 30.5689 0.000381347 13\n", - "EXAMPLE_COMPACT_OBJECT 5.723570798020e+00 1.99471 38.3678 0.00028381 13\n", - "EXAMPLE_COMPACT_OBJECT 4.933751523833e+00 2.15875 48.1564 0.000211219 13\n", - "EXAMPLE_COMPACT_OBJECT 4.337250536639e+00 2.35209 60.4424 0.000157195 14\n", - "EXAMPLE_COMPACT_OBJECT 3.862081089332e+00 2.56776 75.8628 0.000116989 14\n", - "EXAMPLE_COMPACT_OBJECT 3.449960890183e+00 2.80457 95.2174 8.70668e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.172196856333e+00 3.05193 119.51 6.47976e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.069627290216e+00 3.27563 150 4.82242e-05 14\n", - "Population-2a7732d03e594ef4b5dfe9051b41d9c0 finished! The total probability was: 0.05150046619238191. It took a total of 0.7797017097473145s to run 20 systems on 2 cores\n", + "EXAMPLE_COMPACT_OBJECT 4.139293101586e+01 1.29427 8.13626 0.00202467 13\n", + "EXAMPLE_COMPACT_OBJECT 2.802986496151e+01 1.33699 10.0967 0.00152924 13\n", + "EXAMPLE_COMPACT_OBJECT 1.963621764679e+01 1.39754 12.5294 0.00115504 13\n", + "EXAMPLE_COMPACT_OBJECT 1.427601421985e+01 1.47745 15.5483 0.000872405 13\n", + "EXAMPLE_COMPACT_OBJECT 1.094409257247e+01 1.57571 19.2947 0.00065893 13\n", + "EXAMPLE_COMPACT_OBJECT 9.181971798545e+00 1.68748 23.9436 0.000497691 13\n", + "EXAMPLE_COMPACT_OBJECT 7.905335716621e+00 1.77287 29.7128 0.000375908 13\n", + "EXAMPLE_COMPACT_OBJECT 7.451192744924e+00 1.81495 36.872 0.000283924 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396133472739e+00 1.82088 45.7561 0.000214449 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396675941641e+00 1.82123 56.7809 0.000161974 13\n", + "EXAMPLE_COMPACT_OBJECT 7.404641347602e+00 1.82074 70.4621 0.000122339 13\n", + "EXAMPLE_COMPACT_OBJECT 7.444217227690e+00 1.81636 87.4397 9.2403e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.453317880232e+00 1.81536 108.508 6.97923e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.450828476484e+00 1.81563 134.653 5.27143e-05 13\n", + "Population-f28b5f98d7ef40dcb17fc2481a6d3ced finished! The total probability was: 0.04440288843805411. It took a total of 2.785212755203247s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n" ] } @@ -586,7 +591,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'population_name': '2a7732d03e594ef4b5dfe9051b41d9c0', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.05150046619238191, 'total_count': 20, 'start_timestamp': 1628444120.234709, 'end_timestamp': 1628444121.0144107, 'total_mass_run': 730.1048014407228, 'total_probability_weighted_mass_run': 0.2983275843337705, 'zero_prob_stars_skipped': 0}\n" + "{'population_name': 'f28b5f98d7ef40dcb17fc2481a6d3ced', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.04440288843805411, 'total_count': 20, 'start_timestamp': 1629459533.935186, 'end_timestamp': 1629459536.7203987, 'total_mass_run': 684.2544031669779, 'total_probability_weighted_mass_run': 0.28134439269236855, 'zero_prob_stars_skipped': 0}\n" ] } ], @@ -660,42 +665,22 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Saving grid code to grid_options\n", - "Writing grid code to /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", - "Loading grid code function from /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", + "Writing grid code to /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", + "Loading grid code function from /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", "Grid code loaded\n", - "Writing binary_c calls to /tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", + "Writing binary_c calls to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", - "/tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "binary_c M_1 2.0 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.013208238029791246\n", - "binary_c M_1 2.5102526289471614 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.009829948023831718\n", - "binary_c M_1 3.1506841305680684 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.0073157281034221516\n", - "binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.005444573822104362\n" + "with a total probability of 0.044402888438054094\n", + "/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", + "binary_c M_1 2.227955577093495 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.010905083645619543\n", + "binary_c M_1 2.7647737053496777 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.008236638755149857\n", + "binary_c M_1 3.4309362899259503 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.006221155214163634\n", + "binary_c M_1 4.257608426597089 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.004698855121516278\n" ] } ], "source": [ - "example_pop.set(verbosity=10)\n", + "example_pop.set(verbosity=1)\n", "calls_filename = example_pop.write_binary_c_calls_to_file()\n", "print(calls_filename)\n", "\n", @@ -725,39 +710,34 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "Population-3680f3882c0a449c944462abffea2447 finished! The total probability was: 0.05150046619238191. It took a total of 0.6246354579925537s to run 20 systems on 2 cores\n", + "Population-e45c25448b32440cb7e220f4a3562907 finished! The total probability was: 0.04440288843805411. It took a total of 1.9539172649383545s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass zams_mass probability radius stellar_type\n", - "2.867655467480e+01 1.33079 9.81391 0.00167028 1.72498e-05 13\n", - "1.931266944719e+01 1.3933 12.3177 0.00124307 1.72498e-05 13\n", - "4.439623364590e+01 1.38004 7.81906 0.00224431 1.72498e-05 13\n", - "1.364277535630e+01 1.47961 15.4603 0.000925128 1.72498e-05 13\n", - "1.017435498578e+01 1.59052 19.4046 0.000688507 1.72498e-05 13\n", - "8.294870923827e+00 1.7197 24.3552 0.000512406 1.72498e-05 13\n", - "6.802132608769e+00 1.84162 30.5689 0.000381347 1.72498e-05 13\n", - "5.723570798020e+00 1.99471 38.3678 0.00028381 1.72498e-05 13\n", - "4.933751523833e+00 2.15875 48.1564 0.000211219 1.72498e-05 13\n", - "4.337250536639e+00 2.35209 60.4424 0.000157195 9.97286e-06 14\n", - "3.862081089332e+00 2.56776 75.8628 0.000116989 1.08873e-05 14\n", - "3.449960890183e+00 2.80457 95.2174 8.70668e-05 1.18914e-05 14\n", - "3.172196856333e+00 3.05193 119.51 6.47976e-05 1.29402e-05 14\n", - "3.069627290216e+00 3.27563 150 4.82242e-05 1.38887e-05 14\n", + "4.139293101586e+01 1.29427 8.13626 0.00202467 1.72498e-05 13\n", + "2.802986496151e+01 1.33699 10.0967 0.00152924 1.72498e-05 13\n", + "1.963621764679e+01 1.39754 12.5294 0.00115504 1.72498e-05 13\n", + "1.427601421985e+01 1.47745 15.5483 0.000872405 1.72498e-05 13\n", + "1.094409257247e+01 1.57571 19.2947 0.00065893 1.72498e-05 13\n", + "9.181971798545e+00 1.68748 23.9436 0.000497691 1.72498e-05 13\n", + "7.905335716621e+00 1.77287 29.7128 0.000375908 1.72498e-05 13\n", + "7.451192744924e+00 1.81495 36.872 0.000283924 1.72498e-05 13\n", + "7.396133472739e+00 1.82088 45.7561 0.000214449 1.72498e-05 13\n", + "7.396675941641e+00 1.82123 56.7809 0.000161974 1.72498e-05 13\n", + "7.404641347602e+00 1.82074 70.4621 0.000122339 1.72498e-05 13\n", + "7.444217227690e+00 1.81636 87.4397 9.2403e-05 1.72498e-05 13\n", + "7.453317880232e+00 1.81536 108.508 6.97923e-05 1.72498e-05 13\n", + "7.450828476484e+00 1.81563 134.653 5.27143e-05 1.72498e-05 13\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -817,11 +797,12 @@ " eccentricity=0.02, # bse_options\n", " \n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -876,15 +857,15 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" @@ -912,96 +893,39 @@ "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Grid has handled 125 stars\n", - "with a total probability of 0.0862478164626921\n", - "Total starcount for this run will be: 125\n", + "Grid has handled 27 stars\n", + "with a total probability of 0.024868380796643753\n", + "Total starcount for this run will be: 27\n", "Generating grid code\n", "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Population-d20a4c74d20a43b881c0c9e5def5f76c finished! The total probability was: 0.08624781646269201. It took a total of 8.561265707015991s to run 125 systems on 2 cores\n", + "Population-05128ef4c5fe4274a0356c3e99e2f2d2 finished! The total probability was: 0.024868380796643757. It took a total of 9.792905807495117s to run 27 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 stellar_type_2 prev_stellar_type_2 metallicity probability\n", - "8.863377990313e+01 1.29444 5.88566 0 2.99283 13 5 15 15 0.02 0.000627913\n", - "1.146421815741e+02 0 5.88566 1.33062 4.43925 15 15 13 5 0.02 0.000627913\n", - "7.222715508467e+01 1.34922 5.88566 0 5.88566 13 5 15 15 0.02 0.000627913\n", - "1.350021848285e+01 1.48488 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171108213270e+01 1.53113 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171086983243e+01 1.53177 17.3205 0 0.1 13 9 15 15 0.02 0.000154349\n", - "1.170770599495e+01 1.53176 17.3205 0 4.40513 13 5 15 15 0.02 0.000172877\n", - "1.230407246199e+01 1.59499 17.3205 0 4.40513 13 5 15 15 0.02 0.000610573\n", - "1.108751340926e+01 1.70319 17.3205 0 8.71025 13 4 15 15 0.02 0.000610573\n", - "1.941017702765e+01 1.34903 17.3205 1.65097 8.71025 13 13 13 5 0.02 0.000172877\n", - "1.980988739731e+01 1.36979 17.3205 1.60808 8.71025 13 13 13 5 0.02 0.000121486\n", - "3.571858031651e+01 1.53174 17.3205 1.30504 8.71025 13 13 13 5 0.02 8.42148e-05\n", - "3.459153942631e+01 1.53176 17.3205 1.31004 8.71025 13 13 13 5 0.02 9.8162e-05\n", - "1.687368550125e+01 1.34937 17.3205 1.73856 13.0154 13 13 13 8 0.02 0.000172877\n", - "1.194842917007e+01 1.78096 17.3205 0 13.0154 13 8 15 15 0.02 0.000610573\n", - "1.733614170983e+01 1.53184 17.3205 1.42375 13.0154 13 13 13 5 0.02 9.8162e-05\n", - "1.723547465714e+01 1.38403 17.3205 1.71288 13.0154 13 13 13 8 0.02 0.000121486\n", - "1.764340254985e+01 1.53174 17.3205 1.41264 13.0154 13 13 13 5 0.02 8.42148e-05\n", - "1.170425790780e+01 1.52963 17.3205 0 17.3205 13 5 15 15 0.02 0.000172877\n", - "8.922967341481e+00 1.85486 17.3205 0 17.3205 13 8 15 15 0.02 0.000610573\n", - "1.232906623449e+01 1.41074 17.3205 1.34281 17.3205 13 13 13 8 0.02 0.000121486\n", - "1.170775828562e+01 1.53183 17.3205 1.53183 17.3205 13 5 13 5 0.02 9.8162e-05\n", - "1.170770422321e+01 1.53175 17.3205 1.53175 17.3205 13 5 13 5 0.02 8.42148e-05\n", - "5.075844624794e+00 2.12303 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.766606588165e+00 2.20484 50.9713 0 0.1 14 8 15 15 0.02 3.79411e-05\n", - "4.768305081494e+00 2.18838 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.458869865939e+00 2.29864 50.9713 0 12.8178 14 8 15 15 0.02 0.000150087\n", - "1.806014211040e+01 2.10446 50.9713 1.40749 12.8178 13 13 13 5 0.02 2.9863e-05\n", - "4.797342083485e+00 2.10328 50.9713 0 12.8178 13 13 15 1 0.02 4.24954e-05\n", - "1.721374713429e+01 2.21673 50.9713 1.42212 12.8178 14 14 13 5 0.02 2.41295e-05\n", - "4.055645404546e+00 2.47276 50.9713 0 25.5357 14 7 15 15 0.02 0.000150087\n", - "1.806123543037e+01 2.21893 50.9713 1.40745 12.8178 14 14 13 5 0.02 2.07011e-05\n", - "8.117519147635e+00 2.10433 50.9713 2.21473 25.5357 13 13 14 8 0.02 4.24954e-05\n", - "8.315554923168e+00 2.15343 50.9713 2.08519 25.5357 13 13 13 8 0.02 2.9863e-05\n", - "7.917420996633e+00 2.21892 50.9713 1.7431 25.5357 14 14 13 8 0.02 2.07011e-05\n", - "7.693213405973e+00 2.21805 50.9713 1.78384 25.5357 14 14 13 8 0.02 2.41295e-05\n", - "3.753837732894e+00 2.62517 50.9713 0 38.2535 14 7 15 15 0.02 0.000150087\n", - "7.087296558990e+00 2.10417 50.9713 2.40935 38.2535 13 13 14 8 0.02 4.24954e-05\n", - "7.007109286263e+00 2.15854 50.9713 2.28672 38.2535 13 13 14 8 0.02 2.9863e-05\n", - "5.653200958306e+00 2.21878 50.9713 2.0587 38.2535 14 14 13 8 0.02 2.41295e-05\n", - "5.733794947644e+00 2.21892 50.9713 1.99255 38.2535 14 14 13 8 0.02 2.07011e-05\n", - "3.513216011269e+00 2.76647 50.9713 0 50.9713 14 7 15 15 0.02 0.000150087\n", - "4.750574783854e+00 2.27442 50.9713 0 50.9713 14 8 15 15 0.02 4.24954e-05\n", - "7.278384712062e+00 1.29678 50.9713 2.09216 50.9713 13 8 13 13 0.02 2.9863e-05\n", - "4.765996194699e+00 2.20787 50.9713 2.20787 50.9713 14 8 14 8 0.02 2.07011e-05\n", - "4.765535914728e+00 2.21331 50.9713 2.21331 50.9713 14 8 14 8 0.02 2.41295e-05\n", - "3.104706358826e+00 3.17639 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.069363482023e+00 3.27572 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.047074050271e+00 3.3836 150 0 37.575 14 7 15 15 0.02 3.68933e-05\n", - "5.974759306305e+00 3.23604 150 2.53922 37.575 14 14 14 7 0.02 1.04459e-05\n", - "6.074084349384e+00 3.30145 150 2.13876 37.575 14 14 13 8 0.02 7.34071e-06\n", - "5.733865371895e+00 3.29994 150 2.00498 37.575 14 14 13 8 0.02 5.93135e-06\n", - "3.027099358410e+00 3.53631 150 0 75.05 14 7 15 15 0.02 3.68933e-05\n", - "5.807147339697e+00 3.30197 150 1.9791 37.575 14 14 13 8 0.02 5.08861e-06\n", - "4.862942347290e+00 3.25294 150 2.97823 75.05 14 14 14 7 0.02 1.04459e-05\n", - "4.556479830908e+00 3.29942 150 2.73221 75.05 14 14 14 7 0.02 7.34071e-06\n", - "3.853070305680e+00 3.29977 150 2.62486 75.05 14 14 14 7 0.02 5.93135e-06\n", - "3.881529045940e+00 3.30149 150 2.55924 75.05 14 14 14 7 0.02 5.08861e-06\n", - "3.015033359333e+00 3.64419 150 0 112.525 14 7 15 15 0.02 3.68933e-05\n", - "4.126828648362e+00 3.32047 150 0 112.525 14 14 15 3 0.02 1.04459e-05\n", - "3.990017992944e+00 3.3032 150 2.94027 112.525 14 14 14 7 0.02 7.34071e-06\n", - "3.206771867883e+00 3.07671 150 3.11282 112.525 14 14 14 7 0.02 5.93135e-06\n", - "3.006827156705e+00 3.72638 150 0 150 14 7 15 15 0.02 3.68933e-05\n", - "3.218786094847e+00 3.30337 150 3.01344 112.525 14 14 14 7 0.02 5.08861e-06\n", - "4.527722847382e+00 1.42238 150 0 150 13 5 15 15 0.02 1.04459e-05\n", - "3.069567332611e+00 3.27804 150 3.27804 150 14 7 14 7 0.02 5.93135e-06\n", - "5.726405299909e+00 1.29746 150 3.22759 150 13 8 14 14 0.02 7.34071e-06\n", - "3.069626478211e+00 3.27565 150 3.27565 150 14 7 14 7 0.02 5.08861e-06\n", + "1.219029061236e+01 1.60007 17.3205 0 2.97008 13 5 15 15 0.02 0.000498487\n", + "1.935920346899e+01 1.29448 17.3205 0 8.71025 13 13 15 2 0.02 0.000498487\n", + "2.123795595728e+01 1.30902 17.3205 1.58519 8.71025 13 13 13 5 0.02 0.000287968\n", + "3.579099761269e+01 1.52414 17.3205 1.30642 8.71025 13 13 13 5 0.02 0.000220016\n", + "1.674063083432e+01 1.29457 17.3205 0 14.4504 13 13 15 2 0.02 0.000498487\n", + "1.779197348711e+01 1.3228 17.3205 1.71196 14.4504 13 13 13 8 0.02 0.000287968\n", + "1.548740826516e+01 1.52415 17.3205 1.45407 14.4504 13 13 13 5 0.02 0.000220016\n", + "1.772169325356e+01 1.81957 73.0434 1.46573 12.2572 13 13 13 5 0.02 4.43422e-05\n", + "1.367065500196e+01 1.66003 73.0434 1.79487 12.2572 13 13 13 8 0.02 7.67586e-05\n", + "2.021960493499e+01 1.82061 73.0434 1.39205 12.2572 13 13 13 5 0.02 3.38788e-05\n", + "9.012246630357e+00 1.81529 73.0434 0 36.5717 13 8 15 15 0.02 7.67586e-05\n", + "7.462779538274e+00 1.82255 73.0434 1.81499 36.5717 13 13 13 8 0.02 3.38788e-05\n", + "1.030499912298e+01 1.80592 73.0434 1.81066 36.5717 13 13 13 8 0.02 4.43422e-05\n", + "4.227002356107e+00 2.43719 73.0434 0 60.8862 14 14 15 1 0.02 7.67586e-05\n", + "7.396288708628e+00 1.8216 73.0434 1.8216 60.8862 13 8 13 8 0.02 3.38788e-05\n", + "7.394728392218e+00 1.80919 73.0434 1.79091 60.8862 13 13 13 8 0.02 4.43422e-05\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -1067,10 +991,11 @@ " \n", " # grid_options\n", " amt_cores=2, # grid_options\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -1168,14 +1093,14 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" diff --git a/docs/build/html/objects.inv b/docs/build/html/objects.inv index 8ac1e328102c8f00b236d77c3d126f5b16f1b475..b5c74453b9aa7d0c5e1ed94e55ab09313e9477ee 100644 GIT binary patch delta 5884 zcmV<Y76a+>D#$L7fPb>wHkRGjSFj^1x;IT(a#wd-+R3(LE6T2VErq)xykQ_oWF||T z#NkP)RsBZ&UVlkr-~bW;iHqTFUc3bEJ@;G?xBx*6=e$DgJ#Fs&t*)L8eO`3W(xL0? zGAZioHLtG8WvJ3Vud6O<?yt%^8wwmfk90!MZhcvtxLEwhD1ZLL8DQZV8v6Q*tK^3{ zFRe374No%Biv!bOn_M_aY1UJk``qR|ej=l3T{d}vlkSFEoFzqm4s5T*h&YETVyi}( zBoWs7r6tL8Ij41X$**B8wzwbKD&fV9Xj+oxY462omUn%dp9hAjZj5RXqo$})ecj@! z9=?74;`vmNmwy(i9^Ia4pv`w*zoIrHHor|8+~#$bh=Sql{<*D(27UYd`HOHieyuU_ zCi&3g3##gbIQid6ITU@~6nUEWOYwG3%c03G;S8RKyvUMINsrD24reAsMVdS$dDY`< zi;BR8@KYJ;>mC(J)7Iw<hpZOV*ig`LO(JF2qpI(c{(shDoHVHIlcxTR+X8(KNPwCR z3E!1@ntXWsb5f!V4Ky-;%&V@hNDKH=IJ?>KX~0!g-(S3Z88EV3@}fvG)T4kVNbLxV z-r>-}?}~=5%TX2H0!w-VGgaM|sK~$aQF72GbjAG?^;pgnD3VWMZI<ZEs+SCBEiW%g zdPC<n$A2vu3H(P`OC5>1^^2F^{nwM2dHG#fGd&5W1twwcyXOH7k?PkrHS4GHiqwp* zOY(WZ7|!m;{`xXtZ7A{zqc*```W7+oXm-F>RpR!F#Wt1WfI)W(QCRgh<kQYjo^cxv zzp3-C3;7BXevma;m}B=7n0m5W-L#mDRYTXZ7JprD=n+*<`&Qhc3WW@C9qDK5rVkhe z!n{nVXF_0;AHsac(AWQ)KjxP_WwrIku_mPj>1YT;D5+=Pv)muvRCIE$^$7JWBd_ly zelxc*QOImCe?Uz?v}EY$#B4@+mL!;V&`IKn76ts0_pW#(SM_dWgF|zF#O_aX4Mm>j zG=KZ+<R#5b{!aR+q{D5_`rOvlX)<~&4yI8pF#Gh@=OuP3!x_a_y;}i#sCT5W9x;h` z=X)=WudKi>MJ>I9TL2B@o$VvOcS(!Wq3!ZV?2I|i^tac9#_;Ou3GkL({?i$X&$o9q zc@m1D0T_=)5;|b_frY=IvME@%*x{re`hRBdfZ5aG2x$@>F3$v<1qAjr#Lu(2<OOYP z^kMrbgA08<5a_nJBORM_d!aK2lp?L@KCs3P*9+DS7mY8Rgv4iWSl!UL_ZV!>hJR(~ z#;**t&5$9c59E$?YOXjpRAr>5%~g)Ki=?kvTX99t%Z9`n=Zcb7U4v6UF)Qzq6n{0{ zP&gOe^dXl70cWfdeZ&d>Jk*n@<qXGWHE3};m;E?3a!(#nG2qV2GvLuZp<RbFzlJ=7 z5pU<~s0A$ThUUQ@8N77#T`aFIwJY>I)Swfr6?sl1F4G3*Wk{m~_tW3CxU31Zj~YL& z5C~Gj-Eig|zn2!!<FX-0&Yi)~WPfxZ=Y<m~t#eH(XhWW=bDiM}Z{{aKsy-qkeKM}e zaF@1u!=z{>YP;Uy*<af{Tg^?-1fyvQCiqY{1D`n)UzHXNLuJ)h|JAz<91&$%Leofy zB(Iv|r+o*!w7~qkoC5}atcyqN1%!+<s;je8_zN8h&>`B~#2wIhcuvcV_J1LcSS_wd zefRnV$KdA4*=?v4$KM`dw-MMKx|vfFGUV+^HFD)Vj-1^PwnK7H+{XCsvmQO3U(6BS z0cI26={y#T=Tj^PLeuGS)+MYeq8QaB3F9y?Yi?5K9*GQaaQabtN82&)U{~>)>dg>) z!ejEP%ME3aSBF)ezH_&*dVgzD&AQB0j!~Uxin`Z;t+Oo9o~3nBx5@cVLSBZyY#dj? z8{%d|S>FA@@y>4go!rR4EJs%|NDF3yt|pLP&HTaF?K$r~qSK#0zYkC<^r!c-pg%*D zKzAn{nv3`CP>mqT=N2{N{MX#x<ZPohr%+pxHf(h!bl6>kQvH?;DSy|9udJn7Os2us zg7&y5P@DAk25(4;IYtDB4qt|XSzbel8DJ#7#&%q1&Zo%nw#$<Zm?IN34$DpWK`zmk zyc|lt`iZT@OD-g$zyIa0Z#@~vD`sFSmmuIBU97=}$$kyA=z8{qRFlzGQq*Vc3GXW^ zJ3mkqDIq<1k$3XEpMM(j8+opSP$F%->$6t{I^!aWUqmV)3K4xjW<*Pd7V^Z?<1}8< z&CDn@L8iw=#4#$aH5u~VN>j@U#Sc8`RkWlX8|L{yqodMnkpDh5md7>F64jW^<loc= zHY)m65@?0#EOzM6V@qY;r9eYWWwt|q9h<3!w7XY8L!;7cihut;Ha33Lg&7-_W@G&K zv9Yd4EwsLKo!J!o`G;@xo7}b$V|PEBHaFtE^uD2!)wa=ey=~N-?8(P2RSy_G3q{`7 z8mc^GOK$2xN@26zHh5WV?D+ukSuTnl!J&#oVaie8Ye5`sRSs4xM~1zk`7AQ!{_0T0 zq%`J?;IlY%n}5GUm59!s50Ha$8DFp=mLSDo1AjQo(5>d*j%Icip=<ICOq>Ag<dJ^Q zy(!U?pDq4gP<$23dKY<!l2}`?RrKZWc9(ewkGD4LRlR!MJb~8__Fg}P@p`k-KbYqm zJ8tSeOTgsxfl#GlV%tBYx6)%%^+C#pAww1X`Nhs`=zlIZ<(Um(9Ns-9!W)vWB3d6W z5u!xa7Hk!L`MaER5yIC6-A2iqkMy98Ans9MpuA6~=JP#5IX4@y)br)+e9TA)M`v&g z9p4V}Q%*v9$t~C_diPg8ZY8MmvN<m(-ik$kB218C(VO#v;<H$!Lu*16h-Ao7-&Y|> zXX%6}0DsAdgRW1<m!o|`dA(S$RSe+o%kM(_ODxzb`t(;k>?oASq78dhZ(i@8ycDDm z_Dy<2@>WFqCzpmOqJzUyy&?H3qL0fVt09U*IK$OS%bT0*xUdi&a%8B2FTXVBl!b6q zW6Bx9S5YXBPzzBIN<)tN-U?y8rD*Rw;}AsyIDbw#2x`b;q(?G8Rhdy+?hw98V{=?! zh(g$yu-5eEGC#R6h^rhLtl`VG>CnUwzD?M06@T6Z{4izn<;nM_CHcU}ke)79T$H{0 z{uJXKtuYT6-U>uKU^7S|hz2b6d^x*&&SwbccMW>N@l`nEaik%NVT1;2cynz!2{njw z6MwjcjxPtFYF&ln8VcxoiJeu0nss}|PQ#%ORtiqX{#A94&vpG#u?|rdVM`F-@Z@Mt z)_|SH)Ob!cfmdiL4DPI++$@-sJwL9s>&+35!fCv6w_{K_4-WT*tH6AikDj&XJwup@ zf%z#9jdh}{M6}YfawZ$k=XLgBI_MW7?0>>|ItJJm@d?jD$I1;{xfcB9yljZD3*-4T zZC}i1KpQ2PC(84g?fp=~!BwC>Oy`i>6JO3UH<YuaC>%EJfvkWA)^KouA8zf5KL>*< zK-o_xhPzbl3Byp%lA@OyqCx{}I5^;1Llj_81t9y?Ve1aWS2zG!I9-1BsT);}VSgwG zrKmV4-i56K4z2?9K{}Y;!2t;iC~rlb9f9vmnxPm=0*P)9*mq#Ng@TF0c&`rfx97Zq zF&Bk#RbCWe&shlvSAqI)bTNU8Lr2(-`Y>0wS0vawwnYL-14(NxVsId@LA26>IkUR{ z!QO)vjJYVB>wK!H8`l}eTolfgoqr4J#*;yqiP`aE*J8MHWH9EUmR$L@8y?tlAc!!W zvF2(IH})D(TSd56>{<~w9~gw07>wV+btU$!4}e{iVIEFbrr5hOAs9&k$%z-SI4~4p z%te7*my2E;m@Xiuf-sh=OJwYMu3*eXVO+PD)Y#MAB7vlVq=l<+90&_2#($DPqN<B_ z92l$M;3_a5Ru}u&b6>%ji^90-E)KG%twXfZf;ywWuE@n9J*u@P%(4B;lI&gE$92&4 z<DT;@zyYv}GStK6$|x6i78GMiDAAqkP+XYrz}l<AeA`@zW$(=f2qFw)JYTwH&vk|{ z6NB+vUFK!aaRp;83gf!IEPu?N>>39k3!@9aj?CUAxGm3k+oIW7V5eEGXTCyj0gzXt zv73LSMQrnZK>QjQe(Bm)<)poWXu1DM1A8*L?ae?2Mn-XAn>{@Rn3WdL1%5}I18ojq zED5AHUO(r+Z$vN`wPHBkZRbpM0s?D5X>YF4b0NNgvd{sNSM2U{aeqK{lcS{`(2@1^ zgAOjNfxsF-+RB>_9oQ@JY!$)2tgl#fa$^l;p<_p0zR}U$3mMZz+0ifkJCvJmhc8hO z06QO5cU!u9s6us92YM%czk<1;`%<NlgA>!<+v!GF3+t#4bWnMHsDo!pJX=MeFY~>n z4*X{fh%k`n?!~AM+<$j*T>%6icV70`ZQB|bj?^?Sd-64)$`?lUZK2Um6nV^wP?bgE zEAftjlgF!K4Y~R>=?^ME8Oh66{1=LLeT$*4AGh_F?D}_KZ_5LQpW-;U0@#0<92oQk zv{yO@QBS_r+O!nFz_3ubWF5v^L6pT@VHS-AcD4tuHnKy!!hdm=$K$9b?%0~wHm(ht z&4$Ji6nP(y{x!<-XnZ4&Mgdc%ONSm)!I*k!#d8<Pr7THnek5ZmJ5n3n2magG^l&cn z)Xwr+^@06d?5;2Kma3+F*Y`SU9$H8^dktz0abVCKNX?903od)clbJ_<!$n$`IO^;9 zcEOmN`L{00>VI@7an-X*^DhG230-<p|8sgsOQD(|Uo5CZU(=*WOcJr#LK&ve4ys}j zuoa@;)1*jD60uhvX<^q=KZ?IZFkC(6ZC%m4czVy!b5%>fSyH1pb!CLF)!)IL1jg<C zEA0#V6z5$x?C1+3Z(sk<H}BZLuSAfXZr8_MOagt}?|(a~5Pip!SU1s2?unHkrfc-$ zt{&PH?^w_%yc25}&4_r$E3LW59K}uEn3<Y{S7u0J^ziOsWrDY!cx<_sx{arMaJ7bZ zR32E?*q|elH8)eyW{W=!d5dW+(m$J((0k#Bh%|KQ%Fm3@1Bo)f(f`?r5-XU`Jgmfh z9WS>4bAK<p*sKu(AV5Kk7o{TJPZ`1$$z#Ng_%?b$b3Jg3<*oiAm`YfMKb^~wpeCP# zIV$r0{w#0q)#g6O9ckvlZ}js_)ZcLQ`r%!)5{T-}A%VxX=i@}!!+!;$a(c7Yoz5ZQ zKMibO`GizVCp+nWlDX+mPa8((r$e|=A`&EcNPk%x-y!L77A+o{e<zO9|7cLWv>4O> zyS{EQjP?fuz)>b5G7*zuVRw{?n2Z5+j!vphOeEr!L|k9iqY;=7zs<;`QXU~&*5LL1 zfxAs-BPz5To)e8ZQCpKi7hTNxIqz>E%O`pvBTD<YKK~tW7sT!nIsLF!9Dhdq=aJQE zRDVEAb<BzR>bDL+;mr=plt&-MR7_*u5xEJ99^M_(kI4hSt(^`UNY!AQS*rRG0hs<` z3ONc!R4|$a`RIhyv{~@T2Nt{l1bIiv{vJb9Pk7c`>{AVlX$>@Lf@&5(Xy2_t>D%WU zuHts6D*7WM!;-Ww?mQ%qLCDp`0}C|1D1SYrdeNvCO?td57~_(i!?d8OVc~@x93OrI zBC8#wPmsDIEOnA14BJtgTrlc~mW*lkBI-tTJm`$1MN=B@kxYZR%Jlr&w{+ig-=Q4~ zD2ScD-^H2UB$pw;%yTsWP*S9;9I1a~*h+?i^QmJ1azAPimh?zWKO!`Z-`MhtSbu#N z_AZ|{YJh1l$C9Jva_S>CBr%>6`9Q{In4u;L#r9r7rvWQ>Q><X<Ok!ueyroR*D?5OL zHt3^H#B^4bn(55-I$Cs0os_@9?6Ut!RGS9c{5#34N2d`U^K3vx(%rirm-|6SA<hEN z`!R4Y`O%oa-*f5ApQavU5r{_t^M7txL-zC@gzeomzL;+`$!0sGu|LqE4-%p@=8ry% zs~4FJn@*92`gY_^J63b@GNMd=uM;&S&z?1@XUXRlHPTjcAa4n5O_|jcAzNTu3}s%` z9lIl8d>Z^~ets|j*i~e$@^{?UF&{kRqCjo5sLW5E)az){0<k)wETgT6eSiMYOv;*b zJ-t?<@l^g5MVPdO&}2(!r*~m_sRMxG8wqJjVdFZQ0;4ufTuehs+JUkS;*$~8ku?Cq z9}MxQxr}M3O1tGrj=44+Tw~+h(16C@=3b4!4|24ar)C)Whn-Mi;K$do5yfL8iWi+Z z#FDNgp46=U`W<S>bMxlW5q}(VMzz&J%L5sprl`ZOj5q>#oltxxPZzi2m*EWBq6N06 z*GjC{(K^+nU9TxR#>EvyZ&7hY(IqB|^xPxjn$|pfjbm1QVw1*a%Uv>N(g2^Jiu>;s zM7N)|Pf$AMp+``86skX1`S2Byw*;YHi2LxDDWSZ|`<%R1usKr4dVl)+>t8>_zt~x% zy3wM$I$?jAkQ#OQM6II63aeoEItM{)^-j2?AG|Sb?SLZb#=2$Xlqi@+%B^`=WR%Qa zhN6hYFAG9r;cIV9%i*m75|xRt@RdQ_jmc&9$kLq8b=%+WMsKlOhJVqiFB#hRREf(p zZy;1U^9h43v-f6T?tc~CE#z-$hYRsq;=quuW9$&Zo1*Ub)|hSbS%g}r&1<=2DCO$a zjaXV2b(@^;30qllXxsu4tYPa)Hk9Sviw7LZRM3_$-{?5^p0_s1a&&D`>BR><x{I<W zUumDc?Gyd@IU?ICdh)Ms&v_rhJq~QCXYCyQ>AQN;pFh6`Re#F0ijy}!E1-Y}6L<2! zV-;KAK+;b1#~EgC{6{>PxYC22CDogr_mI3fl%`K_G0I9z4}be8j}633z8PX?E$9a6 zaDny~+;o}t*3QvlZOM+|lI^XXoi(G9iQVPfTVR7l+>!y%Qf|qhazVFjLtfUsMba(q zmaue7ytja6i+`~tc$+2JyQY;3v-iy&EYIGWGhL)D8MR!hy|u4juq|2KS+>1J)h^za zK($M_>DNFWJg1L>iohhxu=pgWFM&=8tBn3C(K*S8hy^TIL+jE`pP(ooBX?ksJ5Ql& zP)g5r-gzOFMcAX2lJ_x{Pe7Jrw>+EJ2jKx^b@X>iTz@VJ6aFwjePQ#t{G`7(svQjL zZ2sWHBt6b9!4<@TK?snF+0fz3P%zgO4z6;Ue`1OjL|J`SLMbZJgfx}B&c>TUaC2bV z64Xk|+9jgPK{%ivm$sl*S~f0~=u2J>C40R}TH41aq?=9JqP{qLron#y%U|C{F3MJZ z<`sjRYJY(@A7xxa|I~^uzIF7PcYe~3cmFonFdr4lHh#9~dUke*ffz|yQLNJ&85GuM z>`run0?1mCrr$c<`7#tUF&matFG=g7$UEtM)q?H@4k)j1V5gT}^{5BLO<`2Mw0y=a zH%H#ysWC;ixHEITQhB{SVly@y0d+DQRf{mP-G8}ve#GCob^hQEdFcXo5!U$fcqOT$ zOWd!xQhXSiQn}JQ_R(hk$~+?Povf=rjYLqkI%P?F;KL3&=u8p$c!m+w^fZX2I7daJ z!xsMUAODngD%0H^ijQ`DJIDh1E1z%RPifqCEZRTX)~w&MDWZ7YZLHbWq_pQ{i>78n zf_2iMpB+p)3$>M2{cK?{TGy$xA7I(G!CE3?Djt?|Dn9co&08)QQhYlYk<GvH3vK(L z(T{VDtF|vp@`>glpAj@OR1*?--mk-`O>dhy1D3`$Kk)nqx+zvYu`-&5PD{yi788)+ S6p1tn8uiU)ApReA*{LYTs)daJ delta 5411 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 N(l>j{{(pAuqqsb|i&X#s diff --git a/docs/build/html/plot_functions.html b/docs/build/html/plot_functions.html index 119716b2c..2c3165a51 100644 --- a/docs/build/html/plot_functions.html +++ b/docs/build/html/plot_functions.html @@ -473,9 +473,9 @@ This is not included in all the plotting routines.</p></li> provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/py-modindex.html b/docs/build/html/py-modindex.html index cafb1a786..ce13ca923 100644 --- a/docs/build/html/py-modindex.html +++ b/docs/build/html/py-modindex.html @@ -255,9 +255,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/readme_link.html b/docs/build/html/readme_link.html index 27d15ae84..1f71ca1b4 100644 --- a/docs/build/html/readme_link.html +++ b/docs/build/html/readme_link.html @@ -252,12 +252,13 @@ <p>For this it is best to set up a virtual environment. Activate the virtualenvironment and enter the cloned version of the repo.</p> <p>Then run:</p> <div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> +<span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">uninstall</span> <span class="n">binarycpython</span> <span class="o">&&</span> <span class="n">rm</span> <span class="n">dist</span><span class="o">/*</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> </pre></div> </div> -<p>You can find the version of this package in setup.py.</p> +<p>This will clean the build directory, remove binarycpython from the venv, remove the dist packages, and then rebuilding and reinstalling the package. You can find the version of this package in setup.py.</p> <p>This will install this package into the virtual environment. Making changes to the sourcecode can be “installed†into the virtual env with the same command.</p> <p>If this is not the first time you install the package, but rather rebuild it because you make changes in either binary_c or binarycpython, you should ignore the currently installed version, and also skip installing the dependencies again, by executing the following command:</p> -<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">ignore</span><span class="o">-</span><span class="n">installed</span> <span class="o">--</span><span class="n">no</span><span class="o">-</span><span class="n">dependencies</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> +<div class="highlight-default notranslate"><div class="highlight"><pre><span></span><span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">clean</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">uninstall</span> <span class="n">binarycpython</span> <span class="o">&&</span> <span class="n">rm</span> <span class="n">dist</span><span class="o">/*</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">build</span> <span class="o">--</span><span class="n">force</span> <span class="o">&&</span> <span class="n">python</span> <span class="n">setup</span><span class="o">.</span><span class="n">py</span> <span class="n">sdist</span> <span class="o">&&</span> <span class="n">pip</span> <span class="n">install</span> <span class="o">--</span><span class="n">ignore</span><span class="o">-</span><span class="n">installed</span> <span class="o">--</span><span class="n">no</span><span class="o">-</span><span class="n">dependencies</span> <span class="o">-</span><span class="n">v</span> <span class="n">dist</span><span class="o">/</span><span class="n">binarycpython</span><span class="o">-<</span><span class="n">version</span> <span class="n">of</span> <span class="n">this</span> <span class="n">package</span><span class="o">>.</span><span class="n">tar</span><span class="o">.</span><span class="n">gz</span> </pre></div> </div> <div class="section" id="after-installation"> @@ -334,9 +335,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/run_system_wrapper.html b/docs/build/html/run_system_wrapper.html index 98017ad46..d37ea5272 100644 --- a/docs/build/html/run_system_wrapper.html +++ b/docs/build/html/run_system_wrapper.html @@ -283,9 +283,9 @@ and returns what the parse_function returns</p> provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/search.html b/docs/build/html/search.html index c131aef39..d01c4ead8 100644 --- a/docs/build/html/search.html +++ b/docs/build/html/search.html @@ -194,9 +194,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/searchindex.js b/docs/build/html/searchindex.js index 4d686578b..b8f060aca 100644 --- a/docs/build/html/searchindex.js +++ b/docs/build/html/searchindex.js @@ -1 +1 @@ -Search.setIndex({docnames:["binary_c_parameters","custom_logging_functions","distribution_functions","example_notebooks","functions","grid","grid_options_defaults","grid_options_descriptions","hpc_functions","index","modules","notebook_api_functionality","notebook_custom_logging","notebook_extra_features","notebook_individual_systems","notebook_population","plot_functions","readme_link","run_system_wrapper","spacing_functions","stellar_types","useful_funcs"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,nbsphinx:3,sphinx:56},filenames:["binary_c_parameters.rst","custom_logging_functions.rst","distribution_functions.rst","example_notebooks.rst","functions.rst","grid.rst","grid_options_defaults.rst","grid_options_descriptions.rst","hpc_functions.rst","index.rst","modules.rst","notebook_api_functionality.ipynb","notebook_custom_logging.ipynb","notebook_extra_features.ipynb","notebook_individual_systems.ipynb","notebook_population.ipynb","plot_functions.rst","readme_link.rst","run_system_wrapper.rst","spacing_functions.rst","stellar_types.rst","useful_funcs.rst"],objects:{"binarycpython.utils":{custom_logging_functions:[1,0,0,"-"],distribution_functions:[2,0,0,"-"],functions:[4,0,0,"-"],grid:[5,0,0,"-"],grid_options_defaults:[6,0,0,"-"],hpc_functions:[8,0,0,"-"],plot_functions:[16,0,0,"-"],run_system_wrapper:[18,0,0,"-"],spacing_functions:[19,0,0,"-"],stellar_types:[20,0,0,"-"],useful_funcs:[21,0,0,"-"]},"binarycpython.utils.custom_logging_functions":{autogen_C_logging_code:[1,1,1,""],binary_c_log_code:[1,1,1,""],binary_c_write_log_code:[1,1,1,""],compile_shared_lib:[1,1,1,""],create_and_load_logging_function:[1,1,1,""],from_binary_c_config:[1,1,1,""],return_compilation_dict:[1,1,1,""]},"binarycpython.utils.distribution_functions":{"const":[2,1,1,""],Arenou2010_binary_fraction:[2,1,1,""],Izzard2012_period_distribution:[2,1,1,""],Kroupa2001:[2,1,1,""],Moe_di_Stefano_2017_multiplicity_fractions:[2,1,1,""],Moe_di_Stefano_2017_pdf:[2,1,1,""],build_q_table:[2,1,1,""],calc_P_integral:[2,1,1,""],calc_e_integral:[2,1,1,""],calc_total_probdens:[2,1,1,""],calculate_constants_three_part_powerlaw:[2,1,1,""],cosmic_SFH_madau_dickinson2014:[2,1,1,""],duquennoy1991:[2,1,1,""],fill_data:[2,1,1,""],flat:[2,1,1,""],flatsections:[2,1,1,""],gaussian:[2,1,1,""],gaussian_func:[2,1,1,""],gaussian_normalizing_const:[2,1,1,""],get_integration_constant_q:[2,1,1,""],get_max_multiplicity:[2,1,1,""],imf_chabrier2003:[2,1,1,""],imf_scalo1986:[2,1,1,""],imf_scalo1998:[2,1,1,""],imf_tinsley1980:[2,1,1,""],interpolate_in_mass_izzard2012:[2,1,1,""],ktg93:[2,1,1,""],linear_extrapolation_q:[2,1,1,""],merge_multiplicities:[2,1,1,""],normalize_dict:[2,1,1,""],number:[2,1,1,""],poisson:[2,1,1,""],powerlaw:[2,1,1,""],powerlaw_constant:[2,1,1,""],powerlaw_extrapolation_q:[2,1,1,""],prepare_dict:[2,1,1,""],raghavan2010_binary_fraction:[2,1,1,""],sana12:[2,1,1,""],set_opts:[2,1,1,""],three_part_powerlaw:[2,1,1,""]},"binarycpython.utils.functions":{BinaryCEncoder:[4,2,1,""],Capturing:[4,2,1,""],binarycDecoder:[4,2,1,""],binaryc_json_serializer:[4,1,1,""],call_binary_c_config:[4,1,1,""],catchtime:[4,2,1,""],convert_bytes:[4,1,1,""],count_keys_recursive:[4,1,1,""],create_arg_string:[4,1,1,""],create_hdf5:[4,1,1,""],custom_sort_dict:[4,1,1,""],example_parse_output:[4,1,1,""],extract_ensemble_json_from_string:[4,1,1,""],filter_arg_dict:[4,1,1,""],format_ensemble_results:[4,1,1,""],get_arg_keys:[4,1,1,""],get_defaults:[4,1,1,""],get_help:[4,1,1,""],get_help_all:[4,1,1,""],get_help_super:[4,1,1,""],get_moe_di_stefano_dataset:[4,1,1,""],get_size:[4,1,1,""],handle_ensemble_string_to_json:[4,1,1,""],imports:[4,1,1,""],inspect_dict:[4,1,1,""],is_capsule:[4,1,1,""],load_logfile:[4,1,1,""],make_build_text:[4,1,1,""],merge_dicts:[4,1,1,""],multiply_values_dict:[4,1,1,""],output_lines:[4,1,1,""],parse_binary_c_version_info:[4,1,1,""],recursive_change_key_to_float:[4,1,1,""],recursive_change_key_to_string:[4,1,1,""],remove_file:[4,1,1,""],return_binary_c_version_info:[4,1,1,""],subtract_dicts:[4,1,1,""],temp_dir:[4,1,1,""],update_dicts:[4,1,1,""],verbose_print:[4,1,1,""],write_binary_c_parameter_descriptions_to_rst_file:[4,1,1,""]},"binarycpython.utils.functions.BinaryCEncoder":{"default":[4,3,1,""]},"binarycpython.utils.functions.Capturing":{__enter__:[4,3,1,""],__exit__:[4,3,1,""]},"binarycpython.utils.functions.binarycDecoder":{decode:[4,3,1,""]},"binarycpython.utils.functions.catchtime":{__enter__:[4,3,1,""],__exit__:[4,3,1,""]},"binarycpython.utils.grid":{Population:[5,2,1,""]},"binarycpython.utils.grid.Population":{Moe_di_Stefano_2017:[5,3,1,""],add_grid_variable:[5,3,1,""],evolve:[5,3,1,""],evolve_single:[5,3,1,""],export_all_info:[5,3,1,""],parse_cmdline:[5,3,1,""],return_all_info:[5,3,1,""],return_binary_c_defaults:[5,3,1,""],return_binary_c_version_info:[5,3,1,""],return_population_settings:[5,3,1,""],set:[5,3,1,""],set_moe_di_stefano_settings:[5,3,1,""],write_binary_c_calls_to_file:[5,3,1,""]},"binarycpython.utils.grid_options_defaults":{grid_options_description_checker:[6,1,1,""],grid_options_help:[6,1,1,""],print_option_descriptions:[6,1,1,""],write_grid_options_to_rst_file:[6,1,1,""]},"binarycpython.utils.plot_functions":{color_by_index:[16,1,1,""],dummy:[16,1,1,""],parse_function_hr_diagram:[16,1,1,""],parse_function_masses:[16,1,1,""],parse_function_orbit:[16,1,1,""],plot_HR_diagram:[16,1,1,""],plot_masses:[16,1,1,""],plot_orbit:[16,1,1,""],plot_system:[16,1,1,""]},"binarycpython.utils.run_system_wrapper":{run_system:[18,1,1,""]},"binarycpython.utils.spacing_functions":{"const":[19,1,1,""]},"binarycpython.utils.useful_funcs":{calc_period_from_sep:[21,1,1,""],calc_sep_from_period:[21,1,1,""],maximum_mass_ratio_for_RLOF:[21,1,1,""],minimum_period_for_RLOF:[21,1,1,""],minimum_separation_for_RLOF:[21,1,1,""],ragb:[21,1,1,""],roche_lobe:[21,1,1,""],rzams:[21,1,1,""],zams_collision:[21,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"000":14,"0000":14,"000000000000e":14,"0001":[11,21],"000116989":15,"000121486":15,"000150087":15,"000154349":15,"000157195":15,"000172877":15,"000211219":15,"00028381":15,"000381347":15,"000512406":15,"000610573":15,"000627913":15,"000688507":15,"0007":2,"000925128":15,"001":[0,11],"00124307":15,"00167028":15,"00224431":15,"00498":15,"005444573822104362":15,"00632092":11,"006827156705e":15,"007109286263e":15,"0073157281034221516":15,"009829948023831718":15,"013208238029791246":15,"01344":15,"0141":11,"0144107":15,"015033359333e":15,"0154":15,"017435498578e":15,"027099358410e":15,"041660877905e":12,"041662558619e":12,"041662560111e":12,"041662564579e":12,"04459e":15,"047074050271e":15,"05150046619238191":15,"05150046619238192":15,"05193":15,"054":2,"055645404546e":15,"0587":15,"069363482023e":15,"069567332611e":15,"069626478211e":15,"069627290216e":15,"07011e":15,"074084349384e":15,"075844624794e":15,"07671":15,"0820":[0,11],"08519":15,"08624781646269201":15,"0862478164626921":15,"087296558990e":15,"08861e":15,"08873e":15,"08msun":[0,11],"0902":[0,11],"09216":15,"093caf0e9":0,"0x7f163859d0c0":11,"0x7f9265091598":[],"0x7fb4d41ebbf8":14,"0x7ff3bdf79620":15,"100":[0,2,11],"1000":[0,7],"10328":15,"10417":15,"10433":15,"10446":15,"104706358826e":15,"1048014407228":15,"1085":14,"108751340926e":15,"11003":14,"112":15,"11282":15,"115":2,"11582":14,"117519147635e":15,"119":15,"120000":0,"12303":15,"12325":14,"12457":14,"12460":14,"12461":14,"12462":[],"125":[0,11,15],"12500":0,"126828648362e":15,"12e":[1,12,14,15],"1300":[],"1301":14,"1302":14,"13461":14,"13462":[],"1357":12,"13876":15,"13e3":[0,11],"1403":2,"14057":12,"14059":12,"14461":14,"14462":[],"146421815741e":15,"150":15,"15000":[0,11,12,14,15],"1506841305680684":15,"15343":15,"1564":15,"15854":15,"15875":15,"15msun":2,"1612":[],"1613":[],"1614":[],"1615":[],"1616":[],"1617":14,"1618":14,"1619":14,"1620":14,"1621":14,"1628444120":15,"1628444121":15,"170425790780e":15,"170770422321e":15,"170770599495e":15,"170775828562e":15,"17089":14,"171086983243e":15,"171108213270e":15,"172196856333e":15,"17639":15,"18838":15,"18914e":15,"190":0,"19314":12,"194842917007e":15,"1951":[0,11],"1972":[0,11],"1975":[0,11],"197x":[0,11],"1980":2,"1983":21,"1986":[0,2,11],"1989":[0,11],"1991":2,"1992":0,"1993":[0,11],"1996":21,"1998":[0,2,11],"1999":[0,11],"1ckzg0p9":[9,17],"1e2":[0,11],"1e9":[0,11],"200":[0,11],"2000":[0,11],"2001":2,"2002":[0,11],"2003":[0,2,11],"2004":[0,11],"2005":[0,11],"2009":[0,11],"2010":[0,2,7,11],"2012":[0,2,11],"2013":[0,11],"2014":[0,2,11],"2015":[0,11],"2016":[0,11],"2017":[0,7,11,15],"2018":[0,1,11],"2019":[0,11],"2020":[0,11],"2021":0,"20210807":[],"20210825":0,"20484":15,"206771867883e":15,"20787":15,"21331":15,"21473":15,"21673":15,"2174":15,"21805":15,"21878":15,"218786094847e":15,"21892":15,"21893":15,"222715508467e":15,"22723621650191106":15,"22759":15,"230407246199e":15,"232906623449e":15,"234709":15,"23604":15,"2383":[],"2424":14,"24954e":15,"25294":15,"2535":15,"255":0,"257":21,"25msun":[0,11],"27442":15,"27563":15,"27565":15,"27572":15,"27804":15,"278384712062e":15,"281":21,"28672":15,"29402e":15,"29444":15,"294870923827e":15,"29678":15,"2969346":2,"29746":15,"2983275843337705":15,"29864":15,"29942":15,"29977":15,"29994":15,"2a7732d03e594ef4b5dfe9051b41d9c0":15,"2msun":[0,11],"3000":[0,11],"30145":15,"30149":15,"30197":15,"3032":15,"30337":15,"30504":15,"30e4":[0,11],"31004":15,"315554923168e":15,"3177":15,"32047":15,"3205":15,"32641e":15,"33062":15,"33079":15,"33524":12,"337250536639e":15,"34071e":15,"34281":15,"34903":15,"34922":15,"34937":15,"350021848285e":15,"35209":15,"3552":15,"364277535630e":15,"3678":15,"3680f3882c0a449c944462abffea2447":15,"36979":15,"36m":11,"38004":15,"38063":12,"3836":15,"38403":15,"38887e":15,"3933":15,"3msun":2,"4000":0,"4046":15,"40513":15,"40745":15,"40749":15,"40935":15,"41074":15,"41264":15,"41295e":15,"42148e":15,"42212":15,"42238":15,"42375":15,"42msun":[0,11],"43925":15,"439623364590e":15,"4424":15,"446":12,"449960890183e":15,"44msun":[0,11],"4500":11,"45000000080":15,"4530":[12,14],"458869865939e":15,"459153942631e":15,"45msun":[0,11],"4603":15,"47276":15,"47961":15,"47976e":15,"4838":14,"48488":15,"4e3":[0,11],"500":[0,11],"5102526289471614":15,"513216011269e":15,"517749":14,"518":14,"522806":[],"523":[],"525":15,"527722847382e":15,"52963":15,"53113":15,"53174":15,"53175":15,"53176":15,"53177":15,"53183":15,"53184":15,"5357":15,"53631":15,"53922":15,"546683":14,"556479830908e":15,"55924":15,"561265707015991":15,"56776":15,"5689":15,"571858031651e":15,"575":15,"577754":[],"59052":15,"59499":15,"5msun":[0,11],"6000":0,"600000":0,"60808":15,"6101":[],"61349":12,"6162":0,"6246354579925537":15,"62486":15,"625":0,"62517":15,"635":0,"64419":15,"65097":15,"653200958306e":15,"67365":[],"687368550125e":15,"68933e":15,"693213405973e":15,"6944":0,"6e1":2,"6e5":[0,11],"6msun":[0,11],"70319":15,"70668e":15,"71025":15,"71288":15,"716":14,"7197":15,"721374713429e":15,"723547465714e":15,"723570798020e":15,"72498e":[12,15],"72638":15,"726405299909e":15,"730":[12,15],"73221":15,"733614170983e":15,"733794947644e":15,"733865371895e":15,"7358":[11,12],"73856":15,"74037":12,"7431":15,"750574783854e":15,"753837732894e":15,"7619":0,"763":2,"764340254985e":15,"765535914728e":15,"765996194699e":15,"76647":15,"766606588165e":15,"768305081494e":15,"773581245005e":12,"774":[],"7797017097473145":15,"78096":15,"78125":0,"783":14,"78384":15,"79411e":15,"795":2,"797342083485e":15,"802132608769e":15,"80457":15,"806014211040e":15,"806123543037e":15,"807147339697e":15,"80msol":2,"81391":15,"8162e":15,"817":14,"8178":15,"81906":15,"82242e":15,"84162":15,"853070305680e":15,"85486":15,"862081089332e":15,"8628":15,"862942347290e":15,"863377990313e":15,"867655467480e":15,"878236827680e":12,"881529045940e":15,"88566":15,"8955":[],"917420996633e":15,"92267":12,"922967341481e":15,"931266944719e":15,"93135e":15,"933751523833e":15,"94027":15,"941017702765e":15,"9458":14,"9514":[],"9545065608702976":15,"9713":15,"97286e":15,"974759306305e":15,"97823":15,"9791":15,"980988739731e":15,"9863e":15,"990017992944e":15,"99198":12,"99255":15,"99283":15,"9947":14,"99471":15,"9983":14,"boolean":[0,4,5,7,11,16,21],"break":[0,11],"case":[0,4,7,11,15],"catch":[4,7,14,15],"char":7,"class":[4,5],"const":[2,5,15,19],"default":[0,1,2,4,5,6,7,11,12,13,15,18],"export":[4,5,15],"float":[0,2,4,11,13,14,19,21],"function":[0,1,2,3,5,6,7,8,9,10,12,16,17,18,19,21],"import":[4,5,11,12,13,14,15],"int":[0,1,2,4,5,6,7,11,15,19,21],"krtickov\u00e1":0,"kub\u00e1t":0,"long":[0,4,5,7,11,15,20],"new":[0,2,4,5,11,14,15],"null":[0,4,11,12,13],"paczy\u0144ski":[0,11],"public":[6,9,15],"return":[1,2,4,5,6,7,11,13,14,15,16,18,19,21],"short":[0,11,20],"super":[0,11],"switch":[0,11],"throw":[9,17],"true":[0,4,5,6,7,11,13,15,16],"try":[0,9,11,14,15,17],"void":12,"while":[0,11],Added:15,Adding:[3,14],And:[6,9,17,21],But:14,Doing:15,For:[0,4,9,11,12,14,16,17],Gas:[0,11],Its:7,NOT:[0,11,18],Not:7,One:[0,11],Pms:16,That:[0,11],The:[0,1,2,3,4,5,7,9,11,12,13,14,15,16,17,18],Then:[4,9,17],There:[2,5,6,7,11,12,13,14,15,16],These:[4,7,11,15,16],Use:[0,5,11,15],Used:[0,7,11,16],Useful:[0,5,6,11,15],Uses:[0,11,19],Using:[3,9],Was:[0,11],Will:[0,4,5,11,15,18],With:6,__arg_begin:11,__attribute__:12,__enter__:4,__exit__:4,_actually_evolve_system:7,_binary_c_bind:[4,11,12,14,21],_binary_c_config_execut:7,_binary_c_dir:7,_binary_c_execut:7,_binary_c_shared_librari:7,_calculate_multiplicity_fract:15,_commandline_input:7,_count:7,_custom_logging_shared_library_fil:7,_end_time_evolut:7,_errors_exceed:7,_errors_found:7,_evolution_type_opt:7,_failed_count:7,_failed_prob:7,_failed_systems_error_cod:7,_generate_grid_cod:7,_grid_vari:7,_loaded_ms_data:7,_main_pid:7,_population_id:7,_probtot:7,_process_run_population_grid:7,_repeat:7,_set:5,_set_ms_grid:7,_start_time_evolut:7,_store_memaddr:7,_system_gener:7,_total_mass_run:7,_total_probability_weighted_mass_run:7,_total_starcount:7,_zero_prob_stars_skip:7,a173:0,abat:[0,11],abbrevi:20,abl:11,about:[3,4,5,6,15,21],abov:[0,2,4,5,11,12,14,15],abridg:[11,12],absolut:[0,11],abund:[0,11],acceler:[0,11],accept:[4,11,15],access:[2,7,12,14,15],accord:[0,2,11],accordingli:[14,15],account:[0,7,11],accret:[0,11],accretion_limit_dynamical_multipli:[0,11],accretion_limit_eddington_lmms_multipli:[0,11],accretion_limit_eddington_steady_multipli:[0,11],accretion_limit_eddington_wd_to_remnant_multipli:[0,11],accretion_limit_thermal_multipli:[0,11],accretor:[0,11,21],act:[0,7,11,15],activ:[0,9,11,17],actual:[0,4,5,7,9,11,12,14,15,16,17],adam:[0,11],adapt:[0,11],add:[0,2,4,5,7,12,14,15,16,19,21],add_grid_vari:[5,15],added:[4,14],adding:[14,15],address:[1,7,11,12,21],admittedli:16,adress:[11,12,21],advis:12,affect:[0,11],after:[0,5,7,11,12,15],ag89:[0,11],again:[4,7,9,13,14,17],against:16,agb:[0,11],agb_3dup_algorithm:[0,11],agb_core_algorithm:[0,11],agb_core_algorithm_default:0,agb_core_algorithm_hurlei:0,agb_core_algorithm_karaka:0,agb_luminosity_algorithm:[0,11],agb_luminosity_algorithm_default:0,agb_luminosity_algorithm_hurlei:0,agb_luminosity_algorithm_karaka:0,agb_radius_algorithm:[0,11],agb_radius_algorithm_default:0,agb_radius_algorithm_hurlei:0,agb_radius_algorithm_karaka:0,agb_third_dredge_up_algorithm_default:0,agb_third_dredge_up_algorithm_hurlei:0,agb_third_dredge_up_algorithm_karaka:0,agb_third_dredge_up_algorithm_stancliff:0,age:[0,11],aging:[0,11],albedo:[0,11],algorithm:[9,11],algothim:[0,11],all:[0,1,2,4,5,6,7,9,10,11,13,14,15,16,17,18],all_info:5,alloc:11,allow:[0,2,4,7,11,12],allow_nan:4,along:[0,6,7],alpha:[0,11],alpha_c:[0,11],alphacb:[0,11],alreadi:[5,15],also:[0,3,4,5,6,9,11,12,15,17,21],altern:[0,7,11],alwai:[0,2,7,11],amanda:[0,11],amax:2,amin:2,amount:[0,4,5,6,7,11,15,19],amp:11,amt_cor:[7,15],analys:18,analyt:[5,15],analyz:14,andrew:[9,17],andronov:[0,11],angelou_lithium_cheb_decay_tim:[0,11],angelou_lithium_cheb_massfrac:[0,11],angelou_lithium_cheb_tim:[0,11],angelou_lithium_decay_funct:[0,11],angelou_lithium_decay_tim:[0,11],angelou_lithium_eagb_decay_tim:[0,11],angelou_lithium_eagb_massfrac:[0,11],angelou_lithium_eagb_tim:[0,11],angelou_lithium_gb_decay_tim:[0,11],angelou_lithium_gb_massfrac:[0,11],angelou_lithium_gb_tim:[0,11],angelou_lithium_hg_decay_tim:[0,11],angelou_lithium_hg_massfrac:[0,11],angelou_lithium_hg_tim:[0,11],angelou_lithium_lmms_decay_tim:[0,11],angelou_lithium_lmms_massfrac:[0,11],angelou_lithium_lmms_tim:[0,11],angelou_lithium_ms_decay_tim:[0,11],angelou_lithium_ms_massfrac:[0,11],angelou_lithium_ms_tim:[0,11],angelou_lithium_tpagb_decay_tim:[0,11],angelou_lithium_tpagb_massfrac:[0,11],angelou_lithium_tpagb_tim:[0,11],angelou_lithium_vrot_trigg:[0,11],angelou_lithium_vrotfrac_trigg:[0,11],angular:[0,11,16],ani:[0,2,4,5,9,11,14,15,17],anoth:[0,11],ansi:[0,11],ansi_colour:0,anyth:[0,7,11,15],anywai:[5,14,15],anywher:[5,15],api:[0,3,4,9],api_log_filename_prefix:[0,11,14],append:[1,4,14],appli:[0,11],apply_darwin_radau_correct:0,appropri:[0,7,11],approxim:[0,11],aren:[2,7],arenou2010_binary_fract:2,arg:[2,4,11,13,15,16],arg_dict:4,argopt:[0,11],argpair:[4,13],argstr:[11,12,14],argument:[0,2,4,5,7,11,14,15,18],argument_of_periastron:[0,11],argument_of_periastron_quadrupl:[0,11],argument_of_periastron_tripl:[0,11],around:[0,11,12,14],arrai:[2,4,7,14],arrow:0,artifici:[0,11],artificial_accretion_end_tim:[0,11],artificial_accretion_ignor:0,artificial_accretion_start_tim:[0,11],artificial_angular_momentum_accretion_r:[0,11],artificial_mass_accretion_r:[0,11],artificial_orbital_angular_momentum_accretion_r:[0,11],arxiv:[0,2,11],ask:[0,11,21],asplund:[0,11],assign:[5,15],assum:[0,11,16],ast871:[0,11],astronomi:[0,11],astropi:[9,16,17],atom:4,attempt:[4,5],aug:0,auto:[1,10],autogen_c_logging_cod:[1,12],automat:[0,1,6,9,11,12,17],avaibl:[9,17],avail:[0,4,7,11,12,15,16],avoid:11,awai:[0,11],axi:[0,11,16],b_1:[0,11],b_2:[0,11],b_3:[0,11],b_4:[0,11],b_inclination1:[0,11],b_inclination2:[0,11],b_inclination3:[0,11],b_inclination4:[0,11],back:[0,4,11],backward:[0,11],bagb:[0,11],barn:[0,11],base:[0,2,4,5,9,11,15,16,17,21],base_filenam:[5,15],basic:[5,15],batchmod:[0,11],beasor:[0,11],becaus:[0,2,5,7,9,11,14,17],becom:[0,1,2,4,11,12],been:[0,5,7,11,13],befor:[0,5,7,9,11,15,17],behaviour:[4,15,18],belczynski:[0,11],below:[0,3,7,11,12,15],berro:[0,11],bertolami:[0,11],best:[5,7,9,17],beta:[0,11],beta_reverse_nova:[0,11],beta_reverse_novae_geometri:0,better:[0,4,5,11,15],between:[0,2,11,19],bewar:[5,15],bh_belczynski:0,bh_fryer12_delai:0,bh_fryer12_rapid:0,bh_fryer12_startrack:0,bh_hurley2002:0,bh_prescript:[0,11],bh_spera2015:0,big:[0,7,11],biinari:15,bin:[0,9,11,17],binari:[2,5,7,9,11,14,15,16,17,21],binary_c2:[9,17],binary_c:[1,2,3,4,5,7,12,14,15,16,18],binary_c_api_funct:12,binary_c_cal:[5,15],binary_c_default:15,binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0:15,binary_c_inline_config:1,binary_c_log_cod:[1,12,14],binary_c_macro:[0,11],binary_c_output:4,binary_c_paramet:[0,11,15],binary_c_python:[4,5,11,14,15],binary_c_task_:[0,11],binary_c_write_log_cod:1,binary_grid:[0,11],binary_star:21,binaryc:[1,4,13,18],binaryc_config:1,binaryc_json_seri:4,binarycdecod:4,binarycencod:4,binarycpython3:11,binarycpython:[1,2,3,4,5,6,9,16,17,18,19,21],binarygrid:15,bind:[0,11,12,14],birth:[0,11],bit:2,bivari:[0,11],black:[0,11],black_hol:0,bloecker:[0,11],blog:1,boltzman:16,boltzmann:[0,11],bondi:[0,11],bondi_hoyle_accretion_factor:[0,11],bool:[4,5,6,13,15,16],born:[0,11],bosswissam:4,both:[0,4,11,15],bottom:[0,11,15],bound:[2,19],boundari:2,brake:[0,11],branch:[0,4,11],branch_david:0,branchpoint:[5,15],breakup:[0,11],broken:[0,11],bse:[0,2,11,12,15],bse_opt:[5,14,15],bsf:[0,11],buffer:[0,11],build:[0,1,3,4,11],build_q_tabl:2,built:[0,1,4,9,13,17],burn:[0,11],busso:[0,11],bye:[0,11],c13_eff:[0,11],c5232be5c:[],c_auto_log:7,c_log:0,c_logging_cod:[7,12,14,15],calc_e_integr:2,calc_p_integr:2,calc_period_from_sep:21,calc_sep_from_period:[15,21],calc_total_probden:2,calcul:[0,2,4,5,7,11,15,21],calculate_constants_three_part_powerlaw:2,call:[0,1,4,5,7,11,13,14,15,16,18],call_binary_c_config:4,calls_filenam:15,can:[0,1,2,4,5,7,9,11,12,13,14,15,16,17,18],cannot:[5,12],canon:7,cap:[0,11],capsul:[1,4,11],captur:[0,4,11],carbon:[0,11],carbon_oxygen_white_dwarf:0,carlo:[0,7,11],carrasco:[0,11],carri:[0,11],cast:[4,13],catchtim:4,categor:11,categori:[11,15],categoris:4,caught:[4,14],caus:21,cbdisc:[0,11],cbdisc_albedo:[0,11],cbdisc_alpha:[0,11],cbdisc_eccentricity_pumping_dermin:0,cbdisc_eccentricity_pumping_method:[0,11],cbdisc_eccentricity_pumping_non:0,cbdisc_end_evolution_after_disc:[0,11],cbdisc_fail_ring_inside_separ:[0,11],cbdisc_gamma:[0,11],cbdisc_init_djdm:[0,11],cbdisc_init_dm:[0,11],cbdisc_inner_edge_strip:[0,11],cbdisc_inner_edge_stripping_timescal:[0,11],cbdisc_kappa:[0,11],cbdisc_mass_loss_constant_r:[0,11],cbdisc_mass_loss_fuv_multipli:[0,11],cbdisc_mass_loss_inner_l2_cross_multipli:[0,11],cbdisc_mass_loss_inner_viscous_accretion_method:[0,11],cbdisc_mass_loss_inner_viscous_accretion_method_equ:0,cbdisc_mass_loss_inner_viscous_accretion_method_gerosa_2015:0,cbdisc_mass_loss_inner_viscous_accretion_method_non:0,cbdisc_mass_loss_inner_viscous_accretion_method_young_clarke_2015:0,cbdisc_mass_loss_inner_viscous_angular_momentum_multipli:[0,11],cbdisc_mass_loss_inner_viscous_multipli:[0,11],cbdisc_mass_loss_ism_pressur:[0,11],cbdisc_mass_loss_ism_ram_pressure_multipli:[0,11],cbdisc_mass_loss_xray_multipli:[0,11],cbdisc_max_lifetim:[0,11],cbdisc_minimum_evaporation_timescal:[0,11],cbdisc_minimum_fr:[0,11],cbdisc_minimum_luminos:[0,11],cbdisc_minimum_mass:[0,11],cbdisc_no_wind_if_cbdisc:[0,11],cbdisc_outer_edge_strip:[0,11],cbdisc_outer_edge_stripping_timescal:[0,11],cbdisc_resonance_damp:[0,11],cbdisc_resonance_multipli:[0,11],cbdisc_torquef:[0,11],cbdisc_viscous_l2_coupl:[0,11],cbdisc_viscous_photoevaporative_coupl:[0,11],cbdisc_viscous_photoevaporative_coupling_inst:[0,11],cbdisc_viscous_photoevaporative_coupling_non:[0,11],cbdisc_viscous_photoevaporative_coupling_visc:[0,11],cee:[0,11],cell:[11,15],cemp:[0,11],cemp_cfe_minimum:[0,11],center:15,centr:5,central_object:[0,11],certain:[7,9,17],cf_amanda_log:[0,11],cflag:[9,17],chabrier:2,chandrasekhar:[0,11],chandrasekhar_mass:[0,11],chang:[0,1,2,4,5,6,7,9,11,12,15,17],chapter:[0,7,10],cheb:[0,11],check:[0,2,4,5,6,11,15,21],check_circular:4,chemic:[0,11],chen:[0,11],child:4,choic:[0,2,11,16],choos:[0,11,12,16],chose:14,chosen:[5,15],circular:[0,11],circumbinari:[0,11],circumstanti:[0,11],claei:[0,11],clark:[0,11],clean:[1,5,9,14,17],clean_up_custom_logging_fil:5,clear:4,clock:4,clone:[9,17],close:[0,11],cloud:[0,11],cls:4,cluster:8,cmdline:5,code:[0,1,5,6,9,11,12,14,15,16,17,18],collaps:[0,11],collapsar:[0,11],collect:21,collid:21,color:16,color_by_index:16,colour:[0,11],colour_log:[0,11],column:[14,15,16],column_nam:14,com:[1,4],combin:[1,4,5,7,12],combine_ensemble_with_thread_join:7,come:[2,9,17,19],comenv_bs:0,comenv_disc_angmom_fract:[0,11],comenv_disc_mass_fract:[0,11],comenv_ejection_spin_method:[0,11],comenv_ejection_spin_method_do_noth:[0,11],comenv_ejection_spin_method_sychron:[0,11],comenv_ejection_spin_method_synchron:0,comenv_merger_spin_method:[0,11],comenv_merger_spin_method_breakup:0,comenv_merger_spin_method_conserve_angmom:[0,11],comenv_merger_spin_method_conserve_omega:[0,11],comenv_merger_spin_method_specif:[0,11],comenv_ms_accret:[0,11],comenv_ms_accretion_fract:[0,11],comenv_ms_accretion_mass:[0,11],comenv_nandez2016:0,comenv_nelemans_tout:0,comenv_ns_accret:[0,11],comenv_ns_accretion_fract:[0,11],comenv_ns_accretion_mass:[0,11],comenv_post_eccentr:[0,11],comenv_prescript:[0,11],comenv_splitmass:[0,11],comenv_undef:0,command:[0,1,5,7,9,11,15,17],commandlin:15,comment:15,commit:4,common:[0,11,12,14,15],compact:15,companion:[0,11],compar:[0,7,11,15],compil:[1,9,12,15,17],compile_shared_lib:1,complet:15,complex:[5,7,12,15,16],compon:[4,16],comput:[0,8,11],condit:[5,12,15],condor:[5,7,8],condor_grid:5,config:[1,4,7,9,17],config_fil:1,configur:[2,5,14,15],conjunct:13,conserv:[0,11],consid:[0,1,2,4,5,7,11,16],constant:[0,2,11,16],construct:[0,1,11,14,15],contain:[0,1,2,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20],content:[3,4,9,11],context:4,continu:[5,15],control:[0,11,15],convect:[0,11],converg:[0,11],convert:[2,4,5],convert_byt:4,cool:[0,11],copi:[0,5,11,21],core:[0,5,7,11,15,16],core_co:12,core_h:12,core_helium_burn:0,core_mass:[0,11,12],correct:[0,2,5,14,16,21],correctli:[9,14,16,17],correspond:16,corretor:[0,11],cosmic:2,cosmic_sfh_madau_dickinson2014:2,could:[0,4,11,15],count:[4,7],count_keys_recurs:4,counter:7,coupl:[0,11],cours:16,cover:13,coverag:[9,17],cowd:[0,11],cpu:[0,11],cpython:11,crap_paramet:[0,11],creat:[2,4,5,12,14,15],create_and_load_logging_funct:[1,12],create_arg_str:4,create_hdf5:4,creation:11,critic:[0,11],cross:[0,11],ctype:1,cuntz:[0,11],current:[0,4,9,11,12,17],custom:[0,1,3,4,5,7,9,11,14,15,16,18],custom_log:[5,7,14],custom_logging_cod:[1,12,14,18],custom_logging_func_memaddr:[7,11,12],custom_logging_funct:[7,9,10,12,14,15],custom_logging_info:5,custom_logging_memaddr:12,custom_logging_print_stat:14,custom_logging_stat:15,custom_opt:[5,14,15],custom_output_funct:12,custom_sort_dict:4,custom_tmp_dir:1,customis:16,cvode:[0,11],d20a4c74d20a43b881c0c9e5def5f76c:15,dai:[0,2,11,12,14,15,21],damp:[0,11],darwin:0,dat:[0,4,15],data:[0,4,5,7,11,14,15,18],data_dict:2,data_dir:[4,5,7,15],datadir:[5,15],datafram:[14,16],dataset:[4,15],date:5,david:[0,9,11,17],david_logging_funct:[0,11],dd7:[0,11],deactiv:[0,11],deal:[4,14],death:[0,11],debug:[0,7,11,15],decai:[0,11],decid:[0,4,11,12],decod:4,decreas:[0,11],deeper:[5,15],def:[14,15],default_to_metal:[0,11],defaultdict:4,defer:[0,11],defin:[0,1,2,5,11,16],definit:[1,21],degener:[0,11],degre:[0,11],delai:0,delta_mcmin:[0,11],den:[0,11],densiti:2,depend:[0,2,9,11,16,17],deprec:[0,11],dermin:[0,11],describ:[0,2,7,11],descript:[0,2,4,7,9,10,11,13],design:[5,16],desir:[0,11],destruct:[5,15],detail:[0,4,11,14],detect:[0,11],determin:[0,5,11,12,15,21],deton:[0,11],dev:[0,11],develop:1,deviat:2,dewi:[0,11],dex:[0,11],diagnost:7,diagram:[0,11,16],dickonson:2,dict2:4,dict:[1,2,4,5,6,13,14,15,20],dict_1:4,dict_2:4,dict_kei:[13,14],dictionari:[1,2,3,4,5,6,7,15,16,20],did:[4,9,17],differ:[0,4,5,9,11,15,16,17],dimmer:[0,11],dir:[9,17],direct:[0,5,11],directli:[4,7,14],director:7,directori:[0,3,4,5,7,9,11,15,17],disabl:[0,11,15],disable_debug:[0,11],disable_end_log:[0,11],disable_ev:[0,11],disc:[0,11],disc_legacy_log:[0,11],disc_log2d:[0,11],disc_log:[0,11],disc_log_directori:[0,11],disc_log_dt:[0,11],disc_log_level_non:0,disc_log_level_norm:0,disc_log_level_normal_first_disc_onli:0,disc_log_level_subtimestep:0,disc_log_level_subtimestep_first_disc_onli:0,disc_n_monte_carlo_guess:[0,11],disc_stripping_timescale_infinit:0,disc_stripping_timescale_inst:0,disc_stripping_timescale_orbit:0,disc_stripping_timescale_visc:0,disc_timestep_factor:[0,11],discret:15,discs_circumbinary_from_comenv:[0,11],discs_circumbinary_from_wind:[0,11],disk:[0,5,11],dispers:[0,11],displai:[0,11],dist:[9,17],distefano:2,distribut:[0,2,5,8,11,15],distribution_funct:[9,10,15],divid:8,dlnm1:[5,15],dlog10per:15,dlogp:2,do_dry_run:7,doc:[4,6,9,15,17],doc_fetch:2,docstr:[9,14,16,17],document:[4,6,7,10,15],doe:[0,2,4,5,7,11,12,13,14,15,21],doesn:[5,7],doesnt:6,doing:[0,1,5,6,9,11,17],don:[2,4,7],done:[0,4,5,9,11,15,17],donor:[0,11,21],donor_limit_dynamical_multipli:[0,11],donor_limit_envelope_multipli:[0,11],donor_limit_thermal_multipli:[0,11],donor_rate_algorithm_bs:0,donor_rate_algorithm_claeys2014:0,dont:11,doubl:[12,15],down:15,dphasevol:[5,15],dr2:[0,11],dr3:[0,11],drai:[0,11],dredg:[0,11],drop:14,dry:7,dstep:2,dt_limit:13,dtfac:[0,11],dtlimit:4,dtm:[1,12,15],due:[9,17],dummi:[2,16],dump:[0,4,11,14],dumpvers:[0,11],duquennoi:2,duquennoy1991:2,dure:[0,11],dust:[0,11],dwarf:[0,11],dynam:[0,11],e2_hurley_2002:0,e2_izzard:0,e2_mint:0,e2_prescript:[0,11],each:[0,2,4,5,7,11,15],eagb:[0,11],eagb_wind_beasor_etal_2020:0,eagb_wind_bs:0,eagb_wind_goldman_etal_2017:0,eagbwind:[0,11],eagbwindfac:[0,11],earli:[0,11],early_asymptotic_giant_branch:0,easi:[4,14],easier:[4,15],ecc2:2,ecc3:2,ecc:[2,5,14,15],eccentr:[0,2,11,12,14,15,16,21],eccentric_rlof_model:[0,11],eccentricity_quadrupl:[0,11],eccentricity_tripl:[0,11],echo:[0,11],eddington:[0,11],edg:[0,5,11,15],edit:12,edu:[0,11],effect:[0,2,7,11,12],effective_metal:[0,11],effici:[0,11],egg:[9,17],eggleton:[0,11,21],either:[0,4,5,7,9,11,15,17,18],eject:[0,11],elabor:12,eld:[0,11],eldridg:[0,11],electon:[0,11],electron:[0,11],element:[0,1,4,7,11,13,16],els:12,email:4,emp:[0,11],emp_feh_maximum:[0,11],emp_logg_maximum:[0,11],emp_minimum_ag:[0,11],empti:[4,6,14],enabl:[0,11],encod:4,encount:7,end:[0,2,4,7,11],end_index:2,end_timestamp:15,energi:[0,11],enhanc:[0,11],enlarg:[0,11],enough:2,ensembl:[0,4,7,11,13],ensemble_def:[0,11],ensemble_dictionari:4,ensemble_dt:[0,11],ensemble_factor_in_probability_weighted_mass:7,ensemble_filter_:[0,11],ensemble_filters_off:[0,11],ensemble_json:4,ensemble_legacy_ensembl:[0,11],ensemble_list:5,ensemble_logdt:[0,11],ensemble_logtim:[0,11],ensemble_macro:[0,11],ensemble_output_:7,ensemble_startlogtim:[0,11],ensure_ascii:4,enter:[0,9,11,17],enthalpi:[0,11],entir:[12,14],entri:[4,5],env:[9,11,16,17],envelop:[0,11],equal:[0,4,15],equat:[0,11],equation_of_state_algorithm:[0,11],equation_of_state_paczynski:0,equatori:[0,11],equival:7,errno:[9,17],error:[0,4,7,9,11,15,17],errors_exceed:15,errors_found:15,esa:2,escap:[0,11],escape_fract:[0,11],escape_veloc:[0,11],eta:[0,11],etal:[0,11],etc:[0,4,5,8,9,11,14,15,16,17,18],euler:[0,11],evalu:[2,5,15,21],evan:[0,11],evapor:[0,11],evaporate_escaped_orbiting_object:[0,11],even:13,event:[0,11],everi:[0,9,11,17],everyth:[5,7,14,15],everytim:[9,17],evid:[0,11],evolut:[0,1,5,7,11,14,15,16],evolution_split:[0,11],evolution_splitting_maxdepth:[0,11],evolution_splitting_sn_eccentricity_threshold:[0,11],evolution_splitting_sn_n:[0,11],evolution_typ:[7,15],evolutionari:[0,11,14],evolv:[0,3,5,7,11,12],evolve_popul:15,evolve_singl:[5,12,14],exact:[1,4,7],exactli:[0,11],exampl:[1,2,4,5,14,18],example_above_m:12,example_compact_object:15,example_dco:15,example_df:14,example_head:4,example_log:18,example_log_co:[1,12],example_logging_string_co:12,example_logging_string_post_m:12,example_massloss:[12,14],example_output:14,example_parse_output:4,example_pop:[14,15],example_pop_set:15,example_python_population_result:15,example_sn:12,exce:[0,7,11],except:[4,5,6,7,11,15,16],execut:[0,5,7,9,11,15,17],exist:[0,5,6,11,15],exist_ok:[4,15],exit:[0,4,11],exp:[5,15],expand:[15,18],expect:[9,11,17],experiment:[0,4,11],explain:[3,4],explicitli:[0,1,11],explod:[0,11],explos:[0,11],expoenti:[0,11],expon:[0,11],export_all_info:[5,15],express:[0,11],extend:[0,9,17],extens:11,extern:[0,11],extra:[0,3,5,7,9,11,15,18],extra_text:6,extract:[4,15],extract_ensemble_json_from_str:4,extrapol:[2,7],fabian:[0,11],fabian_imf_log:[0,11],fabian_imf_log_tim:[0,11],fabian_imf_log_timestep:[0,11],factor:[0,2,4,7,11],fade:[0,11],fail:[0,4,7,9,11,17],fail_sil:4,failed_count:15,failed_prob:15,failed_system:7,failed_system_log:7,failed_systems_error_cod:15,failed_systems_threshold:7,failsaf:14,failur:[0,11],fallback:[0,12],fallback_mass:12,fals:[0,4,5,7,11,13,15,16],fancy_parsing_funct:18,far:[0,11],farmer:[0,11],fase:15,fast:[0,11],faster:15,favorit:14,featur:[3,9,15],feed:7,ferguson:[0,11],fetch:14,few:[0,11],field:[0,11],fig:[0,2,11],figur:[7,16],file:[0,1,4,5,6,7,8,9,11,14,15,16,17,18],file_log:[0,11],filehandl:6,filenam:[0,1,4,5,7,11,14,15,18],filenotfounderror:[9,17],filepath:1,fill:14,fill_data:2,filter:[0,4,11,13],filter_arg_dict:4,filter_valu:[4,13],fin:[0,11],find:[4,5,7,9,15,17],finish:[4,15,16],first:[0,2,4,5,9,11,14,15,17,21],first_giant_branch:0,fishlock:[0,11],fit:[0,2,4,5,11,14,21],fix:[0,2,4,5,11,14,15,16],flag:[0,1,4,7,11],flash:[0,11],flat:[2,7],flatsect:[2,15],flaw:5,float_overflow_check:[0,11],flto:[9,17],fold:2,follow:[0,2,4,7,9,11,12,16,17],forc:[0,9,11,17],force_circularization_on_rlof:[0,11],force_corotation_of_primary_and_orbit:[0,11],form:[0,4,5,6,11,15],formal:[0,11],format:[0,2,4,5,11,12,14,15],format_ensemble_result:4,formula:[0,11],forward:[0,11],found:[2,9,15,17],four:[0,11],fpic:1,fraction:[0,2,7,11,15],framework:11,free_persistent_data_memaddr_and_return_json_output:11,free_store_memaddr:11,frequenc:[0,11],friction:[0,11],fring:[0,11],from:[0,2,4,5,7,13,14,15,16,21],from_binary_c_config:1,fryer:0,ftz:[9,17],full:[3,4,7,12],full_path:4,further:[2,15],fuv:[0,11],gaia:[0,2,11],gaia_colour_transform_method:[0,11],gaia_conversion_ubvri_bivariate_jordi2010:[0,11],gaia_conversion_ubvri_riello2020:[0,11],gaia_conversion_ubvri_univariate_evans2018:[0,11],gaia_conversion_ubvri_univariate_jordi2010:[0,11],gaia_conversion_ugriz_bivariate_jordi2010:[0,11],gaia_conversion_ugriz_riello2020:[0,11],gaia_conversion_ugriz_univariate_evans2018:[0,11],gaia_conversion_ugriz_univariate_jordi2010:[0,11],gaia_l_binwidth:[0,11],gaia_teff_binwidth:[0,11],gain:7,galact:[0,11],gallino:[0,11],gamma:[0,11],gap:[0,11],garcia:[0,11],gauss:[0,11],gaussian:2,gaussian_func:2,gaussian_normalizing_const:2,gb_reimers_eta:[0,11],gb_wind_beasor_etal_2020:0,gb_wind_goldman_etal_2017:0,gb_wind_reim:0,gb_wind_schroeder_cuntz_2005:0,gbwind:[0,11],gbwindfac:[0,11],gcc:[1,9,17],gce:[0,11],gener:[0,1,2,4,5,6,7,11,12,14,15,16],general_info:4,generalis:2,geometr:[0,11],gerosa:[0,11],get:[0,2,3,4,5,6,9,12,14,15,17,18,21],get_arg_kei:4,get_default:[4,13],get_help:[4,13],get_help_al:[4,5,13],get_help_sup:[4,13],get_integration_constant_q:2,get_max_multipl:2,get_moe_di_stefano_dataset:4,get_siz:4,giant:[0,11],giant_branch:0,git:[0,4,15],git_branch:4,git_build:4,github:4,gitlab:9,give:[0,2,4,11,21],given:[0,1,2,4,5,7,11,18,21],global:[0,2,11],global_dict:2,gmax:2,gmin:2,gnu:11,goe:[0,4,5,11,12,14,16],gogo:[0,11],going:[9,17],goldman:[0,11],gonna:2,good:[0,7,11,14,15,21],gov:[0,11],gravit:[0,11,15],gravitational_radiation_bs:0,gravitational_radiation_bse_when_no_rlof:0,gravitational_radiation_landau_lifshitz:0,gravitational_radiation_landau_lifshitz_when_no_rlof:0,gravitational_radiation_model:[0,11],gravitational_radiation_modulator_:[0,11],gravitational_radiation_modulator_j:[0,11],gravitational_radiation_non:0,grb:[0,11],great:[0,11],greater:[0,11],grevess:[0,11],grid:[0,3,4,5,9,10,11,12,14],grid_class:[9,10],grid_cod:5,grid_opt:[5,7,14,15],grid_options_default:6,grid_options_defaults_dict:6,grid_options_descript:[6,15],grid_options_description_check:6,grid_options_help:6,grid_vari:[7,15],grid_variable_numb:15,gridcode_filenam:7,gridtyp:[5,15],group:4,gsl:[9,17],gsl_dir:[9,17],guess:[0,2,11],h5py:[9,17],hachisu:[0,11],hachisu_disk_wind:[0,11],hachisu_ignore_qcrit:0,hachisu_qcrit:[0,11],hack:6,had:5,half:[0,11],hall:[0,11],handi:[0,11],handl:[0,3,4,5,7,11,14,18,21],handle_ensemble_string_to_json:4,happen:[0,11],hardcod:[12,15],has:[0,1,4,5,7,11,12,13,15],have:[0,2,3,4,5,6,7,9,11,12,14,15,16,17],hbb:[0,11],hbbtfac:[0,11],hdf5:4,hdf5file:4,header:[1,4,12,14,15],headerlin:15,headlin:7,hegb:0,hehg:0,height:[2,15],helium:[0,11],helium_flash_mass_loss:[0,11],helium_white_dwarf:0,help:[0,3,4,6,11,14,15],help_al:[0,11],hem:0,henc:[0,11],hendrik:[9,17],here:[1,4,5,7,11,12,14,16],hertzsprung:[0,11],hertzsprung_gap:0,hertzstrpung:[0,11],heuvel:[0,11],hewd:[0,11],hewd_hewd_ignition_mass:[0,11],hex:7,high:[0,2,11],higher:[0,2,4,7,9,11,15,17],his:2,histori:2,hold:7,hole:[0,11],home:11,homogen:[0,11],hood:14,hopefulli:[0,11],hot:[0,11],how:[0,4,5,7,11,12,14,15],howev:[0,11,12,15],hoyl:[0,11],hpc:[5,8],hpc_function:[9,10],hr_diagram:16,hrd:[0,11],hrdiag:[0,11],hrdiag_output:[0,11],html:[9,15,17],http:[0,1,2,4,11,15],hurlei:[0,11],hut:[0,11],hybrid:[0,11],hydro:[0,11],hydrogen:[0,11],ibc:[0,11],id_cor:12,idea:[15,16],idum:[0,11],ignit:[0,11],ignor:[0,5,7,9,11,12,14,15,17],iia:[0,11],iloc:14,imf:[0,2,11],imf_chabrier2003:2,imf_scalo1986:2,imf_scalo1998:2,imf_tinsley1980:2,immedi:[0,11],implement:[0,5,7,11],impli:[0,11],impos:15,improv:2,inclin:[0,11],inclination1:[0,11],inclination2:[0,11],inclination3:[0,11],inclination4:[0,11],inclini:[0,11],incliniation_quadrupl:[0,11],incliniation_tripl:[0,11],includ:[0,1,2,4,5,9,11,12,14,15,16,17],include_binary_c_default:[5,15],include_binary_c_help_al:[5,15],include_binary_c_version_info:[5,15],include_default:[5,15],include_popul:15,include_population_set:5,incom:[0,11],increas:[0,11],inde:[0,11],indent:[4,14],index:[0,2,9,11,13,14],indic:[0,2,11],individu:[3,9],individual_nova:[0,11],induc:[0,11],inertia:[0,11],info:[4,5,9,11,13,15,16,17],inform:[0,1,3,4,5,6,12,14,15,16],init:5,init_abund:[0,11],init_abund_dex:[0,11],init_abund_mult:[0,11],init_abunds_onli:[0,11],initi:[0,2,5,11,13,14],initial_abundance_hash:5,initial_abundance_mix:[0,11],initial_abunds_onli:[0,11],initial_mass:14,inner:[0,11],input:[1,2,4,5,7,9,11,13,14,16,21],input_dict:4,insert:[5,15],insid:[0,11],inspect:[4,14,16],inspect_dict:4,inspir:[1,16,21],instabl:[0,11],instanc:[4,14,15],instant:[0,11],instantli:[0,11],instead:[0,4,7,11],integ:[0,5,7,11,21],integr:2,integrals_str:2,interact:[0,6,11],interfac:[4,9,11,17],interfer:[9,17],intern:[0,7,11,13],internal_buff:[0,11],internal_buffering_off:0,internal_buffering_print:0,internal_buffering_stor:0,interpol:[2,5],interpolate_in_mass_izzard2012:2,interpolator_nam:2,intershel:[0,11],interstellar:[0,11],intger:[0,11],intro:[0,11],invers:21,involv:[0,11],inward:[0,11],ipynb:15,is_capsul:4,isfil:15,isn:[4,5],isnt:15,isotop:[0,4,11,13],isotope_hash:5,isotope_list:5,item:1,iter:4,its:[0,4,5,6,9,11,15,16,17,18],itself:[4,7,9,12,14,17],iwamoto:[0,11],izzard2012_period_distribut:2,izzard:[0,9,11,17],jager:[0,11],jaschek:2,jeff:[9,17],jia:[0,11],john:[0,11],join:[11,12,14,15],jordi:[0,11],json:[4,5,7,11,14,15],jsondecod:4,jsonencod:4,jupyt:[9,17],just:[0,2,4,5,7,11,15,21],kap:[0,11],kappa:[0,11],kaps_rentrop:[0,11],karaka:[0,11],keep:[5,15],kei:[1,2,4,5,6,7,13,14,15,16],kelvin:[0,11],keplerian:[0,11],keyword:[16,18],kick:[0,7,11],kick_backward:0,kick_forward:0,kick_inward:0,kick_outward:0,kick_random:0,kick_straight_up:0,kick_velocity_custom:0,kick_velocity_fix:0,kick_velocity_maxwellian:0,kill:[1,12,15],kim:[0,11],kind:[0,11],kippenhahn:[0,11],know:[0,1,5,6,11,13,14],known:[0,2,5,11,14,15,18],kroupa2001:[2,5,15],kroupa:2,krticka:0,ktg93:2,kwarg:[5,16,18],lambda:[0,11],lambda_c:[0,11],lambda_ce_dewi_tauri:0,lambda_ce_klencki_2020:0,lambda_ce_polytrop:0,lambda_ce_wang_2016:0,lambda_enthalpi:[0,11],lambda_ionis:[0,11],lambda_min:[0,11],lambda_mult:[0,11],lambda_multipli:[0,11],lambda_v:2,lamer:[0,11],landau:[0,11],langer:[0,11],larger:[0,11],last:2,lastli:[11,14],latter:[0,11],law:2,law_const:2,lbv:[0,11],ld_library_path:[9,17],lead:[0,11,15,21],learn:12,least:[9,17],leav:[0,11],left:[0,11],legaci:[0,11],legacy_yield:[0,11],len:[14,15],lengthen:[0,11],less:[0,1,2,3,11,14],let:[5,14,15],level:[1,4],li7:[0,11],lib:[9,11,14,17],libbinary_c:7,libcustom_logging_5d7779e8190e4b79b10c7e6a44cb0e7:14,libcustom_logging_8967553693ac4e11a49c42d4eef773e8:14,libcustom_logging_e9c2bec7f15541eb847fc6013e48e7:[],libcustom_logging_eac2dfc438a14e5a9f5be98b1b6b4294:[],libgsl:[9,17],libmemo:[9,17],librari:[0,1,5,7,11,12,18],library_path:[9,17],librinterpol:[9,17],lies:[0,11],lifetim:[0,11,15],lifshitz:[0,11],like:[0,1,4,5,7,9,11,15,16,17,19],limit:[0,11,15,16],line:[1,4,5,7,9,12,14,15,16,17],linear2:7,linear:[0,2,7,11],linear_extrapolation_q:2,linearli:19,linker:1,linspac:19,linux:11,list:[0,1,2,4,7,11,14,15,18,19],list_arg:[0,11],list_of_sub_kei:2,lit:[0,11],lithium:[0,11],lithium_gb_post_1dup:[0,11],lithium_gb_post_heflash:[0,11],lithium_hbb_multipli:[0,11],lithium_t:[0,11],littleton:[0,11],liu:[0,11],llnl:[0,11],lnm1:[5,15],load:[0,1,4,5,7,11,12,14,15,16],load_logfil:4,lobe:[0,11,21],local:2,locat:[0,2,7,9,11,17],lodder:[0,11],log10:[0,2,11,15],log10m1:7,log10p:2,log10per:15,log10pmin:2,log:[0,1,2,3,4,5,7,9,11,14,16,17,18,21],log_arg:7,log_args_dir:7,log_arrow:0,log_every_timestep:[12,14],log_fil:7,log_filenam:[0,11,14,18],log_runtime_system:7,logarithm:2,logensembletim:[0,11],logfil:[4,9,14,17],logg:[0,11],logger:15,logging_dict:1,logging_lin:12,logic:[1,5,7,12],logmass:2,logp:2,logper:2,logperiod:2,long_spectral_typ:2,longer:[0,11],longnam:[5,15],look:[1,4,9,15,17],lookback:[0,11],loon:[0,11],loop:[5,14,15],loos:16,lose:[0,11],loss:[0,11,14],lost:[0,11],lot:[4,7,15,18],low:[0,2,11],low_mass_m:0,low_mass_main_sequ:0,lower:[0,2,5,11,15,19],lsoda:[0,11],lsun:[0,11,16],lugaro:[0,11],luminos:[0,11,16],luminosity_1:16,luminosity_2:16,lynnett:[0,11],m_1:[0,5,11,12,13,14,15,18],m_2:[0,11,12,14,15],m_3:[0,11],m_4:[0,11],m_max:[2,5,15],m_min:[5,15],maccretor:[0,11],machin:[7,9,17],macro:[0,4,11,13],madau:2,maeder:[0,11],magellan:[0,11],magnet:[0,11],magnetic_braking_algorithm:[0,11],magnetic_braking_algorithm_andronov_2003:0,magnetic_braking_algorithm_barnes_2010:0,magnetic_braking_algorithm_hurley_2002:0,magnetic_braking_algorithm_rappaport_1983:0,magnetic_braking_factor:[0,11],magnetic_braking_gamma:[0,11],magnitud:4,mai:[0,11],main:[0,1,7,9,11,12,15,17],main_sequ:[0,11],mainli:8,major:[0,11],make:[0,1,2,4,5,7,9,11,14,15,16,17,18],make_build_text:4,makedir:[4,15],manag:[4,9,17],mani:[0,5,7,11,13,15],manual:12,manufactur:[0,11],map:7,maria:[0,11],mass:[0,1,2,4,5,7,11,13,14,15,16,18,21],mass_1:[15,16],mass_2:[15,16],mass_accretion_for_eld:[0,11],mass_accretor:21,mass_donor:21,mass_evolut:16,mass_for_hestar_ia_low:[0,11],mass_for_hestar_ia_upp:[0,11],mass_of_pmz:[0,11],mass_str:2,massiv:[0,2,11],massless:[0,11],massless_remn:0,master:[7,16],match:[0,4,11,14,15,16],materi:[0,11],math:[5,15],matplotlib:[9,16,17],matter:[0,11],mattsson:[0,11],mattsson_mass_loss:[0,11],mattsson_orich_tpagbwind:[0,11],max:[0,2,11,12,15],max_bound:[2,19],max_evolution_tim:[0,1,11,12,14,15],max_hewd_mass:[0,11],max_model_numb:[0,11],max_multipl:2,max_neutron_star_mass:[0,11],max_queue_s:7,max_stellar_angmom_chang:[0,11],max_stellar_type_1:[0,11],max_stellar_type_2:[0,11],max_stellar_type_3:[0,11],max_stellar_type_4:[0,11],max_tim:14,max_val:2,maximum:[0,2,7,11,12,21],maximum_mass_ratio_for_instant_rlof:[0,11],maximum_mass_ratio_for_rlof:21,maximum_mcbagb_for_degenerate_carbon_ignit:[0,11],maximum_nuclear_burning_timestep:[0,11],maximum_timestep:[0,11],maximum_timestep_factor:[0,11],maxmimum:[0,11],maxwellian:[0,11],mayb:16,mayor:2,mc13_pocket_multipli:[0,11],mch:[0,11],mcmin:[0,11],mdonor:[0,11],mean:[0,2,4,5,7,9,11,17],meant:7,measur:4,medium:[0,11],mega:2,memaddr:[11,12],memori:[1,5,7,11,12,21],menv:[0,11],merg:[0,2,4,7,11],merge_dict:[4,13],merge_multipl:2,merger:[0,11],merger_angular_momentum_factor:[0,11],merger_mass_loss_fract:[0,11],mesa:[9,17],mesasdk_init:[9,17],mesasdk_root:[9,17],messag:4,mestel:[0,11],met:[5,15],metal:[0,2,11,12,14,15,21],method:[0,5,7,11,12,14,15],meynet:[0,11],might:[4,5,9,15,17],milki:[0,11],miller:[0,11],min:[2,12,15],min_bound:[2,19],min_p:2,min_per:2,min_val:2,minimal_verbos:4,minimum:[0,2,4,7,11,21],minimum_co_core_mass_for_carbon_ignit:[0,11],minimum_co_core_mass_for_neon_ignit:[0,11],minimum_donor_menv_for_comenv:[0,11],minimum_envelope_mass_for_third_dredgeup:[0,11],minimum_helium_ignition_core_mass:[0,11],minimum_mcbagb_for_nondegenerate_carbon_ignit:[0,11],minimum_orbital_period_for_instant_rlof:[0,11],minimum_period_for_rlof:21,minimum_separation_for_instant_rlof:[0,11],minimum_separation_for_rlof:21,minimum_time_between_pn:[0,11],minimum_timestep:[0,11],mint:[0,11],mint_data_cleanup:[0,11],mint_dir:[0,11],mint_disable_grid_load_warn:[0,11],mint_fallback_to_test_data:0,mint_hard_max_nshel:0,mint_hard_min_nshel:0,mint_kippenhahn:[0,11],mint_kippenhahn_companion_stellar_typ:[0,11],mint_kippenhahn_stellar_typ:[0,11],mint_maximum_nshel:0,mint_maximum_shell_mass:[0,11],mint_metal:[0,11],mint_minimum_nshel:0,mint_minimum_shell_mass:[0,11],mint_ms_rejuven:[0,11],mint_nshel:0,mint_nuclear_burn:[0,11],mint_remesh:[0,11],mint_use_zams_profil:[0,11],mira:[0,11],misc:[9,11],miscellan:[4,13],miss:[0,4,6,11],mix:[0,4,7,11],mixtur:[0,11],mmax:2,mmin:[2,7],mnra:21,model:[0,1,7,11,12,14,15],modif:3,modifi:[0,11,12],modul:[0,6,7,10,11,13,15],modulo:7,moe:[2,4,5,9,15],moe_di_stefano_2017:5,moe_di_stefano_2017_multiplicity_fract:2,moe_di_stefano_2017_pdf:2,moment:[0,11,12,15,19],momenta:[0,11,16],momentum:[0,11],mont:[0,7,11],monte_carlo_kick:[0,11],more:[0,1,3,4,5,7,9,11,12,13,14,15,16,17,19],most:[4,11],mostli:[4,6,7,15,16,18],move:[0,11],msun:[0,2,11,12,14],much:[0,4,11,15],multi:7,multipl:[0,2,4,7,11,15],multiplc:[0,11],multipli:[0,4,7,11],multiplicity_arrai:2,multiplicity_fraction_funct:7,multiplicity_model:7,multiplicity_modul:7,multiply_values_dict:[4,13],multiprocess:7,must:[0,2,11,14,15],my_stellar_data:[1,12,15],myr:[0,11,14],n100:[0,11],n100_z0:[0,11],n100h:[0,11],n100l:[0,11],n10:[0,11],n150:[0,11],n1600:[0,11],n1600c:[0,11],n200:[0,11],n20:[0,11],n300c:[0,11],n40:[0,11],naked_helium_star_giant_branch:0,naked_helium_star_hertzsprung_gap:0,naked_main_sequence_helium_star:0,name:[1,4,5,6,11,13,15,18,20],natur:[0,11],nauenberg:[0,11],nearer:[0,11],nebula:[0,11],necessari:[4,5,15],need:[0,2,5,9,11,12,14,15,17],neg:[0,4,11],neither:[0,5,11],neleman:[0,11],nelemans_gamma:[0,11],nelemans_max_frac_j_chang:[0,11],nelemans_minq:[0,11],nelemans_n_comenv:[0,11],nelemans_recalc_eccentr:[0,11],nemp:[0,11],nemp_cfe_minimum:[0,11],nemp_nfe_minimum:[0,11],nenamg:[0,11],neon:[0,11],nest:[4,5,15],network:[0,11,13],neutrn:[0,11],neutron:[0,11,15],neutron_star:0,never:[0,11],newer:[0,2,11],newli:[0,11],newopt:2,newton:[0,11],next:[4,15],nice:[1,5,16],nieuwenhuijzen:[0,11],nieuwenhuijzen_windfac:[0,11],nmax:2,no_thermohaline_mix:[0,11],noecho:[0,11],noechonow:[0,11],noel:[0,11],nolowq:7,nomin:[0,11],non:[0,7,11],nonconservative_angmom_gamma:[0,11],none:[0,1,2,4,5,6,7,11,15,21],nonetyp:15,nonzero:7,nor:[0,11],norm:7,normal:[0,4,11],normalis:[2,7],normalize_dict:2,normalize_multipl:7,notabl:15,note:[0,7,11],notebook:[9,11,12,13,14,15,17],notebook_api_funct:14,notebook_custom_log:[14,15],notebook_individual_system:[12,14,15],notebook_popul:14,noteworthi:3,noth:[5,7],notifi:18,nova:[0,11],nova_faml_multipli:[0,11],nova_irradiation_multipli:[0,11],nova_retention_algorithm_claeys2014:0,nova_retention_algorithm_const:0,nova_retention_algorithm_hillman2015:0,nova_retention_fract:[0,11],nova_retention_method:[0,11],nova_timestep_accelerator_index:[0,11],nova_timestep_accelerator_max:[0,11],nova_timestep_accelerator_num:[0,11],now:[0,2,4,11,12,14,15],nuclear:[0,11],nuclear_mass_hash:5,nuclear_mass_list:5,nucleosynthesi:[0,4,11],nucleosynthesis_sourc:[4,13],nucreacmult:[0,11],nucsyn:[9,11],nucsyn_angelou_lithium:[0,11],nucsyn_gce_outflow_check:[0,11],nucsyn_hbb:[0,11],nucsyn_metal:[0,11],nucsyn_network:[0,11],nucsyn_network_error:[0,11],nucsyn_s_process:[0,11],nucsyn_solv:[0,11],nucsyn_third_dredge_up:[0,11],nugi:[0,11],num_ansi_colour:0,number:[0,2,4,5,7,9,11,15,17],numer:4,numpi:[4,9,14,17,19],obj:4,object:[0,3,4,5,7,8,11,16],object_hook:4,object_pairs_hook:4,object_parse_funct:14,obtain:0,obvious:12,occur:[0,11,21],off:[0,11,15],off_m:14,offset:[0,11],ohio:[0,11],old:7,old_solut:[9,17],omega:[0,11],onc:[0,11],one:[0,4,5,7,11,13,15,16],onewd:0,onli:[0,4,5,7,11,12,15,21],onset:[0,11],onto:[0,2,11],opac:[0,11],opacity_algorithm:[0,11],opacity_algorithm_ferguson_op:0,opacity_algorithm_paczynski:0,opacity_algorithm_star:0,opal:[0,11],open:[14,15],opm:2,opt:[2,4,11],option:[0,1,2,4,5,9,10,11,15,17,21],orb:[5,15],orbit:[0,2,11,16,21],orbit_evolut:16,orbital_inclin:[0,11],orbital_inclinationi:[0,11],orbital_period:[0,11,12,14,15,21],orbital_period_quadrupl:[0,11],orbital_period_tripl:[0,11],orbital_phas:[0,11],orbital_phase_quadrupl:[0,11],orbital_phase_tripl:[0,11],orbiting_object:[0,11],orbiting_objects_close_pc_threshold:[0,11],orbiting_objects_log:[0,11],orbiting_objects_tides_multipli:[0,11],orbiting_objects_wind_accretion_multipli:[0,11],order:[3,4,5,15],ordereddict:4,org:[0,2,11],origin:[9,17],other:[0,1,2,4,6,7,9,11,13,14,15,16,17],otherwis:[0,5,6,7,11],out:[4,6,7,12,13],outcom:[0,11],outer:[0,11],outfil:[5,15],outfile_nam:1,outfilenam:15,output:[1,3,4,5,7,9,11,12,13,14,16,17,18,21],output_dict:14,output_dir:[5,14,15],output_fil:[4,6,14],output_filenam:[5,15],output_lin:4,outsid:[0,2,11],outward:[0,11],over:[4,5,13,14,15],overflow:[0,11],overlap:4,overrid:2,overriden:15,overshoot:[0,11],overspin_algorithm:[0,11],overspin_bs:[0,11],overspin_massloss:[0,11],overview:11,own:[5,7,9,12,14,15,17],oxygen:[0,11],oxygen_neon_white_dwarf:0,packag:[4,9,11,15,17,19],paczynski:[0,11],page:[0,9,11,15,17],pair:[0,4,11],panda:[4,9,14,16,17],pane:16,panel:[0,11],paper:[0,11],param_nam:4,paramet:[1,2,3,4,5,6,7,9,11,12,14,15,16,18,19,21],parameter_nam:[4,5,11,13,15],parameter_value_input_typ:[4,13],pars:[3,4,5,14,15,16,18],parse_binary_c_version_info:4,parse_cmdlin:5,parse_const:4,parse_float:4,parse_funct:[5,7,14,15,18],parse_function_hr_diagram:16,parse_function_mass:16,parse_function_orbit:16,parse_int:4,parsec:2,part:[2,5,11,14,15,21],partial:[0,11],particularli:[0,11],pasp:2,pass:[5,7,9,11,12,14,15,16,17,18],path:[4,7,9,14,15,17],patho:[9,17],pdf:[0,2,9,11,17],pend:[0,11],per:[0,4,5,7,11,14,15,21],percentag:[0,11],peret:[0,11],perform:[0,11],perhap:[0,11],periastron:[0,11],pericent:21,period:[0,2,11,12,14,15,16,21],period_str:2,perl:[1,15],persist:11,persistent_data:11,pgo:[0,11],phase:[0,11],phasevol:[0,11,15],phdi:[0,11],photoevapor:[0,11],php:2,physic:15,pick:16,piec:[5,15],pinnsonneault:[0,11],pisn:[0,11],pkg:[9,17],place:[0,11],placehold:16,plai:[0,11],plan:7,planetari:[0,11],plaw2:7,pleas:[0,4,11,15],plot:[0,11,14,16],plot_funct:[9,10],plot_hr_diagram:16,plot_hr_diagram_singl:16,plot_mass:16,plot_orbit:16,plot_system:16,plot_typ:16,pls:5,plu:[0,11],pms:16,pms_mass_1:16,pms_mass_2:16,pn_comenv_transition_tim:[0,11],pn_fast_wind:[0,11],pn_fast_wind_dm_agb:[0,11],pn_fast_wind_dm_gb:[0,11],pn_fast_wind_mdot_agb:[0,11],pn_fast_wind_mdot_gb:[0,11],pn_hall_fading_time_algorithm:[0,11],pn_hall_fading_time_algorithm_maximum:[0,11],pn_hall_fading_time_algorithm_minimum:[0,11],pn_resolv:[0,11],pn_resolve_maximum_envelope_mass:[0,11],pn_resolve_minimum_effective_temperatur:[0,11],pn_resolve_minimum_luminos:[0,11],pne:[0,11],pogg:[0,11],point:[0,2,4,5,9,11,17],poisson:[2,7],pol:[0,11],polytrop:[0,11],pop:12,pop_macro:12,popul:[0,2,3,5,6,8,9,11,17,19],population_id:7,population_nam:15,population_set:5,posit:[0,2,11],possibl:[0,1,2,4,6,9,11,14,17],post:[0,11,12],post_ce_adaptive_menv:[0,11],post_ce_envelope_dm_eagb:[0,11],post_ce_envelope_dm_gb:[0,11],post_ce_envelope_dm_tpagb:[0,11],post_ce_objects_have_envelop:[0,11],post_sn_orbit_bs:0,post_sn_orbit_method:[0,11],post_sn_orbit_tt98:0,postagb_legacy_log:[0,11],postagb_wind_gi:0,postagb_wind_krticka2020:0,postagb_wind_non:0,postagb_wind_use_gi:0,postagbwind:0,potenti:[0,11],power:[0,2,11],powerlaw:2,powerlaw_const:2,powerlaw_extrapolation_q:2,ppisn:[0,11],ppisn_farmer19:0,ppisn_non:0,ppisn_prescript:[0,11],ppn_envelope_mass:[0,11],pragma:12,pre:[0,11,16],pre_events_stardata:[0,11,12],pre_main_sequ:[0,11],pre_main_sequence_fit_lob:[0,11],precis:4,precod:[5,15],predefin:[2,15],predict:7,predictor:[0,11],prefer:[0,5,11],prefix:[0,11],prepar:2,prepare_dict:2,prescrib:0,prescript:[0,11,15],prescrit:[0,11],present:[2,4,5,15],preserv:[0,11],preset:16,pressur:[0,11],prev_stellar_type_1:15,prev_stellar_type_2:15,prevent:[0,7,11],previou:4,previous:[14,15],previous_stardata:[1,12,14,15],primari:[1,2,5,15,21],pringl:0,print:[4,6,7,11,12,13,14,15],print_help:[4,13],print_info:6,print_option_descript:6,print_structur:4,printf:[1,12,14,15],prior:[0,11],privat:[5,6,9],prob_dict:2,probability_weighted_mass:7,probabl:[0,1,2,5,6,7,11,12,15,16],probdist:[5,15],problem:[0,11],process:[0,4,5,7,11,15],profil:[0,11],progenitor:[0,11,15],program:[9,17],project:[0,11],proper:[6,12],properli:[0,11],properti:[0,4,7,16],prot1:[0,11],prot2:[0,11],prot3:[0,11],prot4:[0,11],provid:[0,2,5,7,11,15,18],pseudorandom:[0,11],publicli:12,puls:[0,11,21],pulsat:[0,11],pump:[0,11],purpos:[7,15,16],push_macro:12,put:[1,4,5,7,15,16],py_rinterpol:[9,17],pyenv:[9,11,17],pysiz:4,pytest:[9,17],python3:[9,11,17],python:[4,11,12,15],q_high_extrapolation_method:7,q_interpol:2,q_low_extrapolation_method:7,qcrit_bh:[0,11],qcrit_bs:0,qcrit_cheb:[0,11],qcrit_chen_han_formula:0,qcrit_chen_han_t:0,qcrit_cowd:[0,11],qcrit_degenerate_bh:[0,11],qcrit_degenerate_cheb:[0,11],qcrit_degenerate_cowd:[0,11],qcrit_degenerate_eagb:[0,11],qcrit_degenerate_gb:[0,11],qcrit_degenerate_hegb:[0,11],qcrit_degenerate_hehg:[0,11],qcrit_degenerate_hem:[0,11],qcrit_degenerate_hewd:[0,11],qcrit_degenerate_hg:[0,11],qcrit_degenerate_lmm:[0,11],qcrit_degenerate_m:[0,11],qcrit_degenerate_n:[0,11],qcrit_degenerate_onewd:[0,11],qcrit_degenerate_tpagb:[0,11],qcrit_eagb:[0,11],qcrit_gb:[0,11],qcrit_gb_bs:0,qcrit_gb_chen_han_formula:0,qcrit_gb_chen_han_t:0,qcrit_gb_ge2015:0,qcrit_gb_hjellming_webbink:0,qcrit_gb_q_no_comenv:0,qcrit_gb_temmink2021:0,qcrit_gb_vos2018:0,qcrit_ge2015:0,qcrit_hegb:[0,11],qcrit_hehg:[0,11],qcrit_hem:[0,11],qcrit_hewd:[0,11],qcrit_hg:[0,11],qcrit_hjellming_webbink:0,qcrit_lmm:[0,11],qcrit_m:[0,11],qcrit_n:[0,11],qcrit_onewd:[0,11],qcrit_q_no_comenv:0,qcrit_temmink2021:0,qcrit_tpagb:[0,11],qcrit_vos2018:0,qcrits_:[0,11],qcrits_degenerate_:[0,11],qdata:2,qlimit:2,quad:7,quadrat:[0,11],quadrulpl:[0,11],quadrupl:[0,2,7,11],quantiti:16,queri:14,queue:7,quickli:14,quit:[0,4,11],r_l:21,radau:0,radi:[0,11],radiat:[0,11],radii:[0,11,21],radiu:[0,1,11,12,15,16,21],radius_1:16,radius_2:16,ragb:21,raghavan2010_binary_fract:2,raghavan:2,rai:[0,11],railton:[0,11],rais:[0,4,7,11,15],ram:[0,11],ran:7,random:[0,7,11],random_count:14,random_se:[0,11,14],random_skip:[0,11],random_system:[0,11],random_systems_se:[0,11],rang:[0,2,5,7,11,14,15,19],rapid:0,rapidli:[0,11],rappaport:[0,11],rate:[0,2,11],rather:[0,4,5,7,9,11,12,14,15,17],ratio:[0,2,11,15,21],raw:[4,5,7,11,16,18],raw_output:4,reach:[0,11],reaction:[0,11],read:[3,4,14,15],real:[5,15],realli:[0,5,6,7,11,15],reason:[0,11],rebuild:[0,9,11,17],rebuilt:[9,17],recalcul:[0,11],receiv:4,recogn:15,recombin:[0,11],recommend:[1,3,5],recompil:[9,15,17],recurs:[4,5],recursive_change_key_to_float:4,recursive_change_key_to_str:4,red:[0,11],redhat:1,redshift:2,reduc:[0,11],reduct:7,regardless:16,region:[0,11],regist:15,reignit:[0,11],reimer:[0,11],reinstal:[9,17],reject:[0,11],rejects_in_log:[0,11],rejuven:[0,11],rel:[0,11],relat:[0,11],releas:[4,9,17],reliabl:11,remain:[0,11],remesh:[0,11],remnant:[0,11],remov:[0,4,5,11,14,15],remove_fil:4,renormalis:2,rentrop:[0,11],repeat:[0,7,11],repo:[9,17],report:[0,11,15],repositori:3,repres:7,represent:[4,5,15],reproduc:[0,11],requir:[0,2,4,11,14,15,16,18],reset:[0,11],reset_pref:[0,11],reset_star:[0,11],reset_stars_default:[0,11],resolut:[0,5,7,11,15],resolv:[0,11],reson:[0,11],respect:[0,2,11],rest:[2,5,15],restructuredtext:4,result:[0,1,2,4,5,7,9,11,14,15,17],result_arrai:2,result_dict:2,retain:[0,11],rethink:4,return_all_info:5,return_arglin:11,return_binary_c_default:5,return_binary_c_version_info:[4,5,13],return_compilation_dict:1,return_help:11,return_help_al:[4,11],return_maximum_mass_ratio_for_rlof:[11,21],return_minimum_orbit_for_rlof:[11,21],return_persistent_data_memaddr:11,return_population_set:5,return_store_memaddr:11,return_version_info:[4,11],revap_in:[0,11],revap_out:[0,11],revers:[0,11,16],reverse_tim:[0,11],revis:[0,4],rewrit:5,rhagavan:7,ri0005:15,rich:[0,11],riello:[0,11],rin:[0,11],ring:[0,11],risk:[5,15],ritter:[0,11],rk2:[0,11],rk4:[0,11],rlof:[0,11,21],rlof_angular_momentum_transfer_model:[0,11],rlof_angular_momentum_transfer_model_bs:0,rlof_angular_momentum_transfer_model_conserv:0,rlof_eccentric_as_circular:[0,11],rlof_entry_threshold:[0,11],rlof_f:[0,11],rlof_interpolation_binary_c:0,rlof_interpolation_bs:0,rlof_interpolation_method:[0,11],rlof_mdot_factor:[0,11],rlof_mdot_modul:[0,11],rlof_method:[0,11],rlof_method_adapt:0,rlof_method_adaptive2:0,rlof_method_bs:0,rlof_method_claei:0,rlof_method_ritt:0,rlof_nonconservative_gamma_donor:0,rlof_nonconservative_gamma_isotrop:0,rlof_radiation_correct:[0,11],rlof_transition_objects_escap:[0,11],rob:[0,2,11,21],robert:[9,17],roch:[0,11,21],roche_lob:21,rochelob:21,rol1:14,rol2:14,room:[5,15],root:[9,17],rotat:[0,2,11],rotation:[0,11],rotationally_enhanced_expon:[0,11],rotationally_enhanced_mass_loss:[0,11],rotationally_enhanced_massloss:[0,11],rotationally_enhanced_massloss_angmom:0,rotationally_enhanced_massloss_langer_formula:[0,11],rotationally_enhanced_massloss_langer_formula_and_angmom:0,rotationally_enhanced_massloss_non:0,rout:[0,11],routin:[0,3,5,9,11,16],row:[14,16],rring:[0,11],rssd:2,rst:[4,6],rsun:16,rubric:5,run:[0,1,3,4,5,7,9,11,17,18],run_popul:11,run_system:[11,12,13,14,16,18],run_system_wrapp:[9,10,12,14],run_wrapp:3,run_zero_probability_system:7,runtim:[1,7],russel:[0,11],rzam:21,s_option:7,safe:15,sai:[0,11],said:[0,11],same:[0,4,7,9,11,14,17],sampl:[0,2,5,11,15,19],sample_valu:2,sampler:9,sana12:[2,15],sana:2,save:[0,1,2,11,12,15],save_pre_events_stardata:[0,11],scalo:2,scanf:0,scheme:[0,11],schneider:[0,11],schroeder:[0,11],script:[3,9,12,17],sdb:[0,11],sdist:[9,17],sdo:[0,11],search:9,second:[0,2,4,11,16],secondari:[2,21],section:[2,4,8,9,11,15,17],see:[0,5,9,11,12,13,14,15,16,17],seed:[0,11],seem:[9,16,17],seen:4,segment:19,seitenzahl2013_model:[0,11],seitenzahl:[0,11],select:[0,4,11,14],selected_head:4,selector:[0,11],self:[5,7,14,15],semi:[0,11],sent:[0,11],sentenc:1,sep:[2,5,14,15,21],sep_max:15,sep_min:15,separ:[0,2,4,5,6,11,12,14,15,16,21],separation_quadrupl:[0,11],separation_tripl:[0,11],separta:[0,11],seper:15,sequenc:[0,11,12],seri:[0,11],serialis:[4,5],serv:4,server:5,set:[0,1,2,3,4,5,6,7,9,12,13,14,16,17],set_moe_di_stefano_set:5,set_opt:2,setup:[9,15,17,18],sever:[6,7,13,15,16,18],sfh:2,shara:[0,11],share:[1,7,14,18],shared_lib_filenam:12,shell:[0,11],shellular:0,shorten:[0,11],should:[0,1,2,5,6,7,9,11,14,15,16,17,18],shouldn:[0,4,11],show:[0,3,7,11,14,15,16],show_plot:16,show_stellar_typ:16,shown:[0,11,16],shrinkagb:14,side:15,siess:[0,11],sigma:2,silent:4,sill:[0,11],simplest:14,simpli:[0,11],simul:[0,1,11,12,15],simulation_:5,sinc:[4,16],singl:[0,2,3,5,7,11,15,16],single_star_lifetim:[11,12,14],sit:[0,11],site:11,situat:11,size:[4,7],skip:[0,4,7,9,11,17],skipkei:4,slightli:11,slope:2,slow:[0,11],slower:[0,11],slurm:[5,7,8],slurm_grid:5,small:[0,11],small_envelope_method:[0,11],small_envelope_method_bs:0,small_envelope_method_miller_bertolami:0,smaller:[0,11],sn_impulse_liu2015:0,sn_impulse_non:0,sn_impulse_wheeler1975:0,sn_kick_companion_a:[0,11],sn_kick_companion_aic_bh:[0,11],sn_kick_companion_bh_bh:[0,11],sn_kick_companion_bh_n:[0,11],sn_kick_companion_ecap:[0,11],sn_kick_companion_grb_collapsar:[0,11],sn_kick_companion_hestaria:[0,11],sn_kick_companion_ia_chand:[0,11],sn_kick_companion_ia_chand_co:[0,11],sn_kick_companion_ia_eld:[0,11],sn_kick_companion_ia_h:[0,11],sn_kick_companion_ia_he_co:[0,11],sn_kick_companion_ia_hybrid_hecowd:[0,11],sn_kick_companion_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_companion_ibc:[0,11],sn_kick_companion_ii:[0,11],sn_kick_companion_iia:[0,11],sn_kick_companion_ns_n:[0,11],sn_kick_companion_phdi:[0,11],sn_kick_companion_pisn:[0,11],sn_kick_companion_ppisn:[0,11],sn_kick_companion_tz:[0,11],sn_kick_companion_wdkick:[0,11],sn_kick_dispersion_aic_bh:[0,11],sn_kick_dispersion_bh_bh:[0,11],sn_kick_dispersion_bh_n:[0,11],sn_kick_dispersion_ecap:[0,11],sn_kick_dispersion_grb_collapsar:[0,11],sn_kick_dispersion_ia_hybrid_hecowd:[0,11],sn_kick_dispersion_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_dispersion_ibc:[0,11],sn_kick_dispersion_ii:[0,11],sn_kick_dispersion_ns_n:[0,11],sn_kick_dispersion_phdi:[0,11],sn_kick_dispersion_pisn:[0,11],sn_kick_dispersion_ppisn:[0,11],sn_kick_dispersion_tz:[0,11],sn_kick_distribution_aic_bh:[0,11],sn_kick_distribution_bh_bh:[0,11],sn_kick_distribution_bh_n:[0,11],sn_kick_distribution_ecap:[0,11],sn_kick_distribution_grb_collapsar:[0,11],sn_kick_distribution_ia_hybrid_hecowd:[0,11],sn_kick_distribution_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_distribution_ibc:[0,11],sn_kick_distribution_ii:[0,11],sn_kick_distribution_ns_n:[0,11],sn_kick_distribution_phdi:[0,11],sn_kick_distribution_pisn:[0,11],sn_kick_distribution_ppisn:[0,11],sn_kick_distribution_tz:[0,11],sn_none:12,sn_type:12,sneia:[0,11],snia:[0,11],snippet:[11,14],solar:[0,2,11,13,21],solver:[0,11],solver_forward_eul:0,solver_predictor_corrector:0,solver_rk2:0,solver_rk4:0,some:[0,1,2,5,7,9,11,12,13,14,15,16,17],someth:[0,5,11,14],sometim:13,somewhat:15,soon:19,sort:4,sort_kei:4,sourc:[1,2,4,5,6,7,10,16,18,19,21],source_file_filenam:7,source_list:5,sourcecod:[9,11,12,17],sourcefile_nam:1,space:[0,5,11,15,19],spacing_funct:[9,10],spacingfunc:[5,15],spacingfunct:[5,15],special:[0,11,15],specif:[0,4,11,13,14,16],specifi:[0,7,11],spectral:2,speed:[0,7,11],speedtest:[0,11],spent:4,spera:0,spheric:[0,11],spin:[0,11],spinrat:[0,11],split:[0,7,11,14,15],split_lin:14,splitlin:[11,12,14,15],splitpoint:[0,11],spread:5,sqrt:[0,11],src:[0,9,11,12,17],stabil:[0,11],stabl:[0,11],stancliff:[0,11],standard:[0,2,11],star:[1,2,7,9,11,12,13,14,15,16,21],star_with_no_mass:0,starcount:15,stardata:[0,1,11,12,14,15],stardata_dump_filenam:[0,11],stardata_load_filenam:[0,11],stardata_t:12,start:[0,1,4,5,6,7,11,14,15],start_tim:[0,11],start_timestamp:15,startrack:0,startswith:14,state:[0,11],statement:[1,12,14,15],statist:[0,11],statu:[0,1,11,15],stderr:[0,11],stdout:4,steadi:[0,11],stefan:16,stefano:[4,5,9,15],stellar:[0,2,7,11,16,20],stellar_structure_algorithm:[0,11],stellar_structure_algorithm_external_funct:0,stellar_structure_algorithm_mint:0,stellar_structure_algorithm_modified_bs:0,stellar_structure_algorithm_non:0,stellar_typ:[1,9,10,12,14,15,16],stellar_type_1:[0,11,15,16],stellar_type_2:[0,11,15,16],stellar_type_3:[0,11],stellar_type_4:[0,11],stellar_type_dict:20,stellar_type_dict_short:20,step:[4,5,12,14,15,16,19],stepsiz:[5,15],stick:7,stiff:[0,11],still:[1,7,12],stop:[0,4,11],stopfil:[0,11],storag:[0,11],store:[0,2,3,4,5,7,9,14,15,17,21],store_capsul:11,store_memaddr:[11,21],str:[1,4,5,6,15,16],straight:5,straightforward:15,straniero:[0,11],strength:[0,11],strict:4,string:[0,1,3,4,5,6,7,11,13,14,15,16,18],strip:[0,11,14],stronger:[0,11],struct:[0,11,12],structur:[0,4,7,11,16],stuff:[4,7,14,15,16],style:[0,11],sub:[0,4,11],subdict:4,subject:[0,11],sublumin:[0,11],submit:9,subroutin:8,subsequ:[0,11],subtract:4,subtract_dict:4,succe:[0,11],suggest:[0,9,11,17],suit:[9,17],sum:[0,11],sundial:[0,11],supercrit:[0,11],supernova:[0,7,11],superwind:[0,11],superwind_mira_switchon:[0,11],sure:[2,5,7,9,14,15,16,17,18],surfac:[0,11],surrei:15,surviv:[0,11],survivor:[0,11],switcher:[0,11],symmetr:[0,11],synchron:[0,11],synonym:[0,11],synthesi:[7,9,15,17],system:[0,3,4,5,7,9,11,12,15,16,17,18],system_gener:[5,15],tabl:[0,2,11],take:[0,2,4,5,7,11,15,18],taken:[0,4,11,12],tar:[9,17],target:[1,6],task:[0,2,4,5,6,8,11,15,16,18,19,21],tauri:[0,11],tbse:[0,11],technic:[12,15],teff:[0,2,11],teff_1:16,teff_2:16,teff_postagb_max:0,teff_postagb_min:0,tell:4,temp_dir:[4,14,15],temperatur:[0,2,11,16],termin:[1,9,12,15,17],test:[0,4,5,7,9,11,14,15,17,21],test_data:0,test_func:11,test_logfil:14,test_pop:15,text:[4,6],than:[0,2,4,7,9,11,15,17],thats:15,thei:[0,2,4,5,7,11,15,16],thelog:[0,11],them:[2,4,5,11,15],themselv:[2,4],thermal:[0,2,11,21],thermally_pulsing_asymptotic_giant_branch:0,thermohalin:[0,11],thesi:[0,11],thi:[0,1,2,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,21],thick:[0,11],thick_disc_end_ag:[0,11],thick_disc_logg_max:[0,11],thick_disc_logg_min:[0,11],thick_disc_start_ag:[0,11],thin:[0,11],thing:[0,2,4,5,6,11,15,18],think:[0,4,5,11],third:[0,2,11],third_dup:[0,11],third_dup_multipli:[0,11],thorn:[0,11],those:[4,5,9,15,17],thread:7,thread_id:7,three:[0,2,11,15],three_part_powerlaw:[2,15],threshold:[0,4,7,11],through:[5,11,14,15,16,18],throughout:[5,15],tidal:[0,11],tidal_strength_factor:[0,11],tide:[0,11],tides_convective_damp:[0,11],tides_hurley2002:[0,11],tides_zahn1989:[0,11],time:[0,1,2,4,5,7,9,11,12,14,15,16,17],timescal:[0,11],timestamp:7,timestep:[0,11,12,14],timestep_limit:[0,11],timestep_log:[0,11],timestep_modul:[0,11],timestep_multipli:[0,11],timestep_solver_factor:[0,11],tinslei:2,titl:6,tmp:[0,4,9,11,14,15,17],tmp_dir:[5,7,14,15],tmp_tabl:2,todo:[0,1,2,4,5,6,7,11,13,15,16,18,19,21],toler:[0,11],too:[0,4,7,9,11,17,18],took:15,top:15,topic:[0,11],torqu:[0,11],total:[0,2,4,5,7,11,15,16],total_count:15,total_mass_run:15,total_prob:15,total_probability_weighted_mass_run:15,tout:[0,11,21],tout_pringle_1992_multipli:0,tpagb:[0,11],tpagb_reimers_eta:[0,11],tpagb_wind_beasor_etal_2020:0,tpagb_wind_bloeck:0,tpagb_wind_goldman_etal_2017:0,tpagb_wind_mattsson:0,tpagb_wind_reim:0,tpagb_wind_rob_cwind:0,tpagb_wind_van_loon:0,tpagb_wind_vw93_karaka:0,tpagb_wind_vw93_karakas_carbon_star:0,tpagb_wind_vw93_orig:0,tpagb_wind_vw93_orig_carbon_star:0,tpagbwind:[0,11],tpagbwindfac:[0,11],traceback:4,track:[7,16],trade:[0,11],transfer:[0,11],transform:[0,4,11],transit:[0,11],treat:[0,11],trigger:[0,11],trio:15,tripl:[0,2,7,11],truli:[0,11],tupl:1,turn:[0,4,11,14,15],two:[0,4,11,12,20,21],txt:[5,14,15,18],type:[0,1,2,4,5,6,7,11,14,15,16,19,20,21],type_chng:14,type_ia_mch_supernova_algorithm:[0,11],type_ia_sub_mch_supernova_algorithm:[0,11],typic:[0,11],ubvri:[0,11],ugriv:[0,11],unavail:0,uncom:[5,14,15],undef:12,under:[14,19],undergo:[0,11],understand:5,undescrib:6,uniform:2,union:[2,4,5,15,19,21],uniqu:[4,5,7,15],unit:[0,11,13,21],univari:[0,11],unknown:18,unless:[1,5,7],unload:5,unpars:11,unrecogn:[9,17],unsign:0,unstabl:[0,11],until:[0,2,4,11],unus:[0,7,11],unweight:15,updat:[2,4,5,9,15,17],update_dict:[4,13],upper:[0,2,11,19],usag:[0,3],use:[0,2,4,5,7,8,9,11,12,13,14,15,16,17,18],use_astropy_valu:16,use_datadir:[5,15],use_fixed_timestep_:[0,11],use_periastron_roche_radiu:[0,11],use_tabular_intershell_abundances_karakas_2012:[0,11],used:[0,1,2,4,5,7,11,12,13,14,15,16],useful:[0,4,5,7,9,11,13,14,15,17,18,21],useful_func:[9,10],user:[1,2,4,5,6,7,12,18],uses:[0,7,11,12,15],using:[0,1,5,9,12,13,14,17],usual:[0,2,7,11,15],util:[1,2,4,5,6,11,12,13,14,15,16,18,19,21],val:2,valid:[0,2,4,11,12],valu:[0,1,2,4,5,6,7,11,13,14,15,16],value_lin:14,valueerror:15,valuerang:[5,15],values_arrai:14,van:[0,11],vandenheuvel_log:[0,11],vari:[0,11,15],variabl:[0,3,4,5,7,11],variant:[0,11],variou:[0,11],vassiliadi:[0,11],veloc:[0,2,11],verbos:[1,2,4,7,9,14,15,17],verbose_print:4,veri:[0,5,11,12,14,15,19],versa:21,version:[0,4,5,9,11,13,15,17],version_info:4,version_info_dict:13,version_info_str:4,version_onli:[0,11],via:[3,5,7,11,12,15,16],vice:21,vink:[0,11],virtual:[9,17],virtualenviron:[9,17],viscos:[0,11],viscou:[0,11],visibl:12,visit:9,volum:[0,11],vrot1:[0,11],vrot2:[0,11],vrot3:[0,11],vrot4:[0,11],vrot_breakup:0,vrot_bs:0,vrot_non_rot:0,vrot_sync:0,vw93:[0,11],vw93_eagb_wind_spe:[0,11],vw93_mira_shift:[0,11],vw93_multipli:[0,11],vw93_tpagb_wind_spe:[0,11],vwind:[0,11],vwind_beta:[0,11],vwind_multipli:[0,11],wai:[0,4,5,7,11,14,16],wang:[0,11],want:[0,2,4,5,6,7,11,12,13,15,16],warmup_cpu:[0,11],warn:[0,11,14,15],wave:[0,11,15],wd_accretion_rate_new_giant_envelope_lower_limit_helium_donor:[0,11],wd_accretion_rate_new_giant_envelope_lower_limit_hydrogen_donor:[0,11],wd_accretion_rate_new_giant_envelope_lower_limit_other_donor:[0,11],wd_accretion_rate_novae_upper_limit_helium_donor:[0,11],wd_accretion_rate_novae_upper_limit_hydrogen_donor:[0,11],wd_accretion_rate_novae_upper_limit_other_donor:[0,11],wd_kick:[0,11],wd_kick_at_every_puls:0,wd_kick_at_given_puls:0,wd_kick_direct:[0,11],wd_kick_end_agb:0,wd_kick_first_rlof:0,wd_kick_pulse_numb:[0,11],wd_kick_when:[0,11],wd_sigma:[0,11],wdwd_merger_algorithm:[0,11],wdwd_merger_algorithm_bs:0,wdwd_merger_algorithm_chen2016:0,wdwd_merger_algorithm_perets2019:0,weight:[0,7,11],well:[0,4,7,9,11,12,14,17],were:[4,15],what:[0,1,2,4,5,6,7,9,11,12,14,15,17,18],whatev:[0,5,9,12,17],wheeler:[0,11],when:[0,1,2,4,5,6,7,9,11,13,14,15,17,18],whenev:[9,17],where:[0,1,2,4,5,6,7,9,11,15,17],whether:[0,2,4,5,6,7,11,13,15,16,21],which:[0,1,2,4,5,6,7,9,11,12,13,14,15,17,18,21],whichev:7,white:[0,11],white_dwarf_cooling_carrasco2014:[0,11],white_dwarf_cooling_mestel:[0,11],white_dwarf_cooling_mestel_modifi:[0,11],white_dwarf_cooling_model:[0,11],white_dwarf_radius_carrasco2014:[0,11],white_dwarf_radius_model:[0,11],white_dwarf_radius_mu:[0,11],white_dwarf_radius_nauenberg1972:[0,11],whole:[5,7,12],width:[0,11],wind:[0,11],wind_algorithm_binary_c_2020:0,wind_algorithm_hurley2002:0,wind_algorithm_non:0,wind_algorithm_schneider2018:0,wind_angmom_loss_bs:0,wind_angmom_loss_lw:0,wind_angmom_loss_lw_hybrid:0,wind_angmom_loss_spherically_symmetr:0,wind_angular_momentum_loss:[0,11],wind_disc_angmom_fract:[0,11],wind_disc_mass_fract:[0,11],wind_djorb_fac:[0,11],wind_gas_to_dust_ratio:[0,11],wind_lbv_luminosity_lower_limit:[0,11],wind_mass_loss:[0,11],wind_multiplier_:[0,11],wind_nieuwenhuijzen_luminosity_lower_limit:[0,11],wind_type_multiplier_:[0,11],within:[0,4,5,9,11,12,13,15,17],without:[2,5,7,12,14],won:[0,11,14],wood:[0,11],work:[0,4,9,11,12,14,16,17],would:[0,4,11,15,16],wouldn:[5,15],wr_wind:[0,11],wr_wind_bs:0,wr_wind_eldridg:0,wr_wind_fac:[0,11],wr_wind_maeder_meynet:0,wr_wind_nugis_lam:0,wrap:[1,12],wrapper:[4,11,12,14,21],write:[1,4,5,6,7,11,12,14,15,18],write_binary_c_calls_to_fil:[5,15],write_binary_c_parameter_descriptions_to_rst_fil:4,write_grid_options_to_rst_fil:6,write_logfil:11,written:[5,6,7,11,14,15,18],written_data:14,wrlof_mass_transf:[0,11],wrlof_method:[0,11],wrlof_non:0,wrlof_q_depend:0,wrlof_quadrat:0,wrong:[9,17],wrwindfac:[0,11],wtts2:[0,11],wtts_log:[0,11],www:[0,2,11],x86_64:11,year:[0,2,11],yet:[0,4,7,11,16],yield:[0,11],you:[0,1,4,5,6,7,9,11,12,14,15,16,17,21],young:[0,11],your:[7,9,12,14,17],yourself:[15,16],zahn:[0,11],zam:[0,2,11,18,21],zams_collis:21,zams_mass:15,zams_mass_1:15,zams_mass_2:15,zero:[0,1,7,11],zero_ag:[12,14,15],zero_prob_stars_skip:15,zone:[0,11],zoom:[0,11],zoomfac_multiplier_decreas:[0,11],zoomfac_multiplier_increas:[0,11],zsolar:2,zytkow:[0,11]},titles:["Binary_c parameters","custom_logging_functions module","distribution_functions module","Example notebooks","functions module","grid_class module","Grid options and descriptions","Population grid code options","hpc_functions module","Welcome to binary_c-python\u2019s documentation!","Binarycpython code","Using the API functionality of binarycpython","Using custom logging routines with binarycpython","Extra features and functionality of binarycpython","Running individual systems with binarycpython","Running populations with binarycpython","plot_functions module","Python module for binary_c","run_system_wrapper module","spacing_functions module","stellar_types module","useful_funcs module"],titleterms:{"function":[4,11,13,14,15],"public":7,Adding:15,Using:[11,12],about:13,after:[9,17],algorithm:0,api:[11,12,14],binari:0,binary_c:[0,9,11,13,17],binarycpython:[10,11,12,13,14,15],build:[9,13,17],code:[7,10],compact:12,custom:12,custom_logging_funct:1,descript:6,dictionari:13,directli:12,distribution_funct:2,document:[9,17],environ:[9,17],evolut:12,evolv:15,exampl:[3,9,11,12,13,15,17],extra:13,faq:[9,17],featur:13,free:11,from:[9,11,12,17],full:15,get:[11,13],grid:[6,7,15],grid_class:5,handl:15,help:13,hpc_function:8,indic:9,individu:14,inform:[11,13],input:0,instal:[9,17],instruct:[9,17],issu:[9,17],log:[12,15],mass:12,misc:0,modif:13,modul:[1,2,4,5,8,9,16,17,18,19,20,21],moe:7,note:[9,17],notebook:3,noteworthi:15,nucsyn:0,object:[12,14,15],option:[6,7],output:[0,15],paramet:[0,13],pars:13,pip:[9,17],plot_funct:16,popul:[7,12,14,15],privat:7,python:[9,17],requir:[9,17],routin:12,run:[12,14,15],run_system_wrapp:18,run_wrapp:14,sampler:7,script:15,section:0,set:[11,15],singl:14,sourc:[9,17],spacing_funct:19,star:0,stefano:7,stellar_typ:20,store:11,string:12,supernova:12,system:14,tabl:9,usag:[9,11,12,17],useful_func:21,using:11,variabl:[9,15,17],via:[9,14,17],welcom:9,when:12}}) \ No newline at end of file +Search.setIndex({docnames:["binary_c_parameters","custom_logging_functions","distribution_functions","example_notebooks","functions","grid","grid_options_defaults","grid_options_descriptions","hpc_functions","index","modules","notebook_api_functionality","notebook_custom_logging","notebook_extra_features","notebook_individual_systems","notebook_luminosity_function_binaries","notebook_luminosity_function_single","notebook_population","plot_functions","readme_link","run_system_wrapper","spacing_functions","stellar_types","useful_funcs"],envversion:{"sphinx.domains.c":2,"sphinx.domains.changeset":1,"sphinx.domains.citation":1,"sphinx.domains.cpp":3,"sphinx.domains.index":1,"sphinx.domains.javascript":2,"sphinx.domains.math":2,"sphinx.domains.python":2,"sphinx.domains.rst":2,"sphinx.domains.std":1,"sphinx.ext.todo":2,"sphinx.ext.viewcode":1,nbsphinx:3,sphinx:56},filenames:["binary_c_parameters.rst","custom_logging_functions.rst","distribution_functions.rst","example_notebooks.rst","functions.rst","grid.rst","grid_options_defaults.rst","grid_options_descriptions.rst","hpc_functions.rst","index.rst","modules.rst","notebook_api_functionality.ipynb","notebook_custom_logging.ipynb","notebook_extra_features.ipynb","notebook_individual_systems.ipynb","notebook_luminosity_function_binaries.ipynb","notebook_luminosity_function_single.ipynb","notebook_population.ipynb","plot_functions.rst","readme_link.rst","run_system_wrapper.rst","spacing_functions.rst","stellar_types.rst","useful_funcs.rst"],objects:{"binarycpython.utils":{custom_logging_functions:[1,0,0,"-"],distribution_functions:[2,0,0,"-"],functions:[4,0,0,"-"],grid:[5,0,0,"-"],grid_options_defaults:[6,0,0,"-"],hpc_functions:[8,0,0,"-"],plot_functions:[18,0,0,"-"],run_system_wrapper:[20,0,0,"-"],spacing_functions:[21,0,0,"-"],stellar_types:[22,0,0,"-"],useful_funcs:[23,0,0,"-"]},"binarycpython.utils.custom_logging_functions":{autogen_C_logging_code:[1,1,1,""],binary_c_log_code:[1,1,1,""],binary_c_write_log_code:[1,1,1,""],compile_shared_lib:[1,1,1,""],create_and_load_logging_function:[1,1,1,""],from_binary_c_config:[1,1,1,""],return_compilation_dict:[1,1,1,""]},"binarycpython.utils.distribution_functions":{"const":[2,1,1,""],Arenou2010_binary_fraction:[2,1,1,""],Izzard2012_period_distribution:[2,1,1,""],Kroupa2001:[2,1,1,""],Moe_di_Stefano_2017_multiplicity_fractions:[2,1,1,""],Moe_di_Stefano_2017_pdf:[2,1,1,""],build_q_table:[2,1,1,""],calc_P_integral:[2,1,1,""],calc_e_integral:[2,1,1,""],calc_total_probdens:[2,1,1,""],calculate_constants_three_part_powerlaw:[2,1,1,""],cosmic_SFH_madau_dickinson2014:[2,1,1,""],duquennoy1991:[2,1,1,""],fill_data:[2,1,1,""],flat:[2,1,1,""],flatsections:[2,1,1,""],gaussian:[2,1,1,""],gaussian_func:[2,1,1,""],gaussian_normalizing_const:[2,1,1,""],get_integration_constant_q:[2,1,1,""],get_max_multiplicity:[2,1,1,""],imf_chabrier2003:[2,1,1,""],imf_scalo1986:[2,1,1,""],imf_scalo1998:[2,1,1,""],imf_tinsley1980:[2,1,1,""],interpolate_in_mass_izzard2012:[2,1,1,""],ktg93:[2,1,1,""],linear_extrapolation_q:[2,1,1,""],merge_multiplicities:[2,1,1,""],normalize_dict:[2,1,1,""],number:[2,1,1,""],poisson:[2,1,1,""],powerlaw:[2,1,1,""],powerlaw_constant:[2,1,1,""],powerlaw_extrapolation_q:[2,1,1,""],prepare_dict:[2,1,1,""],raghavan2010_binary_fraction:[2,1,1,""],sana12:[2,1,1,""],set_opts:[2,1,1,""],three_part_powerlaw:[2,1,1,""]},"binarycpython.utils.functions":{AutoVivificationDict:[4,2,1,""],BinaryCEncoder:[4,2,1,""],Capturing:[4,2,1,""],bin_data:[4,1,1,""],binarycDecoder:[4,2,1,""],binaryc_json_serializer:[4,1,1,""],call_binary_c_config:[4,1,1,""],catchtime:[4,2,1,""],convert_bytes:[4,1,1,""],convfloat:[4,1,1,""],count_keys_recursive:[4,1,1,""],create_arg_string:[4,1,1,""],create_hdf5:[4,1,1,""],custom_sort_dict:[4,1,1,""],datalinedict:[4,1,1,""],example_parse_output:[4,1,1,""],extract_ensemble_json_from_string:[4,1,1,""],filter_arg_dict:[4,1,1,""],format_ensemble_results:[4,1,1,""],get_arg_keys:[4,1,1,""],get_defaults:[4,1,1,""],get_help:[4,1,1,""],get_help_all:[4,1,1,""],get_help_super:[4,1,1,""],get_moe_di_stefano_dataset:[4,1,1,""],get_size:[4,1,1,""],handle_ensemble_string_to_json:[4,1,1,""],imports:[4,1,1,""],inspect_dict:[4,1,1,""],is_capsule:[4,1,1,""],load_logfile:[4,1,1,""],make_build_text:[4,1,1,""],merge_dicts:[4,1,1,""],multiply_values_dict:[4,1,1,""],output_lines:[4,1,1,""],pad_output_distribution:[4,1,1,""],parse_binary_c_version_info:[4,1,1,""],recursive_change_key_to_float:[4,1,1,""],recursive_change_key_to_string:[4,1,1,""],remove_file:[4,1,1,""],return_binary_c_version_info:[4,1,1,""],subtract_dicts:[4,1,1,""],temp_dir:[4,1,1,""],update_dicts:[4,1,1,""],verbose_print:[4,1,1,""],write_binary_c_parameter_descriptions_to_rst_file:[4,1,1,""]},"binarycpython.utils.functions.BinaryCEncoder":{"default":[4,3,1,""]},"binarycpython.utils.functions.Capturing":{__enter__:[4,3,1,""],__exit__:[4,3,1,""]},"binarycpython.utils.functions.binarycDecoder":{decode:[4,3,1,""]},"binarycpython.utils.functions.catchtime":{__enter__:[4,3,1,""],__exit__:[4,3,1,""]},"binarycpython.utils.grid":{Population:[5,2,1,""]},"binarycpython.utils.grid.Population":{Moe_di_Stefano_2017:[5,3,1,""],add_grid_variable:[5,3,1,""],clean:[5,3,1,""],evolve:[5,3,1,""],evolve_single:[5,3,1,""],export_all_info:[5,3,1,""],parse_cmdline:[5,3,1,""],rename_grid_variable:[5,3,1,""],return_all_info:[5,3,1,""],return_binary_c_defaults:[5,3,1,""],return_binary_c_version_info:[5,3,1,""],return_population_settings:[5,3,1,""],set:[5,3,1,""],set_moe_di_stefano_settings:[5,3,1,""],update_grid_variable:[5,3,1,""],vb1print:[5,3,1,""],write_binary_c_calls_to_file:[5,3,1,""]},"binarycpython.utils.grid_options_defaults":{grid_options_description_checker:[6,1,1,""],grid_options_help:[6,1,1,""],print_option_descriptions:[6,1,1,""],write_grid_options_to_rst_file:[6,1,1,""]},"binarycpython.utils.plot_functions":{color_by_index:[18,1,1,""],dummy:[18,1,1,""],parse_function_hr_diagram:[18,1,1,""],parse_function_masses:[18,1,1,""],parse_function_orbit:[18,1,1,""],plot_HR_diagram:[18,1,1,""],plot_masses:[18,1,1,""],plot_orbit:[18,1,1,""],plot_system:[18,1,1,""]},"binarycpython.utils.run_system_wrapper":{run_system:[20,1,1,""]},"binarycpython.utils.spacing_functions":{"const":[21,1,1,""]},"binarycpython.utils.useful_funcs":{calc_period_from_sep:[23,1,1,""],calc_sep_from_period:[23,1,1,""],maximum_mass_ratio_for_RLOF:[23,1,1,""],minimum_period_for_RLOF:[23,1,1,""],minimum_separation_for_RLOF:[23,1,1,""],ragb:[23,1,1,""],roche_lobe:[23,1,1,""],rzams:[23,1,1,""],zams_collision:[23,1,1,""]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"000":14,"0000":14,"0000000000000002":16,"0000000000000004":16,"000000000000e":14,"0001":[11,23],"000122339":17,"000161974":17,"000214449":17,"000220016":17,"000283924":17,"000287968":17,"00036002859999999996":16,"000375908":17,"00039801020000000003":16,"000497691":17,"000498487":17,"00065893":17,"0007":2,"0007310379999999999":16,"0007493004":16,"000869303":16,"000872405":17,"001":[0,11],"00115504":17,"001171479":16,"0014346559999999999":16,"00152924":17,"00202467":17,"002380189":16,"00283037":16,"00321118":16,"0037453900000000004":16,"0045385":16,"004698855121516278":17,"00515685":16,"006221155214163634":17,"00632092":11,"008236638755149857":17,"00921541":16,"00e":15,"0104553":16,"010905083645619543":17,"012246630357e":17,"0141":11,"014776889999999999":16,"0164166":16,"01e":15,"0212294":16,"021960493499e":17,"024868380796643753":17,"024868380796643757":17,"025":16,"0268827":16,"02e":15,"030004499999999996":16,"030499912298e":17,"035000000000004":16,"0434":17,"044142002936e":12,"044402888438054094":17,"04440288843805411":17,"044572277695e":12,"044654032097e":12,"045084306856e":12,"04e":15,"050651207308e":12,"05128ef4c5fe4274a0356c3e99e2f2d2":17,"054":2,"057525":15,"05e":15,"077":15,"077117":15,"0771478":16,"07e":15,"080":15,"080367":15,"0820":[0,11],"084":15,"084369":15,"086":15,"08e":15,"08f8230453084e4ca6a2391d45ce658b":16,"08msun":[0,11],"0902":[0,11],"094409257247e":17,"0967":17,"09e":15,"0fa295ee5c76444bace8fd0ee17a3e11":15,"0mb":15,"0mb1656":15,"0x7f351ff53810":15,"0x7f351ff539f0":15,"0x7f531bc3b6a8":17,"0x7fa6a45ed180":11,"0x7fb4d41ebbf8":14,"100":[0,2,11,15,16],"1000":[0,7,11],"1003":15,"1015":15,"1025":15,"1033":15,"1040":15,"1048":15,"105":16,"1057":15,"1062":15,"1069":15,"1077":15,"108":17,"1085":[14,15],"1091":15,"1099":15,"10e":15,"10t15":15,"11003":14,"1114":15,"1126":15,"1134":15,"1139":15,"1148":15,"115":2,"1156":15,"11582":14,"1162":15,"1168":15,"117":15,"117391":15,"1177":15,"1181":15,"1187":15,"1194":15,"119437":15,"11973310000000001":16,"11e":15,"120000":[0,11],"1202":15,"1219":15,"1228":15,"12325":14,"1234":15,"123795595728e":17,"1243":15,"12457":14,"12460":14,"12461":14,"125":[0,11,16],"12500":0,"1251":15,"1260":15,"126435":15,"1268":15,"1276":15,"1282":15,"1289":15,"1295":15,"12e":[1,12,14,15,16,17],"1301":14,"1302":14,"1309":15,"1323":15,"1332":15,"1338":15,"134":17,"1346":15,"13461":14,"1355":15,"13567":12,"1359":15,"13626":17,"1366":15,"1376":15,"1383104324341":15,"138353":15,"1384":15,"139293101586e":17,"1393":15,"13e":15,"13e3":[0,11],"1403":2,"1423":15,"1435":15,"1443":15,"1445":15,"14461":14,"1448":15,"1454":15,"1455":15,"1459":15,"1465":15,"1474":15,"1482":15,"1485":15,"1487":15,"1496":15,"14e":15,"150":[15,16,17],"15000":[0,11,12,14,17],"1509":15,"1523":15,"1531":15,"1537":15,"1545":15,"1555":15,"1564":15,"1574":15,"15740832333567983":15,"1584":15,"1594":15,"15msun":2,"16018641159091498":15,"1607":15,"1617":14,"1618":[14,15],"1618606489196724":15,"1619":14,"1620":14,"1621":14,"1621c23a5":0,"1628":15,"1629459533":17,"1629459536":17,"1631124829":16,"1631124830":16,"1631283248":15,"1631284043":15,"1635":15,"1645":15,"1655":15,"1664":15,"1674":15,"1684":15,"1691":15,"1699":15,"16e":15,"17005450973840136":15,"17089":14,"1713":15,"1725":15,"1735":15,"1745":15,"175":15,"1755":15,"1763":15,"1767":15,"1776":15,"1785":15,"1793":15,"17e":15,"1801":15,"1812":15,"181971798545e":17,"1822":15,"1830":15,"1839":15,"1847":15,"1855":15,"1864":15,"186492":15,"1865":12,"1873":15,"1884":15,"189097":16,"1895":15,"18e":15,"190":0,"1907":15,"1916":15,"1926":15,"1936":15,"1943278312683":15,"1946":15,"1951":[0,11],"1956":15,"1958354":15,"1961345":16,"1966":15,"1972":[0,11],"1975":[0,11],"1976":15,"197x":[0,11],"1980":2,"1983":23,"1986":[0,2,11],"1987":15,"1989":[0,11],"1991":2,"1992":[0,11],"1993":[0,11],"1996":23,"1998":[0,2,11,15],"1999":[0,11],"1ckzg0p9":[9,19],"1dex":[15,16],"1e2":[0,11],"1e9":[0,11],"1mb":15,"200":[0,11],"2000":[0,11,15],"2001":[2,16],"2002":[0,11],"2003":[0,2,11],"2004":[0,11],"2005":[0,11],"2009":[0,11],"2010":[0,2,7,11],"2012":[0,2,11],"2013":[0,11],"2014":[0,2,11],"2015":[0,11],"2016":[0,11],"2017":[0,7,11,17],"2018":[0,1,11],"2019":[0,11],"2020":[0,11],"2021":[0,15],"20210910":0,"20e":15,"21587440567681548":17,"2181597":16,"2182216189410787":16,"21822161894107872":16,"219029061236e":17,"21e":15,"220964392276":15,"227002356107e":17,"227955577093495":17,"22e":15,"2369339999999996e":16,"23e":15,"2403e":17,"2424":14,"24e":15,"2544031669779":17,"255":[0,11],"2568974":16,"257":23,"2572":17,"257608426597089":17,"25msun":[0,11],"27143e":17,"27e":15,"281":23,"28134439269236855":17,"283331":15,"28e":15,"29427":17,"29448":17,"29457":17,"2947":17,"2969346":2,"29e":15,"2mb":15,"2msun":[0,11],"3000":[0,11],"303065":16,"30642":17,"30902":17,"30e":15,"30e4":[0,11],"3205":17,"3228":17,"33469":12,"33699":17,"338":12,"34213":12,"34708e":16,"34e":15,"35e":15,"367065500196e":17,"36e":15,"36m":11,"37e":15,"382":15,"38788e":17,"38e":15,"39205":17,"394728392218e":17,"396133472739e":17,"396288708628e":17,"396675941641e":17,"39754":17,"39999999999999997":16,"39e":15,"3mb":15,"3msun":2,"4000":0,"400722":15,"404641347602e":17,"40e":15,"41112":15,"41e":15,"424921":15,"427601421985e":17,"42e":15,"42msun":[0,11],"4309362899259503":17,"43422e":17,"435":15,"43719":17,"4397":17,"444217227690e":17,"44e":15,"44msun":[0,11],"4500":11,"45000000080":17,"4504":17,"450828476484e":17,"451192744924e":17,"4530":[12,14],"453317880232e":17,"45407":17,"45e":15,"45msun":[0,11],"4600214958191":15,"4621":17,"462779538274e":17,"46573":17,"46e":15,"474":15,"47745":17,"480":15,"4838":[11,12,14],"4976091384888":15,"499":15,"49e":15,"4e3":[0,11],"4mb":15,"500":[0,11],"505288":15,"507":15,"508":17,"50e":15,"517749":14,"518":14,"51803":12,"520":15,"52414":17,"52415":17,"5262682437896729":16,"5294":17,"52e":15,"531":15,"546683":14,"547":15,"548":15,"5483":17,"548740826516e":17,"549":15,"54e":15,"550":15,"551":15,"552":15,"554":15,"55458":12,"555":15,"557":15,"559":15,"55e":15,"560":15,"561":15,"562":15,"563":15,"564":15,"565":15,"566":15,"567":15,"568":15,"569":15,"571":15,"5717":17,"573":15,"57443":12,"575":15,"57571":17,"576":15,"577":15,"578":15,"579":15,"579099761269e":17,"57e":15,"581":15,"582":15,"583":15,"584":15,"585":15,"58519":17,"586":15,"587":15,"588":15,"589":15,"58e":15,"5900418758392334":16,"59452":12,"59e":15,"5dex":[15,16],"5mb":15,"5mb625":15,"5msun":[0,11],"6000":[0,11],"600000":0,"60007":17,"60e":15,"6185":0,"624":15,"625":0,"626":15,"62e":15,"635":[0,11],"63e":15,"6452116023479681":15,"6495098935846658":15,"6495098935846686":15,"64e":15,"653":17,"65e":15,"66003":17,"66e":15,"674063083432e":17,"67586e":17,"684":17,"68748":17,"68e":15,"6935975551605":15,"6944":0,"69e":15,"6e1":2,"6e5":[0,11],"6mb":15,"6msun":[0,11],"70e":15,"71025":17,"71196":17,"7128":17,"713":15,"716":14,"71662":12,"71e":15,"7203987":17,"724":12,"72498e":[12,17],"728":15,"73e":15,"743":15,"7561":17,"759":15,"75e":15,"7619":0,"763":2,"7647737053496777":17,"76e":15,"772169325356e":17,"77287":17,"774":15,"774854":15,"779197348711e":17,"7809":17,"78125":0,"783":14,"785212755203247":17,"787":15,"78e":15,"79091":17,"792":15,"792905807495117":17,"793":15,"794":15,"79487":17,"795":[2,15],"799":15,"79e":15,"7mb":15,"7mb1235":15,"800":15,"802986496151e":17,"80592":17,"80919":17,"80e":15,"80msol":2,"81066":17,"812":15,"81395":12,"81495":17,"81499":17,"81529":17,"81536":17,"81563":17,"81636":17,"817":14,"81957":17,"81e":15,"82061":17,"82074":17,"82088":17,"82123":17,"8216":17,"82255":17,"8293333":16,"830":15,"83f80d829dbd418aa2bc745c99b71991":16,"846":15,"847":15,"848380621869e":12,"84e":15,"851971":15,"85e":15,"864":15,"86e":15,"872":[15,17],"876":15,"8862":17,"887":15,"88e":15,"897337":15,"898":15,"89e":15,"8mb":15,"8mb1394":15,"905335716621e":17,"908":15,"90e":15,"919":15,"91e":15,"92de7c9221c54206ab4dd10e58e09a34":16,"92e":15,"934":15,"935186":17,"935920346899e":17,"93e":15,"9436":17,"9458":14,"947":15,"9539172649383545":17,"956":15,"95e":15,"963":15,"963621764679e":17,"969":15,"97008":17,"976":15,"979":15,"97923e":17,"97e":15,"981706":15,"986":15,"988":15,"99191":12,"99192":12,"99194":12,"9947":14,"995":15,"9956307907476224":16,"9961590766906738":16,"9983":14,"99e":15,"9mb":15,"boolean":[0,4,5,7,11,18,23],"break":[0,11],"case":[0,3,4,7,9,11,15,17],"catch":[4,7,14,15,16,17],"char":7,"class":[4,5],"const":[2,5,15,16,17,21],"default":[0,1,2,4,5,6,7,11,12,13,15,16,17,20],"export":[4,5,17],"final":[15,16],"float":[0,2,4,5,11,13,14,21,23],"function":[0,1,2,3,5,6,7,8,9,10,12,18,19,20,21,23],"import":[4,5,11,12,13,14,15,16,17],"int":[0,1,2,4,5,6,7,11,15,17,21,23],"krtickov\u00e1":[0,11],"kub\u00e1t":[0,11],"long":[0,4,5,7,11,17,22],"new":[0,2,4,5,11,14,15,16,17],"null":[0,4,11,13],"paczy\u0144ski":[0,11],"public":[6,9,15,16,17],"return":[1,2,4,5,6,7,11,13,14,15,16,17,18,20,21,23],"short":[0,11,15,16,22],"super":[0,11],"switch":[0,11],"throw":[9,19],"true":[0,4,5,6,7,11,13,16,17,18],"try":[0,9,11,14,15,16,17,19],"void":12,"while":[0,11,15],Added:17,Adding:[3,14],And:[6,9,19,23],But:14,Doing:[15,16,17],For:[0,4,9,11,12,14,15,16,18,19],Gas:[0,11],Its:7,NOT:[0,5,11,20],Not:7,One:[0,11],Pms:18,That:[0,11],The:[0,1,2,3,4,5,7,9,11,12,13,14,15,16,17,18,19,20],Then:[4,9,19],There:[2,5,6,7,11,12,13,14,15,16,17,18],These:[4,7,11,15,16,17,18],Use:[0,5,11,17],Used:[0,7,11,18],Useful:[0,6,11,15,16,17],Uses:[0,4,11,21],Using:[3,9,15],Was:[0,11],Will:[0,4,5,11,17,20],With:6,__arg_begin:11,__attribute__:12,__enter__:4,__exit__:4,__iadd__:4,_actually_evolve_system:7,_binary_c_bind:[4,11,12,14,23],_binary_c_config_execut:7,_binary_c_dir:7,_binary_c_execut:7,_binary_c_shared_librari:7,_commandline_input:7,_count:7,_custom_logging_shared_library_fil:7,_end_time_evolut:7,_errors_exceed:7,_errors_found:7,_evolution_type_opt:7,_failed_count:7,_failed_prob:7,_failed_systems_error_cod:7,_generate_grid_cod:7,_grid_vari:[5,7,16],_loaded_ms_data:7,_main_pid:7,_population_id:7,_pre_run_cleanup:5,_probtot:7,_process_run_population_grid:7,_repeat:7,_set:5,_set_ms_grid:7,_start_time_evolut:7,_store_memaddr:7,_system_gener:7,_total_mass_run:7,_total_probability_weighted_mass_run:7,_total_starcount:7,_zero_prob_stars_skip:7,a173:[0,11],abat:[0,11],abbrevi:22,abl:11,about:[3,4,5,6,15,16,17,23],abov:[0,2,4,5,11,12,14,16,17],abridg:[11,12],absolut:[0,4,11],abund:[0,11],acceler:[0,11],accept:[4,17],access:[2,7,12,14,15,16,17],accord:[0,2,11],accordingli:[14,16,17],account:[0,7,11],accret:[0,11],accretion_limit_dynamical_multipli:[0,11],accretion_limit_eddington_lmms_multipli:[0,11],accretion_limit_eddington_steady_multipli:[0,11],accretion_limit_eddington_wd_to_remnant_multipli:[0,11],accretion_limit_thermal_multipli:[0,11],accretor:[0,11,23],accur:[15,16],act:[0,7,11,16,17],activ:[0,9,11,19],actual:[0,4,5,7,9,11,12,14,15,16,17,18,19],adam:[0,11],adapt:[0,11,16],add:[0,2,4,5,7,11,12,14,15,16,17,18,21,23],add_grid_vari:[5,15,16,17],added:[4,14,15],adding:[14,15,16,17],address:[1,7,11,12,23],admittedli:18,adress:[11,12,23],advis:12,affect:[0,11],after:[0,5,7,11,12,15,16,17],ag89:[0,11],again:[4,7,9,13,14,19],against:18,agb:[0,11],agb_3dup_algorithm:[0,11],agb_core_algorithm:[0,11],agb_core_algorithm_default:0,agb_core_algorithm_hurlei:0,agb_core_algorithm_karaka:0,agb_luminosity_algorithm:[0,11],agb_luminosity_algorithm_default:0,agb_luminosity_algorithm_hurlei:0,agb_luminosity_algorithm_karaka:0,agb_radius_algorithm:[0,11],agb_radius_algorithm_default:0,agb_radius_algorithm_hurlei:0,agb_radius_algorithm_karaka:0,agb_third_dredge_up_algorithm_default:0,agb_third_dredge_up_algorithm_hurlei:0,agb_third_dredge_up_algorithm_karaka:0,agb_third_dredge_up_algorithm_stancliff:0,age:[0,3,9,11],aging:[0,11],albedo:[0,11],algorithm:[9,11],algothim:[0,11],all:[0,1,2,4,5,6,7,9,10,11,13,14,15,16,17,18,19,20],all_info:5,alloc:11,allow:[0,2,4,7,11,12],allow_nan:4,along:[0,6,7],alpha:[0,11],alpha_c:[0,11],alphacb:[0,11],alreadi:[5,17],also:[0,3,4,5,6,9,11,12,15,16,17,19,23],alter:5,altern:[0,7,11],alwai:[0,2,7,11],amanda:[0,11],amax:2,amin:2,amount:[0,4,5,6,7,11,17,21],amp:11,amt_cor:[7,15,16,17],analys:20,analyt:[5,15,16,17],analyz:14,andrew:[9,19],andronov:[0,11],angelou_lithium_cheb_decay_tim:[0,11],angelou_lithium_cheb_massfrac:[0,11],angelou_lithium_cheb_tim:[0,11],angelou_lithium_decay_funct:[0,11],angelou_lithium_decay_function_exponenti:0,angelou_lithium_decay_tim:[0,11],angelou_lithium_eagb_decay_tim:[0,11],angelou_lithium_eagb_massfrac:[0,11],angelou_lithium_eagb_tim:[0,11],angelou_lithium_gb_decay_tim:[0,11],angelou_lithium_gb_massfrac:[0,11],angelou_lithium_gb_tim:[0,11],angelou_lithium_hg_decay_tim:[0,11],angelou_lithium_hg_massfrac:[0,11],angelou_lithium_hg_tim:[0,11],angelou_lithium_lmms_decay_tim:[0,11],angelou_lithium_lmms_massfrac:[0,11],angelou_lithium_lmms_tim:[0,11],angelou_lithium_ms_decay_tim:[0,11],angelou_lithium_ms_massfrac:[0,11],angelou_lithium_ms_tim:[0,11],angelou_lithium_tpagb_decay_tim:[0,11],angelou_lithium_tpagb_massfrac:[0,11],angelou_lithium_tpagb_tim:[0,11],angelou_lithium_vrot_trigg:[0,11],angelou_lithium_vrotfrac_trigg:[0,11],angular:[0,11,18],ani:[0,2,4,5,9,11,14,17,19],anoth:[0,11],ansi:[0,11],ansi_colour:[0,11],anyth:[0,4,7,11,15,16,17],anywai:[5,14,17],anywher:[5,17],api:[0,3,4,9],api_log_filename_prefix:[0,11,14],append:[1,4,14,15,16],appli:[0,11],apply_darwin_radau_correct:[0,11],appropri:[0,7,11],approxim:[0,11],aren:[2,7],arenou2010_binary_fract:2,arg:[2,4,11,13,17,18],arg_dict:4,argopt:[0,11],argpair:[4,13],argstr:[11,12,14],argument:[0,2,4,5,7,11,14,17,20],argument_of_periastron:[0,11],argument_of_periastron_quadrupl:[0,11],argument_of_periastron_tripl:[0,11],around:[0,11,12,14],arrai:[2,4,7,14],arrow:[0,11],artefact:16,artifici:[0,11],artificial_accretion_end_tim:[0,11],artificial_accretion_ignor:0,artificial_accretion_start_tim:[0,11],artificial_angular_momentum_accretion_r:[0,11],artificial_mass_accretion_r:[0,11],artificial_mass_accretion_rate_by_stellar_typ:[0,11],artificial_orbital_angular_momentum_accretion_r:[0,11],arxiv:[0,2,11],ask:[0,11,23],asplund:[0,11],assign:[5,15,16,17],associ:[15,16],assum:[0,11,18],ast871:[0,11],astronomi:[0,11],astrophys:16,astropi:[9,18,19],atom:4,attempt:[4,5],auto:[1,10],autogen_c_logging_cod:[1,12],automat:[0,1,6,9,11,12,19],autovivif:4,autovivificationdict:4,avaibl:[9,19],avail:[0,4,7,11,12,15,16,17,18],avoid:11,awai:[0,11],axi:[0,11,18],b_1:[0,11],b_2:[0,11],b_3:[0,11],b_4:[0,11],b_inclination1:[0,11],b_inclination2:[0,11],b_inclination3:[0,11],b_inclination4:[0,11],back:[0,4,11],backward:[0,11],bagb:[0,11],barn:[0,11],base:[0,2,4,5,9,11,15,16,17,18,19,23],base_filenam:[5,17],basic:[5,17],batchmod:[0,11],beasor:[0,11],becaus:[0,2,5,7,9,11,14,15,16,19],becom:[0,1,2,4,11,12,16],been:[0,5,7,11,13],befor:[0,5,7,9,11,15,16,17,19],behaviour:[4,15,16,17,20],belczynski:[0,11],below:[0,3,7,11,12,15,16,17],berro:[0,11],bertolami:[0,11],best:[5,7,9,19],beta:[0,11],beta_reverse_nova:[0,11],beta_reverse_novae_geometri:0,better:[0,3,4,5,9,11,17],between:[0,2,11,21],bewar:[5,17],bh_belczynski:[0,11],bh_fryer12_delai:[0,11],bh_fryer12_rapid:[0,11],bh_fryer12_startrack:[0,11],bh_hurley2002:[0,11],bh_prescript:[0,11],bh_spera2015:[0,11],big:[0,7,11],biinari:17,bin:[0,4,9,11,15,16,19],bin_data:[4,15,16],binari:[2,3,5,7,9,11,14,17,18,19,23],binary_c2:[9,19],binary_c:[1,2,3,4,5,7,12,14,15,16,17,18,20],binary_c_api_funct:12,binary_c_cal:[5,17],binary_c_default:17,binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11:15,binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3c:17,binary_c_inline_config:1,binary_c_log_cod:[1,12,14],binary_c_macro:[0,11],binary_c_output:4,binary_c_paramet:[15,16,17],binary_c_python:[4,5,11,14,15,16,17],binary_c_task_:[0,11],binary_c_write_log_cod:1,binary_grid:[0,11],binary_star:23,binaryc:[1,4,13,20],binaryc_config:1,binaryc_json_seri:4,binarycdecod:4,binarycencod:4,binarycpython3:11,binarycpython:[1,2,3,4,5,6,9,15,16,18,19,20,21,23],binarygrid:[15,16,17],bind:[0,11,12,14],binned_log_luminos:[15,16],binwidth:[4,15,16],birth:[0,11],bit:2,bivari:[0,11],black:[0,11],black_hol:0,bloecker:[0,11],blog:1,boltzman:18,boltzmann:[0,11],bondi:[0,11],bondi_hoyle_accretion_factor:[0,11],bool:[4,5,6,13,17,18],born:[0,11,15,16],bosswissam:4,both:[0,4,11,15,16,17],bottom:[0,11,17],bound:[2,21],boundari:2,brake:[0,11],branch:[0,4,11],branchpoint:[5,17],breakup:[0,11],brighten:16,broken:[0,11],browser:[15,16],bse:[0,2,11,12,17],bse_opt:[5,14,15,16,17],bsf:[0,11],buffer:[0,11],build:[0,1,3,4,11],build_q_tabl:2,built:[0,1,4,9,13,19],burn:[0,11],busso:[0,11],bye:[0,11],c13_eff:[0,11],c_auto_log:7,c_log:0,c_logging_cod:[7,12,14,15,16,17],calc_e_integr:2,calc_p_integr:2,calc_period_from_sep:23,calc_sep_from_period:[15,17,23],calc_total_probden:2,calcul:[0,2,4,5,7,11,16,17,23],calculate_constants_three_part_powerlaw:2,call:[0,1,4,5,7,11,13,14,16,17,18,20],call_binary_c_config:4,calls_filenam:17,can:[0,1,2,4,5,7,9,11,12,13,14,15,16,17,18,19,20],cannot:[5,12],canon:7,cap:[0,11],capit:[15,16],capsul:[1,4,11,15],captur:[0,4,11],carbon:[0,11],carbon_oxygen_white_dwarf:0,care:[15,16],carlo:[0,7,11],carrasco:[0,11],carri:[0,11],cast:[4,13],catchtim:4,categor:11,categori:[11,17],categoris:4,caught:[4,14],caus:23,cbdisc:[0,11],cbdisc_albedo:[0,11],cbdisc_alpha:[0,11],cbdisc_eccentricity_pumping_dermin:0,cbdisc_eccentricity_pumping_method:[0,11],cbdisc_eccentricity_pumping_non:0,cbdisc_end_evolution_after_disc:[0,11],cbdisc_fail_ring_inside_separ:[0,11],cbdisc_gamma:[0,11],cbdisc_init_djdm:[0,11],cbdisc_init_dm:[0,11],cbdisc_inner_edge_strip:[0,11],cbdisc_inner_edge_stripping_timescal:[0,11],cbdisc_kappa:[0,11],cbdisc_mass_loss_constant_r:[0,11],cbdisc_mass_loss_fuv_multipli:[0,11],cbdisc_mass_loss_inner_l2_cross_multipli:[0,11],cbdisc_mass_loss_inner_viscous_accretion_method:[0,11],cbdisc_mass_loss_inner_viscous_accretion_method_equ:0,cbdisc_mass_loss_inner_viscous_accretion_method_gerosa_2015:0,cbdisc_mass_loss_inner_viscous_accretion_method_non:0,cbdisc_mass_loss_inner_viscous_accretion_method_young_clarke_2015:0,cbdisc_mass_loss_inner_viscous_angular_momentum_multipli:[0,11],cbdisc_mass_loss_inner_viscous_multipli:[0,11],cbdisc_mass_loss_ism_pressur:[0,11],cbdisc_mass_loss_ism_ram_pressure_multipli:[0,11],cbdisc_mass_loss_xray_multipli:[0,11],cbdisc_max_lifetim:[0,11],cbdisc_minimum_evaporation_timescal:[0,11],cbdisc_minimum_fr:[0,11],cbdisc_minimum_luminos:[0,11],cbdisc_minimum_mass:[0,11],cbdisc_no_wind_if_cbdisc:[0,11],cbdisc_outer_edge_strip:[0,11],cbdisc_outer_edge_stripping_timescal:[0,11],cbdisc_resonance_damp:[0,11],cbdisc_resonance_multipli:[0,11],cbdisc_torquef:[0,11],cbdisc_viscous_l2_coupl:[0,11],cbdisc_viscous_photoevaporative_coupl:[0,11],cbdisc_viscous_photoevaporative_coupling_inst:[0,11],cbdisc_viscous_photoevaporative_coupling_non:[0,11],cbdisc_viscous_photoevaporative_coupling_visc:[0,11],cee:[0,11],cell:[11,15,16,17],cemp:[0,11],cemp_cfe_minimum:[0,11],centr:[5,17],central_object:[0,11],certain:[7,9,19],cf_amanda_log:[0,11],cflag:[9,19],chabrier:2,chandrasekhar:[0,11],chandrasekhar_mass:[0,11],chang:[0,1,2,4,5,6,7,9,11,12,16,17,19],chapter:[0,7,10],cheb:[0,11],check:[0,2,4,5,6,11,15,16,17,23],check_circular:4,chemic:[0,11],chen:[0,11],child:4,choic:[0,2,11,18],choos:[0,11,12,15,18],chose:14,chosen:[5,15,16,17],circular:[0,11],circumbinari:[0,11],circumstanti:[0,11],claei:[0,11],clark:[0,11],clean:[1,5,9,14,16,19],clean_up_custom_logging_fil:5,clear:[4,16],clearli:16,clock:4,clone:[9,19],close:[0,11,16],cloud:[0,11],cls:4,cluster:8,cmdline:5,co2:16,code:[0,1,5,6,9,11,12,14,15,16,17,18,19,20],collaps:[0,11],collapsar:[0,11],collect:23,collid:23,color:18,color_by_index:18,colour:[0,11],colour_log:[0,11],column:[14,17,18],column_nam:14,com:[1,4],combin:[1,4,5,7,12],combine_ensemble_with_thread_join:7,come:[2,9,19,21],comenv_bs:0,comenv_disc_angmom_fract:[0,11],comenv_disc_mass_fract:[0,11],comenv_ejection_spin_method:[0,11],comenv_ejection_spin_method_do_noth:[0,11],comenv_ejection_spin_method_sychron:[0,11],comenv_ejection_spin_method_synchron:0,comenv_merger_spin_method:[0,11],comenv_merger_spin_method_breakup:0,comenv_merger_spin_method_conserve_angmom:[0,11],comenv_merger_spin_method_conserve_omega:[0,11],comenv_merger_spin_method_specif:[0,11],comenv_ms_accret:[0,11],comenv_ms_accretion_fract:[0,11],comenv_ms_accretion_mass:[0,11],comenv_nandez2016:0,comenv_nelemans_tout:0,comenv_ns_accret:[0,11],comenv_ns_accretion_fract:[0,11],comenv_ns_accretion_mass:[0,11],comenv_post_eccentr:[0,11],comenv_prescript:[0,11],comenv_splitmass:[0,11],comenv_undef:0,command:[0,1,5,7,9,11,17,19],commandlin:17,comment:17,commit:4,common:[0,11,12,14,15,16,17],compact:17,companion:[0,11],compar:[0,7,11,17],compens:16,compil:[1,9,12,17,19],compile_shared_lib:1,complet:[15,16,17],complex:[5,7,12,17,18],compon:[4,18],comput:[0,8,11,15,16],conceptu:15,condit:[5,12,15,16,17],condor:[5,7,8],condor_grid:5,config:[1,4,7,9,19],config_fil:1,configur:[2,5,14,15,16,17],conjunct:13,conserv:[0,11],consid:[0,1,2,4,5,7,11,18],constant:[0,2,11,18],construct:[0,1,11,14,15,16,17],contain:[0,1,2,4,5,6,7,8,9,10,11,13,14,15,16,17,18,19,20,21,22],content:[3,4,5,9,11],context:4,continu:[5,17],control:[0,11,15,16,17],convect:[0,11],conveni:4,converg:[0,11],convert:[2,4,5],convert_byt:4,convfloat:4,cool:[0,11],copi:[0,11,16,23],core:[0,5,7,11,15,16,17,18],core_co:12,core_h:12,core_helium_burn:0,core_mass:[0,11,12],correct:[0,2,5,11,14,18,23],correctli:[9,14,18,19],correspond:18,corretor:[0,11],cosmic:2,cosmic_sfh_madau_dickinson2014:2,cost:16,could:[0,4,11,16,17],count:[4,7],count_keys_recurs:4,counter:7,coupl:[0,3,11],cours:18,cover:[13,15,16],coverag:[9,19],cowd:[0,11],cpu:[0,11,15,16],cpython:11,crap_paramet:[0,11],creat:[2,4,5,12,14,15,16,17],create_and_load_logging_funct:[1,12],create_arg_str:4,create_hdf5:4,creation:11,critic:[0,11],cross:[0,11],crunch:[15,16],ctype:1,cube:15,cubic:15,cuntz:[0,11],current:[0,4,9,11,12,15,16,19],curv:16,custom:[0,1,3,4,5,7,9,11,14,15,16,17,18,20],custom_log:[5,7,14],custom_logging_cod:[1,12,14,20],custom_logging_func_memaddr:[7,11,12],custom_logging_funct:[7,9,10,12,14,17],custom_logging_info:5,custom_logging_memaddr:12,custom_logging_print_stat:14,custom_logging_stat:[15,16,17],custom_opt:[5,14,15,16,17],custom_output_funct:12,custom_sort_dict:4,custom_tmp_dir:1,customis:18,cvode:[0,11],dai:[0,2,11,12,14,15,17,23],damp:[0,11],darwin:[0,11],dat:[0,4,17],data:[0,4,5,7,11,14,15,16,17,20],data_dict:2,data_dir:[4,5,7,17],datadir:[5,17],datafram:[14,15,16,18],datalinedict:[4,15,16],datamodel:4,dataset:[4,17],date:5,david:[9,11,19],dd7:[0,11],deactiv:[0,11],deal:[4,14],death:[0,11],debug:[0,5,7,11,15,16,17],decai:[0,11],decid:[0,4,5,11,12],decod:4,decreas:[0,11],deeper:[5,17],def:[14,15,16,17],default_to_metal:[0,11],defaultdict:4,defer:[0,11],defin:[0,1,2,5,11,18],definit:[1,15,16,23],degener:[0,11],degenerate_core_helium_merger_ignit:[0,11],degenerate_core_merger_dredgeup_fract:[0,11],degenerate_core_merger_nucsyn:[0,11],degner:[0,11],degre:[0,11],delai:[0,11],delta_mcmin:[0,11],den:[0,11],densiti:[2,15,16],depend:[0,2,9,11,18,19],deprec:[0,5,11],dermin:[0,11],describ:[0,2,7,11],descript:[0,2,4,7,9,10,11,13],design:18,desir:[0,11],destruct:[5,17],detail:[0,4,11,14],detect:[0,11],determin:[0,5,11,12,15,16,17,23],deton:[0,11],dev:[0,11],develop:1,deviat:2,dewi:[0,11],dex:[0,11],diagnost:7,diagram:[0,11,18],dickonson:2,dict2:4,dict:[1,2,4,5,6,13,14,15,16,17,22],dict_1:4,dict_2:4,dict_kei:[13,14],dictionari:[1,2,3,4,5,6,7,15,16,17,18,22],did:[4,9,19],differ:[0,4,5,9,11,15,16,17,18,19],dimmer:[0,11],dir:[9,19],direct:[0,5,11],directli:[4,7,14],director:7,directori:[0,3,4,5,7,9,11,17,19],disabl:[0,11,17],disable_debug:[0,11],disable_end_log:[0,11],disable_ev:[0,11],disc:[0,11],disc_legacy_log:[0,11],disc_log2d:[0,11],disc_log:[0,11],disc_log_directori:[0,11],disc_log_dt:[0,11],disc_log_level_non:0,disc_log_level_norm:0,disc_log_level_normal_first_disc_onli:0,disc_log_level_subtimestep:0,disc_log_level_subtimestep_first_disc_onli:0,disc_n_monte_carlo_guess:[0,11],disc_stripping_timescale_infinit:0,disc_stripping_timescale_inst:0,disc_stripping_timescale_orbit:0,disc_stripping_timescale_visc:0,disc_timestep_factor:[0,11],discret:17,discs_circumbinary_from_comenv:[0,11],discs_circumbinary_from_wind:[0,11],disk:[0,5,11],dispers:[0,11],displai:[0,11],disrupt:[0,11],dist:[4,9,19],distefano:2,distribut:[0,2,3,4,5,8,11,15,17],distribution_funct:[9,10,15,16,17],divid:8,dlnm1:[5,15,17],dlnm:16,dlnm_1:16,dlog10per:[15,17],dlogp:2,dm1:16,dm_1:16,do_dry_run:7,doc:[4,6,9,15,16,17,19],doc_fetch:2,docstr:[9,14,18,19],document:[4,6,7,10,15,16,17],doe:[0,2,4,5,7,11,12,13,14,15,16,17,23],doesn:[5,7],doesnt:6,doing:[0,1,6,9,11,19],don:[2,4,7],done:[0,4,5,9,11,15,16,17,19],donor:[0,11,23],donor_limit_dynamical_multipli:[0,11],donor_limit_envelope_multipli:[0,11],donor_limit_thermal_multipli:[0,11],donor_rate_algorithm_bs:0,donor_rate_algorithm_claeys2014:0,dont:11,doubl:[12,17],down:17,dphasevol:[5,15,16,17],dprob:16,dr2:[0,11],dr3:[0,11],drai:[0,11],dredg:[0,11],drop:14,dry:7,dstep:2,dt_limit:13,dtfac:[0,11],dtlimit:4,dtm:[1,12,17],due:[9,19],dummi:[2,18],dump:[0,4,11,14],dumpvers:[0,11],duquennoi:2,duquennoy1991:2,dure:[0,11],dust:[0,11],dwarf:[0,11,16],dynam:[0,11],e2_hurley_2002:0,e2_izzard:0,e2_mint:0,e2_prescript:[0,11],e45c25448b32440cb7e220f4a3562907:17,each:[0,2,4,5,7,11,15,16,17],eagb:[0,11],eagb_wind_beasor_etal_2020:0,eagb_wind_bs:0,eagb_wind_goldman_etal_2017:0,eagbwind:[0,11],eagbwindfac:[0,11],earli:[0,11],early_asymptotic_giant_branch:0,easi:[4,14],easier:[4,17],ecc2:2,ecc3:2,ecc:[2,5,14,17],eccentr:[0,2,11,12,14,15,16,17,18,23],eccentric_rlof_model:[0,11],eccentricity_quadrupl:[0,11],eccentricity_tripl:[0,11],echo:[0,11],eddington:[0,11],edg:[0,5,11,17],edit:12,edu:[0,11],effect:[0,2,7,11,12],effective_metal:[0,11],effici:[0,11],egg:[9,19],eggleton:[0,11,23],either:[0,4,5,7,9,11,15,16,17,19,20],eject:[0,11],elabor:12,eld:[0,11],eldridg:[0,11],electon:[0,11],electron:[0,11],element:[0,1,4,7,11,13,18],email:4,emp:[0,11],emp_feh_maximum:[0,11],emp_logg_maximum:[0,11],emp_minimum_ag:[0,11],empti:[4,6,14],enabl:[0,11],encod:4,encount:7,end:[0,2,4,7,11],end_index:2,end_timestamp:[15,16,17],energi:[0,11],enhanc:[0,11],enlarg:[0,11],enough:2,ensembl:[0,4,7,11,13],ensemble_def:[0,11],ensemble_dictionari:4,ensemble_dt:[0,11],ensemble_factor_in_probability_weighted_mass:7,ensemble_filter_:[0,11],ensemble_filters_off:[0,11],ensemble_json:4,ensemble_legacy_ensembl:[0,11],ensemble_list:5,ensemble_logdt:[0,11],ensemble_logtim:[0,11],ensemble_macro:[0,11],ensemble_output_:7,ensemble_startlogtim:[0,11],ensure_ascii:4,enter:[0,9,11,19],enthalpi:[0,11],entir:[12,14],entri:[4,5],env:[9,11,18,19],envelop:[0,11],epoch:5,equal:[0,4,11,16,17],equat:[0,11],equation_of_state_algorithm:[0,11],equation_of_state_paczynski:0,equatori:[0,11],equival:[7,15],errno:[9,19],error:[0,4,7,9,11,15,16,17,19],errors_exceed:[15,16,17],errors_found:[15,16,17],esa:2,escap:[0,11],escape_fract:[0,11],escape_veloc:[0,11],eta:[0,11,15],etal:[0,11],etc:[0,4,5,8,9,11,14,16,17,18,19,20],etf:15,euler:[0,11],evalu:[2,5,17,23],evan:[0,11],evapor:[0,11],evaporate_escaped_orbiting_object:[0,11],even:[13,16],event:[0,11],everi:[0,4,9,11,19],everyth:[5,7,14,17],everytim:[9,19],evid:[0,11],evolut:[0,1,5,7,11,14,15,16,17,18],evolution_split:[0,11],evolution_splitting_maxdepth:[0,11],evolution_splitting_sn_eccentricity_threshold:[0,11],evolution_splitting_sn_n:[0,11],evolution_typ:[7,15,16,17],evolutionari:[0,11,14],evolv:[0,3,5,7,11,12],evolve_popul:17,evolve_singl:[5,12,14],exact:[1,4,7],exactli:[0,11,16],exampl:[1,2,4,5,14,15,20],example_above_m:12,example_compact_object:17,example_dco:17,example_df:14,example_head:4,example_log:20,example_log_co:[1,12],example_logging_string_co:12,example_logging_string_post_m:12,example_massloss:[12,14],example_output:14,example_parse_output:4,example_pop:[14,17],example_pop_set:17,example_python_population_result:17,example_sn:12,exce:[0,7,11],except:[4,6,7,11,15,16,17,18],execut:[0,5,7,9,11,17,19],exist:[0,4,5,6,11,17],exist_ok:[4,17],exit:[0,4,11],exp:[5,15,16,17],expand:[17,20],expect:[9,11,16,19],experiment:[0,4,11],explain:[3,4],explicitli:[0,1,11],explod:[0,11],explos:[0,11],expoenti:[0,11],expon:[0,11],export_all_info:[5,17],express:[0,11],extend:[0,9,11,19],extens:11,extern:[0,11],extra:[0,3,5,7,9,11,17,20],extra_text:6,extract:[4,17],extract_ensemble_json_from_str:4,extrapol:[2,7],eye:5,f28b5f98d7ef40dcb17fc2481a6d3c:17,fabian:[0,11],fabian_imf_log:[0,11],fabian_imf_log_tim:[0,11],fabian_imf_log_timestep:[0,11],factor:[0,2,4,7,11],fade:[0,11],fail:[0,4,7,9,11,15,19],fail_sil:4,failed_count:[15,16,17],failed_prob:[15,16,17],failed_system:7,failed_system_log:7,failed_systems_error_cod:[15,16,17],failed_systems_threshold:7,failsaf:14,failur:[0,4,11],fallback:[0,11],fals:[0,4,5,7,11,13,15,16,17,18],fancy_parsing_funct:20,far:[0,11,16],fase:17,fast:[0,11],faster:[15,16,17],favorit:14,featur:[3,4,9,17],feed:7,ferguson:[0,11],fetch:14,few:[0,11],field:[0,11],fig:[0,2,11],figsiz:[15,16],figur:[7,15,16,18],file:[0,1,4,5,6,7,8,9,11,14,17,18,19,20],file_log:[0,11],filehandl:6,filenam:[0,1,4,5,7,11,14,17,20],filenotfounderror:[9,19],filepath:1,fill:[4,14],fill_data:2,filter:[0,4,11,13],filter_arg_dict:4,filter_valu:[4,13],fin:[0,11],find:[4,5,7,9,17,19],finish:[4,15,16,17,18],finit:[15,16],first:[0,2,4,5,9,11,14,15,16,17,19,23],first_giant_branch:0,fishlock:[0,11],fit:[0,2,4,5,11,14,23],fix:[0,2,4,5,11,14,17,18],flag:[1,4,7],flash:[0,11],flat:[2,7],flatsect:[2,15,17],flaw:5,float_overflow_check:[0,11],flto:[9,19],fold:2,follow:[0,2,4,7,9,11,12,18,19],forc:[0,9,11,19],force_circularization_on_rlof:[0,11],force_corotation_of_primary_and_orbit:[0,11],foreach_star:15,form:[0,4,5,6,11,15,16,17],formal:[0,11],format:[0,2,4,5,11,12,14,15,16,17],format_ensemble_result:4,formula:[0,11],forward:[0,11],found:[2,9,15,16,17,19],four:[0,11],fpic:1,fraction:[0,2,7,11],framework:11,free_persistent_data_memaddr_and_return_json_output:11,free_store_memaddr:11,frequenc:[0,11],friction:[0,11],fring:[0,11],from:[0,2,4,5,7,13,14,15,16,17,18,23],from_binary_c_config:1,from_dict:[15,16],fryer:[0,11],ftz:[9,19],full:[3,4,7,12],full_path:4,further:[2,17],fuv:[0,11],gaia:[0,2,11],gaia_colour_transform_method:[0,11],gaia_conversion_ubvri_bivariate_jordi2010:[0,11],gaia_conversion_ubvri_riello2020:[0,11],gaia_conversion_ubvri_univariate_evans2018:[0,11],gaia_conversion_ubvri_univariate_jordi2010:[0,11],gaia_conversion_ugriz_bivariate_jordi2010:[0,11],gaia_conversion_ugriz_riello2020:[0,11],gaia_conversion_ugriz_univariate_evans2018:[0,11],gaia_conversion_ugriz_univariate_jordi2010:[0,11],gaia_l_binwidth:[0,11],gaia_teff_binwidth:[0,11],gain:7,galact:[0,11],gallino:[0,11],gamma:[0,11],gap:[0,11],garcia:[0,11],gauss:[0,11],gaussian:2,gaussian_func:2,gaussian_normalizing_const:2,gb_reimers_eta:[0,11],gb_wind_beasor_etal_2020:0,gb_wind_goldman_etal_2017:0,gb_wind_reim:0,gb_wind_schroeder_cuntz_2005:0,gbwind:[0,11],gbwindfac:[0,11],gcc:[1,9,19],gce:[0,11],gener:[0,1,2,4,5,6,7,11,12,14,15,16,17,18],general_info:4,generalis:2,geometr:[0,11],gerosa:[0,11],get:[0,2,3,4,5,6,9,12,14,15,16,17,19,20,23],get_arg_kei:4,get_default:[4,13],get_help:[4,13],get_help_al:[4,5,13],get_help_sup:[4,13],get_integration_constant_q:2,get_max_multipl:2,get_moe_di_stefano_dataset:4,get_siz:4,giant:[0,11],giant_branch:0,git:[0,4,15,16,17],git_branch:4,git_build:4,github:4,gitlab:9,give:[0,2,4,11,23],given:[0,1,2,4,5,7,11,16,20,23],global:[0,2,11,15,16],global_dict:2,gmax:2,gmin:2,gnu:11,goe:[0,4,5,11,12,14,18],gogo:[0,11],going:[9,19],goldman:[0,11],gonna:2,good:[0,7,11,14,15,16,17,23],got:16,gov:[0,11],gravit:[0,11,17],gravitational_radiation_bs:0,gravitational_radiation_bse_when_no_rlof:0,gravitational_radiation_landau_lifshitz:0,gravitational_radiation_landau_lifshitz_when_no_rlof:0,gravitational_radiation_model:[0,11],gravitational_radiation_modulator_:[0,11],gravitational_radiation_modulator_j:[0,11],gravitational_radiation_non:0,grb:[0,11],great:[0,11,16],greater:[0,11],grevess:[0,11],grid:[0,3,4,5,9,10,11,12,14],grid_class:[9,10],grid_cod:5,grid_opt:[5,14,15,16,17],grid_options_default:6,grid_options_defaults_dict:6,grid_options_descript:[6,17],grid_options_description_check:6,grid_options_help:6,grid_result:[7,15,16],grid_vari:[7,17],grid_variable_numb:[5,17],gridcode_filenam:7,gridtyp:[5,17],group:[4,15],gsl:[9,19],gsl_dir:[9,19],guess:[0,2,11],h5py:[9,19],hachisu:[0,11],hachisu_disk_wind:[0,11],hachisu_ignore_qcrit:0,hachisu_qcrit:[0,11],hack:6,had:[5,15,16],half:[0,11],hall:[0,11],handi:[0,11],handl:[0,3,4,5,7,11,14,20,23],handle_ensemble_string_to_json:4,happen:[0,11],hardcod:[12,15,16,17],has:[0,1,4,5,7,11,12,13,15,16,17],have:[0,2,3,4,5,6,7,9,11,12,14,15,16,17,18,19],hbb:[0,11],hbbtfac:[0,11],hdf5:4,hdf5file:4,header:[1,4,12,14,15,16,17],headerlin:17,headlin:7,hegb:0,hehg:0,height:[2,15,17],helium:[0,11],helium_flash_mass_loss:[0,11],helium_white_dwarf:0,help:[0,3,4,6,11,14,15,16,17],help_al:[0,11],hem:0,henc:[0,11,16],hendrik:[9,19],here:[1,4,5,7,11,12,14,18],hertzsprung:[0,11],hertzsprung_gap:0,hertzstrpung:[0,11],heuvel:[0,11],hewd:[0,11],hewd_hewd_ignition_mass:[0,11],hex:7,high:[0,2,11,16],higher:[0,2,4,7,9,11,15,16,17,19],highlight:4,his:2,histori:2,hold:7,hole:[0,11],home:11,homogen:[0,11],hood:14,hopefulli:[0,11],hot:[0,11],how:[0,4,5,7,11,12,14,15,16,17],howev:[0,11,12,15,16,17],hoyl:[0,11],hpc:[5,8],hpc_function:[9,10],hr_diagram:18,hrd:[0,11],hrdiag:[0,11],hrdiag_output:[0,11],html:[4,9,17,19],http:[0,1,2,4,11,17],hurlei:[0,11],hut:[0,11],hybrid:[0,11],hydro:[0,11],hydrogen:[0,11],iadd:4,ibc:[0,11],id_cor:12,idea:[17,18],idum:[0,11],ignit:[0,11],ignor:[0,5,7,9,11,12,14,17,19],iia:[0,11],iloc:14,imf:[0,2,11,16],imf_chabrier2003:2,imf_scalo1986:2,imf_scalo1998:2,imf_tinsley1980:2,immedi:[0,11],implement:[0,4,5,7,11],impli:[0,11],implic:16,impos:[15,16,17],improv:2,inclin:[0,11],inclination1:[0,11],inclination2:[0,11],inclination3:[0,11],inclination4:[0,11],inclini:[0,11],incliniation_quadrupl:[0,11],incliniation_tripl:[0,11],includ:[0,1,2,4,5,9,11,12,14,16,17,18,19],include_binary_c_default:[5,17],include_binary_c_help_al:[5,17],include_binary_c_version_info:[5,17],include_default:[5,17],include_popul:17,include_population_set:5,incom:[0,11],increas:[0,11,15,16],inde:[0,11,16],indent:[4,14],index:[0,2,9,11,13,14],indic:[0,2,11],individu:[3,9,15],individual_nova:[0,11],induc:[0,11],inertia:[0,11],info:[4,5,9,11,13,17,18,19],inform:[0,1,3,4,5,6,12,14,15,16,17,18],init:5,init_abund:[0,11],init_abund_dex:[0,11],init_abund_mult:[0,11],init_abunds_onli:[0,11],initi:[0,2,3,5,11,13,14],initial_abundance_hash:5,initial_abundance_mix:[0,11],initial_abunds_onli:[0,11],initial_mass:14,inner:[0,11],input:[1,2,4,5,7,9,11,13,14,18,23],input_dict:4,insert:[5,17],insid:[0,11],inspect:[4,14,18],inspect_dict:4,inspir:[1,18,23],instabl:[0,11],instanc:[4,14,15,16,17],instant:[0,11],instantli:[0,11],instead:[0,4,7,11,16],integ:[0,5,7,11,23],integr:[2,15,16],integrals_str:2,intens:16,interact:[0,6,11],interfac:[4,9,11,15,19],interfer:[9,19],intern:[0,7,11,13],internal_buff:[0,11],internal_buffering_off:0,internal_buffering_print:0,internal_buffering_stor:0,interpol:[2,5],interpolate_in_mass_izzard2012:2,interpolator_nam:2,intershel:[0,11],interstellar:[0,11],intger:[0,11],intro:[0,11],invers:23,involv:[0,11],inward:[0,11],ipynb:[15,16,17],is_capsul:4,isfil:17,isn:4,isnt:17,isotop:[0,4,11,13],isotope_hash:5,isotope_list:5,item:[1,4,15,16],iter:4,its:[0,4,5,6,9,11,15,16,17,18,19,20],itself:[4,7,9,12,14,19],iwamoto:[0,11],izzard2012_period_distribut:2,izzard:[0,9,11,19],jager:[0,11],jaschek:2,jeff:[9,19],jia:[0,11],john:[0,11],join:[11,12,14,17],jordi:[0,11],json:[4,5,7,11,14,17],jsondecod:4,jsonencod:4,jupyt:[9,15,16,19],just:[0,2,4,5,7,11,17,23],kap:[0,11],kappa:[0,11],kaps_rentrop:[0,11],karaka:[0,11],keep:[5,17],kei:[1,2,4,5,6,7,13,14,17,18],kelvin:[0,11],keplerian:[0,11],keyword:[18,20],kick:[0,7,11],kick_backward:0,kick_forward:0,kick_inward:0,kick_outward:0,kick_random:0,kick_straight_up:0,kick_velocity_custom:0,kick_velocity_fix:0,kick_velocity_maxwellian:0,kill:[1,12,17],kim:[0,11],kind:11,kippenhahn:[0,11],know:[0,1,6,11,13,14,16],known:[0,2,5,11,14,15,16,17,20],kroupa2001:[2,5,17],kroupa:[2,16],krticka:[0,11],ktg93:2,kwarg:[5,18,20],lambda:[0,11],lambda_c:[0,11],lambda_ce_dewi_tauri:0,lambda_ce_klencki_2020:0,lambda_ce_polytrop:0,lambda_ce_wang_2016:0,lambda_enthalpi:[0,11],lambda_ionis:[0,11],lambda_min:[0,11],lambda_mult:[0,11],lambda_multipli:[0,11],lambda_v:2,lamer:[0,11],landau:[0,11],langer:[0,11],larger:[0,11],last:[2,3],lastli:[11,14],later:[15,16],latter:[0,11],law:[2,16],law_const:2,lbv:[0,11],ld_library_path:[9,19],ldist:16,lead:[0,11,15,16,17,23],learn:12,least:[9,19],leav:[0,11],left:[0,11],legaci:[0,11],legacy_yield:[0,11],len:[14,17],lengthen:[0,11],less:[0,1,2,3,11,14],let:[5,14,15,16,17],level:[1,4,5],li7:[0,11],lib:[9,11,14,19],libbinary_c:7,libcustom_logging_5d7779e8190e4b79b10c7e6a44cb0e7:14,libcustom_logging_8967553693ac4e11a49c42d4eef773e8:14,libgsl:[9,19],libmemo:[9,19],librari:[0,1,5,7,11,12,20],library_path:[9,19],librinterpol:[9,19],lies:[0,11],lifetim:[0,11,15,16,17],lifshitz:[0,11],like:[0,1,4,5,7,9,11,15,16,17,18,19,21],limit:[0,11,15,16,17,18],line:[1,4,5,7,9,12,14,15,16,17,18,19],linear2:7,linear:[0,2,7,11,15,16],linear_extrapolation_q:2,linearli:[16,21],linedata:[15,16],lineplot:[15,16],linker:1,linspac:21,linux:11,list:[0,1,2,4,7,11,14,15,16,17,20,21],list_arg:[0,11],list_of_sub_kei:2,lit:[0,11],lithium:[0,11],lithium_gb_post_1dup:[0,11],lithium_gb_post_heflash:[0,11],lithium_hbb_multipli:[0,11],lithium_t:[0,11],littl:15,littleton:[0,11],liu:[0,11],llnl:[0,11],lnm1:[5,15,16,17],lnm_1:16,load:[0,1,4,5,7,11,12,14,15,16,17,18],load_logfil:4,lobe:[0,11,23],local:2,locat:[0,2,7,9,11,19],lodder:[0,11],log10:[0,2,11,15,16,17],log10m1:7,log10p:2,log10per:[15,17],log10pmin:2,log:[0,1,2,3,4,5,7,9,11,14,18,19,20,23],log_:[15,16],log_arg:7,log_args_dir:7,log_arrow:[0,11],log_dt:7,log_every_timestep:[12,14],log_fil:7,log_filenam:[0,11,14,20],log_runtime_system:7,logarithm:[2,16],logensembletim:[0,11],logfil:[4,9,14,19],logg:[0,11],logger:17,logging_dict:1,logging_lin:12,logic:[1,5,7,12],logmass:2,logp:2,logper:2,logperiod:2,logperrang:15,long_spectral_typ:2,longer:[0,11],longnam:[5,15,16,17],look:[1,4,9,15,16,17,19],lookback:[0,11],loon:[0,11],loop:[5,14,15,16,17],loos:18,lose:[0,11],loss:[0,11,14],lost:[0,11],lot:[4,7,15,16,17,20],low:[0,2,11,16],low_mass_m:0,low_mass_main_sequ:0,lower:[0,2,5,11,17,21],lsoda:[0,11],lsun:[0,11,18],lugaro:[0,11],luminos:[0,3,9,11,18],luminosity_1:18,luminosity_2:18,lynnett:[0,11],m_1:[0,5,11,12,13,14,15,16,17,20],m_2:[0,11,12,14,15,17],m_3:[0,11],m_4:[0,11],m_max:[2,5,17],m_min:[5,17],maccretor:[0,11],machin:[7,9,19],macro:[0,4,11,13],madau:2,maeder:[0,11],magellan:[0,11],magnet:[0,11],magnetic_braking_algorithm:[0,11],magnetic_braking_algorithm_andronov_2003:0,magnetic_braking_algorithm_barnes_2010:0,magnetic_braking_algorithm_hurley_2002:0,magnetic_braking_algorithm_rappaport_1983:0,magnetic_braking_factor:[0,11],magnetic_braking_gamma:[0,11],magnitud:4,mai:[0,11,15],main:[0,1,7,9,11,12,15,16,17,19],main_sequ:[0,11,15,16],mainli:8,mainprocess:15,major:[0,11],make:[0,1,2,4,5,7,9,11,14,15,16,17,18,19,20],make_build_text:4,makedir:[4,17],manag:[4,9,19],mani:[0,5,7,11,13,15,16,17],manual:12,manufactur:[0,11],map:7,maria:[0,11],mass:[0,1,2,3,4,5,7,11,13,14,15,17,18,20,23],mass_1:[17,18],mass_2:[17,18],mass_accretion_for_eld:[0,11],mass_accretor:23,mass_donor:23,mass_evolut:18,mass_for_hestar_ia_low:[0,11],mass_for_hestar_ia_upp:[0,11],mass_of_pmz:[0,11],mass_str:2,massiv:[0,2,11],massless:[0,11],massless_remn:0,massrang:[15,16],master:[7,18],match:[0,4,11,14,15,17,18],materi:[0,11],math:[5,15,16,17],mathrm:[15,16],matplotlib:[9,16,18,19],matter:[0,11],mattsson:[0,11],mattsson_mass_loss:[0,11],mattsson_orich_tpagbwind:[0,11],max:[0,2,11,12,15,16,17],max_bound:[2,21],max_evolution_tim:[0,1,11,12,14,15,16,17],max_hewd_mass:[0,11],max_model_numb:[0,11],max_multipl:2,max_neutron_star_mass:[0,11],max_queue_s:7,max_stellar_angmom_chang:[0,11],max_stellar_type_1:[0,11],max_stellar_type_2:[0,11],max_stellar_type_3:[0,11],max_stellar_type_4:[0,11],max_tim:14,max_val:2,maximum:[0,2,7,11,12,15,16,23],maximum_mass_ratio_for_instant_rlof:[0,11],maximum_mass_ratio_for_rlof:23,maximum_mcbagb_for_degenerate_carbon_ignit:[0,11],maximum_nuclear_burning_timestep:[0,11],maximum_timestep:[0,11],maximum_timestep_factor:[0,11],maxmimum:[0,11],maxwellian:[0,11],mayb:18,mayor:2,mc13_pocket_multipli:[0,11],mch:[0,11],mcmin:[0,11],mdonor:[0,11],mean:[0,2,4,5,7,9,11,19],meant:7,measur:4,medium:[0,11],mega:2,mem:15,memaddr:[11,12,15],memori:[1,5,7,11,12,23],menv:[0,11],merg:[0,2,4,7,11],merge_dict:[4,13],merge_multipl:2,merger:[0,11],merger_angular_momentum_factor:[0,11],merger_mass_loss_fract:[0,11],mesa:[9,19],mesasdk_init:[9,19],mesasdk_root:[9,19],messag:4,mestel:[0,11],met:[5,17],metal:[0,2,11,12,14,15,16,17,23],method:[0,5,7,11,12,14,15,16,17],meynet:[0,11],might:[4,5,9,17,19],milki:[0,11],miller:[0,11],min:[2,12,15,16,17],min_bound:[2,21],min_p:2,min_per:2,min_val:2,minimal_verbos:4,minimum:[0,2,4,7,11,23],minimum_co_core_mass_for_carbon_ignit:[0,11],minimum_co_core_mass_for_neon_ignit:[0,11],minimum_donor_menv_for_comenv:[0,11],minimum_envelope_mass_for_third_dredgeup:[0,11],minimum_helium_ignition_core_mass:[0,11],minimum_mcbagb_for_nondegenerate_carbon_ignit:[0,11],minimum_orbital_period_for_instant_rlof:[0,11],minimum_period_for_rlof:23,minimum_separation_for_instant_rlof:[0,11],minimum_separation_for_rlof:23,minimum_time_between_pn:[0,11],minimum_timestep:[0,11],mint:[0,11],mint_data_cleanup:[0,11],mint_dir:[0,11],mint_disable_grid_load_warn:[0,11],mint_fallback_to_test_data:[0,11],mint_hard_max_nshel:[0,11],mint_hard_min_nshel:[0,11],mint_kippenhahn:[0,11],mint_kippenhahn_companion_stellar_typ:[0,11],mint_kippenhahn_stellar_typ:[0,11],mint_maximum_nshel:[0,11],mint_maximum_shell_mass:[0,11],mint_metal:[0,11],mint_minimum_nshel:[0,11],mint_minimum_shell_mass:[0,11],mint_ms_rejuven:[0,11],mint_nshel:[0,11],mint_nuclear_burn:[0,11],mint_remesh:[0,11],mint_use_zams_profil:[0,11],mira:[0,11],misc:[9,11],miscellan:[4,13],miss:[0,4,6,11,15,16],mix:[0,4,7,11],mixtur:[0,11],mmax:[2,16],mmin:[2,7,16],mnra:23,model:[0,1,7,11,12,14,15,16,17],model_numb:[15,16],modif:3,modifi:[0,11,12],modul:[0,6,7,10,11,13,15,16,17],modulo:7,moe:[2,4,5,9,17],moe_di_stefano_2017:5,moe_di_stefano_2017_multiplicity_fract:2,moe_di_stefano_2017_pdf:2,moment:[0,11,12,17,21],momenta:[0,11,18],momentum:[0,11],monoton:16,mont:[0,7,11],monte_carlo_kick:[0,11],more:[0,1,3,4,5,7,9,11,12,13,14,15,16,17,18,19,21],most:[4,11,16],mostli:[4,6,7,15,16,17,18,20],move:[0,11],msun:[0,2,11,12,14,15,16],much:[0,4,11,17],multi:7,multipl:[0,2,4,7,11],multiplc:[0,11],multipli:[0,4,7,11,16],multiplicity_arrai:2,multiplicity_fraction_funct:7,multiplicity_model:7,multiplicity_modul:7,multiply_values_dict:[4,13],multiprocess:7,must:[0,2,11,14,15,16,17],my_stellar_data:[1,12,17],myr:[0,11,14,15,16],n100:[0,11],n100_z0:[0,11],n100h:[0,11],n100l:[0,11],n10:[0,11],n150:[0,11],n1600:[0,11],n1600c:[0,11],n200:[0,11],n20:[0,11],n300c:[0,11],n40:[0,11],naked_helium_star_giant_branch:0,naked_helium_star_hertzsprung_gap:0,naked_main_sequence_helium_star:0,name:[1,4,5,6,11,13,15,16,17,20,22],narrow:16,natur:[0,11,16],nauenberg:[0,11],nearer:[0,11],nearest:[15,16],nebula:[0,11],necessari:[4,5,17],need:[0,2,5,9,11,12,14,15,16,17,19],neg:[0,4,11],neither:[0,5,11],neleman:[0,11],nelemans_gamma:[0,11],nelemans_max_frac_j_chang:[0,11],nelemans_minq:[0,11],nelemans_n_comenv:[0,11],nelemans_recalc_eccentr:[0,11],nemp:[0,11],nemp_cfe_minimum:[0,11],nemp_nfe_minimum:[0,11],nenamg:[0,11],neon:[0,11],nest:[4,5,17],network:[0,11,13],neutrn:[0,11],neutron:[0,11,17],neutron_star:0,never:[0,11,16],newdict:4,newer:[0,2,11],newli:[0,11],newmast:0,newnam:5,newopt:2,newton:[0,11],next:[4,15,16,17],nice:[1,5,18],nieuwenhuijzen:[0,11],nieuwenhuijzen_windfac:[0,11],nmax:2,no_thermohaline_mix:[0,11],noecho:[0,11],noechonow:[0,11],noel:[0,11],nolowq:7,nomin:[0,11],non:[0,7,11],nonconservative_angmom_gamma:[0,11],none:[0,1,2,4,5,6,7,11,15,16,17,23],nonetyp:17,nonzero:7,nor:[0,11],norm:7,normal:[0,4,11],normalis:[2,7],normalize_dict:2,normalize_multipl:7,notabl:17,note:[0,4,5,7,11,15,16],notebook:[9,11,12,13,14,15,16,17,19],notebook_api_funct:14,notebook_custom_log:[14,15,16,17],notebook_individual_system:[12,14,15,16,17],notebook_luminos:16,notebook_luminosity_funct:15,notebook_popul:[14,17],noteworthi:3,noth:[5,7],notic:16,notifi:20,nova:[0,11],nova_faml_multipli:[0,11],nova_irradiation_multipli:[0,11],nova_retention_algorithm_claeys2014:0,nova_retention_algorithm_const:0,nova_retention_algorithm_hillman2015:0,nova_retention_fract:[0,11],nova_retention_method:[0,11],nova_timestep_accelerator_index:[0,11],nova_timestep_accelerator_max:[0,11],nova_timestep_accelerator_num:[0,11],now:[0,2,4,5,11,12,14,15,16,17],nre:15,nstar:15,nuclear:[0,11],nuclear_mass_hash:5,nuclear_mass_list:5,nucleosynthesi:[0,4,11],nucleosynthesis_sourc:[4,13],nucreacmult:[0,11],nucsyn:[9,11],nucsyn_angelou_lithium:[0,11],nucsyn_gce_outflow_check:[0,11],nucsyn_hbb:[0,11],nucsyn_init_abund_mix_ag89:0,nucsyn_init_abund_mix_asplund2005:0,nucsyn_init_abund_mix_asplund2009:0,nucsyn_init_abund_mix_garciaberro:0,nucsyn_init_abund_mix_grevesse_noels_1993:0,nucsyn_init_abund_mix_karakas2002:0,nucsyn_init_abund_mix_kobayashi2011_asplund2009:0,nucsyn_init_abund_mix_lodders2003:0,nucsyn_init_abund_mix_lodders2010:0,nucsyn_metal:[0,11],nucsyn_network:[0,11],nucsyn_network_error:[0,11],nucsyn_s_process:[0,11],nucsyn_solv:[0,11],nucsyn_solver_cvod:0,nucsyn_solver_kaps_rentrop:0,nucsyn_solver_lsoda:0,nucsyn_solver_numb:0,nucsyn_third_dredge_up:[0,11],nugi:[0,11],num_ansi_colour:[0,11],number:[0,2,4,5,7,9,11,15,16,17,19],numer:4,numpi:[4,9,14,19,21],obj:4,object:[0,3,4,5,7,8,11,18],object_hook:4,object_pairs_hook:4,object_parse_funct:14,observ:16,obtain:[0,15,16],obvious:12,occur:[0,11,23],off:[0,11,17],off_m:14,offset:[0,11],ohio:[0,11],old:[5,7,16],old_solut:[9,19],oldnam:5,omega:[0,11],onc:[0,11],one:[0,4,5,7,11,13,16,17,18],onewd:0,onli:[0,4,5,7,11,12,15,16,17,23],onset:[0,11],onto:[0,2,11],opac:[0,11],opacity_algorithm:[0,11],opacity_algorithm_ferguson_op:0,opacity_algorithm_paczynski:0,opacity_algorithm_star:0,opal:[0,11],open:[14,17],oper:4,opm:2,opt:[2,4,11],option:[0,1,2,4,5,9,10,11,15,16,17,19,23],orb:[5,17],orbit:[0,2,11,15,18,23],orbit_evolut:18,orbital_inclin:[0,11],orbital_inclinationi:[0,11],orbital_period:[0,11,12,14,15,17,23],orbital_period_quadrupl:[0,11],orbital_period_tripl:[0,11],orbital_phas:[0,11],orbital_phase_quadrupl:[0,11],orbital_phase_tripl:[0,11],orbiting_object:[0,11],orbiting_objects_close_pc_threshold:[0,11],orbiting_objects_log:[0,11],orbiting_objects_tides_multipli:[0,11],orbiting_objects_wind_accretion_multipli:[0,11],order:[3,4,5,17],ordereddict:[4,16],org:[0,2,4,11],origin:[9,19],other:[0,1,2,4,6,7,9,11,13,14,15,16,17,18,19],otherwis:[0,4,5,6,7,11],our:[15,16],out:[4,6,7,12,13,15,16],outcom:[0,11],outer:[0,11],outfil:[5,17],outfile_nam:1,outfilenam:17,output:[1,3,4,5,7,9,11,12,13,14,18,19,20,23],output_dict:14,output_dir:[5,14,17],output_fil:[4,6,14],output_filenam:[5,17],output_lin:4,outsid:[0,2,11],outward:[0,11],over:[4,5,13,14,15,16,17],overflow:[0,11],overlap:4,overrid:[2,4,5],overriden:17,overshoot:[0,11],overspin_algorithm:[0,11],overspin_bs:[0,11],overspin_massloss:[0,11],overview:11,own:[5,7,9,12,14,17,19],oxygen:[0,11],oxygen_neon_white_dwarf:0,packag:[4,9,11,17,19,21],paczynski:[0,11],pad:[15,16],pad_output_distribut:[4,15,16],page:[0,9,11,17,19],pair:[4,5],panda:[4,9,14,15,16,18,19],pane:18,panel:[0,11],paper:[0,11],param:[4,5],param_nam:4,paramet:[1,2,3,4,5,6,7,9,11,12,14,15,16,17,18,20,21,23],parameter_nam:[4,5,11,13,15,16,17],parameter_value_input_typ:[4,13],pars:[3,4,5,14,15,16,17,18,20],parse_binary_c_version_info:4,parse_cmdlin:5,parse_const:4,parse_float:4,parse_funct:[5,7,14,15,16,17,20],parse_function_hr_diagram:18,parse_function_mass:18,parse_function_orbit:18,parse_int:4,parsec:2,part:[2,5,11,14,15,16,17,23],partial:[0,11],particularli:[0,11],pasp:2,pass:[5,7,9,11,12,14,17,18,19,20],path:[4,7,9,14,17,19],patho:[9,19],pdf:[0,2,9,11,19],peak:16,pend:[0,11],per:[0,4,5,7,11,14,15,17,23],percentag:[0,11],peret:[0,11],perfect:16,perfectli:[15,16],perform:[0,11],perhap:[0,11],periastron:[0,11],pericent:23,period:[0,2,11,12,14,15,16,17,18,23],period_str:2,perl:[1,4,15,16,17],persist:11,persistent_data:11,pgo:[0,11],phase:[0,11,15,16],phasevol:[0,11,17],photoevapor:[0,11],php:2,physic:[15,16,17],pick:18,piec:[5,17],pinnsonneault:[0,11],pkg:[9,19],place:[0,4,11],placehold:18,plai:[0,11,16],plan:7,planetari:[0,11],plaw2:7,pleas:[0,4,11,15,16,17],plot:[0,11,14,15,16,18],plot_data:[15,16],plot_funct:[9,10],plot_hr_diagram:18,plot_hr_diagram_singl:18,plot_mass:18,plot_orbit:18,plot_system:18,plot_typ:18,pls:5,plt:16,plu:[0,11],pms:18,pms_mass_1:18,pms_mass_2:18,pn_comenv_transition_tim:[0,11],pn_fast_wind:[0,11],pn_fast_wind_dm_agb:[0,11],pn_fast_wind_dm_gb:[0,11],pn_fast_wind_mdot_agb:[0,11],pn_fast_wind_mdot_gb:[0,11],pn_hall_fading_time_algorithm:[0,11],pn_hall_fading_time_algorithm_maximum:[0,11],pn_hall_fading_time_algorithm_minimum:[0,11],pn_resolv:[0,11],pn_resolve_maximum_envelope_mass:[0,11],pn_resolve_minimum_effective_temperatur:[0,11],pn_resolve_minimum_luminos:[0,11],pne:[0,11],pogg:[0,11],point:[0,2,4,5,9,11,19],poisson:[2,7],pol:[0,11],polytrop:[0,11],poor:16,pop:12,pop_macro:12,popul:[0,2,3,5,6,8,9,11,19,21],population_id:7,population_nam:[15,16,17],population_set:5,posit:[0,2,11],possibl:[0,1,2,4,6,9,11,14,19],post:[0,11,12],post_ce_adaptive_menv:[0,11],post_ce_envelope_dm_eagb:[0,11],post_ce_envelope_dm_gb:[0,11],post_ce_envelope_dm_tpagb:[0,11],post_ce_objects_have_envelop:[0,11],post_sn_orbit_bs:0,post_sn_orbit_method:[0,11],post_sn_orbit_tt98:0,postagb_legacy_log:[0,11],postagb_wind_gi:0,postagb_wind_krticka2020:[0,11],postagb_wind_non:[0,11],postagb_wind_use_gi:[0,11],postagbwind:[0,11],potenti:[0,11],power:[0,2,11,16],powerlaw:2,powerlaw_const:2,powerlaw_extrapolation_q:2,ppn_envelope_mass:[0,11],pragma:12,pre:[0,11,18],pre_events_stardata:[0,11],pre_main_sequ:[0,11],pre_main_sequence_fit_lob:[0,11],precis:4,precod:[5,15,16,17],predefin:[2,15,16,17],predict:7,predictor:[0,11],prefer:[0,5,11],prefix:[0,11],prepar:2,prepare_dict:2,prescrib:[0,11],prescript:[0,11,17],prescrit:[0,11],present:[2,4,5,15,16,17],preserv:[0,11],preset:18,pressur:[0,11],prev_stellar_type_1:17,prev_stellar_type_2:17,prevent:[0,7,11],previou:[4,16],previous:[14,17],previous_stardata:[1,12,14,17],primari:[1,2,5,15,16,17,23],pringl:[0,11],print:[4,5,6,7,11,12,13,14,15,16,17],print_help:[4,13],print_info:6,print_option_descript:6,print_structur:4,printf:[1,12,14,15,16,17],prior:[0,11],privat:[5,6,9],prob_dict:2,probability_weighted_mass:7,probabl:[0,1,2,5,6,7,11,12,15,16,17,18],probdist:[5,15,16,17],problem:[0,11],probtot:16,process:[0,4,5,7,11,15,16,17],processor:15,profil:[0,11],progenitor:[0,11,17],program:[9,19],project:[0,11],proper:[6,12],properli:[0,5,11],properti:[0,4,5,7,18],prot1:[0,11],prot2:[0,11],prot3:[0,11],prot4:[0,11],provid:[0,2,5,7,11,17,20],pseudorandom:[0,11],publicli:12,puls:[0,11,23],pump:[0,11],purpos:[7,15,16,17,18],push_macro:12,put:[1,4,5,7,15,16,17,18],py_rinterpol:[9,19],pyenv:[9,11,19],pyplot:16,pysiz:4,pytest:[9,19],python3:[9,11,19],python:[4,11,12,15,16,17],q_high_extrapolation_method:7,q_interpol:2,q_low_extrapolation_method:7,qcrit_bh:[0,11],qcrit_bs:0,qcrit_cheb:[0,11],qcrit_chen_han_formula:0,qcrit_chen_han_t:0,qcrit_cowd:[0,11],qcrit_degenerate_bh:[0,11],qcrit_degenerate_cheb:[0,11],qcrit_degenerate_cowd:[0,11],qcrit_degenerate_eagb:[0,11],qcrit_degenerate_gb:[0,11],qcrit_degenerate_hegb:[0,11],qcrit_degenerate_hehg:[0,11],qcrit_degenerate_hem:[0,11],qcrit_degenerate_hewd:[0,11],qcrit_degenerate_hg:[0,11],qcrit_degenerate_lmm:[0,11],qcrit_degenerate_m:[0,11],qcrit_degenerate_n:[0,11],qcrit_degenerate_onewd:[0,11],qcrit_degenerate_tpagb:[0,11],qcrit_eagb:[0,11],qcrit_gb:[0,11],qcrit_gb_bs:0,qcrit_gb_chen_han_formula:0,qcrit_gb_chen_han_t:0,qcrit_gb_ge2015:0,qcrit_gb_hjellming_webbink:0,qcrit_gb_q_no_comenv:0,qcrit_gb_temmink2021:0,qcrit_gb_vos2018:0,qcrit_ge2015:0,qcrit_hegb:[0,11],qcrit_hehg:[0,11],qcrit_hem:[0,11],qcrit_hewd:[0,11],qcrit_hg:[0,11],qcrit_hjellming_webbink:0,qcrit_lmm:[0,11],qcrit_m:[0,11],qcrit_n:[0,11],qcrit_onewd:[0,11],qcrit_q_no_comenv:0,qcrit_temmink2021:0,qcrit_tpagb:[0,11],qcrit_vos2018:0,qcrits_:[0,11],qcrits_degenerate_:[0,11],qdata:2,qlimit:2,quad:7,quadrat:[0,11],quadrulpl:[0,11],quadrupl:[0,2,7,11],quantiti:18,queri:14,queue:7,quickli:14,quit:[0,4,11],r_l:23,radau:[0,11],radi:[0,11],radiat:[0,11],radii:[0,11,23],radiu:[0,1,11,12,17,18,23],radius_1:18,radius_2:18,ragb:23,raghavan2010_binary_fract:2,raghavan:2,rai:[0,11],railton:[0,11],rais:[0,4,7,11,17],ram:[0,11],ran:[7,15],random:[0,7,11],random_count:14,random_se:[0,11,14],random_skip:[0,11],random_system:[0,11],random_systems_se:[0,11],rang:[0,2,5,7,11,14,15,16,17,21],rapid:[0,11],rapidli:[0,11],rappaport:[0,11],rate:[0,2,11],rather:[0,4,5,7,9,11,12,14,17,19],ratio:[0,2,11,15,16,17,23],raw:[4,5,7,11,18,20],raw_output:4,reach:[0,11],reaction:[0,11],read:[3,4,14,17],real:[5,17],realist:16,realiti:16,realli:[0,5,6,7,11,17],reason:[0,11,16],rebuild:[0,9,11,19],rebuilt:[9,19],recalcul:[0,11],receiv:4,recogn:17,recombin:[0,11],recommend:[1,3],recompil:[9,15,16,17,19],recurs:[4,5],recursive_change_key_to_float:4,recursive_change_key_to_str:4,red:[0,11,16],redhat:1,redshift:2,reduc:[0,11],reduct:7,refer:4,regardless:18,region:[0,11],regist:17,reignit:[0,11],reimer:[0,11],reinstal:[9,19],reject:[0,11],rejects_in_log:[0,11],rejuven:[0,11],rel:[0,11],relat:[0,11],releas:[4,9,19],reliabl:11,remain:[0,11],rememb:16,remesh:[0,11],remnant:[0,11],remov:[0,4,5,9,11,14,17,19],remove_fil:4,renam:[5,16],rename_grid_vari:[5,16],renormalis:2,rentrop:[0,11],repeat:[0,7,11],repo:[9,19],report:[0,11,15,16,17],repositori:3,repres:7,represent:[4,5,17],reproduc:[0,11],requir:[0,2,4,11,14,15,16,17,18,20],res:[15,16],reset:[0,11],reset_pref:[0,11],reset_star:[0,11],reset_stars_default:[0,11],resolut:[0,5,7,11,15,16,17],resolv:[0,11,15],reson:[0,11],resourc:16,respect:[0,2,11],rest:[2,5,17],restructuredtext:4,result:[0,1,2,4,5,7,9,11,14,15,16,17,19],result_arrai:2,result_dict:2,results_dictionari:[15,16],retain:[0,11],rethink:4,return_all_info:5,return_arglin:11,return_binary_c_default:5,return_binary_c_version_info:[4,5,13],return_compilation_dict:1,return_help:11,return_help_al:[4,11],return_maximum_mass_ratio_for_rlof:[11,23],return_minimum_orbit_for_rlof:[11,23],return_persistent_data_memaddr:11,return_population_set:5,return_store_memaddr:11,return_version_info:[4,11],reus:5,revap_in:[0,11],revap_out:[0,11],revers:[0,11,18],reverse_tim:[0,11],revis:[0,4],rewrit:5,rhagavan:7,ri0005:17,rich:[0,11],riello:[0,11],rin:[0,11],ring:[0,11],risk:[5,17],ritter:[0,11],rk2:[0,11],rk4:[0,11],rlof:[0,11,23],rlof_angular_momentum_transfer_model:[0,11],rlof_angular_momentum_transfer_model_bs:0,rlof_angular_momentum_transfer_model_conserv:0,rlof_eccentric_as_circular:[0,11],rlof_entry_threshold:[0,11],rlof_f:[0,11],rlof_interpolation_binary_c:0,rlof_interpolation_bs:0,rlof_interpolation_method:[0,11],rlof_mdot_factor:[0,11],rlof_mdot_modul:[0,11],rlof_method:[0,11],rlof_method_adapt:0,rlof_method_adaptive2:0,rlof_method_bs:0,rlof_method_claei:0,rlof_method_ritt:0,rlof_nonconservative_gamma_donor:0,rlof_nonconservative_gamma_isotrop:0,rlof_radiation_correct:[0,11],rlof_transition_objects_escap:[0,11],rob:[0,2,11,23],robert:[9,19],roch:[0,11,23],roche_lob:23,rochelob:23,rol1:14,rol2:14,room:[5,17],root:[9,19],rotat:[0,2,11],rotation:[0,11],rotationally_enhanced_expon:[0,11],rotationally_enhanced_mass_loss:[0,11],rotationally_enhanced_massloss:[0,11],rotationally_enhanced_massloss_angmom:0,rotationally_enhanced_massloss_langer_formula:[0,11],rotationally_enhanced_massloss_langer_formula_and_angmom:0,rotationally_enhanced_massloss_non:0,rout:[0,11],routin:[0,3,5,9,11,18],row:[14,18],rring:[0,11],rssd:2,rst:[4,6],rsun:18,rubric:5,run:[0,1,3,4,5,7,9,11,15,16,19,20],run_popul:11,run_system:[11,12,13,14,18,20],run_system_wrapp:[9,10,12,14],run_wrapp:3,run_zero_probability_system:7,runtim:[1,7],russel:[0,11],rzam:23,s_option:7,safe:17,sai:[0,11],said:[0,11],same:[0,4,7,9,11,14,19],sampl:[0,2,3,5,9,11,15,17,21],sample_valu:2,sampler:9,sana12:[2,15,17],sana:2,save:[0,1,2,11,12,15,16,17],save_pre_events_stardata:[0,11],scalar:4,scalo:2,scanf:0,scheme:[0,11],schneider:[0,11],schroeder:[0,11],script:[3,9,12,19],sdb:[0,11],sdist:[9,19],sdo:[0,11],seaborn:[15,16],search:[9,15],second:[0,2,4,5,11,18],secondari:[2,15,23],section:[2,4,8,9,11,17,19],see:[0,5,9,11,12,13,14,15,16,17,18,19],seed:[0,11],seem:[9,18,19],seen:4,segment:21,seitenzahl2013_model:[0,11],seitenzahl:[0,11],select:[0,4,11,14,15],selected_head:4,selector:[0,11],self:[5,7,14,15,16,17],semi:[0,11],sent:[0,11],sentenc:1,sep:[0,2,5,14,15,17,23],sep_max:[15,17],sep_min:[15,17],separ:[0,2,4,5,6,11,12,14,17,18,23],separation_quadrupl:[0,11],separation_tripl:[0,11],separta:[0,11],seper:17,sequenc:[0,11,12,15,16],seri:[0,11],serialis:[4,5],serv:4,server:5,set:[0,1,2,3,4,5,6,7,9,12,13,14,18,19],set_moe_di_stefano_set:5,set_opt:2,set_xlabel:[15,16],set_ylabel:[15,16],setup:[9,17,19,20],sever:[6,7,13,17,18,20],sfh:2,shara:[0,11],share:[1,7,14,20],shared_lib_filenam:12,shell:[0,11],shellular:[0,11],shorten:[0,11],should:[0,1,2,4,5,6,7,9,11,14,15,16,17,18,19,20],shouldn:[0,4,11],show:[0,3,7,11,14,15,16,17,18],show_plot:18,show_stellar_typ:18,shown:[0,11,18],shrinkagb:14,side:[15,16,17],siess:[0,11],sigma:2,signal:15,silent:4,sill:[0,11],simpl:15,simplest:14,simpli:[0,11,16],simul:[0,1,11,12,15,16,17],simulation_:5,sinc:[4,18],singl:[0,2,3,5,7,11,15,16,17,18],single_star_lifetim:[11,12,14],sit:[0,11],site:11,situat:11,size:[4,7,15,16],skip:[0,4,7,9,11,15,19],skipkei:4,slightli:11,slope:2,slow:[0,11,15,16],slower:[0,11],slurm:[5,7,8],slurm_grid:5,small:[0,11,16],small_envelope_method:[0,11],small_envelope_method_bs:0,small_envelope_method_miller_bertolami:0,smaller:[0,11],smarter:16,smooth:16,smoother:16,sn_impulse_liu2015:0,sn_impulse_non:0,sn_impulse_wheeler1975:0,sn_kick_companion_a:[0,11],sn_kick_companion_aic_bh:[0,11],sn_kick_companion_bh_bh:[0,11],sn_kick_companion_bh_n:[0,11],sn_kick_companion_ecap:[0,11],sn_kick_companion_grb_collapsar:[0,11],sn_kick_companion_hestaria:[0,11],sn_kick_companion_ia_chand:[0,11],sn_kick_companion_ia_chand_co:[0,11],sn_kick_companion_ia_eld:[0,11],sn_kick_companion_ia_h:[0,11],sn_kick_companion_ia_he_co:[0,11],sn_kick_companion_ia_hybrid_hecowd:[0,11],sn_kick_companion_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_companion_ibc:[0,11],sn_kick_companion_ii:[0,11],sn_kick_companion_iia:[0,11],sn_kick_companion_ns_n:[0,11],sn_kick_companion_tz:[0,11],sn_kick_companion_wdkick:[0,11],sn_kick_dispersion_aic_bh:[0,11],sn_kick_dispersion_bh_bh:[0,11],sn_kick_dispersion_bh_n:[0,11],sn_kick_dispersion_ecap:[0,11],sn_kick_dispersion_grb_collapsar:[0,11],sn_kick_dispersion_ia_hybrid_hecowd:[0,11],sn_kick_dispersion_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_dispersion_ibc:[0,11],sn_kick_dispersion_ii:[0,11],sn_kick_dispersion_ns_n:[0,11],sn_kick_dispersion_tz:[0,11],sn_kick_distribution_aic_bh:[0,11],sn_kick_distribution_bh_bh:[0,11],sn_kick_distribution_bh_n:[0,11],sn_kick_distribution_ecap:[0,11],sn_kick_distribution_grb_collapsar:[0,11],sn_kick_distribution_ia_hybrid_hecowd:[0,11],sn_kick_distribution_ia_hybrid_hecowd_sublumin:[0,11],sn_kick_distribution_ibc:[0,11],sn_kick_distribution_ii:[0,11],sn_kick_distribution_ns_n:[0,11],sn_kick_distribution_tz:[0,11],sn_none:12,sn_type:12,sneia:[0,11],snia:[0,11],snippet:[11,14],sns:[15,16],solar:[0,2,11,13,23],solver:[0,11],solver_forward_eul:0,solver_predictor_corrector:0,solver_rk2:0,solver_rk4:0,some:[0,1,2,5,7,9,11,12,13,14,15,16,17,18,19],someth:[0,5,11,14,15,16],sometim:13,somewhat:[15,16,17],soon:21,sort:[4,15,16],sort_kei:4,sourc:[1,2,4,5,6,7,10,18,20,21,23],source_file_filenam:7,source_list:5,sourcecod:[9,11,12,19],sourcefile_nam:1,space:[0,5,11,15,16,17,21],spacing_funct:[9,10],spacingfunc:[5,15,16,17],spacingfunct:[5,17],special:[0,11,17],specif:[0,4,11,13,14,18],specifi:[0,7,11],spectral:2,speed:[0,7,11],speedtest:[0,11],spent:4,spera:[0,11],spheric:[0,11],spiki:16,spin:[0,11],spinrat:[0,11],split:[0,7,11,14,17],split_lin:14,splitlin:[11,12,14,15,16,17],splitpoint:[0,11],spread:5,sqrt:[0,11],src:[0,9,11,12,19],stabil:[0,11],stabl:[0,11],stancliff:[0,11],standard:[0,2,11,15,16],star:[1,2,7,9,11,12,13,14,15,16,17,18,23],star_with_no_mass:0,starcount:[15,16,17],stardata:[0,1,11,12,14,15,16,17],stardata_dump_filenam:[0,11],stardata_load_filenam:[0,11],stardata_t:12,starnum:15,start:[0,1,4,5,6,7,11,14,15,16,17],start_tim:[0,11],start_timestamp:[15,16,17],startrack:[0,11],startswith:14,state:[0,11],statement:[1,12,14,15,16,17],statist:[0,11],statu:[0,1,11,15,16,17],stderr:[0,11],stdout:4,steadi:[0,11],stefan:18,stefano:[4,5,9,17],stellar:[0,2,3,7,9,11,18,22],stellar_structure_algorithm:[0,11],stellar_structure_algorithm_external_funct:0,stellar_structure_algorithm_mint:0,stellar_structure_algorithm_modified_bs:0,stellar_structure_algorithm_non:0,stellar_typ:[1,9,10,12,14,15,16,17,18],stellar_type_1:[0,11,17,18],stellar_type_2:[0,11,17,18],stellar_type_3:[0,11],stellar_type_4:[0,11],stellar_type_dict:22,stellar_type_dict_short:22,step:[4,5,12,14,15,16,17,18,21],stepsiz:[5,17],stick:7,stiff:[0,11],still:[1,7,12],stop:[0,4,11,15],stopfil:[0,11],storag:[0,11],store:[0,2,3,4,5,7,9,14,15,16,17,19,23],store_capsul:11,store_memaddr:[11,23],str:[1,4,5,6,17,18],straight:5,straightforward:[15,16,17],straniero:[0,11],strength:[0,11],strict:4,strictli:[15,16],string:[0,1,3,4,5,6,7,11,13,14,15,16,17,18,20],strip:[0,11,14],stronger:[0,11],struct:[0,11,12],structur:[0,4,7,11,18],stuff:[4,7,14,17,18],style:[0,5,11],sub:[0,4,11],subdict:4,subject:[0,11],sublumin:[0,11],submit:9,subroutin:8,subsequ:[0,11],subtract:4,subtract_dict:4,succe:[0,11],suggest:[0,9,11,19],suit:[9,19],sum:[0,11],sundial:[0,11],supercrit:[0,11],supernova:[0,7,11],superwind:[0,11],superwind_mira_switchon:[0,11],sure:[2,5,7,9,14,15,16,17,18,19,20],surfac:[0,11],surrei:17,surviv:[0,11],survivor:[0,11],switcher:[0,11],symmetr:[0,11],synchron:[0,11],synonym:[0,11],synthesi:[7,9,15,16,17,19],system:[0,3,4,5,7,9,11,12,15,16,17,18,19,20],system_gener:[5,17],system_numb:5,system_queue_fil:15,tabl:[0,2,11],take:[0,2,4,5,7,11,15,17,20],taken:[0,4,11,12],tar:[9,19],target:[1,6],task:[0,2,4,5,6,8,11,17,18,20,21,23],tauri:[0,11],tbse:[0,11],technic:[12,15,16,17],teff:[0,2,11],teff_1:18,teff_2:18,teff_postagb_max:[0,11],teff_postagb_min:[0,11],tell:4,temp_dir:[4,14,16,17],temperatur:[0,2,11,18],termin:[1,9,12,17,19],test:[0,4,5,7,9,11,14,17,19,23],test_data:[0,11],test_func:11,test_logfil:14,test_pop:17,text:[4,6],than:[0,2,4,7,9,11,16,17,19],thats:17,thei:[0,2,4,5,7,11,15,17,18],thelog:[0,11],them:[2,4,5,11,17],themselv:[2,4],theoret:[15,16],thermal:[0,2,11,23],thermally_pulsing_asymptotic_giant_branch:0,thermohalin:[0,11],thesi:[0,11],thi:[0,1,2,4,5,6,7,9,10,11,12,13,14,15,16,17,18,19,20,21,23],thick:[0,11],thick_disc_end_ag:[0,11],thick_disc_logg_max:[0,11],thick_disc_logg_min:[0,11],thick_disc_start_ag:[0,11],thin:[0,11],thing:[0,2,4,5,6,11,15,16,17,20],think:[0,4,5,11],third:[0,2,11],third_dup:[0,11],third_dup_multipli:[0,11],thorn:[0,11],those:[4,5,9,15,16,17,19],thread:[5,7,15,16],thread_id:7,three:[0,2,11,16,17],three_part_powerlaw:[2,15,16,17],threshold:[0,4,7,11],through:[5,11,14,15,16,17,18,20],throughout:[5,15,16,17],tidal:[0,11],tidal_strength_factor:[0,11],tide:[0,11],tides_convective_damp:[0,11],tides_hurley2002:[0,11],tides_zahn1989:[0,11],time:[0,1,2,4,5,7,9,11,12,14,15,16,17,18,19],timescal:[0,11],timestamp:7,timestep:[0,11,12,14,15,16],timestep_limit:[0,11],timestep_log:[0,11],timestep_modul:[0,11],timestep_multipli:[0,11],timestep_solver_factor:[0,11],tinslei:2,titl:[6,15],tmp:[0,4,9,11,14,15,16,17,19],tmp_dir:[5,7,14,16,17],tmp_tabl:2,todo:[0,1,2,4,5,6,7,11,13,17,18,20,21,23],toler:[0,11],too:[0,4,7,9,11,16,19,20],took:[15,16,17],top:17,topic:[0,11],torqu:[0,11],total:[0,2,4,5,7,11,15,16,17,18],total_count:[15,16,17],total_mass_run:[15,16,17],total_prob:[15,16,17],total_probability_weighted_mass_run:[15,16,17],tout:[0,11,23],tout_pringle_1992_multipli:[0,11],tpagb:[0,11],tpagb_reimers_eta:[0,11],tpagb_wind_beasor_etal_2020:0,tpagb_wind_bloeck:0,tpagb_wind_goldman_etal_2017:0,tpagb_wind_mattsson:0,tpagb_wind_reim:0,tpagb_wind_rob_cwind:0,tpagb_wind_van_loon:0,tpagb_wind_vw93_karaka:0,tpagb_wind_vw93_karakas_carbon_star:0,tpagb_wind_vw93_orig:0,tpagb_wind_vw93_orig_carbon_star:0,tpagbwind:[0,11],tpagbwindfac:[0,11],tpr:15,traceback:4,track:[7,18],trade:[0,11],transfer:[0,11],transform:[0,4,11],transit:[0,11],treat:[0,11],trigger:[0,11],trio:[15,16,17],tripl:[0,2,7,11],truli:[0,11],tupl:1,turn:[0,4,11,14,17],two:[0,4,11,12,22,23],txt:[5,14,17,20],type:[0,1,2,4,5,6,7,11,14,15,16,17,18,21,22,23],type_chng:14,type_ia_mch_supernova_algorithm:[0,11],type_ia_mch_supernova_algorithm_dd2:0,type_ia_mch_supernova_algorithm_seitenzahl2013:0,type_ia_mch_supernova_algorithm_seitenzahl2013_automat:0,type_ia_sub_mch_supernova_algorithm:[0,11],type_ia_sub_mch_supernova_algorithm_livne_arnett_1995:0,typic:[0,11],ubvri:[0,11],ugriv:[0,11],unavail:[0,11],uncom:[5,14,15,16,17],unction:11,undef:12,under:[14,21],undescrib:6,uniform:2,uninstal:[9,19],union:[2,4,5,17,21,23],uniqu:[4,5,7,17],unit:[0,11,13,23],univari:[0,11],unix:5,unknown:20,unless:[1,5,7],unlik:16,unload:5,unpars:11,unrecogn:[9,19],unresolv:15,unsign:0,unstabl:[0,11],until:[0,2,4,11],unus:[0,7,11],unweight:17,updat:[2,4,5,9,16,17,19],update_dict:[4,13],update_grid_vari:[5,16],upper:[0,2,11,21],usag:[0,3],use:[0,2,3,4,5,7,8,9,11,12,13,14,15,17,18,19,20],use_astropy_valu:18,use_datadir:[5,17],use_fixed_timestep_:[0,11],use_periastron_roche_radiu:[0,11],use_tabular_intershell_abundances_karakas_2012:[0,11],usecas:3,used:[0,1,2,4,5,7,11,12,13,14,15,16,17,18],useful:[0,4,5,7,9,11,13,14,15,16,17,19,20,23],useful_func:[9,10],user:[1,2,4,5,6,7,12,20],uses:[0,7,11,12,17],using:[0,1,5,9,12,13,14,15,16,19],usual:[0,2,4,7,11,15,16,17],util:[1,2,4,5,6,11,12,13,14,15,16,17,18,20,21,23],val:2,valid:[0,2,4,11,12],valu:[0,1,2,4,5,6,7,11,13,14,15,16,17,18],value_lin:14,valueerror:17,valuerang:[5,15,16,17],values_arrai:14,van:[0,11],vandenheuvel_log:[0,11],vari:[0,11,17],variabl:[0,3,4,5,7,11],variant:[0,11],variou:[0,11],vassiliadi:[0,11],vb1print:5,veloc:[0,2,11],venv:[9,19],verbos:[1,2,4,5,7,9,14,15,16,17,19],verbose_print:4,veri:[0,5,11,12,14,16,17,21],versa:23,version:[0,4,5,9,11,13,17,19],version_info:4,version_info_dict:13,version_info_str:4,version_onli:[0,11],via:[3,5,7,11,12,15,16,17,18],vice:23,vink:[0,11],virtual:[9,19],virtualenviron:[9,19],viscos:[0,11],viscou:[0,11],visibl:12,visit:9,volum:[0,11],vrot1:[0,11],vrot2:[0,11],vrot3:[0,11],vrot4:[0,11],vrot_breakup:0,vrot_bs:0,vrot_non_rot:0,vrot_sync:0,vw93:[0,11],vw93_eagb_wind_spe:[0,11],vw93_mira_shift:[0,11],vw93_multipli:[0,11],vw93_tpagb_wind_spe:[0,11],vwind:[0,11],vwind_beta:[0,11],vwind_multipli:[0,11],wai:[0,4,5,7,11,14,16,18],wang:[0,11],want:[0,2,4,5,6,7,11,12,13,15,16,17,18],warmup_cpu:[0,11],warn:[0,11,14,17],wast:16,wave:[0,11,17],wd_accretion_rate_new_giant_envelope_lower_limit_helium_donor:[0,11],wd_accretion_rate_new_giant_envelope_lower_limit_hydrogen_donor:[0,11],wd_accretion_rate_new_giant_envelope_lower_limit_other_donor:[0,11],wd_accretion_rate_novae_upper_limit_helium_donor:[0,11],wd_accretion_rate_novae_upper_limit_hydrogen_donor:[0,11],wd_accretion_rate_novae_upper_limit_other_donor:[0,11],wd_kick:[0,11],wd_kick_at_every_puls:0,wd_kick_at_given_puls:0,wd_kick_direct:[0,11],wd_kick_end_agb:0,wd_kick_first_rlof:0,wd_kick_pulse_numb:[0,11],wd_kick_when:[0,11],wd_sigma:[0,11],wdwd_merger_algorithm:[0,11],wdwd_merger_algorithm_bs:0,wdwd_merger_algorithm_chen2016:0,wdwd_merger_algorithm_perets2019:0,web:[15,16],weight:[0,7,11,16],well:[0,4,7,9,11,12,14,15,16,19],went:16,were:[4,15,16,17],what:[0,1,2,4,6,7,9,11,12,14,15,16,17,19,20],whatev:[0,5,9,11,12,19],wheeler:[0,11],when:[0,1,2,4,5,6,7,9,11,13,14,17,19,20],whenev:[9,19],where:[0,1,2,4,5,6,7,9,11,15,16,17,19],whether:[0,2,4,5,6,7,11,13,17,18,23],which:[0,1,2,4,5,6,7,9,11,12,13,14,15,16,17,19,20,23],whichev:7,white:[0,11],white_dwarf_cooling_carrasco2014:[0,11],white_dwarf_cooling_mestel:[0,11],white_dwarf_cooling_mestel_modifi:[0,11],white_dwarf_cooling_model:[0,11],white_dwarf_radius_carrasco2014:[0,11],white_dwarf_radius_model:[0,11],white_dwarf_radius_mu:[0,11],white_dwarf_radius_nauenberg1972:[0,11],whole:[0,5,7,11,12],wide:[15,16],width:[0,11],wiggl:16,wind:[0,11],wind_algorithm_binary_c_2020:0,wind_algorithm_hurley2002:0,wind_algorithm_non:0,wind_algorithm_schneider2018:0,wind_angmom_loss_bs:0,wind_angmom_loss_lw:0,wind_angmom_loss_lw_hybrid:0,wind_angmom_loss_spherically_symmetr:0,wind_angular_momentum_loss:[0,11],wind_disc_angmom_fract:[0,11],wind_disc_mass_fract:[0,11],wind_djorb_fac:[0,11],wind_gas_to_dust_ratio:[0,11],wind_lbv_luminosity_lower_limit:[0,11],wind_mass_loss:[0,11],wind_multiplier_:[0,11],wind_nieuwenhuijzen_luminosity_lower_limit:[0,11],wind_type_multiplier_:[0,11],within:[0,4,5,9,11,12,13,17,19],without:[2,4,5,7,12,14,16],won:[0,11,14],wood:[0,11],work:[0,4,5,9,11,12,14,15,16,18,19],would:[0,4,11,16,17,18],wouldn:[5,17],wr_wind:[0,11],wr_wind_bs:0,wr_wind_eldridg:0,wr_wind_fac:[0,11],wr_wind_maeder_meynet:0,wr_wind_nugis_lam:0,wrap:[1,12],wrapper:[4,11,12,14,23],write:[1,4,5,6,7,11,12,14,15,17,20],write_binary_c_calls_to_fil:[5,17],write_binary_c_parameter_descriptions_to_rst_fil:4,write_grid_options_to_rst_fil:6,write_logfil:11,written:[5,6,7,11,14,17,20],written_data:14,wrlof_mass_transf:[0,11],wrlof_method:[0,11],wrlof_non:0,wrlof_q_depend:0,wrlof_quadrat:0,wrong:[9,16,19],wrwindfac:[0,11],wtts2:[0,11],wtts_log:[0,11],www:[0,2,11],x86_64:11,year:[0,2,11],yet:[0,4,5,7,11,18],yield:[0,11],you:[0,1,4,5,6,7,9,11,12,14,15,16,17,18,19,23],young:[0,11],your:[7,9,12,14,19],yourself:[15,16,17,18],yscale:[15,16],zahn:[0,11],zam:[0,2,3,11,15,20,23],zams_collis:23,zams_mass:[15,16,17],zams_mass_1:17,zams_mass_2:17,zero:[0,1,3,4,7,9,11],zero_ag:[12,14,15,16,17],zero_age_main_sequence_star:[15,16],zero_age_main_sequence_starn:15,zero_prob_stars_skip:[15,16,17],zone:[0,11],zoom:[0,11],zoomfac_multiplier_decreas:[0,11],zoomfac_multiplier_increas:[0,11],zsolar:2,zytkow:[0,11]},titles:["Binary_c parameters","custom_logging_functions module","distribution_functions module","Example notebooks","functions module","grid_class module","Grid options and descriptions","Population grid code options","hpc_functions module","Welcome to binary_c-python\u2019s documentation!","Binarycpython code","Using the API functionality of binarycpython","Using custom logging routines with binarycpython","Extra features and functionality of binarycpython","Running individual systems with binarycpython","Zero-age stellar luminosity function in binaries","Example use case: Zero-age stellar luminosity function","Running populations with binarycpython","plot_functions module","Python module for binary_c","run_system_wrapper module","spacing_functions module","stellar_types module","useful_funcs module"],titleterms:{"case":16,"function":[4,11,13,14,15,16,17],"public":7,Adding:[15,16,17],Using:[11,12],about:13,after:[9,19],age:[15,16],algorithm:0,api:[11,12,14],better:16,binari:[0,15],binary_c:[0,9,11,13,19],binarycpython:[10,11,12,13,14,17],build:[9,13,19],code:[7,10],compact:12,custom:12,custom_logging_funct:1,descript:6,dictionari:13,directli:12,distribut:16,distribution_funct:2,document:[9,19],environ:[9,19],evolut:12,evolv:[15,16,17],exampl:[3,9,11,12,13,16,17,19],extra:13,faq:[9,19],featur:13,free:11,from:[9,11,12,19],full:17,get:[11,13],grid:[6,7,15,16,17],grid_class:5,handl:[15,16,17],help:13,hpc_function:8,indic:9,individu:14,inform:[11,13],initi:16,input:0,instal:[9,19],instruct:[9,19],issu:[9,19],log:[12,15,16,17],luminos:[15,16],mass:[12,16],misc:0,modif:13,modul:[1,2,4,5,8,9,18,19,20,21,22,23],moe:7,note:[9,19],notebook:3,noteworthi:17,nucsyn:0,object:[12,14,15,16,17],option:[6,7],output:[0,15,16,17],paramet:[0,13],pars:13,pip:[9,19],plot_funct:18,popul:[7,12,14,15,16,17],privat:7,python:[9,19],requir:[9,19],routin:12,run:[12,14,17],run_system_wrapp:20,run_wrapp:14,sampl:16,sampler:7,script:17,section:0,set:[11,15,16,17],singl:14,sourc:[9,19],spacing_funct:21,star:0,stefano:7,stellar:[15,16],stellar_typ:22,store:11,string:12,supernova:12,system:14,tabl:9,usag:[9,11,12,19],use:16,useful_func:23,using:11,variabl:[9,15,16,17,19],via:[9,14,19],welcom:9,when:12,zam:16,zero:[15,16]}}) \ No newline at end of file diff --git a/docs/build/html/spacing_functions.html b/docs/build/html/spacing_functions.html index f9d19b5a8..4af76623c 100644 --- a/docs/build/html/spacing_functions.html +++ b/docs/build/html/spacing_functions.html @@ -262,9 +262,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/stellar_types.html b/docs/build/html/stellar_types.html index c10033199..0bf1079a8 100644 --- a/docs/build/html/stellar_types.html +++ b/docs/build/html/stellar_types.html @@ -243,9 +243,9 @@ provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/build/html/useful_funcs.html b/docs/build/html/useful_funcs.html index c2e0dcaca..8c504966e 100644 --- a/docs/build/html/useful_funcs.html +++ b/docs/build/html/useful_funcs.html @@ -441,9 +441,9 @@ determine if two stars collide on the ZAMS</p> provided by <a href="https://readthedocs.org">Read the Docs</a>. <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. diff --git a/docs/source/_templates/footer.html b/docs/source/_templates/footer.html index 614d6567d..e9fe70c02 100644 --- a/docs/source/_templates/footer.html +++ b/docs/source/_templates/footer.html @@ -2,8 +2,8 @@ {%- block extrafooter %} <br><br> -Generated on binarycpython git branch: master git revision cac51a6dc71daeeb943b70d5598350ab43901299 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. +Generated on binarycpython git branch: master git revision 9af65282f7f847c8638c85a39f03c803b635e442 url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c-python/-/tree/master">git url</a>. <br><br> -Using binary_c with bit branch branch_david: git revision: "6162:20210825:093caf0e9" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/branch_david">git url</a>. +Using binary_c with bit branch newmaster: git revision: "6185:20210910:1621c23a5" url: <a href="https://gitlab.eps.surrey.ac.uk/ri0005/binary_c/-/tree/newmaster">git url</a>. {% endblock %} \ No newline at end of file diff --git a/docs/source/binary_c_parameters.rst b/docs/source/binary_c_parameters.rst index 9d05193ac..cdce51580 100644 --- a/docs/source/binary_c_parameters.rst +++ b/docs/source/binary_c_parameters.rst @@ -4,7 +4,7 @@ The following chapter contains all the parameters that the current version of bi This information was obtained by the following binary_c build: - **binary_c git branch**: branch_david **binary_c git revision**: 6162:20210825:093caf0e9 **Built on**: Aug 25 2021 18:02:39 + **binary_c git branch**: newmaster **binary_c git revision**: 6185:20210910:1621c23a5 **Built on**: Sep 10 2021 15:05:46 Section: stars @@ -424,6 +424,11 @@ Section: stars | **Parameter input type**: Float(scanf) | **Default value**: NULL +| **Parameter**: artificial_mass_accretion_rate_by_stellar_type%d +| **Description**: Constant mass accretion rate for stellar type <n>. +| **Parameter input type**: Float(scanf) +| **Default value**: NULL + | **Parameter**: artificial_angular_momentum_accretion_rate%d | **Description**: Constant angular momentum accretion for star <n>. | **Parameter input type**: Float(scanf) @@ -468,13 +473,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['BH_HURLEY2002 = 0', 'BH_BELCZYNSKI = 1', 'BH_SPERA2015 = 2', 'BH_FRYER12_DELAYED = 3', 'BH_FRYER12_RAPID = 4', 'BH_FRYER12_STARTRACK = 5'] -| **Parameter**: PPISN_prescription -| **Description**: (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. -| **Parameter input type**: Integer -| **Default value**: 1 -| **Macros**: ['PPISN_NONE = 0', 'PPISN_FARMER19 = 1'] -| **Extra**: Ignore - | **Parameter**: sn_kick_distribution_II | **Description**: Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Integer @@ -502,7 +500,7 @@ Section: stars | **Parameter**: sn_kick_distribution_GRB_COLLAPSAR | **Description**: Set the distribution of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Integer -| **Default value**: 0 +| **Default value**: 1 | **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] | **Parameter**: sn_kick_distribution_TZ @@ -541,24 +539,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] -| **Parameter**: sn_kick_distribution_PPISN -| **Description**: Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 1 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - -| **Parameter**: sn_kick_distribution_PISN -| **Description**: Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 0 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - -| **Parameter**: sn_kick_distribution_PHDIS -| **Description**: Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Integer -| **Default value**: 0 -| **Macros**: ['KICK_VELOCITY_FIXED = 0', 'KICK_VELOCITY_MAXWELLIAN = 1', 'KICK_VELOCITY_CUSTOM = 2'] - | **Parameter**: sn_kick_dispersion_II | **Description**: Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Float @@ -582,7 +562,7 @@ Section: stars | **Parameter**: sn_kick_dispersion_GRB_COLLAPSAR | **Description**: Set the dispersion of speeds applied to kick newly-born neutron stars and black holes after a type Ib/c core-collapse supernova which is also a collapsar. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). | **Parameter input type**: Float -| **Default value**: 0 +| **Default value**: 190 | **Parameter**: sn_kick_dispersion_TZ | **Description**: Set the dispersion of speeds applied to kick newly-born neutron stars and black holes at the death of a Thorne-Zytkow object. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). @@ -614,21 +594,6 @@ Section: stars | **Parameter input type**: Float | **Default value**: 0 -| **Parameter**: sn_kick_dispersion_PPISN -| **Description**: Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 190 - -| **Parameter**: sn_kick_dispersion_PISN -| **Description**: Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 0 - -| **Parameter**: sn_kick_dispersion_PHDIS -| **Description**: Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). -| **Parameter input type**: Float -| **Default value**: 0 - | **Parameter**: sn_kick_companion_IA_He | **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. | **Parameter input type**: Float @@ -749,24 +714,6 @@ Section: stars | **Default value**: 0 | **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] -| **Parameter**: sn_kick_companion_PPISN -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - -| **Parameter**: sn_kick_companion_PISN -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - -| **Parameter**: sn_kick_companion_PHDIS -| **Description**: Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. -| **Parameter input type**: Float -| **Default value**: 0 -| **Macros**: ['SN_IMPULSE_NONE = 0', 'SN_IMPULSE_LIU2015 = 1', 'SN_IMPULSE_WHEELER1975 = 2'] - | **Parameter**: wd_sigma | **Description**: Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. | **Parameter input type**: Float @@ -827,22 +774,22 @@ Section: stars | **Parameter**: delta_mcmin | **Description**: A parameter to reduce the minimum core mass for third dredge up to occur on the TPAGB. As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lambda_min | **Description**: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. See also lambda_multiplier. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lambda_multiplier | **Description**: A parameter to increase the efficiency of third dredge up on the TPAGB. The efficiency is lambda * lambda_mult, and setting lambda_min>0 implies that, once Mc>Mcmin (see delta_mcmin) lambda=Max(lambda(fit to Karakas), lambda_min). As used by Izzard and Tout (2004) to increase the amount of dredge up, hence carbon, in Magellanic cloud stars. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: minimum_envelope_mass_for_third_dredgeup | **Description**: The minimum envelope mass for third dredge up on the TPAGB. Early, solar metallicity models by Straniero et al suggested 0.5Msun is typical. However, circumstantial evidence (Izzard et al 2009) as well as newer models by Stancliffe and Karakas suggest that at low metallicity a value nearer zero is more appropriate. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.5 | **Parameter**: mass_of_pmz | **Description**: The mass in the partial mixing zone of a TPAGB star, using the Karakas 2012 tables. Ask Carlo Abate for more details, or see the series of papers Abate et al 2012, 2013, 2014. Requires NUCSYN and USE_TABULAR_INTERSHELL_ABUNDANCES_KARAKAS_2012. @@ -852,12 +799,12 @@ Section: stars | **Parameter**: c13_eff | **Description**: The "efficiency" of partial mixing in a TPAGB star intershell region, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: mc13_pocket_multiplier | **Description**: Multiplies the mass in the partial mixing zone of a TPAGB star, when using the s-process tables of Gallino, Busso, Lugaro et al. as provided by Maria Lugaro for the Izzard et al. 2009 paper. Requires NUCSYN and NUCSYN_S_PROCESS. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: tides_convective_damping | **Description**: Tidal convective damping algorithm. 0=TIDES_HURLEY2002 Zahn 197x timescales + Hut, as in Hurley et al (2002), 1 = TIDES_ZAHN1989: Zahn 1989 lambdas + Hut. @@ -879,7 +826,7 @@ Section: stars | **Parameter**: hbbtfac | **Description**: A parameter to modulate the temperature at the base of the hot-bottom burning zone in TPAGB stars. (Works only if NUCSYN is defined) | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: wind_multiplier_%d | **Description**: Wind multiplier for the stellar type specified by the intger %d. By default these are all 1.0. @@ -951,7 +898,7 @@ Section: stars | **Parameter**: MINT_metallicity | **Description**: This sets the metallicity for MINT. It is ignored if set to -1.0, the default, in which case the normal metallicity parameter is used. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -1 | **Parameter**: gaia_Teff_binwidth | **Description**: log10(Effective temperature) bin width used to make Gaia-like HRDs @@ -978,25 +925,25 @@ Section: stars | **Parameter**: AGB_core_algorithm | **Description**: Algorithm to use for calculating AGB core masses. 0=Hurley et al. 2002 if no NUCSYN, Karakas 2002 if NUCSYN is defined; 1=Hurley et al. 2002 (overshooting models); 1=Karakas 2002 (non-overshooting models). | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_CORE_ALGORITHM_DEFAULT = 0', 'AGB_CORE_ALGORITHM_HURLEY = 1', 'AGB_CORE_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_radius_algorithm | **Description**: Algorithm to use for calculating radii on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_RADIUS_ALGORITHM_DEFAULT = 0', 'AGB_RADIUS_ALGORITHM_HURLEY = 1', 'AGB_RADIUS_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_luminosity_algorithm | **Description**: Algorithm to use for calculating luminosities on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_LUMINOSITY_ALGORITHM_DEFAULT = 0', 'AGB_LUMINOSITY_ALGORITHM_HURLEY = 1', 'AGB_LUMINOSITY_ALGORITHM_KARAKAS = 2'] | **Parameter**: AGB_3dup_algorithm | **Description**: Algorithm to use for calculating third dredge up efficiency on the TPAGB. | **Parameter input type**: Integer -| **Default value**: 1 +| **Default value**: 2 | **Macros**: ['AGB_THIRD_DREDGE_UP_ALGORITHM_DEFAULT = 0', 'AGB_THIRD_DREDGE_UP_ALGORITHM_HURLEY = 1', 'AGB_THIRD_DREDGE_UP_ALGORITHM_KARAKAS = 2', 'AGB_THIRD_DREDGE_UP_ALGORITHM_STANCLIFFE = 3'] | **Parameter**: overspin_algorithm @@ -1136,6 +1083,21 @@ Section: stars | **Parameter input type**: True|False | **Default value**: False +| **Parameter**: degenerate_core_merger_nucsyn +| **Description**: If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) +| **Parameter input type**: True|False +| **Default value**: False + +| **Parameter**: degenerate_core_helium_merger_ignition +| **Description**: If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) +| **Parameter input type**: True|False +| **Default value**: True + +| **Parameter**: degenerate_core_merger_dredgeup_fraction +| **Description**: If non-zero, mix this fraction of the degenerate core during a merger.(0.0). +| **Parameter input type**: Float +| **Default value**: 0 + Section: binary --------------- @@ -1308,7 +1270,7 @@ Section: binary | **Parameter**: post_ce_objects_have_envelopes | **Description**: If TRUE then post-common-envelope objects have thin envelopes. You need this if you are to have post-CE post-AGB stars. Note that this *may* be unstable, i.e. you may end up having many CEEs. The mass in the envelope is controlled by post_ce_adaptive_menv. TRUE by default. | **Parameter input type**: True|False -| **Default value**: True +| **Default value**: False | **Parameter**: PN_comenv_transition_time | **Description**: post-common envelope transition time in years (1e2). This is the time taken to move from CEE ejection to Teff > 30e4 K. Hall et al. (2013) suggest ~100 years. @@ -1478,18 +1440,20 @@ Section: binary | **Parameter**: type_Ia_MCh_supernova_algorithm | **Description**: Algorithm to be used when calculating type Ia yields from Chandrasekhar-mass exploders. 0 = DD7 (Iwamoto 1999), 1 = Seitenzahl 2013 3D hydro yields (you must also set Seitenzahl2013_model) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['TYPE_IA_MCH_SUPERNOVA_ALGORITHM_DD2 = 0', 'TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013 = 1', 'TYPE_IA_MCH_SUPERNOVA_ALGORITHM_SEITENZAHL2013_AUTOMATIC = 2'] | **Parameter**: Seitenzahl2013_model | **Description**: Which of Seitenzahl et al. 2013's models to use? One of N1,N3,N5,N10,N20,N40,N100L,N100,N100H,N150,N200,N300C,N1600,N1600C,N100_Z0.5,N100_Z0.1,N100_Z0.01 (defaults to N100). | **Parameter input type**: String -| **Default value**: NULL +| **Default value**: N100 | **Extra**: N1 | **Parameter**: type_Ia_sub_MCh_supernova_algorithm | **Description**: Algorithm to be used when calculating type Ia yields from sub-Chandrasekhar-mass exploders. (Currently unused.) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['TYPE_IA_SUB_MCH_SUPERNOVA_ALGORITHM_LIVNE_ARNETT_1995 = 0'] | **Parameter**: max_HeWD_mass | **Description**: The maximum mass a HeWD can have before it ignites helium (0.7). @@ -2130,7 +2094,7 @@ Section: nucsyn | **Parameter**: NeNaMgAl | **Description**: Enables NeNaMgAl reaction network. Requires NUCSYN and NUCSYN_HBB. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: Ignore | **Parameter**: nucsyn_network%d @@ -2151,19 +2115,21 @@ Section: nucsyn | **Parameter**: nucsyn_metallicity | **Description**: This sets the metallicity of the nucleosynthesis algorithms, i.e. the amount (by mass) of matter which is not hydrogen or helium. Usually you'd just set this with the metallicity parameter, but if you want the nucleosynthesis to be outside the range of the stellar evolution algorithm (e.g. Z=0 or Z=0.04) then you need to use nucsyn_metallicity. That said, it's also outside the range of some of the nucleosynthesis algorithms as well, so you have been warned! | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['DEFAULT_TO_METALLICITY = -1'] | **Parameter**: nucsyn_solver | **Description**: Choose the solver used in nuclear burning. 0 = KAPS_RENTROP is a Kaps-Rentrop scheme (fast, not great for stiff problems), 1 = LSODA (Adams/BSF switcher), 2 = CVODE library (https://computing.llnl.gov/projects/sundials. Default 0. | **Parameter input type**: Unsigned integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['NUCSYN_SOLVER_KAPS_RENTROP = 0', 'NUCSYN_SOLVER_LSODA = 1', 'NUCSYN_SOLVER_CVODE = 2', 'NUCSYN_SOLVER_NUMBER = 3', 'NUCSYN_SOLVER_KAPS_RENTROP = 0', 'NUCSYN_SOLVER_LSODA = 1', 'NUCSYN_SOLVER_CVODE = 2', 'NUCSYN_SOLVER_NUMBER = 3'] | **Extra**: 0 | **Parameter**: initial_abundance_mix | **Description**: initial abundance mixture: 0=AG89, 1=Karakas 2002, 2=Lodders 2003, 3=Asplund 2005 (not available?), 4=Garcia Berro, 5=Grevesse Noels 1993 | **Parameter input type**: Unsigned integer -| **Default value**: NULL +| **Default value**: 0 +| **Macros**: ['NUCSYN_INIT_ABUND_MIX_AG89 = 0', 'NUCSYN_INIT_ABUND_MIX_KARAKAS2002 = 1', 'NUCSYN_INIT_ABUND_MIX_LODDERS2003 = 2', 'NUCSYN_INIT_ABUND_MIX_ASPLUND2005 = 3', 'NUCSYN_INIT_ABUND_MIX_GARCIABERRO = 4', 'NUCSYN_INIT_ABUND_MIX_GREVESSE_NOELS_1993 = 5', 'NUCSYN_INIT_ABUND_MIX_ASPLUND2009 = 6', 'NUCSYN_INIT_ABUND_MIX_KOBAYASHI2011_ASPLUND2009 = 7', 'NUCSYN_INIT_ABUND_MIX_LODDERS2010 = 8'] | **Extra**: 0 | **Parameter**: init_abund @@ -2187,37 +2153,38 @@ Section: nucsyn | **Parameter**: init_abunds_only | **Description**: If True, outputs only the initial abundances, then exits. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: initial_abunds_only | **Description**: If True, outputs only the initial abundances, then exits. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: no_thermohaline_mixing | **Description**: If True, disables thermohaline mixing. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: lithium_GB_post_Heflash | **Description**: Sets the lithium abundances after the helium flash. Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lithium_GB_post_1DUP | **Description**: Sets the lithium abundance after first dredge up. Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0 | **Parameter**: lithium_hbb_multiplier | **Description**: Multiplies the lithium abundances on the AGB during HBB (based on Karakas/Fishlock et al models).Requires NUCSYN and LITHIUM_TABLES. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: angelou_lithium_decay_function | **Description**: Functional form which describes Li7 decay. Requires NUCSYN and NUCSYN_ANGELOU_LITHIUM. Choices are: 0 expoential (see angelou_lithium_decay_time). | **Parameter input type**: Integer | **Default value**: NULL +| **Macros**: ['ANGELOU_LITHIUM_DECAY_FUNCTION_EXPONENTIAL = 0'] | **Parameter**: angelou_lithium_LMMS_time | **Description**: Time at which lithium manufacture is triggered in a low-mass (convective) main sequence (Myr). Requires NUCSYN and NUCSYN_ANGELOU_LITHIUM. Ignored if 0 (for the start, use 1e-6). @@ -2337,16 +2304,10 @@ Section: nucsyn Section: output --------------- -| **Parameter**: david_logging_function -| **Description**: Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions -| **Parameter input type**: Integer -| **Default value**: 0 -| **Extra**: Ignore - | **Parameter**: cf_amanda_log | **Description**: Enable logging to compare to Amanda's models. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: float_overflow_checks | **Description**: Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) @@ -2386,7 +2347,7 @@ Section: output | **Parameter**: legacy_yields | **Description**: Turn on ensemble legacy yield output. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Parameter**: ensemble_defer | **Description**: Defer ensemble output. @@ -2426,27 +2387,27 @@ Section: output | **Parameter**: EMP_logg_maximum | **Description**: Maximum logg that EMP stars are allowed to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_minimum_age. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 4 | **Parameter**: EMP_minimum_age | **Description**: Minimum age that EMP stars are required to have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 10 | **Parameter**: EMP_feh_maximum | **Description**: Maximum [Fe/H] that an EMP stars may have. See Izzard et al 2009. See also CEMP_cfe_minimum, NEMP_nfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default -2.0. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: -2 | **Parameter**: CEMP_cfe_minimum | **Description**: Minimum [C/Fe] that CEMP stars are required to have. See Izzard et al 2009. See also NEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 0.7. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.7 | **Parameter**: NEMP_cfe_minimum | **Description**: Minimum [N/Fe] that NEMP stars are required to have. See Izzard et al 2009, Pols et al. 2012. See also CEMP_cfe_minimum, EMP_logg_maximum, EMP_minimum_age. Default 1.0. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1 | **Parameter**: thick_disc_start_age | **Description**: Lookback time for the start of the thick disc star formation, e.g. 13e3 Myr. Units = Myr. @@ -2582,99 +2543,99 @@ Section: input | **Parameter**: MINT_dir | **Description**: Location of MINT algorithm data. | **Parameter input type**: String -| **Default value**: NULL +| **Default value**: | **Extra**: | **Parameter**: MINT_data_cleanup | **Description**: Activate checks on incoming data to try to account for problems. Will make data-loading slower, but may fix a few things. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_MS_rejuvenation | **Description**: Turn on or off (hydrogen) main-sequence rejuvenation. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_remesh | **Description**: Turn on or off MINT's remeshing. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_use_ZAMS_profiles | **Description**: Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: True | **Extra**: | **Parameter**: MINT_fallback_to_test_data | **Description**: If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_disable_grid_load_warnings | **Description**: Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_Kippenhahn | **Description**: Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 0 | **Extra**: | **Parameter**: MINT_nshells | **Description**: Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 200 | **Extra**: | **Parameter**: MINT_maximum_nshells | **Description**: Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 1000 | **Extra**: | **Parameter**: MINT_minimum_nshells | **Description**: Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: 10 | **Extra**: | **Parameter**: MINT_Kippenhahn_stellar_type | **Description**: Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['LOW_MASS_MS = 0', 'MS = 1', 'HG = 2', 'GIANT_BRANCH = 3', 'CHeB = 4', 'EAGB = 5', 'TPAGB = 6', 'HeMS = 7', 'HeHG = 8', 'HeGB = 9', 'HeWD = 10', 'COWD = 11', 'ONeWD = 12', 'NS = 13', 'BH = 14', 'MASSLESS_REMNANT = 15'] | **Extra**: | **Parameter**: MINT_Kippenhahn_companion_stellar_type | **Description**: Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. | **Parameter input type**: Integer -| **Default value**: NULL +| **Default value**: -1 | **Macros**: ['LOW_MASS_MS = 0', 'MS = 1', 'HG = 2', 'GIANT_BRANCH = 3', 'CHeB = 4', 'EAGB = 5', 'TPAGB = 6', 'HeMS = 7', 'HeHG = 8', 'HeGB = 9', 'HeWD = 10', 'COWD = 11', 'ONeWD = 12', 'NS = 13', 'BH = 14', 'MASSLESS_REMNANT = 15'] | **Extra**: | **Parameter**: MINT_nuclear_burning | **Description**: Turn on or off MINT's nuclear burning algorithm. | **Parameter input type**: True|False -| **Default value**: NULL +| **Default value**: False | **Extra**: | **Parameter**: MINT_minimum_shell_mass | **Description**: Minimum shell mass in MINT's nuclear burning routines. | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 1e-06 | **Extra**: | **Parameter**: MINT_maximum_shell_mass | **Description**: Maximum shell mass in MINT's nuclear burning routines. : | **Parameter input type**: Float -| **Default value**: NULL +| **Default value**: 0.1 | **Extra**: Section: i/o diff --git a/docs/source/example_notebooks.rst b/docs/source/example_notebooks.rst index 2f6090b9f..d15ea559a 100644 --- a/docs/source/example_notebooks.rst +++ b/docs/source/example_notebooks.rst @@ -13,4 +13,5 @@ The order of the notebooks below is more or less the recommended order to read. notebook_population.ipynb notebook_extra_features.ipynb notebook_api_functionality.ipynb - notebook_luminosity_function_single.ipynb \ No newline at end of file + notebook_luminosity_function_single.ipynb + notebook_luminosity_function_binaries.ipynb \ No newline at end of file diff --git a/docs/source/grid_options_descriptions.rst b/docs/source/grid_options_descriptions.rst index 319b8d56a..84538e2c4 100644 --- a/docs/source/grid_options_descriptions.rst +++ b/docs/source/grid_options_descriptions.rst @@ -1,7 +1,7 @@ Population grid code options ============================ The following chapter contains all grid code options, along with their descriptions -There are 1 options that are not described yet. +There are 2 options that are not described yet. Public options @@ -35,6 +35,8 @@ The following options are meant to be changed by the user. | **log_args_dir**: Directory to log the arguments to. Unused +| **log_dt**: No description available yet + | **log_file**: Log file for the population object. Unused | **log_runtime_systems**: Whether to log the runtime of the systems . Each systems run by the thread is logged to a file and is stored in the tmp_dir. (1 file per thread). Don't use this if you are planning to run a lot of systems. This is mostly for debugging and finding systems that take long to run. Integer, default = 0. if value is 1 then the systems are logged @@ -47,7 +49,7 @@ The following options are meant to be changed by the user. | **multiplicity_fraction_function**: Which multiplicity fraction function to use. 0: None, 1: Arenou 2010, 2: Rhagavan 2010, 3: M&S 2017 -| **parse_function**: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the grid_options['results'] dictionary, or just output results to a file +| **parse_function**: Function that the user can provide to handle the output the binary_c. This function has to take the arguments (self, output). Its best not to return anything in this function, and just store stuff in the self.grid_results dictionary, or just output results to a file | **repeat**: Factor of how many times a system should be repeated. Consider the evolution splitting binary_c argument for supernovae kick repeating. diff --git a/docs/source/notebook_api_functionality.ipynb b/docs/source/notebook_api_functionality.ipynb index d81c31711..8d454880c 100644 --- a/docs/source/notebook_api_functionality.ipynb +++ b/docs/source/notebook_api_functionality.ipynb @@ -15,7 +15,7 @@ }, { "cell_type": "code", - "execution_count": 2, + "execution_count": 1, "id": "ded7eaf6-e1ba-46c2-9f6f-9ebcb14a264d", "metadata": {}, "outputs": [ @@ -30,37 +30,69 @@ "\n", "FUNCTIONS\n", " free_persistent_data_memaddr_and_return_json_output(...)\n", - " Frees the persistent_data memory and returns the json output\n", + " Frees the persistent_data memory and returns the json output.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the persistent data object (contains the ensemble)\n", " \n", " free_store_memaddr(...)\n", - " Frees the store memaddr\n", + " Frees the store memaddr.\n", + " \n", + " Arguments:\n", + " store capsule: capsule containing the memory adress of the store object\n", " \n", " return_arglines(...)\n", " Return the default args for a binary_c system\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_help(...)\n", " Return the help info for a given parameter\n", + " \n", + " Arguments:\n", + " parameter: parameter name.\n", " \n", " return_help_all(...)\n", " Return an overview of all the parameters, their description, categorized in sections\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_maximum_mass_ratio_for_RLOF(...)\n", - " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at zams. Optionally accepts a store_capsule. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the maximum mass ratio for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_minimum_orbit_for_RLOF(...)\n", - " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at zams. Please use the wrapper functions in utils for this except when you know what you're doing\n", + " Returns a string containing the minimum orbit and separation for which a binary system does not RLOF at ZAMS. Please use the wrapper functions in utils for this except when you know what you're doing.\n", + " \n", + " Arguments:\n", + " argstring: argument string for binary_c\n", + " (opt) store_capsule: capsule containing memory adress for the store object.unction. Default = Null\n", " \n", " return_persistent_data_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_store_memaddr(...)\n", " Return the store memory adress that will be passed to run_population\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " return_version_info(...)\n", " Return the version information of the used binary_c build\n", + " \n", + " Arguments:\n", + " No arguments.\n", " \n", " run_system(...)\n", - " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things. \n", + " Function to run a system. This is a general function that will be able to handle different kinds of situations: single system run with different settings, population run with different settings, etc. To avoid having too many functions doing slightly different things.\n", " \n", " Arguments:\n", " argstring: argument string for binary_c\n", @@ -126,7 +158,7 @@ }, { "cell_type": "code", - "execution_count": 10, + "execution_count": 2, "id": "10a74d5a-a3d5-4543-a5bc-20d1fe885bb4", "metadata": {}, "outputs": [ @@ -134,8 +166,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "<capsule object \"STORE\" at 0x7f163859d0c0>\n", - "SINGLE_STAR_LIFETIME 10 27.7358\n", + "<capsule object \"STORE\" at 0x7fa6a45ed180>\n", + "SINGLE_STAR_LIFETIME 10 28.4838\n", "\n" ] } @@ -183,7 +215,7 @@ }, { "cell_type": "code", - "execution_count": 11, + "execution_count": 3, "id": "318874f6-7acf-49bb-9786-299d4dffc0b3", "metadata": {}, "outputs": [ @@ -217,7 +249,7 @@ }, { "cell_type": "code", - "execution_count": 16, + "execution_count": 4, "id": "d7e757ae-579c-42a2-a310-f0401b7800e8", "metadata": { "scrolled": true, @@ -291,6 +323,9 @@ "opacity_algorithm : Set the opacity algorithm. 0 = Paczynski, 1 = Ferguson/Opal. : (null)\n", "wind_mass_loss : Defines the algorithm used for stellar winds. 0 = none, 1 = Hurley et al. (2002), 2 = Schneider (2018). : 0\n", "gbwind : Wind prescription for first red giant branch stars. 0=Reimers (Hurley et al 2000/2002; choose gb_reimers_eta=0.5 for their mass loss rate), 1=Schroeder+Cuntz 2005 (set gb_reimers_eta=1.0 for their mass loss rate). : (null)\n", + "postagbwind : Apply special post-(A)GB prescription. Default is POSTAGB_WIND_USE_GIANT which means we just use whatever is prescribed on the giant branch. Other options include: POSTAGB_WIND_NONE = 1 (no wind on the post (A)GB), POSTAGB_WIND_KRTICKA2020 = 2 which uses Krticka, Kubát and Krticková (2020, A&A 635, A173). : (null)\n", + "Teff_postAGB_min : The minimum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_max. (6000 K) : (null)\n", + "Teff_postAGB_max : The maximum temperature for which we apply post-(A)GB winds. See also Teff_postAGB_min. (120000 K) : (null)\n", "mattsson_Orich_tpagbwind : Experimental : turns on Mattsson's TPAGB wind when the star is oxygen rich. Requires MATTSSON_MASS_LOSS. : (null)\n", "magnetic_braking_factor : Multiplier for the magnetic braking angular momentum loss rate. : (null)\n", "magnetic_braking_gamma : gamma factor in Rappaport style magnetic braking expression. : (null)\n", @@ -310,7 +345,9 @@ "vw93_mira_shift : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate depends on the Mira period plus this offset. Requires VW93_MIRA_SHIFT. : (null)\n", "vw93_multiplier : In the Vassiliadis and Wood (1993) AGB wind prescription, the wind loss rate is multiplied by this factor. Requires VW93_MULTIPLIER. : (null)\n", "tpagb_reimers_eta : TPAGB Reimers wind multiplication factor, cf. eta in Reimers' mass loss formula. (This multiplies the 4e-13 in Reimers' formula, or the 8e-14 in Schroeder and Cuntz.) Note that Reimers is not the default TPAGB wind prescription. See also tpagbwind. : (null)\n", + "Tout_Pringle_1992_multiplier : Multiplier for the Tout & Pringle (1992) magnetic wind. (0.0) : (null)\n", "artificial_mass_accretion_rate%d : Constant mass accretion rate for star <n>. : (null)\n", + "artificial_mass_accretion_rate_by_stellar_type%d : Constant mass accretion rate for stellar type <n>. : (null)\n", "artificial_angular_momentum_accretion_rate%d : Constant angular momentum accretion for star <n>. : (null)\n", "artificial_orbital_angular_momentum_accretion_rate : Constant angular momentum accretion rate on the orbit. : (null)\n", "artificial_accretion_start_time : Time at which artificial accretion stars. Ignored if <0 (default is -1). : (null)\n", @@ -318,8 +355,7 @@ "wr_wind : Massive-star (WR) wind prescription. 0 = Hurley et al 2000/2002, 1=Maeder and Meynet, 2=Nugis and Lamers, 3=John Eldridge's version of Vink's early-2000s wind (See Lynnette Dray's thesis, or John Eldridge's thesis) : (null)\n", "wr_wind_fac : Massive-star (WR) wind multiplication factor. : (null)\n", "wrwindfac : Massive-star (WR) wind multiplication factor. Synonymous with wr_wind_fac (which you should use instead). : (null)\n", - "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. 0=Hurley et al 2000/2002, 1=Belczynski (early 2000s). : (null)\n", - "PPISN_prescription : (Pulsational) Pair-Instability Supernova prescription: Relates initial helium core mass of star to whether the star undergoes PPISN or PISN. Requires PPISN flag to be True (see binary_c_parameters.h). 0=no ppisn, 1=Farmer et al 2019. : Ignore\n", + "BH_prescription : Black hole mass prescrition: relates the mass of a newly formed black hole to its progenitor's (CO) core mass. BH_HURLEY2002 = 0 = Hurley et al 2000/2002, BH_BELCZYNSKI = 1 = Belczynski (early 2000s), BH_SPERA2015 = Spera+ 2015, BH_FRYER12_DELAYED = 3 = Fryer et al. (2012) delayed prescription, BH_FRYER12_RAPID = 4 = Fryer et al. (2012) rapid prescription, BH_FRYER12_STARTRACK = 5 = Fryer et al. (2012) startrack prescription. : (null)\n", "sn_kick_distribution_II : Set the distribution of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_ECAP : Set the distribution of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_NS_NS : Set the distribution of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -331,9 +367,6 @@ "sn_kick_distribution_BH_NS : Set the distribution of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD : Set the distribution of speeds applied to any survivor of a hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_distribution_IA_Hybrid_HeCOWD_subluminous : Set the distribution of speeds applied to any survivor of a subluminous hybrid He-COWD SNIa explosion. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PPISN : Set the distribution of speeds applied to PPISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PISN : Set the distribution of speeds applied to PISN supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_distribution_PHDIS : Set the distribution of speeds applied to PHDIS supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_II : Set the dispersion of speeds applied to kick type II core collapse supernova systems. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_ECAP : Set the dispersion of speeds applied to the remnants of electron-capture supernovae. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_NS_NS : Set the dispersion of speeds applied to kick neutron stars and black holes that survive a NS-NS merger. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", @@ -345,9 +378,6 @@ "sn_kick_dispersion_BH_NS : Set the dispersion of speeds applied to black holes formed by the merger of a neutron star and a black holes. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD : Set the dispersion of speeds applied to the survivor of a SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_dispersion_IA_Hybrid_HeCOWD_subluminous : Set the dispersion of speeds applied to the survivor of a subluminous SNIa explosion of a hybrid He-COWD. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PPISN : Set the dispersion of speeds applied to the survivor of a PPISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PISN : Set the dispersion of speeds applied to the survivor of a PISN supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", - "sn_kick_dispersion_PHDIS : Set the dispersion of speeds applied to the survivor of a PHDIS supernova. 0=fixed, 1=maxwellian (hurley/BSE), 2=custom function (see monte_carlo_kicks.c). : (null)\n", "sn_kick_companion_IA_He : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia He supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_ELD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia ELD (sub-Mch) supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_CHAND : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a Ia Mch supernova occurs. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", @@ -368,9 +398,6 @@ "sn_kick_companion_BH_NS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the, kick on the companion when a black hole merges with a neutron star. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "sn_kick_companion_IA_Hybrid_HeCOWD_subluminous : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a subluminous hybrid He-COWD type Ia explosion. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PPISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PPISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PISN : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PISN supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", - "sn_kick_companion_PHDIS : Set the speed (if >=0) of, or the algothim (if <0) used to calculate the kick on the companion, if it survives, in a PHDIS supernova. 0 = none, 1 = Liu+2015, 2 = Wheeler+ 1975. : (null)\n", "wd_sigma : Set the speed at which white dwarfs are kicked when they form, in km/s. Default is zero (i.e. no kick). Requires WD_KICKS. : (null)\n", "wd_kick_direction : Set the direction of white dwarf kicks. 0 = random, 1 = up, 2 = forward, 3 = backward, 4 = inward, 5 = outward. Requires WD_KICKS. : (null)\n", "wd_kick_when : Decide when to kick a white dwarf. 0=at birth, 1=at first RLOF, 2=at given pulse number (see wd_kick_pulse_number), 3 at every pulse Requires WD_KICKS. : (null)\n", @@ -443,6 +470,11 @@ "HeWD_HeWD_ignition_mass : HeWD-HeWD mergers above this mass reignite helium. (0.3) : (null)\n", "wind_Nieuwenhuijzen_luminosity_lower_limit : Above this luminosity we activate the Nieuwenhuijzen and de Jager wind (4e3 Lsun). : (null)\n", "wind_LBV_luminosity_lower_limit : Above this luminosity we activate the LBV wind (6e5 Lsun). : (null)\n", + "colour%d : Sets colour %d (0 to NUM_ANSI_COLOURS-1) to the extended ANSI set colour you choose (1-255, 0 means ignore). The colour numbers are defined in src/logging/ansi_colours.h : (null)\n", + "apply_Darwin_Radau_correction : Apply Darwin-Radau correction to the moment of inertia to take rotation into account? : (null)\n", + "degenerate_core_merger_nucsyn : If TRUE, assume that in a degnerate core merger, energy is generated from nucleosynthesis of the whole core, and that this can disrupt the core. The BSE algorithm (Hurley et al. 2002) assumes this to be TRUE, but binary_c assumes FALSE by default. (FALSE) : (null)\n", + "degenerate_core_helium_merger_ignition : If TRUE, assume that when there is a degenerate helium core merger, the star reignites helium. This is required to make R-type carbon stars. (TRUE) : (null)\n", + "degenerate_core_merger_dredgeup_fraction : If non-zero, mix this fraction of the degenerate core during a merger.(0.0). : (null)\n", "\n", "############################################################\n", "##### Section Binary\n", @@ -709,7 +741,6 @@ "############################################################\n", "##### Section Output\n", "############################################################\n", - "david_logging_function : Function to choose which kind of information gets logged Requires DAVID. Choices are: 0= None, >0 for custom logging functions : Ignore\n", "cf_amanda_log : Enable logging to compare to Amanda's models. : (null)\n", "float_overflow_checks : Turn on to enable floating-point overflow checks at the end of each timestep, if they are available. 0=off, 1=warn (stderr) on failure, 2=exit on failure (0) : (null)\n", "save_pre_events_stardata : Enable this to save a copy of stardata to stardata->pre_events_stardata just before an event. : (null)\n", @@ -739,6 +770,7 @@ "escape_fraction : A parameter used in constructing galactic chemical evolution (GCE) models. If the stellar wind velocity exceeds this value, any chemical yield from the wind is ignored, i.e. assumed lost. (km/s) Requires NUCSYN_GCE_OUTFLOW_CHECKS. Default 0.0. See also escape_velocity. : (null)\n", "colour_log : If set to True, thelog is coloured with ANSI colour formatting. Requires FILE_LOG to be defined. : \n", "log_filename : Location of the output logging filename. If set to \"/dev/null\" then there is no logging. : \n", + "log_arrows : Add arrows to the output log to show whether values are increasing or decreasing. : \n", "stopfile : File which, when it exists, will stop the current binary_c repeat run. : \n", "stardata_dump_filename : Location of the stardata dump file. : \n", "stardata_load_filename : Location of the stardata file to load. : \n", @@ -763,8 +795,12 @@ "MINT_MS_rejuvenation : Turn on or off (hydrogen) main-sequence rejuvenation. : \n", "MINT_remesh : Turn on or off MINT's remeshing. : \n", "MINT_use_ZAMS_profiles : Use chemical profiles at the ZAMS if MINT_use_ZAMS_profiles is TRUE, otherwise set homogeneous abundances. (Default is TRUE, so we use the profiles if they are available.) : \n", + "MINT_fallback_to_test_data : If TRUE, use the MINT test_data directory as a fallback when data is unavailable. (FALSE) : \n", "MINT_disable_grid_load_warnings : Use this to explicitly disable MINT's warnings when loading a grid with, e.g., missing or too much data. : \n", "MINT_Kippenhahn : Turn on or off MINT's Kippenhahn diagrams. If 0, off, if 1, output star 1 (index 0), if 2 output star 2 (index 1). Default 0. : \n", + "MINT_nshells : Set the initial number of shells MINT uses in each star when doing nuclear burning. Note: remeshing can change this. If MINT_nshells is 0, shellular burning and other routines that require shells will not be available. (200) : \n", + "MINT_maximum_nshells : Set the maximum number of shells MINT uses in each star when doing nuclear burning. Note that this will be limited to MINT_HARD_MAX_NSHELLS. (1000) : \n", + "MINT_minimum_nshells : Set the minimum number of shells MINT uses in each star when doing nuclear burning. Note that this will be greater than or equal to MINT_HARD_MIN_NSHELLS, which is 0 by default. (0) : \n", "MINT_Kippenhahn_stellar_type : Stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for which Kippenhahn plot data should be output. : \n", "MINT_Kippenhahn_companion_stellar_type : Companion stellar type selector for Kippenhahn plots. Set to -1 to ignore, otherwise the stellar type number for the companion for which Kippenhahn plot data should be output. : \n", "MINT_nuclear_burning : Turn on or off MINT's nuclear burning algorithm. : \n", @@ -825,7 +861,7 @@ }, { "cell_type": "code", - "execution_count": 20, + "execution_count": 5, "id": "3d29ca9d-ac66-4f9e-81cf-2edd14a98b79", "metadata": {}, "outputs": [ @@ -854,7 +890,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 6, "id": "e517f561-09c6-419d-ba89-d9cb61e6ebab", "metadata": {}, "outputs": [ @@ -887,7 +923,7 @@ }, { "cell_type": "code", - "execution_count": 46, + "execution_count": 7, "id": "7da75a95-8831-4346-a584-e042ced75249", "metadata": {}, "outputs": [ diff --git a/docs/source/notebook_custom_logging.ipynb b/docs/source/notebook_custom_logging.ipynb index 05ffbccfc..84e41e6bc 100644 --- a/docs/source/notebook_custom_logging.ipynb +++ b/docs/source/notebook_custom_logging.ipynb @@ -11,7 +11,7 @@ }, { "cell_type": "code", - "execution_count": 37, + "execution_count": 1, "id": "696ecbb9-1efd-48f4-a57e-2cf6dfe416f1", "metadata": {}, "outputs": [], @@ -65,7 +65,7 @@ }, { "cell_type": "code", - "execution_count": 7, + "execution_count": 2, "id": "236cf821-09ac-4237-9b8f-6e36d2edf446", "metadata": {}, "outputs": [ @@ -90,7 +90,7 @@ }, { "cell_type": "code", - "execution_count": 30, + "execution_count": 3, "id": "feb423d5-5cc3-433c-9801-f8017abbc03a", "metadata": {}, "outputs": [ @@ -110,7 +110,7 @@ }, { "cell_type": "code", - "execution_count": 31, + "execution_count": 4, "id": "2f5defbf-c623-49ed-a238-fba52a563a58", "metadata": {}, "outputs": [ @@ -155,7 +155,7 @@ }, { "cell_type": "code", - "execution_count": 32, + "execution_count": 5, "id": "dcd74bbc-478b-43e4-b495-8c456e8d1d88", "metadata": {}, "outputs": [ @@ -195,7 +195,7 @@ }, { "cell_type": "code", - "execution_count": 33, + "execution_count": 6, "id": "77bd09b0-1a94-499d-97db-a1f991c67c12", "metadata": {}, "outputs": [ @@ -203,10 +203,10 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_ABOVE_MS 1.041660877905e+02 4.99198 4.99198 6.1357 6.1357 2 1\n", - "EXAMPLE_ABOVE_MS 1.041662558619e+02 4.99198 4.99198 6.14057 6.1357 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662560111e+02 4.99198 4.99198 6.14057 6.14057 2 2\n", - "EXAMPLE_ABOVE_MS 1.041662564579e+02 4.99198 4.99198 6.14059 6.14057 2 2\n" + "EXAMPLE_ABOVE_MS 1.044142002936e+02 4.99194 4.99194 6.13567 6.13567 2 1\n", + "EXAMPLE_ABOVE_MS 1.044572277695e+02 4.99192 4.99194 7.51803 6.13567 2 2\n", + "EXAMPLE_ABOVE_MS 1.044654032097e+02 4.99192 4.99192 7.81395 7.51803 2 2\n", + "EXAMPLE_ABOVE_MS 1.045084306856e+02 4.99191 4.99192 9.57443 7.81395 2 2\n" ] } ], @@ -260,7 +260,7 @@ }, { "cell_type": "code", - "execution_count": 40, + "execution_count": 7, "id": "30142286-34ce-433e-82c8-565e2160ff5b", "metadata": {}, "outputs": [ @@ -336,7 +336,7 @@ }, { "cell_type": "code", - "execution_count": 42, + "execution_count": 8, "id": "6f0edc65-a788-4706-a0c5-2ace030765ec", "metadata": {}, "outputs": [ @@ -344,8 +344,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "SINGLE_STAR_LIFETIME 10 27.7358\n", - "EXAMPLE_LOG_CO 2.773581245005e+01 1.33524 9.19314 1.72498e-05 730.446 13 5\n" + "SINGLE_STAR_LIFETIME 10 28.4838\n", + "EXAMPLE_LOG_CO 2.848380621869e+01 1.33469 9.1865 1.72498e-05 724.338 13 5\n" ] } ], @@ -395,7 +395,7 @@ }, { "cell_type": "code", - "execution_count": 47, + "execution_count": 10, "id": "8f58fdf9-3e76-4c18-a1c5-eed0980d4133", "metadata": {}, "outputs": [ @@ -403,8 +403,8 @@ "name": "stdout", "output_type": "stream", "text": [ - "EXAMPLE_MASSLOSS 9.878236827680e+00 1.61349 8.38063 20 13 1\n", - "EXAMPLE_SN 9.878236827680e+00 1.61349 8.38063 20 12 13 5 1 6.74037 4.92267 6.74037 0 0\n" + "EXAMPLE_MASSLOSS 1.050651207308e+01 1.59452 9.34213 20 13 1\n", + "EXAMPLE_SN 1.050651207308e+01 1.59452 9.34213 20 12 13 5 1 6.55458 4.71662 6.55458\n" ] } ], @@ -424,58 +424,27 @@ "{\n", " if (stardata->model.time < stardata->model.max_evolution_time)\n", " {\n", - " if(stardata->pre_events_stardata != NULL)\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", - "\n", - " stardata->star[0].mass, //2\n", - " stardata->pre_events_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", + " \"%g %g %g %d \" // 2-5\n", + " \"%d %d %g %g \" // 6-9\n", + " \"%g %g\\\\n\", // 10-13\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->pre_events_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->pre_events_stardata->star[0].core_mass[ID_core(stardata->pre_events_stardata->star[0].stellar_type)], // 9\n", - "\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->pre_events_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", - " else\n", - " {\n", - " Printf(\"EXAMPLE_SN %30.12e \" // 1\n", - " \"%g %g %g %d \" // 2-5\n", - " \"%d %d %g %g \" // 6-9\n", - " \"%g %g %g %g\\\\n\", // 10-13\n", - "\n", - " // \n", - " stardata->model.time, // 1\n", + " // \n", + " stardata->model.time, // 1\n", "\n", - " stardata->star[0].mass, //2\n", - " stardata->previous_stardata->star[0].mass, //3\n", - " stardata->common.zero_age.mass[0], //4\n", - " stardata->star[0].SN_type, //5\n", + " stardata->star[0].mass, //2\n", + " stardata->previous_stardata->star[0].mass, //3\n", + " stardata->common.zero_age.mass[0], //4\n", + " stardata->star[0].SN_type, //5\n", "\n", - " stardata->star[0].stellar_type, //6\n", - " stardata->previous_stardata->star[0].stellar_type, //7\n", - " stardata->model.probability, //8\n", - " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", + " stardata->star[0].stellar_type, //6\n", + " stardata->previous_stardata->star[0].stellar_type, //7\n", + " stardata->model.probability, //8\n", + " stardata->previous_stardata->star[0].core_mass[ID_core(stardata->previous_stardata->star[0].stellar_type)], // 9\n", "\n", - " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", - " stardata->previous_stardata->star[0].core_mass[CORE_He], // 11\n", - " stardata->star[0].fallback, // 12\n", - " stardata->star[0].fallback_mass // 13\n", - " );\n", - " }\n", + " stardata->previous_stardata->star[0].core_mass[CORE_CO], // 10\n", + " stardata->previous_stardata->star[0].core_mass[CORE_He] // 11\n", + " );\n", " };\n", " /* Kill the simulation to save time */\n", " stardata->model.max_evolution_time = stardata->model.time - stardata->model.dtm;\n", @@ -491,6 +460,14 @@ "# print (abridged) output\n", "print(\"\\n\".join(output.splitlines()[-2:]))" ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "484297c0-accb-4efc-a9c8-dbd2f32b89a6", + "metadata": {}, + "outputs": [], + "source": [] } ], "metadata": { diff --git a/docs/source/notebook_luminosity_function_binaries.ipynb b/docs/source/notebook_luminosity_function_binaries.ipynb new file mode 100644 index 000000000..fb64dbcc9 --- /dev/null +++ b/docs/source/notebook_luminosity_function_binaries.ipynb @@ -0,0 +1,839 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": {}, + "source": [ + "# Zero-age stellar luminosity function in binaries\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c. \n", + "\n", + "Before you go through this notebook, you should look at notebook_luminosity_function.ipynb which is for the - conceptually more simple - single stars.\n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " )\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 1.0 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Set up the binary grid in \"cubic\" M1 - M2=q*M1 - log10 period space\n", + "\n", + "population = Population()\n", + "\n", + "# resolution on each side of the cube, with more stars for the primary mass\n", + "nres = 10\n", + "resolution = {\"M_1\": 2*nres,\n", + " \"q\": nres,\n", + " \"per\": nres}\n", + "\n", + "massrange = [0.07,100]\n", + "logperrange = [0.15, 5.5]\n", + "\n", + "population.add_grid_variable(\n", + " name=\"lnm1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{}\".format(resolution[\"M_1\"]),\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min=massrange[0],max=massrange[1],res=resolution[\"M_1\"]),\n", + " precode=\"M_1=math.exp(lnm1)\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnm1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")\n", + "\n", + "# Mass ratio\n", + "population.add_grid_variable(\n", + " name=\"q\",\n", + " longname=\"Mass ratio\",\n", + " valuerange=[\"0.1/M_1\", 1],\n", + " resolution=\"{}\".format(resolution['q']),\n", + " spacingfunc=\"const({}/M_1, 1, {})\".format(massrange[0],resolution['q']),\n", + " probdist=\"flatsections(q, [{{'min': {}/M_1, 'max': 1.0, 'height': 1}}])\".format(massrange[0]),\n", + " dphasevol=\"dq\",\n", + " precode=\"M_2 = q * M_1\",\n", + " parameter_name=\"M_2\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + " )\n", + "\n", + "# Orbital period\n", + "population.add_grid_variable(\n", + " name=\"log10per\", # in days\n", + " longname=\"log10(Orbital_Period)\",\n", + " valuerange=[0.15, 5.5],\n", + " resolution=\"{}\".format(resolution[\"per\"]),\n", + " spacingfunc=\"const({}, {}, {})\".format(logperrange[0],logperrange[1],resolution[\"per\"]),\n", + " precode=\"\"\"orbital_period = 10.0 ** log10per\n", + "sep = calc_sep_from_period(M_1, M_2, orbital_period)\n", + "sep_min = calc_sep_from_period(M_1, M_2, 10**{})\n", + "sep_max = calc_sep_from_period(M_1, M_2, 10**{})\"\"\".format(logperrange[0],logperrange[1]),\n", + " probdist=\"sana12(M_1, M_2, sep, orbital_period, sep_min, sep_max, math.log10(10**{}), math.log10(10**{}), {})\".format(logperrange[0],logperrange[1],-0.55),\n", + " parameter_name=\"orbital_period\",\n", + " dphasevol=\"dlog10per\",\n", + " )" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The \n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STARn\n", + "#\n", + "# where:\n", + "#\n", + "# n = PRIMARY = 0 is star 0 (primary star)\n", + "# n = SECONDARY = 1 is star 1 (secondary star)\n", + "# n = UNRESOLVED = 2 is the unresolved system (both stars added)\n", + "\n", + "PRIMARY = 0\n", + "SECONDARY = 1\n", + "UNRESOLVED = 2\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "// select ZAMS\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->model.time == 0)\n", + "{\n", + " // loop over the stars individually (equivalent to a resolved binary) \n", + " Foreach_star(star)\n", + " {\n", + " // select main-sequence stars\n", + " if(star->stellar_type <= MAIN_SEQUENCE)\n", + " {\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " star->starnum,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " star->mass, // 3\n", + " star->luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + " }\n", + " \n", + " // unresolved MS-MS binary\n", + " if(stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->star[1].stellar_type <= MAIN_SEQUENCE) \n", + " {\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR%d %30.12e %g %g %g %g\\\\n\",\n", + " 2,\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0] + stardata->common.zero_age.mass[1], // 2\n", + " stardata->star[0].mass + stardata->star[1].mass, // 3\n", + " stardata->star[0].luminosity + stardata->star[1].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + " }\n", + "}\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "import re\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " \n", + " # check if we match a ZERO_AGE_MAIN_SEQUENCE_STAR\n", + " match = re.search('ZERO_AGE_MAIN_SEQUENCE_STAR(\\d)',line) \n", + " if match:\n", + " nstar = match.group(1) \n", + " #print(\"matched star\",nstar)\n", + "\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + "\n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][int(nstar)][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "collapsed": true, + "jupyter": { + "outputs_hidden": true + }, + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: amt_cores=4 to grid_options\n", + "Running the population now, this may take a little while...\n", + "Creating and loading custom logging functionality\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "Grid has handled 2000 stars\n", + "with a total probability of 0.6495098935846658\n", + "Total starcount for this run will be: 2000\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:14:08,077 DEBUG Process-2] --- Setting up processor: process-0[2021-09-10 15:14:08,080 DEBUG Process-3] --- Setting up processor: process-1[2021-09-10 15:14:08,086 DEBUG MainProcess] --- setting up the system_queue_filler now\n", + "\n", + "[2021-09-10 15:14:08,084 DEBUG Process-4] --- Setting up processor: process-2\n", + "\n", + "[2021-09-10 15:14:08,117 DEBUG Process-5] --- Setting up processor: process-3" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 started at 2021-09-10T15:14:08.119437.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>Process 0 started at 2021-09-10T15:14:08.126435.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>\n", + "Process 2 started at 2021-09-10T15:14:08.138353.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff539f0>" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "\n", + "\n", + "Process 3 started at 2021-09-10T15:14:08.186492.\tUsing store memaddr <capsule object \"STORE\" at 0x7f351ff53810>\n", + "Generating grid code\n", + "Generating grid code\n", + "Constructing/adding: lnm1\n", + "Constructing/adding: q\n", + "Constructing/adding: log10per\n", + "Saving grid code to grid_options\n", + "Writing grid code to /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Loading grid code function from /tmp/binary_c_python/binary_c_grid_0fa295ee5c76444bace8fd0ee17a3e11.py\n", + "Grid code loaded\n", + "624/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB625/2000 31.2% complete 15:14:12 ETA= 11.1s tpr=8.04e-03 ETF=15:14:23 mem:800.5MB\n", + "626/2000 31.3% complete 15:14:12 ETA= 11.1s tpr=8.05e-03 ETF=15:14:23 mem:800.5MB\n", + "\n", + "713/2000 35.6% complete 15:14:17 ETA= 1.3m tpr=6.00e-02 ETF=15:15:34 mem:547.8MB\n", + "728/2000 36.4% complete 15:14:22 ETA= 7.1m tpr=3.37e-01 ETF=15:21:30 mem:548.1MB\n", + "743/2000 37.1% complete 15:14:27 ETA= 7.0m tpr=3.34e-01 ETF=15:21:26 mem:549.5MB\n", + "759/2000 38.0% complete 15:14:33 ETA= 7.7m tpr=3.73e-01 ETF=15:22:16 mem:550.5MB\n", + "774/2000 38.7% complete 15:14:38 ETA= 6.9m tpr=3.35e-01 ETF=15:21:29 mem:551.1MB\n", + "787/2000 39.4% complete 15:14:43 ETA= 7.8m tpr=3.88e-01 ETF=15:22:33 mem:551.1MB\n", + "799/2000 40.0% complete 15:14:48 ETA= 8.5m tpr=4.24e-01 ETF=15:23:17 mem:552.5MB\n", + "812/2000 40.6% complete 15:14:54 ETA= 8.4m tpr=4.23e-01 ETF=15:23:16 mem:554.8MB\n", + "830/2000 41.5% complete 15:14:59 ETA= 5.5m tpr=2.80e-01 ETF=15:20:26 mem:555.2MB\n", + "847/2000 42.4% complete 15:15:05 ETA= 6.8m tpr=3.52e-01 ETF=15:21:50 mem:555.2MB\n", + "864/2000 43.2% complete 15:15:10 ETA= 6.2m tpr=3.28e-01 ETF=15:21:23 mem:557.0MB\n", + "876/2000 43.8% complete 15:15:15 ETA= 8.2m tpr=4.38e-01 ETF=15:23:27 mem:559.7MB\n", + "887/2000 44.4% complete 15:15:21 ETA= 9.2m tpr=4.95e-01 ETF=15:24:32 mem:560.5MB\n", + "898/2000 44.9% complete 15:15:26 ETA= 9.2m tpr=4.99e-01 ETF=15:24:37 mem:560.5MB\n", + "908/2000 45.4% complete 15:15:32 ETA= 9.5m tpr=5.23e-01 ETF=15:25:03 mem:560.5MB\n", + "919/2000 46.0% complete 15:15:37 ETA= 8.3m tpr=4.60e-01 ETF=15:23:54 mem:560.9MB\n", + "934/2000 46.7% complete 15:15:42 ETA= 6.4m tpr=3.60e-01 ETF=15:22:06 mem:561.7MB\n", + "947/2000 47.4% complete 15:15:47 ETA= 7.2m tpr=4.08e-01 ETF=15:22:57 mem:561.7MB\n", + "956/2000 47.8% complete 15:15:53 ETA= 11.1m tpr=6.39e-01 ETF=15:27:01 mem:561.7MB\n", + "963/2000 48.1% complete 15:15:58 ETA= 12.6m tpr=7.30e-01 ETF=15:28:35 mem:561.7MB\n", + "969/2000 48.5% complete 15:16:04 ETA= 15.2m tpr=8.85e-01 ETF=15:31:16 mem:561.9MB\n", + "979/2000 49.0% complete 15:16:11 ETA= 11.9m tpr=7.01e-01 ETF=15:28:06 mem:562.0MB\n", + "988/2000 49.4% complete 15:16:16 ETA= 9.7m tpr=5.76e-01 ETF=15:25:59 mem:562.0MB\n", + "995/2000 49.8% complete 15:16:21 ETA= 12.3m tpr=7.37e-01 ETF=15:28:42 mem:562.2MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:16:25,175 DEBUG MainProcess] --- Signaling stop to processes\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "1003/2000 50.1% complete 15:16:26 ETA= 11.2m tpr=6.76e-01 ETF=15:27:40 mem:563.0MB\n", + "1015/2000 50.8% complete 15:16:32 ETA= 7.6m tpr=4.65e-01 ETF=15:24:10 mem:563.0MB\n", + "1025/2000 51.2% complete 15:16:37 ETA= 8.1m tpr=5.01e-01 ETF=15:24:45 mem:563.0MB\n", + "1033/2000 51.6% complete 15:16:42 ETA= 10.7m tpr=6.65e-01 ETF=15:27:26 mem:563.0MB\n", + "1040/2000 52.0% complete 15:16:47 ETA= 12.1m tpr=7.55e-01 ETF=15:28:52 mem:563.5MB\n", + "1048/2000 52.4% complete 15:16:53 ETA= 11.8m tpr=7.45e-01 ETF=15:28:42 mem:563.5MB\n", + "1057/2000 52.9% complete 15:16:59 ETA= 9.1m tpr=5.78e-01 ETF=15:26:03 mem:563.6MB\n", + "1062/2000 53.1% complete 15:17:04 ETA= 15.7m tpr=1.01e+00 ETF=15:32:47 mem:564.4MB\n", + "1069/2000 53.5% complete 15:17:09 ETA= 12.4m tpr=7.97e-01 ETF=15:29:31 mem:564.9MB\n", + "1077/2000 53.9% complete 15:17:15 ETA= 11.5m tpr=7.46e-01 ETF=15:28:44 mem:565.0MB\n", + "1085/2000 54.2% complete 15:17:20 ETA= 10.0m tpr=6.55e-01 ETF=15:27:20 mem:565.0MB\n", + "1091/2000 54.5% complete 15:17:26 ETA= 13.8m tpr=9.10e-01 ETF=15:31:13 mem:565.9MB\n", + "1099/2000 55.0% complete 15:17:32 ETA= 12.1m tpr=8.05e-01 ETF=15:29:37 mem:566.5MB\n", + "1114/2000 55.7% complete 15:17:37 ETA= 5.0m tpr=3.35e-01 ETF=15:22:34 mem:566.5MB\n", + "1126/2000 56.3% complete 15:17:43 ETA= 6.8m tpr=4.64e-01 ETF=15:24:29 mem:566.5MB\n", + "1134/2000 56.7% complete 15:17:48 ETA= 9.2m tpr=6.37e-01 ETF=15:27:00 mem:566.6MB\n", + "1139/2000 57.0% complete 15:17:54 ETA= 16.3m tpr=1.14e+00 ETF=15:34:13 mem:567.4MB\n", + "1148/2000 57.4% complete 15:17:59 ETA= 8.8m tpr=6.20e-01 ETF=15:26:47 mem:567.4MB\n", + "1156/2000 57.8% complete 15:18:05 ETA= 9.3m tpr=6.60e-01 ETF=15:27:22 mem:567.5MB\n", + "1162/2000 58.1% complete 15:18:11 ETA= 14.3m tpr=1.02e+00 ETF=15:32:28 mem:567.6MB\n", + "1168/2000 58.4% complete 15:18:17 ETA= 15.2m tpr=1.09e+00 ETF=15:33:27 mem:568.6MB\n", + "1177/2000 58.9% complete 15:18:23 ETA= 8.8m tpr=6.45e-01 ETF=15:27:14 mem:568.6MB\n", + "1181/2000 59.0% complete 15:18:28 ETA= 17.8m tpr=1.30e+00 ETF=15:36:16 mem:568.7MB\n", + "1187/2000 59.4% complete 15:18:34 ETA= 12.1m tpr=8.93e-01 ETF=15:30:40 mem:568.7MB\n", + "1194/2000 59.7% complete 15:18:39 ETA= 9.8m tpr=7.29e-01 ETF=15:28:26 mem:568.8MB\n", + "1202/2000 60.1% complete 15:18:44 ETA= 9.5m tpr=7.12e-01 ETF=15:28:12 mem:568.8MB\n", + "1219/2000 61.0% complete 15:18:51 ETA= 5.3m tpr=4.07e-01 ETF=15:24:09 mem:569.7MB\n", + "1228/2000 61.4% complete 15:18:57 ETA= 7.4m tpr=5.76e-01 ETF=15:26:21 mem:569.7MB\n", + "1234/2000 61.7% complete 15:19:02 ETA= 11.8m tpr=9.22e-01 ETF=15:30:48 mem:571.7MB1235/2000 61.8% complete 15:19:02 ETA= 10.1m tpr=7.92e-01 ETF=15:29:08 mem:571.7MB\n", + "\n", + "1243/2000 62.1% complete 15:19:07 ETA= 7.3m tpr=5.79e-01 ETF=15:26:26 mem:573.4MB\n", + "1251/2000 62.5% complete 15:19:13 ETA= 8.3m tpr=6.68e-01 ETF=15:27:33 mem:575.4MB\n", + "1260/2000 63.0% complete 15:19:19 ETA= 8.2m tpr=6.65e-01 ETF=15:27:31 mem:575.4MB\n", + "1268/2000 63.4% complete 15:19:24 ETA= 7.8m tpr=6.41e-01 ETF=15:27:13 mem:576.8MB\n", + "1276/2000 63.8% complete 15:19:29 ETA= 7.6m tpr=6.30e-01 ETF=15:27:05 mem:577.0MB\n", + "1282/2000 64.1% complete 15:19:34 ETA= 10.1m tpr=8.44e-01 ETF=15:29:40 mem:578.0MB\n", + "1289/2000 64.5% complete 15:19:40 ETA= 10.8m tpr=9.08e-01 ETF=15:30:26 mem:578.0MB\n", + "1295/2000 64.8% complete 15:19:46 ETA= 10.5m tpr=8.95e-01 ETF=15:30:16 mem:578.1MB\n", + "1309/2000 65.5% complete 15:19:51 ETA= 4.3m tpr=3.70e-01 ETF=15:24:06 mem:578.1MB\n", + "1323/2000 66.2% complete 15:19:58 ETA= 6.1m tpr=5.45e-01 ETF=15:26:07 mem:579.2MB\n", + "1332/2000 66.6% complete 15:20:03 ETA= 6.2m tpr=5.58e-01 ETF=15:26:16 mem:579.3MB\n", + "1338/2000 66.9% complete 15:20:09 ETA= 10.1m tpr=9.11e-01 ETF=15:30:12 mem:579.3MB\n", + "1346/2000 67.3% complete 15:20:18 ETA= 12.5m tpr=1.14e+00 ETF=15:32:46 mem:581.5MB\n", + "1355/2000 67.8% complete 15:20:25 ETA= 8.5m tpr=7.90e-01 ETF=15:28:54 mem:581.6MB\n", + "1359/2000 68.0% complete 15:20:30 ETA= 13.9m tpr=1.30e+00 ETF=15:34:26 mem:581.6MB\n", + "1366/2000 68.3% complete 15:20:38 ETA= 11.7m tpr=1.10e+00 ETF=15:32:18 mem:581.7MB\n", + "1376/2000 68.8% complete 15:20:44 ETA= 6.1m tpr=5.89e-01 ETF=15:26:51 mem:581.7MB\n", + "1384/2000 69.2% complete 15:20:49 ETA= 6.9m tpr=6.76e-01 ETF=15:27:46 mem:581.7MB\n", + "1393/2000 69.7% complete 15:20:55 ETA= 6.2m tpr=6.13e-01 ETF=15:27:07 mem:581.8MB1394/2000 69.7% complete 15:20:55 ETA= 5.6m tpr=5.52e-01 ETF=15:26:29 mem:581.8MB\n", + "\n", + "1423/2000 71.2% complete 15:21:00 ETA= 1.6m tpr=1.69e-01 ETF=15:22:37 mem:581.9MB\n", + "1435/2000 71.8% complete 15:21:07 ETA= 5.6m tpr=5.92e-01 ETF=15:26:42 mem:582.3MB\n", + "1443/2000 72.2% complete 15:21:12 ETA= 6.1m tpr=6.54e-01 ETF=15:27:17 mem:582.5MB\n", + "1445/2000 72.2% complete 15:21:18 ETA= 28.2m tpr=3.05e+00 ETF=15:49:28 mem:582.6MB\n", + "1448/2000 72.4% complete 15:21:25 ETA= 20.0m tpr=2.18e+00 ETF=15:41:27 mem:582.6MB\n", + "1454/2000 72.7% complete 15:21:31 ETA= 8.6m tpr=9.49e-01 ETF=15:30:09 mem:583.0MB\n", + "1455/2000 72.8% complete 15:21:37 ETA= 54.9m tpr=6.05e+00 ETF=16:16:32 mem:583.0MB\n", + "1459/2000 73.0% complete 15:21:43 ETA= 13.5m tpr=1.50e+00 ETF=15:35:12 mem:583.0MB\n", + "1465/2000 73.2% complete 15:21:48 ETA= 8.6m tpr=9.65e-01 ETF=15:30:25 mem:583.0MB\n", + "1474/2000 73.7% complete 15:21:54 ETA= 5.6m tpr=6.38e-01 ETF=15:27:30 mem:583.0MB\n", + "1482/2000 74.1% complete 15:21:59 ETA= 5.4m tpr=6.30e-01 ETF=15:27:26 mem:583.0MB\n", + "1485/2000 74.2% complete 15:22:04 ETA= 14.8m tpr=1.73e+00 ETF=15:36:54 mem:583.5MB\n", + "1487/2000 74.3% complete 15:22:10 ETA= 24.9m tpr=2.91e+00 ETF=15:47:02 mem:583.5MB\n", + "1496/2000 74.8% complete 15:22:16 ETA= 5.0m tpr=5.91e-01 ETF=15:27:13 mem:583.7MB\n", + "1509/2000 75.5% complete 15:22:21 ETA= 3.6m tpr=4.40e-01 ETF=15:25:57 mem:583.9MB\n", + "1523/2000 76.2% complete 15:22:27 ETA= 3.0m tpr=3.80e-01 ETF=15:25:28 mem:583.9MB\n", + "1531/2000 76.5% complete 15:22:33 ETA= 5.9m tpr=7.60e-01 ETF=15:28:29 mem:583.9MB\n", + "1537/2000 76.8% complete 15:22:38 ETA= 6.7m tpr=8.71e-01 ETF=15:29:21 mem:583.9MB\n", + "1545/2000 77.2% complete 15:22:44 ETA= 5.4m tpr=7.14e-01 ETF=15:28:08 mem:584.0MB\n", + "1555/2000 77.8% complete 15:22:49 ETA= 4.1m tpr=5.52e-01 ETF=15:26:55 mem:584.2MB\n", + "1564/2000 78.2% complete 15:22:54 ETA= 4.2m tpr=5.78e-01 ETF=15:27:06 mem:584.2MB\n", + "1574/2000 78.7% complete 15:23:00 ETA= 4.4m tpr=6.16e-01 ETF=15:27:23 mem:584.4MB\n", + "1584/2000 79.2% complete 15:23:07 ETA= 4.4m tpr=6.28e-01 ETF=15:27:28 mem:584.8MB\n", + "1594/2000 79.7% complete 15:23:12 ETA= 3.8m tpr=5.66e-01 ETF=15:27:02 mem:584.9MB\n", + "1607/2000 80.3% complete 15:23:17 ETA= 2.5m tpr=3.86e-01 ETF=15:25:49 mem:585.0MB\n", + "1618/2000 80.9% complete 15:23:24 ETA= 3.8m tpr=5.97e-01 ETF=15:27:12 mem:585.4MB\n", + "1628/2000 81.4% complete 15:23:29 ETA= 3.3m tpr=5.28e-01 ETF=15:26:46 mem:585.5MB\n", + "1635/2000 81.8% complete 15:23:34 ETA= 4.4m tpr=7.30e-01 ETF=15:28:01 mem:585.9MB\n", + "1645/2000 82.2% complete 15:23:40 ETA= 3.4m tpr=5.81e-01 ETF=15:27:06 mem:585.9MB\n", + "1655/2000 82.8% complete 15:23:47 ETA= 4.0m tpr=7.02e-01 ETF=15:27:49 mem:586.0MB1656/2000 82.8% complete 15:23:47 ETA= 3.7m tpr=6.39e-01 ETF=15:27:27 mem:586.0MB\n", + "\n", + "1664/2000 83.2% complete 15:23:54 ETA= 4.5m tpr=8.01e-01 ETF=15:28:23 mem:586.1MB\n", + "1674/2000 83.7% complete 15:24:02 ETA= 4.5m tpr=8.27e-01 ETF=15:28:31 mem:586.2MB\n", + "1684/2000 84.2% complete 15:24:07 ETA= 2.9m tpr=5.55e-01 ETF=15:27:03 mem:586.2MB\n", + "1691/2000 84.5% complete 15:24:13 ETA= 4.2m tpr=8.21e-01 ETF=15:28:27 mem:586.5MB\n", + "1699/2000 85.0% complete 15:24:19 ETA= 3.4m tpr=6.75e-01 ETF=15:27:42 mem:586.5MB\n", + "1713/2000 85.7% complete 15:24:24 ETA= 1.9m tpr=4.07e-01 ETF=15:26:21 mem:586.6MB\n", + "1725/2000 86.2% complete 15:24:31 ETA= 2.6m tpr=5.57e-01 ETF=15:27:04 mem:586.7MB\n", + "1735/2000 86.8% complete 15:24:38 ETA= 3.0m tpr=6.76e-01 ETF=15:27:37 mem:586.7MB\n", + "1745/2000 87.2% complete 15:24:44 ETA= 2.7m tpr=6.40e-01 ETF=15:27:27 mem:586.9MB\n", + "1755/2000 87.8% complete 15:24:51 ETA= 2.8m tpr=6.88e-01 ETF=15:27:40 mem:586.9MB\n", + "1763/2000 88.2% complete 15:24:56 ETA= 2.6m tpr=6.59e-01 ETF=15:27:32 mem:586.9MB\n", + "1767/2000 88.3% complete 15:25:02 ETA= 5.3m tpr=1.36e+00 ETF=15:30:18 mem:586.9MB\n", + "1776/2000 88.8% complete 15:25:09 ETA= 2.9m tpr=7.71e-01 ETF=15:28:01 mem:586.9MB\n", + "1785/2000 89.2% complete 15:25:14 ETA= 2.1m tpr=5.90e-01 ETF=15:27:21 mem:586.9MB\n", + "1793/2000 89.7% complete 15:25:19 ETA= 2.2m tpr=6.29e-01 ETF=15:27:29 mem:587.1MB\n", + "1801/2000 90.0% complete 15:25:24 ETA= 2.2m tpr=6.59e-01 ETF=15:27:35 mem:587.1MB\n", + "1812/2000 90.6% complete 15:25:29 ETA= 1.5m tpr=4.68e-01 ETF=15:26:57 mem:587.1MB\n", + "1822/2000 91.1% complete 15:25:35 ETA= 1.6m tpr=5.54e-01 ETF=15:27:14 mem:587.4MB\n", + "1830/2000 91.5% complete 15:25:41 ETA= 2.1m tpr=7.49e-01 ETF=15:27:48 mem:587.4MB\n", + "1839/2000 92.0% complete 15:25:47 ETA= 1.7m tpr=6.21e-01 ETF=15:27:27 mem:587.4MB\n", + "1847/2000 92.3% complete 15:25:52 ETA= 1.8m tpr=7.10e-01 ETF=15:27:41 mem:587.4MB\n", + "1855/2000 92.8% complete 15:25:59 ETA= 2.0m tpr=8.17e-01 ETF=15:27:57 mem:587.6MB\n", + "1864/2000 93.2% complete 15:26:05 ETA= 1.5m tpr=6.79e-01 ETF=15:27:37 mem:587.8MB\n", + "1873/2000 93.7% complete 15:26:10 ETA= 1.3m tpr=6.07e-01 ETF=15:27:27 mem:588.0MB\n", + "1884/2000 94.2% complete 15:26:16 ETA= 57.0s tpr=4.91e-01 ETF=15:27:13 mem:588.1MB\n", + "1895/2000 94.8% complete 15:26:21 ETA= 48.7s tpr=4.63e-01 ETF=15:27:09 mem:588.8MB\n", + "1907/2000 95.3% complete 15:26:27 ETA= 45.6s tpr=4.91e-01 ETF=15:27:12 mem:588.9MB\n", + "1916/2000 95.8% complete 15:26:33 ETA= 57.5s tpr=6.84e-01 ETF=15:27:30 mem:589.1MB\n", + "1926/2000 96.3% complete 15:26:39 ETA= 46.5s tpr=6.28e-01 ETF=15:27:26 mem:589.1MB\n", + "1936/2000 96.8% complete 15:26:46 ETA= 42.0s tpr=6.57e-01 ETF=15:27:28 mem:589.1MB\n", + "1946/2000 97.3% complete 15:26:53 ETA= 40.1s tpr=7.42e-01 ETF=15:27:33 mem:589.2MB\n", + "1956/2000 97.8% complete 15:26:59 ETA= 25.1s tpr=5.70e-01 ETF=15:27:24 mem:589.2MB\n", + "1966/2000 98.3% complete 15:27:04 ETA= 19.1s tpr=5.62e-01 ETF=15:27:24 mem:589.5MB\n", + "1976/2000 98.8% complete 15:27:10 ETA= 14.4s tpr=6.01e-01 ETF=15:27:25 mem:589.5MB\n", + "1987/2000 99.3% complete 15:27:16 ETA= 6.4s tpr=4.92e-01 ETF=15:27:22 mem:589.5MB\n", + "1998/2000 99.9% complete 15:27:21 ETA= 1.0s tpr=4.85e-01 ETF=15:27:22 mem:589.6MB\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,382 DEBUG Process-5] --- Process-3 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 3 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.117391, done at 2021-09-10T15:27:22.400722 (total: 794.283331s of which 792.6935975551605s interfacing with binary_c).\n", + "\tRan 499 systems with a total probability of 0.17005450973840136.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,435 DEBUG Process-5] --- Process-3 is finished.\n", + "[2021-09-10 15:27:22,480 DEBUG Process-3] --- Process-1 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 1 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.080367, done at 2021-09-10T15:27:22.505288 (total: 794.424921s of which 793.1943278312683s interfacing with binary_c).\n", + "\tRan 474 systems with a total probability of 0.15740832333567983.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,531 DEBUG Process-3] --- Process-1 is finished.\n", + "[2021-09-10 15:27:22,846 DEBUG Process-2] --- Process-0 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 0 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.077117, done at 2021-09-10T15:27:22.851971 (total: 794.774854s of which 793.4976091384888s interfacing with binary_c).\n", + "\tRan 507 systems with a total probability of 0.16018641159091498.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,872 DEBUG Process-2] --- Process-0 is finished.\n", + "[2021-09-10 15:27:22,976 DEBUG Process-4] --- Process-2 is finishing.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Process 2 finished:\n", + "\tgenerator started at 2021-09-10T15:14:08.084369, done at 2021-09-10T15:27:22.981706 (total: 794.897337s of which 793.4600214958191s interfacing with binary_c).\n", + "\tRan 520 systems with a total probability of 0.1618606489196724.\n", + "\tThis thread had 0 failing systems with a total probability of 0.\n", + "\tSkipped a total of 0 systems because they had 0 probability\n" + ] + }, + { + "name": "stderr", + "output_type": "stream", + "text": [ + "[2021-09-10 15:27:22,986 DEBUG Process-4] --- Process-2 is finished.\n" + ] + }, + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Population-0fa295ee5c76444bace8fd0ee17a3e11 finished! The total probability was: 0.6495098935846686. It took a total of 795.1383104324341s to run 2000 systems on 4 cores\n", + "There were no errors found in this run.\n", + "Done population run!\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=1,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=4,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "print(\"Running the population now, this may take a little while...\")\n", + "analytics = population.evolve() \n", + "print(\"Done population run!\")\n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '0fa295ee5c76444bace8fd0ee17a3e11', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.6495098935846686, 'total_count': 2000, 'start_timestamp': 1631283248.057525, 'end_timestamp': 1631284043.1958354, 'total_mass_run': 41112.220964392276, 'total_probability_weighted_mass_run': 0.6452116023479681, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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p9///vdq2bKlJKlFixbavn274VSIBLNnz1aPHj1Uq1YtJSQkaMiQIZoyZYrpWIggWVlZuuWWW+TxeOR2u9WkSRNt27bNdCxEmIKCAj3xxBO66qqrTEdBBPrkk080fPhw1a5dW263W0888YQ6dOhgOhYiSDAYVCgUUllZmQKBgAKBgLxer+lYMYMB0//YvHmz6tatqwceeEBnnXWWbrjhBrndbtOxEGFmzJih8vJyDR061HQURCCPx6Ozzz5bkhQKhTR+/HgNHDjQcCpEgl27dikrK6vycnZ2tnbu3GkwESJNs2bN1LFjR0nShg0b9NFHH6l///5mQyHi3HnnnbrxxhuVkpJiOgoi0MaNGxUMBnX55ZfrrLPO0muvvabU1FTTsRBBkpKS9Pvf/17Dhg1Tv379lJubq86dO5uOFTNcpgOY8vHHH+vBBx884rqGDRtq+fLluv7663X77bfrrbfe0i233KJXXnnFUErY2U89hxo3bqzi4mK99NJLZkIhohztOfTSSy/J5/PplltuUSAQ0JVXXmkoISJJOBz+0XWWZRlIgki3Zs0aXXnllbr55pvVqFEj03EQQd566y3VqVNHPXv21Lvvvms6DiJQMBjU/Pnz9corryghIUHXXHONJk6cqHPPPdd0NESIlStX6p133tGnn36q5ORk/elPf9K//vUv/fa3vzUdLSZY4Z/6jTRGbdq0Seecc44WLFgg6UB/s0ePHlq8eLHhZIgUb731lv75z38qMTFR0oEfcC1bttSrr76qpKQkw+kQKUpKSnT11VerVq1aeuyxx+TxeExHQgSYOHGi5s+fr/vvv1+S9I9//EPhcFjXXXed4WSIJAsWLNANN9yg2267TWeccYbpOIgwv/nNb7R79245nU7t379fpaWlGjlypG677TbT0RAh/va3v6m4uFjjxo2TJL366qtas2aN7r77brPBEDFeeOEF7d27VzfffLMk6bPPPtNrr72m5557znCy2EBF7n80aNBAOTk5lRvJffrpp2rTpo3hVIgk5513nqZPn65JkyZp0qRJkg6cYsBwCSfiz3/+sxo2bKgnn3yS4RKOW69evTRnzhzl5+errKxM06ZNU79+/UzHQgTZvn27rr32Wj322GMMl/CLvPjii/rggw80adIk3XDDDTrttNMYLuGEnHrqqZo1a5YKCwsVDAb15Zdf8noMJ6Rly5aaPXu2SktLFQ6HNXPmTLVr1850rJgRsxW5oxk/frzuuusuPfroo0pKStJDDz1kOhKAGLJ8+XLNmDFDTZs21ciRIyUd2Evn+eefNxsMtpeTk6Mbb7xRF198sfx+v0aPHq327dubjoUI8q9//UsVFRVH/O4zduxYnX/++QZTAYglHTp00G9/+1tdcMEF8vv96t27t0aNGmU6FiJInz59tHz5cp177rlyu91q166drrjiCtOxYgYVOQAAAAAAAJwUKnIAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASWHABAAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAEPFOO+00zZ4923QMAACAmMWACQAAoIrl5+erRYsW2rlzp+koAAAANYIBEwAAQBV47LHH9OWXX0qSVq5cqfT0dOXk5BhOdcANN9yg1atXV17esmWLOnXq9Ivuq6SkRL/97W9VXl5eVfEAAEAUYMAEAACiyrp163TRRRepa9euOuOMMzRjxozKzy1btkwjR45Up06ddMMNN+gPf/iDnnjiiZN+zEWLFmnt2rXq27evJGnFihVq2bLlSd9vVfD5fNq4caOaN29eJfeXmJioM888U08++WSV3B8AAIgODJgAAEDU8Pv9uuqqq9S7d2/Nnj1b48aN05/+9CetX79ePp9P1113nc455xzNmzdPZ555pqZPn14lj/vUU09pzJgxlZftNGCaPXu2evbsWaX3OWzYME2ePFl79uyp0vsFAACRiwETAACIGosXL1ZpaamuuOIKeTwe9ezZU6eeeqo+/PBDLV68WIFAQBdffLHcbrcGDx6sdu3aVX5tUVGRRo8erU6dOh1RJ3v00Ud1wQUX6M9//rP8fv+PHrOwsFALFixQ7969K69buXKlWrVq9aPbvvHGG7rooosq/7Rv315Lliyp/PzYsWM1fvx4SQdqbC1atNDXX38t6cBKpG7dumnChAmSpOLiYl111VW66KKLNGbMGH3++ec/+T2ZMWOGBg4ceCLfxmPyer3q3LnzUR8TAADEHpfpAAAAAFVl165dql27thyOw++h1a1bVzt37tSuXbuUk5Mjy7IqP1enTp3Kj+Pi4vTcc8/pkUceqbxu5cqV2rlzp1577TU988wzmjp1qs4888wjHnPjxo3KysqSx+ORJFVUVOj7779X69atf5RvzJgxlSudZs6cqYkTJ6p9+/aSpO3btysnJ0fz5s2rvH3btm31ySefqEePHpozZ44aNmxY+blJkyapb9++uvDCCxUOh1VUVPSjxwuFQlq0aJHuvvvu4/r+HbJz5069/PLLCgQCCofDatWqlc4555wjbtOgQQN9//33J3S/AAAgerGCCQAARI3s7Gzt2LFDoVCo8rpDg5usrCzt3LlT4XD4iM8d4na7lZ6efsT9LVy4UH369JEk9e3bVwsXLvzRYzocDgWDwcrLq1evlsvlUl5e3lFz5ufn68knn9Q999xTed3UqVM1YsQINW7cWOvWrZMk5ebmatu2bQqHw/rkk080ePDgytt7vV4tWrRIe/bskWVZSklJ+dHjLF68WG3btpXT6Txqlh8KhUJ6//33deONN+rWW2/VbbfdpiZNmuizzz474nbBYPCE7hcAAEQ3BkwAACBqtG/fXnFxcXrhhRfk9/s1d+5czZw5U8OHD1fHjh3ldDo1YcIEBQIBTZ8+Xd99993P3l9hYaGSkpIkScnJydq/f/+PblO/fn3l5+eroqJC0oFVT02aNFEgEFBFRYUqKirk8/mO+Jq7775bv//9748YaM2aNUv9+vXTmWeeqSlTplRe36lTJ33zzTfKz89XZmZm5fVnn3228vLydPnll2vMmDFav379j7JNnz5dp59++nF85w5bsmSJRo4cKZfLpY8//lhbt25V+/btVVZWdsTttmzZ8rNDNAAAEFsYMAEAgKjh8Xj07LPP6osvvlCPHj10zz336JFHHlGTJk3k8Xj01FNP6e2331a3bt30/vvva8CAAZXVtp+SnJys4uJiSQf2aEpNTf3RbVJSUtSlS5fKvZJWrFihZcuWqX379pV/hg8fXnn79957T8nJyTrttNMqr9uxY4fWrFmjq6++Ws8888wRexsNHjxYDz74oE455ZQjHtftduuaa67RpEmTdMMNN+ipp576UbbZs2dXrsD6odLSUnXq1OmIP6tWrZLT6axcAfbss89q/vz5knTEaiWfz6dvv/32iH8HAAAQ29iDCQAARLyZM2dWftysWbPKjbB/qF27dpo0aVLl5fPOO0+nnnrqUe+3c+fOevHFFzVy5EjNmjVLnTt3/snbXXvttXr22WfVv39/3Xnnnbrzzjt/8nbbt2/XSy+99KN8U6ZM0a233qqhQ4dKOrDC6dCqp0aNGqlLly4aOnSoZs+eXfk1W7durdz7KSMj44jq3yETJ078yRz16tXTqlWrfvJzfr9fL7/8si655JLK79V33313xIDpgw8+0IgRI36ylgcAAGITAyYAABAz5s2bp7y8PKWlpWny5MlatWqV+vbtW/n53/3ud1qxYoW+//57jRkzRueee64yMjJ0wQUXqE6dOrrssst+8n47d+6svLw8ffHFF+rXr99RH/+f//ynCgsLdfXVV1ded80112jatGn6xz/+UXld9+7d9fHHH1deHjdu3I/ua/Xq1brxxhvl9XoVDoePOtQ6UW63W8OGDdPjjz9euZKpWbNmGj16tKQDp9d98MEHlafdAQAASJIV/qm3uwAAAKLQG2+8oSeffFJlZWWqV6+e/vjHP2rAgAGmYwEAAEQ8BkwAAAAAAAA4KWzyDQAAAAAAgJPCgAkAAAAAAAAnhQETAAAAAAAATgoDJgAAAAAAAJwUBkwAAAAAAAA4KQyYAAAAAAAAcFIYMAEAAAAAAOCkMGACAAAAAADASfl/6hNZaplFmREAAAAASUVORK5CYII=\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "titles = { 0 : \"Primary\",\n", + " 1 : \"Secondary\",\n", + " 2 : \"Unresolved\" }\n", + "\n", + "# choose to plot the \n", + "# PRIMARY, SECONDARY or UNRESOLVED\n", + "nstar = UNRESOLVED\n", + "\n", + "plots = {}\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "for n in range(0,3):\n", + " pad_output_distribution(population.grid_results['luminosity distribution'][n],\n", + " binwidth['luminosity'])\n", + " plots[titles[n] + ' ZAMS luminosity distribution'] = population.grid_results['luminosity distribution'][n]\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict(plots)\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "e7541ebf-fe9a-4fb0-a88e-bb318d06f9eb", + "metadata": {}, + "outputs": [], + "source": [] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/source/notebook_luminosity_function_single.ipynb b/docs/source/notebook_luminosity_function_single.ipynb new file mode 100644 index 000000000..fb971b34a --- /dev/null +++ b/docs/source/notebook_luminosity_function_single.ipynb @@ -0,0 +1,716 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", + "metadata": { + "tags": [] + }, + "source": [ + "# Example use case: Zero-age stellar luminosity function\n", + "\n", + "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of single stars using binary_c. \n", + "\n", + "We start by loading in some standard Python modules and the binary_c module.\n" + ] + }, + { + "cell_type": "code", + "execution_count": 1, + "id": "bf6b8673-a2b5-4b50-ad1b-e90671f57470", + "metadata": {}, + "outputs": [], + "source": [ + "import os\n", + "import math\n", + "import matplotlib.pyplot as plt\n", + "\n", + "from binarycpython.utils.functions import temp_dir\n", + "from binarycpython.utils.grid import Population\n", + "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_luminosity\")\n", + "\n", + "# help(Population) # Uncomment this line to see the public functions of this object" + ] + }, + { + "cell_type": "markdown", + "id": "f268eff3-4e08-4f6b-8b59-f22dba4d2074", + "metadata": {}, + "source": [ + "## Setting up the Population object\n", + "To set up and configure the population object we need to make a new instance of the `Population` object and configure it with the `.set()` function.\n", + "\n", + "In our case, we only need to set the maximum evolution time to something short, because we care only about zero-age main sequence stars which have, by definition, age zero." + ] + }, + { + "cell_type": "code", + "execution_count": 2, + "id": "79ab50b7-591f-4883-af09-116d1835a751", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_luminosity to grid_options\n", + "adding: max_evolution_time=0.1 to BSE_options\n", + "verbosity is 1\n" + ] + } + ], + "source": [ + "# Create population object\n", + "population = Population()\n", + "\n", + "# If you want verbosity, set this before other things\n", + "population.set(verbosity=1)\n", + "\n", + "# Setting values can be done via .set(<parameter_name>=<value>)\n", + "# Values that are known to be binary_c_parameters are loaded into bse_options.\n", + "# Those that are present in the default grid_options are set in grid_options\n", + "# All other values that you set are put in a custom_options dict\n", + "population.set(\n", + " # binary_c physics options\n", + " max_evolution_time=0.1, # maximum stellar evolution time in Myr\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "\n", + "# We can access the options through \n", + "print(\"verbosity is\", population.grid_options['verbosity'])" + ] + }, + { + "cell_type": "markdown", + "id": "f9a65554-36ab-4a04-96ca-9f1422c307fd", + "metadata": {}, + "source": [ + "## Adding grid variables\n", + "The main purpose of the Population object is to handle the population synthesis side of running a set of stars. The main method to do this with binarycpython, as is the case with Perl binarygrid, is to use grid variables. These are loops over a predefined range of values, where a probability will be assigned to the systems based on the chosen probability distributions.\n", + "\n", + "Usually we use either 1 mass grid variable, or a trio of mass, mass ratio and period (other notebooks cover these examples). We can, however, also add grid sampling for e.g. eccentricity, metallicity or other parameters. \n", + "\n", + "To add a grid variable to the population object we use `population.add_grid_variable`" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "id": "68c84521-9ae8-4020-af7a-5334173db969", + "metadata": {}, + "outputs": [], + "source": [ + "# help(population.add_grid_variable)" + ] + }, + { + "cell_type": "markdown", + "id": "bd75cebe-2152-4025-b680-dc020b80889b", + "metadata": {}, + "source": [ + "All the distribution functions that we can use are stored in the `binarycpython.utils.distribution_functions` or `binarycpython/utils/distribution_functions.py` on git. If you uncomment the help statement below you can see which functions are available now:" + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "id": "048db541-3e92-4c5d-a25c-9c5a34b9c857", + "metadata": { + "scrolled": true, + "tags": [] + }, + "outputs": [], + "source": [ + "import binarycpython.utils.distribution_functions\n", + "# help(binarycpython.utils.distribution_functions)" + ] + }, + { + "cell_type": "markdown", + "id": "2a9104fc-4136-4e53-8604-f24ad52fbe56", + "metadata": {}, + "source": [ + "First let us set up some global variables that will be useful throughout. \n", + "* The resolution is the number of stars we simulate in our model population.\n", + "* The massrange is a list of the min and max masses\n", + "* The total_probability is the theoretical integral of a probability density function, i.e. 1.0.\n", + "* The binwidth sets the resolution of the final distribution. If set to 0.5, the bins in log*L* are 0.5dex wide." + ] + }, + { + "cell_type": "code", + "execution_count": null, + "id": "aba3fe4e-18f2-4bb9-8e5c-4c6007ab038b", + "metadata": {}, + "outputs": [], + "source": [ + "# Set resolution and mass range that we simulate\n", + "resolution = {\"M_1\": 40} # start with resolution = 10, and increase later if you want \"more accurate\" data\n", + "massrange = (0.07, 100.0) # we work with stars of mass 0.07 to 100 Msun\n", + "total_probability = 1.0 # theoretical integral of the mass probability density function over all masses \n", + "# distribution binwidths : \n", + "# (log10) luminosity distribution\n", + "binwidth = { 'luminosity' : 0.5 }" + ] + }, + { + "cell_type": "markdown", + "id": "1b3a007b-5c17-42a7-a981-7e268e6f545c", + "metadata": {}, + "source": [ + "The next cell contains an example of adding the mass grid variable, sampling the phase space in linear mass *M*_1." + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "id": "47979841-2c26-4b26-8945-603d013dc93a", + "metadata": {}, + "outputs": [], + "source": [ + "# Mass\n", + "population = Population()\n", + "population.set(\n", + " tmp_dir=TMP_DIR,\n", + ")\n", + "population.add_grid_variable(\n", + " name=\"M_1\",\n", + " longname=\"Primary mass\",\n", + " valuerange=massrange,\n", + " resolution=\"{res}\".format(res = resolution[\"M_1\"]),\n", + " spacingfunc=\"const({min}, {max}, {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"{probtot}/({max} - {min})\".format(probtot = total_probability, min = massrange[0], max = massrange[1]), # dprob/dm1 : all stars are equally likely so this is 1.0 / (Mmax - Mmin)\n", + " dphasevol=\"dM_1\",\n", + " parameter_name=\"M_1\",\n", + " condition=\"\", # Impose a condition on this grid variable. Mostly for a check for yourself\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "163f13ae-fec1-4ee8-b9d4-c1b75c19ff39", + "metadata": {}, + "source": [ + "## Setting logging and handling the output\n", + "By default, binary_c will not output anything (except for 'SINGLE STAR LIFETIME'). It is up to us to determine what will be printed. We can either do that by hardcoding the print statements into `binary_c` (see documentation binary_c) or we can use the custom logging functionality of binarycpython (see notebook `notebook_custom_logging.ipynb`), which is faster to set up and requires no recompilation of binary_c, but is somewhat more limited in its functionality. For our current purposes, it works perfectly well.\n", + "\n", + "After configuring what will be printed, we need to make a function to parse the output. This can be done by setting the parse_function parameter in the population object (see also notebook `notebook_individual_systems.ipynb`). \n", + "\n", + "In the code below we will set up both the custom logging and a parse function to handle that output." + ] + }, + { + "cell_type": "code", + "execution_count": 18, + "id": "0c986215-93b1-4e30-ad79-f7c397e9ff7d", + "metadata": {}, + "outputs": [], + "source": [ + "# Create custom logging statement\n", + "#\n", + "# we check that the model number is zero, i.e. we're on the first timestep (stars are born on the ZAMS)\n", + "# we make sure that the stellar type is <= MAIN_SEQUENCE, i.e. the star is a main-sequence star\n", + "# we also check that the time is 0.0 (this is not strictly required, but good to show how it is done)\n", + "#\n", + "# The Printf statement does the outputting: note that the header string is ZERO_AGE_MAIN_SEQUENCE_STAR\n", + "\n", + "custom_logging_statement = \"\"\"\n", + "if(stardata->model.model_number == 0 &&\n", + " stardata->star[0].stellar_type <= MAIN_SEQUENCE &&\n", + " stardata->model.time == 0)\n", + "{\n", + " /* Note that we use Printf - with a capital P! */\n", + " Printf(\"ZERO_AGE_MAIN_SEQUENCE_STAR %30.12e %g %g %g %g\\\\n\",\n", + " stardata->model.time, // 1\n", + " stardata->common.zero_age.mass[0], // 2\n", + " stardata->star[0].mass, // 3\n", + " stardata->star[0].luminosity, // 4\n", + " stardata->model.probability // 5\n", + " );\n", + "};\n", + "\"\"\"\n", + "\n", + "population.set(\n", + " C_logging_code=custom_logging_statement\n", + ")\n" + ] + }, + { + "cell_type": "markdown", + "id": "ae1f1f0c-1f8b-42d8-b051-cbf8c6b51514", + "metadata": {}, + "source": [ + "The parse function must now catch lines that start with \"ZERO_AGE_MAIN_SEQUENCE_STAR\" and process the associated data." + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "id": "fd197154-a8ce-4865-8929-008d3483101a", + "metadata": {}, + "outputs": [], + "source": [ + "# import the bin_data function so we can construct finite-resolution probability distributions\n", + "# import the datalinedict to make a dictionary from each line of data from binary_c\n", + "from binarycpython.utils.functions import bin_data,datalinedict\n", + "\n", + "def parse_function(self, output):\n", + " \"\"\"\n", + " Example parse function\n", + " \"\"\"\n", + " \n", + " # list of the data items\n", + " parameters = [\"header\", \"time\", \"zams_mass\", \"mass\", \"luminosity\", \"probability\"]\n", + " \n", + " # Loop over the output.\n", + " for line in output.splitlines():\n", + " # obtain the line of data in dictionary form \n", + " linedata = datalinedict(line,parameters)\n", + " \n", + " # Check the header and act accordingly\n", + " if linedata['header'] == \"ZERO_AGE_MAIN_SEQUENCE_STAR\":\n", + " \n", + " # bin the log10(luminosity) to the nearest 0.1dex\n", + " binned_log_luminosity = bin_data(math.log10(linedata['luminosity']),\n", + " binwidth['luminosity'])\n", + " \n", + " # append the data to the results_dictionary \n", + " self.grid_results['luminosity distribution'][binned_log_luminosity] += linedata['probability'] \n", + " \n", + " #print (self.grid_results)\n", + " \n", + " # verbose reporting\n", + " #print(\"parse out results_dictionary=\",self.grid_results)\n", + " \n", + "# Add the parsing function\n", + "population.set(\n", + " parse_function=parse_function,\n", + ")" + ] + }, + { + "cell_type": "markdown", + "id": "91509ce5-ffe7-4937-aa87-6d7baac9ac04", + "metadata": {}, + "source": [ + "## Evolving the grid\n", + "Now that we configured all the main parts of the population object, we can actually run the population! Doing this is straightforward: `population.evolve()`\n", + "\n", + "This will start up the processing of all the systems. We can control how many cores are used by settings `amt_cores`. By setting the `verbosity` of the population object to a higher value we can get a lot of verbose information about the run, but for now we will set it to 0.\n", + "\n", + "There are many grid_options that can lead to different behaviour of the evolution of the grid. Please do have a look at those: [grid options docs](https://ri0005.pages.surrey.ac.uk/binary_c-python/grid_options_descriptions.html), and try " + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "id": "8ea376c1-1e92-45af-8cab-9d7fdca564eb", + "metadata": { + "tags": [] + }, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 1.0000000000000004\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-08f8230453084e4ca6a2391d45ce658b finished! The total probability was: 1.0000000000000002. It took a total of 1.5262682437896729s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.025), (3.75, 0.05), (4.25, 0.05), (0.25, 0.025), (3.25, 0.025), (5.25, 0.2), (4.75, 0.1), (5.75, 0.39999999999999997), (6.25, 0.125)]))])\n" + ] + } + ], + "source": [ + "# set number of threads\n", + "population.set(\n", + " # verbose output is not required \n", + " verbosity=0,\n", + " # set number of threads (i.e. number of CPU cores we use)\n", + " amt_cores=2,\n", + " )\n", + "\n", + "# Evolve the population - this is the slow, number-crunching step\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "91ab45c7-7d31-4543-aee4-127ab58e891f", + "metadata": {}, + "source": [ + "After the run is complete, some technical report on the run is returned. I stored that in `analytics`. As we can see below, this dictionary is like a status report of the evolution. Useful for e.g. debugging." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "id": "e1f0464b-0424-4022-b34b-5b744bc2c59d", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "{'population_name': '08f8230453084e4ca6a2391d45ce658b', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 1.0000000000000002, 'total_count': 40, 'start_timestamp': 1631124829.303065, 'end_timestamp': 1631124830.8293333, 'total_mass_run': 2001.4, 'total_probability_weighted_mass_run': 50.035000000000004, 'zero_prob_stars_skipped': 0}\n" + ] + } + ], + "source": [ + "print(analytics)" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "id": "05c6d132-abee-423e-b1a8-2039c8996fbc", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 10, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "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n9eyZcs0atQovf3225o8eXLr4WwXExkZqZqaGkmfnZOpW7duF9wmKipKI0aMaD030sGDB7V//34NHjy49a+ZM2e23v7NN99UZGSkpk6d2nrZmTNnlJeXpwceeEC/+93vzjuX0YwZM/Tzn/9co0ePPu9xAwMD9c1vflNvvfWWHn74YT3//PMXtG3cuLH1lVf/qq6uTsOGDTvvr8OHD8vhcLS+8uuFF17Q9u3bJem8Vyk1NTVp165d5/0ZAACAf+OcSwAAwKutXr269e/T09NbT3r9r6699lq99dZbrR/feeedmjJlyiXvd/jw4XrxxRd16623av369Ro+fPhFb/fggw/qhRde0KRJk/TDH/5QP/zhDy96u9OnT+uvf/3rBX0ffPCBvv/97+uGG26Q9Nkrmz5/tVO/fv00YsQI3XDDDdq4cWPr55w8ebL1XE+xsbHnHe73ueXLl1+0IykpSYcPH77odc3Nzfrb3/6mL33pS61fq3379p03Lr3zzju6+eabL3ooHgAA8E+MSwAAwC9s3bpVycnJio6O1ooVK3T48GFNmDCh9fqvf/3rOnjwoI4ePaq5c+fq9ttvV2xsrBYsWKAePXroq1/96kXvd/jw4UpOTta6des0ceLESz7+73//e1VVVemBBx5oveyb3/ymPvroI/3P//xP62VZWVl6//33Wz9etGjRBfeVm5urRx55RMHBwbIs65KD1pUKDAzUjTfeqF/96letr2BKT0/XnDlzJH32LnXvvPNO67vaAQAASJLNutj/6gIAAPAxr776qp599lnV19crKSlJjz76qCZPnmw6CwAAwOsxLgEAAAAAAKDdOKE3AAAAAAAA2o1xCQAAAAAAAO3GuAQAAAAAAIB2Y1wCAAAAAABAuzEuAQAAAAAAoN0YlwAAAAAAANBujEsAAAAAAABoN8YlAAAAAAAAtNv/D2ltZ660RybEAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# make a plot of the luminosity distribution using Seaborn and Pandas\n", + "import seaborn as sns\n", + "import pandas as pd\n", + "from binarycpython.utils.functions import pad_output_distribution\n", + "\n", + "# set the figure size (for a Jupyter notebook in a web browser) \n", + "sns.set( rc = {'figure.figsize':(20,10)} )\n", + "\n", + "# this saves a lot of typing! \n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "7d7b275e-be92-4d59-b44d-ef6f24023cc3", + "metadata": {}, + "source": [ + "Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 10<sup>5.8</sup> L<sub>☉</sub>! Clearly, this is not very realistic... let's see what went wrong." + ] + }, + { + "cell_type": "markdown", + "id": "44586e42-b7cb-4a55-be0a-330b98b20de4", + "metadata": {}, + "source": [ + "## " + ] + }, + { + "cell_type": "markdown", + "id": "e32c3bbf-390f-45da-ad9c-cc3e7c9449dc", + "metadata": {}, + "source": [ + "## ZAMS Luminosity distribution with the initial mass function\n", + "\n", + "In the previous example, all the stars in our grid had an equal weighting. This is very unlikely to be true in reality: indeed, we know that low mass stars are far more likely than high mass stars. So we now include an initial mass function as a three-part power law based on Kroupa (2001). Kroupa's distribution is a three-part power law: we have a function that does this for us (it's very common to use power laws in astrophysics).\n" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "id": "1f37d2c0-1108-4ab9-a309-20b1e6b6e3fd", + "metadata": {}, + "outputs": [], + "source": [ + "# Update the probability distribution to use the three-part power law IMF \n", + "population.update_grid_variable(\n", + " name=\"M_1\",\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)\",\n", + ")" + ] + }, + { + "cell_type": "code", + "execution_count": 12, + "id": "6f4463e8-1935-45f2-8c5f-e7b215f8dc47", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.2182216189410787\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: M_1\n", + "Population-92de7c9221c54206ab4dd10e58e09a34 finished! The total probability was: 0.21822161894107872. It took a total of 1.5900418758392334s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(2.25, 0.0164166), (3.25, 0.00515685), (0.25, 0.189097), (3.75, 0.0037453900000000004), (4.25, 0.0014346559999999999), (5.25, 0.0007493004), (4.75, 0.001171479), (5.75, 0.00039801020000000003), (6.25, 5.2369339999999996e-05)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "code", + "execution_count": 13, + "id": "cfe45a9e-1121-43b6-b6b6-4de6f8946a18", + "metadata": {}, + "outputs": [ + { + "data": { + "text/plain": [ + "[None]" + ] + }, + "execution_count": 13, + "metadata": {}, + "output_type": "execute_result" + }, + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAABcnUlEQVR4nO3dd3SUZf7+8Wtm0gvpjQRIo0PovSNNiiDiBnXBsrqCsq6sK66CirroWlZ/lu/ay6oooIIIItIEhID03ksCBJIACYTQ0ub3R3TcCBjIk+SZSd6vczgn82QycyW5HTPX3M9nLHa73S4AAAAAAACgnKxmBwAAAAAAAIBro2ACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ9zMDlCZcnLOqrjYbnaMaickxE8nT+aZHQMuivUDo1hDMIo1BKNYQzCKNQSjWEMwqrxryGq1KCjI97Kfq9YFU3GxnYKpkvBzhRGsHxjFGoJRrCEYxRqCUawhGMUaglEVvYY4RQ4AAAAAAACGUDABAAAAAADAkGp9ihwAAAAAAFWpqKhQOTnHVViYX2n3kZVlVXFxcaXdPqq/staQm5uHgoLCZLNdfW1EwQQAAAAAQAXJyTkuLy8f+fpGymKxVMp9uLlZVVhIwYTy+701ZLfbdfZsrnJyjis0NOqqb5NT5AAAAAAAqCCFhfny9a1VaeUSUNksFot8fWtd8y48CiYAAAAAACoQ5RJcXXnWMAUTAAAAAAAADKFgAgAAAACgGtq8eaPuuOPWUv+6d2+v77+f57jOV19NV8+eHXXy5IlSX9u1a1v97W/jSh07deqUevTooPfff1uSlJGRoQkTxuv220dq1Kg/6PHH/6GcnOxLcrz//tuOrzHivffe0ooVywzfzi++/vpLff31l5KkZ599ShkZx8p1O+PG/VkbNqzTrl079K9/PXPF6x09mq7nnnu6zCxdu7a9pvtfsWK5pk379JLbqWoM+QYAAAAAoBpq0aKVPvroM8fl6dOnav78b9Wz53WOY99+O0ddu/bQ3Lmzdfvtfyr19YcPH1Zubq5q1aolSVq6dLH8/Ws5Pv/ii89qwICB6tt3gCTpk08+1IsvPqdnn32xUr6fu+8eU6G3N2zYCMfHGzas05133mPo9ho1aqJ//KPJFT+fkXFM6elHysxyrXbv3lkht2MUBRMAAAAAANXc5s0b9fHHH+idd/4rT09PSdK+fXuVm3taEyZM1KRJEzRq1J2yWn890alr1+768celGjToBkklBVP37j0dn8/OPqGLFy84Lt900x+0c+eO383RtWtbrVixTpI0b94cbdy4XhMnTtaIEUPUu3dfpaSskM1m07333q9p0z7VkSOHdf/9D+q66/pqypTJatWqjVq1aqPHHvu74uMTtGfPbgUHh+iZZ/6lWrUCtHLlj3r33Tdltxerdu1oPfzwYwoODtEbb/w/rV37k2w2q7p27aG77vqzY1eVh4enTpw4rocf/qvuvnuMpk2bqrfe+kCS9N13c7V9+1b9/e+POr6H/Px8Pf/8M9q1a6ciI2vr9OlTkkpKqg8+eEdvvPGOpk37VN99962sVosaN26qCRMm6tVXX9LRo+n697+fV69e1+nNN19TUVGx4uMTFBVVW5L0pz/dK0l6/vkp2rlzuwICAvXoo08oMjJS48b9WXfd9We1bt1Wx44d1V/+cq9efPFVzZ49U5IUGRnl2IX1pz/de8WfxYgRQ3T99YO0enWKzp+/oEmTnlKjRo2vei1dCQUTAAAAAACVYOXWY1qxpXynXf0ei0Xq0jxKXZpf3VvI5+Rka/LkiXrkkccVHR3jOD5v3jfq3buPGjVqLJvNpp9+SlGnTl0dn+/du48+/vgDDRp0g06ePCG7XQoJCXV8/t57x+nppx/X+++/ozZt2qljx87q3btvub+v0NAwffrpDD377FP69NOP9Nprb2nr1s167bV/67rrSt/uvn179eijT6hBg0aaOPFhLVjwna67rp9efPFZvfnm+4qKqq3PPvtYL7/8gsaNe1CrV6fo009n6OLFi3r++X/q4sWLjtsaNeoOzZ79lV588VVFRkbp//7vNaWnH1F0dIy++26u7r239KmCX345XZI0deqXOnz4kG6//ZZSny8sLNSnn36kr7+eL6vVqpdffl7Hj2fpr3/9uz744B099NAj2rBhnQ4fPqQvv5wrPz+/S04hbNWqtR55ZKJmzvxCr776kp577qXL/szi4uI1dOhwSdKgQTc4bicnJ/uyP4t//vN5SVJAQIDeffdjffnlNH3yyQeaMsX4rjNmMAEAAAAAUE0VFxdr8uRJ6tOnf6ndR4WFhVqwYL769OkvSerdu69jJ8wvmjVL0qFDacrLy9PSpYvVq1fvUp/v2LGzZs2ap0cemaTAwCD95z+vaeLEh8udtWPHzpKkiIhItWzZWm5uboqMjNKZM2cuuW5QULAaNGgkSYqPT1Rubq527Niuxo2bOnYD3XDDcK1fv1ahoWHy9PTU2LF3acaMz3TPPWMdu7h+y2Kx6PrrB+n77+cpIyND2dnZatq0WanrbNq0Xr16lRRederUVfPmSaU+7+bmpmbNknT33aP14YfvavjwmxUWFn7JfdWpU09+fn6XHPf09FS/ftdLkvr3v14bN67/3Z/b5VzpZ/GLX37Wv/zsKgI7mAAAAAAAqATXssvoWri5WVVYWHxV1/3ww3dVWFige++9v9TxlSt/1JkzuXrssZJCqLCwUDk52crKylR4eISkkrKlS5duWrFimZYt+0FPPfWcZs6cIUnKzT2tjz56Tw888JA6duysjh0764477tbQof2Vk5OjoKCgK2ay2+2yWCwqLCwsddzd3d3xsc1m+93vy8PD45LbtNuLLzlWVFQkNzc3vfPOR9q0aYNWrVqpMWPu1Ouvv3PF2x44cIgeeugv8vDw0IABAy9zDUup+7pc1uee+7e2b9+q1atT9NBDD+iJJy4d/n2lkstq/fX27PaSwkoq+X384rc/u9+60s/iFx4enqU+VxHYwQQAAAAAQDW0du1qzZnztZ566jlHSfGLefO+0T33jNWXX87Rl1/O0ddff6fmzVtozpyvS12vd+++mjnzC7m5uZcqjXx9/bRixXJ9991cx7H09CMKDg5xDAW/nMDAQB08uF92u10rViyvmG/0Z02aNNOOHVt17NhRSdI338xU69ZttGfPLo0b92e1aNFK48Y9qNjYeB06lFbqa202m6OAiYyMUlhYuL7++isNGDDokvtp27a9Fi78XsXFxcrIOKatW7eU+nxOTo5uu22E4uMTdffdY9SuXQft379XNptbqZLnSs6fP+d4t7xvv52ttm3bS5ICAkp+dpL0449LL5u9rJ9FZWIHEwAAAAAA1dAnn3ykoqIi/f3vD5Q63r17T23YsE6PPvpkqeMjR/5R//73v3THHXc7jjVt2lwnT57QDTcMK3Vdm82ml156Va+//oree+8teXl5KTQ0TM8///Lv7j4aM2acJkwYr+DgECUltXQMyK4IwcEhevjhiXrssb+roKBQkZGR+sc/nlBoaKiaNUvS6NHJ8vLyUv36DdWxY+dS777WuXM3/f3vf9XLL7+u2rWj1adPPy1dukShoWGX3M/w4Tfr4MH9uu22EYqMjFJ8fEKpzwcFBWno0OG6557R8vT0UkREpAYOHKKCggLl5Z3RM888rkGDhl7x+/Dz89fy5Uv17rtvKSwsTI89VvJ7uu220ZoyZbK+/fYbdevW03H9li1ba8qUyQoODi7zZ1GZLPaK2gvlhE6ezFNxcbX99kwTFuav48cvPQcWuBqsHxjFGoJRrCEYxRqCUayh6i0jI02RkfUq9T6u5RQ5XLvCwkI988wT6t27j3r06F32F7igq1lDl1vLVqtFISGXzo2SOEUOAAAAAABAUsk8omHDrpfVai21Swhl4xQ5AAAAAAAAlQzSnjt3odkxXBI7mAAAAAAAAGAIBRMAAAAAABWoGo86Rg1RnjVMwQSXln7irM5fLDQ7BgAAAABIktzcPHT2bC4lE1yW3W7X2bO5cnPzuKavYwYTXNrj7/2kuKhaevz2tmZHAQAAAAAFBYUpJ+e48vJOVdp9WK1WFRfzLnIov7LWkJubh4KCwq7pNimY4PIOHss1OwIAAAAASJJsNjeFhkZV6n2Ehfnr+PEzlXofqN4qYw1xihwAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQ5y+YDp8+LCGDx9udgwAAAAAAABcgVMXTLm5uZo2bZp8fX3NjgIAAAAAAIArcDM7wP+aPn265s6d67j88ssv6+GHH9a9995rYioAAAAAAAD8HqcqmJKTk5WcnGx2DAAAAAAAAFwDpz5FDgAAAAAAAM6vSgqmvLw8DR48WEeOHHEcmzNnjgYOHKi+fftq6tSpv/v1b7/9dmVHBAAAAAAAQDlV+ilymzdv1qRJk5Samuo4lpmZqVdeeUUzZ86Uh4eHRo4cqQ4dOigxMbFC7zskxK9Cbw+/CgvzNztCKc6WB7+P3xeMYg3BKNYQjGINwSjWEIxiDcGoil5DlV4wzZgxQ08++aQmTJjgOJaSkqKOHTsqMDBQktS/f3/Nnz9f48aNq9D7PnkyT8XF9gq9TZQswuPHz5gdoxRny4Mrc8b1A9fCGoJRrCEYxRqCUawhGMUaglHlXUNWq+WKm3kqvWCaMmXKJceysrIUFhbmuBweHq4tW7ZUdhQAAAAAAABUAlOGfNvtl+4qslgsJiQBAAAAAACAUaYUTBERETpx4oTjclZWlsLDw82IAgAAAAAAAINMKZg6d+6sVatWKTs7W+fPn9eCBQvUvXt3M6LAhV1uJxwAAAAAAKh6lT6D6XIiIiI0fvx4jR49WgUFBRoxYoSSkpLMiAIAAAAAAACDqqxgWrJkSanLQ4YM0ZAhQ6rq7gEAAAAAAFBJTDlFDgAAAAAAANUHBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2c0OAAAAAAAAJFEwAQAAAAAAwCAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTHBddrMDAAAAAAAAiYIJAAAAAAAABlEwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTHBZdtnNjgAAAAAAAETBBAAAAAAAAIMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2e1mJwAAAAAAABIFEwAAAAAAAAyiYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBJdlt5udAAAAAAAASBRMAAAAAAAAMIiCCQAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFE1yY3ewAAAAAAABAFEwAAAAAAAAwiIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFggsuy281OAAAAAAAAJAomAAAAAAAAGETBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCS7LbnYAAAAAAAAgiYIJAAAAAAAABlEwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgguuymx0AAAAAAABIFEwAAAAAAAAwiIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFggsuyy252BAAAAAAAIAomAAAAAAAAGETBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCS7Lbjc7AQAAAAAAkCiYAAAAAAAAYBAFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgCAUTAAAAAAAADKFgAgAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAFBOF/ILNf6NFdqZlmN2FAAAAMBUFExwWXa72QkA1HRHjp/V6bx8zVy23+woAAAAgKkomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAMAQCia4MLvZAQAAAAAAgCiYAAAAAAAAYBAFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAABhCwQSXZTc7AAAAAAAAkETBBAAAAAAAAIMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMMFl2e1mJwAAAAAAABIFEwAAAAAAAAxyMzvAlezdu1fvvPOO/P39FRoaqvvuu8/sSAAAAAAAALgMpy2YcnJy9Mgjjyg0NFT33HOP2XEAAAAAAABwBU5TME2fPl1z5851XH755ZcVGhqqd955R4MGDTIxGQAAAAAAAH6P0xRMycnJSk5Odly+ePGiJk+erOuuu07dunUzMRkAAAAAAAB+j9MO+X7jjTe0fft2zZ49WxMnTjQ7DgAAAAAAAK6g0ncw5eXlaeTIkXrrrbcUExMjSZozZ47efPNNFRQU6I477tBtt912ydc99NBDlR0NAIAKYTc7AAAAAGCySi2YNm/erEmTJik1NdVxLDMzU6+88opmzpwpDw8PjRw5Uh06dFBiYmKF339IiF+F3yZKhIX5mx1BnmfzHR87Qx5cPX5fMMpZ1tDJswWSJHc3m9NkwtXh9wWjWEMwijUEo1hDMKqi11ClFkwzZszQk08+qQkTJjiOpaSkqGPHjgoMDJQk9e/fX/Pnz9e4ceMq/P5PnsxTcTGvK1e0sDB/HT9+xuwYyjtf4PjYGfLg6jjL+oHrcqY1lHPqnCSpsLDIaTKhbM60huCaWEMwijUEo1hDMKq8a8hqtVxxM0+lFkxTpky55FhWVpbCwsIcl8PDw7Vly5bKjAEAAAAAAIBKVOVDvu32S3cUWSyWqo4BAAAAAACAClLlBVNERIROnDjhuJyVlaXw8PCqjgEAAAAAAIAKUuUFU+fOnbVq1SplZ2fr/PnzWrBggbp3717VMQAAAAAAAFBBKnUG0+VERERo/PjxGj16tAoKCjRixAglJSVVdQwAACoMbycBAACAmq5KCqYlS5aUujxkyBANGTKkKu4a1djl5nkBAAAAAICqV+WnyAEAUN3wVhUAAACo6SiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQBgkN3sAAAAAIDJKJjgsnhCBwAAAACAc6BgAgDAIIvZAQAAAACTUTABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAbxrpYAAACo6SiY4Lp4RgcAAAAAgFOgYAIAwCCL2QEAAAAAk1EwAQAAAAAAwBAKJgAAAAAAABhCwQQAAAAAAABDKJgAAAAAAABgyDUXTAUFBZWRAwAAAAAAAC6qzIJp3bp1+s9//qP8/HzdeOONatu2rebNm1cV2YDfZTc7AAD8jMcjAAAA1HRlFkwvvviiWrZsqUWLFik0NFTffvutPvjgg6rIBgAAAAAAABdQZsFUVFSkzp07KyUlRX369FFMTIyKi4urIhsAAC7BYnYAAAAAwGRlFkzFxcXasmWLli5dqi5dumjPnj3MYQIAAAAAAICDW1lXGDt2rB566CGNGDFCMTEx6t27tyZOnFgV2QAAAAAAAOACyiyYsrKytHDhQsflhQsXymazVWooAAAAAAAAuI4yT5H7/PPPS12mXAIAAAAAAMD/KnMHU1xcnCZNmqS2bdvKx8fHcbxfv36VGgwAAFdhNzsAAAAAYLIyC6ZTp07p1KlTSktLcxyzWCwUTDCfnad0AMzFu8cBAAAAJcosmD755JOqyAEAgMuh5kZFsNvtslioKwEAgGsrs2BKTU3Vp59+qnPnzslut6u4uFhpaWmaNm1aVeQDAMDpUQ2gvHLP5evRt1cp2N9LTWKD1SQ2SA3qBMrbs8w/0QAAAJxKmX+9PPTQQ2rWrJk2btyoQYMG6YcfflDTpk2rIhsAAEC1lpuXr/MXi1Tka9fSTelauO6wbFaL4mvXchROcVG15GYr831ZAAAATFVmwXT27Fk99dRTmjJlirp3767Ro0frzjvvrIpsAAAANcLw7vFqkRiifUdOa0dajnakZuubFQc1e8VBeXnY1KhukBrHBqlJbLBqh/hwSh0AAHA6ZRZMgYGBkqR69epp7969SkpKUnFxcWXnAgAAqFHc3WxqHBusxrHBuqlHgvLOF2j3oRztSM3R9tRsbdp3QpIU4OehJvVKdjc1iQ1WkL+nyckBAACuomCqV6+epkyZohtvvFETJ07UuXPnlJ+fXxXZAAAAaiw/b3e1aRiuNg3DJUknTp137G7aeuCkVm3PkCTVDvVVk3olZVPDusxvAgAA5ijzL5DJkydr+fLlatKkiW6++WatXLlSzzzzTFVkA34X794EwFnweISqEBrore6B3ureoraK7XYdycrTjtSSwmn55qNatP6IrJZf5jeVFE7xtZnfBAAAqkaZBdPbb7+tBx98UJJ066236tZbb9U///lPtW7durKzAQAA4DKsFovqRvirboS/BnSoq4LCYu1PP60dadnakZqjOSmp+mZlqjw9bGpYJ9AxMDw61Jf5TQAAoFJcsWB67bXXlJubq3nz5ikvL89xvKCgQEuWLNGkSZOqJCAAAM6Op+swm7ubVY3qBalRvSAN7y6du1CgnWmnHIXTlv17JUkBvh6O3U2N6wUpuJaXyckBAEB1ccWCqUWLFtq6dausVqtj0Lck2Ww2vf7661WRDQAAoFqrrNMrfbzc1aZhmNo0DJMknTx9QTvSsrUzNUfbD2Zr1fZMSVJUiI9jYHjDukHy8WJ+EwAAKJ8r/hXRo0cP9ejRQ927d1dSUpLjeEFBgdzd3askHAAAAIwLCfBSt6Ta6pZUW3a7XUeOn9WO1JLdTT9uParFG0rmN8VF+TtOp0uIDmB+EwAAuGplvkyVn5+v//znP7r77ruVnJysAwcO6LnnntPAgQOrIh8AAEC1V5VjkSwWi+qE+6lOuJ/6t6+rwqKf5zf9PDB87qpUzUlJlYe7VQ3rBDlOqYsJY34TAAC4sjILphdffFF//etftWjRIoWGhur111/Xgw8+SMEEAABQDbjZrGpYt+QUuRu7x+vchULtPpRTUjilZWv6kpOSpFo+7iWzm2KD1DQ2mPlNAACglDILpqKiInXu3FmTJk1Snz59FBMTo+Li4qrIBgCAS6isOTqAGXy83NSqQZhaNSiZ35Sde0E703K0/edT6lbvKJnfFBHsoyY/l02N6gbKx4sRCgAA1GRlFkzFxcXasmWLli5dqjFjxmjPnj0qKCioimzA77LzjA6AyThZCDVBcC0vdWkepS7No2S325V+4qzjdLqUrRn6YUO6LBYpLqpWyel09YKVEB0gdzfmNwEAUJOUWTCNGTNGDz30kEaMGKGYmBj17t1bEydOrIpsAAA4NXpu1DQWi0UxYX6KCfNTv3Z1VFhUrANHcx0Dw+etOqS5KWnycLOqQZ1Ax8DwmHA/WZnfBABAtVZmwdSvXz/169fPcXnhwoWy2WyVGgoAAFfC02aUl93Ft+O62UqKpAZ1AjWsm3T+YqF2HzqlHanZ2p6arRk/7JMk+fu4q3G9IEfhFBrgbXJyAABQ0cosmH6LcgkAAACX4+3pppb1Q9WyfqgkKefMRcfuph1p2VqzM0uSFB7kraY/l02N6gXJl/lNAAC4vGsumAAAAFDRquc+uCB/z1Lzm46ePKcdqdnamZqjlO0Z+mFjyfym2Ej/n3c3BSsxupbc3XhBEwAAV3PFgmnhwoXq27ev8vPz5eHhUZWZAAAAUM1YLBZFh/oqOtRXfduWzG86eCzXMTB8/k+H9O2qkvlN9esEOgaG14lgfhMAAK7gigXTa6+9pr59+yo5OVmzZs2qykwAALgU156iA5jDzWZV/ZhA1Y8J1NCucTp/sVB7Dp/S9p93OH3xw35J++Xn7a7OzSJ1U48E3pkOAAAndsWCydfXV/3791dmZqaGDBlyyefnzJlTqcEAAHB27KkAKo63p5taJIaqRWLJ/KZTeRe1MzVHm/ef0IK1h7U//bTuu7G5gvw9TU4KAAAu54oF03vvvaedO3dq4sSJevzxx6syEwAALoGdS0DlCfTzVKdmkerULFJtG2bp/W936umP1ur+G5srMSbA7HgAAOA3rrjP2M/PT+3atdPbb7+tpk2bSpIKCwvVpEkTtW/fvsoCAgDg7NjJBFSuto3CNWl0G3l62PT8Zxu0dGO67HYqXgAAnEmZ7yJ35swZjRo1SqGhoSoqKlJmZqbeeusttW7duiryAQAAAIoO89Pjt7fVO9/s0Mff71ZqRq5u69uQuUwAADiJMgum559/Xi+99JI6duwoSVq1apX+9a9/acaMGZUeDgAAoCbgTdKujq+Xu/46IklfrziguSlpOnL8rO5nLhMAAE6hzJd88vLyHOWSJHXq1Ennz5+v1FAAAADA5VitFg3vnqD7b2ym9ONn9dRHa7Xn8CmzYwEAUOOVWTBZrValp6c7Lh85ckQ2m61SQwEAAAC/p03DkrlM3h42vfj5Rv2w4QhzmQAAMFGZp8jdf//9Sk5OVqdOnSRJK1eu1JNPPlnpwYCy8EckAGfBoxFgDsdcpjk79MmCPTqYcUaj+jWQuxsvhgIAUNXKLJj69Omj+Ph4rV69Wna7XWPGjFFCQkJVZAMAwKkxNgcwn4+Xux4YkaTZPx7UnJRUpR8/q/tvbKbgWl5mRwMAoEYps2CSpPj4eMXHx1d2FgAAXAo7lwDnYLVYdGP3eNWN8Nd73+7Q0x+t1X03NleDOoFmRwMAoMbgfV0BADCInUwoL872rlhtGoZp0ui28vZy14ufb9Ti9cxlAgCgqlAwAQAAmIySsuJEh/rq8dFt1SwuWFMX7tGH83apoLDI7FgAAFR7ZRZMEyZMqIocAAAAQIXw8XLTX0Yk6YYusVqx9Zj+NXWDsnMvmB0LAIBqrcyCadeuXWwtBgAAgEuxWiwa1i1e44Y317GT5/T0R2u1+1CO2bEAAKi2yhzyHRYWpkGDBqlFixby9fV1HJ80aVKlBgMAwFXwMgzgvFo3KJnL9MbMrXpp2iaNvK6+ereOlsXCiYkAAFSkMgumVq1aqVWrVlWRBQAAl8LTU8A11A711aTRbfXe3B2aunCPUjNyNbp/Q7m72cyOBgBAtVFmwTRu3DhduHBBaWlpql+/vvLz8+Xl5VUV2QAAcGrsXAJch4+Xm8bd1FzfrDiob1amKv34WY0b3lzBtfi7FgCAilDmDKbNmzerT58+uvfee5WVlaUePXpow4YNVZENAACXwE4mwDX8MpfpLzc1V0b2OT3FXCYAACpMmQXT888/r48++kiBgYGKjIzUCy+8oClTplRFNgAAAKDCtaofpsdvbytfL3e9+PkmLVx3mDe1AQDAoDILpgsXLigxMdFxuUePHioqKqrUUAAAADUK2+CqXFSIrx6/va2SEkL0+aK9ev/bncov4G9cAADKq8yCyc3NTadPn3a808aBAwcqPRQAAABQ2bw9S+YyDesap5RtGXpu6gadPH3B7FgAALikMgumsWPH6o9//KOOHTumv/3tb7rllls0duzYqsgGAAAAVCqrxaIbusbpgZuSlJVTMpdpVxpzmQAAuFZlvotcr169FB8fr5UrV6q4uFj33XdfqVPmALMwKgGAs+DhCHB9LeuHatLotnpj5la9NG2Tknsnqk/bGMcufgAA8PvK3MEkSYWFhSouLpabm5vc3d0rOxMAAC6Bp51A9RIV4qtJo9uqRWKIPl+8V+/NZS4TAABXq8yC6auvvtKoUaO0detWrV+/Xrfddpu+//77qsgGAIBTY+cSjLKzipyOt6eb7h/eXMO6xWn19gw9++l6nTh93uxYAAA4vTJPkfvoo4/09ddfKzw8XJJ09OhR3Xvvverfv3+lhwMAwBWwkwmoXqwWi27oEqe6Ef56d852Pf3ROo0d1kyN6wWZHQ0AAKdV5g4md3d3R7kkSbVr1+Y0OQAAgApkoaZ0Si0TQ/X47e3k7+Ouf0/bpAVrDsnOEEgAAC7rigXT9u3btX37djVs2FBPP/20du/erX379umFF15Q69atqzIjAAAAYIrIYB9NGt1WLeuHatqSfXp37g5dyC80OxYAAE7niqfI/eUvfyl1eenSpY6PLRaLJk2aVGmhAAAAAGfh7emm+25spm9Xpenr5Qf0yBsrNGZIE4UGepsdDQAAp3HFgmnJkiVVmQMAAJfFCTNA9We1WDSkc6zqhvvpvbk79PR/12ns0KZqHBtsdjQAAJxCmUO+jx8/rlmzZunUqVOljk+YMKGyMgFXhXfeAWA2puYANU+LxFC9/GAPPfXear00fZP+0CtR/drVkcXCIwIAoGYrc8j32LFjtWXLFtnt9lL/AAAAgJqodpifJo5qo9b1wzR9yT69O2eHLhYUmR0LAABTlbmDqaCgQG+88UZVZAEAwKXwcguM4jU71/W/c5lmLT+goyfO6v7hzRXGXCYAQA1V5g6mpk2bas+ePVWRBQAAl8SJMTCMReSSLBaLBneO1V9vbqETpy/o6Y/WantqttmxAAAwRZk7mFq3bq1hw4YpLCxMbm6/Xn3x4sWVGgwAAABwBUkJIXr8jrZ646utenn6Jt3cM1H92zOXCQBQs5RZML3xxht66aWXVLdu3arIAwAAALiciCAfTRzdRh98u1MzftintMwzuuP6RvJ0t5kdDQCAKlFmwRQQEKCBAwdWRRYAAADAZXl5uGnssGaatzpNM5eVzGUax1wmAEANUeYMpp49e+r555/Xxo0btX37dsc/wHQMRgXgJHg4AvALi8WiQZ1i9eAfWujkL3OZDjKXCQBQ/ZW5g2nOnDmSpO+//95xzGKxMIMJAFDjMV0FwJU0j/95LtPMrXp5xiaN6JmgAe3rMpcJAFBtlVkwLVmypCpyAADgcti5BOD3RAT5aOKoNvpg3i598cN+pWWc0Z3XN5anB3OZAADVT5kF04cffnjZ43feeWeFhwEAwBWxHwHAlXh5uGns0Kb6LtJfXy3dXzKX6aYkhTOXCQBQzZRZMO3Zs8fxcX5+vtavX68OHTpUaigAAICahJKyerNYLBrYsZ7qhvvp7W+265mP1ureoU3VLC7E7GgAAFSYMgum5557rtTl7OxsTZgwodICAQAAANVRs/gQPX57yVymV2Zs1ogeCRrQgblMAIDqocx3kfut4OBgpaenV0YWAAAAoFoLD/LRxFFt1bZhuL5Yul9vzd6ui/lFZscCAMCwa5rBZLfbtW3bNoWEsJ0X5mO4LgBnweMRgGvh6WHTmKFNFRvpry+X7dexk2c1bnhzhQf5mB0NAIByu6YZTJIUFRXFKXIAAIi5OQDKz2Kx6PqO9VQnwk9vz96uZ/67Tvfe0FTN4nkhFwDgmq55BhMAAAAqhp3tbzVes7gQPX5HO73xVclcpuE94jWwYz3mMgEAXM4VC6ZHH330il9ksVj07LPPVkogAABcBd0AgIoQHuitiaPa6MPvduqrZQeUlnFGdw1qLC+PMl8LBgDAaVzx/1r169e/5FhOTo7++9//Kjo6ulJDAQDgSthnAKPYrAJPD5vuvaGpYiNr6Yul+3Qs+5zGDW+uCOYyAQBcxBULprvuuqvU5ZSUFD3yyCMaMmSIJk2aVOnBAAAAgJrEYrFoQIe6qhPup7dmb9MzH63Tn29oqqQE5jIBAJyftawrFBYW6vnnn9ff/vY3TZw4UVOmTJG3t3dVZAMAAABqnKZxwXrijnYKCfDSq19s1tyUVNkZ2AUAcHK/e2J3Wlqaxo8fLx8fH82aNUtRUVFVlQsAAJfB0z4AFS0s0FuPjWqjj77bpZnLDygt84zuGthY3p7MZQIAOKcr7mD68ssvdfPNN6tv37769NNPKZfgdHhCB8BsjM0BUJk83W3685AmSu6dqA17jmvKJ+uVmX3O7FgAAFzWFV8CmTRpkqxWq9555x29++67juN2u10Wi0UbNmyokoAAAABATWWxWNS//S9zmbbr6f+u0703NFFSQqjZ0QAAKOWKBdPixYurMgcAAC6HnZQwys4qwlVqEhusJ25vqzdmbtWrX2zRsO7xGtypniy8BSEAwElcsWCKjo6uyhwAALgsnt7BOFYRyhYa6K1HR7XRf7/bpVnLD+hQxhndNYi5TAAA51Dmu8gBAAAAcA6e7jbdM6SJRvZO1Ma9J5jLBABwGrzcAQAAALgQi8Wifj/PZXpz9nZN/mitGsQEKjrUV9Fhvqod6qvaIb7y9LCZHRUAUINQMAEAAAAuqHFssJ64o61m/3hQh7LytDMtR4VFxZJKTroMCfD6uXTyU3RoSfEUFeIjD3eKJwBAxaNgguuyMxgVgHPg0QiAWUIDvPWnwU0kSUXFxTp+6oLSj+cp/cRZHT1xVuknzmrbwWwVFZc8UlksUligd6ndTtGhfooM9pG7G9MzAADlR8EEAEA5MZYZgDOxWa2KDPZRZLCP2jT89XhhUbEyc86XFE7H8xzF0+Z9J1X88wt2VotF4UG/LZ58FRHsIzcbxRMAoGwUTAAAAGZh+xuqgJvNWlIchfqqXaNwx/GCwmJlZp9T+s+F09ETZ3XkxFlt2HvcsVHcZrUoItjH8fW1fy6gwoO8ZbNSPAEAfkXBBABAOdENAHBl7m5WxYT7KSbcr9TxgsIiHTt57tfT7I6fVWpGrtbtynI87rnZLIoM9lF0mJ9jt1N0qK/CAr1ltbK/EwBqIgomAAAM4qkUjLKwiOBE3N1sqhvhr7oR/qWOXywo0rGTJYXTL6fZ7TtyWj/tyPyfr7UqKsTn191OoX6qHear0AAvWVnoAFCtUTABAAAAKJOnu02xkbUUG1mr1PHzFwt/3vGU5yifdh06pVXbfy2ePNytqh3y82l2Yb+ebhdSy0sWiicAqBYomAAAAACUm7enm+Jr11J87dLF07kLhTp68ufZTj8PF9+Wmq2V2zIc1/HysKl2qG+p0+xqh/oqyN+T4gkAXAwFEwAABjGLCQAu5ePlpsToACVGB5Q6nne+wHGK3dHjZ5V+Ik9b9p3Qii3HHNfx9nT7n9Psft31FODrQfEEAE6Kggkuiyd0AMzGUxwAuHZ+3u5qUCdQDeoEljqeey7/58Lp1xlPG/Yc1/LNRx3X8fX6uXgK8yv1rna1fDyq+LsAAPwWBRMAAIBJeLEE+FUtHw/VquehRvWCHMfsdrtyz+Yr/UTp4umnHZk6f7HQcT1/H/dSO55+eXc7P293M74VAKiRKJgAACgnygEAqFwWi0UBfp4K8PNUk9hgx3G73a5TeflKP5Hn2PWUfuKsUrZl6EJ+keN6Ab4eqh3qq4Z1AtWpWaTCAr3N+DYAoEagYAIAwCBOlYNRrCHg2lgsFgX5eyrI31PN4kIcx+12u7JzL/7Pbqc8HTl+VrNXHNTXKw6qQZ1AdWkWqbaNwuXtyVMhAKhIPKoCAAAAqBYsFotCArwUEuClpIRfi6eTpy9o1fYMrdx6TB9+t0tTF+1RmwZh6tw8So3rBslqpeYFAKMomAAAAABUayEBXhrcOVaDOtXT/qO5Stl6TD/tzNKq7ZkK8vdU52aR6tI8SpHBPmZHBQCXRcEEAAAAoEawWCxKjA5QYnSAbulTXxv3ntDKrRmatzpN365KU0LtWurcPErtG4fL14sB4QBwLZy2YNq1a5feffddeXt76/rrr1eXLl3MjgRnw3RdAE6ChyMAcD3ubja1bxyh9o0jdCrvolZvz9TKrcf0yfe79fmivWpVP1RdmkeqaVywbFar2XEBwOk5bcF07tw5PfLII3Jzc9OLL75IwQQAcDpM7ACA6iHQz1MDOtRV//Z1lJZ5Riu3ZuinHZlauytLAb4e6tQ0Up2bRyomzM/sqADgtJymYJo+fbrmzp3ruPzyyy8rLy9Pjz76qEaPHm1iMgAAgErC9jfAqVgsFsVG1lJsZC0l907U5n0nlbLtmBauO6z5aw6pXoS/OjePVMcmEfL38TA7LgA4FacpmJKTk5WcnOy4vHXrVsXHx2vatGm66667NHDgQBPTAQBwKboBVBi2wwFOx81mVZuGYWrTMEy55/L1045MpWzN0OeL9mrGkn1KSghRl+ZRSkoIkZuNU+gAwGkKpt+6cOGCJk6cqODgYPXo0cPsOAAAXBHdAABUb7V8PNS3bR31bVtHR7LytHLbMa3anqmNe0/Iz9tdHZpEqGvzKNWN8JPFwv8VANRMlV4w5eXlaeTIkXrrrbcUExMjSZozZ47efPNNFRQU6I477tBtt912yde1a9dO7dq1q+x4AAAAAHDVYsL9lNy7vkb0TND2g9lasTVDyzala/H6I4oO81WXZlHq2DRCgX6eZkcFgCpVqQXT5s2bNWnSJKWmpjqOZWZm6pVXXtHMmTPl4eGhkSNHqkOHDkpMTKzw+w8JYQhfZQkL8zc7ggr+Z8+AM+TB1eP3BaOcZQ2dPFsgSXJztzlNJlwdZ/l9ncgrWUMBAT5OkwlXh98XJCkyIkDXdYxT3rl8/bgpXYvXHdaMH/bpy6X71LpRhHq3raMOTSPl4W675GtZQzCKNQSjKnoNVWrBNGPGDD355JOaMGGC41hKSoo6duyowMBASVL//v01f/58jRs3rsLv/+TJPBUXMyGjooWF+ev48TNmx9DJ7HOOj50hD66Os6wfuC5nWkM5p0oehwoKipwmE8rmTGvo1M9r6PTpc06TCWVzpjUE59G2fqja1g/VsZNnlbItQynbMrRuZ6Z8PN3UvnG4ujSPUnztWrJYLKwhGMYaglHlXUNWq+WKm3kqtWCaMmXKJceysrIUFhbmuBweHq4tW7ZUZgwAACoFUzYAAL8VFeKrm3ok6MZu8dp5KEcrtx5TyrYMLd10VBHBPurSLFKDu1f82RsAYLYqH/Jtt1+6o4hBeAAAoCay816EQLVltVrUNDZYTWODdb5fodbtytLKbRmaufyAZv14QI3qBqlr8yi1bhAmT49LT6EDAFdT5QVTRESE1q1b57iclZWl8PDwqo4BAAAAAFXC29NN3VrUVrcWtZV16rw2H8jWwp/S9O7cHfL0sKldw3B1aR6p+nUCZeXFdwAuqsoLps6dO+v1119Xdna2vL29tWDBAj3zzDNVHQMAAMPYe4KKYuGES6DGCA/01q39G+m6VrW19/AprdyWobW7srRi6zGFBnipc7NIdW4epfBAb7OjAsA1MWUH0/jx4zV69GgVFBRoxIgRSkpKquoYAABUGKoBAMC1slosalg3SA3rBum2Pg20Yc9xrdx2THNWpuqblalqEBOgLs2j1LZRuLw9q/xpGwBcsyp5pFqyZEmpy0OGDNGQIUOq4q4BAAAAwKl5etjUqVmkOjWLVHbuBaVsy9DKbRn68Ltdmrpwj1o3DFOXZlFqXC9IVisvawBwTlThAAAAAOAkgmt5aXDnWA3qVE8HjuZq5bYMrdmRqdXbMxXk71lyCl2zSEWF+JodFQBKoWCCy7rcOxICgBl4NAIAVDSLxaKE6AAlRAfolusStXHvCaVsy9C81Wn6dlWa4mvXUpdmkWrfJEK+Xu5mxwUACiYAAMqLkxRgFK+VALga7m42tW8cofaNI3Qq76JWb8/Uym3H9MmCPfp88V61rB+mLs0i1Sw+WDar1ey4AGooCiYAAAAAcBGBfp4a0KGu+revo0OZeVq59ZhW78jUul1ZquXroU5NI9SlWZRiwv3MjgqghqFgAgCgnNh8ggrDdjgA18hisahepL/qRfrrD70TtWX/Sa3cekyL1h3R92sOq26En7o0i1KHphGq5eNhdlwANQAFEwAABtENAADM5GazqnWDMLVuEKYz5/L1045Mrdyaoc8X79WMH/YpKSFEnZtFqUViiNxsnEIHoHJQMAEAAABANeHv46E+beuoT9s6OnI8TylbM7Rqe4Y27j0hP293dWgcoS5JkaoX4S+LhZdIAFQcCiYAAAAAqIZiwvz0h96JuqlnvLYfzNbKrRlatvmoFm84ouhQX3VuHqlOTSMV6OdpdlQA1QAFEwAABjGLCQDgzGxWq5ISQpWUEKqzFwq0dmeWVm49pi9+2K8vl+5X8/gQDe4Uq8SYALOjAnBhFEwAAJQTJxYAAFyNr5e7eraKVs9W0Tp28qxStmXox81H9eyn69UiIUTDeySoDu9AB6AcmPAGAAAAADVQVIivbuqRoOfHdNbw7vHac+S0Jn+wRu98s11ZOefMjgfAxbCDCQAAwGTshgNgJk8PmwZ3jlWv1tH6bvUhLVp3WGt3ZalbUpSGdIlTkD8zmgCUjYIJAIByYvYSAKA68fVy14ieCerTNkZzUlK1fNNRrdyWoevaxGhgx3ry83Y3OyIAJ0bBBACAQew+AQBUJ4F+nhrVr6H6t6+r2T8e1Pc/HdKyTeka0L6u+rarIy8PnkYCuBSPDAAAAACAS4QHeuueIU10fce6mrX8gGb9eFCL1x/RoM6x6tkyWu5ujPQF8CsKJgAADOJUOQBAdRYT5qe/3JSk/emn9dWy/fp80V4tWHNIN3SNU+dmkbJZKZoA8C5ycGF2ntEBMBmnxgEAapKE6AA9fEsrPTSypfx9PPThvF164v01WrcrS3b+OAdqPHYwAQAAmIQnZABcjcViUdPYYDW5PUgb9hzXzOUH9J+vt6lepL9u6hGvprHBslh4CQaoiSiYAAAAAADXxGKxqE3DcLWqH6aUbRmaveKAXp6+WY3qBuqmHglKiA4wOyKAKkbBBABAObH3BBWF1/oBuCqr1aKuSVHq0CRCyzala25KqqZ8sl4tE0M1vHu8YsL9zI4IoIpQMAEAYBDlAACgpnN3s6pP2zrqmhSlheuOaP5PaXrygzXq0DRCw7rFKzzQ2+yIACoZBRMAAAAAoEJ4ebhpSOdY9WoVre9+StPidUe0dmeWureorSFdYhXo52l2RACVhIIJAAAAAFCh/LzddXPPRPVpU0dzU1K1fPNRrdx6TNe1jdH1HerJz9vd7IgAKhgFE1wWs08AOAsejwAAuLwgf0+N6t9Q/dvX0dcrDmr+6kNauvGoBnSoq75tY+TlwVNSoLrgv2YAAMqJ2UsAAFyd8CAf/XlIUw3sUE8zlx/QrOUHtHjdYQ3uHKseLaPl7mY1OyIAgyiYAAAAAABVIibcTw+MSNK+9NOauWy/Plu0V9+vOaxh3eLUqWmkrFZevgFcFTUxAACA2Sw8oQJQsyRGB+jhW1rpb8kt5Ofjrve/3anH3/9J63dnyW7n5HPAFbGDCQCAcuLPXwAAys9isahZXIiaxgZr/e7jmrn8gP5v1jbFRflreI8ENY0NNjsigGtAwQQAgEHsPQEAoPwsFovaNgpXqwahStmWoW9WHNS/p21S43pBGt4jXgm1A8yOCOAqUDABAAAAAExns1rVLam2OjaJ1NKN6Zq7KlVTPl6vVvVDNbx7vKLD/MyOCOB3UDABAGAQp8oBAFBx3N2s6tuujromRWnRusOav+aQnnh/jTo2jdSwbnEKC/Q2OyKAy6Bgguti+B8Ak3FqHAAAlcfb001DusSpV+sYzVudpsXrj2jNzkz1aFlbQzrHKsDP0+yIAP4HBRMAAIBJeK0EAMrm5+2uP/RKVN+2dTRn5UEt23RUK7YcU5+2dXR9x7ry9XI3OyIAUTABAACYjt1wAFC2IH9PjR7QSP071NXsHw/qu9VpWroxXdd3rKs+berI08NmdkSgRrOaHQAAAFfF5hMAAKpeRJCP/nxDU02+q73qxwToq2UH9Mjbq7R4/REVFhWbHQ+osdjBBACAQew+AQCg6tUJ99Nfb26hvUdO6atlBzR14R59v+aQhnaNU6emkbJa+T80UJXYwQQAAAAAcFn1YwL1yK2tNP4PLeTj5ab3v92pJz9Yow17jsvOsDugyrCDCQAAAADg0iwWi5rHh6hpXLDW7z6umcsP6I2ZWxVfu5Zu6h6vxrHBZkcEqj0KJrgsXosA4Cx4PAIAwDlYLRa1axSu1g1CtXJrhmavOKgXp21Sk9gg3dQjQXFRtcyOCFRbFEwAAAAmoZwEgMphs1rVvUVtdWoaoR82pGvuqjQ98991at0gTDd2j1d0qK/ZEYFqh4IJAAAAAFAtubvZ1K99XXVrUVsL1x7W/DWHtHHvcXVuGqmhXeMUGuhtdkSg2qBgAgAAMJmFNzoCgErl7emmG7rGqVfraM1bnabF69O1ekemeraK1uDOsQrw9TA7IuDyKJgAACgvzm8CAMCl+Pt4KLl3ffVtW0dzUlL1w4Z0/bjlqPq2raPrO9SVj5e72REBl0XBBACAQWw+AQDAtQTX8tLtAxppQPu6mvXjAX27Kk1LN6br+o71dF2bGHm628yOCLgcCiYAAAAAQI0UEeyjMUObaWDHM5q5/IC+XLpfC9cd1g2dY9WtRW252axmRwRcBgUTXBenpgBwEjwcAQDg2upG+OvBm1toz+FTmrlsvz5ZsEfz1xzSsK7x6tAkQlYr+5WBslDHAgAAAAAgqUGdQD1yW2s9eHMLeXu46d25O/Tkh2u0L/202dEAp0fBBAAAYBY7+98AwNlYLBYlJYToiTvbaczQprpwsVD/mbVVF/ILzY4GODUKJgAAAAAAfsNqsah94wiNGdZMp/LyNScl1exIgFOjYAIAAAAA4AoSageoa/MoLVhzWMdOnjU7DuC0KJgAACgnO+O9AQCoEW7qmSAPd5s+X7RXdk5vBi6LggkAAIN4XxkAAKq3AF8PDesap20Hs7Vp7wmz4wBOiYIJAACDeB0TAIDqr3ebaEWH+erzxXuVX1BkdhzA6VAwwWXxhA4AAABAVbFZrbqtTwOdOH1B8386ZHYcwOlQMAEAAJiEF0sAwLU0qhek9o3D9e3qNJ04dd7sOIBToWACAAAwmcXCJC8AcBV/6JUoi0WavmSf2VEAp0LBBAAAAADAVQqu5aUhnWO1fs9xbTt40uw4gNOgYAIAoJx4l2IAAGqmfu3qKjzIW58t3KvComKz4wBOgYIJAACDOLkJAICaxd3Nqlv7NFBG9jktWnfE7DiAU6BgAgAAAADgGiUlhKhlYqhmrzyonDMXzY4DmI6CCS7LzrkpAJwEj0YAANRMI69LVFGRXV8sZeA3QMEEAABgEspJAHBt4UE+GtChrlZvz9Sew6fMjgOYioIJAAAAAIByGtSpnkJqeWrqwj0qLualA9RcFEwAAAAAAJSTp7tNyb3r63BWnpZuSjc7DmAaCiYAAAAAAAxo0zBMjesFaeayA8o9l292HMAUFEwAAAAAABhgsVh0a98GulhQpJnLDpgdBzAFBRMAAAZZzA4AAABMFx3qq+vaxOjHzUd18Fiu2XGAKkfBBACAQYzzBAAAkjS0a5z8fT1KBn7b+QsBNQsFEwAAAAAAFcDb001/6JWgA0dztXLrMbPjAFWKggkAAMAsvLgNANVOp6aRSowO0FdL9+vchQKz4wBVhoIJAADAZBYGeQFAtWGxWHRb3wY6c65AX684aHYcoMpQMAEAAAAAUIHqRfqrZ6toLVmfriPH88yOA1QJCiYAAMrJzvBOAABwBTd2j5e3p02fLdzD3wyoESiYAAAwiLObAADAb/l5u+umHgnadeiU1u7KMjsOUOkomAAAAAAAqATdW9RWvQh/TV+yTxfyC82OA1QqCia4LHaZAnAWPBwBAIDLsVpLBn7nnLmob1elmR0HqFQUTAAAACaxU08CQLWXGBOgLs0iNf+nQ8rMPmd2HKDSUDABAACYzMIkLwCo1kb0TJC7m1WfLdrLwG9UWxRMAAAAAABUogA/Tw3rGqetB05q876TZscBKgUFEwAAAAAAlax3mxjVDvXV54v3qKCwyOw4QIWjYAIAAAAAoJK52ay6rU99HT91QfN/OmR2HKDCUTABAGAQ03MAAMDVaBwbrLaNwvXtqjSdOH3e7DhAhaJgAgDAIEZ1AgCAq5XcK1GSNGPJPpOTABWLggkAAMAstJMAUOOEBHhpUOdYrdt9XNtTs82OA1QYCiYAAAAAAKrQgPZ1FB7orc8W7lFhUbHZcYAKQcEEAABgNgZ5AUCN4u5m08g+9XXs5DktXn/E7DhAhaBgAgAAAACgirVMDFVSQohmrzioU3kXzY4DGEbBBABAOdmZnwMAAAy4pU99FRYV64sf9psdBTCMggkAAIM4uwkAAJRHRJCP+revq1XbM7T3yCmz4wCGUDABAAAAAGCSwZ1iFeTvqakL9qi4mO3RcF0UTHBZdt7bGYCT4NEIAACUl6eHTcm9E3UoK0/LNh81Ow5QbhRMAAAAJqGcBABIUrtG4WpUN1Azl+1X3vkCs+MA5ULBBAAAYDLmeAFAzWaxWHRb3wY6f7FIM5cx8BuuiYIJAAAAAACTRYf56bo2MVq26ajSMs6YHQe4ZhRMAAAAAAA4gaFd4+Tv465PF+5WsZ0TqeFaKJgAACgn/uwDAAAVycfLTSN6Jmp/eq5WbcswOw5wTSiYAAAwiPk5AACgonRuHqmE2rX0xdL9Oneh0Ow4wFWjYILLYscoAGfBwxEAAKgoVotFt/VroDNn8/XNyoNmxwGuGgUTAACASXixBABwObGRtdS9ZW0tWndE6cfzzI4DXBUKJgAAALNxniUA4DeGd4+Xt6dNny3aKzuvSMAFUDABAAAAAOBk/H08NLx7vHam5Wjd7uNmxwHKRMEEAAAAAIAT6tEyWnXD/TR9yV5dzC8yOw7wuyiYAAAAAABwQlZrycDv7NyL+nZ1qtlxgN9FwQQAQHkxDwEAAFSy+jGB6tQ0QvN/OqTMnHNmxwGuiIIJAAAAAAAndnOvRNlsVk1btNfsKMAVUTABAACYhl1wAICyBfp5amiXOG3ef1Kb9p0wOw5wWRRMAAAAAAA4uT5tYxQV4qNpi/Yqv4CB33A+FEwAAAAms8hidgQAgJNzs1l1a58Gyjp1Xl8v2292HOASFEwAAAAAALiApnHBatMwTDMW71F27gWz4wClUDABAAAAAOAiknsnym6Xpi/ZZ3YUoBQKJgAAyonxzAAAoKqFBnjr5uvqa+2uLO1MzTY7DuBAwQQAgEFMzwEAAFVpeM9EhQZ4aeqivSosKjY7DiCJggkuzM7WAQBOgocjAABQlTzcbbqlT30dPXFWSzakmx0HkETBBAAAYBpeLAEAlFfLxFA1jw/R7BUHdDrvotlxAAomAAAAs1k4zxIAcI0sFotu6VNf+QXF+nLpfrPjABRMAAAAAAC4oshgH/VvX1crt2VoX/pps+OghqNgAgAAAADARQ3uXE9B/p6aumCPios59xrmoWACAAAAAMBFeXm46Q+9EpWWeUbLtxw1Ow5qMAomAADKidcIAQCAM2jfOFwN6wTqq6X7lXe+wOw4qKEomOCy7Dy1AwAAAABZLBbd1reBzl8s0qzlB8yOgxqKggkAAMAkvFQCAKgoMeF+6t06Wks3pSst44zZcVADUTABAAAAAFANDOsWJz9vd01duEd2Oy9joGpRMAEAAAAAUA34eLlrRI8E7Us/rVXbM8yOgxqGggkAAAAAgGqiS1KU4qJq6Ysf9uv8xUKz46AGoWACAAAAAKCasFos+mO/Bso9m69vVh40Ow5qEKcumAoLC/XHP/5RW7duNTsKAACXYrQBAABwQnFRtdStRZQWrTuioyfOmh0HNYRTF0xvvPGGIiMjzY4BAMDvspgdAAAA4DeG90iQp7tNny1i4DeqhpvZAX4xffp0zZ0713H5pptuUsuWLWWz2UxMBafGYyQAJ8HDEcqNxQMAqCS1fDx0Y/d4TV24R+t3H1fbRuFmR0I15zQFU3JyspKTkx2Xx44dq7CwMG3btk2pqan697//bWI6AAAAAABcS89WtbVs01FNX7JXzRNC5OnOBg5UHqc9Re7NN9/U008/rV69eumOO+4wOw4AAEClsXCeJQCgEtisVv2xXwOdzL2oeavSzI6Daq7SC6a8vDwNHjxYR44ccRybM2eOBg4cqL59+2rq1Km/+/V/+ctf1Lx588qOCQAAAABAtdOgTqA6NonQdz8dUtap82bHQTVWqafIbd68WZMmTVJqaqrjWGZmpl555RXNnDlTHh4eGjlypDp06KDExMQKv/+QEL8Kv02UCAvzNzuCTp4rcHzsDHlw9fh9wShnWUMB2SV/pLm72ZwmE66Os/y+ArJK3tknKNDXaTLh6vD7glGsIRh1LWtozIgWGvv8Ys368aAm3dWhElPBlVT041ClFkwzZszQk08+qQkTJjiOpaSkqGPHjgoMDJQk9e/fX/Pnz9e4ceMq/P5PnsxTcTHTMytaWJi/jh8/Y3YMnco55/jYGfLg6jjL+oHrcqY1dPp0ScFUUFjkNJlQNmdcQzmnzuq4F3MxXIUzrSG4JtYQjCrPGhrcKVZfLN2vxatTlZQQUknJ4CrK+zhktVquuJmnUk+RmzJlitq2bVvqWFZWlsLCwhyXw8PDlZmZWZkxAACoFHbeAgwAALiIvu3qKCLYR58v2qOCwmKz46AaqvIh33b7pX+MW5hsiXLgaR0AAAAAXB03m1W39a2vzJzzWrD2kNlxUA1VecEUERGhEydOOC5nZWUpPDy8qmMAAACYjl1wAICq1CwuRK3qh2pOSqqycy+YHQfVTJUXTJ07d9aqVauUnZ2t8+fPa8GCBerevXtVxwAAAHAaFrGbGwBQNUZeV192uzTjh31mR0E1U6lDvi8nIiJC48eP1+jRo1VQUKARI0YoKSmpqmMAAAAAAFDjhAV66/oOdfXNylT1bJmjRvWCzI6EaqJKCqYlS5aUujxkyBANGTKkKu4aAAAAAAD8j4Ed6yllW4amLtqjyXe2k81a5Sc3oRpiFQEAAAAAUIN4uNs08rr6Sj9+Vks2pJsdB9UEBRMAAOXFfGYAAOCiWtUPVdO4YH394wGdPptvdhxUAxRMAAAYxHhmAADgaiwWi27tU1/5BcX6aul+s+OgGqBgguti5wAAJ8HDEcqNxQMAMFFUiK/6taujFVuPaf/R02bHgYujYAIAAAAAoIYa3DlWAX4emrpgj4rtvPKB8qNgAgAAAACghvL2dFNyr0SlZpzRii3HzI4DF0bBBAAAAABADdahSYQaxAToy6X7lXe+wOw4cFEUTAAAAAAA1GAWi0W39m2gsxcK9PWPB8yOAxdFwQQAAAAAQA1XN8JfvVvF6IeN6TqUecbsOHBBFEwAAJQTYzABAEB1Mqx7nHy93DV14R7ZGfiNa0TBBJdl56kdAMDF8X8yAIAz8fVy14ieCdp75LRW78g0Ow5cDAUTAAAAAACQJHVNilJclL9m/LBP5y8Wmh0HLoSCCQAAwGQWi9kJAAAoYf154PfpvHzNSUk1Ow5cCAUTAAAAAABwSKgdoK5JUVq49rCOnTxrdhy4CAomAAAAAABQyogeCfJwt+kzBn7jKlEwAQAAAACAUmr5emhYtzhtT83Rhj0nzI4DF0DBBAAAAAAALtG7dbSiw3w1bfFe5RcUmR0HTo6CCS6LXZoAzMbjEAAAqM5sVqv+2LeBTuZe0LzVaWbHgZOjYAIAADAJJSUAwNk1rBuk9o3DNW/1IR0/dd7sOHBiFEwAAAAAAOCK/tArUVarNG3xXrOjwIlRMAEAAAAAgCsKruWlIZ1jtXHvCW07cNLsOHBSFEwAAAAAAOB39WtXVxFB3pq6aK8Ki4rNjgMnRMEEAAAAAAB+l7ubVbf0aaDM7HNauPaw2XHghCiYAAAAAABAmZISQtQyMVTfrExVzpmLZseBk6FgAgCg3HgLMAAAULOM7FNfRcV2ffHDPrOjwMlQMAEAAJiGkhIA4FrCA711fYe6Wr0jU7sP5ZgdB06EggkAAMBkFovF7AgAAFy1gZ3qKaSWp6Yu3KOiYgZ+owQFEwAAAAAAuGqe7jYl966vI8fPaunGo2bHgZOgYAIAAAAAANekTcMwNYkN0qzlB5R7Lt/sOHACFEwAAAAAAOCaWCwW3dqngS4WFGnmsv1mx4EToGACAAAAAADXrHaor3q3jtGPm48p9yy7mGo6CiYAAAAAAFAudSP8ZJd0oaDI7CgwGQUTXJbdzls7AzAXD0MwijUEAACqCwomAAAAAAAAGELBBAAAYDKL2QEAAAAMomACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIZQMAEAAAAAAGN4a9Qaj4IJAIBy4s8oAABQ01l4pwr8jIIJAAAAAAAAhlAwAQAAmI1XfwEAgIujYAIAAAAAAIAhFEwAAAAAAAAwhIIJAAAAAAAAhlAwAQAAAAAAwBAKJgAAAAAAYIjd7AAwHQUTXJadRzAAZuNxCAaxhAAArs7CW6HiZxRMAAAAJuNPcwAA4OoomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIa4mR2gMlmtvCdLZXGGn62nh03hQd6SnCMPrh6/LxjlLGvIy9NN4UHeCvL3cppMuDrO8vvy/nkNebjbnCYTrg6/LxjFGoJRzrKGvL1K/l/mbrM6TSZcnfL8vn7vayx2u91uJBAAAAAAAABqNk6RAwAAAAAAgCEUTAAAAAAAADCEggkAAAAAAACGUDABAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMuGpz5szRwIED1bdvX02dOtXsOHBReXl5Gjx4sI4cOWJ2FLigN954Q4MGDdKgQYP0wgsvmB0HLujVV1/VwIEDNWjQIH344Ydmx4GLev755/WPf/zD7BhwUaNHj9agQYM0dOhQDR06VJs3bzY7ElzIkiVLNHz4cA0YMED//Oc/zY4DF/TFF184Hn+GDh2qNm3a6Omnn66Q23arkFtBtZeZmalXXnlFM2fOlIeHh0aOHKkOHTooMTHR7GhwIZs3b9akSZOUmppqdhS4oJSUFK1YsUKzZs2SxWLR3XffrYULF6pv375mR4OLWLNmjVavXq1vvvlGhYWFGjhwoHr06KH4+Hizo8GFrFq1SrNmzVLPnj3NjgIXZLfbdeDAAS1dulRubjwVw7U5fPiwnnzySX3xxRcKCQnR7bffrmXLlqlHjx5mR4MLufnmm3XzzTdLkvbu3av7779f48aNq5DbZgcTrkpKSoo6duyowMBA+fj4qH///po/f77ZseBiZsyYoSeffFLh4eFmR4ELCgsL0z/+8Q95eHjI3d1dCQkJOnr0qNmx4ELat2+vjz/+WG5ubjp58qSKiork4+Njdiy4kFOnTumVV17RmDFjzI4CF3XgwAFZLBbdc889uuGGG/Tpp5+aHQkuZOHChRo4cKAiIyPl7u6uV155RS1atDA7FlzY5MmTNX78eAUHB1fI7VGb46pkZWUpLCzMcTk8PFxbtmwxMRFc0ZQpU8yOABdWv359x8epqamaN2+epk2bZmIiuCJ3d3e99tpr+uCDDzRgwABFRESYHQku5IknntD48eN17Ngxs6PAReXm5qpTp06aPHmyLly4oNGjRysuLk5dunQxOxpcQFpamtzd3fWnP/1Jx48fV69evfTggw+aHQsuKiUlRRcuXND1119fYbfJDiZcFbvdfskxi8ViQhIANd3evXt111136ZFHHlFsbKzZceCCHnjgAa1atUrHjh3TjBkzzI4DF/HFF18oKipKnTp1MjsKXFirVq30wgsvyMfHR8HBwRoxYoSWLVtmdiy4iKKiIq1atUovvviiZsyYoa1bt2rWrFlmx4KLmjZtmu68884KvU0KJlyViIgInThxwnE5KyuL05wAVLn169frjjvu0EMPPaQbb7zR7DhwMfv379fOnTslSd7e3urXr592795tciq4innz5mnlypUaOnSoXnvtNS1ZskTPPvus2bHgYtatW6dVq1Y5LtvtdmYx4aqFhoaqU6dOCg4OlpeXl6677jrOKkG55Ofna+3aterdu3eF3i4FE65K586dtWrVKmVnZ+v8+fNasGCBunfvbnYsADXIsWPHdP/99+ull17SoEGDzI4DF3TkyBFNmjRJ+fn5ys/P1+LFi9WmTRuzY8FFfPjhh5o7d65mz56tBx54QL1799Zjjz1mdiy4mDNnzuiFF17QxYsXlZeXp1mzZvFmFbhqvXr10ooVK5Sbm6uioiL9+OOPatq0qdmx4IJ2796t2NjYCp9FSV2OqxIREaHx48dr9OjRKigo0IgRI5SUlGR2LAA1yPvvv6+LFy/qX//6l+PYyJEjdcstt5iYCq6kR48e2rx5s4YNGyabzaZ+/fpRVgKoUr169XI8DhUXF+vWW29Vq1atzI4FF9GiRQvdfffduvXWW1VQUKAuXbropptuMjsWXNDhw4cVGRlZ4bdrsV9uuA4AAAAAAABwlThFDgAAAAAAAIZQMAEAAAAAAMAQCiYAAAAAAAAYQsEEAAAAAAAAQyiYAAAAAAAAYAgFEwAAAAAAAAyhYAIAAAAAAIAhFEwAAMDl9e7dWykpKWbHAAAAqLEomAAAACpYdna2GjZsqMzMTLOjAAAAVAkKJgAAgArw0ksv6ccff5Qk7dq1S8HBwYqIiDA5VYkHHnhAe/bscVw+cuSIWrVqVa7bOnv2rO6++25duHChouIBAIBqgIIJAABUK/v379eoUaPUtm1bDRo0SIsXL3Z8bvv27Ro2bJhatWqlBx54QA8++KBeeeUVw/e5adMm7du3T926dZMk7dy5U40aNTJ8uxUhPz9faWlpatCgQYXcnq+vrwYPHqxXX321Qm4PAABUDxRMAACg2igoKNCYMWPUpUsXpaSkaNKkSfr73/+uAwcOKD8/X+PGjdONN96oNWvWaPDgwVq0aFGF3O/rr7+u5ORkx2VnKphSUlLUqVOnCr3N66+/XnPmzNGJEycq9HYBAIDromACAADVxubNm3Xu3Dn9+c9/loeHhzp16qRevXrp22+/1ebNm1VYWKjRo0fL3d1d/fr1U/PmzR1fe+bMGY0YMUKtWrUqdTrZiy++qFtvvVUPP/ywCgoKLrnP3NxcrV+/Xl26dHEc27Vrlxo3bnzJdadPn65Ro0Y5/iUlJWnLli2Oz48cOVJvvPGGpJLT2Bo2bKjVq1dLKtmJ1K5dO3366aeSpLy8PI0ZM0ajRo1ScnKyli1bdtmfyeLFi9WnT59r+TGWydPTU61bt77ifQIAgJrHzewAAAAAFSUrK0uRkZGyWn99Da127drKzMxUVlaWIiIiZLFYHJ+LiopyfOzl5aV33nlHL7zwguPYrl27lJmZqc8++0xvvvmmvv/+ew0ePLjUfaalpSksLEweHh6SpIsXL+rgwYNq0qTJJfmSk5MdO52WLFmiWbNmKSkpSZJ07NgxRUREaM2aNY7rN2vWTAsXLlTHjh21atUq1atXz/G52bNnq1u3brrttttkt9t15syZS+6vuLhYmzZt0uTJk6/q5/eLzMxMffzxxyosLJTdblfjxo114403lrpO3bp1dfDgwWu6XQAAUH2xgwkAAFQb4eHhysjIUHFxsePYL8VNWFiYMjMzZbfbS33uF+7u7goODi51exs2bFDXrl0lSd26ddOGDRsuuU+r1aqioiLH5T179sjNzU1xcXFXzJmdna1XX31VTz31lOPY999/ryFDhig+Pl779++XJEVHR+vo0aOy2+1auHCh+vXr57i+p6enNm3apBMnTshisahWrVqX3M/mzZvVrFkz2Wy2K2b5reLiYn3zzTcaP368Hn30UT322GNKSEjQ0qVLS12vqKjomm4XAABUbxRMAACg2khKSpKXl5fee+89FRQU6KefftKSJUs0cOBAtWzZUjabTZ9++qkKCwu1aNEibd269XdvLzc3V35+fpIkf39/nT59+pLr1KlTR9nZ2bp48aKkkl1PCQkJKiws1MWLF3Xx4kXl5+eX+prJkyfrr3/9a6lCa8WKFerevbsGDx6s+fPnO463atVKa9euVXZ2tkJDQx3Hhw4dqri4OP3pT39ScnKyDhw4cEm2RYsW6brrrruKn9yvtmzZomHDhsnNzU3fffed0tPTlZSUpPPnz5e63pEjR363RAMAADULBRMAAKg2PDw89NZbb2n58uXq2LGjnnrqKb3wwgtKSEiQh4eHXn/9dX355Zdq166dvvnmG/Xs2dNxatvl+Pv7Ky8vT1LJjKaAgIBLrlOrVi21adPGMStp586d2r59u5KSkhz/Bg4c6Lj+119/LX9/f/Xu3dtxLCMjQ3v37tXYsWP15ptvlppt1K9fPz333HNq3759qft1d3fXfffdp9mzZ+uBBx7Q66+/fkm2lJQUxw6s3zp37pxatWpV6t/u3btls9kcO8DeeustrVu3TpJK7VbKz8/Xxo0bS30PAACgZmMGEwAAcHlLlixxfFy/fn3HIOzfat68uWbPnu24fPPNN6tXr15XvN3WrVvrww8/1LBhw7RixQq1bt36ste7//779dZbb6lHjx564okn9MQTT1z2eseOHdNHH310Sb758+fr0Ucf1YABAySV7HD6ZddTbGys2rRpowEDBiglJcXxNenp6Y7ZTyEhIaVO/fvFrFmzLpsjJiZGu3fvvuznCgoK9PHHH+v22293/Ky2bt1aqmCaO3euhgwZctnT8gAAQM1EwQQAAGqMNWvWKC4uTkFBQZozZ452796tbt26OT5/zz33aOfOnTp48KCSk5M1fPhwhYSE6NZbb1VUVJTuuuuuy95u69atFRcXp+XLl6t79+5XvP+3335bubm5Gjt2rOPYfffdpwULFuj//u//HMc6dOig7777znF50qRJl9zWnj17NH78eHl6esput1+x1LpW7u7uuv766/Xvf//bsZOpfv36GjFihKSSd6+bO3eu493uAAAAJMliv9zLXQAAANXQ9OnT9eqrr+r8+fOKiYnRQw89pJ49e5odCwAAwOVRMAEAAAAAAMAQhnwDAAAAAADAEAomAAAAAAAAGELBBAAAAAAAAEMomAAAAAAAAGAIBRMAAAAAAAAMoWACAAAAAACAIRRMAAAAAAAAMISCCQAAAAAAAIb8fxzqA03KlXkqAAAAAElFTkSuQmCC\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")" + ] + }, + { + "cell_type": "markdown", + "id": "0546f2f3-4732-4841-8ef3-565fbf6b9961", + "metadata": {}, + "source": [ + "This distribution is peaked at low luminosity, as one expects from observations, but the resolution is clearly not great because it's not smooth - it's spiky! \n", + "\n", + "If you noticed above, the total probability of the grid was about 0.2. Given that the total probability of a probability distribution function should be 1.0, this shows that our sampling is (very) poor. \n", + "\n", + "We could simply increase the resolution to compensate, but this is very CPU intensive and a complete waste of time and resources. Instead, let's try sampling the masses of the stars in a smarter way." + ] + }, + { + "cell_type": "markdown", + "id": "673031c9-7d80-45d4-b209-301c127d3edf", + "metadata": {}, + "source": [ + "# A better-sampled grid\n", + "\n", + "The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space. \n", + "\n", + "To do this we first rename the mass grid variable so that it is clear we are working in (natural) logarithmic phase space." + ] + }, + { + "cell_type": "code", + "execution_count": 14, + "id": "5956f746-e3b9-4912-b75f-8eb0af66d3f6", + "metadata": {}, + "outputs": [], + "source": [ + "# Rename the old variable (M_1) because we want it to be called lnM_1 now\n", + "population.rename_grid_variable(\"M_1\",\"lnM_1\")" + ] + }, + { + "cell_type": "markdown", + "id": "532f691c-c1f6-46cc-84f2-970ec1216e40", + "metadata": {}, + "source": [ + "Next, we change the spacing function so that it works in the log space. We also adapt the probability calculation so that it calculates dprob/dlnM = M * dprob/dM. Finally, we set the precode to compute M_1 because binary_c requires the actual mass, not the logarithm of the mass." + ] + }, + { + "cell_type": "code", + "execution_count": 15, + "id": "108d470a-bb21-40b0-8387-2caa7ab0f923", + "metadata": {}, + "outputs": [], + "source": [ + "# update the sampling, note that the IMF is dprob/dM1, and the phase \n", + "# space is now sampled in lnM1, so we multiply by M_1 to \n", + "# because M * dprob/dM = dprob/dlnM\n", + "population.update_grid_variable(\n", + " name=\"lnM_1\",\n", + " spacingfunc=\"const(math.log({min}), math.log({max}), {res})\".format(min = massrange[0], max = massrange[1], res = resolution[\"M_1\"]),\n", + " probdist=\"three_part_powerlaw(M_1, 0.1, 0.5, 1.0, 150, -1.3, -2.3, -2.3)*M_1\",\n", + " dphasevol=\"dlnM_1\",\n", + " parameter_name=\"M_1\",\n", + " precode=\"M_1=math.exp(lnM_1)\",\n", + ")\n", + "# print(population.grid_options[\"_grid_variables\"]) # debugging" + ] + }, + { + "cell_type": "code", + "execution_count": 16, + "id": "fb8db646-f3d0-4ccd-81ba-7fde23f29c79", + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Grid has handled 40 stars\n", + "with a total probability of 0.9956307907476224\n", + "Total starcount for this run will be: 40\n", + "Generating grid code\n", + "Constructing/adding: lnM_1\n", + "Population-83f80d829dbd418aa2bc745c99b71991 finished! The total probability was: 0.9956307907476224. It took a total of 0.9961590766906738s to run 40 systems on 2 cores\n", + "There were no errors found in this run.\n", + "OrderedDict([('luminosity distribution', OrderedDict([(0.25, 0.0212294), (2.75, 0.00321118), (-0.25, 0.0268827), (1.25, 0.0104553), (3.75, 0.00283037), (6.25, 7.34708e-05), (-0.75, 0.0771478), (0.75, 0.030004499999999996), (2.25, 0.00921541), (3.25, 0.0045385), (1.75, 0.014776889999999999), (4.25, 0.002380189), (4.75, 0.000869303), (5.25, 0.0007310379999999999), (5.75, 0.00036002859999999996), (-2.75, 0.1961345), (-1.75, 0.2181597), (-3.25, 0.0), (-2.25, 0.2568974), (-1.25, 0.11973310000000001)]))])\n" + ] + } + ], + "source": [ + "# Clean and re-evolve the population \n", + "population.clean()\n", + "analytics = population.evolve() \n", + "\n", + "# Show the results (debugging)\n", + "# print (population.grid_results)" + ] + }, + { + "cell_type": "markdown", + "id": "182b1094-5057-4ccf-bac6-9b0e560ad4f6", + "metadata": {}, + "source": [ + "You should see that the total probability is very close to 1.0, as you would expect for a well-sampled grid. The total will never be exactly 1.0, but that is because we are running a simulation, not a perfect copy of reality." + ] + }, + { + "cell_type": "code", + "execution_count": 17, + "id": "68ee1e56-21e5-48f4-b74c-50e48685ae94", + "metadata": {}, + "outputs": [ + { + "data": { + "image/png": "iVBORw0KGgoAAAANSUhEUgAABJgAAAJWCAYAAAAUZj1OAAAAOXRFWHRTb2Z0d2FyZQBNYXRwbG90bGliIHZlcnNpb24zLjMuMywgaHR0cHM6Ly9tYXRwbG90bGliLm9yZy/Il7ecAAAACXBIWXMAAAsTAAALEwEAmpwYAAB37ElEQVR4nOzdd3iV9f3/8dcZ2XtPstkhrLD3ElkyREGtA+vA0eHXqq1SRa221rb+2lpx1C3WVYaAKEtUlpAwE0YgJJCQkAGEEFbW+f2BpqUKAZJz7pOc5+O6uC7PneTcrxy8Q/LK5/O+TTabzSYAAAAAAADgCpmNDgAAAAAAAICWjYIJAAAAAAAATULBBAAAAAAAgCahYAIAAAAAAECTUDABAAAAAACgSSiYAAAAAAAA0CQUTAAAAAAAAGgSq9EB7OnYsZOqr7fZ9RwhIb46cqTKrucAnBnXAMB1AHANwNVxDcDVcQ24DrPZpKAgnx99W6sumOrrbXYvmL4/D+DKuAYArgOAawCujmsAro5rAGyRAwAAAAAAQJNQMAEAAAAAAKBJWvUWOQAAAAAAHKmurlbHjpWptrba6CgOU1pqVn19vdEx0IysVncFBYXJYrn02oiCCQAAAACAZnLsWJk8Pb3l4xMpk8lkdByHsFrNqq2lYGotbDabTp6s1LFjZQoNjbrkj2OLHAAAAAAAzaS2tlo+Pv4uUy6h9TGZTPLx8b/sVXgUTAAAAAAANCPKJbR0V/L/MAUTAAAAAAAAmoSCCQAAAACAVmjbti267bYbz/szeHBvffHFZw3v8+9/f6ihQ/vqyJHy8z524MB0/d//3X/esYqKCg0Z0kevv/6KJOnw4cN6+OEHdNNN1+vmm6/Xb3/7ax07dvQHOV5//ZWGj2mKf/7zZa1Z81WTn+d7CxZ8ogULPpEkPfvskzp8uPiKnuf+++/S5s0Z2r17p/7wh6cv+H5FRYf0+98/1WiWgQPTL+v8a9Z8rQ8+eO8Hz+NoDPkGAAAAAKAV6tq1u9566/2Gxx9+OFeff75EQ4eOaDi2ZMkiDRw4RIsXL9Stt/70vI8vKChQZWWl/P39JUmrV6+Un59/w9uff/5ZXX31WI0ZM1a1tfV699039fzzv9ezzz5vl8/njjtmNuvzTZo0teG/N2/O0IwZdzbp+Tp06KRf/7rTBd9++HCxDh0qbDTL5dqzZ1ezPE9TUTABAAAAANDKbdu2Re+884ZeffVteXh4SJL27durysrjevjhxzRr1sO6+eYZMpv/s9Fp4MDB+uab1Ro37hpJ5wqmwYOHNrz96NFynT17puHxtdder127dl40x8CB6VqzJkOS9Nlni7RlS6Yee2y2pk6doOHDR2ndujWyWCy6++779MEH76mwsED33fdLjRgxSs88M1vdu/dU9+499eijv1JSUrJycvYoODhETz/9B/n7B2jt2m/02mtzZLPVKzo6Rg899KiCg0P04ov/T5s2fSuLxayBA4fo9tvvalhV5e7uofLyMj300C90xx0z9cEHc/Xyy29IkpYuXazs7B361a9+0/A5VFdX67nnntbu3bsUGRmt48crJJ0rqd5441W9+OKr+uCD97R06RKZzSZ17NhZDz/8mP761z+pqOiQ/vzn5zRs2AjNmfM31dXVKykpWVFR0ZKkn/70bknSc889o127shUQEKjf/OZxRUZG6v7779Ltt9+lHj3SVVxcpJ/97G49//xftXDhPElSZGRUwyqsn/707gu+FlOnTtDo0WO1ceN6nT59RrNmPakOHTpe8v9LF0LBBAAAAACAHazdUaw1269s21VjBqZFaUCXS7uF/LFjRzV79mN65JHfKiYmtuH4Z599quHDR6pDh46yWCz69tt16tdvYMPbhw8fqXfeeUPjxl2jI0fKZbNJISGhDW+/++779dRTv9Xrr7+qnj17qW/f/ho+fNQVf06hoWF6772P9OyzT+q9997S3/72snbs2Ka//e3PGjHi/Ofdt2+vfvObx9WuXQc99thDWrZsqUaMuErPP/+s5sx5XVFR0Xr//Xf0l7/8Ufff/0tt2LBO7733kc6ePavnnvudzp492/BcN998mxYu/Leef/6vioyM0j/+8TcdOlSomJhYLV26WHffff5WwU8++VCSNHfuJyooOKhbb73hvLfX1tbqvffe0oIFn8tsNusvf3lOZWWl+sUvfqU33nhVDz74iDZvzlBBwUF98sli+fr6/mALYffuPfTII49p3ryP9de//km///2ffvQ1S0xM0sSJUyRJ48Zd0/A8x44d/dHX4ne/e06SFBAQoNdee0effPKB3n33DT3zTNNXnTGDCQAAAACAVqq+vl6zZ8/SyJGjz1t9VFtbq2XLPtfIkaMlScOHj2pYCfO91NQ0HTx4QFVVVVq9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hQsXasKECfzDApdQUlKiF154Qe+//74WLlyoDz/8UPv27TM6FuAw69at05o1azR//nwtWLBA2dnZWr58udGxAIdbv3695s+fb3QMwBAFBQV64okn9NJLL2nRokXauXOnvvrqK6NjwSAUTM3gD3/4g2677TajYwCGqK6u1i9+8Qt16NBBktS+fXsVFxcbnAqwv3Xr1qlv374KDAyUt7e3Ro8erc8//9zoWIDDhIWF6de//rXc3d3l5uam5ORkFRUVGR0LcKiKigq98MILmjlzptFRAEMsX75cY8eOVWRkpNzc3PTCCy+oa9euRseCQSiYmmjlypU6c+aMrr76aqOjAIZwd3fXxIkTJUn19fV68cUXNXLkSINTAfZXWlqqsLCwhsfh4eEqKSkxMBHgWG3btlW3bt0kSfn5+frss880ZMgQY0MBDvb444/rgQcekL+/v9FRAEMcOHBAdXV1+ulPf6prrrlG77//vgICAoyOBYNYjQ7QUixdulS///3vzzuWlJSkqqoqvfXWW8aEAhzsQtfBW2+9perqav36179WbW2t7r77boMSAo5js9l+cMxkMhmQBDDW3r17dffdd+uRRx5RQkKC0XEAh/n4448VFRWlfv36ad68eUbHAQxRV1enjIwMvfvuu/L29ta9996r+fPna8qUKUZHgwEomC7RmDFjNGbMmPOOffzxx3rllVd00003NRybOHGi5s6dK19fX0dHBOzux64DSTp58qTuueceBQYGas6cOXJzczMgHeBYERERysjIaHhcWlqq8PBwAxMBjpeZmamf//znevTRRzVu3Dij4wAO9dlnn6msrEwTJ07U8ePHderUKT377LN69NFHjY4GOExoaKj69eun4OBgSdKIESO0fft2CiYXZbL92K9gcUXat2+vPXv2GB0DcLh7771XISEheuqpp1jBAZdRUlKiG264QZ988om8vLw0ffp0Pf3000pLSzM6GuAQxcXFmjx5sl544QX169fP6DiAoebNm6eNGzfqD3/4g9FRAIfatm2bHnnkEX300Ufy8fHRfffdpxEjRui6664zOhoMwAomAE2yc+dOrVy5UikpKZo0aZKkc7NoXnvtNWODAXYWERGhBx54QLfccotqamo0depUyiW4lNdff11nz5497wfq6dOn64YbbjAwFQDAkbp27ao77rhDN954o2pqajRgwABde+21RseCQVjBBAAAAAAAgCbhLnIAAAAAAABoEgomAAAAAAAANAkFEwAAAAAAAJqEggkAAAAAAABNQsEEAAAAAACAJqFgAgAAAAAAQJNQMAEAAAAAAKBJKJgAAECLN3z4cK1bt87oGAAAAC6LggkAAKCZHT16VO3bt1dJSYnRUQAAAByCggkAAKAZ/OlPf9I333wjSdq9e7eCg4MVERFhcKpzfv7znysnJ6fhcWFhobp3735Fz3Xy5EndcccdOnPmTHPFAwAArQAFEwAAaFVyc3N18803Kz09XePGjdPKlSsb3padna1Jkyape/fu+vnPf65f/vKXeuGFF5p8zq1bt2rfvn0aNGiQJGnXrl3q0KFDk5+3OVRXV+vAgQNq165dszyfj4+Pxo8fr7/+9a/N8nwAAKB1oGACAACtRk1NjWbOnKkBAwZo3bp1mjVrln71q19p//79qq6u1v3336/Jkydr48aNGj9+vFasWNEs5/373/+uadOmNTx2poJp3bp16tevX7M+55gxY7Ro0SKVl5c36/MCAICWi4IJAAC0Gtu2bdOpU6d01113yd3dXf369dOwYcO0ZMkSbdu2TbW1tbrlllvk5uamq666Sl26dGn42BMnTmjq1Knq3r37edvJnn/+ed1444166KGHVFNT84NzVlZWKjMzUwMGDGg4tnv3bnXs2PEH7/vhhx/q5ptvbviTlpam7du3N7x9+vTpevHFFyWd28bWvn17bdiwQdK5lUi9evXSe++9J0mqqqrSzJkzdfPNN2vatGn66quvfvQ1WblypUaOHHk5L2OjPDw81KNHjwueEwAAuB6r0QEAAACaS2lpqSIjI2U2/+d3aNHR0SopKVFpaakiIiJkMpka3hYVFdXw356ennr11Vf1xz/+seHY7t27VVJSovfff19z5szRF198ofHjx593zgMHDigsLEzu7u6SpLNnzyovL0+dOnX6Qb5p06Y1rHRatWqV5s+fr7S0NElScXGxIiIitHHjxob3T01N1fLly9W3b1+tX79e8fHxDW9buHChBg0apJtuukk2m00nTpz4wfnq6+u1detWzZ49+5Jev++VlJTonXfeUW1trWw2mzp27KjJkyef9z5xcXHKy8u7rOcFAACtFyuYAABAqxEeHq7Dhw+rvr6+4dj3xU1YWJhKSkpks9nOe9v33NzcFBwcfN7zbd68WQMHDpQkDRo0SJs3b/7BOc1ms+rq6hoe5+TkyGq1KjEx8YI5jx49qr/+9a968sknG4598cUXmjBhgpKSkpSbmytJiomJUVFRkWw2m5YvX67/3979hTT1xnEc/8icduEWsm4EhcbYXY02Mb1xLgMxMRpSDLoRjC5cUIhXioy6EgQvRKQJQRHeCEFtDiYxhgwZ9Af6IyIrqJtGXYSQRGN/yt+FdH6szfjFLn6k7xcc2HnO9zznOefys+c8p6+vz6hvbGzUy5cv9fnzZ9XV1clqtVZc59WrVzpx4oRMJtO+Y/nVjx8/FI1GNTY2pomJCU1OTsrhcGhtba2s7vv373/ULwAAONgImAAAwIHhcrl05MgR3blzR8ViUU+ePFEymdTAwIBOnTolk8mkpaUllUolJRIJbWxs/La/nZ0dNTU1SZIsFou+fPlSUdPW1qbt7W3l83lJe7OeHA6HSqWS8vm88vm8CoVC2Tk3b97UjRs3ygKt9fV1eb1eDQ4OanV11Wh3u9169uyZtre3dezYMaP9woULstvtunLligKBgN69e1cxtkQiobNnz/6HJ/ev169fy+/3q76+XvF4XNlsVi6XS7lcrqzuw4cPvw3RAADA4ULABAAADoyGhgaFw2GlUil1dXXp1q1bmpmZkcPhUENDg+bn5/XgwQN1dHQoGo3K5/MZr7ZVY7FY9PXrV0l7azQdPXq0osZqtaq9vd1YK2lra0ubm5tyuVzGNjAwYNQ/evRIFotFvb29RtunT5/09u1bjY6O6vbt22VrG/X19Wl6elqnT58uu67ZbFYwGFQkEtH169c1Pz9fMbZ0Om3MwPrVt2/f5Ha7y7ZMJiOTyWTMAAuHw3r+/Lkklc1WKhQKevHiRdk9AACAw401mAAAwF8vmUwav51Op7EQ9q9OnjypSCRi7F+6dElnzpzZt1+Px6O7d+/K7/drfX1dHo+nat21a9cUDofV09OjUCikUChUte7jx4+6d+9exfhWV1c1MTGh/v5+SXsznH7Oejp+/Lja29vV39+vdDptnJPNZo21n2w2W9mrfz89fPiw6jhaW1uVyWSqHisWi7p//76Gh4eNZ7WxsVEWMMViMZ0/f77qa3kAAOBwImACAACHxtOnT2W329Xc3KyVlRVlMhl1d3cbx69evaqtrS29f/9egUBAQ0NDstlsunz5slpaWjQyMlK1X4/HI7vdrlQqJa/Xu+/1FxcXtbOzo9HRUaMtGAzq8ePHWlhYMNo6OzsVj8eN/ampqYq+3rx5o7GxMTU2Nmp3d3ffUOtPmc1mnTt3TrOzs8ZMJqfTqYsXL0ra+3pdLBYzvnYHAAAgSXW71f7uAgAAOICWl5c1NzenXC6n1tZWjY+Py+fz/d/DAgAA+OsRMAEAAAAAAKAmLPINAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABqQsAEAAAAAACAmhAwAQAAAAAAoCYETAAAAAAAAKgJARMAAAAAAABq8g/wlbD9p3152QAAAABJRU5ErkJggg==\n", + "text/plain": [ + "<Figure size 1440x720 with 1 Axes>" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "# plot luminosity distribution\n", + "ldist = population.grid_results['luminosity distribution']\n", + "\n", + "# pad the distribution with zeros where data is missing\n", + "pad_output_distribution(ldist,\n", + " binwidth['luminosity'])\n", + "\n", + "# make pandas dataframe from our sorted dictionary of data\n", + "plot_data = pd.DataFrame.from_dict({'ZAMS luminosity distribution' : ldist})\n", + "\n", + "# make the plot\n", + "p = sns.lineplot(data=plot_data)\n", + "p.set_xlabel(\"$\\log_{10}$ ($L_\\mathrm{ZAMS}$ / L$_{☉}$)\")\n", + "p.set_ylabel(\"Number of stars\")\n", + "p.set(yscale=\"log\")\n", + "plt.show()" + ] + }, + { + "cell_type": "markdown", + "id": "31fe91bb-177d-4e4e-90cf-298a3f8a8b61", + "metadata": {}, + "source": [ + "Most stars are low mass red dwarfs, with small luminosities. Without the IMF weighting, our model population would have got this completely wrong! \n", + "\n", + "As you increase the resolution, you will see this curve becomes even smoother. The wiggles in the curve are (usually) sampling artefacts because the curve should monotonically brighten above about log(*L*/L<sub>☉</sub>)=-2. \n", + " \n", + "Remember you can play with the binwidth too. If you want a very accurate distribution you need a narrow binwidth, but then you'll also need high resolution (lots of stars) so lots of CPU time, hence cost, CO<sub>2</sub>, etc." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3", + "language": "python", + "name": "python3" + }, + "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.6.4" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/docs/source/notebook_population.ipynb b/docs/source/notebook_population.ipynb index 961a3b71a..f6f27ee43 100644 --- a/docs/source/notebook_population.ipynb +++ b/docs/source/notebook_population.ipynb @@ -23,9 +23,12 @@ "outputs": [], "source": [ "import os\n", + "\n", "from binarycpython.utils.custom_logging_functions import temp_dir\n", "from binarycpython.utils.grid import Population\n", "\n", + "TMP_DIR = temp_dir(\"notebooks\", \"notebook_population\")\n", + "\n", "# help(Population) # Uncomment to see the public functions of this object" ] }, @@ -60,7 +63,8 @@ "adding: max_evolution_time=15000 to BSE_options\n", "adding: eccentricity=0.02 to BSE_options\n", "adding: amt_cores=2 to grid_options\n", - "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/example_python_population_result to custom_options >>>>\n", + "adding: tmp_dir=/tmp/binary_c_python/notebooks/notebook_population to grid_options\n", + "<<<< Warning: Key does not match previously known parameter: adding: data_dir=/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result to custom_options >>>>\n", "<<<< Warning: Key does not match previously known parameter: adding: base_filename=example_pop.dat to custom_options >>>>\n", "1\n", "example_pop.dat\n", @@ -88,11 +92,12 @@ "\n", "\n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", " \n", " # Custom options # TODO: need to be set in grid_options probably\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -133,13 +138,13 @@ "name": "stdout", "output_type": "stream", "text": [ - "Writing settings to /tmp/binary_c_python/example_python_population_result/example_pop_settings.json\n" + "Writing settings to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json\n" ] }, { "data": { "text/plain": [ - "'/tmp/binary_c_python/example_python_population_result/example_pop_settings.json'" + "'/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/example_pop_settings.json'" ] }, "execution_count": 3, @@ -181,7 +186,7 @@ "text": [ "Help on method add_grid_variable in module binarycpython.utils.grid:\n", "\n", - "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='edge', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", + "add_grid_variable(name:str, longname:str, valuerange:Union[list, str], resolution:str, spacingfunc:str, probdist:str, dphasevol:Union[str, int], parameter_name:str, gridtype:str='centred', branchpoint:int=0, precode:Union[str, NoneType]=None, condition:Union[str, NoneType]=None) -> None method of binarycpython.utils.grid.Population instance\n", " Function to add grid variables to the grid_options.\n", " \n", " The execution of the grid generation will be through a nested for loop.\n", @@ -199,25 +204,25 @@ " name:\n", " name of parameter. This is evaluated as a parameter and you can use it throughout\n", " the rest of the function\n", - " \n", + " \n", " Examples:\n", " name = 'lnm1'\n", " longname:\n", " Long name of parameter\n", - " \n", + " \n", " Examples:\n", " longname = 'Primary mass'\n", " range:\n", " Range of values to take. Does not get used really, the spacingfunction is used to\n", " get the values from\n", - " \n", + " \n", " Examples:\n", " range = [math.log(m_min), math.log(m_max)]\n", " resolution:\n", " Resolution of the sampled range (amount of samples).\n", " TODO: check if this is used anywhere\n", " \n", - " Examples: \n", + " Examples:\n", " resolution = resolution[\"M_1\"]\n", " spacingfunction:\n", " Function determining how the range is sampled. You can either use a real function,\n", @@ -230,12 +235,12 @@ " precode:\n", " Extra room for some code. This code will be evaluated within the loop of the\n", " sampling function (i.e. a value for lnm1 is chosen already)\n", - " \n", + " \n", " Examples:\n", " precode = 'M_1=math.exp(lnm1);'\n", " probdist:\n", " Function determining the probability that gets assigned to the sampled parameter\n", - " \n", + " \n", " Examples:\n", " probdist = 'Kroupa2001(M_1)*M_1'\n", " dphasevol:\n", @@ -249,7 +254,7 @@ " condition = 'self.grid_options['binary']==1'\n", " gridtype:\n", " Method on how the value range is sampled. Can be either 'edge' (steps starting at\n", - " the lower edge of the value range) or 'center'\n", + " the lower edge of the value range) or 'centred'\n", " (steps starting at lower edge + 0.5 * stepsize).\n", "\n" ] @@ -313,7 +318,7 @@ " \"dphasevol\": \"dlnm1\",\n", " \"parameter_name\": \"M_1\",\n", " \"condition\": \"\",\n", - " \"gridtype\": \"edge\",\n", + " \"gridtype\": \"centred\",\n", " \"branchpoint\": 0,\n", " \"grid_variable_number\": 0\n", "}\n" @@ -457,7 +462,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "adding: parse_function=<function parse_function at 0x7ff3bdf79620> to grid_options\n" + "adding: parse_function=<function parse_function at 0x7f531bc3b6a8> to grid_options\n" ] } ], @@ -536,25 +541,25 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", - "EXAMPLE_COMPACT_OBJECT 2.867655467480e+01 1.33079 9.81391 0.00167028 13\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "EXAMPLE_COMPACT_OBJECT 1.931266944719e+01 1.3933 12.3177 0.00124307 13\n", - "EXAMPLE_COMPACT_OBJECT 4.439623364590e+01 1.38004 7.81906 0.00224431 13\n", - "EXAMPLE_COMPACT_OBJECT 1.364277535630e+01 1.47961 15.4603 0.000925128 13\n", - "EXAMPLE_COMPACT_OBJECT 1.017435498578e+01 1.59052 19.4046 0.000688507 13\n", - "EXAMPLE_COMPACT_OBJECT 8.294870923827e+00 1.7197 24.3552 0.000512406 13\n", - "EXAMPLE_COMPACT_OBJECT 6.802132608769e+00 1.84162 30.5689 0.000381347 13\n", - "EXAMPLE_COMPACT_OBJECT 5.723570798020e+00 1.99471 38.3678 0.00028381 13\n", - "EXAMPLE_COMPACT_OBJECT 4.933751523833e+00 2.15875 48.1564 0.000211219 13\n", - "EXAMPLE_COMPACT_OBJECT 4.337250536639e+00 2.35209 60.4424 0.000157195 14\n", - "EXAMPLE_COMPACT_OBJECT 3.862081089332e+00 2.56776 75.8628 0.000116989 14\n", - "EXAMPLE_COMPACT_OBJECT 3.449960890183e+00 2.80457 95.2174 8.70668e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.172196856333e+00 3.05193 119.51 6.47976e-05 14\n", - "EXAMPLE_COMPACT_OBJECT 3.069627290216e+00 3.27563 150 4.82242e-05 14\n", - "Population-2a7732d03e594ef4b5dfe9051b41d9c0 finished! The total probability was: 0.05150046619238191. It took a total of 0.7797017097473145s to run 20 systems on 2 cores\n", + "EXAMPLE_COMPACT_OBJECT 4.139293101586e+01 1.29427 8.13626 0.00202467 13\n", + "EXAMPLE_COMPACT_OBJECT 2.802986496151e+01 1.33699 10.0967 0.00152924 13\n", + "EXAMPLE_COMPACT_OBJECT 1.963621764679e+01 1.39754 12.5294 0.00115504 13\n", + "EXAMPLE_COMPACT_OBJECT 1.427601421985e+01 1.47745 15.5483 0.000872405 13\n", + "EXAMPLE_COMPACT_OBJECT 1.094409257247e+01 1.57571 19.2947 0.00065893 13\n", + "EXAMPLE_COMPACT_OBJECT 9.181971798545e+00 1.68748 23.9436 0.000497691 13\n", + "EXAMPLE_COMPACT_OBJECT 7.905335716621e+00 1.77287 29.7128 0.000375908 13\n", + "EXAMPLE_COMPACT_OBJECT 7.451192744924e+00 1.81495 36.872 0.000283924 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396133472739e+00 1.82088 45.7561 0.000214449 13\n", + "EXAMPLE_COMPACT_OBJECT 7.396675941641e+00 1.82123 56.7809 0.000161974 13\n", + "EXAMPLE_COMPACT_OBJECT 7.404641347602e+00 1.82074 70.4621 0.000122339 13\n", + "EXAMPLE_COMPACT_OBJECT 7.444217227690e+00 1.81636 87.4397 9.2403e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.453317880232e+00 1.81536 108.508 6.97923e-05 13\n", + "EXAMPLE_COMPACT_OBJECT 7.450828476484e+00 1.81563 134.653 5.27143e-05 13\n", + "Population-f28b5f98d7ef40dcb17fc2481a6d3ced finished! The total probability was: 0.04440288843805411. It took a total of 2.785212755203247s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n" ] } @@ -586,7 +591,7 @@ "name": "stdout", "output_type": "stream", "text": [ - "{'population_name': '2a7732d03e594ef4b5dfe9051b41d9c0', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.05150046619238191, 'total_count': 20, 'start_timestamp': 1628444120.234709, 'end_timestamp': 1628444121.0144107, 'total_mass_run': 730.1048014407228, 'total_probability_weighted_mass_run': 0.2983275843337705, 'zero_prob_stars_skipped': 0}\n" + "{'population_name': 'f28b5f98d7ef40dcb17fc2481a6d3ced', 'evolution_type': 'grid', 'failed_count': 0, 'failed_prob': 0, 'failed_systems_error_codes': [], 'errors_exceeded': False, 'errors_found': False, 'total_probability': 0.04440288843805411, 'total_count': 20, 'start_timestamp': 1629459533.935186, 'end_timestamp': 1629459536.7203987, 'total_mass_run': 684.2544031669779, 'total_probability_weighted_mass_run': 0.28134439269236855, 'zero_prob_stars_skipped': 0}\n" ] } ], @@ -660,42 +665,22 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Saving grid code to grid_options\n", - "Writing grid code to /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", - "Loading grid code function from /tmp/binary_c_python/binary_c_grid_2a7732d03e594ef4b5dfe9051b41d9c0.py\n", + "Writing grid code to /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", + "Loading grid code function from /tmp/binary_c_python/notebooks/notebook_population/binary_c_grid_f28b5f98d7ef40dcb17fc2481a6d3ced.py\n", "Grid code loaded\n", - "Writing binary_c calls to /tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", - "_calculate_multiplicity_fraction: Chosen not to use any multiplicity fraction.\n", + "Writing binary_c calls to /tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", - "/tmp/binary_c_python/example_python_population_result/binary_c_calls.txt\n", - "binary_c M_1 2.0 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.013208238029791246\n", - "binary_c M_1 2.5102526289471614 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.009829948023831718\n", - "binary_c M_1 3.1506841305680684 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.0073157281034221516\n", - "binary_c M_1 3.9545065608702976 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.22723621650191106 probability 0.005444573822104362\n" + "with a total probability of 0.044402888438054094\n", + "/tmp/binary_c_python/notebooks/notebook_population/example_python_population_result/binary_c_calls.txt\n", + "binary_c M_1 2.227955577093495 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.010905083645619543\n", + "binary_c M_1 2.7647737053496777 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.008236638755149857\n", + "binary_c M_1 3.4309362899259503 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.006221155214163634\n", + "binary_c M_1 4.257608426597089 eccentricity 0.02 max_evolution_time 15000 orbital_period 45000000080 phasevol 0.21587440567681548 probability 0.004698855121516278\n" ] } ], "source": [ - "example_pop.set(verbosity=10)\n", + "example_pop.set(verbosity=1)\n", "calls_filename = example_pop.write_binary_c_calls_to_file()\n", "print(calls_filename)\n", "\n", @@ -725,39 +710,34 @@ "Generating grid code\n", "Constructing/adding: lnm1\n", "Grid has handled 20 stars\n", - "with a total probability of 0.05150046619238192\n", + "with a total probability of 0.044402888438054094\n", "Total starcount for this run will be: 20\n", "Generating grid code\n", "Constructing/adding: lnm1\n", - "Population-3680f3882c0a449c944462abffea2447 finished! The total probability was: 0.05150046619238191. It took a total of 0.6246354579925537s to run 20 systems on 2 cores\n", + "Population-e45c25448b32440cb7e220f4a3562907 finished! The total probability was: 0.04440288843805411. It took a total of 1.9539172649383545s to run 20 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass zams_mass probability radius stellar_type\n", - "2.867655467480e+01 1.33079 9.81391 0.00167028 1.72498e-05 13\n", - "1.931266944719e+01 1.3933 12.3177 0.00124307 1.72498e-05 13\n", - "4.439623364590e+01 1.38004 7.81906 0.00224431 1.72498e-05 13\n", - "1.364277535630e+01 1.47961 15.4603 0.000925128 1.72498e-05 13\n", - "1.017435498578e+01 1.59052 19.4046 0.000688507 1.72498e-05 13\n", - "8.294870923827e+00 1.7197 24.3552 0.000512406 1.72498e-05 13\n", - "6.802132608769e+00 1.84162 30.5689 0.000381347 1.72498e-05 13\n", - "5.723570798020e+00 1.99471 38.3678 0.00028381 1.72498e-05 13\n", - "4.933751523833e+00 2.15875 48.1564 0.000211219 1.72498e-05 13\n", - "4.337250536639e+00 2.35209 60.4424 0.000157195 9.97286e-06 14\n", - "3.862081089332e+00 2.56776 75.8628 0.000116989 1.08873e-05 14\n", - "3.449960890183e+00 2.80457 95.2174 8.70668e-05 1.18914e-05 14\n", - "3.172196856333e+00 3.05193 119.51 6.47976e-05 1.29402e-05 14\n", - "3.069627290216e+00 3.27563 150 4.82242e-05 1.38887e-05 14\n", + "4.139293101586e+01 1.29427 8.13626 0.00202467 1.72498e-05 13\n", + "2.802986496151e+01 1.33699 10.0967 0.00152924 1.72498e-05 13\n", + "1.963621764679e+01 1.39754 12.5294 0.00115504 1.72498e-05 13\n", + "1.427601421985e+01 1.47745 15.5483 0.000872405 1.72498e-05 13\n", + "1.094409257247e+01 1.57571 19.2947 0.00065893 1.72498e-05 13\n", + "9.181971798545e+00 1.68748 23.9436 0.000497691 1.72498e-05 13\n", + "7.905335716621e+00 1.77287 29.7128 0.000375908 1.72498e-05 13\n", + "7.451192744924e+00 1.81495 36.872 0.000283924 1.72498e-05 13\n", + "7.396133472739e+00 1.82088 45.7561 0.000214449 1.72498e-05 13\n", + "7.396675941641e+00 1.82123 56.7809 0.000161974 1.72498e-05 13\n", + "7.404641347602e+00 1.82074 70.4621 0.000122339 1.72498e-05 13\n", + "7.444217227690e+00 1.81636 87.4397 9.2403e-05 1.72498e-05 13\n", + "7.453317880232e+00 1.81536 108.508 6.97923e-05 1.72498e-05 13\n", + "7.450828476484e+00 1.81563 134.653 5.27143e-05 1.72498e-05 13\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -817,11 +797,12 @@ " eccentricity=0.02, # bse_options\n", " \n", " # grid_options\n", - " amt_cores=2, # grid_options\n", + " amt_cores=2,\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -876,15 +857,15 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" @@ -912,96 +893,39 @@ "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Grid has handled 125 stars\n", - "with a total probability of 0.0862478164626921\n", - "Total starcount for this run will be: 125\n", + "Grid has handled 27 stars\n", + "with a total probability of 0.024868380796643753\n", + "Total starcount for this run will be: 27\n", "Generating grid code\n", "Constructing/adding: lnm1\n", "Constructing/adding: q\n", "Constructing/adding: log10per\n", - "Population-d20a4c74d20a43b881c0c9e5def5f76c finished! The total probability was: 0.08624781646269201. It took a total of 8.561265707015991s to run 125 systems on 2 cores\n", + "Population-05128ef4c5fe4274a0356c3e99e2f2d2 finished! The total probability was: 0.024868380796643757. It took a total of 9.792905807495117s to run 27 systems on 2 cores\n", "There were no errors found in this run.\n", "\n", "\n", "time mass_1 zams_mass_1 mass_2 zams_mass_2 stellar_type_1 prev_stellar_type_1 stellar_type_2 prev_stellar_type_2 metallicity probability\n", - "8.863377990313e+01 1.29444 5.88566 0 2.99283 13 5 15 15 0.02 0.000627913\n", - "1.146421815741e+02 0 5.88566 1.33062 4.43925 15 15 13 5 0.02 0.000627913\n", - "7.222715508467e+01 1.34922 5.88566 0 5.88566 13 5 15 15 0.02 0.000627913\n", - "1.350021848285e+01 1.48488 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171108213270e+01 1.53113 17.3205 0 0.1 13 5 15 15 0.02 0.000154349\n", - "1.171086983243e+01 1.53177 17.3205 0 0.1 13 9 15 15 0.02 0.000154349\n", - "1.170770599495e+01 1.53176 17.3205 0 4.40513 13 5 15 15 0.02 0.000172877\n", - "1.230407246199e+01 1.59499 17.3205 0 4.40513 13 5 15 15 0.02 0.000610573\n", - "1.108751340926e+01 1.70319 17.3205 0 8.71025 13 4 15 15 0.02 0.000610573\n", - "1.941017702765e+01 1.34903 17.3205 1.65097 8.71025 13 13 13 5 0.02 0.000172877\n", - "1.980988739731e+01 1.36979 17.3205 1.60808 8.71025 13 13 13 5 0.02 0.000121486\n", - "3.571858031651e+01 1.53174 17.3205 1.30504 8.71025 13 13 13 5 0.02 8.42148e-05\n", - "3.459153942631e+01 1.53176 17.3205 1.31004 8.71025 13 13 13 5 0.02 9.8162e-05\n", - "1.687368550125e+01 1.34937 17.3205 1.73856 13.0154 13 13 13 8 0.02 0.000172877\n", - "1.194842917007e+01 1.78096 17.3205 0 13.0154 13 8 15 15 0.02 0.000610573\n", - "1.733614170983e+01 1.53184 17.3205 1.42375 13.0154 13 13 13 5 0.02 9.8162e-05\n", - "1.723547465714e+01 1.38403 17.3205 1.71288 13.0154 13 13 13 8 0.02 0.000121486\n", - "1.764340254985e+01 1.53174 17.3205 1.41264 13.0154 13 13 13 5 0.02 8.42148e-05\n", - "1.170425790780e+01 1.52963 17.3205 0 17.3205 13 5 15 15 0.02 0.000172877\n", - "8.922967341481e+00 1.85486 17.3205 0 17.3205 13 8 15 15 0.02 0.000610573\n", - "1.232906623449e+01 1.41074 17.3205 1.34281 17.3205 13 13 13 8 0.02 0.000121486\n", - "1.170775828562e+01 1.53183 17.3205 1.53183 17.3205 13 5 13 5 0.02 9.8162e-05\n", - "1.170770422321e+01 1.53175 17.3205 1.53175 17.3205 13 5 13 5 0.02 8.42148e-05\n", - "5.075844624794e+00 2.12303 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.766606588165e+00 2.20484 50.9713 0 0.1 14 8 15 15 0.02 3.79411e-05\n", - "4.768305081494e+00 2.18838 50.9713 0 0.1 13 8 15 15 0.02 3.79411e-05\n", - "4.458869865939e+00 2.29864 50.9713 0 12.8178 14 8 15 15 0.02 0.000150087\n", - "1.806014211040e+01 2.10446 50.9713 1.40749 12.8178 13 13 13 5 0.02 2.9863e-05\n", - "4.797342083485e+00 2.10328 50.9713 0 12.8178 13 13 15 1 0.02 4.24954e-05\n", - "1.721374713429e+01 2.21673 50.9713 1.42212 12.8178 14 14 13 5 0.02 2.41295e-05\n", - "4.055645404546e+00 2.47276 50.9713 0 25.5357 14 7 15 15 0.02 0.000150087\n", - "1.806123543037e+01 2.21893 50.9713 1.40745 12.8178 14 14 13 5 0.02 2.07011e-05\n", - "8.117519147635e+00 2.10433 50.9713 2.21473 25.5357 13 13 14 8 0.02 4.24954e-05\n", - "8.315554923168e+00 2.15343 50.9713 2.08519 25.5357 13 13 13 8 0.02 2.9863e-05\n", - "7.917420996633e+00 2.21892 50.9713 1.7431 25.5357 14 14 13 8 0.02 2.07011e-05\n", - "7.693213405973e+00 2.21805 50.9713 1.78384 25.5357 14 14 13 8 0.02 2.41295e-05\n", - "3.753837732894e+00 2.62517 50.9713 0 38.2535 14 7 15 15 0.02 0.000150087\n", - "7.087296558990e+00 2.10417 50.9713 2.40935 38.2535 13 13 14 8 0.02 4.24954e-05\n", - "7.007109286263e+00 2.15854 50.9713 2.28672 38.2535 13 13 14 8 0.02 2.9863e-05\n", - "5.653200958306e+00 2.21878 50.9713 2.0587 38.2535 14 14 13 8 0.02 2.41295e-05\n", - "5.733794947644e+00 2.21892 50.9713 1.99255 38.2535 14 14 13 8 0.02 2.07011e-05\n", - "3.513216011269e+00 2.76647 50.9713 0 50.9713 14 7 15 15 0.02 0.000150087\n", - "4.750574783854e+00 2.27442 50.9713 0 50.9713 14 8 15 15 0.02 4.24954e-05\n", - "7.278384712062e+00 1.29678 50.9713 2.09216 50.9713 13 8 13 13 0.02 2.9863e-05\n", - "4.765996194699e+00 2.20787 50.9713 2.20787 50.9713 14 8 14 8 0.02 2.07011e-05\n", - "4.765535914728e+00 2.21331 50.9713 2.21331 50.9713 14 8 14 8 0.02 2.41295e-05\n", - "3.104706358826e+00 3.17639 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.069363482023e+00 3.27572 150 0 0.1 14 7 15 15 0.02 9.32641e-06\n", - "3.047074050271e+00 3.3836 150 0 37.575 14 7 15 15 0.02 3.68933e-05\n", - "5.974759306305e+00 3.23604 150 2.53922 37.575 14 14 14 7 0.02 1.04459e-05\n", - "6.074084349384e+00 3.30145 150 2.13876 37.575 14 14 13 8 0.02 7.34071e-06\n", - "5.733865371895e+00 3.29994 150 2.00498 37.575 14 14 13 8 0.02 5.93135e-06\n", - "3.027099358410e+00 3.53631 150 0 75.05 14 7 15 15 0.02 3.68933e-05\n", - "5.807147339697e+00 3.30197 150 1.9791 37.575 14 14 13 8 0.02 5.08861e-06\n", - "4.862942347290e+00 3.25294 150 2.97823 75.05 14 14 14 7 0.02 1.04459e-05\n", - "4.556479830908e+00 3.29942 150 2.73221 75.05 14 14 14 7 0.02 7.34071e-06\n", - "3.853070305680e+00 3.29977 150 2.62486 75.05 14 14 14 7 0.02 5.93135e-06\n", - "3.881529045940e+00 3.30149 150 2.55924 75.05 14 14 14 7 0.02 5.08861e-06\n", - "3.015033359333e+00 3.64419 150 0 112.525 14 7 15 15 0.02 3.68933e-05\n", - "4.126828648362e+00 3.32047 150 0 112.525 14 14 15 3 0.02 1.04459e-05\n", - "3.990017992944e+00 3.3032 150 2.94027 112.525 14 14 14 7 0.02 7.34071e-06\n", - "3.206771867883e+00 3.07671 150 3.11282 112.525 14 14 14 7 0.02 5.93135e-06\n", - "3.006827156705e+00 3.72638 150 0 150 14 7 15 15 0.02 3.68933e-05\n", - "3.218786094847e+00 3.30337 150 3.01344 112.525 14 14 14 7 0.02 5.08861e-06\n", - "4.527722847382e+00 1.42238 150 0 150 13 5 15 15 0.02 1.04459e-05\n", - "3.069567332611e+00 3.27804 150 3.27804 150 14 7 14 7 0.02 5.93135e-06\n", - "5.726405299909e+00 1.29746 150 3.22759 150 13 8 14 14 0.02 7.34071e-06\n", - "3.069626478211e+00 3.27565 150 3.27565 150 14 7 14 7 0.02 5.08861e-06\n", + "1.219029061236e+01 1.60007 17.3205 0 2.97008 13 5 15 15 0.02 0.000498487\n", + "1.935920346899e+01 1.29448 17.3205 0 8.71025 13 13 15 2 0.02 0.000498487\n", + "2.123795595728e+01 1.30902 17.3205 1.58519 8.71025 13 13 13 5 0.02 0.000287968\n", + "3.579099761269e+01 1.52414 17.3205 1.30642 8.71025 13 13 13 5 0.02 0.000220016\n", + "1.674063083432e+01 1.29457 17.3205 0 14.4504 13 13 15 2 0.02 0.000498487\n", + "1.779197348711e+01 1.3228 17.3205 1.71196 14.4504 13 13 13 8 0.02 0.000287968\n", + "1.548740826516e+01 1.52415 17.3205 1.45407 14.4504 13 13 13 5 0.02 0.000220016\n", + "1.772169325356e+01 1.81957 73.0434 1.46573 12.2572 13 13 13 5 0.02 4.43422e-05\n", + "1.367065500196e+01 1.66003 73.0434 1.79487 12.2572 13 13 13 8 0.02 7.67586e-05\n", + "2.021960493499e+01 1.82061 73.0434 1.39205 12.2572 13 13 13 5 0.02 3.38788e-05\n", + "9.012246630357e+00 1.81529 73.0434 0 36.5717 13 8 15 15 0.02 7.67586e-05\n", + "7.462779538274e+00 1.82255 73.0434 1.81499 36.5717 13 13 13 8 0.02 3.38788e-05\n", + "1.030499912298e+01 1.80592 73.0434 1.81066 36.5717 13 13 13 8 0.02 4.43422e-05\n", + "4.227002356107e+00 2.43719 73.0434 0 60.8862 14 14 15 1 0.02 7.67586e-05\n", + "7.396288708628e+00 1.8216 73.0434 1.8216 60.8862 13 8 13 8 0.02 3.38788e-05\n", + "7.394728392218e+00 1.80919 73.0434 1.79091 60.8862 13 13 13 8 0.02 4.43422e-05\n", "\n" ] } ], "source": [ - "import os\n", - "\n", - "from binarycpython.utils.grid import Population\n", - "from binarycpython.utils.custom_logging_functions import temp_dir\n", - "\n", "def parse_function(self, output):\n", " \"\"\"\n", " Example parsing function\n", @@ -1067,10 +991,11 @@ " \n", " # grid_options\n", " amt_cores=2, # grid_options\n", + " tmp_dir=TMP_DIR,\n", "\n", " # Custom options: the data directory and the output filename\n", " data_dir=os.path.join(\n", - " temp_dir(), \"example_python_population_result\"\n", + " TMP_DIR, \"example_python_population_result\"\n", " ), # custom_options\n", " base_filename=\"example_pop.dat\", # custom_options\n", ")\n", @@ -1168,14 +1093,14 @@ "example_pop.export_all_info()\n", "\n", "# remove the result file if it exists\n", - "if os.path.isfile(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\")):\n", - " os.remove(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"))\n", + "if os.path.isfile(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\")):\n", + " os.remove(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"))\n", "\n", "# Evolve the population\n", "example_pop.evolve()\n", "\n", "# \n", - "with open(os.path.join(temp_dir(), \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", + "with open(os.path.join(TMP_DIR, \"example_python_population_result\", \"example_pop.dat\"), 'r') as f:\n", " output = f.read()\n", "print(\"\\n\")\n", "print(output)" @@ -1184,7 +1109,7 @@ ], "metadata": { "kernelspec": { - "display_name": "Python 3 (ipykernel)", + "display_name": "Python 3", "language": "python", "name": "python3" }, @@ -1198,7 +1123,7 @@ "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", - "version": "3.9.5" + "version": "3.6.4" } }, "nbformat": 4, diff --git a/examples/notebook_api_functionality.ipynb b/examples/notebook_api_functionality.ipynb index 8d454880c..020d2dc7c 100644 --- a/examples/notebook_api_functionality.ipynb +++ b/examples/notebook_api_functionality.ipynb @@ -5,7 +5,7 @@ "id": "cb9d00f5-9613-471e-a4bb-6181311bf73b", "metadata": {}, "source": [ - "# Using the API functionality of binarycpython\n", + "# Tutorial: Using the API functionality of binary_c-python\n", "This notebook shows how to use the API functions that interface with binary_c. It usually is better to use wrapper functions that internally use these API functions, because most of the output here is very raw\n", "\n", "Binarycpython uses the Python-C extension framework to interface Python with C. The sourcecode for this is contained in `src/binary_c_python.c`, and the functions are available via `from binarycpython import _binary_c_bindings`.\n", diff --git a/examples/notebook_custom_logging.ipynb b/examples/notebook_custom_logging.ipynb index 84e41e6bc..bfdf2a5c8 100644 --- a/examples/notebook_custom_logging.ipynb +++ b/examples/notebook_custom_logging.ipynb @@ -5,7 +5,7 @@ "id": "879b596b-d70c-4f90-b668-563b4ad93ffc", "metadata": {}, "source": [ - "# Using custom logging routines with binarycpython\n", + "# Tutorial: Using custom logging routines with binary_c-python\n", "In this notebook you'll learn how to use the custom logging functionality" ] }, diff --git a/examples/notebook_extra_features.ipynb b/examples/notebook_extra_features.ipynb index b1a9ddb03..076b4098e 100644 --- a/examples/notebook_extra_features.ipynb +++ b/examples/notebook_extra_features.ipynb @@ -5,7 +5,7 @@ "id": "d5c04b77-f0be-4b33-8c03-c72eb846527c", "metadata": {}, "source": [ - "# Extra features and functionality of binarycpython\n", + "# Tutorial: Extra features and functionality of binary_c-python\n", "In this notebook we'll go over some of the extra features and functionality that was not covered in the other notebooks.\n", "\n", "Within the module `binarycpython.utils.functions` there are many functions that can be useful when using binarycpython. We can see which functions are in there, again by using the `help()`" diff --git a/examples/notebook_individual_systems.ipynb b/examples/notebook_individual_systems.ipynb index 21d49016f..e6451e762 100644 --- a/examples/notebook_individual_systems.ipynb +++ b/examples/notebook_individual_systems.ipynb @@ -5,7 +5,7 @@ "id": "a544d28c-c2e1-4c6a-b55b-8caec440743f", "metadata": {}, "source": [ - "# Running individual systems with binarycpython\n", + "# Tutorial: Running individual systems with binary_c-python\n", "This notebook will show you how to run single systems and analyze their results.\n", "\n", "It can be useful to have some functions to quickly run a single system to e.g. inspect what evolutionary steps a specific system goes through, to plot the mass loss evolution of a single star, etc. " diff --git a/examples/notebook_luminosity_function_binaries.ipynb b/examples/notebook_luminosity_function_binaries.ipynb index fb64dbcc9..47a96d093 100644 --- a/examples/notebook_luminosity_function_binaries.ipynb +++ b/examples/notebook_luminosity_function_binaries.ipynb @@ -5,7 +5,7 @@ "id": "bbbaafbb-fd7d-4b73-a970-93506ba35d71", "metadata": {}, "source": [ - "# Zero-age stellar luminosity function in binaries\n", + "# Example use case: Zero-age stellar luminosity function in binaries\n", "\n", "In this notebook we compute the luminosity function of the zero-age main-sequence by running a population of binary stars using binary_c. \n", "\n", @@ -805,14 +805,6 @@ "p.set_ylabel(\"Number of stars\")\n", "p.set(yscale=\"log\")" ] - }, - { - "cell_type": "code", - "execution_count": null, - "id": "e7541ebf-fe9a-4fb0-a88e-bb318d06f9eb", - "metadata": {}, - "outputs": [], - "source": [] } ], "metadata": { diff --git a/examples/notebook_luminosity_function_single.ipynb b/examples/notebook_luminosity_function_single.ipynb index fb971b34a..5980adf6d 100644 --- a/examples/notebook_luminosity_function_single.ipynb +++ b/examples/notebook_luminosity_function_single.ipynb @@ -430,14 +430,6 @@ "Does this look like a reasonable stellar luminosity function to you? The implication is that the most likely stellar luminosity is 10<sup>5.8</sup> L<sub>☉</sub>! Clearly, this is not very realistic... let's see what went wrong." ] }, - { - "cell_type": "markdown", - "id": "44586e42-b7cb-4a55-be0a-330b98b20de4", - "metadata": {}, - "source": [ - "## " - ] - }, { "cell_type": "markdown", "id": "e32c3bbf-390f-45da-ad9c-cc3e7c9449dc", @@ -554,9 +546,11 @@ { "cell_type": "markdown", "id": "673031c9-7d80-45d4-b209-301c127d3edf", - "metadata": {}, + "metadata": { + "tags": [] + }, "source": [ - "# A better-sampled grid\n", + "## A better-sampled grid\n", "\n", "The IMF has many more low-mass stars than high-mass stars. So, instead of sampling M1 linearly, we can sample it in log space. \n", "\n", diff --git a/examples/notebook_population.ipynb b/examples/notebook_population.ipynb index f6f27ee43..fff337533 100644 --- a/examples/notebook_population.ipynb +++ b/examples/notebook_population.ipynb @@ -7,7 +7,7 @@ "tags": [] }, "source": [ - "# Running populations with binarycpython\n", + "# Tutorial: Running populations with binary_c-python\n", "This notebook will show you how to evolve a population of stars\n", "\n", "Much of the code in the binarycpython package is written to evolve a population of stars through the Population object, rather than running a single system. Let's go through the functionality of this object step by step and set up some example populations. \n", -- GitLab