ProGeny: Make All The Things!

Aaron Robotham

2024-11-21

Below we will make all SSPs used in the ProGeny papers (Robotham & Bellstedt, and the companion paper and Bellstedt & Robotham). This covers the full grid of three isochrones (MIST, PARSEC, BaSTI); four stellar atmospheres (C3K, PHOENIX, MILES, BaSeL); three IMFs (Chabrier, Kroupa, Salpeter), i.e. 3 x 3 x 4 = 36 SSPs. Additionally there are Kroupa age and Z evolving IMFs for all four stellar atmosphere (MIST only), i.e. 2 x 4 = 8. And finally there is a Lacey age evolving IMF (MIST and C3K only). This makes 45 variants in total. Running all of the below on a modern machine with 8 cores will take about half an hour and require about 16 GB of RAM if you do not delete objects as you go along (to delete things you can run rm(PG_Ch_Mi_C3K) or similar after you have saved the relevant FITS output).

First we load the libraries. ProGeny and Rfits or available at GitHub/asgr.

library(ProGeny)
library(ProSpect)
library(Rfits)
library(fst)
library(data.table)

Set some paths (these need to be correct for your system).

path_to_isochrone = 'ProGeny_isochrone/'
path_to_atmos = 'ProGeny_atmos/'
path_to_SSP = 'ProGeny_SSP/'

Load all the things!

Now we load our isochrones. If you do not have one already, you can get them using the progenyIsoDownload function. Currently we provide MIST (preferred, for reasons we shall get to), PARSEC and BaSTI as base isochrones.

MistIso = read.fst(file.path(path_to_isochrone,'MistIso.fst'), as.data.table = TRUE)
ParIso = read.fst(file.path(path_to_isochrone,'ParsecIso.fst'), as.data.table = TRUE)
BasIso = read.fst(file.path(path_to_isochrone,'BastiIso_FSPS.fst'), as.data.table = TRUE)

Next we load four different base spectra options: C3K, PHOENIX (Husser), MILES and BaSeL (mostly referred to as BASEL below for simplicity). To get these locally you will need to run progenyAtmosDownload. The below might take about a minute to run (depending on the speed of your HDD or SSD).

Spec_PHOENIX = progenyAtmosLoad(path_to_atmos, base='combine_PHOENIX_husser')
Spec_C3K = progenyAtmosLoad(path_to_atmos, base='combine_C3K_conroy')
Spec_MILES = progenyAtmosLoad(path_to_atmos, base='combine_MILES_vazdekis')
Spec_BASEL = progenyAtmosLoad(path_to_atmos, base='combine_BASEL_wlbc')

Now we compute our weighted interpolation onto each isochrone grid for all atmospheres (so 3 x 4 = 12 combinations):

Interp_Mist_C3K = progenyInterpGrid_All(Iso = MistIso, Spec_combine = Spec_C3K)
Interp_Par_C3K = progenyInterpGrid_All(Iso = ParIso, Spec_combine = Spec_C3K)
Interp_Bas_C3K = progenyInterpGrid_All(Iso = BasIso, Spec_combine = Spec_C3K)

Interp_Mist_PHOENIX = progenyInterpGrid_All(Iso = MistIso, Spec_combine = Spec_PHOENIX)
Interp_Par_PHOENIX = progenyInterpGrid_All(Iso = ParIso, Spec_combine = Spec_PHOENIX)
Interp_Bas_PHOENIX = progenyInterpGrid_All(Iso = BasIso, Spec_combine = Spec_PHOENIX)

Interp_Mist_MILES = progenyInterpGrid_All(Iso = MistIso, Spec_combine = Spec_MILES)
Interp_Par_MILES = progenyInterpGrid_All(Iso = ParIso, Spec_combine = Spec_MILES)
Interp_Bas_MILES = progenyInterpGrid_All(Iso = BasIso, Spec_combine = Spec_MILES)

Interp_Mist_BASEL = progenyInterpGrid_All(Iso = MistIso, Spec_combine = Spec_BASEL)
Interp_Par_BASEL = progenyInterpGrid_All(Iso = ParIso, Spec_combine = Spec_BASEL)
Interp_Bas_BASEL = progenyInterpGrid_All(Iso = BasIso, Spec_combine = Spec_BASEL)

