SpectrumDatasetOnOff¶
-
class
gammapy.spectrum.
SpectrumDatasetOnOff
(model=None, counts=None, counts_off=None, livetime=None, aeff=None, edisp=None, mask_safe=None, mask_fit=None, acceptance=None, acceptance_off=None, name='', gti=None)[source]¶ Bases:
gammapy.spectrum.SpectrumDataset
Spectrum dataset for on-off likelihood fitting.
The on-off spectrum dataset bundles reduced counts data, off counts data, with a spectral model, relative background efficiency and instrument response functions to compute the fit-statistic given the current model and data.
Parameters: - model :
SpectralModel
Fit model
- counts :
CountsSpectrum
ON Counts spectrum
- counts_off :
CountsSpectrum
OFF Counts spectrum
- livetime :
Quantity
Livetime
- aeff :
EffectiveAreaTable
Effective area
- edisp :
EnergyDispersion
Energy dispersion
- mask_safe :
array
Mask defining the safe data range.
- mask_fit :
array
Mask to apply to the likelihood for fitting.
- acceptance :
array
or float Relative background efficiency in the on region.
- acceptance_off :
array
or float Relative background efficiency in the off region.
- name : str
Name of the dataset.
- gti :
GTI
GTI of the observation or union of GTI if it is a stacked observation
See also
SpectrumDataset
,FluxPointsDataset
,MapDataset
Attributes Summary
alpha
Exposure ratio between signal and background regions background
data_shape
Shape of the counts data energy_range
Energy range defined by the safe mask excess
Excess (counts - alpha * counts_off) likelihood_type
mask
Combined fit and safe mask mask_safe
model
parameters
Methods Summary
copy
(self)A deep copy. create
(e_reco[, e_true, reference_time])Create empty SpectrumDatasetOnOff. fake
(self, background_model[, random_state])Simulate fake counts for the current model and reduced irfs. from_ogip_files
(filename)Read SpectrumDatasetOnOff
from OGIP files.likelihood
(self)Total likelihood given the current model parameters. likelihood_per_bin
(self)Likelihood per bin given the current model parameters npred
(self)Return npred map (model + background) npred_sig
(self)Predicted counts from source model ( CountsSpectrum
).peek
(self[, figsize])Quick-look summary plots. plot_counts
(self[, ax])Plot predicted and detected counts. plot_fit
(self)Plot counts and residuals in two panels. plot_residuals
(self[, method, ax])Plot residuals. read
(filename)Read from file residuals
(self[, method])Compute the spectral residuals. stack
(self, other)Stack this dataset with another one. to_ogip_files
(self[, outdir, use_sherpa, …])Write OGIP files. Attributes Documentation
-
alpha
¶ Exposure ratio between signal and background regions
-
background
¶
-
data_shape
¶ Shape of the counts data
-
energy_range
¶ Energy range defined by the safe mask
-
excess
¶ Excess (counts - alpha * counts_off)
-
likelihood_type
= 'wstat'¶
-
mask
¶ Combined fit and safe mask
-
mask_safe
¶
-
model
¶
-
parameters
¶
Methods Documentation
-
copy
(self)¶ A deep copy.
-
classmethod
create
(e_reco, e_true=None, reference_time='2000-01-01')[source]¶ Create empty SpectrumDatasetOnOff.
Empty containers are created with the correct geometry. counts, counts_off and aeff are zero and edisp is diagonal.
The safe_mask is set to False in every bin.
Parameters:
-
fake
(self, background_model, random_state='random-seed')[source]¶ Simulate fake counts for the current model and reduced irfs.
This method overwrites the counts and off counts defined on the dataset object.
Parameters: - background_model :
CountsSpectrum
BackgroundModel. In the future will be part of the SpectrumDataset Class. For the moment, a CountSpectrum.
- random_state : {int, ‘random-seed’, ‘global-rng’,
RandomState
} Defines random number generator initialisation. Passed to
get_random_state
.
- background_model :
-
classmethod
from_ogip_files
(filename)[source]¶ Read
SpectrumDatasetOnOff
from OGIP files.BKG file, ARF, and RMF must be set in the PHA header and be present in the same folder.
Parameters: - filename : str
OGIP PHA file to read
-
likelihood
(self)¶ Total likelihood given the current model parameters.
-
npred
(self)¶ Return npred map (model + background)
-
npred_sig
(self)[source]¶ Predicted counts from source model (
CountsSpectrum
).
-
plot_counts
(self, ax=None)¶ Plot predicted and detected counts.
Parameters: - ax :
Axes
Axes object.
Returns: - ax :
Axes
Axes object.
- ax :
-
plot_fit
(self)¶ Plot counts and residuals in two panels.
Calls
plot_counts
andplot_residuals
.
-
plot_residuals
(self, method='diff', ax=None, **kwargs)¶ Plot residuals.
Parameters: - ax :
Axes
Axes object.
- method : {“diff”, “diff/model”, “diff/sqrt(model)”}
Normalization used to compute the residuals, see
SpectrumDataset.residuals()
- **kwargs : dict
Keywords passed to
CountsSpectrum.plot()
Returns: - ax :
Axes
Axes object.
- ax :
-
classmethod
read
(filename)[source]¶ Read from file
For now, filename is assumed to the name of a PHA file where BKG file, ARF, and RMF names must be set in the PHA header and be present in the same folder
Parameters: - filename : str
OGIP PHA file to read
-
residuals
(self, method='diff')¶ Compute the spectral residuals.
Parameters: - method : {“diff”, “diff/model”, “diff/sqrt(model)”}
- Method used to compute the residuals. Available options are:
diff
(default): data - modeldiff/model
: (data - model) / modeldiff/sqrt(model)
: (data - model) / sqrt(model)
Returns: - residuals :
CountsSpectrum
Residual spectrum
-
stack
(self, other)[source]¶ Stack this dataset with another one.
Safe mask is applied to compute the stacked counts vector. Counts outside each dataset safe mask are lost.
Stacking is performed in-place.
The stacking of 2 datasets is implemented as follows. Here, \(k\) denotes a bin in reconstructed energy and \(j = {1,2}\) is the dataset number
The
mask_safe
of each dataset is defined as:\[\begin{split}\epsilon_{jk} =\left\{\begin{array}{cl} 1, & \mbox{if k is inside the energy thresholds}\\ 0, & \mbox{otherwise} \end{array}\right.\end{split}\]Then the total
counts
andcounts_off
are computed according to:\[ \begin{align}\begin{aligned}\overline{\mathrm{n_{on}}}_k = \mathrm{n_{on}}_{1k} \cdot \epsilon_{1k} + \mathrm{n_{on}}_{2k} \cdot \epsilon_{2k}\\\overline{\mathrm{n_{off}}}_k = \mathrm{n_{off}}_{1k} \cdot \epsilon_{1k} + \mathrm{n_{off}}_{2k} \cdot \epsilon_{2k}\end{aligned}\end{align} \]The stacked
safe_mask
is then:\[\overline{\epsilon_k} = \epsilon_{1k} OR \epsilon_{2k}\]In each energy bin \(k\), the count excess is computed taking into account the ON
acceptance
, \(a_{on}_k\) and the OFF one:acceptance_off
, \(a_{off}_k\). They define the \(\alpha_k=a_{on}_k/a_{off}_k\) factors such that \(n_{ex}_k = n_{on}_k - \alpha_k n_{off}_k\). We define the stacked value of \(\overline{{a}_{on}}_k = 1\) so that:\[\overline{{a}_{off}}_k = \frac{\overline{\mathrm {n_{off}}}}{\alpha_{1k} \cdot \mathrm{n_{off}}_{1k} \cdot \epsilon_{1k} + \alpha_{2k} \cdot \mathrm{n_{off}}_{2k} \cdot \epsilon_{2k}}\]Please refer to the
IRFStacker
for the description of how the IRFs are stacked.Parameters: - other :
SpectrumDatasetOnOff
the dataset to stack to the current one
Examples
>>> from gammapy.spectrum import SpectrumDatasetOnOff >>> obs_ids = [23523, 23526, 23559, 23592] >>> datasets = [] >>> for obs in obs_ids: >>> filename = "$GAMMAPY_DATA/joint-crab/spectra/hess/pha_obs{}.fits" >>> ds = SpectrumDatasetOnOff.from_ogip_files(filename.format(obs)) >>> datasets.append(ds) >>> stacked = datasets[0] >>> for ds in datasets[1:]: >>> stacked.stack(ds) >>> print(stacked.livetime) 6313.8116406202325 s
- other :
-
to_ogip_files
(self, outdir=None, use_sherpa=False, overwrite=False)[source]¶ Write OGIP files.
If you want to use the written files with Sherpa you have to set the
use_sherpa
flag. Then all files will be written in units ‘keV’ and ‘cm2’.Parameters: - outdir :
pathlib.Path
output directory, default: pwd
- use_sherpa : bool, optional
Write Sherpa compliant files, default: False
- overwrite : bool
Overwrite existing files?
- outdir :
- model :