Mostrando postagens com marcador python. Mostrar todas as postagens
Mostrando postagens com marcador python. Mostrar todas as postagens

06 março 2023

Recursos em astronomia para usar em casa II (Python + TESS)

Análise da curva de luz da variável eclipsante Algol por meio de dados do telescópio TESS. Fonte: catálogo SIMBAD.

Como continuação da série "Recursos em astronomia para usar em casa" vamos aqui descrever como trabalhar com dados astronômicos distribuídos em larga escala na internet por meio da linguagem de programação Python.

Leitores que não tenham conhecimento dessa linguagem podem usar como referência de aprendizado [1-2]. Os comandos apresentados aqui podem ser reproduzidos usando o recurso Jupyter Notebooks [3] de modo online.

Nossa ideia aqui é demonstrar a rapidez com que dados de qualidade podem ser acessados, mesmo de telescópios espaciais. No caso, usaremos dados da missão TESS (satélite de busca de exoplanetas em trânsito, Fig. 1) [2] lançada em 2018 e que é formada por diversos telescópios que escaneiam o céu nas proximidades da Lua para estudos em fotometria estelar e busca de exoplanetas.

Fig. 1 Órbitas da missão TESS de busca de exoplanetas. A órbita de serviço final é mostrada em azul. Fonte: Astronomy magazine.

Captura da curva de luz TESS de Beta Persei.

Sabe-se que β Persei, também chamada "Algol", é uma estreva variável. Sua variabilidade é extrínseca, isto é, causada pelo fato de ser uma estrela binária (na verdade, uma estrela tripla). Por meio do catálogo SIMBAD [4], podemos acessar diversas informações sobre essa estrela pela busca "basic search" do link fornecido usando como texto de busca "beta Per". Uma informação relevante para acessar sua curva de luz é seu número TIC (TESS Input Catalog) que, para Algol, é 346783960.

Esse número é importante, pois dá acesso aos dados disponíveis em uma série de catálogos online. Como vimos no post anterior, isso pode ser feito através do arquivo Barbara A. Mikulski [5]. Uma outra maneira é por meio da biblioteca Python lightcurve [6]. Como a descrição desse tutorial diz, esse recurso em Python possibilita
Uma maneira amigável de analisar dados de séries temporais sobre o brilho de planetas, estrelas e galáxias. O pacote está focado em apoiar a ciência com os telescópios espaciais Kepler e TESS da NASA. 
Para permitir seu uso, devemos instalar a biblioteca antes com o comando:
import lightkurve as lk
Nesse caso, lk é apenas um nome para o "instanciamento" de uma classe que permite acessar os dados externamente.  Para se plotar gráficos, convém também carregar a biblioteca matplotlib por meio do comando:
import matplotlib.pyplot as plt
Esses comandos são colocados no início do script Python e devem ser precedidos pela instalação das bibliotecas por meio do comando pip install:

pip install lightkurve

Uma vez que os dados de uma certa estrela podem ser capturados em mais de um campo ao longo do tempo (ou seja, um mesmo setor do céu é periodicamente revisto pelo TESS), é necessário saber qual o "setor" onde os dados podem ser acessados. Para fazer isso, o seguinte comando pode ser utilizado:
search_result = lk.search_lightcurve(TIC_numb, author='SPOC')
TESS_sectors=[sec for sec in search_result.mission]
kindex=0
print('Available sector(s) for ', TIC_numb, '::')
for sec in TESS_sectors:
print('[', kindex, '] =',sec)
kindex+=1
a função search_lightcurve(TIC_numb, author='SPOC') toma um TICnumb de entrada e retorna uma estrutura "search_result" contendo inúmeros dados referentes ao TIC passado. Dentre eles, os setores TESS por uma busca recorrente em "search_result.mission". Em março de 2023, o código acima para TIC_numb='346783960' retorna:

Available sector(s) for  TIC 346783960 ::
[ 0 ] = TESS Sector 18
[ 1 ] = TESS Sector 58

