[PYTHON] Un moyen simple d'analyser les fluctuations de temps AGN avec Google Colab avec détecteur PCA satellite RXTE

Contexte

Nous allons introduire une méthode de traçage utilisant des données de flux 2-10 keV acquises par un détecteur appelé PCA du satellite RXTE.

RXTE dispose également d'un détecteur de surveillance tout-ciel appelé ASM, mais dans le cas d'un corps céleste sombre tel que AGN (niveau mCrab), une analyse correcte des données ne peut pas être effectuée sans utiliser les données obtenues par l'observation de pointage de PCA.

Ces données à long terme ont des temps d'échantillonnage non uniformes et épars, mais nous allons également introduire une méthode d'interpolation finale pour générer un spectre de puissance dans ce cas. Cela ne suffit pas pour gérer des données rares, mais c'est une technique que vous obtiendrez si vous connaissez rapidement les tendances et les tendances.

Pour ceux qui peuvent lire le code, veuillez consulter mon google Colab.

Qu'est-ce que 3C273?

3C273 est le 273e corps céleste de la 3e édition du Cambridge Radio Source Catalog publié en 1959, avec un décalage vers le rouge z = 0,158. C'est un quaser dedans. Les observations ont confirmé qu'il existe un trou noir 800 millions de fois la masse du soleil au centre, à partir duquel un puissant jet est éjecté.

Ici, depuis https://cass.ucsd.edu/~rxteagn/ Je vais vous présenter comment faire une analyse des fluctuations temporelles à long terme du célèbre braseur appelé 3C273 avec google Colab.

Il y a des données de courbe de lumière dans.

Exemple de code

Acquisition de données et tracé de la courbe de lumière

plot_3C273


import urllib.request
url="https://cass.ucsd.edu/~rxteagn/3C273/F0210_3C273"
urllib.request.urlretrieve(url, '3C273.txt')

import numpy as np 
mjd, flux, err, exp = np.loadtxt("3C273.txt", comments='#', unpack=True)

import matplotlib.pyplot as plt
plt.errorbar(mjd,y=flux,yerr=err)

スクリーンショット 2020-11-16 19.21.14.png

Interpolation des données

python


mjd_uniform=np.linspace(np.amin(mjd), np.amax(mjd), 6000) #Divisez 6000 parties égales du début à la fin. Le nombre 6000 est approprié, mais un jour devient un bac.
interpolated_y = np.interp(mjd_uniform,mjd,flux) #L'interpolation spline est effectuée pour créer des données à intervalles égaux.
plt.errorbar(mjd,y=flux,yerr=err, label="raw data")
plt.errorbar(mjd_uniform,y=interpolated_y, label="uniformly interpolated data")
plt.legend()

Une fonction appelée interp de numpy complète les splines et génère des données à intervalles de temps égaux.

スクリーンショット 2020-11-16 19.23.11.png

Calcul du spectre de puissance

python


import matplotlib.mlab as mlab
fNum=len(mjd_uniform)
timebin=(mjd_uniform[1] - mjd_uniform[0]) * 24*60*60 # day to sec
print("timebin = ", timebin, "  fNum = ", fNum)
psd2_nofil, freqlist_nofil = mlab.psd(interpolated_y,fNum,1./timebin, sides='onesided', scale_by_freq=True)

plt.xscale("log")
plt.yscale("log")
plt.xlabel(r'Frequency (Hz)')
plt.errorbar(freqlist_nofil, psd2_nofil, fmt='c-', label="FFT for uniformly sampled data")

スクリーンショット 2020-11-16 19.24.14.png

C'est assez agressif, mais cela applique un spectre de puissance jusqu'aux basses fréquences.

Comment prendre une moyenne mobile

python


#Moyenne mobile sur 30 jours
# https://qiita.com/yamadasuzaku/items/fb744a207e7694d1598d
ave = np.convolve(interpolated_y, np.ones(30)/float(30), 'same')
plt.errorbar(mjd_uniform,y=interpolated_y, label="uniformly interpolated data")
plt.errorbar(mjd_uniform,y=ave, label="30-day average")
plt.legend()

Le moyen le plus simple de supprimer des composants haute fréquence sur une moyenne mobile est d'utiliser la convolution de numpy.

スクリーンショット 2020-11-16 19.25.34.png

Comparaison de la moyenne mobile et du spectre de puissance avant et après la prise

python


ave_psd, freq = mlab.psd(ave,fNum,1./timebin, sides='onesided', scale_by_freq=True)
plt.xscale("log")
plt.yscale("log")
plt.xlabel(r'Frequency (Hz)')
plt.errorbar(freqlist_nofil, psd2_nofil, fmt='c-', label="FFT for uniformly sampled data")
plt.errorbar(freqlist_nofil, ave_psd, fmt='r-', label="FFT for uniformly sampled data") 

スクリーンショット 2020-11-16 19.27.09.png

En prenant la moyenne mobile, il peut être confirmé que les composantes haute fréquence sont supprimées.

prime

En utilisant cela, il est possible de corréler facilement les données chronologiques multi-longueurs d'onde de 3C273. Les données sont rapides,

Il est publié au.

Cependant, comme le complément introduit ici est interpolé par un complément trapézoïdal pour générer des données à intervalles égaux, il est nécessaire d'examiner attentivement si l'approximation est appropriée ou non. (Il n'y a pas de problème au niveau de l'examen de la corrélation à peu près pour le moment, donc je pense qu'il est important d'essayer cela rapidement une fois que vous avez des données telles que des données expérimentales.)

Recommended Posts

Un moyen simple d'analyser les fluctuations de temps AGN avec Google Colab avec détecteur PCA satellite RXTE
Un moyen facile de gratter avec Python en utilisant Google Colab
Un moyen simple de créer un module d'importation avec jupyter
Comment analyser avec Google Colaboratory à l'aide de l'API Kaggle