Now we find our preferred stellar atmosphere for C3K:

MistIso_C3K = progenyInterpBest(Iso = MistIso,
                                    Interp_combine = Interp_Mist_C3K,
                                    label_AGB = 4:5, #7:8 [PC] / 4:5 [Mist]
                                    label_white = 6:8 # 9 [PC] / 6:8 [Mist]
)
ParIso_C3K = progenyInterpBest(Iso = ParIso,
                                   Interp_combine = Interp_Par_C3K,
                                   label_AGB = 7:8, #7:8 [PC] / 4:5 [Mist]
                                   label_white = 9 # 9 [PC] / 6:8 [Mist]
)
BasIso_C3K = progenyInterpBest(Iso = BasIso,
                                   Interp_combine = Interp_Bas_C3K,
                                   label_AGB = 3:5 #7:8 [PC] / 4:5 [Mist]
)

Now we find our preferred stellar atmosphere for PHOENIX (Husser):

MistIso_PHOENIX = progenyInterpBest(Iso = MistIso,
                                Interp_combine = Interp_Mist_PHOENIX,
                                label_AGB = 4:5, #7:8 [PC] / 4:5 [Mist]
                                label_white = 6:8 # 9 [PC] / 6:8 [Mist]
)
ParIso_PHOENIX = progenyInterpBest(Iso = ParIso,
                                    Interp_combine = Interp_Par_PHOENIX,
                                    label_AGB = 7:8, #7:8 [PC] / 4:5 [Mist]
                                    label_white = 9 # 9 [PC] / 6:8 [Mist]
)
BasIso_PHOENIX = progenyInterpBest(Iso = BasIso,
                                   Interp_combine = Interp_Bas_PHOENIX,
                                   label_AGB = 3:5 #7:8 [PC] / 4:5 [Mist]
)

Now we find our preferred stellar atmosphere for MILES:

MistIso_MILES = progenyInterpBest(Iso = MistIso,
                                Interp_combine = Interp_Mist_MILES,
                                label_AGB = 4:5, #7:8 [PC] / 4:5 [Mist]
                                label_white = 6:8 # 9 [PC] / 6:8 [Mist]
)
ParIso_MILES = progenyInterpBest(Iso = ParIso,
                               Interp_combine = Interp_Par_MILES,
                               label_AGB = 7:8, #7:8 [PC] / 4:5 [Mist]
                               label_white = 9 # 9 [PC] / 6:8 [Mist]
)
BasIso_MILES = progenyInterpBest(Iso = BasIso,
                               Interp_combine = Interp_Bas_MILES,
                               label_AGB = 3:5 #7:8 [PC] / 4:5 [Mist]
)

Now we find our preferred stellar atmosphere for BaSeL (Husser):

MistIso_BASEL = progenyInterpBest(Iso = MistIso,
                                  Interp_combine = Interp_Mist_BASEL,
                                  label_AGB = 4:5, #7:8 [PC] / 4:5 [Mist]
                                  label_white = 6:8 # 9 [PC] / 6:8 [Mist]
)
ParIso_BASEL = progenyInterpBest(Iso = ParIso,
                                 Interp_combine = Interp_Par_BASEL,
                                 label_AGB = 7:8, #7:8 [PC] / 4:5 [Mist]
                                 label_white = 9 # 9 [PC] / 6:8 [Mist]
)
BasIso_BASEL = progenyInterpBest(Iso = BasIso,
                                 Interp_combine = Interp_Bas_BASEL,
                                 label_AGB = 3:5 #7:8 [PC] / 4:5 [Mist]
)

Make SSPs

MIST

Chabrier