O setor mais recente é o 58. Esse número é usado como entrada para uma nova chamada da função search_lightcurve com adição do parâmetro 'sector' correspondente:
search_result = lk.search_lightcurve(TIC_numb, author='SPOC', sector=sector_numb)
light_curve=search_result.download()

Todos os dados capturados pelo telescópio espacial para Algol no setor indicado são gravados na estrutura light_curve. Essa não é uma variável, mas um conjunto grande de dados (como uma classe) que contém a curva de luz. A curva de luz pertinente pode ser imediatamente colocada em um gráfico usando a biblioteca matplotlib e o comando

light_curve.normalize().plot(linewidth=0, marker='.', color='blue')
plt.show()

que resulta na Fig. 2 abaixo. Note que a função plot() permite diversos parâmetros de entrada como "color" que especifica uma cor para a linha do gráfico. Da maneira como está progamado acima, o gráfico resultante é feito por meio de pontos em azul.

Fig. 2 Fluxo normalizado para Algol obtido pelo telescópio espacial TESS obtido pelos códigos em Python descritos aqui. Esses gráfico mostra os máximos e mínimos da variável eclipsante. No eixo x o tempo desde a época 2457000 BTJD (data Juliana Baricêntrica) é utilizado e o valor resultante é lido em dias. 

A partir da curva de luz é possível, por exemplo, determinar o período de variação de brilho que corresponde ao tempo que o par principal em Algol leva para revolucionar em sua órbita em torno de um centro de massa comum. 

Os mínimos mais profundos (principais) ocorrem quando a estrela mais brilhante é eclipsada pela mais fraca, enquanto que os mínimos menos profundos (secundários) ocorrem nos momentos de eclipse da estrela mais fraca pela mais brilhante. Por causa disso, a forma e distância entre os mínimos contêm informação sobre a temperatura das estrelas do par. 

Periodograma da curva de luz

O leitor pode mensurar o período calculando a diferença de tempo entre os mínimos principais. Entretanto, a biblioteca lightcurve possui funções específicas que disponibilizam análise mais específicas da dinâmica da curva de luz. Um desses recursos é a função que calcula o periodograma da curva. Um periodograma é um diagrama de períodos fundamentais encontrados em uma série temporal. Uma curva senoidal pura, por exemplo, terá um periodograma composto por apenas uma frequência. 

O periodograma pode ser obtido pela função to_periodogram() que é membra de light_curve usando o código abaixo. Esse código também especifica os comando para se plotar o diagrama de períodos como mostrado na Fig. 3. 
pg = light_curve.to_periodogram(oversample_factor=10)
pg.plot(title='Espectro de períodos de '+TIC_numb)
plt.xlim(0,5)
plt.show()
Fig. 3 Periodograma ou diagrama de períoidos da curva de Algol mostrada na Fig.2 obtida por meio da chamada da função to_periodogram()

No eixo y da Fig. 3 encontramos a potência em fluxo de eletrons/segundo, enquanto que no eixo x a frequência na unidade 1/dia. Ocorrem diversos picos, correspondentes à distribuição de potência da curva de luz. O pico mais alto está próximo do período principal de oscilação e é comensurável com o período orbital de revolução do par. 

O período para o máximo é facilmente determinado como o membro period_at_max_power da estrutura pg retornada pela aplicação da função  to_periodogram(). Para monstrar na linha de comando esse período de máximo basta fazer:
print('Periodo na máxima potência', pg.period_at_max_power)
que retorna o valor 1.43618 dias. O período de revolução corresponde ao dobro desse valor, ou 2.87 dias.

Diagramas de fase

Uma importante ferramenta de pesquisa são os diagramas de fase "dobrada". Por meio desse recurso, escolhe-se um momento da curva de luz e um valor P de período e projeta-se, em um mesmo gráfico, as repetições da curva a cada P escolhido. Se P corresponder ao valor de uma periodicidade maior do brilho, então as diversas curvas se alinham umas sobre as outras, revelando a precisão de um ajuste obtido.

