Comment calculer le rayonnement X (CXB) de fond d'espace avec Python en spécifiant la plage de flux

Contexte

Lors de l'estimation du rayonnement X (CXB) de fond d'espace, non seulement nous voulons connaître une partie de la luminosité totale, mais également combien lors de l'imagerie et de l'observation, à l'exclusion des sources de points lumineux détectés par l'imagerie. Reste sans décomposition spatiale? Besoin d'être estimé.

Ici, je vais vous montrer comment calculer soft (1-2 keV) et hard (2-10 keV) avec python selon https://iopscience.iop.org/article/10.1086/374335.

Code source

Pour ceux qui peuvent lire le code, voir Colab of calc_cxb.

python


#!/bin/evn python 

import matplotlib.pyplot as plt
import numpy as np

# THE RESOLVED FRACTION OF THE COSMIC X-RAY BACKGROUND A. Moretti, 
# The Astrophysical Journal, Volume 588, Number 2 (2003)
# https://iopscience.iop.org/article/10.1086/374335

smax = 1e-1 # maxinum of flux range (erg cm^-2 c^-1)
smin = 1e-17 # minimum of flux range (erg cm^-2 c^-1)
n = int(1e5) # number of grid in flux 
fcut = 5e-14 # user-specified maxinum flux (erg cm^-2 c^-1)

def calc_cxb(s,fcut=5e-14, ftotal_walker=2.18e-11, plot=True, soft=True):

	if soft: # 1-2 keV
		print("..... soft X-ray 1-2 keV is chosen")
		a1=1.82; a2=0.6; s0=1.48e-14; ns=6150
		foutname="soft"
	else: # hard 2-10 keV 
		print("..... hard X-ray 2-10 keV is chosen")
		a1=1.57; a2=0.44; s0=4.5e-15; ns=5300
		foutname="hard"


	n_larger_s = ns * 2.0e-15 ** a1 / (s**a1 + s0**(a1-a2)*s**a2) # Moretti et al. 2013, eq(2)

	if plot:
		F = plt.figure(figsize=(6,6))
		ax = plt.subplot(1,1,1)
		plt.plot(s, n_larger_s, ".", label="test")
		plt.xscale('log')
		plt.ylabel(r"$N(>S)/deg^2$")
		plt.xlabel(r"$S (erg cm^{-2} s^{-1})$")
		plt.yscale('log')
		plt.savefig(foutname + "_ns.png ")
		plt.show()

	diff_n_larger_s = np.abs(np.diff(n_larger_s))
	diff_s = np.diff(s)
	div_ns = np.abs(diff_n_larger_s/diff_s)

	s_lastcut = s[:-1]
	totalflux = np.sum(div_ns*s_lastcut*diff_s) # Moretti et al. 2013, eq(4)

	fluxcut = np.where(s > fcut)[0][:-1]
	particalflux = np.sum(div_ns[fluxcut]*s_lastcut[fluxcut]*diff_s[fluxcut])
	fdiff = totalflux - particalflux 
	fcxb = ftotal_walker - particalflux # Walker et al. 2016, eq(1)

	print("totalflux    = ", "%.4e"%totalflux, " [erg cm^-2 c^-1]", " from ", "%.4e"%smin, " to ",  "%.4e"%smax)
	print("particalflux = ", "%.4e"%particalflux, " [erg cm^-2 c^-1]", " from ", "%.4e"%fcut, " to ",  "%.4e"%smax)
	print("fdiff        = totalflux - particalflux     = ", "%.4e"%fdiff, " [erg cm^-2 c^-1]", " from ", "%.4e"%smin, " to ",  "%.4e"%fcut)	
	print("fcxb(2-10keV)= ftotal_walker - particalflux = ", "%.4e"%fcxb, " [erg cm^-2 c^-1]")

	if plot:
		F = plt.figure(figsize=(6,6))
		ax = plt.subplot(1,1,1)
		plt.plot(s[:-1], div_ns, ".", label="test")
		plt.xscale('log')
		plt.ylabel(r"$dN/dS/deg^2$")
		plt.xlabel(r"$S (erg cm^{-2} s^{-1})$")
		plt.yscale('log')
		plt.savefig(foutname + "_nsdiff.png ")		
		plt.show()

	return s, n_larger_s, diff_n_larger_s, div_ns, diff_s

#s = np.linspace(sexcl,smax,n)
s = np.logspace(np.log10(smin),np.log10(smax),n)

# plot soft band
s, n_larger_s, diff_n_larger_s, div_ns, diff_s = calc_cxb(s,fcut=fcut)
# plot hard band
s, n_larger_s, diff_n_larger_s, div_ns, diff_s = calc_cxb(s,fcut=fcut,soft=False)

Résultat d'exécution

1-2 keV

スクリーンショット 2020-11-04 11.23.26.png

