"""
=====================
emc2.core.instruments
=====================
This module stores example instruments.
"""
import numpy as np
import os
from .instrument import Instrument, ureg, quantity
from ..io import load_mie_file
[docs]class HSRL(Instrument):
[docs] def __init__(self):
"""
This stores the information for the High Resolution Spectral Lidar.
"""
super().__init__(wavelength=0.532 * ureg.micrometer)
self.instrument_class = "lidar"
self.instrument_str = "HSRL"
self.ext_OD = 4
self.K_w = np.nan
self.eps_liq = (1.337273 + 1.7570744e-9j)**2
self.pt = np.nan
self.theta = np.nan
self.gain = np.nan
self.Z_min_1km = np.nan
self.lr = np.nan
self.pr_noise_ge = np.nan
self.pr_noise_md = np.nan
self.tau_ge = np.nan
self.tau_md = np.nan
# Load mie tables
data_path = os.path.join(os.path.dirname(__file__), 'mie_tables')
self.mie_table["cl"] = load_mie_file(data_path + "/MieHSRL_liq.dat")
self.mie_table["pl"] = load_mie_file(data_path + "/MieHSRL_liq.dat")
self.mie_table["ci"] = load_mie_file(data_path + "/MieHSRL_ci.dat")
self.mie_table["pi"] = load_mie_file(data_path + "/MieHSRL_pi.dat")
[docs]class KAZR(Instrument):
[docs] def __init__(self, site):
"""
This stores the information for the KAZR.
"""
super().__init__(frequency=34.860 * ureg.GHz)
if site.lower() not in ["sgp", "nsa", "awr"]:
raise ValueError("Site must be one of 'sgp', 'nsa', or 'awr'!")
self.instrument_class = "radar"
self.ext_OD = np.nan
self.K_w = 0.88
self.eps_liq = (5.489262 + 2.8267679j)**2
self.pt = 2000.
if site.lower() == "sgp":
self.theta = 0.19
else:
self.theta = 0.31
if site.lower() == "sgp":
self.gain = 10**5.748
self.Z_min_1km = -51.5
elif site.lower() == "nsa":
self.gain = 10**5.337
self.Z_min_1km = -49.0
else:
self.gain = 10**5.273
self.Z_min_1km = -47.2
if site.lower() == "nsa":
self.lr = 10**0.4
self.pr_noise_ge = 10**-6.85
self.pr_noise_md = 10**-7.23
self.tau_ge = 0.3
self.tau_md = 4.0
else:
self.lr = np.nan
self.pr_noise_ge = np.nan
self.pr_noise_md = np.nan
self.tau_ge = np.nan
self.tau_md = np.nan
# Load mie tables
data_path = os.path.join(os.path.dirname(__file__), 'mie_tables')
self.mie_table["cl"] = load_mie_file(data_path + "/MieKAZR_liq.dat")
self.mie_table["pl"] = load_mie_file(data_path + "/MieKAZR_liq.dat")
self.mie_table["ci"] = load_mie_file(data_path + "/MieKAZR_ci.dat")
self.mie_table["pi"] = load_mie_file(data_path + "/MieKAZR_pi.dat")
[docs]class Ten64nm(Instrument):
[docs] def __init__(self):
"""
This stores the information for the 1064nm Lidar.
"""
super().__init__(wavelength=1.064 * ureg.micrometer)
self.instrument_class = "radar"
self.instrument_name = "1064nm"
self.ext_OD = 4
self.K_w = np.nan
self.eps_liq = (1.320416 + 1.2588968e-6j)**2
self.pt = np.nan
self.theta = np.nan
self.gain = np.nan
self.Z_min_1km = np.nan
self.lr = np.nan
self.pr_noise_ge = np.nan
self.pr_noise_md = np.nan
self.tau_ge = np.nan
self.tau_md = np.nan
# Load mie tables
data_path = os.path.join(os.path.dirname(__file__), 'mie_tables')
self.mie_table["cl"] = load_mie_file(data_path + "/Mie1064nm_liq.dat")
self.mie_table["pl"] = load_mie_file(data_path + "/Mie1064nm_liq.dat")
self.mie_table["ci"] = load_mie_file(data_path + "/Mie1064nm_ci.dat")
self.mie_table["pi"] = load_mie_file(data_path + "/Mie1064nm_pi.dat")