Para obter o diagrama de fase, invoca-se a função fold() que é membra de light_curve. Essa função  permite admite alterar o período de dobra por meio do parâmetro "period" e um múltiplo de fase, wrap_phase. A série de comandos abaixo realizada a dobradura de fase e plota um gráfico de pontos (scatter) usando como período o retorno de perido_at_max_power corrigido por um valor (1-eps), onde eps = 0.002. Note que esse valor eps é ajustado na mão. O valor 0.002 foi o que melhor retornou curvas sobrepostas como mostrado na Fig. 4.  
eps=0.002
light_curve.fold(period=2.*(1-eps)*pg.period_at_max_power,
wrap_phase=2).scatter()
print('Melhor período encontrado =',\
                (2.*(1-eps)*pg.period_at_max_power))
plt.show()
Fig. 4 Diagrama de fase dobrada (phase folding) para a curva de luz da Fig. 2 e período ajustado a partir do retornado segundo o periodograma da Fig. 3.


O melhor período encontrado foi assim 2.8666162 dias. Notamos que o diagrama de fases dobradas se altera se não houver especificação do período até, pelo menos, 4 casas depois do ponto decimal. Asim,  concluímos que o período pode ser definido com grande precisão a partir da análise realizada usando dobradura de fase. Esse períodos em unidades de tempo da Terra é igual a 2 dias, 20 horas e 47 minutos.

Um outro exemplo: sistema sextuplo Sistema TYC 7037-89-1 ou TIC 168789840

Como Algol é uma binária muito conhecida, aplicamos aqui o método descrito acima com sistema TYC 7037-89-1 ou TIC 168789840. Trata-se de uma singela estrelinha de mag. visual 11.5 na constelação do Eridanus, classificada como "binária eclipsante" no SIMBAD, mas que foi recentemente confirmado como um sistema de estrelas sextuplas [7]. Para isso substituimos o TIC de entrada pelo valor 168789840 e buscamos por dados no setor 32. A curva de luz resultante é conforme a Fig. 5.

Fig. 5 Curva de luz TESS para o sistema TYC 7037-89-1 exibindo uma complexa sequência de mínimos. Esse sistema corresponde a um conjunto de 6 estrelas que formam um sistema  sextuplo eclipsante.

O mais impressionante foi a confirmação de que se trata de  um sistema sextuplo (o que é raro) e, ainda mais, todos os componentes se alinham em relação à Terra para produzir eclipses! A estrutura do periodograma é mostrada na Fig. 6.

Fig. 6. Periodograma obtida pelo método descrito aqui para o sistema sextuplo. A presença de inúmeros picos secundários em torno do principal revela a existência de outros componentes na estrutura dos eclipses. 

O diagrama de fase ajustado (para eps = 0.002) é mostrado na Fig. 7.

Fig. 7 Diagrama de fase dobrada para o período principal correspondente ao máximo do periodograma e corrigido para o fator eps = 0.002. 

A presença de mínimos que não coincidem na Fig. 7 revela a existência de outros pares emaranhados na estrutura de variação de brilho. Esses foram separados e identificados como produzidos por eclipses periódicos de 3 pares de estrelas. 

O período principal encontrado com o código acima foi 1.5691781 dias.

Referências

[1] Devmedia (2022). Python Tutorial. https://www.devmedia.com.br/python-tutorial/33274 

[2] UFF (2009) Tutorial de Introdução ao Python. https://www.telecom.uff.br/pet/petws/downloads/tutoriais/python/tut_python_2k100127.pdf 

[3] https://jupyter.org/try-jupyter/lab/

[4] http://simbad.cds.unistra.fr/simbad/ 

[5] https://mast.stsci.edu/portal/Mashup/Clients/Mast/Portal.html

[6] https://docs.lightkurve.org/

[7] C. Gebhardt (2021). TESS reveals triple-binary eclipsing star system & Sun-like star with extremely close exoplanets. Ver: https://www.nasaspaceflight.com/2021/01/tess-triple-binary-eclipsing-star-system-close-exoplanets/



https://docs.lightkurve.org/tutorials/1-getting-started/what-are-periodogram-objects.html