Calibration
After the signal is converted to DN by the instrument a calibration is performed to produce the level 1 data.
from ali.instrument.simulator import ImagingSimulator
from ali.instrument.sensor_2channel import ALISensorDualChannel
from ali.util.geometry import optical_axis_from_geometry
import sasktran as sk
import numpy as np
from ali.diagnostics.diagnostics import plot_radiance_profile
from ali.test.util.atmospheres import create_atmosphere
def generate_calibration_radiance():
"""
Basic test of a limb imager.
"""
mjd = (np.datetime64('2020-10-22 15:00:00') - np.datetime64('1858-11-17')) / np.timedelta64(1, 'D')
optical_geometry = []
sensors = []
# wavelengths = [np.array([600.0, 650.0]), np.array([750.0])]
wavelengths = [750.0, 1020.0, 1500.0]
for lat, wavel, exp_time in zip([45.0, 45.0, 45.0], wavelengths, [0.1, 0.5, 1.0]):
geometry = sk.VerticalImage()
geometry.from_sza_ssa(sza=60, ssa=60, lat=lat, lon=0, tanalts_km=[22.5], mjd=mjd, locallook=0, satalt_km=450)
optical_geometry.append(optical_axis_from_geometry(geometry))
ali = ALISensorDualChannel(wavelength_nm=np.array([wavel]), num_columns=1, num_rows=640)
ali.add_dark_current = True
ali.add_noise = True
ali.auto_exposure = True
# ali.simulate_pixel_averaging = 50
ali.exposure_time = exp_time
sensors.append(ali)
# sensors[0].turn_rotator_on()
atmosphere = create_atmosphere()
sim = ImagingSimulator(sensors=sensors, optical_axis=optical_geometry,
atmosphere=atmosphere, options={'polarization': True, 'numordersofscatter': 1})
sim.num_vertical_samples = 640
sim.num_horizontal_samples = 1
sim.random_seed = 0
sim.save_diagnostics = True
sim.grid_sampling = True
sim.group_scans = False
data = sim.calculate_radiance()
sensor = sim.sensors[0]
plot_radiance_profile(sim.sensors, sim.num_vertical_samples, sim.num_horizontal_samples)
if __name__ == '__main__':
generate_calibration_radiance()