This software reads in images from UNIS' Allsky Airglow camera and produces a map of mesosphere 87km temperature above Svalbard.
Rowan Dayton-Oxland University of Southampton Github
Download or pull from Github
- Python >= 3.10
- .ipynb capabilites e.g. Jupyter Notebook, Visual Studio code
- OS independent
- numpy, pandas, matplotlib, pathlib, struct, glob, datetime
Pull requests are welcome, for major changes please open an issue first to discuss what you would like to change.
- Read in images (.img format) from UNIS Allsky airglow camera
- Calibrate images by using the corner (dark) values
- Calculate the rotational temperature from the P1(2) P1(4) line ratios (Channels 5 and 6 of the camera)
- Create temperature keograms
Temperatures are calculated according to the equation
Where
Symbol | F(J') (cm) | Wavelength (A) | J' | Einstein A | Channel |
---|---|---|---|---|---|
P1(2) | -45.170339 | 8399 | 1.5 | 0.434 | 5 |
P1(4) | 113.752553 | 8465 | 3.5 | 0.579 | 6 |
Run the script including all the functions. Current iteration in .ipynb format sonopen the file and run in Jupyter Notebook or another appropriate editor.
Notebook contains examples of generating a single temperature map and a keogram.
import glob
# Get the files from the CH5 and CH6 folders (typical format for UNIS Allsky Airglow Camera data)
Channel5files = glob('filepath/CH5/*.img')
Channel6files = glob('filepath/CH6/*.img')
# Use get_image_pairs to match up the images in time
image_pairs = get_image_pairs(Channel5files, Channel6files)
# To get the time from a specific image file as datetime obj
fname = Channel5files[0] # For example
time = time_fname[fname]
# To read an image file
header, image = read_img_file(fname)
# To get the dark value from the corner of the image
darkvalue = corner_dark(image)
# To get the calibrated image file (using the corner dark)
calibrated_img = calibrated(image)
# To get a temperature map from a ch5 image and a ch6 image (calibrate first)
# Example for first pair of images
temp_map = temperature_map(image_pairs[0][0], image_pairs[0][1])
# To get the cleaned up version an image or map
cleaned = cleanup_map(image)
# To retrieve a list of all the temperature maps for a folder or some of a folder
tempmaps = get_tempmaps(Channel5files, Channel6files, len(Channel5files))
# or
tempmaps = get_tempmaps(Channel5files, Channel6files, 10)
# To get the first 10 temperature maps
# To produce a keogram from a folder or some of a folder (as above)
timestamps, keogram = get_keogram(Channel5files, Channel6files, len(Channel5files))
The calibration of the Airglow camera (true darks, flat fields) is not done so temperature estimates are not accurate - when compared with the 'true' value from the SilverBullet, NIPR and Aura cameras, this code gave 100K higher temperatures. However, it gives a picture of temperature variations which can be useful to detect e.g. pressure waves which will be visible in the keograms.
https://pypi.org/project/oh-einstein-temp-convert/
This code is for image data for UNIS Allsky Airglow Camera, for access to the camera data, the contacts are listed here.
Noora Partamies, Mikko Syrjasuo, James Plank