Skip to content

Commit 9300bde

Browse files
authored
Merge pull request #56 from synthpop-galaxy/dev
Debug lost_mass_option=3 star generation
2 parents 2258ce1 + 8bd97a5 commit 9300bde

File tree

2 files changed

+29
-17
lines changed

2 files changed

+29
-17
lines changed

synthpop/population.py

Lines changed: 23 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -733,7 +733,7 @@ def generate_field(self) -> Tuple[pandas.DataFrame, Dict]:
733733
n_star_expected, mass_per_slice = self.get_n_star_expected(
734734
radii, average_imass_per_star, av_mass_corr)
735735

736-
if self.lost_mass_option == 3:
736+
if (self.lost_mass_option == 3) and (self.population_density.density_unit != 'number') and (sum(n_star_expected)>0):
737737
if np.sum(n_star_expected) < self.N_av_mass:
738738
n_star_expected *= self.N_av_mass / np.sum(n_star_expected)
739739

@@ -815,23 +815,23 @@ def generate_field(self) -> Tuple[pandas.DataFrame, Dict]:
815815
use_pbar = np.sum(total_stars)>self.glbl_params.chunk_size
816816
if use_pbar:
817817
pbar = tqdm(total=sum(missing_stars))
818+
neg_missing_stars = np.minimum(missing_stars,0)
819+
gen_missing_stars = np.maximum(missing_stars,0)
818820
while any(missing_stars > 0):
819-
neg_missing_stars = np.minimum(missing_stars,0)
820-
missing_stars = np.maximum(missing_stars,0)
821-
if (sum(missing_stars)>self.glbl_params.chunk_size) and not (self.generator.generator_name=='SpiseaGenerator'):
821+
if (sum(gen_missing_stars)>self.glbl_params.chunk_size) and not (self.generator.generator_name=='SpiseaGenerator'):
822822
final_expected_loop=False
823-
idx_cs = np.searchsorted(np.cumsum(missing_stars), self.glbl_params.chunk_size)
824-
rem_chunk = self.glbl_params.chunk_size - (np.cumsum(missing_stars)[idx_cs-1])*(idx_cs>0)
825-
missing_stars_chunk = missing_stars * (np.cumsum(missing_stars)<self.glbl_params.chunk_size)
826-
missing_stars_chunk[idx_cs] = rem_chunk
823+
idx_cs = np.searchsorted(np.cumsum(gen_missing_stars), self.glbl_params.chunk_size)
824+
rem_chunk = self.glbl_params.chunk_size - (np.cumsum(gen_missing_stars)[idx_cs-1])*(idx_cs>0)
825+
gen_stars_chunk = gen_missing_stars * (np.cumsum(gen_missing_stars)<self.glbl_params.chunk_size)
826+
gen_stars_chunk[idx_cs] = rem_chunk
827827
else:
828828
final_expected_loop=True
829-
missing_stars_chunk = np.copy(missing_stars)
829+
gen_stars_chunk = np.copy(gen_missing_stars)
830830

831831
position, r_inner, proper_motions, velocities, vr_lsr, \
832832
(m_initial, age, met, ref_mag, s_props, final_phase_flag,
833833
inside_grid, not_evolved) = self.generator.generate_stars(radii,
834-
missing_stars_chunk, mass_limit, self.do_kinematics, props_list)
834+
gen_stars_chunk, mass_limit, self.do_kinematics, props_list)
835835

836836
initial_parameters = np.column_stack([m_initial, age, met])
837837

@@ -850,13 +850,15 @@ def generate_field(self) -> Tuple[pandas.DataFrame, Dict]:
850850
all_m_evolved += list(m_evolved)
851851
all_r_inner += list(r_inner)
852852
if final_expected_loop:
853-
missing_stars_evol = self.check_field(
853+
missing_stars = self.check_field(
854854
radii, average_imass_per_star, np.array(all_m_initial), np.array(all_m_evolved), np.array(all_r_inner),
855855
mass_per_slice, frac_lowmass)
856-
missing_stars += missing_stars_evol
857856
opt3_mass_loss_done=True
857+
else:
858+
missing_stars -= gen_stars_chunk
858859
# Subtract out this chunk from the "missing stars"
859-
missing_stars -= missing_stars_chunk
860+
else:
861+
missing_stars -= gen_stars_chunk
860862

861863
# Convert Table to pd.DataFrame
862864
df = self.convert_to_dataframe(
@@ -871,7 +873,10 @@ def generate_field(self) -> Tuple[pandas.DataFrame, Dict]:
871873
df_list.append(df)
872874
loop_counts += 1
873875
if use_pbar:
874-
pbar.update(np.sum(missing_stars_chunk))
876+
pbar.update(np.sum(gen_stars_chunk))
877+
878+
neg_missing_stars = np.minimum(missing_stars,0)
879+
gen_missing_stars = np.maximum(missing_stars,0)
875880

876881
# combine the results from the different loops
877882
if len(df_list) == 0:
@@ -985,12 +990,12 @@ def check_field(
985990
number of missing stars in each slice
986991
"""
987992
# estimate current initial mass
988-
m_in = np.array([np.sum(m_initial[radii_star == r]) for r in radii[:-1]])
993+
#m_in = np.array([np.sum(m_initial[radii_star == r]) for r in radii[:-1]])
989994
# estimate current evolved mass
990-
m_evo = np.array([np.sum(m_evolved[radii_star == r]) for r in radii[:-1]])
995+
#m_evo = np.array([np.sum(m_evolved[radii_star == r]) for r in radii[:-1]])
991996

992997
if self.population_density.density_unit in ['number', 'init_mass']:
993-
return np.zeros(len(mass_per_slice))
998+
return np.zeros(len(mass_per_slice), dtype=int)
994999

9951000
# option 3.
9961001
# if the sample is large enough otherwise determine the average mass before.
@@ -1007,6 +1012,7 @@ def check_field(
10071012
# reduce number of stars by the scale factor
10081013
exist = np.array([np.sum(radii_star == r) for r in radii[:-1]])
10091014
missing_stars = total_stars - exist
1015+
#pdb.set_trace()
10101016
return missing_stars
10111017

10121018
def do_kinematics(

synthpop/synthpop_utils/synthpop_control.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,12 @@ def __init__(
122122
if not self.random_seed:
123123
self.random_seed = np.random.randint(0, 2 ** 31 - 1)
124124

125+
if len(self.chosen_bands) < len(self.eff_wavelengths):
126+
tmp_eff_wavelengths = {}
127+
for band in self.chosen_bands:
128+
tmp_eff_wavelengths[band] = self.eff_wavelengths[band]
129+
self.eff_wavelengths = tmp_eff_wavelengths
130+
125131
# log settings to file
126132
self.log_settings()
127133

0 commit comments

Comments
 (0)