PG_Ch_Mi_C3K = progenyMakeSSP(Iso = MistIso_C3K,
                                  IMFfunc = IMF_Chabrier,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_C3K,
                                  Interp_combine = Interp_Mist_C3K
)
PG_Ch_Mi_PHOENIX = progenyMakeSSP(Iso = MistIso_PHOENIX,
                               IMFfunc = IMF_Chabrier,
                               masslow = 0.1,
                               massmax = 100,
                               Spec_combine = Spec_PHOENIX,
                               Interp_combine = Interp_Mist_PHOENIX
)
PG_Ch_Mi_MILES = progenyMakeSSP(Iso = MistIso_MILES,
                              IMFfunc = IMF_Chabrier,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_MILES,
                              Interp_combine = Interp_Mist_MILES
)
PG_Ch_Mi_BASEL = progenyMakeSSP(Iso = MistIso_BASEL,
                                IMFfunc = IMF_Chabrier,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Mist_BASEL
)

You might also want to check each SSP with the ProSpect function speclib_check before writing it out.

speclib_check(PG_Ch_Mi_C3K)

As well as printing a bunch of diagnostic messages, this will return a logical output specifying whether all checks are passed (TRUE) or not (FALSE).

Assuming our checks are passed (the above should work!) then we can write them out. Below we save them in the correct FITS format (this can be loaded directly into ProSpect with speclib_FITSload).

