Note
Go to the end to download the full example code
Plot the lightcurve of a flaring star with spots#
This example plots the lightcurve caused by a flaring star when it also has spots.
from astropy import units as u
import matplotlib.pyplot as plt
from pathlib import Path
import numpy as np
import pypsg
from VSPEC import ObservationModel,PhaseAnalyzer
from VSPEC import params
from VSPEC import config
from VSPEC.params.gcm import vspec_to_pygcm
SEED = 42
pypsg.docker.set_url_and_run()
Saved settings to /home/ted/.pypsg/settings.json
Reloading settings...
Initialize the VSPEC run parameters#
For this example, we will create the parameter objects explicitly. This can also be done using a YAML file.
header = params.Header(
data_path=Path('.vspec/flare_spot_lightcurve'),
teff_min=2900*u.K,
teff_max=3400*u.K,
seed=SEED,verbose=1
)
star = params.StarParameters(
psg_star_template='M',
teff=3300*u.K,
mass = 0.1*u.M_sun,
radius=0.15*u.R_sun,
period = 6*u.day,
misalignment_dir=0*u.deg,
misalignment=0*u.deg,
ld = params.LimbDarkeningParameters.solar(),
faculae=params.FaculaParameters.none(),
spots=params.SpotParameters(
distribution='iso',
initial_coverage=0.1,
area_mean=300*config.MSH,
area_logsigma=0.2,
teff_umbra=2900*u.K,
teff_penumbra=3000*u.K,
equillibrium_coverage=0.1,
burn_in=0*u.day,
growth_rate=0/u.day,
decay_rate=0*config.MSH/u.day,
initial_area=10*config.MSH
),
flares=params.FlareParameters(
dist_teff_mean=9000*u.K,
dist_teff_sigma=500*u.K,
dist_fwhm_mean=3*u.hr,
dist_fwhm_logsigma=0.4,
alpha=-0.829,
beta=26.87,
min_energy=1e32*u.erg,
cluster_size=3
),
granulation=params.GranulationParameters.none(),
grid_params=(500, 1000),
spectral_grid='default'
)
planet = params.PlanetParameters.std(init_phase=180*u.deg,init_substellar_lon=0*u.deg)
system = params.SystemParameters(
distance=1.3*u.pc,
inclination=80*u.deg,
phase_of_periasteron=0*u.deg
)
observation = params.ObservationParameters(
observation_time=10*u.day,
integration_time=4*u.hr
)
psg_params = params.psgParameters(
gcm_binning=200,
phase_binning=1,
use_molecular_signatures=True,
use_continuum_stellar=True,
nmax=0,
lmax=0,
continuum=['Rayleigh', 'Refraction', 'CIA_all'],
)
instrument = params.InstrumentParameters.mirecle()
def gcm_getter():
return vspec_to_pygcm(
shape=(30,30,30),
epsilon=7,
star_teff=3800*u.K,
r_star=0.2*u.R_sun,
r_orbit=0.05*u.AU,
lat_redistribution=0.0,
p_surf=1*u.bar,
p_stop=1e-5*u.bar,
wind_u=0*u.km/u.s,
wind_v=0*u.km/u.s,
albedo=0.3,
emissivity=1.0,
gamma=1.4,
molecules={'CO2':1e-4}
)
gcm = params.gcmParameters(
gcm_getter=gcm_getter,
mean_molec_weight=28,
is_static=True
)
parameters = params.InternalParameters(
header = header,
star = star,
planet = planet,
system = system,
obs=observation,
psg = psg_params,
inst=instrument,
gcm = gcm
)
Run the simulation#
model = ObservationModel(params=parameters)
model.build_planet()
model.build_spectra()
Starting at phase 180.0 deg, observe for 10.0 d in 60 steps
Phases = [180. 186. 192. 198. 204. 210. 216. 222. 228. 234. 240. 246. 252. 258.
264. 270. 276. 282. 288. 294. 300. 306. 312. 318. 324. 330. 336. 342.
348. 354. 0. 6. 12. 18. 24. 30. 36. 42. 48. 54. 60. 66.
72. 78. 84. 90. 96. 102. 108. 114. 120. 126. 132. 138. 144. 150.
156. 162. 168. 174. 180.] deg
Build Planet: 0%| | 0/60 [00:00<?, ?it/s]
Build Planet: 2%|▏ | 1/60 [00:00<00:27, 2.16it/s]
Build Planet: 3%|▎ | 2/60 [00:00<00:17, 3.31it/s]
Build Planet: 5%|▌ | 3/60 [00:00<00:14, 3.93it/s]
Build Planet: 7%|▋ | 4/60 [00:01<00:12, 4.34it/s]
Build Planet: 8%|▊ | 5/60 [00:01<00:12, 4.58it/s]
Build Planet: 10%|█ | 6/60 [00:01<00:11, 4.76it/s]
Build Planet: 12%|█▏ | 7/60 [00:01<00:11, 4.73it/s]
Build Planet: 13%|█▎ | 8/60 [00:01<00:10, 4.80it/s]
Build Planet: 15%|█▌ | 9/60 [00:02<00:10, 4.91it/s]
Build Planet: 17%|█▋ | 10/60 [00:02<00:09, 5.03it/s]
Build Planet: 18%|█▊ | 11/60 [00:02<00:09, 4.97it/s]
Build Planet: 20%|██ | 12/60 [00:02<00:09, 4.97it/s]
Build Planet: 22%|██▏ | 13/60 [00:02<00:09, 5.06it/s]
Build Planet: 23%|██▎ | 14/60 [00:03<00:09, 5.10it/s]
Build Planet: 25%|██▌ | 15/60 [00:03<00:08, 5.15it/s]
Build Planet: 27%|██▋ | 16/60 [00:03<00:08, 5.13it/s]
Build Planet: 28%|██▊ | 17/60 [00:03<00:08, 5.14it/s]
Build Planet: 30%|███ | 18/60 [00:03<00:08, 5.12it/s]
Build Planet: 32%|███▏ | 19/60 [00:03<00:08, 5.12it/s]
Build Planet: 33%|███▎ | 20/60 [00:04<00:07, 5.04it/s]
Build Planet: 35%|███▌ | 21/60 [00:04<00:07, 4.95it/s]
Build Planet: 37%|███▋ | 22/60 [00:04<00:07, 4.79it/s]
Build Planet: 38%|███▊ | 23/60 [00:04<00:07, 4.86it/s]
Build Planet: 40%|████ | 24/60 [00:05<00:07, 4.74it/s]
Build Planet: 42%|████▏ | 25/60 [00:05<00:07, 4.83it/s]
Build Planet: 43%|████▎ | 26/60 [00:05<00:06, 4.86it/s]
Build Planet: 45%|████▌ | 27/60 [00:05<00:06, 4.94it/s]
Build Planet: 47%|████▋ | 28/60 [00:05<00:06, 4.94it/s]
Build Planet: 48%|████▊ | 29/60 [00:06<00:06, 4.97it/s]
Build Planet: 50%|█████ | 30/60 [00:06<00:06, 4.88it/s]
Build Planet: 52%|█████▏ | 31/60 [00:06<00:06, 4.81it/s]
Build Planet: 53%|█████▎ | 32/60 [00:06<00:05, 4.73it/s]
Build Planet: 55%|█████▌ | 33/60 [00:06<00:05, 4.78it/s]
Build Planet: 57%|█████▋ | 34/60 [00:07<00:05, 4.80it/s]
Build Planet: 58%|█████▊ | 35/60 [00:07<00:05, 4.83it/s]
Build Planet: 60%|██████ | 36/60 [00:07<00:04, 4.85it/s]
Build Planet: 62%|██████▏ | 37/60 [00:07<00:04, 4.87it/s]
Build Planet: 63%|██████▎ | 38/60 [00:07<00:04, 4.77it/s]
Build Planet: 65%|██████▌ | 39/60 [00:08<00:04, 4.77it/s]
Build Planet: 67%|██████▋ | 40/60 [00:08<00:04, 4.82it/s]
Build Planet: 68%|██████▊ | 41/60 [00:08<00:03, 4.77it/s]
Build Planet: 70%|███████ | 42/60 [00:08<00:03, 4.80it/s]
Build Planet: 72%|███████▏ | 43/60 [00:08<00:03, 4.81it/s]
Build Planet: 73%|███████▎ | 44/60 [00:09<00:03, 4.84it/s]
Build Planet: 75%|███████▌ | 45/60 [00:09<00:03, 4.76it/s]
Build Planet: 77%|███████▋ | 46/60 [00:09<00:02, 4.79it/s]
Build Planet: 78%|███████▊ | 47/60 [00:09<00:02, 4.84it/s]
Build Planet: 80%|████████ | 48/60 [00:10<00:02, 4.82it/s]
Build Planet: 82%|████████▏ | 49/60 [00:10<00:02, 4.84it/s]
Build Planet: 83%|████████▎ | 50/60 [00:10<00:02, 4.78it/s]
Build Planet: 85%|████████▌ | 51/60 [00:10<00:01, 4.73it/s]
Build Planet: 87%|████████▋ | 52/60 [00:10<00:01, 4.77it/s]
Build Planet: 88%|████████▊ | 53/60 [00:11<00:01, 4.78it/s]
Build Planet: 90%|█████████ | 54/60 [00:11<00:01, 4.78it/s]
Build Planet: 92%|█████████▏| 55/60 [00:11<00:01, 4.76it/s]
Build Planet: 93%|█████████▎| 56/60 [00:11<00:00, 4.67it/s]
Build Planet: 95%|█████████▌| 57/60 [00:11<00:00, 4.65it/s]
Build Planet: 97%|█████████▋| 58/60 [00:12<00:00, 4.68it/s]
Build Planet: 98%|█████████▊| 59/60 [00:12<00:00, 4.58it/s]
Build Planet: 100%|██████████| 60/60 [00:12<00:00, 4.60it/s]
Build Planet: 61it [00:12, 4.51it/s]
Build Planet: 61it [00:12, 4.76it/s]
Generated 29 mature spots
Build Spectra: 0%| | 0/60 [00:00<?, ?it/s]
Loading Spectra: 0%| | 0/6 [00:00<?, ?it/s]
Loading Spectra: 17%|█▋ | 1/6 [00:00<00:01, 3.29it/s]
Loading Spectra: 33%|███▎ | 2/6 [00:00<00:01, 3.31it/s]
Loading Spectra: 50%|█████ | 3/6 [00:00<00:00, 3.29it/s]
Loading Spectra: 67%|██████▋ | 4/6 [00:01<00:00, 3.26it/s]
Loading Spectra: 83%|████████▎ | 5/6 [00:01<00:00, 3.27it/s]
Loading Spectra: 100%|██████████| 6/6 [00:01<00:00, 3.28it/s]
Loading Spectra: 100%|██████████| 6/6 [00:01<00:00, 3.28it/s]
Build Spectra: 2%|▏ | 1/60 [00:02<02:15, 2.30s/it]
Build Spectra: 3%|▎ | 2/60 [00:02<01:09, 1.19s/it]
Build Spectra: 5%|▌ | 3/60 [00:03<00:47, 1.19it/s]
Build Spectra: 7%|▋ | 4/60 [00:03<00:37, 1.50it/s]
Build Spectra: 8%|▊ | 5/60 [00:03<00:31, 1.76it/s]
Build Spectra: 10%|█ | 6/60 [00:04<00:27, 1.96it/s]
Build Spectra: 12%|█▏ | 7/60 [00:04<00:25, 2.10it/s]
Build Spectra: 13%|█▎ | 8/60 [00:05<00:23, 2.21it/s]
Build Spectra: 15%|█▌ | 9/60 [00:05<00:22, 2.29it/s]
Build Spectra: 17%|█▋ | 10/60 [00:05<00:21, 2.34it/s]
Build Spectra: 18%|█▊ | 11/60 [00:06<00:20, 2.38it/s]
Build Spectra: 20%|██ | 12/60 [00:06<00:20, 2.36it/s]
Build Spectra: 22%|██▏ | 13/60 [00:07<00:20, 2.35it/s]
Build Spectra: 23%|██▎ | 14/60 [00:07<00:19, 2.36it/s]
Build Spectra: 25%|██▌ | 15/60 [00:08<00:19, 2.33it/s]
Build Spectra: 27%|██▋ | 16/60 [00:08<00:18, 2.36it/s]
Build Spectra: 28%|██▊ | 17/60 [00:08<00:17, 2.40it/s]
Build Spectra: 30%|███ | 18/60 [00:09<00:17, 2.42it/s]
Build Spectra: 32%|███▏ | 19/60 [00:09<00:16, 2.43it/s]
Build Spectra: 33%|███▎ | 20/60 [00:10<00:16, 2.45it/s]
Build Spectra: 35%|███▌ | 21/60 [00:10<00:15, 2.45it/s]
Build Spectra: 37%|███▋ | 22/60 [00:10<00:15, 2.45it/s]
Build Spectra: 38%|███▊ | 23/60 [00:11<00:15, 2.46it/s]
Build Spectra: 40%|████ | 24/60 [00:11<00:14, 2.48it/s]
Build Spectra: 42%|████▏ | 25/60 [00:12<00:14, 2.49it/s]
Build Spectra: 43%|████▎ | 26/60 [00:12<00:13, 2.50it/s]
Build Spectra: 45%|████▌ | 27/60 [00:12<00:13, 2.48it/s]
Build Spectra: 47%|████▋ | 28/60 [00:13<00:12, 2.49it/s]
Build Spectra: 48%|████▊ | 29/60 [00:13<00:12, 2.49it/s]
Build Spectra: 50%|█████ | 30/60 [00:14<00:12, 2.47it/s]
Build Spectra: 52%|█████▏ | 31/60 [00:14<00:11, 2.45it/s]
Build Spectra: 53%|█████▎ | 32/60 [00:14<00:11, 2.46it/s]
Build Spectra: 55%|█████▌ | 33/60 [00:15<00:11, 2.45it/s]
Build Spectra: 57%|█████▋ | 34/60 [00:15<00:10, 2.46it/s]
Build Spectra: 58%|█████▊ | 35/60 [00:16<00:10, 2.44it/s]
Build Spectra: 60%|██████ | 36/60 [00:16<00:09, 2.46it/s]
Build Spectra: 62%|██████▏ | 37/60 [00:17<00:09, 2.42it/s]
Build Spectra: 63%|██████▎ | 38/60 [00:17<00:09, 2.41it/s]
Build Spectra: 65%|██████▌ | 39/60 [00:17<00:08, 2.43it/s]
Build Spectra: 67%|██████▋ | 40/60 [00:18<00:08, 2.44it/s]
Build Spectra: 68%|██████▊ | 41/60 [00:18<00:07, 2.42it/s]
Build Spectra: 70%|███████ | 42/60 [00:19<00:07, 2.44it/s]
Build Spectra: 72%|███████▏ | 43/60 [00:19<00:06, 2.48it/s]
Build Spectra: 73%|███████▎ | 44/60 [00:19<00:06, 2.49it/s]
Build Spectra: 75%|███████▌ | 45/60 [00:20<00:06, 2.49it/s]
Build Spectra: 77%|███████▋ | 46/60 [00:20<00:05, 2.49it/s]
Build Spectra: 78%|███████▊ | 47/60 [00:21<00:05, 2.51it/s]
Build Spectra: 80%|████████ | 48/60 [00:21<00:04, 2.53it/s]
Build Spectra: 82%|████████▏ | 49/60 [00:21<00:04, 2.55it/s]
Build Spectra: 83%|████████▎ | 50/60 [00:22<00:03, 2.55it/s]
Build Spectra: 85%|████████▌ | 51/60 [00:22<00:03, 2.56it/s]
Build Spectra: 87%|████████▋ | 52/60 [00:23<00:03, 2.44it/s]
Build Spectra: 88%|████████▊ | 53/60 [00:23<00:02, 2.48it/s]
Build Spectra: 90%|█████████ | 54/60 [00:23<00:02, 2.51it/s]
Build Spectra: 92%|█████████▏| 55/60 [00:24<00:01, 2.53it/s]
Build Spectra: 93%|█████████▎| 56/60 [00:24<00:01, 2.55it/s]
Build Spectra: 95%|█████████▌| 57/60 [00:24<00:01, 2.56it/s]
Build Spectra: 97%|█████████▋| 58/60 [00:25<00:00, 2.56it/s]
Build Spectra: 98%|█████████▊| 59/60 [00:25<00:00, 2.56it/s]
Build Spectra: 100%|██████████| 60/60 [00:26<00:00, 2.56it/s]
Build Spectra: 100%|██████████| 60/60 [00:26<00:00, 2.29it/s]
Load in the data#
We can use VSPEC to read in the synthetic data we just created.
data = PhaseAnalyzer(model.directories['all_model'])
Make the figure#
time = (data.time - data.time[0]).to_value(u.day)
wl = data.wavelength.to_value(u.um)
emission = (data.thermal/data.total).to_value(u.dimensionless_unscaled)*1e6
variation = (data.star/data.star[:,0,np.newaxis]-1).to_value(u.dimensionless_unscaled)*100
fig,ax = plt.subplots(1,2,figsize=(8,4))
im=ax[0].pcolormesh(time,wl,emission,cmap='cividis')
fig.colorbar(im,ax=ax[0],label='Planet Thermal Emission (ppm)',location='top')
# ax[0].set_title('Planet')
im=ax[1].pcolormesh(time,wl,variation,cmap='cividis')
fig.colorbar(im,ax=ax[1],label='Stellar Variation (%)',location='top')
# ax[1].set_title('Star')
ax[0].set_ylabel('Wavelength (${\\rm \\mu m}$)')
fig.text(0.5,0.02,'Time (days)',ha='center')

Text(0.5, 0.02, 'Time (days)')
Total running time of the script: (0 minutes 43.408 seconds)