Está en la página 1de 16

Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).

html

In [1]: import pandas as pd


from glob import glob
import numpy as np
from collections import OrderedDict
from plotly import graph_objs as go
import plotly.offline as plotly_offline
from plotly.subplots import make_subplots
plotly_offline.init_notebook_mode(connected=False)
import matplotlib.pyplot as plt

Galaxy Models
In [2]: #lectura del nombre de los archivos, en el orden en que aparecen.
filenames = sorted(glob('rc_*.dat'))
nombres=[]
for i in range (len(filenames)):
nombres.append(filenames[i].split(".")[0])

In [3]: #se almacena el conjunto de datos de cada galaxias en un diccionario

def read_dat_files(filename, sep):


return pd.read_csv(filename,skiprows=1,sep=sep,header=None,names=['R[Kpc]','
V[Km/s]'])

dict_ = OrderedDict((f, read_dat_files(f, ',') ) if i in [73,197] else (f, read


_dat_files(f, '\s+'))
for i,f in enumerate(filenames))
#pd.concat(dict_)

In [116]: # se cargan los archivos como un dataframe


def read_dat_files(filename, sep):
return pd.read_csv(filename,skiprows=1,sep=sep,header=None)

dataframes = [read_dat_files(f, ',') if i in [73,197] else read_dat_files(f, '\


s+') for i,f in enumerate(filenames)]

#quitar el .dat de los nombres


nombres=[]
for i in range (len(filenames)):
nombres.append(filenames[i].split(".")[0])

In [117]: # se concatenan todos los dataframes en uno solo


df = pd.concat(dataframes,sort=False,keys=nombres)
df.head()

Out[117]:
0 1

rc_100000 0 0.09 125.84

1 0.19 175.01

2 0.30 232.09

3 0.42 248.76

4 0.56 245.93

1 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [6]: #para encontrar los elementos que causaron problemas (para hallar vmax) por su s
eparacion por coma.
#esto se hizo recorriendo en diferentes rangos entre 0 y 228 el for de la siguie
nte celda->
print(list(dict_)[73])
print(list(dict_)[197])
#en caso de que se necesite hallar los indices
print(list(dict_.keys()).index("rc_500925.dat"))
print(list(dict_.keys()).index("rc_904036.dat"))

rc_500925.dat
rc_904036.dat
73
197

In [139]: #se halla la velocidad circular maxima de rotación para cada galaxia
#y el radio para ese valor de velocidad máxima.

vmax=[]
r_vmax=[]
for i in range(0,229):
#print(i)
vel=dataframes[i][1]
rad=dataframes[i][0]
velmax=max(dataframes[i][1])
VEL=vel.to_numpy()
RAD=rad.to_numpy()
index_of_maximum = np.where(VEL==velmax)
vmax.append(velmax)
r_vmax.append(RAD[index_of_maximum])
#vmax.append(np.around(velmax, decimals=2))

In [222]: vmax[0]

Out[222]: 254.96

2 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [274]: #se clasifica cada galaxia por su tipo de Hubble a partir de la velocidad que s
e obtuvo
#y el rango de velocidades segun Carrol & Ostlie

hubble_t=[]
for i in range (len(vmax)):
if vmax[i]>= 99 and vmax[i]<=304:
hubble_t.append('sc')
elif vmax[i]>=144 and vmax[i]<=330:
hubble_t.append('sb')
elif vmax[i]>= 163and vmax[i]<=367:
hubble_t.append('sa')
else:
hubble_t.append(-1)

## otra forma de clasificar, tomando menor error absoluto entre


#el vmax teorico y el vmax de los datos.
vmaxsa=299
vmaxsb=222
vmaxsc=175

hubble_t2=[]
for i in range(len(vmax)):
if vmax[i]>50 and vmax[i]<70:
hubble_t2.append('Im/Ir')

elif vmax[i]>80 and vmax[i]<120:


hubble_t2.append('Sd/Sm')

elif vmax[i]< 50:


hubble_t2.append(-1)

elif abs(vmax[i]-vmaxsa) < abs(vmax[i]-vmaxsb) and abs(vmax[i]-vmaxsa)<abs


(vmax[i]-vmaxsc):
hubble_t2.append('sa')

elif abs(vmax[i]-vmaxsb) < abs(vmax[i]-vmaxsa) and abs(vmax[i]-vmaxsb)<abs


(vmax[i]-vmaxsc):
hubble_t2.append('sb')

elif abs(vmax[i]-vmaxsc) < abs(vmax[i]-vmaxsa) and abs(vmax[i]-vmaxsc)<abs


(vmax[i]-vmaxsb):
hubble_t2.append('sc')

In [275]: len(hubble_t)

Out[275]: 229

3 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [276]: #se usa la relación de Tuly-Fisher para obtener la magnitud absoluta de cada ga
laxia, conociendo
#ya su clasificación.

M_B=[]
for i in range (len(hubble_t)):
if hubble_t[i]=='sa':
M_B.append(np.around(-9.95*np.log10(vmax[i]) +3.15, decimals=2))

elif hubble_t[i]=='sb':
M_B.append(np.around(-10.2*np.log10(vmax[i]) +2.71, decimals=2))

elif hubble_t[i]=='sc':
M_B.append(np.around(-11.0*np.log10(vmax[i]) +3.31, decimals=2))

elif hubble_t[i]==-1:
M_B.append(-1)

#otra forma de hallar M_B, a partir de la segunda clasificación anterior.

M_B2=[]
for i in range (len(hubble_t2)):
if hubble_t2[i]=='sa':
M_B2.append(np.around(-9.95*np.log10(vmax[i]) +3.15, decimals=2))

elif hubble_t2[i]=='sb':
M_B2.append(np.around(-10.2*np.log10(vmax[i]) +2.71, decimals=2))

elif hubble_t2[i]=='sc':
M_B2.append(np.around(-11.0*np.log10(vmax[i]) +3.31, decimals=2))

elif hubble_t2[i]=='Im/Ir':
M_B2.append(-1)

elif hubble_t2[i]=='Sd/Sm':
M_B2.append(-1)

elif hubble_t2[i]==-1:
M_B2.append(-1)

In [277]: #se obtiene la luminosidad de cada galaxia, a partir de la relación de pogson


M_B_sun= 5.47
L_B=[]

for i in range(len(M_B)):
if M_B[i]== -1:
L_B.append(-1)
else:
L_B.append(np.format_float_scientific(np.float32( 10**(-(M_B[i]-M_B_su
n)/2.5) )))

#la luminosidad a partir de la segunda clasificación del tipo de galaxia.


L_B2=[]
for i in range(len(M_B2)):
if M_B2[i]== -1:
L_B2.append(-1)
else:
L_B2.append(np.format_float_scientific(np.float32( 10**(-(M_B2[i]-M_B_s
un)/2.5) )))

4 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [278]: # Estimación de la masa de cada galaxia en los primeros 8 Kpc, asumiendo que la
materia
#oscura no contribuye a ella.

G=6.674e-20 #km^3 Kg^-1 s^-2


kpc_km=3.086e16 #convierte de kiloparcek a kilometros.
Msun=1.989e30 #Kg

#Se obtiene la masa mediante una una aproximacion kepleriana, al interior de un


radio de 8kpc
Masa_Gal=[]

#Rad_avarr=np.asarray(Rad_av) #para poder hacer operaciones con cada elemento


#Vel_avarr=np.asarray(Vel_av)

for i in range(len(vmax)):
M=((vmax[i])**2*(8*kpc_km))/(G)
Masa_Gal.append(np.format_float_scientific(np.float32(M/Msun)))

In [279]: # --------- se obtiene la escala de longitud radial caracteristica---------- #

5 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [280]: # ---------- se obtiene la masa de gas de cada Galaxia---------------#

#calculemos el radio a R_{25}

#M_B=np.asarray(M_B)

#####MASA DE GAS USANDO R_{25}########

#primero hallamos R_{25},como parte del analisis


R25=[]
for i in range(len(M_B)):

if M_B[i]==-1:
R25.append('_')
else:
R=10**(-0.249*M_B[i]-4.0)
R25.append(R)

#hallamos la masa de gas teniendo en cuenta la razon entre la masa de gas y la


masa total
#razon dada en el Carrol&Ostlie

Masa=np.array(Masa_Gal,dtype=float) # para poder operar con la masa


Mgas=[]
for i in range(len(hubble_t)):

if hubble_t[i]==-1:
Mgas.append(-1)

elif hubble_t[i]=='sa':
Mgas.append(Masa[i]*0.04)

elif hubble_t[i]=='sb':
Mgas.append(Masa[i]*0.08)

elif hubble_t[i]=='sc':
Mgas.append(Masa[i]*0.16)

########MASA DE GAS TENIENDO EN CUENTA QUE APROX 1 LUMIN SOLAR ES IGUAL A UNA
####### MASA SOLAR con la L_B que proviene de la primera clasificacion del tipo
de hubble.
Masa_gas=[]

for i in range(len(Masa)):
if L_B[i]==-1:
Masa_gas.append(-1)
else:
L_B[i]=np.array(L_B[i],dtype=float)
Masa_gas.append(np.format_float_scientific(np.float32(Masa[i]-L_B[i])))

#otra Masa de gas, hallada igual que la anterior pero con con L_B=L_B(de la seg
unda
#forma de clasificar)

Masa_gas2=[]
for i in range(len(Masa)):
if L_B2[i]==-1:
Masa_gas2.append('NaN')
else:
L_B2[i]=np.array(L_B2[i],dtype=float)
Masa_gas2.append(np.format_float_scientific(np.float32(Masa[i]-L_B2
[i])))

##

6 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [282]: # ----------- se estima la tasa de formación estelar de cada Galaxia


------------#

r_vmax_filt = [r_v[0]*kpc_km for r_v in r_vmax]


rad_arcsec=206265 #conversion de radianes a arco segundos,
vmax=np.asarray(vmax)

W=[]
for i in range(len(vmax)):
w=vmax[i]/r_vmax_filt[i] #velocidad angular en unidades de radianes/segund
o
W.append(w)

W = np.array(W, dtype=np.float64)
W=W*206265
Mgas = np.array(Mgas, dtype = np.float64)

t=2*np.pi*(rad_arcsec)/W
t_d=0.1*2*np.pi*(rad_arcsec)/W

star_formation=0.1*(vmax/220.0)**(2.2)*((Mgas)/t_d)

In [283]: star_formation[star_formation < 0] = np.nan


Mgas[Mgas < 0] = np.nan
M_B2_np = np.array(M_B2, dtype=np.float64)
M_B2_np[M_B2_np == -1] = np.nan

In [284]: #data= {'Galaxy ID': nombres, 'Max Rotation Velocity(km/s)':vmax,'Hubble Type':


hubble_t,'hubble_t2':hubble_t2,
# 'M_B':M_B,'M_B2':M_B2,'Masa':Masa,'L_B':L_B,'L_B2':L_B2,'R25':R25,'Mgas
':Mgas,'Masagas':Masa_gas,
# 'Masagas2':Masa_gas2}

#dataf = pd.DataFrame (data,columns=['Galaxy ID','Max Rotation Velocity(km/


s)','Hubble Type','hubble_t2',
#'M_B','M_B2','Masa','L_B','L_B2','R25','Mg
as','Masagas','Masagas2'],index=None,)

data={'Galaxy ID': nombres, 'Max Rotation Velocity(km/s)':vmax,'Masa':Masa, 'R_


25':R25,
'Hubble Type_1':hubble_t,'Hubble Type_2':hubble_t2,'M_B2':M_B2,'M_B':M_
B,'M_gas':Mgas,'M_gas1':Masa_gas,
'M_gas2':Masa_gas2,'L_B':L_B,'L_B2':L_B2}

dataf = pd.DataFrame (data,columns=['Galaxy ID','Max Rotation Velocity(km/s)','


Masa','R_25'
,'Hubble Type_1','Hubble Type_2','M_B2','M_
B','M_gas',
'M_gas1','M_gas2','L_B','L_B2'],index=None,)

7 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [305]: dataf.head(20)

Out[305]:
Max Rotation Hubble Hubble
Galaxy ID Masa R_25 M_B2 M_B M_gas
Velocity(km/s) Type_1 Type_2

0 rc_100000 254.960000 1.208952e+11 58.4575 sc sb -21.84 -23.16 1.934323e+10 -1.6224402e+11

1 rc_100224 263.320000 1.289533e+11 64.0737 sc sa -20.93 -23.32 2.063253e+10 -1.9914197e+11

2 rc_100253 217.199997 8.773736e+10 37.8094 sc sb -21.13 -22.40 1.403798e+10 -5.286739e+10

3 rc_100342 198.970000 7.362751e+10 29.718 sc sb -20.74 -21.98 1.178040e+10 -2.1871745e+10

4 rc_100598 132.010000 3.240997e+10 9.66006 sc sc -20.02 -20.02 5.185595e+09 1.6706339e+10

5 rc_100660 188.350006 6.597755e+10 25.456 sc sc -21.71 -21.71 1.055641e+10 -8.495637e+09

6 rc_100891 229.930000 9.832324e+10 44.1398 sc sb -21.38 -22.67 1.573172e+10 -8.197853e+10

7 rc_101068 270.180000 1.357598e+11 68.6373 sc sa -21.04 -23.44 2.172157e+10 -2.3067773e+11

8 rc_101097 357.780000 2.380658e+11 34.8931 sa sa -22.26 -22.26 9.522632e+09 1.1447107e+11

9 rc_101365 274.770000 1.404118e+11 71.8588 sc sa -21.12 -23.52 2.246588e+10 -2.5404554e+11

10 rc_101417 255.910000 1.217978e+11 59.1317 sc sb -21.85 -23.18 1.948765e+10 -1.6660536e+11

11 rc_101808 207.000000 7.969033e+10 33.1383 sc sb -20.91 -22.17 1.275045e+10 -3.40724e+10

12 rc_102403 136.650000 3.472835e+10 10.5881 sc sc -20.18 -20.18 5.556537e+09 1.6531346e+10

13 rc_102590 312.190000 1.812604e+11 45.6846 sb sa -21.67 -22.73 1.450083e+10 -9.28568e+09

14 rc_102708 239.920000 1.070528e+11 49.5028 sc sb -21.57 -22.87 1.712844e+10 -1.0971766e+11

15 rc_102841 342.660000 2.183694e+11 31.2918 sa sa -22.07 -22.07 8.734775e+09 1.1461654e+11

16 rc_102855 195.830000 7.132198e+10 28.3857 sc sc -21.90 -21.90 1.141152e+10 -1.739362e+10

17 rc_102903 293.050000 1.597160e+11 85.8361 sc sa -21.40 -23.83 2.555456e+10 -3.650915e+11

18 rc_103031 297.620000 1.647362e+11 89.3511 sc sa -21.46 -23.90 2.635780e+10 -3.9502135e+11

19 rc_103034 199.530000 7.404254e+10 29.8889 sc sb -20.75 -21.99 1.184681e+10 -2.234036e+10

In [ ]: max(R25)

Análisis

8 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

9 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

La anterior tabla muestra todos los valores calculados, algunas variables por varios métodos los cuales explicaremos a
continuación:

A partir del valor de la velocidad máxima circular, se determina la masa de la Galaxia contenida en los primeros 8
Kiloparsecs, usando una aproximación kepleriana, lo cual es fisicamente posible porque en esta región predomina el
contenido de materia bariónica por encima de materia oscura. en la tabla se observa que el orden de magnitud para todas
las galaxias Sa, Sb, Sc esta entre 109 y 1012 , lo que esperamos de la teoria.

Para la clasificacion de las galaxias segun su tipo de Hubble,primero se determinó si su velocidad máxima se encuentra
en el rango que proveen Carrol & Ostlie en An introduction to modern Astrophysics, así: 𝑠𝑎 ∼ 163 − 367[𝑘𝑚/𝑠]
,𝑠𝑏 ∼ 144 − 330[𝑘𝑚/𝑠] ,𝑠𝑐 ∼ 99 − 304[𝑘𝑚/𝑠] , como se observa las sc pueden tomar un gran rsngo de velocidades
que perfectamente pueden abarcar valores de las galaxias tipo sa y sb, por lo cual necesitariamos datos fotómetricos
para afirmar con presición el tipo de hubble, con los cuales no contamos y como se observa en la tabla en efecto la
mayoría en la columna 𝐻𝑢𝑏𝑏𝑙𝑒𝑇 𝑦𝑝𝑒1 están clasificadas como tipo sc, por lo que se hace necesario buscar otra forma de
clasificar las galaxias a partir de los datos que tenemos.

En la columna 𝐻𝑢𝑏𝑏𝑙𝑒𝑇 𝑦𝑝𝑒2 , se determinó el tipo de hubble teniendo en cuenta el valor de velocidad máximo que en
promedio tiene cada tipo de Galaxia según Carrol & Ostlie, para ello se halla el error absoluto entre la velocidad máxima
teórica y la que calculamos a partir de nuestros datos, con esta última examinamos los errores, para la velocidades de
Sa, Sb, y Sc, según la teoría y la cual arroje el menor valor absoluto se clasifica de esta forma la Galaxia. Se aprecia
ahora en la tabla que muchas de las cuales habian sido clasificadas como sc con el anterior método, con este cambian a
sb y sc.En esta columna también se hace la clasificacion para las tipo sd/sm y para las Irregulares, las cuales presentan
el rango de menor valor de velocidad máxima.

Teniendo la Galaxia clasificada procedemos a usar la relación Tully-Fisher, la cual habla de una correspondendia entre la
luminosidad de una galaxia espiral y su velocidad máxima de rotación, dicha relación es empirica, aunque bajo ciertas
aproximaxiones se puede deducir de la teoría. Dadas las ecuaciones presentadas y usadas en el código se halla la
magnitud absoluta de cada galaxia en la banda B. en la tabla se presenta como M_B2. Obsérvese de la tabla interactiva
de la siguiente celda, que los rangos de magnitudes están entre -17 a -23,siendo el valor máximo para estos datos de
-23.49 correspondiente a una galaxia tipo Sa, lo esperado de la teoría.

por otro lado quise agregrar la columna 𝑀𝐵 en la tabla. que son los valores calculados de la magnitud absoluta con la
estimación erronea del tipo de Hubble, que se menciono previamente, analizando los valores en efecto reitera que dicha
clasificación carece de presición, por ejemplo, se aprecian muchas galaxias que siendo de tipo sc alcanzan valores de
magnitud de -23, valor que solo deberia ser alcanzado por las Sa y Sb de acuerdo a la teoría,y lo cual si se aprecia en la
segunda clasificación que se hace.

La luminosidad se calcula usando la relación de pogson y los valores obtenidos previamente de magnitud absoluta.

Para la escala de longitud radial caracteristica se halla el radio 𝑅25 , que es otro patrón que emerge del análisis de datos
al igual que la relación T-F. Este expresa como el radio incrementa con la luminosidad independiente del tipo de Hubble.
La columna 𝑅25 está en kiloparsec y expresa el radio al cual la galaxia alcanza un nivel de brillo superficial de 25
𝐵 − 𝑚𝑎𝑔 𝑎𝑟𝑐𝑠𝑒𝑐−2 .

Para calcular la masa de gas de las Galaxias. La primera que hallé es la mostrada en la columna Mgas1, con los valores
erroneos de la clasificación de Hubble, que de hecho en esta parte fue donde me dí cuenta que la clasificación estaba
mal porque daban valores negativos de la masa del gas, indicando que la masa de las estrellas era mayor a la masa total.
Para hallar dicha masa supuse: 1.todas las estrellas en la galaxia son de tipo solar 2.1 masa solar es equivalente a 1
luminosidad solar. 3.la masa total contenida en los 8 kiloparsec es igual a la masa de las estrellas mas la masa del gas.
Cuando las anteriores asunciones se usan para calular la masa de gas con la correcta clasificación de Hubble, dan
valores muy razonables para dicho valor, encontrando valores entre 109 y 1010 $M{\odot}$, pero dan algunos valores
negativos, indicando que la masa de las estrella es mayor a la total, y hay que tener en cuenta que estamos haciendo
suposiciones gruesas a datos reales, entonces es razonable que aparezcan dichas situaciones.

𝑀𝑔𝑎𝑠
Dado lo anterior, decidí tambien ver los valores de la masa de gas obtenida a partir de los valores teóricos de 𝑀 según
𝑡𝑜𝑡
el tipo de Hubble, aqui la masa total es la masa contenida al interior de 𝑅25 ,y esta sería nuestra primera suposición,
asumir que a un Radio de 8 kpc cada galaxia alcanza un nivel de brillo superficial de 25 𝐵 − 𝑚𝑎𝑔 𝑎𝑟𝑐𝑠𝑒𝑐−2 , lo cual ya
sabemos no es cierto, pues ya se calculó 𝑅25 y los valores de este fluctuan entre 5 kpc y 50 kpc, a pesar de esto los
valores de la masa de gas son razonables, y van desde 109 y 1010 𝑀⊙ .

En la siguiente tabla se muestran los valores que se mencionan antes, son los que mas concuerdan con la teoría, y

10 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [289]: fig = go.Figure(data=[go.Table(header=dict(values=['GalaxyID',


'$Max Rotation Velocity(km/s)$','Masa','Hubble Type','$M_
{B}$','$L_{B}$','$R_{25}$',
'$M_{gas}$']
,fill_color='plum'),cells=dict(values=[ nombres,vmax,Masa,hubbl
e_t2,M_B2,L_B2,
Mgas,R25],
fill_color='lightblue'))
])
fig.show()

GalaxyID Masa Hubble Type

rc_100000 254.96 120895190000 sb -21.84 83946000000


rc_100224 263.32 128953340000 sa -20.93 36307804000
rc_100253 217.1999969 87737360000 sb -21.13 43651584000
rc_100342 198.97 73627510000 sb -20.74 30478950000
rc_100598 132.01 32409967000 sc -20.02 15703628000
rc_100660 188.3500061 65977553000 sc -21.71 74473190000
rc_100891 229.93 98323240000 sb -21.38 54954086000
rc_101068 270.18 135759840000 sa -21.04 40179080000
rc_101097 357.78 238065810000 sa -22.26 123594740000
rc_101365 274.77 140411780000 sa -21.12 43251384000
rc_101417 255.91 121797796000 sb -21.85 84722745000

11 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [290]: fig = go.Figure()

# Add traces
fig.add_trace(go.Scatter(y=np.log10(star_formation), x=M_B2_np,
mode='markers',
name='markers'))
fig.update_xaxes(range=[-17, -23])

fig.update_layout(yaxis_title="$Log[SFR]$",xaxis_title="$M_{B}$",
font=dict(family="Courier New, monospace",size=18, color="#7f7f7f"))
fig.show()

−3.5

−4

−4.5

−5

−5.5

−6

−6.5

La gráfica muestra la tasa de formación estelar en unidades de Masas solares por segundo como función de la magnitud
absoluta en la banda azul, se observa que la tasa de formación estelar es mayor para galaxias con magnitudes absolutas
menores, es decir luminosidades mas grandes, que es lo que se esperaría de la teoría, si una galaxia esta formando mas
estrellas que otra entonces dicha galaxia tendra emisiones mas fuertes en las longitudes de onda azul.

Sloan Digital Sky Survey

In [190]: Ellip= pd.read_csv('Elipticals_SDSS.txt',skiprows=1,names=['Galaxy ID','g','r


','Line Flux',
'Continuum','Halpha_rest','Line z','Halpha_obs','Flux_obs
']
,delim_whitespace=True)

12 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [191]: Spir= pd.read_csv('Spirals_SDSS.txt',skiprows=1,names=['Galaxy ID','g','r','Lin


e Flux',
'Continuum','Halpha_rest','Line z','Halpha_obs','Flux_obs
']
,delim_whitespace=True)

In [196]: g_r_s=Spir['g']-Spir['r']
g_r_e=Ellip['g']-Ellip['r']
Flux_s= Spir['Line Flux']
Flux_e=Ellip['Line Flux']

In [197]: plt.plot(g_r_s, Flux_s,'o',color='deepskyblue',label='Spirals')


plt.plot(g_r_e,Flux_e,'o',color='brown',label='Ellipticals')
plt.xlabel('$g-r$')
plt.ylabel('Line Flux $[10^{-17}erg/cm^{2}]$')
plt.legend()
plt.grid()

Valores pequeños de g-r, indican que el objeto emite más en longitudes de ondas hacia el verde, mientras que valores
mas grandes de g-r muestran que el objeto presenta emisiones mas fuertes hacia el rojo. En la gráfica se aprecia
claramente que las espirales, se agrupan en regiones de g-r menores a las elippticas, lo que corrobora lo que hemos
hablado en clase sobre la emisión de ellas hacia longitudes de onda corta, debido a su presencia de estrellas jovenes y a
sus tasa de formación de estrellas. Se aprecia también que el flujo de la linea en 𝐻 − 𝑎𝑙𝑝ℎ𝑎 para las espirales es
signifivatimente mayor para ellas que para las elípticas, que es lo esperado de la teoría.

Finalmente notemos que las elípticas viven en un rango mas grande de g-r que las espirales, pero con muy bajas
intensidades de flujo, esto de otra forma confirma lo que hemos mencionado en clase: aunque en las elípticas esperamos
encontrar comunmente estrellas viejas y rojas no quiere decir que allí no vayamos encontrar estrellas azules, emitiendo a
frecuencias muy altas, si las hay, pero en un proporción mas baja respecto a las espirales. Clasificando los espectros de
las galaxias se podía apreciar en muchas galaxias elipticas que su espectro tenía emisiones no nulas de H-alpha.

In [199]: #Determinación del Redshift a partir de la long. de onda del hidrogeno alpha

#se une la lista de espirales y elipticas


Gal= pd.concat([Ellip,Spir],ignore_index=True)

lamb_obs= Gal['Halpha_obs']
lamb_rest=Gal['Halpha_rest']

sum_lamb = lamb_obs.subtract(lamb_rest, fill_value=0)


z = sum_lamb.div(lamb_rest)
Gal.insert(9, "z",z,True)

13 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [200]: #correcion K, asumiendo que el espectro de la galaxia es plano, es decir


#que F(lambda)= constante

K_cor= -2.5*np.log10(1+z)
z=Gal['z']
k_cor= -2.5*np.log10(1+z)

Gal.insert(10, "K-correction",k_cor,True)

In [201]: g_r= Gal['g'].subtract(Gal['r'], fill_value=0)


Gal.insert(3, "g-r",g_r,True)

In [202]: Gal

Out[202]:
Line
Galaxy ID g r g-r Continuum Halpha_rest Line z Halpha_obs
Flux

0 SDSS_J010834.46+073342.1 18.08 17.00 1.08 9.8040 17.2100 6564.6 0.141200 7493.764

1 SDSS_J085553.39+420027.4 17.02 16.09 0.93 -3.6360 35.3900 6564.6 0.083660 7115.411

2 SDSS_J075954.45+270059.9 20.23 18.55 1.68 1.2050 5.7450 6564.6 0.321500 8677.607

3 SDSS_J122008.98+202403.3 18.39 17.65 0.74 0.2755 7.2150 6564.6 0.030870 6767.060

4 SDSS_J100012.74+202040.1 18.83 17.54 1.29 0.2416 9.0290 6564.6 0.189500 7810.881

5 SDSS_J075956.05+192454.1 17.97 16.77 1.20 -74.3300 57.3500 6564.6 -0.000072 6564.475

6 SDSS_J115847.31+102635.1 18.50 17.35 1.15 18.6100 15.2900 6564.6 0.169500 7678.917

7 SDSS_J095846.52+102452.7 25.47 23.21 2.26 -0.6765 0.3043 6564.6 -0.000500 6564.475

8 SDSS_J074004.07+192739.7 21.88 19.94 1.94 -3.2550 2.5540 6564.6 0.453100 9538.937

9 SDSS_J074241.01+492908.4 20.73 18.97 1.76 22.8300 5.2690 6564.6 0.392500 9143.237

10 SDSS_J121958.59+182446.7 18.72 17.73 0.99 102.4000 6.0900 6564.6 0.192600 7828.887

11 SDSS_J085607.22+420210.9 17.81 16.96 0.85 233.1000 15.0300 6564.6 0.138000 7469.000

12 SDSS_J085610.09+415943.0 18.23 17.34 0.89 214.1900 15.1200 6564.6 0.142300 7498.942

13 SDSS_J084357.07+415938.2 18.30 17.48 0.82 102.6000 14.0700 6564.6 0.102000 7234.358

14 SDSS_J075552.33+295938.9 18.36 17.51 0.85 250.8000 13.7100 6564.6 0.178000 7693.076

15 SDSS_J075953.82+264720.6 15.94 15.18 0.76 517.5000 35.1400 6564.6 0.047400 6875.432

16 SDSS_J080011.25+234149.1 18.77 17.65 1.12 53.6100 8.6480 6564.6 0.193000 7834.296

17 SDSS_J075950.57+234049.8 18.64 17.52 1.12 47.9500 11.3200 6564.6 0.156100 7589.270

18 SDSS_J073204.42+390309.8 18.62 17.79 0.83 122.7000 5.8810 6564.6 0.146200 7524.887

19 SDSS_J113949.59+550030.4 16.81 15.94 0.87 128.6000 31.7000 6564.6 0.076490 7068.056

14 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [304]: fig = go.Figure()


fig.add_trace(go.Scatter(y=-1*Gal['K-correction'], x=Gal['z'],
mode='markers',
name='markers'))
fig.update_layout(yaxis_title="$K-correction$",xaxis_title="$z$",
font=dict(family="Courier New, monospace",size=18, color="#7F7F7F"))

fig.show()

0.4

0.35

0.3

0.25

0.2

0.15

0.1

Notemos que bajo la aproximación de 𝑓(𝜆) constante la 𝑐𝑜𝑟𝑟𝑒𝑐𝑐𝑖ó𝑛 − 𝑘 toma la forma: 𝐾 = −2.5𝑙𝑜𝑔(1 + 𝑧) y la
𝑑
magnitud abosluta bajo dicha corrección sería igual 𝑀 = 𝑚 − 5 ∗ 𝑙𝑜𝑔 10𝑝𝑐 − 𝐾 , como se le esta restando el negativo
de k y este ya es negativo entonces en realidad le estamos sumando valores de k a la magnitud absoluta, lo que indicada
que al tener en cuenta el redshift la galaxia parecera menos luminosa de lo que es. por eso tiene sentido que a redshift
mayores, es decir a medida que se hacen obervaciones del universo más jóven la corrección k es mayor y por tanto las
galaxias se obervaran mas tenues por cuenta de la expansión del universo.

15 de 16 27/4/2020 11:44
Parcial_Laura_Mannuela_ file:///C:/Users/Alberto/Downloads/Parcial_Laura_Mannuela_(1).html

In [303]: fig = go.Figure()


fig.add_trace(go.Scatter(y=-1*Gal['K-correction'], x=Gal['g-r'],
mode='markers',
name='markers'))
fig.update_layout(yaxis_title="$K-correction$",xaxis_title="$g-r$",
font=dict(family="Courier New, monospace",size=18, color="#7F7F7F"))
fig.show()

0.4

0.35

0.3

0.25

0.2

0.15

0.1

La gráfica muestra que la corrección k varia aproximadamente de forma lineal con el indice de color 𝑔 − 𝑟.Ahora, ¿tiene
esto sentido físico?. Como se mencionó anteriormente valores de 𝑔 − 𝑟 mayores estan indicando longitudes de onda más
rojas, y de cuenta de la expansión del universo observamos los objetos corridos hacia longitudes de onda rojas, entonces
tiene todo el sentido físico que al observar objetos con indices de color 𝑔 − 𝑟 grandes, tendran una corrección K mayor
debido a la expansión,y si miramos la ecuación de magnitud absoluta, lo corrobora, dichos objetos tendrán luminosidades
más pequeñas.

Profe, no alcancé a hacer el punto dos. lo siento, espero terminarlo para mañana para la socialización que haremos en
clase.

16 de 16 27/4/2020 11:44