## Using Astronify to sonify galaxy data

Astronify is a great tool to make data accessible to people with impaired vision. We are using Astronify to build a small project within a Jupyter Notebook to sonify examples of Atomic Hydrogen spectrum - for an individual galaxy and for a galaxy group - and here it is :)

The entire Jupyter Notebook and the data are accessible here

### Project overview

Without going into too many details, we can say that a galaxy is composed out of stars, dust, gas and dark matter. The gaseous component in spiral galaxies is most often the Atomic Hydrogen (HI). This gas represents galaxy's reservoir from which it can form new stars in the future. The overall shape of 21 cm spectral line indicates motion and distribution of the gas, and the width of the line represents Doppler broadening (check Doppler effect due to the rotation of the galaxy. Therefore, we can roughly say that we are observing how gas in the galaxy rotates (ignoring e.g. projection effects due to inclination)! Moreover, we will also show here not just how it looks like, but also, how we can hear it!

Play Sound below images :)

### Example for galaxy ESO153-G017 ### Code that sonified the data looks like this

```# Astronify import
from astronify.series import SoniSeries
from astropy.table import Table

# General import
import numpy as np
import matplotlib.pyplot as plt

# Galaxy data
G1_channel, G1_velocity, G1_flux = np.loadtxt('g1', unpack=True)

# Placing data into input Table
# We will place our Velocity information as a 'time' input
data_table = Table({"time": G1_velocity[(G1_velocity>6320) & (G1_velocity<6710)],
"flux": G1_flux[(G1_velocity>6320) & (G1_velocity<6710)]})
# Sonify the data
soni_obj = SoniSeries(data_table)
soni_obj.note_spacing = 0.07 # Speed of the played sound, increase number to slow it down
soni_obj.sonify()
# Play
soni_obj.play()
```

### Example for galaxy ESO153-IG016 - Assymetric profile ### We can sonify Atomic Hydrogen spectra for each detected galaxy in the group

In this example, we are sonifying the galaxy group `HIPASS J0205-55` and its sub-groups. Mapping this group with the Australia Telescope Compact Array, we found Atomic Hydrogen emission in 5 galaxies. ### JUST WOW!

We notice (HEAR!) that the signal from the galaxies does not appear at the same time - that is because every galaxy is at a different distance in a group. In other words, the point where the signal from the galaxy appears is both visualised and sonified!

At first, we can hear two galaxies (G4 and G5) rougly at the same time. Next, as the sound progresses we hear one high pitch noise - signaling a new galaxy (G2) and then yet another high-pitch signal - another galaxy (G3)! We can then hear the background noise for a bit, as the next galaxy is a bit further away. Finally we get to hear the highest-pitch sound which comes from the galaxy G! in the plot.

As you probably noticed, noise has a low-pitch sound, and with the increase of the Atomic Hydrogen Flux in a galaxy (within this galaxy group), galaxy will produce a higher-pitch tone.

## Animation example

We can also combine visual and sound properties and make an animation like this:

### Code that generated animation

```# Astronify import
from astronify.series import SoniSeries
from astropy.table import Table

# General import
import numpy as np
import matplotlib.pyplot as plt

#from matplotlib.animation import FuncAnimation
import matplotlib.animation as animation
%matplotlib notebook

#Galaxy data
G1_channel, G1_velocity, G1_flux = np.loadtxt('g1', unpack=True)

duration = 7000 # in sec
refreshPeriod = 100 # in ms

fig,ax = plt.subplots(figsize=(6,6))

plt.plot(G1_velocity[(G1_velocity>6320) & (G1_velocity<6710)], G1_flux[(G1_velocity>6320) & (G1_velocity<6710)], 'grey', linewidth=8, label='ESO153-G017')
# Spectrum where Atomic Hydrogen emission is
ax.plot(G1_velocity[(G1_velocity>6320) & (G1_velocity<6525)],G1_flux[(G1_velocity>6320) & (G1_velocity<6525)], 'b-', color='blue', linewidth=2, label='')
ax.plot(G1_velocity[(G1_velocity>6525) & (G1_velocity<7525)],G1_flux[(G1_velocity>6525) & (G1_velocity<7525)], 'b-', color='red', linewidth=2, label='')
plt.ylabel("Total Fulx Density [Jy]", fontsize=22)
plt.xlabel("Velocity [km s\$^{-1}\$]", fontsize = 22)

plt.tight_layout()
plt.xlim(6320,6710)
plt.ylim(-0.008, 0.12)

# Line Animation
vl = ax.axvline(6320, ls='-', color='k', lw=3, zorder=10)

def animate(i, vl, period):
t = i*period/14
vl.set_xdata([t+6320,t+6320])
return vl

ani = animation.FuncAnimation(fig, animate, frames=int(duration/(refreshPeriod/1)), fargs=(vl,refreshPeriod), interval=refreshPeriod)
plt.show()

# SOUND

# Placing data into input Table
# We will place our Velocity information as a 'time' input
data_table = Table({"time": G1_velocity[(G1_velocity>6320) & (G1_velocity<6710)],
"flux": G1_flux[(G1_velocity>6320) & (G1_velocity<6710)]})

# Sonify the data
soni_obj = SoniSeries(data_table)
soni_obj.note_spacing = 0.07 # Speed of the played sound, increase number to slow it down
soni_obj.sonify()
# Play
soni_obj.play()
# If you want to save it, uncomment the line below, it will save `Galaxy.mp3` file into your working directory
#soni_obj.write('Galaxy.mp3')
```