%%html
<style>
.cell-output-ipywidget-background {
background-color: transparent !important;
}
:root {
--jp-widgets-color: var(--vscode-editor-foreground);
--jp-widgets-font-size: var(--vscode-editor-font-size);
}
</style>
import datetime
import pyaurorax
import cartopy.crs
aurorax = pyaurorax.PyAuroraX()
at = aurorax.tools
# download a minute of RGB data from several sites
dataset_name = "TREX_RGB_RAW_NOMINAL"
start_dt = datetime.datetime(2023, 2, 24, 6, 15)
end_dt = start_dt
site_uid_list = ['yknf', 'gill', 'rabb', 'luck', 'atha']
data_download_objs = {}
for site_uid in site_uid_list:
download_obj = aurorax.data.ucalgary.download(dataset_name, start_dt, end_dt, site_uid=site_uid)
data_download_objs[site_uid] = download_obj
# Read in the data site-by-site, as we need this separation for mosaicing
data_list = []
for site_uid, download_obj in data_download_objs.items():
data_list.append(aurorax.data.ucalgary.read(download_obj.dataset, download_obj.filenames))
Downloading TREX_RGB_RAW_NOMINAL files: 0%| | 0.00/6.88M [00:00<?, ?B/s]
Downloading TREX_RGB_RAW_NOMINAL files: 0%| | 0.00/7.19M [00:00<?, ?B/s]
Downloading TREX_RGB_RAW_NOMINAL files: 0%| | 0.00/7.73M [00:00<?, ?B/s]
Downloading TREX_RGB_RAW_NOMINAL files: 0%| | 0.00/5.86M [00:00<?, ?B/s]
Downloading TREX_RGB_RAW_NOMINAL files: 0%| | 0.00/6.06M [00:00<?, ?B/s]
# Get list of all skymaps in previous two years up to date of interest for each site
skymap_download_objs = {}
for site_uid in site_uid_list:
download_obj = aurorax.data.ucalgary.download(
"TREX_RGB_SKYMAP_IDLSAV",
start_dt.replace(year=start_dt.year-2),
start_dt,
site_uid=site_uid,
)
skymap_download_objs[site_uid] = download_obj
# Read and store the last list index skymap for each site, as that is most recent to the date of interest
skymaps = []
for site_uid, download_obj in skymap_download_objs.items():
skymap = aurorax.data.ucalgary.read(download_obj.dataset, download_obj.filenames[-1])
skymaps.append(skymap.data[0])
skymaps
Downloading TREX_RGB_SKYMAP_IDLSAV files: 0%| | 0.00/28.3M [00:00<?, ?B/s]
Downloading TREX_RGB_SKYMAP_IDLSAV files: 0%| | 0.00/42.4M [00:00<?, ?B/s]
Downloading TREX_RGB_SKYMAP_IDLSAV files: 0%| | 0.00/42.4M [00:00<?, ?B/s]
Downloading TREX_RGB_SKYMAP_IDLSAV files: 0%| | 0.00/70.7M [00:00<?, ?B/s]
Downloading TREX_RGB_SKYMAP_IDLSAV files: 0%| | 0.00/42.4M [00:00<?, ?B/s]
[Skymap(project_uid=rgb, site_uid=yknf, imager_uid=rgb-08, site_map_latitude=62.519848, site_map_longitude=245.686966, ...), Skymap(project_uid=rgb, site_uid=gill, imager_uid=rgb-04, site_map_latitude=56.376724, site_map_longitude=265.356323, ...), Skymap(project_uid=rgb, site_uid=rabb, imager_uid=rgb-06, site_map_latitude=58.227810, site_map_longitude=256.319366, ...), Skymap(project_uid=rgb, site_uid=luck, imager_uid=rgb-03, site_map_latitude=51.153988, site_map_longitude=252.735260, ...), Skymap(project_uid=rgb, site_uid=atha, imager_uid=rgb-07, site_map_latitude=54.602631, site_map_longitude=246.355728, ...)]
# prepare the skymap data
prepped_skymap = at.mosaic.prep_skymaps(skymaps, 110, n_parallel=5)
prepped_skymap
Preparing skymaps: 0%| | 0/5 [00:00<?, ?skymap/s]
MosaicSkymap(polyfill_lat=array(dims=(5, 265440), dtype=float64), polyfill_lon=array(dims=(5, 265440), dtype=float64), elevation=array(dims=(265440,), dtype=float32), site_uid_list=['yknf', 'gill', 'rabb', 'luck', 'atha'])
# prepare the image data
prepped_images = at.mosaic.prep_images(data_list)
prepped_images
MosaicData(images=Dict[5 sites of array(dims=(480, 553))], timestamps=[20 timestamps], site_uid_list=['yknf', 'gill', 'rabb', 'luck', 'atha'])
# define the intensity scales for each site
scale = {
"yknf": [10, 105],
"gill": [10, 105],
"rabb": [10, 105],
"luck": [10, 105],
"atha": [10, 105],
}
# Set timestamp to actually create mosaic frame for
mosaic_dt = datetime.datetime(2023, 2, 24, 6, 15, 9)
# create projection
center_lat = -100.0
center_lon = 55.0
projection_obj = cartopy.crs.NearsidePerspective(central_longitude=center_lat, central_latitude=center_lon)
# create mosaic
frame_num = 0
mosaic = at.mosaic.create(prepped_images, prepped_skymap, mosaic_dt, projection_obj, image_intensity_scales=scale)
print(mosaic)
Mosaic(polygon_data=PolyCollection(...), cartopy_projection=Projection(+proj=nsper +a=6378137.0 +lon_0=-100.0 +lat_0=55.0 +h=35785831 +x_0=0 +y_0=0 +units=m +no_defs +type=crs))
# plot mosaic
map_extent = [-145, -65, 35, 80]
mosaic.plot(map_extent, title="TREx RGB - %s" % (mosaic_dt.strftime("%Y-%m-%d %H:%M:%S")))