El 1998, Saul Perlmutter, Brian Schmidt and Adam Reiss van confirmar
irrefutablement l'existènica de Dark Energy (d'acord amb els
models astronòmics que acceptem actualment).
L'equip de Saul va
mesurar el redshift (z, o
desplaçament al vermell) i la magnitud efectiva (o brillantor que
observem des de la Terra) d'algunes
Supernoves del
tipus Ia (SNeIa).
import pylab as pl
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import astropy #llibreria d'on importarem el model del nostre univers
from astropy.cosmology import FlatLambdaCDM
Emprarem les dades publicades a l'article de Saul Perlmutter et al: "MEASUREMENTS OF Ω AND Λ FROM 42 HIGH-REDSHIFT SUPERNOVAE". Més concretament, emprarem les que es troben a la taula 1 (SCP SNE IA DATA):
# tenim un arxiu en local amb les dades copiades del seu article
# l'importem per reading amb el nom 'dades'
with open('./practiques/perlmutter.txt', "r") as dades:
= pd.read_csv(dades, names=['z', 'Magnitud efectiva'], comment='#', sep='\s+')
dat
= dat[:10] #les 10 primeres files de dades
toprint #les imprimim per veure que les nostres dades les hem guardat correctament toprint
z | Magnitud efectiva | |
---|---|---|
0 | 0.458 | 23.11 |
1 | 0.354 | 22.38 |
2 | 0.425 | 22.13 |
3 | 0.374 | 21.72 |
4 | 0.420 | 22.55 |
5 | 0.372 | 22.26 |
6 | 0.378 | 22.58 |
7 | 0.453 | 23.17 |
8 | 0.465 | 23.33 |
9 | 0.498 | 23.71 |
Un cop comprovem que podem llegir les dades correctament, podem
calcular quina quantitat d'energia fosca hi ha a l'univers.
En primer lloc, necessitem un model que ens descrigui el desplaçament al
vermell (redshift) de cada supernova en funció de la distància (la sabem
a partir de la lluminositat de cada SN).
Donada una certa quantitat
d'aquesta energia fosca, emprem ΩΛ per denotar
la fracció de tota la matèria que es comporta com Dark
Energy.
def lumdist(z, olambda):
'''
Per aquest càlcul prenem:
Constant de Hubble: 70 (km/s)/Mpc
Omega matter (densitat de matèria no relativística): 1
Temperatura de CMB (Cosmic microwave background): 2.725 K
Paràmetres d'entrada:
z: redshift
olambda: la fracció de tota la matèria que es comporta com Dark Energy
Sortida:
'Distància lumínica' en Mpc a un redshift donat
'''
= FlatLambdaCDM(H0=70, Om0=1. - olambda, Tcmb0=2.725)
cosmo return cosmo.luminosity_distance(z)
def effmag(z, olambda, MB):
'''
Necessitem convertir la distància en la forma en la qual els astrònoms mesuren la brillantor
Paràmetres d'entrada:
z: redshift
olambda: la fracció de tota la matèria que es comporta com Dark Energy
MB: magnitud absoluta d'una estrella; B indica que estem referint-nos a la part de
radiació estelar que s'emet a la part de “blau” de l'espectre
Sortida:
Magnitud efectiva, en el cas de SNeIa correspon equivalentment amb la distància (per standard
candles, quan més tènue veiem un d'aquests objectes, més allunyat es troba de nosaltres)
'''
= lumdist(z, olambda) #emprem la funció anterior
DL return MB + 5. * np.log10(DL.value) #calculem a partir de la magnitud absoluta i la distància lumínica
# plot on eix x és el redshift i l'eix y la lluminositat, equivalent a la distància
# marquem amb 'x' de color negre i amb certa transparència on són les nostres supernoves
'z'], dat['Magnitud efectiva'], marker='x', color='k', lw=0.0, alpha=0.6)
pl.plot(dat[
#anomenem els nostres eixos
'Desplaçament al vermell (redshift)')
pl.xlabel('Magnitud efectiva')
pl.ylabel(
#calculate equation for quartic trendline
= np.polyfit(dat['z'],dat['Magnitud efectiva'] , 5)
z = np.poly1d(z)
p
= np.linspace(0.1,0.83,100) #fem les divisions que considerem necessàries entre els valors pels quals tenim dades
x
# afegim la trendline a la gràfica
'darkslategrey', label='Línia de tendència')
plt.plot(x, p(x),
= np.arange(0.01, 0.85, 0.01)
zs #energia fosca que afegim al nostre univers creat amb Python
0.67, 6.), c='r', label='67% Energia Fosca', linestyle='dashdot')
pl.plot(zs, effmag(zs, =4, frameon=False) #mostrem una llegenda descrivint el plot amb els labels
pl.legend(loc
#per aquest cas, hem de definir la zona que volem visualitzar de la nostra funció
13,25) plt.ylim(
(13.0, 25.0)
Pel mètode dels mínims quadrats, per aquest percentatge la línia
descrita pel programa és la que millor s'apropa a la realitat ( a la
línia de tendència descrita per una equació de grau quatre).
D'aquesta forma, acabem de calcular aproximadament la quantitat
d'energia fosca que composa el nostre univers d'acord amb les teories
acceptades en l'actualitat. Determinem així el potencial que té Python,
atès que amb 5 llibreries de Python i unes 30 línies de codi hem pogut
arribar a la mateixa conclusió que el grup d'astrònoms que van ser
otorgats el Premi Nobel de Física el 2011.