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,
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,
gcmtype='vspec',
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:13, 4.44it/s]
Build Planet: 3%|▎ | 2/60 [00:00<00:12, 4.63it/s]
Build Planet: 5%|▌ | 3/60 [00:00<00:11, 4.86it/s]
Build Planet: 7%|▋ | 4/60 [00:00<00:11, 4.88it/s]
Build Planet: 8%|▊ | 5/60 [00:01<00:11, 4.99it/s]
Build Planet: 10%|█ | 6/60 [00:01<00:10, 5.10it/s]
Build Planet: 12%|█▏ | 7/60 [00:01<00:10, 5.12it/s]
Build Planet: 13%|█▎ | 8/60 [00:01<00:10, 4.92it/s]
Build Planet: 15%|█▌ | 9/60 [00:01<00:11, 4.63it/s]
Build Planet: 17%|█▋ | 10/60 [00:02<00:11, 4.38it/s]
Build Planet: 18%|█▊ | 11/60 [00:02<00:11, 4.20it/s]
Build Planet: 20%|██ | 12/60 [00:02<00:11, 4.33it/s]
Build Planet: 22%|██▏ | 13/60 [00:02<00:10, 4.46it/s]
Build Planet: 23%|██▎ | 14/60 [00:03<00:10, 4.25it/s]
Build Planet: 25%|██▌ | 15/60 [00:03<00:10, 4.36it/s]
Build Planet: 27%|██▋ | 16/60 [00:03<00:10, 4.05it/s]
Build Planet: 28%|██▊ | 17/60 [00:03<00:10, 3.93it/s]
Build Planet: 30%|███ | 18/60 [00:04<00:10, 3.98it/s]
Build Planet: 32%|███▏ | 19/60 [00:04<00:09, 4.16it/s]
Build Planet: 33%|███▎ | 20/60 [00:04<00:09, 4.33it/s]
Build Planet: 35%|███▌ | 21/60 [00:04<00:08, 4.47it/s]
Build Planet: 37%|███▋ | 22/60 [00:04<00:08, 4.39it/s]
Build Planet: 38%|███▊ | 23/60 [00:05<00:08, 4.47it/s]
Build Planet: 40%|████ | 24/60 [00:05<00:08, 4.42it/s]
Build Planet: 42%|████▏ | 25/60 [00:05<00:07, 4.45it/s]
Build Planet: 43%|████▎ | 26/60 [00:05<00:07, 4.46it/s]
Build Planet: 45%|████▌ | 27/60 [00:06<00:07, 4.32it/s]
Build Planet: 47%|████▋ | 28/60 [00:06<00:07, 4.20it/s]
Build Planet: 48%|████▊ | 29/60 [00:06<00:07, 3.98it/s]
Build Planet: 50%|█████ | 30/60 [00:06<00:07, 4.07it/s]
Build Planet: 52%|█████▏ | 31/60 [00:07<00:07, 4.13it/s]
Build Planet: 53%|█████▎ | 32/60 [00:07<00:06, 4.30it/s]
Build Planet: 55%|█████▌ | 33/60 [00:07<00:06, 4.40it/s]
Build Planet: 57%|█████▋ | 34/60 [00:07<00:05, 4.43it/s]
Build Planet: 58%|█████▊ | 35/60 [00:07<00:05, 4.47it/s]
Build Planet: 60%|██████ | 36/60 [00:08<00:05, 4.55it/s]
Build Planet: 62%|██████▏ | 37/60 [00:08<00:05, 4.56it/s]
Build Planet: 63%|██████▎ | 38/60 [00:08<00:04, 4.55it/s]
Build Planet: 65%|██████▌ | 39/60 [00:08<00:04, 4.53it/s]
Build Planet: 67%|██████▋ | 40/60 [00:09<00:04, 4.58it/s]
Build Planet: 68%|██████▊ | 41/60 [00:09<00:04, 4.56it/s]
Build Planet: 70%|███████ | 42/60 [00:09<00:04, 4.48it/s]
Build Planet: 72%|███████▏ | 43/60 [00:09<00:03, 4.54it/s]
Build Planet: 73%|███████▎ | 44/60 [00:09<00:03, 4.45it/s]
Build Planet: 75%|███████▌ | 45/60 [00:10<00:03, 4.42it/s]
Build Planet: 77%|███████▋ | 46/60 [00:10<00:03, 4.42it/s]
Build Planet: 78%|███████▊ | 47/60 [00:10<00:02, 4.45it/s]
Build Planet: 80%|████████ | 48/60 [00:10<00:02, 4.46it/s]
Build Planet: 82%|████████▏ | 49/60 [00:11<00:02, 4.29it/s]
Build Planet: 83%|████████▎ | 50/60 [00:11<00:02, 4.38it/s]
Build Planet: 85%|████████▌ | 51/60 [00:11<00:02, 4.44it/s]
Build Planet: 87%|████████▋ | 52/60 [00:11<00:01, 4.49it/s]
Build Planet: 88%|████████▊ | 53/60 [00:11<00:01, 4.43it/s]
Build Planet: 90%|█████████ | 54/60 [00:12<00:01, 4.37it/s]
Build Planet: 92%|█████████▏| 55/60 [00:12<00:01, 4.37it/s]
Build Planet: 93%|█████████▎| 56/60 [00:12<00:00, 4.36it/s]
Build Planet: 95%|█████████▌| 57/60 [00:12<00:00, 4.28it/s]
Build Planet: 97%|█████████▋| 58/60 [00:13<00:00, 4.29it/s]
Build Planet: 98%|█████████▊| 59/60 [00:13<00:00, 4.20it/s]
Build Planet: 100%|██████████| 60/60 [00:13<00:00, 4.29it/s]
Build Planet: 61it [00:13, 4.28it/s]
Build Planet: 61it [00:13, 4.40it/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, 2.94it/s]
Loading Spectra: 33%|███▎ | 2/6 [00:00<00:01, 2.67it/s]
Loading Spectra: 50%|█████ | 3/6 [00:01<00:01, 2.51it/s]
Loading Spectra: 67%|██████▋ | 4/6 [00:01<00:00, 2.64it/s]
Loading Spectra: 83%|████████▎ | 5/6 [00:01<00:00, 2.75it/s]
Loading Spectra: 100%|██████████| 6/6 [00:02<00:00, 2.91it/s]
Loading Spectra: 100%|██████████| 6/6 [00:02<00:00, 2.79it/s]
Build Spectra: 2%|▏ | 1/60 [00:13<13:00, 13.22s/it]
Build Spectra: 3%|▎ | 2/60 [00:13<05:29, 5.68s/it]
Build Spectra: 5%|▌ | 3/60 [00:14<03:07, 3.28s/it]
Build Spectra: 7%|▋ | 4/60 [00:14<01:59, 2.14s/it]
Build Spectra: 8%|▊ | 5/60 [00:14<01:23, 1.51s/it]
Build Spectra: 10%|█ | 6/60 [00:15<01:01, 1.14s/it]
Build Spectra: 12%|█▏ | 7/60 [00:15<00:47, 1.12it/s]
Build Spectra: 13%|█▎ | 8/60 [00:16<00:38, 1.37it/s]
Build Spectra: 15%|█▌ | 9/60 [00:16<00:31, 1.61it/s]
Build Spectra: 17%|█▋ | 10/60 [00:16<00:27, 1.82it/s]
Build Spectra: 18%|█▊ | 11/60 [00:17<00:24, 2.01it/s]
Build Spectra: 20%|██ | 12/60 [00:17<00:22, 2.18it/s]
Build Spectra: 22%|██▏ | 13/60 [00:18<00:22, 2.12it/s]
Build Spectra: 23%|██▎ | 14/60 [00:18<00:22, 2.08it/s]
Build Spectra: 25%|██▌ | 15/60 [00:19<00:21, 2.08it/s]
Build Spectra: 27%|██▋ | 16/60 [00:19<00:20, 2.12it/s]
Build Spectra: 28%|██▊ | 17/60 [00:19<00:20, 2.14it/s]
Build Spectra: 30%|███ | 18/60 [00:20<00:18, 2.25it/s]
Build Spectra: 32%|███▏ | 19/60 [00:20<00:18, 2.27it/s]
Build Spectra: 33%|███▎ | 20/60 [00:21<00:17, 2.29it/s]
Build Spectra: 35%|███▌ | 21/60 [00:21<00:16, 2.37it/s]
Build Spectra: 37%|███▋ | 22/60 [00:21<00:15, 2.42it/s]
Build Spectra: 38%|███▊ | 23/60 [00:22<00:14, 2.50it/s]
Build Spectra: 40%|████ | 24/60 [00:22<00:14, 2.57it/s]
Build Spectra: 42%|████▏ | 25/60 [00:23<00:13, 2.62it/s]
Build Spectra: 43%|████▎ | 26/60 [00:23<00:12, 2.66it/s]
Build Spectra: 45%|████▌ | 27/60 [00:23<00:12, 2.67it/s]
Build Spectra: 47%|████▋ | 28/60 [00:24<00:11, 2.70it/s]
Build Spectra: 48%|████▊ | 29/60 [00:24<00:11, 2.72it/s]
Build Spectra: 50%|█████ | 30/60 [00:24<00:11, 2.73it/s]
Build Spectra: 52%|█████▏ | 31/60 [00:25<00:10, 2.73it/s]
Build Spectra: 53%|█████▎ | 32/60 [00:25<00:10, 2.64it/s]
Build Spectra: 55%|█████▌ | 33/60 [00:26<00:10, 2.50it/s]
Build Spectra: 57%|█████▋ | 34/60 [00:26<00:10, 2.49it/s]
Build Spectra: 58%|█████▊ | 35/60 [00:26<00:09, 2.54it/s]
Build Spectra: 60%|██████ | 36/60 [00:27<00:09, 2.60it/s]
Build Spectra: 62%|██████▏ | 37/60 [00:27<00:08, 2.65it/s]
Build Spectra: 63%|██████▎ | 38/60 [00:28<00:08, 2.60it/s]
Build Spectra: 65%|██████▌ | 39/60 [00:28<00:08, 2.56it/s]
Build Spectra: 67%|██████▋ | 40/60 [00:28<00:07, 2.56it/s]
Build Spectra: 68%|██████▊ | 41/60 [00:29<00:07, 2.62it/s]
Build Spectra: 70%|███████ | 42/60 [00:29<00:06, 2.68it/s]
Build Spectra: 72%|███████▏ | 43/60 [00:29<00:06, 2.70it/s]
Build Spectra: 73%|███████▎ | 44/60 [00:30<00:05, 2.72it/s]
Build Spectra: 75%|███████▌ | 45/60 [00:30<00:05, 2.75it/s]
Build Spectra: 77%|███████▋ | 46/60 [00:30<00:05, 2.76it/s]
Build Spectra: 78%|███████▊ | 47/60 [00:31<00:04, 2.78it/s]
Build Spectra: 80%|████████ | 48/60 [00:31<00:04, 2.54it/s]
Build Spectra: 82%|████████▏ | 49/60 [00:32<00:04, 2.39it/s]
Build Spectra: 83%|████████▎ | 50/60 [00:32<00:04, 2.37it/s]
Build Spectra: 85%|████████▌ | 51/60 [00:33<00:03, 2.32it/s]
Build Spectra: 87%|████████▋ | 52/60 [00:33<00:03, 2.29it/s]
Build Spectra: 88%|████████▊ | 53/60 [00:34<00:03, 2.26it/s]
Build Spectra: 90%|█████████ | 54/60 [00:34<00:02, 2.29it/s]
Build Spectra: 92%|█████████▏| 55/60 [00:34<00:02, 2.38it/s]
Build Spectra: 93%|█████████▎| 56/60 [00:35<00:01, 2.50it/s]
Build Spectra: 95%|█████████▌| 57/60 [00:35<00:01, 2.51it/s]
Build Spectra: 97%|█████████▋| 58/60 [00:35<00:00, 2.59it/s]
Build Spectra: 98%|█████████▊| 59/60 [00:36<00:00, 2.64it/s]
Build Spectra: 100%|██████████| 60/60 [00:36<00:00, 2.69it/s]
Build Spectra: 100%|██████████| 60/60 [00:36<00:00, 1.64it/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 55.906 seconds)