Fermi-LAT via FermiPyLike¶
In this Example we show how to use the fermipy plugin in threeML. We perform a Binned likelihood analysis and a Bayesian analysis of the Crab, optimizing the parameters of the Crab Pulsar (PSR J0534+2200) keeping fixed the parameters of the Crab Nebula. In the model, the nebula is described by two sources, one representing the synchrotron spectrum, the othet the Inverse Compton emission. In this example we show how to download Fermi-LAT data, how to build a model starting from the 4FGL, how to free and fix parameters of the sources in the model, and how to perform a spectral analysis using the fermipy plugin.
[2]:
%%capture
from threeML import *
The Fermi 4FGL catalog¶
Let’s interrogate the 4FGL to get the sources in a radius of 20.0 deg around the Crab
[4]:
lat_catalog = FermiLATSourceCatalog()
ra, dec, table = lat_catalog.search_around_source("Crab", radius=20.0)
table
Trying https://heasarc.gsfc.nasa.gov/cgi-bin/vo/cone/coneGet.pl?table=fermilpsc&
[4]:
name | source_type | short_source_type | ra | dec | assoc_name | tevcat_assoc | Search_Offset |
---|---|---|---|---|---|---|---|
deg | deg | ||||||
object | str32 | object | float64 | float64 | object | object | float64 |
4FGL J0534.5+2200 | pulsar, identified by pulsations | PSR | 83.6367 | 22.0149 | PSR J0534+2200 | Crab pulsar | 0.2022 |
4FGL J0534.5+2201s | pulsar wind nebula | PWN | 83.6331 | 22.0199 | Crab Nebula | Crab | 0.3243 |
4FGL J0534.5+2201i | pulsar wind nebula | PWN | 83.6330 | 22.0200 | Crab Nebula | Crab | 0.3304 |
4FGL J0526.3+2246 | active galaxy of uncertain type | bcu | 81.5908 | 22.7778 | NVSS J052622+224801 | 122.1994 | |
4FGL J0544.4+2238 | unknown | 86.1093 | 22.6418 | 142.4913 | |||
4FGL J0521.7+2112 | BL Lac type of blazar | bll | 80.4445 | 21.2131 | TXS 0518+211 | VER J0521+211 | 184.2435 |
4FGL J0528.3+1817 | unknown | unk | 82.0946 | 18.2943 | 1RXS J052829.6+181657 | 239.4351 | |
4FGL J0536.2+1733 | BL Lac type of blazar | bll | 84.0719 | 17.5534 | TXS 0533+175 | 268.8090 | |
4FGL J0539.0+1644 | active galaxy of uncertain type | bcu | 84.7500 | 16.7432 | NVSS J053855+164612 | 322.5278 | |
... | ... | ... | ... | ... | ... | ... | ... |
4FGL J0512.8+4041 | active galaxy of uncertain type | bcu | 78.2186 | 40.6945 | B3 0509+406 | 1153.9906 | |
4FGL J0639.6+3503 | active galaxy of uncertain type | bcu | 99.9024 | 35.0586 | B2 0635+35 | 1157.9315 | |
4FGL J0552.8+0313 | active galaxy of uncertain type | bcu | 88.2180 | 3.2322 | PKS 0550+032 | 1158.1471 | |
4FGL J0653.6+1636 | active galaxy of uncertain type | bcu | 103.4105 | 16.6106 | 2MASX J06533986+1636432 | 1164.7254 | |
4FGL J0658.7+2318 | unknown | 104.6808 | 23.3027 | 1166.9322 | |||
4FGL J0555.1+0304 | active galaxy of uncertain type | bcu | 88.7776 | 3.0710 | GB6 J0555+0304 | 1175.4617 | |
4FGL J0658.2+2709 | active galaxy of uncertain type | bcu | 104.5735 | 27.1501 | B2 0655+27A | 1181.6921 | |
4FGL J0642.4+1048 | unknown | 100.6081 | 10.8135 | 1183.9644 | |||
4FGL J0506.9+0323 | BL Lac type of blazar | bll | 76.7314 | 3.3917 | NVSS J050650+032401 | 1187.4462 | |
4FGL J0409.2+2542 | unknown | 62.3144 | 25.7022 | 1189.1462 |
This gets a 3ML model (a Model instance) from the table above, where every source in the 4FGL becomes a Source instance. Note that by default all parameters of all sources are fixed.
[5]:
model = lat_catalog.get_model()
Let’s free all the normalizations within 3 deg from the center.
[6]:
model.free_point_sources_within_radius(3.0, normalization_only=True)
model.display()
N | |
---|---|
Point sources | 147 |
Extended sources | 0 |
Particle sources | 0 |
Free parameters (5):
value | min_value | max_value | unit | |
---|---|---|---|---|
PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
Crab_synch.spectrum.main.Powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
Crab_IC.spectrum.main.Log_parabola.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
NVSS_J052622p224801.spectrum.main.Powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
_4FGL_J0544d4p2238.spectrum.main.Powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
Fixed parameters (788):
(abridged. Use complete=True to see all fixed parameters)
Linked parameters (0):
(none)
Independent variables:
(none)
but then let’s fix the sync and the IC components of the Crab nebula (cannot fit them with just one month of data) (these two methods are equivalent)
[7]:
model["Crab_IC.spectrum.main.Log_parabola.K"].fix = True
model.Crab_synch.spectrum.main.Powerlaw.K.fix = True
However, let’s free the index of the Crab Pulsar
[8]:
model.PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.index.free = True
model.display()
N | |
---|---|
Point sources | 147 |
Extended sources | 0 |
Particle sources | 0 |
Free parameters (4):
value | min_value | max_value | unit | |
---|---|---|---|---|
PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.index | -1.8833 | -10.0 | 10.0 | |
NVSS_J052622p224801.spectrum.main.Powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
_4FGL_J0544d4p2238.spectrum.main.Powerlaw.K | 0.0 | 0.0 | 0.0 | keV-1 s-1 cm-2 |
Fixed parameters (789):
(abridged. Use complete=True to see all fixed parameters)
Linked parameters (0):
(none)
Independent variables:
(none)
[9]:
# Download data from Jan 01 2010 to February 1 2010
tstart = "2010-01-01 00:00:00"
tstop = "2010-02-01 00:00:00"
# Note that this will understand if you already download these files, and will
# not do it twice unless you change your selection or the outdir
evfile, scfile = download_LAT_data(
ra,
dec,
20.0,
tstart,
tstop,
time_type="Gregorian",
destination_directory="Crab_data",
)
Configuration for Fermipy¶
3ML provides and intreface into Fermipy via the FermipyLike plugin. We can use it to generate basic configuration files.
Note
Currently, the FermipyLike plugin does not provide an interface to handle extended sources. This will change
[10]:
config = FermipyLike.get_basic_config(
evfile=evfile,
scfile=scfile,
ra=ra,
dec=dec,
fermipy_verbosity=1,
fermitools_chatter=0,
)
# See what we just got
config.display()
binning:
binsperdec: 8
binsz: 0.1
roiwidth: 10.0
data:
evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits
scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits
logging:
chatter: 0
verbosity: 1
selection:
dec: 22.0144947866347
emax: 100000.0
emin: 100.0
evclass: 128
evtype: 3
filter: DATA_QUAL>0 && LAT_CONFIG==1
ra: 83.63309095468972
tmax: 286675202.0
tmin: 283996802.0
zmax: 100.0
binning: binsperdec: 8 binsz: 0.1 roiwidth: 10.0 data: evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits logging: chatter: 0 verbosity: 1 selection: dec: 22.0144947866347 emax: 100000.0 emin: 100.0 evclass: 128 evtype: 3 filter: DATA_QUAL>0 && LAT_CONFIG==1 ra: 83.63309095468972 tmax: 286675202.0 tmin: 283996802.0 zmax: 100.0
You can of course modify the configuration as a dictionary
[11]:
config["selection"]["emax"] = 300000.0
and even add sections
[12]:
config["gtlike"] = {"edisp": False}
config.display()
binning:
binsperdec: 8
binsz: 0.1
roiwidth: 10.0
data:
evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits
scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits
gtlike:
edisp: false
logging:
chatter: 0
verbosity: 1
selection:
dec: 22.0144947866347
emax: 300000.0
emin: 100.0
evclass: 128
evtype: 3
filter: DATA_QUAL>0 && LAT_CONFIG==1
ra: 83.63309095468972
tmax: 286675202.0
tmin: 283996802.0
zmax: 100.0
binning: binsperdec: 8 binsz: 0.1 roiwidth: 10.0 data: evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits gtlike: edisp: false logging: chatter: 0 verbosity: 1 selection: dec: 22.0144947866347 emax: 300000.0 emin: 100.0 evclass: 128 evtype: 3 filter: DATA_QUAL>0 && LAT_CONFIG==1 ra: 83.63309095468972 tmax: 286675202.0 tmin: 283996802.0 zmax: 100.0
FermipyLike¶
Let’s create an instance of the plugin/ Note that here no processing is made, because fermipy still doesn’t know about the model you want to use.
[13]:
LAT = FermipyLike("LAT", config)
WARNING RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject
WARNING RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject
WARNING RuntimeWarning: numpy.ufunc size changed, may indicate binary incompatibility. Expected 192 from C header, got 216 from PyObject
The plugin modifies the configuration as needed to get the output files in a unique place, which will stay the same as long as your selection does not change.
[14]:
config.display()
binning:
binsperdec: 8
binsz: 0.1
roiwidth: 10.0
data:
evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits
scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits
fileio:
outdir: __f9eb0765a966b2c82c8a6d8bb6eb7cd5
gtlike:
edisp: false
logging:
chatter: 0
verbosity: 1
selection:
dec: 22.0144947866347
emax: 300000.0
emin: 100.0
evclass: 128
evtype: 3
filter: DATA_QUAL>0 && LAT_CONFIG==1
ra: 83.63309095468972
tmax: 286675202.0
tmin: 283996802.0
zmax: 100.0
binning: binsperdec: 8 binsz: 0.1 roiwidth: 10.0 data: evfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L31c0b303b32412d3ad16855dca6114b1_FT1.fits scfile: /Users/runner/work/threeML/threeML/docs/md_docs/Crab_data/L210405201101F0C8BF7047_SC00.fits fileio: outdir: __f9eb0765a966b2c82c8a6d8bb6eb7cd5 gtlike: edisp: false logging: chatter: 0 verbosity: 1 selection: dec: 22.0144947866347 emax: 300000.0 emin: 100.0 evclass: 128 evtype: 3 filter: DATA_QUAL>0 && LAT_CONFIG==1 ra: 83.63309095468972 tmax: 286675202.0 tmin: 283996802.0 zmax: 100.0
Here is where the fermipy processing happens (the .setup method)
[15]:
fermipy_output_directory = Path(config["fileio"]["outdir"])
print("Fermipy Output directoty: %s" % fermipy_output_directory)
# This remove the output directory, to start a fresh analysis...
if fermipy_output_directory.exists():
shutil.rmtree(fermipy_output_directory)
# Here is where the fermipy processing happens (the .setup method)
data = DataList(LAT)
jl = JointLikelihood(model, data)
Fermipy Output directoty: __f9eb0765a966b2c82c8a6d8bb6eb7cd5
Found Galactic template for IRF. P8R3_SOURCE_V3: /usr/local/miniconda/envs/test_env/share/fermitools/refdata/fermi/galdiffuse/gll_iem_v07.fits
Cutting the template around the ROI:
Found Isotropic template for irf P8R3_SOURCE_V3: /usr/local/miniconda/envs/test_env/share/fermitools/refdata/fermi/galdiffuse/iso_P8R3_SOURCE_V3_v1.txt
WARNING: Point source PKS_0459p060 lies 17.6422 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4C_p06d21 lies 17.7201 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _1ES_0647p250 lies 17.7261 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source NVSS_J065035p205556 lies 17.7267 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0551d7p0446 lies 17.7358 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PSR_J0631p1036 lies 17.7822 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0648p1749 lies 17.8406 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0442d8p3609 lies 18.0652 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0552p39A lies 18.3298 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _1RXS_J064814d1p160708 lies 18.3613 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source MG2_J065230p1934 lies 18.3951 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PKS_0502p049 lies 18.4206 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source RX_J0648d7p1516 lies 18.8083 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0620p3806 lies 18.8393 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PSR_J0622p3749 lies 18.8555 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0653p2816 lies 18.9497 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PMN_J0444p0717 lies 18.9991 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source MG1_J050533p0415 lies 19.0814 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0559d3p0352 lies 19.115 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source TXS_0431p092 lies 19.119 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B3_0509p406 lies 19.2332 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0635p35 lies 19.2989 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PKS_0550p032 lies 19.3025 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _2MASX_J06533986p1636432 lies 19.4121 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0658d7p2318 lies 19.4489 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0555p0304 lies 19.591 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0655p27A lies 19.6949 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0642d4p1048 lies 19.7327 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source NVSS_J050650p032401 lies 19.7908 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0409d2p2542 lies 19.8191 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
Performing the fit¶
[16]:
jl.set_minimizer("ROOT")
res = jl.fit()
Best fit values:
result | unit | |
---|---|---|
parameter | ||
PSR_J0534p2200...K | (1.01 +/- 0.04) x 10^-13 | 1 / (cm2 keV s) |
PSR_J0534p2200...index | -1.876 +/- 0.026 | |
NVSS_J052622p224801.spectrum.main.Powerlaw.K | (3.8 -2.7 +10) x 10^-17 | 1 / (cm2 keV s) |
_4FGL_J0544d4p2238.spectrum.main.Powerlaw.K | (1.0 -0.7 +1.9) x 10^-16 | 1 / (cm2 keV s) |
Correlation matrix:
1.00 | 0.77 | -0.05 | -0.02 |
0.77 | 1.00 | 0.07 | 0.13 |
-0.05 | 0.07 | 1.00 | 0.02 |
-0.02 | 0.13 | 0.02 | 1.00 |
Values of -log(likelihood) at the minimum:
-log(likelihood) | |
---|---|
LAT | 118113.801521 |
total | 118113.801521 |
Values of statistical measures:
statistical measures | |
---|---|
AIC | 236235.603185 |
BIC | 236277.773221 |
Now let’s compute the errors on the best fit parameters
[17]:
res = jl.get_errors()
result | unit | |
---|---|---|
parameter | ||
PSR_J0534p2200...K | (1.01 +/- 0.04) x 10^-13 | 1 / (cm2 keV s) |
PSR_J0534p2200...index | -1.876 -0.027 +0.026 | |
NVSS_J052622p224801.spectrum.main.Powerlaw.K | (4 -4 +5) x 10^-17 | 1 / (cm2 keV s) |
_4FGL_J0544d4p2238.spectrum.main.Powerlaw.K | (1.0 -1.0 +1.2) x 10^-16 | 1 / (cm2 keV s) |
We might also want to look at the profile of the likelihood for each parameter.
[18]:
res = jl.get_contours(
model.PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.index, -2.0, -1.6, 30
)
[19]:
res[-1]
[19]:
Or we might want to produce a contour plot
[20]:
res = jl.get_contours(
"PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.K",
0.7e-13,
1.3e-13,
20,
"PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.index",
-2.0,
-1.6,
20,
)
[21]:
res[-1]
[21]:
Pro-trick: We can also axcess the GTAnalysis object of fermipy:
[22]:
# res = jl.fit()
# LAT.gta.write_roi('test',make_plots=True)
All the plots are saved in the output directory as png files:
[23]:
# pngs=Path(f"{fermipy_output_directory}").glob("*png")
# for png in pngs:
# print(png)
# my_image=Image(str(png))
# display(my_image)
We can also plot the resulting model:
[24]:
energies = sp.logspace(1, 8, 100) * u.MeV
fig, ax = plt.subplots()
# we only want to visualize the relevant sources...
src_to_plot = ["Crab", "PSR_J0534p2200"]
# Now loop over all point sources and plot them
for source_name, point_source in model.point_sources.items():
for src in src_to_plot:
if src in source_name:
# Plot the sum of all components for this source
ax.loglog(energies, point_source(energies), label=source_name)
# If there is more than one component, plot them also separately
if len(point_source.components) > 1:
for component_name, component in point_source.components.items():
ax.loglog(
energies,
component.shape(energies),
"--",
label=f"{component_name} of {source_name}",
)
# Add a legend
ax.legend(loc=0, frameon=False)
ax.set_xlabel("Energy (MeV)")
ax.set_ylabel(r"Flux (ph cm$^{-2}$ s$^{-1}$ keV$^{-1}$")
ax.set_ylim([1e-20, 1e-3])
# show the plot
fig
[24]:
We can also do a bayesian analysis.
This will set priors based on the current defined min-max (log-uniform or uniform)
[25]:
for param in model.free_parameters.values():
if param.has_transformation():
param.set_uninformative_prior(Log_uniform_prior)
else:
param.set_uninformative_prior(Uniform_prior)
[26]:
# It's better to remove the output directory,...
shutil.rmtree(fermipy_output_directory)
bayes = BayesianAnalysis(model, data)
Found Galactic template for IRF. P8R3_SOURCE_V3: /usr/local/miniconda/envs/test_env/share/fermitools/refdata/fermi/galdiffuse/gll_iem_v07.fits
Cutting the template around the ROI:
Found Isotropic template for irf P8R3_SOURCE_V3: /usr/local/miniconda/envs/test_env/share/fermitools/refdata/fermi/galdiffuse/iso_P8R3_SOURCE_V3_v1.txt
WARNING: Point source PKS_0459p060 lies 17.6422 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4C_p06d21 lies 17.7201 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _1ES_0647p250 lies 17.7261 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source NVSS_J065035p205556 lies 17.7267 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0551d7p0446 lies 17.7358 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PSR_J0631p1036 lies 17.7822 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0648p1749 lies 17.8406 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0442d8p3609 lies 18.0652 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0552p39A lies 18.3298 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _1RXS_J064814d1p160708 lies 18.3613 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source MG2_J065230p1934 lies 18.3951 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PKS_0502p049 lies 18.4206 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source RX_J0648d7p1516 lies 18.8083 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0620p3806 lies 18.8393 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PSR_J0622p3749 lies 18.8555 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0653p2816 lies 18.9497 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PMN_J0444p0717 lies 18.9991 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source MG1_J050533p0415 lies 19.0814 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0559d3p0352 lies 19.115 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source TXS_0431p092 lies 19.119 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B3_0509p406 lies 19.2332 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0635p35 lies 19.2989 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source PKS_0550p032 lies 19.3025 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _2MASX_J06533986p1636432 lies 19.4121 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0658d7p2318 lies 19.4489 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source GB6_J0555p0304 lies 19.591 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source B2_0655p27A lies 19.6949 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0642d4p1048 lies 19.7327 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source NVSS_J050650p032401 lies 19.7908 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
WARNING: Point source _4FGL_J0409d2p2542 lies 19.8191 degrees from the ROI center at RA, Dec = 83.6331, 22.0145 7.57107
[27]:
bayes.set_sampler("emcee")
n_walkers = 10
burn_in = 10
n_samples = 500
bayes.sampler.setup(n_iterations=n_samples, n_burn_in=burn_in, n_walkers=n_walkers)
res = bayes.sample()
Maximum a posteriori probability (MAP) point:
result | unit | |
---|---|---|
parameter | ||
PSR_J0534p2200...K | (1.02 +/- 0.04) x 10^-13 | 1 / (cm2 keV s) |
PSR_J0534p2200...index | -1.876 -0.028 +0.029 | |
NVSS_J052622p224801.spectrum.main.Powerlaw.K | (5 +/- 4) x 10^-17 | 1 / (cm2 keV s) |
_4FGL_J0544d4p2238.spectrum.main.Powerlaw.K | (1.1 +/- 0.8) x 10^-16 | 1 / (cm2 keV s) |
Values of -log(posterior) at the minimum:
-log(posterior) | |
---|---|
LAT | -118079.018792 |
total | -118079.018792 |
Values of statistical measures:
statistical measures | |
---|---|
AIC | 236166.037728 |
BIC | 236208.207764 |
DIC | 236168.277666 |
PDIC | 2.575746 |
You can access to the parameter range like this (HPD):
[28]:
this_K = bayes.results.get_variates(
"PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.K"
)
this_idx = bayes.results.get_variates(
"PSR_J0534p2200.spectrum.main.Super_cutoff_powerlaw.index"
)
print("Highest_posterior_density_intervals :")
print(
"K (68%%): %10.2e,%10.2e" % this_K.highest_posterior_density_interval(cl=0.68)
)
print(
"K (95%%): %10.2e,%10.2e" % this_K.highest_posterior_density_interval(cl=0.95)
)
print(
"Index (68%%): %10.2e,%10.2e" % this_idx.highest_posterior_density_interval(cl=0.68)
)
print(
"Index (95%%): %10.2e,%10.2e" % this_idx.highest_posterior_density_interval(cl=0.95)
)
Highest_posterior_density_intervals :
K (68%): 9.71e-14, 1.05e-13
K (95%): 9.34e-14, 1.10e-13
Index (68%): -1.90e+00, -1.84e+00
Index (95%): -1.93e+00, -1.83e+00
[29]:
corner_figure = bayes.results.corner_plot()
corner_figure
[29]:
[ ]: