PARSEC

Here we describe the interface we provide to the PARSEC v1.2S library of stellar evolutionary tracks. PARSEC specific code is housed in the PARSEC submodule, which can be accessed as

using StellarTracks.PARSEC # load all exported methods
using StellarTracks.PARSEC: PARSECLibrary, X, Y, Z # load specific methods

The main paper describing the PARSEC family of stellar models is Bressan et al. [2], but the library of stellar models has been expanded over the years to add and improve coverage of various parameter spaces. A non-exhaustive list of papers presenting the PARSEC models up to V1.2S is provided below.

  • Bressan et al. [2] is the first paper presenting the PARSEC models.
  • Chen et al. [3] presented an improved calibration for low-mass stars.
  • Tang et al. [4] and Chen et al. [5] presented new models of high-mass stars from 14 to 350 M⊙ with metallicities from $0.001 \le Z \le 0.004$.
  • Rosenfield et al. [6] formulated equivalent evolutionary points (EEPs) for the PARSEC models to support use in isochrone interpolation routines. Our implementation uses their data products.
  • Marigo et al. [7] augmented the PARSEC models with COLIBRI models of the thermally pulsating asymptotic giant branch phase (TP-AGB).
  • Pastorelli et al. [8] and Pastorelli et al. [9] compared the COLIBRI TP-AGB models to observations of the SMC and LMC, respectively.

The full list of relevant papers maintained by the group is available here.

As we use the PARSEC V1.2S tracks augmented with EEP points by Rosenfield et al. [6], we do not currently support the more recent PARSEC V2.0 tracks [10, 11]. We hope to add V2.0 in the future, but doing so would require new measurements of the EEP points which we do not presently support.

Data Acquisition

This package handles downloading and pre-processing of the EEP tracks produced by Rosenfield et al. [6] (available here) using DataDeps.jl. The main access point we provide is PARSECLibrary, which will load and make available the full library of stellar tracks. The first time you call this method, you will be prompted to download the required data files. The total data volume is ~150 MB after processing. Information on customizing the install location is available here. The data can be uninstalled by running using DataDeps; rm(datadep"PARSECv1.2S"; recursive=true). With all the tracks available, we are able to perform operations like interpolating isochrones at any age and metallicity within the PARSEC parameter space.

Examples

First we load the full PARSEC library, which is downloaded via DataDeps.jl if not already available.

using StellarTracks.PARSEC
p = PARSECLibrary()
Structure of interpolants for PARSEC v1.2S library of stellar tracks. Valid range of metal mass fraction Z is (0.0001, 0.06).

Now we use the PARSEC.PARSECLibrary to interpolate an isochrone at log10(age [yr]) = 10.05 and logarithmic metallicity [M/H]=-1.234. The isochrone is returned as a NamedTuple.

iso = isochrone(p, 10.05, -1.234)
(eep = [381, 382, 383, 384, 385, 386, 387, 392, 393, 394  …  1691, 1692, 1693, 1694, 1695, 1696, 1697, 1698, 1699, 1700], m_ini = [0.10004109175009526, 0.10018317048656962, 0.10229603136895164, 0.11123335464782205, 0.1406655533342979, 0.2564476625004588, 0.3072730072630701, 0.5977875481135353, 0.6024818929758726, 0.6086099410227178  …  0.8369731881642585, 0.8369739221193139, 0.8369746082569821, 0.8369752799294172, 0.8369759544260914, 0.836976636937292, 0.8369773510751544, 0.836978122380365, 0.8369790305425624, 0.8369799384214267], logTe = [3.4965172513771474, 3.4967947399280925, 3.5010000534948347, 3.5170954781622368, 3.545478431806391, 3.5811074269450676, 3.5892837070752814, 3.7166396290775183, 3.7181552050900026, 3.720920274548725  …  3.626481920393734, 3.625984860323253, 3.6228118656378983, 3.6194759900873623, 3.6160122313702314, 3.6125470501180748, 3.6089734979088215, 3.605268072112549, 3.599326211717169, 3.5990094722279027], Mbol = [12.138598775984267, 12.13261431546255, 12.045459610429555, 11.706126597769895, 10.96210345744806, 9.540626016121337, 9.149921446153883, 6.4506652931534765, 6.411149966738086, 6.355795280900344  …  -2.8071661017470335, -2.8218992174518065, -2.910280083120394, -3.0020085804603394, -3.0960402916765943, -3.1910577610395343, -3.28803291006355, -3.387926207092692, -3.5348270181139467, -3.562182814968126], logg = [5.317683728515031, 5.317002989851364, 5.307857156587842, 5.272511328898, 5.191570520598368, 5.02138948148977, 4.978730478251349, 4.692643488243124, 4.688074799507104, 4.68313411104865  …  0.7843121219035507, 0.7769043156699552, 0.7288498869481765, 0.6787206080683542, 0.6272175867450639, 0.5753358540973302, 0.522177258284205, 0.46740171511383466, 0.3789656684689765, 0.37251848317513636], C_O = [0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0  …  0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0, 0.0])

