# Generate O2 absorption profiles for different observatory sites
Sylvie Dagoret-Campagne
affliliation : IJCLAB/IN2P3/CNRS
creation date : 23 October 2023
Last verification : August 27th 2024
[ ]:
%load_ext autoreload
%autoreload 2
[ ]:
import matplotlib.pyplot as plt
%matplotlib inline
import sys
import os
import numpy as np
[ ]:
import matplotlib
import matplotlib.pyplot as plt
import matplotlib.colors as colors
import matplotlib.cm as cmx
import seaborn as sns
[ ]:
matplotlib.rcParams.update({'font.size': 15, 'lines.linewidth': 2, 'lines.markersize': 15})
matplotlib.rcParams["axes.labelsize"]="small"
matplotlib.rcParams["axes.linewidth"]=2.0
matplotlib.rcParams["xtick.major.size"]=8
matplotlib.rcParams["ytick.major.size"]=8
matplotlib.rcParams["ytick.minor.size"]=5
matplotlib.rcParams["xtick.labelsize"]="large"
matplotlib.rcParams["ytick.labelsize"]="large"
matplotlib.rcParams["figure.figsize"]=(12,6)
matplotlib.rcParams['axes.titlesize'] = 15
matplotlib.rcParams['axes.titleweight'] = 'bold'
#matplotlib.rcParams['axes.facecolor'] = 'blue'
matplotlib.rcParams['xtick.direction'] = 'out'
matplotlib.rcParams['ytick.direction'] = 'out'
matplotlib.rcParams['lines.markeredgewidth'] = 0.3 # the line width around the marker symbol
matplotlib.rcParams['lines.markersize'] = 10 # markersize, in points
matplotlib.rcParams['grid.alpha'] = 1. # transparency, between 0.0 and 1.0
matplotlib.rcParams['grid.linestyle'] = '-' # simple line
matplotlib.rcParams['grid.linewidth'] = 0.4 # in points
[ ]:
os.getenv('LIBRADTRANDIR')
[ ]:
from libradtranpy import libsimulateVisible
[ ]:
from libradtranpy.libsimulateVisible import Dict_Of_sitesPressures
[ ]:
List_Of_All_sites = list(Dict_Of_sitesPressures.keys())
List_Of_All_sites
[ ]:
NSites = len(List_Of_All_sites)
[ ]:
hls_colors = sns.color_palette("hls", NSites)
sns.palplot(hls_colors)
[ ]:
import sys
sys.path
Choose the parameters of the simulation
[ ]:
am= 1
pressure = 0. # use default value
pwv=0 # turn on or of the pwv
aer=0
ozone=0. # turn on or of the ozone
cloudext=0
Simulation
[ ]:
all_trans = []
all_obs = []
for index, site in enumerate(List_Of_All_sites):
all_obs.append(site)
wl,atm =libsimulateVisible.ProcessSimulation(am,pwv,ozone,pressure,aer_num=0,
prof_str='us',proc_str='ab',cloudext=cloudext,altitude=site)
all_trans.append(atm)
Plot
[ ]:
for index in np.arange(NSites):
plt.semilogy(wl,all_trans[index],'-',color=hls_colors[index],label=all_obs[index])
plt.xlim(600,800)
plt.grid()
plt.title(f"O2 absorption atmospheric transmission for airmass in {am}")
plt.xlabel("$\\lambda$ (nm)")
plt.ylabel("transmission")
plt.ylim(0.2,1.1)
plt.legend()
figname="multisitesO2transmissionvssite_log.png"
plt.savefig(figname)
[ ]:
for index in np.arange(NSites):
plt.plot(wl,all_trans[index],'-',color=hls_colors[index],label=all_obs[index])
plt.xlim(600,800)
plt.grid()
plt.title(f"O2 absorption atmospheric transmission for airmass in {am}")
plt.xlabel("$\\lambda$ (nm)")
plt.ylabel("transmission")
plt.ylim(0.,1.1)
plt.legend()
figname="multisitesO2transmission_vssitelin.png"
plt.savefig(figname)
Compare libradtran with standard pressure and libradtran with P=743
[ ]:
wl1,atm1=libsimulateVisible.ProcessSimulation(am,pwv,ozone,pressure,aer_num=aer,
prof_str='us',proc_str='ab',cloudext=cloudext,altitude='LSST')
Pstand = Dict_Of_sitesPressures['LSST']
label1 = f"LSST site with P = {Pstand:.2f} hPa"
Ptest = 743.0
wl2,atm2=libsimulateVisible.ProcessSimulation(am,pwv,ozone,Ptest,aer_num=aer,
prof_str='us',proc_str='ab',cloudext=cloudext,altitude='LSST')
label2 = f"LSST site with P = {Ptest:.2f} hPa"
[ ]:
plt.plot(wl1,atm1,'-r',label=label1)
plt.plot(wl2,atm2,'-b',label=label2)
plt.xlim(600,800)
plt.grid()
plt.title(f"Rayleigh scattering atmospheric transmission for airmass in {am} and 2 pressures")
plt.xlabel("$\\lambda$ (nm)")
plt.ylabel("transmission")
plt.ylim(0.,1.05)
plt.legend()
figname="comparepressuresO2transmission_lsst_lin.png"
plt.savefig(figname)
[ ]:
the_leg = f"O2 transmission ratio T(P = {Ptest:.1f} hPa)/T(P={Pstand:.1f} hPa)"
plt.plot(wl1,atm2/atm1,'-r',label=the_leg)
plt.xlim(600,800)
plt.grid()
plt.title(f"O2 atmospheric transmission ratio for airmass in {am}")
plt.xlabel("$\\lambda$ (nm)")
plt.ylabel("transmission")
plt.ylim(0.95,1.05)
plt.legend()
figname="comparepressuresO2transmissionratio_lsst_lin.png"
plt.savefig(figname)
[ ]: