Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

FITS-header traduzido. #3

Open
wants to merge 2 commits into
base: main
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
306 changes: 306 additions & 0 deletions FITS_header.ipynb
Original file line number Diff line number Diff line change
@@ -0,0 +1,306 @@
{
"cells": [
{
"cell_type": "markdown",
"metadata": {
"id": "XT4sjhJ4SVOV"
},
"source": [
"# Editar um cabeçalho FITS\n",
"\n",
"## Autores\n",
"Adrian Price-Whelan, Adam Ginsburg, Stephanie T. Douglas, Kelle Cruz\n",
"\n",
"## Tradução\n",
"José Victor Farias\n",
"\n",
"## Objetivos do aprendizado\n",
"* Ler um arquivo FITS\n",
"* Restaurar metadados do cabeçalho FITS\n",
"* Editar o cabeçalho FITS \n",
"* Salvar o arquivo modificado como um arquivo FITS\n",
"\n",
"## Palavras-chave\n",
"FITS, arquivo de entrada/saída\n",
"\n",
"## Sumário\n",
"Esse tutorial descreve como ler e editar um cabeçalho FITS e, depois, gravá-lo de volta para o disco. Nesse exemplo, iremos mudar a palavra-chave ``OBJECT``."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "wAWWbhdOSVOa"
},
"outputs": [],
"source": [
"from astropy.io import fits"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Qipf9lBtSVOb"
},
"source": [
"``astropy.io.fits`` fornece muita flexibilidade para ler arquivos e cabeçalhos FITS, porém na maioria das vezes as funções de conveniência são o caminho mais fácil para acessar os dados. ``fits.getdata()`` lê apenas os dados de um aquivo FITS, mas com a palavra-chave `header=True`, o argumento lerá o cabeçalho."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "CQNIELhuSVOc"
},
"outputs": [],
"source": [
"data, header = fits.getdata(\"input_file.fits\", header=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "md3R0IbiSVOc"
},
"source": [
"Existe também uma função especifica para ler apenas o cabeçalho:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"scrolled": true,
"id": "rhLpzgKtSVOd"
},
"outputs": [],
"source": [
"hdu_number = 0 # HDU (header data unit) significa unidade de dados do cabeçalho.\n",
"fits.getheader('input_file.fits', hdu_number)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "amjdLFHFSVOd"
},
"source": [
"Mas `getdata()` pode obter os dados e o cabeçalho, então é um comando vantajoso de lembrar.Já que a HDU primária de um arquivo FITS deve conter os dados da imagem, agora armazenados em um array ``numpy``. O cabeçalho é armazenado em um objeto que atua como um dicionário python padrão."
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "tKn6b0-DSVOe"
},
"outputs": [],
"source": [
"# Mas hdu_number = 0 é a HDU primária. Quantas HDUs existem neste arquivo?\n",
"fits_inf = fits.open(\"input_file.fits\")\n",
"fits_inf.info() \n",
"fits_inf[0].header"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "H6a8TidISVOf"
},
"source": [
"Utilizar ``fits.open`` nos permite olhar mais genericamente os nossos dados. ``fits_inf[0].header`` nos dá a mesma saída como ``fits.getheader``. O que você recebe se digitar ``fits_inf[1].header``? Com base no ``fits_inf.info()``, você pode supor o que acontecerá se utilizar ``fits_inf[2].header``?"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "46BL7AIASVOg"
},
"source": [
"Agora vamos alterar o cabeçalho para dar-lhe o objeto correto:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "r1EOuczdSVOg"
},
"outputs": [],
"source": [
"header['OBJECT'] = \"M31\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "j_cJtTVlSVOh"
},
"source": [
"Finalmente, temos que escrever o arquivo FITS. Novamente, a função de conveniência para isto é o comando mais útil para lembrar:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "bbruh5B1SVOh"
},
"outputs": [],
"source": [
"fits.writeto('output_file.fits', data, header, overwrite=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "u5IDjA5pSVOh"
},
"source": [
"É isso; Terminou!"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "B8HEX17ASVOi"
},
"source": [
"Dois casos comuns e mais complicados que valem a pena mencionar (mas se suas necessidades são mais complexas, você deve consultar a documentação completa http://docs.astropy.org/en/stable/io/fits/).\n",
"\n",
"A primeira complicação é que o arquivo FITS que você está examinando e editando pode possuir múltiplas HDU's (extensões), no qual você pode especificar a extensão desta forma:"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "XNF86xKXSVOi"
},
"outputs": [],
"source": [
"data1, header1 = fits.getdata(\"input_file.fits\", ext=1, header=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "Ourki2axSVOi"
},
"source": [
"Isso fornecerá para você os dados e o cabeçalho associados à extensão `index=1` do arquivo FITS. Sem especificar um número, `getdata()` obterá a 0ª extensão (equivalente dizer `ext=0`)."
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "JJp3VEiqSVOj"
},
"source": [
"Outra dica útil é se você quer sobrescrever um arquivo FITS existente. Por padrão, `writeto()` não vai deixar você fazer isso, então você precisa explicitamente dar permissão usando como argumento a palavra-chave `clobber`:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "6m_Mv42RSVOj"
},
"outputs": [],
"source": [
"fits.writeto('output_file.fits', data, header, overwrite=True)"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "o2Snyi6ZSVOj"
},
"source": [
"Um exemplo final é se você deseja fazer uma pequena mudança em um arquivo FITS, como atualizar uma palavra-chave do cabeçalho, mas você não quer ler e reescrever no arquivo todo, o que pode levar um tempo. Ao invés disso, você pode usar o modo de leitura `mode='update'` para fazer isso:\n"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "mcdIxytnSVOk"
},
"outputs": [],
"source": [
"with fits.open('input_file.fits', mode='update') as filehandle:\n",
" filehandle[0].header['MYHDRKW'] = \"My Header Keyword\""
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "V87jfRelSVOk"
},
"source": [
"## Exercícios"
]
},
{
"cell_type": "markdown",
"metadata": {
"id": "z8pQScj6SVOk"
},
"source": [
"Leia o arquivo que você acabou de escrever e adicione três palavras-chave de cabeçalho:\n",
"\n",
"1. 'RA' para a Ascensão reta de M31\n",
"2. 'DEC' para a Declinação de M31\n",
"3. 'RADECSRC' com texto indicando onde você achou a RA/Dec (web URL, nome do livro texto, sua memória fotográfica, etc.)\n",
"\n",
"Então escreva o cabeçalho atualizado em um novo arquivo: "
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {
"id": "wto-auYGSVOl"
},
"outputs": [],
"source": [
""
]
}
],
"metadata": {
"astropy-tutorials": {
"author": "Adrian M. Price-Whelan <[email protected]>",
"date": "July 2013",
"description": "Demonstrates how to read in, edit a FITS header, and then write it back out to disk using astropy.io.fits.",
"link_name": "Editing a FITS header",
"name": "",
"published": true
},
"kernelspec": {
"display_name": "Python 3",
"language": "python",
"name": "python3"
},
"language_info": {
"codemirror_mode": {
"name": "ipython",
"version": 3
},
"file_extension": ".py",
"mimetype": "text/x-python",
"name": "python",
"nbconvert_exporter": "python",
"pygments_lexer": "ipython3",
"version": "3.6.7"
},
"colab": {
"name": "Cópia de FITS-header.ipynb",
"provenance": [],
"collapsed_sections": []
}
},
"nbformat": 4,
"nbformat_minor": 0
}