The NamedTuple returned by isochrone can be converted to table types, like TypedTables.Table to simplify further use.

using TypedTables: Table
Table(iso)
Table with 6 columns and 1316 rows:
      eep  m_ini     logTe    Mbol     logg     C_O
    ┌──────────────────────────────────────────────
 1  │ 381  0.100041  3.49652  12.1386  5.31768  0.0
 2  │ 382  0.100183  3.49679  12.1326  5.317    0.0
 3  │ 383  0.102296  3.501    12.0455  5.30786  0.0
 4  │ 384  0.111233  3.5171   11.7061  5.27251  0.0
 5  │ 385  0.140666  3.54548  10.9621  5.19157  0.0
 6  │ 386  0.256448  3.58111  9.54063  5.02139  0.0
 7  │ 387  0.307273  3.58928  9.14992  4.97873  0.0
 8  │ 392  0.597788  3.71664  6.45067  4.69264  0.0
 9  │ 393  0.602482  3.71816  6.41115  4.68807  0.0
 10 │ 394  0.60861   3.72092  6.3558   4.68313  0.0
 11 │ 395  0.624854  3.72898  6.19115  4.66349  0.0
 12 │ 396  0.629747  3.73171  6.14125  4.65797  0.0
 13 │ 397  0.645398  3.74016  5.98726  4.6412   0.0
 14 │ 398  0.655613  3.74542  5.88852  4.62988  0.0
 15 │ 399  0.663761  3.74952  5.81043  4.62055  0.0
 16 │ 400  0.670227  3.75246  5.7484   4.61247  0.0
 17 │ 401  0.670106  3.75295  5.74383  4.61165  0.0
 ⋮  │  ⋮      ⋮         ⋮        ⋮        ⋮      ⋮

The theoretical isochrone is plotted below.

Example block output

We can load a grid of bolometric corrections from BolometricCorrections.jl to add observational magnitudes to the theoretical isochrone. In this example, we use the MIST bolometric correction grid, which offers bolometric corrections for varying metallicities ([M/H]) and reddening values ($A_V$).

Because the solar metallicity calibrations of PARSEC and MIST are not exactly the same, the protostellar metal mass fraction $Z$ that corresponds to a given [M/H] is not the same between the two libraries. The isochrone interface will convert the given [M/H], which is assumed to be the desired metallicity in the stellar track library, to its corresponding metal mass fraction, and then convert from the metal mass fraction to the correct [M/H] for the assumed chemical model of the bolometric correction grid.

This method returns a TypedTables.Table that contains the information from both sources. Here we evaluate an isochrone with log10(age [yr]) = 10.05, [M/H]=-1.234, and $A_v=0.02$ mag.