Rfits_write(PG_Ch_Mi_C3K, file.path(path_to_SSP,'PG_Ch_Mi_C3K.fits'), flatten = T)
Rfits_write(PG_Ch_Mi_PHOENIX, file.path(path_to_SSP,'PG_Ch_Mi_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Ch_Mi_MILES, file.path(path_to_SSP,'PG_Ch_Mi_MILES.fits'), flatten = T)
Rfits_write(PG_Ch_Mi_BASEL, file.path(path_to_SSP,'PG_Ch_Mi_BASEL.fits'), flatten = T)

Kroupa

PG_Kr_Mi_C3K = progenyMakeSSP(Iso = MistIso_C3K,
                              IMFfunc = IMF_Kroupa,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Mist_C3K
)
PG_Kr_Mi_PHOENIX = progenyMakeSSP(Iso = MistIso_PHOENIX,
                                  IMFfunc = IMF_Kroupa,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Mist_PHOENIX
)
PG_Kr_Mi_MILES = progenyMakeSSP(Iso = MistIso_MILES,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Mist_MILES
)
PG_Kr_Mi_BASEL = progenyMakeSSP(Iso = MistIso_BASEL,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Mist_BASEL
)

Rfits_write(PG_Kr_Mi_C3K, file.path(path_to_SSP,'PG_Kr_Mi_C3K.fits'), flatten = T)
Rfits_write(PG_Kr_Mi_PHOENIX, file.path(path_to_SSP,'PG_Kr_Mi_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Kr_Mi_MILES, file.path(path_to_SSP,'PG_Kr_Mi_MILES.fits'), flatten = T)
Rfits_write(PG_Kr_Mi_BASEL, file.path(path_to_SSP,'PG_Kr_Mi_BASEL.fits'), flatten = T)

Salpeter

PG_Sp_Mi_C3K = progenyMakeSSP(Iso = MistIso_C3K,
                              IMFfunc = IMF_Salpeter,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Mist_C3K
)
PG_Sp_Mi_PHOENIX = progenyMakeSSP(Iso = MistIso_PHOENIX,
                                  IMFfunc = IMF_Salpeter,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Mist_PHOENIX
)
PG_Sp_Mi_MILES = progenyMakeSSP(Iso = MistIso_MILES,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Mist_MILES
)
PG_Sp_Mi_BASEL = progenyMakeSSP(Iso = MistIso_BASEL,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Mist_BASEL
)

Rfits_write(PG_Sp_Mi_C3K, file.path(path_to_SSP,'PG_Sp_Mi_C3K.fits'), flatten = T)
Rfits_write(PG_Sp_Mi_PHOENIX, file.path(path_to_SSP,'PG_Sp_Mi_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Sp_Mi_MILES, file.path(path_to_SSP,'PG_Sp_Mi_MILES.fits'), flatten = T)
Rfits_write(PG_Sp_Mi_BASEL, file.path(path_to_SSP,'PG_Sp_Mi_BASEL.fits'), flatten = T)

PARSEC

Chabrier

PG_Ch_PC_C3K = progenyMakeSSP(Iso = ParIso_C3K,
                              IMFfunc = IMF_Chabrier,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Par_C3K
)
PG_Ch_PC_PHOENIX = progenyMakeSSP(Iso = ParIso_PHOENIX,
                                  IMFfunc = IMF_Chabrier,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Par_PHOENIX
)
PG_Ch_PC_MILES = progenyMakeSSP(Iso = ParIso_MILES,
                                IMFfunc = IMF_Chabrier,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Par_MILES
)
PG_Ch_PC_BASEL = progenyMakeSSP(Iso = ParIso_BASEL,
                                IMFfunc = IMF_Chabrier,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Par_BASEL
)

Rfits_write(PG_Ch_PC_C3K, file.path(path_to_SSP,'PG_Ch_PC_C3K.fits'), flatten = T)
Rfits_write(PG_Ch_PC_PHOENIX, file.path(path_to_SSP,'PG_Ch_PC_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Ch_PC_MILES, file.path(path_to_SSP,'PG_Ch_PC_MILES.fits'), flatten = T)
Rfits_write(PG_Ch_PC_BASEL, file.path(path_to_SSP,'PG_Ch_PC_BASEL.fits'), flatten = T)

Kroupa

PG_Kr_PC_C3K = progenyMakeSSP(Iso = ParIso_C3K,
                              IMFfunc = IMF_Kroupa,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Par_C3K
)
PG_Kr_PC_PHOENIX = progenyMakeSSP(Iso = ParIso_PHOENIX,
                                  IMFfunc = IMF_Kroupa,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Par_PHOENIX
)
PG_Kr_PC_MILES = progenyMakeSSP(Iso = ParIso_MILES,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Par_MILES
)
PG_Kr_PC_BASEL = progenyMakeSSP(Iso = ParIso_BASEL,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Par_BASEL
)

Rfits_write(PG_Kr_PC_C3K, file.path(path_to_SSP,'PG_Kr_PC_C3K.fits'), flatten = T)
Rfits_write(PG_Kr_PC_PHOENIX, file.path(path_to_SSP,'PG_Kr_PC_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Kr_PC_MILES, file.path(path_to_SSP,'PG_Kr_PC_MILES.fits'), flatten = T)
Rfits_write(PG_Kr_PC_BASEL, file.path(path_to_SSP,'PG_Kr_PC_BASEL.fits'), flatten = T)

Salpeter

PG_Sp_PC_C3K = progenyMakeSSP(Iso = ParIso_C3K,
                              IMFfunc = IMF_Salpeter,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Par_C3K
)
PG_Sp_PC_PHOENIX = progenyMakeSSP(Iso = ParIso_PHOENIX,
                                  IMFfunc = IMF_Salpeter,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Par_PHOENIX
)
PG_Sp_PC_MILES = progenyMakeSSP(Iso = ParIso_MILES,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Par_MILES
)
PG_Sp_PC_BASEL = progenyMakeSSP(Iso = ParIso_BASEL,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Par_BASEL
)

Rfits_write(PG_Sp_PC_C3K, file.path(path_to_SSP,'PG_Sp_PC_C3K.fits'), flatten = T)
Rfits_write(PG_Sp_PC_PHOENIX, file.path(path_to_SSP,'PG_Sp_PC_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Sp_PC_MILES, file.path(path_to_SSP,'PG_Sp_PC_MILES.fits'), flatten = T)
Rfits_write(PG_Sp_PC_BASEL, file.path(path_to_SSP,'PG_Sp_PC_BASEL.fits'), flatten = T)

BaSTI

Chabrier

PG_Ch_Ba_C3K = progenyMakeSSP(Iso = BasIso_C3K,
                              IMFfunc = IMF_Chabrier,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Bas_C3K
)
PG_Ch_Ba_PHOENIX = progenyMakeSSP(Iso = BasIso_PHOENIX,
                                  IMFfunc = IMF_Chabrier,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Bas_PHOENIX
)
PG_Ch_Ba_MILES = progenyMakeSSP(Iso = BasIso_MILES,
                                IMFfunc = IMF_Chabrier,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Bas_MILES
)
PG_Ch_Ba_BASEL = progenyMakeSSP(Iso = BasIso_BASEL,
                                IMFfunc = IMF_Chabrier,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Bas_BASEL
)

Rfits_write(PG_Ch_Ba_C3K, file.path(path_to_SSP,'PG_Ch_Ba_C3K.fits'), flatten = T)
Rfits_write(PG_Ch_Ba_PHOENIX, file.path(path_to_SSP,'PG_Ch_Ba_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Ch_Ba_MILES, file.path(path_to_SSP,'PG_Ch_Ba_MILES.fits'), flatten = T)
Rfits_write(PG_Ch_Ba_BASEL, file.path(path_to_SSP,'PG_Ch_Ba_BASEL.fits'), flatten = T)

Kroupa

PG_Kr_Ba_C3K = progenyMakeSSP(Iso = BasIso_C3K,
                              IMFfunc = IMF_Kroupa,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Bas_C3K
)
PG_Kr_Ba_PHOENIX = progenyMakeSSP(Iso = BasIso_PHOENIX,
                                  IMFfunc = IMF_Kroupa,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Bas_PHOENIX
)
PG_Kr_Ba_MILES = progenyMakeSSP(Iso = BasIso_MILES,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Bas_MILES
)
PG_Kr_Ba_BASEL = progenyMakeSSP(Iso = BasIso_BASEL,
                                IMFfunc = IMF_Kroupa,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Bas_BASEL
)

Rfits_write(PG_Kr_Ba_C3K, file.path(path_to_SSP,'PG_Kr_Ba_C3K.fits'), flatten = T)
Rfits_write(PG_Kr_Ba_PHOENIX, file.path(path_to_SSP,'PG_Kr_Ba_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Kr_Ba_MILES, file.path(path_to_SSP,'PG_Kr_Ba_MILES.fits'), flatten = T)
Rfits_write(PG_Kr_Ba_BASEL, file.path(path_to_SSP,'PG_Kr_Ba_BASEL.fits'), flatten = T)

Salpeter

PG_Sp_Ba_C3K = progenyMakeSSP(Iso = BasIso_C3K,
                              IMFfunc = IMF_Salpeter,
                              masslow = 0.1,
                              massmax = 100,
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Bas_C3K
)
PG_Sp_Ba_PHOENIX = progenyMakeSSP(Iso = BasIso_PHOENIX,
                                  IMFfunc = IMF_Salpeter,
                                  masslow = 0.1,
                                  massmax = 100,
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Bas_PHOENIX
)
PG_Sp_Ba_MILES = progenyMakeSSP(Iso = BasIso_MILES,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Bas_MILES
)
PG_Sp_Ba_BASEL = progenyMakeSSP(Iso = BasIso_BASEL,
                                IMFfunc = IMF_Salpeter,
                                masslow = 0.1,
                                massmax = 100,
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Bas_BASEL
)

Rfits_write(PG_Sp_Ba_C3K, file.path(path_to_SSP,'PG_Sp_Ba_C3K.fits'), flatten = T)
Rfits_write(PG_Sp_Ba_PHOENIX, file.path(path_to_SSP,'PG_Sp_Ba_PHOENIX.fits'), flatten = T)
Rfits_write(PG_Sp_Ba_MILES, file.path(path_to_SSP,'PG_Sp_Ba_MILES.fits'), flatten = T)
Rfits_write(PG_Sp_Ba_BASEL, file.path(path_to_SSP,'PG_Sp_Ba_BASEL.fits'), flatten = T)

Evolving IMFs

Kroupa Age Evo

PG_KrE_Mi_C3K = progenyMakeSSP(Iso = MistIso_C3K,
                              IMFfunc = IMF_Kroupa_evo,
                              masslow = rep(0.1, 2),
                              massmax = rep(100, 2),
                              Spec_combine = Spec_C3K,
                              Interp_combine = Interp_Mist_C3K
)
PG_KrE_Mi_PHOENIX = progenyMakeSSP(Iso = MistIso_PHOENIX,
                                  IMFfunc = IMF_Kroupa_evo,
                                  masslow = rep(0.1, 2),
                                  massmax = rep(100, 2),
                                  Spec_combine = Spec_PHOENIX,
                                  Interp_combine = Interp_Mist_PHOENIX
)
PG_KrE_Mi_MILES = progenyMakeSSP(Iso = MistIso_MILES,
                                IMFfunc = IMF_Kroupa_evo,
                                masslow = rep(0.1, 2),
                                massmax = rep(100, 2),
                                Spec_combine = Spec_MILES,
                                Interp_combine = Interp_Mist_MILES
)
PG_KrE_Mi_BASEL = progenyMakeSSP(Iso = MistIso_BASEL,
                                IMFfunc = IMF_Kroupa_evo,
                                masslow = rep(0.1, 2),
                                massmax = rep(100, 2),
                                Spec_combine = Spec_BASEL,
                                Interp_combine = Interp_Mist_BASEL
)

Rfits_write(PG_KrE_Mi_C3K, file.path(path_to_SSP,'PG_KrE_Mi_C3K.fits'), flatten = T)
Rfits_write(PG_KrE_Mi_PHOENIX, file.path(path_to_SSP,'PG_KrE_Mi_PHOENIX.fits'), flatten = T)
Rfits_write(PG_KrE_Mi_MILES, file.path(path_to_SSP,'PG_KrE_Mi_MILES.fits'), flatten = T)
Rfits_write(PG_KrE_Mi_BASEL, file.path(path_to_SSP,'PG_KrE_Mi_BASEL.fits'), flatten = T)

Kroupa Z Evo

PG_KrZE_Mi_C3K = progenyMakeSSP(Iso = MistIso_C3K,
                               IMFfunc = IMF_Kroupa_Zevo,
                               masslow = rep(0.1, 2),
                               massmax = rep(100, 2),
                               Spec_combine = Spec_C3K,
                               Interp_combine = Interp_Mist_C3K
)
PG_KrZE_Mi_PHOENIX = progenyMakeSSP(Iso = MistIso_PHOENIX,
                                   IMFfunc = IMF_Kroupa_Zevo,
                                   masslow = rep(0.1, 2),
                                   massmax = rep(100, 2),
                                   Spec_combine = Spec_PHOENIX,
                                   Interp_combine = Interp_Mist_PHOENIX
)
PG_KrZE_Mi_MILES = progenyMakeSSP(Iso = MistIso_MILES,
                                 IMFfunc = IMF_Kroupa_Zevo,
                                 masslow = rep(0.1, 2),
                                 massmax = rep(100, 2),
                                 Spec_combine = Spec_MILES,
                                 Interp_combine = Interp_Mist_MILES
)
PG_KrZE_Mi_BASEL = progenyMakeSSP(Iso = MistIso_BASEL,
                                 IMFfunc = IMF_Kroupa_Zevo,
                                 masslow = rep(0.1, 2),
                                 massmax = rep(100, 2),
                                 Spec_combine = Spec_BASEL,
                                 Interp_combine = Interp_Mist_BASEL
)

Rfits_write(PG_KrZE_Mi_C3K, file.path(path_to_SSP,'PG_KrZE_Mi_C3K.fits'), flatten = T)
Rfits_write(PG_KrZE_Mi_PHOENIX, file.path(path_to_SSP,'PG_KrZE_Mi_PHOENIX.fits'), flatten = T)
Rfits_write(PG_KrZE_Mi_MILES, file.path(path_to_SSP,'PG_KrZE_Mi_MILES.fits'), flatten = T)
Rfits_write(PG_KrZE_Mi_BASEL, file.path(path_to_SSP,'PG_KrZE_Mi_BASEL.fits'), flatten = T)

Lacey Age Evo

PG_LcE_Mi_C3K = progenyMakeSSP(Iso=MistIso_C3K,
                               IMFfunc=IMF_Lacey_evo,
                               masslow_lim = c(0.1,0.1),
                               massmax_lim = c(100,100),
                               Spec_combine = Spec_C3K, 
                               Interp_combine = Interp_Mist_C3K
)

Rfits_write(PG_LcE_Mi_C3K, file.path(path_to_SSP,'PG_LcE_Mi_C3K.fits'), flatten = T)

You now have all 45 SSPs. Well done! Give your computer a pat on the back :-D