@@ -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 (
0 commit comments