Skip to content

Commit 6fb7bec

Browse files
author
jngaravitoc
committed
update in basis utils
1 parent 890f8e6 commit 6fb7bec

File tree

2 files changed

+31
-24
lines changed

2 files changed

+31
-24
lines changed

EXPtools/basis_builder/basis_utils.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -269,8 +269,7 @@ def make_basis(R, D, Mtotal, basis_params, modelname="test_model.txt"):
269269
"""
270270
R, D, M, P = make_model(
271271
D, R, Mtotal=Mtotal,
272-
output_filename=modelname,
273-
pfile=modelname
272+
output_filename=modelname
274273
)
275274

276275
config = make_config(

EXPtools/basis_builder/makemodel.py

Lines changed: 30 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ def write_table(tablename, radius, density, mass, potential, fmt="%.6e"):
3333
header = f"! {tablename}\n! R D M P\n{len(radius)}"
3434
np.savetxt(tablename, data, fmt=fmt, header=header, comments="")
3535

36-
def makemodel(radius, density, Mtotal, output_filename='', physical_units=False, verbose=True):
36+
def make_model(radius, density, Mtotal, output_filename='', physical_units=False, verbose=True):
3737
"""
3838
Generate an EXP-compatible spherical basis function table.
3939
@@ -47,33 +47,39 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
4747
Total mass of the model, used for normalization.
4848
output_filename : str, optional
4949
Name of the output file to save the table. If empty, no file is written.
50+
physical_units : bool, optional
51+
If True, disables scaling and returns physical values (default: False).
5052
verbose : bool, optional
5153
If True, prints scaling information.
5254
5355
Returns
5456
-------
55-
radius_scaled : ndarray
56-
Scaled radius values.
57-
density_scaled : ndarray
58-
Scaled density values.
59-
mass_scaled : ndarray
60-
Scaled enclosed mass values.
61-
potential_scaled : ndarray
62-
Scaled potential values.
57+
result : dict
58+
Dictionary with the following keys:
59+
- 'radius' : ndarray
60+
Scaled radius values.
61+
- 'density' : ndarray
62+
Scaled density values.
63+
- 'mass' : ndarray
64+
Scaled enclosed mass values.
65+
- 'potential' : ndarray
66+
Scaled potential values.
6367
"""
68+
EPS_MASS = 1e-15
69+
EPS_R = 1e-10
70+
6471
Rmax = np.nanmax(radius)
65-
72+
6673
mass = np.zeros_like(density)
6774
pwvals = np.zeros_like(density)
6875

6976
mass[0] = 1.e-15
7077
pwvals[0] = 0.
7178

72-
#dr = radius[indx] - radius[indx - 1]
73-
dr = np.diff(radius) # differences between consecutive radii
79+
dr = np.diff(radius)
7480

75-
# Midpoint mass contribution terms
76-
mass_contrib = 2.0 * np.pi * (
81+
# Midpoint integration for enclosed mass and potential
82+
mass_contrib = 2.0 * np.pi * (
7783
radius[:-1]**2 * density[:-1] + radius[1:]**2 * density[1:]
7884
) * dr
7985

@@ -82,10 +88,10 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
8288
) * dr
8389

8490
# Now cumulative sum to get the arrays
85-
mass = np.concatenate(([1e-15], 1e-15 + np.cumsum(mass_contrib)))
91+
mass = np.concatenate(([EPS_MASS], EPS_MASS + np.cumsum(mass_contrib)))
8692
pwvals = np.concatenate(([0.0], np.cumsum(pwvals_contrib)))
8793

88-
potential = -mass / (radius + 1.e-10) - (pwvals[-1] - pwvals)
94+
potential = -mass / (radius + EPS_R) - (pwvals[-1] - pwvals)
8995

9096
M0 = mass[-1]
9197
R0 = radius[-1]
@@ -101,11 +107,8 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
101107
mfac = Beta**0.75 * Gamma**-0.5
102108
pfac = Beta
103109

104-
if physical_units == True:
105-
rfac=1
106-
dfac=1
107-
mfac=1
108-
pfac=1
110+
if physical_units:
111+
rfac = dfac = mfac = pfac = 1.0
109112

110113
if verbose:
111114
print(f"Scaling factors: rfac = {rfac}, dfac = {dfac}, mfac = {mfac}, pfac = {pfac}")
@@ -119,5 +122,10 @@ def makemodel(radius, density, Mtotal, output_filename='', physical_units=False,
119122
potential * pfac
120123
)
121124

122-
return radius * rfac, density * dfac, mass * mfac, potential * pfac
125+
return return {
126+
"radius": radius * rfac,
127+
"density": density * dfac,
128+
"mass": mass * mfac,
129+
"potential": potential * pfac,
130+
}
123131

0 commit comments

Comments
 (0)