using BolometricCorrections.MIST: MISTBCGrid
m = MISTBCGrid("JWST")
iso = isochrone(p, m, 10.05, -1.234, 0.02)
Table with 35 columns and 1316 rows:
      eep  m_ini     logTe    Mbol     logg     C_O  F070W    F090W    ⋯
    ┌───────────────────────────────────────────────────────────────────
 1  │ 381  0.100041  3.49652  12.1386  5.31768  0.0  12.4714  11.2027  ⋯
 2  │ 382  0.100183  3.49679  12.1326  5.317    0.0  12.4637  11.1975  ⋯
 3  │ 383  0.102296  3.501    12.0455  5.30786  0.0  12.3512  11.1221  ⋯
 4  │ 384  0.111233  3.5171   11.7061  5.27251  0.0  11.9118  10.8027  ⋯
 5  │ 385  0.140666  3.54548  10.9621  5.19157  0.0  10.9843  10.0788  ⋯
 6  │ 386  0.256448  3.58111  9.54063  5.02139  0.0  9.39056  8.64289  ⋯
 7  │ 387  0.307273  3.58928  9.14992  4.97873  0.0  8.97015  8.24974  ⋯
 8  │ 392  0.597788  3.71664  6.45067  4.69264  0.0  6.05618  5.6659   ⋯
 9  │ 393  0.602482  3.71816  6.41115  4.68807  0.0  6.01647  5.62914  ⋯
 10 │ 394  0.60861   3.72092  6.3558   4.68313  0.0  5.96126  5.57918  ⋯
 11 │ 395  0.624854  3.72898  6.19115  4.66349  0.0  5.80163  5.43377  ⋯
 12 │ 396  0.629747  3.73171  6.14125  4.65797  0.0  5.75342  5.39043  ⋯
 13 │ 397  0.645398  3.74016  5.98726  4.6412   0.0  5.60472  5.25704  ⋯
 14 │ 398  0.655613  3.74542  5.88852  4.62988  0.0  5.51247  5.17355  ⋯
 15 │ 399  0.663761  3.74952  5.81043  4.62055  0.0  5.4396   5.10759  ⋯
 16 │ 400  0.670227  3.75246  5.7484   4.61247  0.0  5.38136  5.05431  ⋯
 17 │ 401  0.670106  3.75295  5.74383  4.61165  0.0  5.37742  5.05121  ⋯
 ⋮  │  ⋮      ⋮         ⋮        ⋮        ⋮      ⋮      ⋮        ⋮     ⋱

All available columns in the isochrone can be obtained with TypedTables.columnnames.

using TypedTables: columnnames
columnnames(iso)
(:eep, :m_ini, :logTe, :Mbol, :logg, :C_O, :F070W, :F090W, :F115W, :F140M, :F150W2, :F150W, :F162M, :F164N, :F182M, :F187N, :F200W, :F210M, :F212N, :F250M, :F277W, :F300M, :F322W2, :F323N, :F335M, :F356W, :F360M, :F405N, :F410M, :F430M, :F444W, :F460M, :F466N, :F470N, :F480M)

A color-magnitude diagram constructed from the isochrone is plotted below.

Example block output

Chemistry API

We provide the StellarTracks.PARSEC.PARSECChemistry type that follows the chemistry API defined in BolometricCorrections.jl to access information on the chemical mixture assumed for the PARSEC models.

StellarTracks.PARSEC.PARSECChemistryType
PARSECChemistry()

Returns a singleton struct representing the PARSEC chemical mixture model. We presently only include scaled-solar models. The solar protostellar chemical mixture for PARSEC was calibrated to reproduce solar photospheric observations via a forward modeling approach (see section 3 of Bressan et al. [2]). The full solar calibration assumed for PARSEC is given in Table 3 of Bressan et al. [2]. The distribution of heavy metals is taken from Grevesse and Sauval [12] and Caffau et al. [13] (see section 4 of Bressan et al. [2]).

julia> using StellarTracks.PARSEC: PARSECChemistry, X, Y, Z, X_phot, Y_phot, Z_phot, MH;

julia> chem = PARSECChemistry();

julia> X(chem) + Y(chem) + Z(chem) ≈ 1 # solar protostellar values
true

julia> X_phot(chem) + Y_phot(chem) + Z_phot(chem) ≈ 1 # solar photospheric values
true

julia> MH(chem, Z(chem) * 0.1) ≈ -0.9400696788068212
true

julia> Z(chem, -0.9400696788068212) ≈ Z(chem) * 0.1
true
source

Note that in our conversions between $Z$ and [M/H], remembering that MH = log10(Z/X) - log10(Z⊙/X⊙), we use the photospheric solar values for Z⊙ and X⊙ (these are Z_⊙ and X_⊙ = 1 - Z_⊙ - Y_⊙ in Table 3 of Bressan et al. [2]). This reproduces the relation between Z and [M/H] defined in Table 4 of Bressan et al. [2], which is also used in the "CMD" webform provided by the PARSEC team.

Library API

StellarTracks.PARSEC.PARSECLibraryType
PARSECLibrary()