2-10 keV

スクリーンショット 2020-11-04 11.23.34.png

Méthode de calcul

Comme prévu, si elle est linéaire, la mémoire est insuffisante et elle ne peut pas être calculée, donc dans le log de l'espace s (erg cm ^ -2 s ^ -1), l'intégration a utilisé une simple approximation rectangulaire.

スクリーンショット 2020-11-04 11.29.23.png

Cette fonction est calculée par n_larger_s = ns * 2.0e-15 ** a1 / (s ** a1 + s0 ** (a1-a2) * s ** a2).

スクリーンショット 2020-11-04 11.29.31.png

Cette intégration est calculée par totalflux = np.sum (div_ns * s_lastcut * diff_s).

fcxb = ftotal_walker --particalflux # Walker et al.2016, eq (1) est un bonus, et le CXB de 2-10 keV dans cet article est estimé, et le calcul est basé sur celui-ci.

Recommended Posts

Comment calculer le rayonnement X (CXB) de fond d'espace avec Python en spécifiant la plage de flux
Comment calculer la date avec python
[Python] Comment utiliser l'instruction for. Une méthode d'extraction en spécifiant une plage ou des conditions.
[Python] Explique comment utiliser la fonction range avec un exemple concret
Comment trier en spécifiant une colonne dans le tableau Python Numpy.
Comment effacer les caractères générés par Python
[Python] Comment spécifier l'emplacement de téléchargement avec youtube-dl
[Python] Comment réécrire le style de table avec python-pptx [python-pptx]
J'ai essayé de simuler la propagation de l'infection avec Python
Comment changer le fichier de configuration pour qu'il soit lu par Python
Comment entrer dans l'environnement de développement Python avec Vagrant
Comment démarrer Apache en spécifiant httpd.conf avec systemd (CentOS7, CentOS8)
[Introduction à Python] Comment obtenir des données avec la fonction listdir
[Introduction à Python] Comment fractionner une chaîne de caractères avec la fonction split
[Python] Explique comment utiliser la fonction format avec un exemple
Comment envoyer une requête à l'API DMM (FANZA) avec python
Comment calculer "xx time" en un seul coup avec Python Timedelta
Comment calculer le coefficient d'autocorrélation
Python: comment utiliser async avec
Comment obtenir la version Python
Comment démarrer avec Python
Le 16ème problème d'écriture en temps réel hors ligne a été résolu avec Python
[Python Kivy] Comment obtenir le chemin du fichier par glisser-déposer
Comment couper la partie inférieure droite de l'image avec Python OpenCV
Le 16ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Comment obtenir la différence de date et d'heure en secondes avec Python
[Introduction à Python] Comment trier efficacement le contenu d'une liste avec le tri par liste
[Python] Comment définir la taille de la fenêtre (cliente) dans le navigateur avec Selenium
[Introduction à Python] Comment écrire une chaîne de caractères avec la fonction format
Le 19ème comment écrire un problème de référence en temps réel hors ligne à résoudre avec Python
Le 15e problème d'écriture en temps réel hors ligne a été résolu avec python
python Comment notifier automatiquement par téléphone lorsque le système tombe en panne
Que faire lorsque la version Python est ancienne dans Cloud 9 créée par une autre personne
[Python] Définissez la plage du graphique avec matplotlib
Comment utiliser BigQuery en Python
Installer en spécifiant la version avec pip
Comment faire un test de sac avec python
Comment afficher le japonais python avec lolipop
Comment entrer le japonais avec les malédictions Python
[Python] Comment calculer MAE et RMSE
La route de la compilation vers Python 3 avec Thrift
Comment installer python3 avec docker centos
Comment démarrer le projet Python en 2020 (Windows WSL et Mac commun)
[Python] A créé une classe pour jouer des vagues de péché en arrière-plan avec pyaudio
[python] Comment trier par le Nth Mth élément d'un tableau multidimensionnel
[Python] Comment enregistrer des images sur le Web à la fois avec Beautiful Soup
Comment afficher dans toute la fenêtre lors de la définition de l'image d'arrière-plan avec tkinter
Remarque: Comment obtenir le dernier jour du mois avec python (ajouté le premier jour du mois)
[Astuces Python] Comment récupérer plusieurs clés avec la valeur maximale du dictionnaire
Comment obtenir une liste de fichiers dans le même répertoire avec python
[Introduction à Python] Comment obtenir l'index des données avec l'instruction for
Comment télécharger avec Heroku, Flask, Python, Git (4)
[python] Comment afficher les éléments de la liste côte à côte
Comment utiliser la bibliothèque C en Python
Comment lire un fichier CSV avec Python 2/3
Comment profiter de la programmation avec Minecraft (Ruby, Python)
[REAPER] Comment jouer à Reascript avec Python