# -*- coding: utf-8 -*-

#AGA0503 - Métodos Numéricos em Astronomia
#Professor: Alex Carciofi
#Aluna: Anne Viegas Rathsam
#No USP: 10873535
#Exercício de Programação 5 - EP5
#Problema 1 - Cálculo da largura equivalente de uma linha

############################## PACOTE UTILIZADO ##############################

import numpy as np
import matplotlib.pyplot as plt

######################## DEFINIÇÃO DA FUNÇÃO PRINCIPAL #######################

def main():
	''' Dado um arquivo contendo medidas de comprimento de onda e fluxo de uma
	linha espectral, o programa calcula a largura equivalente da linha pelo
	método dos retângulos.
	'''
	
	# Lendo os dados da tabela
	
	dados = np.loadtxt("halpha.txt") 

	lm = dados[:,0]
	flux = dados[:,1]
	
	n = len(lm)
	
	# Vamos criar um vetor h com os hi's
	
	h = []
	
	for i in range(1, n, 1):
		h_i = lm[i] - lm[i-1]
		h.append(h_i)
		
	# Agora é só calcular a integral pelo método dos retângulos
	
	width = 0
	
	# A função a ser integrada é 1 - (F_lambda/F_0)
	# Vamos calcular a integral
	
	for i in range(0, n-1, 1):
		width += h[i] *  (1 -flux[i]) 
	
	print("A largura equivalente da linha espectral é de", width, "ângstrons.")
	
	# Plot do perfil da linha
	
	plt.plot(lm, flux, color='m')
	plt.title("Perfil da linha espectral")
	plt.xlabel("$\lambda$ (ângstrons)")
	plt.ylabel("$F_\lambda / F_0$")
	plt.grid()
	plt.show()
	
main()