From c161c780fa410f61a517e3b888e19c50289227dd Mon Sep 17 00:00:00 2001 From: David Hendriks <davidhendriks93@gmail.com> Date: Mon, 13 Jan 2020 22:21:35 +0000 Subject: [PATCH] added scripts for population --- binarycpython/utils/NULL | Bin 0 -> 1186600 bytes binarycpython/utils/grid.py | 216 ++++++++++++++++++- binarycpython/utils/grid_options_defaults.py | 3 + 3 files changed, 208 insertions(+), 11 deletions(-) create mode 100644 binarycpython/utils/NULL create mode 100644 binarycpython/utils/grid_options_defaults.py diff --git a/binarycpython/utils/NULL b/binarycpython/utils/NULL new file mode 100644 index 0000000000000000000000000000000000000000..a087085a1d94db519d7f5e429e17cce682acc6b8 GIT binary patch literal 1186600 zcmeI*3Am1B-T?4JDMDmRMnjf{%0W^Q?gvG?7Fvync10y5B2j8ApGKA<3el7$(->Jg zWGPEU653EBD$9{Is`H)Yea^`#>ig!aYrdJ^b6uVPdoR!bx$obz9Ovr3o;OcYQc_y_ zcHdp?Zo2ulyKZWiUbYb+K!5-N0t5&UAV7cs0RsP?0;ea}Og{79b82QqfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 z2oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N z0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+ z009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBly zK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF z5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk z1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs z0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZ zfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&U zAV7cs0RjXF5FkK+009C72oNAZfB*pk1PBlyK!5-N0t5&UAV7cs0RjXF5FkK+009C7 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 KO3ZdkeE4sbvRCT> literal 0 HcmV?d00001 diff --git a/binarycpython/utils/grid.py b/binarycpython/utils/grid.py index bf2ecd3f3..caf425b34 100644 --- a/binarycpython/utils/grid.py +++ b/binarycpython/utils/grid.py @@ -1,9 +1,31 @@ +import os +import copy +import json + import binary_c_python_api from binarycpython.utils.functions import get_defaults import binarycpython +from grid_options_defaults import grid_options_defaults_dict + + + +# TODO: add functionality to 'on-init' set arguments +# TODO: add functionality to export the arg string. +# TODO: add functionality to export all the options +# TODO: add functionality to create the dict that goes into the arg line. +# TODO: add functionality to return the initial_abundance_hash +# TODO: add functionality to return the isotope_hash +# TODO: add functionality to return the isotope_list +# TODO: add functionality to return the nuclear_mass_hash +# TODO: add functionality to return the nuclear_mass_list +# TODO: add functionality to return the source_list +# TODO: add functionality to return the ensemble_list +# TODO: add functionality to return the evcode_version_string +# TODO: add functionality to return the evcode_args_list + class Population(object): def __init__(self): @@ -12,28 +34,200 @@ class Population(object): """ self.defaults = get_defaults() - pass + + # Different sections of options + self.bse_options = self.defaults.copy() + self.grid_options = grid_options_defaults_dict.copy() + self.custom_options = {} + + # Argline dict + self.argline_dict = {} + + def return_options(self): + """ + Function that returns all the options that have been set. + + Can be combined with json to make a nice file. + """ + + options = { + 'bse_options': self.bse_options, + 'grid_options': self.grid_options, + 'custom_options': self.custom_options, + } + + return options + + + def create_argline_dict(self, print_excluded=False): + """ + Function to prepare the dictionary of options that go into the argument line for the binary_c call. + + This function + """ + + self.argline_dict = {} + + # Lists to store indices of parameters that have been included and excluded. + included, excluded = [], [] + + # Go over the parameters. + for i, param_name in enumerate(sorted(self.bse_options)): + # We need to filter out some parameters: + # Filter out those that have an literal empty value. The argument parser of binary_c doesnt work properly with that. + # Filter out those that have value Function. adding these to the argument will execute the function instead of evolving the system + # Filter out those that have value NULL. In general these only come from the defaults of binary_c itself. + # What I do here is comparing whether the value of the bse_option is NULL currently AND as a default. In that way one could set some other part to NULL (don't know what situation that would be tho..) + + + if (not ((self.bse_options[param_name] == 'NULL') and (self.bse_options[param_name] == self.defaults[param_name]))) \ + and (not self.bse_options[param_name] == "") and (not self.bse_options[param_name] == "Function"): + self.argline_dict[param_name] = self.bse_options[param_name] + # print("{} {} ".format(param_name, self.bse_options[param_name])) + included.append(i) + else: + # print("{} {} ".format(param_name, repr(self.bse_options[param_name]))) + excluded.append(i) + + common = set(included).intersection(excluded) + combined = set(included).union(excluded) + + if print_excluded: + print("Total parameters included in the argument: {}. Total excluded: {}. ".format(len(included), len(excluded))) + print([sorted(self.bse_options)[i] for i in excluded]) + + + def create_argline(self, option_dict): + """ + Function to create the string for the arg line + """ + + argline = "binary_c " + for param_name in sorted(option_dict): + argline += "{} {} ".format(param_name, self.argline_dict[param_name]) + argline = argline.strip() + return argline + + def return_argline(self, print_excluded=False): + """ + Function to return the argline that is used in the binary_c api call: + be aware that some of the parameters vary: M1 M2 period etc because these are set by distributions. + + """ + + self.create_argline_dict(print_excluded) + + argline = "binary_c " + for param_name in sorted(self.argline_dict.keys()): + argline += "{} {} ".format(param_name, self.argline_dict[param_name]) + + argline = argline.strip() + return argline + + def set(self, **kwargs): + """ + Function to set the values of the population + + The input (as kwargs) is checked compared to the available bse_options and grid options. + if the parameter name is not included in either of those, then it will be stored in an custom_options dict. + """ + + for key in kwargs.keys(): + # Filter out keys for the bse_options + if key in self.bse_options.keys(): + self.bse_options[key] = kwargs[key] + # Filter out keys for the grid_options + elif key in self.grid_options.keys(): + self.grid_options[key] = kwargs[key] + # The of the keys go into a custom_options dict + else: + self.custom_options[key] = kwargs[key] def evolve(self): pass + + def evolve_single(self): - arg_string = "binary_c " - for param in self.defaults.keys(): - print(param, self.defaults[param]) - if self.defaults[param] == "": - print(self.defaults[param]) + """ + Function to run a single system + """ + + self.create_argline_dict() - # arg_string += "{} {} ".format(param, self.defaults[param]) + argline = self.create_argline(self.argline_dict) - # arg_string = arg_string.strip() - out = binary_c_python_api.run_binary(arg_string) + out = binary_c_python_api.run_binary(argline) + # out = binary_c_python_api.run_binary('binary_c M_1 15 M_2 14 separation 0 orbital_period 4530 eccentricity 0 metallicity 0.02 max_evolution_time 15000') print(out) - # print( arg_string) + def return_binary_c_version_info(self): + """ + Function that returns the version information of binary_c + """ + + out = binary_c_python_api.run_binary('binary_c version') + return out + + def test_evolve_single(self): + m1 = 15.0 # Msun + m2 = 14.0 # Msun + separation = 0 # 0 = ignored, use period + orbital_period = 4530.0 # days + eccentricity = 0.0 + metallicity = 0.02 + max_evolution_time = 15000 + argstring = "binary_c M_1 {0:g} M_2 {1:g} separation {2:g} orbital_period {3:g} eccentricity {4:g} metallicity {5:g} max_evolution_time {6:g} ".format( + m1, + m2, + separation, + orbital_period, + eccentricity, + metallicity, + max_evolution_time, + ) + + output = binary_c_python_api.run_binary(argstring) + + print("\n\nBinary_c output:") + print(output) + + + + + +################################################################################################ test_pop = Population() -# print(test_pop.defaults) +# Setting values +# print(test_pop.bse_options['M_1']) +# print(test_pop.bse_options['M_2']) +# test_pop.set(M_1=10, M_2=500) +# print(test_pop.bse_options['M_1']) +# print(test_pop.bse_options['M_2']) +test_pop.set(M_1=10, separation=0, orbital_period=4580, max_evolution_time=15000, eccentricity=0.02, ) + + +# Testing single evolution test_pop.evolve_single() +# test_pop.test_evolve_single() + +## Setting custom value +# test_pop.set(data_dir=os.path.join(os.environ['BINARYC_DATA_ROOT'], 'development_example')) +# print(test_pop.custom_options['data_dir']) + +# printing all options +# print(json.dumps(test_pop.return_options(), indent=4)) + +# return arglines: +# test_pop.set(M_1=10, M_2=500) +print(test_pop.return_argline()) +# test_pop.return_argline(print_excluded=True) + +#print(test_pop.bse_options) + +# return version info +a = str(test_pop.return_binary_c_version_info()) +print(a) \ No newline at end of file diff --git a/binarycpython/utils/grid_options_defaults.py b/binarycpython/utils/grid_options_defaults.py new file mode 100644 index 000000000..a426a8814 --- /dev/null +++ b/binarycpython/utils/grid_options_defaults.py @@ -0,0 +1,3 @@ +grid_options_defaults_dict = { + 'custom_logging_function': None, +} \ No newline at end of file -- GitLab