PARSECLibrary implements the AbstractTrackLibrary interface for the PARSEC stellar evolution library. If you construct an instance as p = PARSECLibrary(), it is callable as p(mh::Number, M::Number) which returns an InterpolatedTrack that interpolates between tracks to a specific metallicity ([M/H]) and initial stellar mass (M).

This type also supports isochrone construction (see isochrone).

Examples

julia> p = PARSECLibrary()
Structure of interpolants for PARSEC v1.2S library of stellar tracks. Valid range of metal mass fraction Z is (0.0001, 0.06).

julia> isochrone(p, 10.05, -0.76) isa NamedTuple
true

julia> p(-2.05, 1.05)
InterpolatedTrack with M_ini=1.05, MH=-2.05, Z=0.00013856708164357998, Y=0.24874664940532557, X=0.7511147835130308.
source
StellarTracks.isochroneMethod
isochrone(p::PARSECLibrary, logAge::Number, mh::Number)

Interpolates properties of the stellar tracks in the library at the requested logarithmic age (logAge = log10(age [yr])) and logarithmic metallicity mh. Returns a NamedTuple containing the properties listed below:

  • eep: Equivalent evolutionary points
  • m_ini: Initial stellar masses, in units of solar masses.
  • logTe: Base-10 logarithm of the effective temperature [K] of the stellar model.
  • Mbol: Bolometric luminosity of the stellar model.
  • logg: Surface gravity of the stellar model calculated as -10.616 + log10(mass) + 4 * logTe - (4.77 - Mbol) / 2.5.
  • C_O: Photospheric C/O ratio (the ZAMS value is used before the TP-AGB).
source

The full library is principally a set of PARSECTrackSets, with one track set per unique chemical composition. All PARSEC models have scaled-solar chemical compositions, so they vary only in total metallicity (i.e., $Z$).

Track Set API

StellarTracks.PARSEC.PARSECTrackSetType
PARSECTrackSet(zval::Number)

PARSECTrackSet implements the AbstractTrackSet interface for the PARSEC stellar evolution library.

julia> ts = StellarTracks.PARSEC.PARSECTrackSet(0.0001)
TrackSet with Y=0.248678, Z=0.0001, 1930 EEPs and 104 initial stellar mass points.

julia> ts(1.01) # Interpolate track at new initial mass
PARSECTrack with M_ini=1.01, MH=-2.191722058538173, Z=0.0001, Y=0.248678, X=0.7512220000000001.

julia> isochrone(ts, 10.0) isa NamedTuple # Interpolate isochrone at `log10(age [yr]) = 10`
true
source

Individual Tracks API

StellarTracks.PARSEC.PARSECTrackType
PARSECTrack(zval::Number, mass::Number)

PARSECTrack implements the AbstractTrack interface for the PARSEC stellar evolution library.

Note that due to the organization of the PARSEC data files, this method requires constructing a PARSECTrackSet and is therefore not efficient if your aim is to construct multiple tracks of the same metallicity zval. In this case, you should construct a PARSECTrackSet and call it with the masses you want, e.g., ts = PARSECTrackSet(0.0001); ts.([0.12, 0.15]).

julia> track = StellarTracks.PARSEC.PARSECTrack(0.0001, 0.15)
PARSECTrack with M_ini=0.15, MH=-2.191722058538173, Z=0.0001, Y=0.248678, X=0.7512220000000001.

julia> track(7.0) # interpolate track at log10(age [yr]) = 7
(logTe = 3.6015066653099757, Mbol = 8.518315848633081, logg = 4.464972304683626, C_O = 0.0)
source

PARSEC References

This page cites the following references:

