Note
Go to the end to download the full example code.
Modeling an Arcade of Loops with the RTV Scaling Laws#
This example shows how to model AIA emission from an arcade of semi-circular loops who’s thermal structure is modeled using the RTV scaling laws.
import astropy.time
import astropy.units as u
from astropy.coordinates import SkyCoord
from sunpy.coordinates import get_earth
import synthesizAR
from synthesizAR.instruments.sdo import InstrumentSDOAIA
from synthesizAR.interfaces import RTVInterface
from synthesizAR.models import semi_circular_arcade
First, set up the coordinates for loops in the arcade.
Next, assemble the arcade.
strands = [synthesizAR.Strand(f'strand{i}', c) for i, c in enumerate(arcade_coords)]
arcade = synthesizAR.Skeleton(strands)
We can make a quick plot of what these coordinates would look like as viewed from Earth.
earth_observer = get_earth(obstime)
arcade.peek(observer=earth_observer,
axes_limits=[(150, 300)*u.arcsec, (275, 425)*u.arcsec])

Next, model the thermal structure of each loop using the RTV scaling laws.
rtv = RTVInterface(heating_rate=1e-6*u.Unit('erg cm-3 s-1'))
arcade.load_loop_simulations(rtv)
Finally, compute the LOS integrated AIA emission.
aia = InstrumentSDOAIA([0, 1]*u.s, earth_observer, pad_fov=(40, 40)*u.pixel)
maps = aia.observe(arcade)
Files Downloaded: 0%| | 0/1 [00:00<?, ?file/s]
aiapy.aia_V8_all_fullinst.genx: 0%| | 0.00/5.43M [00:00<?, ?B/s]
aiapy.aia_V8_all_fullinst.genx: 21%|██ | 1.14M/5.43M [00:00<00:00, 11.4MB/s]
aiapy.aia_V8_all_fullinst.genx: 92%|█████████▏| 4.98M/5.43M [00:00<00:00, 26.2MB/s]
Files Downloaded: 100%|██████████| 1/1 [00:00<00:00, 3.89file/s]
Files Downloaded: 100%|██████████| 1/1 [00:00<00:00, 3.88file/s]
INFO: Apparent body location accounts for 493.67 seconds of light travel time [sunpy.coordinates.ephemeris]
We can make a quick plot of what each EUV channel of AIA would look like.
We can easily adjust the viewing angle to integrate the emission along a different LOS.
off_limb_observer = SkyCoord(
lon=-70*u.deg, lat=earth_observer.lat, radius=earth_observer.radius, frame=earth_observer.frame)
aia = InstrumentSDOAIA([0, 1]*u.s, off_limb_observer, pad_fov=(20, 20)*u.pixel,)
maps = aia.observe(arcade)
for k in maps:
maps[k][0].peek(draw_limb=True)
INFO: Apparent body location accounts for 493.67 seconds of light travel time [sunpy.coordinates.ephemeris]
Total running time of the script: (0 minutes 7.773 seconds)











