"
]
},
"metadata": {},
"output_type": "display_data"
}
],
"source": [
"# Produce figure\n",
"fig = plot_spectra(spectra, planet, model, bin_spectra = False,\n",
" wl_min = 0.50, wl_max = 0.51, # 0.50 to 0.51 um\n",
" y_min = 1.1e-2, y_max = 1.8e-2,\n",
" spectra_labels = ['Fe absorption'], plt_label = 'Zoomed Template')"
]
},
{
"cell_type": "markdown",
"metadata": {},
"source": [
"### Creating a Grid of High-Resolution Spectra\n",
"\n",
"For cross correlation analyses, one will generally desire a grid of template models spanning different chemical species and atmospheric properties.\n",
"\n",
"You can straightforwardly make a grid of high-resolution spectra by constructing a loop over atmospheric properties. The cell below provides an example to build a simple grid of model templates for $\\rm{Fe}$ and $\\rm{Ca}^{+}$ spanning 3 temperatures and 5 mixing ratios (for a total of 30 models).\n",
"\n",
"\n",
"\n",
" **Note:**\n",
"\n",
" Running the cell below will take around 30 minutes, with the grid using 2 GB of disk storage.\n",
"\n",
"
"
]
},
{
"cell_type": "code",
"execution_count": 8,
"metadata": {},
"outputs": [
{
"name": "stdout",
"output_type": "stream",
"text": [
"Model 1/30 done.\n",
"Model 2/30 done.\n",
"Model 3/30 done.\n",
"Model 4/30 done.\n",
"Model 5/30 done.\n",
"Model 6/30 done.\n",
"Model 7/30 done.\n",
"Model 8/30 done.\n",
"Model 9/30 done.\n",
"Model 10/30 done.\n",
"Model 11/30 done.\n",
"Model 12/30 done.\n",
"Model 13/30 done.\n",
"Model 14/30 done.\n",
"Model 15/30 done.\n",
"Model 16/30 done.\n",
"Model 17/30 done.\n",
"Model 18/30 done.\n",
"Model 19/30 done.\n",
"Model 20/30 done.\n",
"Model 21/30 done.\n",
"Model 22/30 done.\n",
"Model 23/30 done.\n",
"Model 24/30 done.\n",
"Model 25/30 done.\n",
"Model 26/30 done.\n",
"Model 27/30 done.\n",
"Model 28/30 done.\n",
"Model 29/30 done.\n",
"Model 30/30 done.\n"
]
}
],
"source": [
"from POSEIDON.core import define_model\n",
"from POSEIDON.core import make_atmosphere\n",
"from POSEIDON.core import wl_grid_line_by_line\n",
"from POSEIDON.core import read_opacities\n",
"from POSEIDON.core import compute_spectrum\n",
"import numpy as np\n",
"\n",
"# Specify arrays of parameters to loop over\n",
"T_arr = np.array([2000, 2200, 2400])\n",
"log_X_arr = np.array([-8, -7, -6, -5, -4])\n",
"template_species = np.array(['Fe', 'Ca+'])\n",
"\n",
"# Define model for grid\n",
"bulk_species = ['H2', 'He'] # H2 + He comprises the bulk atmosphere\n",
"\n",
"# Specify the pressure grid of the atmosphere\n",
"P_min = 1.0e-10 # 0.1 nbar\n",
"P_max = 100 # 100 bar\n",
"N_layers = 100 # 100 layers\n",
"\n",
"# We'll space the layers uniformly in log-pressure\n",
"P = np.logspace(np.log10(P_max), np.log10(P_min), N_layers)\n",
"\n",
"# Specify the reference pressure and radius\n",
"P_ref = 10.0 # Reference pressure (bar)\n",
"R_p_ref = R_p # Radius at reference pressure\n",
"\n",
"#***** Wavelength grid *****#\n",
" \n",
"wl_min = 0.3 # Minimum wavelength (um)\n",
"wl_max = 1.0 # Maximum wavelength (um) \n",
"\n",
"wl_high_res = wl_grid_line_by_line(wl_min, wl_max)\n",
"\n",
"#***** Read opacity data *****#\n",
"\n",
"opacity_treatment = 'line_by_line'\n",
"\n",
"model_count = 0 # Counter variable so user can track model grid progress\n",
"\n",
"# Loop over chemical species, temperatures, and mixing ratios\n",
"for q in range(len(template_species)):\n",
" for i in range(len(T_arr)):\n",
" for j in range(len(log_X_arr)):\n",
"\n",
" model_count += 1\n",
"\n",
" # Load chemical species and atmospheric properties for this template\n",
" param_species = [template_species[q]]\n",
" T_i = T_arr[i]\n",
" log_X_j = log_X_arr[j]\n",
"\n",
" # Define model name for this parameter combination\n",
" model_name = param_species[0] + '_' + str(log_X_j) + '_T_' + str(T_i) + 'K'\n",
"\n",
" # Create the model object\n",
" model = define_model(model_name, bulk_species, param_species, \n",
" PT_profile = 'isotherm', cloud_model = 'cloud-free')\n",
"\n",
" # Prepare high-resolution opacity data\n",
" opac_high_res = read_opacities(model, wl_high_res, opacity_treatment)\n",
"\n",
" # Store parameters in input array\n",
" PT_params = np.array([T_i])\n",
" log_X_params = np.array([[log_X_j]])\n",
"\n",
" # Generate the atmosphere\n",
" atmosphere = make_atmosphere(planet, model, P, P_ref, R_p_ref,\n",
" PT_params, log_X_params)\n",
"\n",
" # Compute the spectrum\n",
" spectrum_high_res = compute_spectrum(planet, star, model, atmosphere, \n",
" opac_high_res, wl_high_res,\n",
" spectrum_type = 'transmission', \n",
" save_spectrum = True,\n",
" disable_continuum = True,\n",
" suppress_print = True) # Suppress 'cross section done' print statements\n",
"\n",
" print(\"Model \" + str(model_count) + \"/\" + \n",
" str(len(T_arr)*len(log_X_arr)*len(template_species)) + \" done.\")"
]
}
],
"metadata": {
"kernelspec": {
"display_name": "POSEIDON_python_3.11",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.11.9"
},
"orig_nbformat": 4
},
"nbformat": 4,
"nbformat_minor": 2
}