[2]
A. Bressan, P. Marigo, L. Girardi, B. Salasnich, C. Dal Cero, S. Rubele and A. Nanni. PARSEC : stellar tracks and isochrones with the PAdova and TRieste Stellar Evolution Code. MNRAS 427, 127–145 (2012).
[3]
Y. Chen, L. Girardi, a. Bressan, P. Marigo, M. Barbieri and X. Kong. Improving PARSEC models for very low mass stars. MNRAS 444, 2525–2543 (2014).
[4]
J. Tang, A. Bressan, P. Rosenfield, A. Slemer, P. Marigo, L. Girardi and L. Bianchi. New PARSEC evolutionary tracks of massive stars at low metallicity: testing canonical stellar evolution in nearby star-forming dwarf galaxies. MNRAS 445, 4287–4305 (2014). Accessed on Mar 24, 2024. ADS Bibcode: 2014MNRAS.445.4287T.
[5]
Y. Chen, A. Bressan, L. Girardi, P. Marigo, X. Kong and A. Lanza. PARSEC evolutionary tracks of massive stars up to 350 M⊙ at metallicities 0.0001 ≤ Z ≤ 0.04. MNRAS 452, 1068–1080 (2015). Accessed on Mar 24, 2024. ADS Bibcode: 2015MNRAS.452.1068C.
[6]
P. Rosenfield, P. Marigo, L. Girardi, J. J. Dalcanton, A. Bressan, B. F. Williams and A. Dolphin. Evolution of Thermally Pulsing Asymptotic Giant Branch Stars. V. Constraining the Mass Loss and Lifetimes of Intermediate-mass, Low-metallicity AGB Stars. ApJ 822, 73 (2016). Accessed on Aug 24, 2024. ADS Bibcode: 2016ApJ...822...73R.
[7]
P. Marigo, L. Girardi, A. Bressan, P. Rosenfield, B. Aringer, Y. Chen, M. Dussin, A. Nanni, G. Pastorelli, T. S. Rodrigues, M. Trabucchi, S. Bladh, J. Dalcanton, M. A. Groenewegen, J. Montalbán and P. R. Wood. A New Generation of PARSEC-COLIBRI Stellar Isochrones Including the TP-AGB Phase. ApJ 835, 77 (2017). Accessed on Aug 21, 2024. ADS Bibcode: 2017ApJ...835...77M.
[8]
G. Pastorelli, P. Marigo, L. Girardi, Y. Chen, S. Rubele, M. Trabucchi, B. Aringer, S. Bladh, A. Bressan, J. Montalbán, M. L. Boyer, J. J. Dalcanton, K. Eriksson, M. A. Groenewegen, S. Höfner, T. Lebzelter, A. Nanni, P. Rosenfield, P. R. Wood and M.-R. L. Cioni. Constraining the thermally pulsing asymptotic giant branch phase with resolved stellar populations in the Small Magellanic Cloud. MNRAS 485, 5666–5692 (2019). Accessed on Mar 24, 2024. ADS Bibcode: 2019MNRAS.485.5666P.
[9]
G. Pastorelli, P. Marigo, L. Girardi, B. Aringer, Y. Chen, S. Rubele, M. Trabucchi, S. Bladh, M. L. Boyer, A. Bressan, J. J. Dalcanton, M. A. Groenewegen, T. Lebzelter, N. Mowlavi, K. L. Chubb, M.-R. L. Cioni, R. de Grijs, V. D. Ivanov, A. Nanni, J. T. van Loon and S. Zaggia. Constraining the thermally pulsing asymptotic giant branch phase with resolved stellar populations in the Large Magellanic Cloud. MNRAS 498, 3283–3301 (2020). Accessed on Mar 24, 2024. ADS Bibcode: 2020MNRAS.498.3283P.
[10]
C. Nguyen, G. Costa, L. Girardi, G. Volpato, A. Bressan, Y. Chen, P. Marigo, X. Fu and P. Goudfrooij. PARSEC V2.0: Stellar tracks and isochrones of low- and intermediate-mass stars with rotation. Astronomy & Astrophysics 665, A126 (2022), arXiv:2207.08642 [astro-ph.SR].
[11]
G. Costa, K. Shepherd, A. Bressan, F. Addari, Y. Chen, X. Fu, G. Volpato, C. Nguyen, L. Girardi, P. Marigo, A. Mazzi, G. Pastorelli, M. Trabucchi, D. Bossini and S. Zaggia. Evolutionary tracks, ejecta, and ionizing photons from intermediate-mass to very massive stars with PARSEC. Astronomy & Astrophysics 694, A193 (2025), arXiv:2501.12917 [astro-ph.SR].
[12]
[13]
E. Caffau, H.-G. Ludwig, M. Steffen, B. Freytag and P. Bonifacio. Solar Chemical Abundances Determined with a CO5BOLD 3D Model Atmosphere. Solar Physics 268, 255–269 (2011).