{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# Configuring the model and running g-tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This tutorial shows how to configure the model and how to run Fermipy-LAT g-tools with Fermipy.\n", "Many parts of this tutorial are taken directly from the documentation page of Fermipy: [fermipy.readthedocs](http://fermipy.readthedocs.io/en/latest/). \n", "I suggest to visit it to find further informations.\n", "\n", "This tutorial uses the same data as the SMC.ipynb tutorial." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Configuring the model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model can be configured with a configuration file or directly running Fermipy with your script." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The configuration file defines the data selection and analysis parameters. The configuration file has a hierarchical structure that groups parameters into dictionaries that are keyed to a section name (data, binning, etc.). " ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "When creating a class instance, the configuration is initialized by passing either a configuration dictionary or configuration file path to the class constructor. \n", "Keyword arguments can be passed to the constructor to override configuration parameters in the input dictionary. \n", "In the following example the config dictionary defines values for the parameters emin and emax. By passing a dictionary for the selection keyword argument, the value of emax in the keyword argument (10000) overrides the value of emax in the input dictionary." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# config = {\n", "'selection' : { 'emin' : 100,\n", " 'emax' : 1000 }\n", "}\n", "\n", "gta = GTAnalysis(config,selection={'emax' : 10000})" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The configuration file can be created also with a yaml file.\n", "Below I report a sample of configuration applied for an analysis of the SMC:" ] }, { "cell_type": "raw", "metadata": { "vscode": { "languageId": "raw" } }, "source": [ "data:\n", " evfile : 'ft1.fits'\n", " scfile : '/u/gl/mdimauro/kipac/workdir/files/SC/P8_104months_ft2.fits'\n", " ltcube : '/u/gl/mdimauro/dmcat/workdir/mattia/LogNLogS_Ebins/files_bins/bin13/P8_SOURCE_zmax105_1_3_ltcube.fits'\n", "\n", "binning:\n", " roiwidth : 12.0\n", " binsz : 0.08\n", " binsperdec : 8\n", " coordsys : 'GAL'\n", "\n", "selection :\n", " emin : 1000\n", " emax : 500000\n", " tmin : 239557417\n", " tmax : 512994417\n", " zmax : 105\n", " evclass : 128\n", " evtype : 3\n", " glon: 302.25\n", " glat : -44.37\n", " \n", "gtlike:\n", " edisp : True\n", " irfs : 'P8R2_SOURCE_V6'\n", " edisp_disable : ['isodiff','galdiff']\n", "\n", "model:\n", " src_roiwidth : 12.0\n", " galdiff : '$FERMI_DIFFUSE_DIR/gll_iem_v07.fits'\n", " isodiff : '$FERMI_DIFFUSE_DIR/iso_P8R2_SOURCE_V6_v06.txt' \n", " catalogs: gll_psc_v16.fit\n", "\n", "fileio:\n", " usescratch: False" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The configuration file has the same structure as the configuration dictionary such that one can read/write configurations using the load/dump methods of the yaml module:" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### DATA" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The data section defines the input data files for the analysis (FT1, FT2, and livetime cube). \n", "evfile and scfile can either be individual files or group of files. The optional ltcube option can be used to choose a pre-generated livetime cube. \n", "If ltcube is null a livetime cube will be generated at runtime with gtltcube." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Below an example of the data part:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "data :\n", " evfile : ft1.lst\n", " scfile : ft2.fits\n", " ltcube : null" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The options for the data component are the following:\n", "* cacheft1: Cache FT1 files when performing binned analysis. If false then only the counts cube is retained.\n", "* evfile: Path to FT1 file or list of FT1 files.\n", "* ltcube: Path to livetime cube. If none a livetime cube will be generated with gtmktime.\n", "* scfile: Path to FT2 (spacecraft) file." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### BINNING" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Options in the binning section control the spatial and spectral binning of the data. " ] }, { "cell_type": "raw", "metadata": {}, "source": [ "binning:\n", "\n", " # Binning\n", " roiwidth : 10.0\n", " npix : null\n", " binsz : 0.1 # spatial bin size in deg\n", " binsperdec : 8 # nb energy bins per decade\n", " projtype : WCS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The roiwidth is the ROI width, npix specifies the number of pixels, binsz indicates the pixel size, binsperdec is the number of energy bins per decade and projtype is the type of projection and can be WCS and HEALPIX." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Other options are: \n", "* coordsys: for the coordinate system Galactic or Celestial (CEL or GAL), \n", "* hpx_order: is the healpix order, hpx_ordering_scheme is the HEALPix Ordering Scheme, \n", "* proj: is the Spatial projection for WCS mode, Width of the ROI in degrees. \n", "* roiwidth: is the number of pixels in each spatial dimension will be set from roiwidth / binsz (rounded up)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### COMPONENTS" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The components section can be used to define analysis configurations for independent subselections of the data. Each subselection will have its own binned likelihood instance that is combined in a global likelihood function for the ROI (implemented with the SummedLikelihood class in pyLikelihood). The components section is optional and when set to null (the default) only a single likelihood component will be created with the parameters of the root analysis configuration.\n", "\n", "The component section is defined as a list of dictionaries where each element sets analysis parameters for a different subcomponent of the analysis. The component configurations follow the same structure and accept the same parameters as the root analysis configuration. Parameters not defined in a given element will default to the values set in the root analysis configuration.\n", "\n", "The following example illustrates how to define a Front/Back analysis with two components. Files associated to each component will be given a suffix according to their order in the list (e.g. file_00.fits, file_01.fits, etc.)." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "# Component section for Front/Back analysis\n", " - { selection : { evtype : 1 } } # Front\n", " - { selection : { evtype : 2 } } # Back" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The following example illustrates how to define an analysis divided in four components. Each of them has a different zmax and uses a different evtype and isotropic template." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "components:\n", " - model: {isodiff: $FERMI_DIFFUSE_DIR/iso_P8R2_SOURCE_V6_PSF0_v06.txt}\n", " selection: {evtype: 4, zmax: 80}\n", " data: {ltcube: ltcube_00.fits}\n", " - model: {isodiff: $FERMI_DIFFUSE_DIR/iso_P8R2_SOURCE_V6_PSF1_v06.txt}\n", " selection: {evtype: 8, zmax: 85}\n", " data: {ltcube: ltcube_01.fits}\n", " - model: {isodiff: $FERMI_DIFFUSE_DIR/iso_P8R2_SOURCE_V6_PSF2_v06.txt}\n", " selection: {evtype: 16, zmax: 95}\n", " data: {ltcube: ltcube_02.fits}\n", " - model: {isodiff: $FERMI_DIFFUSE_DIR/iso_P8R2_SOURCE_V6_PSF3_v06.txt}\n", " selection: {evtype: 32, zmax: 100}\n", " data: {ltcube: ltcube_03.fits}" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### EXTENSION" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The options in extension control the default behavior of the extension method. For more information about using this method see the Extension Fitting page. The main options are the following:\n", "* fit_ebin: Perform a fit for the angular extension in each analysis energy bin.\n", "* fit_position: Perform a simultaneous fit to the source position and extension.\n", "* fix_shape: Fix spectral shape parameters of the source of interest. If True then only the normalization parameter will be fit.\n", "* free_background: Leave background parameters free when performing the fit. If True then any parameters that are currently free in the model will be fit simultaneously with the source of interest.\n", "* free_radius: Free normalizations of background sources within this angular distance in degrees from the source of interest. If None then no sources will be freed.\n", "* sqrt_ts_threshold: Threshold on sqrt(TS_ext) that will be applied when update is True. If None then nothreshold is applied.\n", "* width: Sequence of values in degrees for the likelihood scan over spatial extension (68% containment radius). If this argument is None then the scan points will be determined from width_min/width_max/width_nstep.\n", "* width_max: Maximum value in degrees for the likelihood scan over spatial extent.\n", "* width_min: Minimum value in degrees for the likelihood scan over spatial extent.\n", "* width_nstep: Number of scan points between width_min and width_max. Scan points will be spaced evenly on a logarithmic scale between width_min and width_max." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "There is a notebook dedicated to this analysis." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### FILE I/O" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The fileio section collects options related to file bookkeeping. The outdir option sets the root directory of the analysis instance where all output files will be written. If outdir is null then the output directory will be automatically set to the directory in which the configuration file is located. Enabling the usescratch option will stage all output data files to a temporary scratch directory created under scratchdir." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sample fileio Configuration" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "fileio:\n", " outdir : null\n", " logfile : null\n", " usescratch : False\n", " scratchdir : '/scratch'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The options for the fileio are the following:\n", "* logfile: Path to log file. If None then log will be written to fermipy.log.\n", "* outdir: Path of the output directory. If none this will default to the directory containing the configuration file.\n", "* outdir_regex: Stage files to the output directory that match at least one of the regular expressions in this list. This option only takes effect when usescratch is True.\n", "* savefits: Save intermediate FITS files.\n", "* scratchdir: Path to the scratch directory. If usescratch is True then a temporary working directory will be created under this directory.\n", "* usescratch: Run analysis in a temporary working directory under scratchdir.\n", "* workdir: Path to the working directory.\n", "* workdir_regex: Stage files to the working directory that match at least one of the regular expressions in this list. This option only takes effect when usescratch is True." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### GTLIKE" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Options in the gtlike section control the setup of the likelihood analysis include the IRF name (irfs)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A subsample of options for the gtlike section is listed below:\n", "* edisp: Enable the correction for energy dispersion.\n", "* edisp_disable: Provide a list of sources for which the edisp correction should be disabled.\n", "* use_external_srcmap: Use an external precomputed source map file.\n", "* use_scaled_srcmap: Generate source map by scaling an external srcmap file.\n", "* wmap: Likelihood weights map." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The Likelihood wights map is created and used in order to account for example for the uncertainty in the interstellar emission." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### MODEL" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The model section collects options that control the inclusion of point-source and diffuse components in the model. galdiff and isodiff set the templates for the Galactic IEM and isotropic diffuse respectively. catalogs defines a list of catalogs that will be merged to form a master analysis catalog from which sources will be drawn. Valid entries in this list can be FITS files or XML model files. sources can be used to insert additional point-source or extended components beyond those defined in the master catalog. src_radius and src_roiwidth set the maximum distance from the ROI center at which sources in the master catalog will be included in the ROI model." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Sample for the Model section:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "model :\n", "\n", " # Diffuse components\n", " galdiff : '$FERMI_DIR/refdata/fermi/galdiffuse/gll_iem_v06.fits'\n", " isodiff : '$FERMI_DIR/refdata/fermi/galdiffuse/iso_P8R2_SOURCE_V6_v06.txt'\n", "\n", " # List of catalogs to be used in the model.\n", " catalogs :\n", " - '3FGL'\n", " - 'extra_sources.xml'\n", "\n", " sources :\n", " - { 'name' : 'SourceA', 'ra' : 60.0, 'dec' : 30.0, 'SpectrumType' : PowerLaw }\n", " - { 'name' : 'SourceB', 'ra' : 58.0, 'dec' : 35.0, 'SpectrumType' : PowerLaw }\n", "\n", " # Include catalog sources within this distance from the ROI center\n", " src_radius : null\n", "\n", " # Include catalog sources within a box of width roisrc.\n", " src_roiwidth : 15.0" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the sample above the official IEM and isotropic template are used together with the 3FGL catalog given with a fits file and by an additional catalog given with an xml file following the notation of the Fermi Science Tools [fermi.fssc.spectralmodel](https://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/xml_model_defs.html#xmlModelDefinitions).\n", "Then two sources named as SourceA and SourceB are added." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To define two or more galactic diffuse components you can optionally define the galdiff and isodiff parameters as lists. A separate component will be generated for each element in the list with the name galdiffXX or isodiffXX where XX is an integer position in the list." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "model:\n", " galdiff :\n", " - '$FERMI_DIFFUSE_DIR/diffuse_component0.fits'\n", " - '$FERMI_DIFFUSE_DIR/diffuse_component1.fits'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "To explicitly set the name of a component you can define any element as a dictionary containing name and file fields:" ] }, { "cell_type": "raw", "metadata": {}, "source": [ "model:\n", " galdiff :\n", " - { 'name' : 'component0', 'file' : '$FERMI_DIFFUSE_DIR/diffuse_component0.fits' }\n", " - { 'name' : 'component1', 'file' : '$FERMI_DIFFUSE_DIR/diffuse_component1.fits' }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The list of sources for inclusion in the ROI model is set by defining a list of catalogs with the catalogs parameter. Catalog files can be in either XML or FITS format. Sources from the catalogs in this list that satisfy either the src_roiwidth or src_radius selections are added to the ROI model. If a source is defined in multiple catalogs the source definition from the last file in the catalogs list takes precedence." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "model:\n", "\n", " src_radius: 5.0\n", " src_roiwidth: 10.0\n", " catalogs :\n", " - 'gll_psc_v16.fit'\n", " - 'extra_sources.xml'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fermipy supports four spatial models which are defined with the SpatialModel property:\n", "\n", "* PointSource : A point source (SkyDirFunction).\n", "* RadialGaussian : A symmetric 2D Gaussian with width parameter ‘Sigma’.\n", "* RadialDisk : A symmetric 2D Disk with radius ‘Radius’.\n", "* SpatialMap : An arbitrary 2D shape with morphology defined by a FITS template.\n", "\n", "The spatial extension of RadialDisk and RadialGaussian can be controlled with the SpatialWidth parameter which sets the 68% containment radius in degrees. Note for ST releases prior to 11-01-01, RadialDisk and RadialGaussian sources will be represented with the SpatialMap type." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "model:\n", " sources :\n", " - { name: 'PointSource', glon : 120.0, glat : 0.0,\n", " SpectrumType : 'PowerLaw', Index : 2.0, Scale : 1000, Prefactor : !!float 1e-11,\n", " SpatialModel: 'PointSource' }\n", " - { name: 'DiskSource', glon : 120.0, glat : 0.0,\n", " SpectrumType : 'PowerLaw', Index : 2.0, Scale : 1000, Prefactor : !!float 1e-11,\n", " SpatialModel: 'RadialDisk', SpatialWidth: 1.0 }\n", " - { name: 'GaussSource', glon : 120.0, glat : 0.0,\n", " SpectrumType : 'PowerLaw', Index : 2.0, Scale : 1000, Prefactor : !!float 1e-11,\n", " SpatialModel: 'RadialGaussian', SpatialWidth: 1.0 }\n", " - { name: 'MapSource', glon : 120.0, glat : 0.0,\n", " SpectrumType : 'PowerLaw', Index : 2.0, Scale : 1000, Prefactor : !!float 1e-11,\n", " SpatialModel: 'SpatialMap', Spatial_Filename : 'template.fits' }" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### OPTIMIZER" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This section provides informations for the setup used for the optimization. The list of options are the following:\n", "* init_lambda: Initial value of damping parameter for step size calculation when using the NEWTON fitter. A value of zero disables damping.\n", "* max_iter: Maximum number of iterations for the Newtons method fitter.\n", "* min_fit_quality: Set the minimum fit quality.\n", "* optimizer: Set the optimization algorithm to use when maximizing the likelihood function.\n", "* retries: Set the number of times to retry the fit when the fit quality is less than min_fit_quality.\n", "* tol: Set the optimizer tolerance.\n", "* verbosity" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### PLOTTING" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This section selects the options to be used to make the plots:\n", "* cmap: Set the colormap for 2D plots. Default magma\n", "* cmap_resid: Set the colormap for 2D residual plots.\n", "* figsize: Set the default figure size.\n", "* format: format of images\n", "* interactive: Enable interactive mode. If True then plots will be drawn after each plotting command.\n", "* label_ts_threshold: TS threshold for labeling sources in sky maps. If None then no sources will be labeled." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SELECTION" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The selection section collects parameters related to the data selection and target definition. The majority of the parameters in this section are arguments to gtselect and gtmktime. The ROI center can be set with the target parameter by providing the name of a source defined in one of the input catalogs (defined in the model section). Alternatively the ROI center can be defined by giving explicit sky coordinates with ra and dec or glon and glat." ] }, { "cell_type": "raw", "metadata": {}, "source": [ "selection:\n", "\n", " # gtselect parameters\n", " emin : 100\n", " emax : 100000\n", " zmax : 90\n", " evclass : 128\n", " evtype : 3\n", " tmin : 239557414\n", " tmax : 428903014\n", "\n", " # gtmktime parameters\n", " filter : 'DATA_QUAL>0 && LAT_CONFIG==1'\n", " roicut : 'no'\n", "\n", " # Set the ROI center to the coordinates of this source\n", " target : 'mkn421'" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "A sample of options for this section are the following:\n", "* emax/emin: Maximum/Minimum Energy (MeV)\n", "* evclass: Event class selection.\n", "* evtype: Event type selection.\n", "* filter: Filter string for gtmktime selection.\n", "* logemax/logemin: Maximum/Minimum Energy (log10(MeV))\n", "* phasemax/phasemin: Maximum/Minimum pulsar phase\n", "* radius: Radius of data selection. If none this will be automatically set from the ROI size.\n", "* target: Choose an object on which to center the ROI. This option takes precendence over ra/dec or glon/glat.\n", "* tmax/tmin: Maximum/Minimum time (MET).\n", "* zmax: Maximum zenith angle." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Running g-tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First of all you need to load the configuration file, create the object gta and run the tool gta.setup that implements the ST gtselect, gtmktime, gtbin, gtexpcube, gtsrcmap tools" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "With the commands below we import the packages needed to run the script." ] }, { "cell_type": "code", "execution_count": 1, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:44:56.383131Z", "iopub.status.busy": "2026-07-17T21:44:56.382964Z", "iopub.status.idle": "2026-07-17T21:44:58.210468Z", "shell.execute_reply": "2026-07-17T21:44:58.209532Z" } }, "outputs": [], "source": [ "import os\n", "import numpy as np\n", "from fermipy.gtanalysis import GTAnalysis\n", "from fermipy.plotting import ROIPlotter, SEDPlotter\n", "import matplotlib.pyplot as plt\n", "import matplotlib\n", "from IPython.display import Image" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "This script uses the same data as the SMC tutorial.\n", "\n", "Download the SMC data andd then untar the file ../data/SMC_data.tar.gz. This will copy the config.yaml and ft1 file in the notebook directory." ] }, { "cell_type": "code", "execution_count": 2, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:44:58.212404Z", "iopub.status.busy": "2026-07-17T21:44:58.212098Z", "iopub.status.idle": "2026-07-17T21:44:58.610828Z", "shell.execute_reply": "2026-07-17T21:44:58.609692Z" } }, "outputs": [], "source": [ "import os\n", "if os.path.isfile('./../data/SMC_data.tar.gz'):\n", " !tar xzf ./../data/SMC_data.tar.gz\n", "else:\n", " !curl -OL --output-dir ./../data/ https://raw.githubusercontent.com/fermiPy/fermipy-extras/master/data/SMC_data.tar.gz\n", " !tar xzf ./../data/SMC_data.tar.gz" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The configuration file has the same structure as the configuration dictionary such that one can read/write configurations using the load/dump methods of the yaml module:" ] }, { "cell_type": "code", "execution_count": 3, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:44:58.612830Z", "iopub.status.busy": "2026-07-17T21:44:58.612611Z", "iopub.status.idle": "2026-07-17T21:44:58.620589Z", "shell.execute_reply": "2026-07-17T21:44:58.619935Z" } }, "outputs": [], "source": [ "import yaml\n", "# Load a configuration\n", "config = yaml.load(open('./SMC_data/config.yaml'), Loader=yaml.FullLoader)\n", "# Update a parameter and write a new configuration\n", "config['selection']['emin'] = 1000.\n", "yaml.dump(config, open('new_config.yaml','w'))" ] }, { "cell_type": "code", "execution_count": 4, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:44:58.622241Z", "iopub.status.busy": "2026-07-17T21:44:58.622092Z", "iopub.status.idle": "2026-07-17T21:45:08.807333Z", "shell.execute_reply": "2026-07-17T21:45:08.806506Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:58 INFO GTAnalysis.__init__(): \n", "--------------------------------------------------------------------------------\n", "fermipy version 1.4.2+32.g764b \n", "ScienceTools version 2.5.1\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTAnalysis.setup(): Running setup.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis.setup(): Running setup for component 00\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis._select_data(): Skipping data selection.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis.setup(): Using external LT cube.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "{'Prefactor': 0, 'Index1': 1, 'Scale': 2, 'Cutoff': 3, 'Index2': 4}\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis._create_expcube(): Skipping gtexpcube.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: FITSFixedWarning: 'datfix' made the change 'Set DATEREF to '2001-01-01T00:01:04.184' from MJDREF.\n", "Set MJD-OBS to 54682.655283 from DATE-OBS.\n", "Set MJD-END to 57847.435324 from DATE-END'. [astropy.wcs.wcs]\n", "2026-07-17 21:44:59 INFO GTBinnedAnalysis._create_srcmaps(): Skipping gtsrcmaps.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis.setup(): Finished setup for component 00\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:44:59 INFO GTBinnedAnalysis._create_binned_analysis(): Creating BinnedAnalysis for component 00.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:05 INFO GTAnalysis.setup(): Initializing source properties\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.setup(): Finished setup.\n" ] } ], "source": [ "gta = GTAnalysis('new_config.yaml')\n", "gta.setup()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The setup() method performs the data preparation and response calculations needed for the analysis (selecting the data, creating counts and exposure maps, etc.). Depending on the data selection and binning of the analysis this will often be the slowest step in the analysis sequence. The output of setup() is cached in the analysis working directory so subsequent calls to setup() will run much faster." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The g-tools performed with gta.setup() are the following:\n", "* gtselect: [gtselect_fssc](https://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/help/gtselect.txt)\n", "* gtmktime: [gtmiktime_fssc](https://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/help/gtmktime.txt)\n", "* gtbin: [gtbin_fssc](https://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/help/gtbin.txt)\n", "* gtsrcmaps: [gtsrcmaps_fssc](https://fermi.gsfc.nasa.gov/ssc/data/analysis/scitools/help/gtsrcmaps.txt)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In order to have a summary of the source model you can use the command:" ] }, { "cell_type": "code", "execution_count": 5, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:45:08.809014Z", "iopub.status.busy": "2026-07-17T21:45:08.808829Z", "iopub.status.idle": "2026-07-17T21:45:08.812923Z", "shell.execute_reply": "2026-07-17T21:45:08.812119Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.059 1.45e-05 2.22 nan 1437.6 \n", "3FGL J0112.9-7506 2.572 1.172 1.31e-06 2.17 nan 120.3 \n", "3FGL J0023.9-7203 2.662 0.714 9.3e-06 2.65 nan 1679.9 \n", "3FGL J0029.1-7045 3.008 0.506 2.49e-06 2.28 nan 270.6 \n", "3FGL J0021.6-6835 5.122 1.859 5.27e-07 2.65 nan 84.2 \n", "3FGL J2351.9-7601 5.495 1.027 3.74e-06 1.69 nan 117.8 \n", "3FGL J2338.7-7401 5.777 0.677 4.38e-06 1.89 nan 213.7 \n", "3FGL J0146.4-6746 6.423 0.420 1.03e-06 2.39 nan 124.0 \n", "3FGL J2336.5-7620 6.454 0.557 1.66e-06 2.33 nan 187.3 \n", "3FGL J0002.0-6722 7.153 0.483 2.07e-06 1.95 nan 113.5 \n", "isodiff --- 1.000 0.0313 2.12 nan 8713.8 \n", "galdiff --- 1.000 0.132 0.00 nan 15952.5 \n", "\n" ] } ], "source": [ "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The table above contains:\n", "* sourcename as given in the catalog\n", "* offset from the center of the roi. Sources are ranked with respect to this parameter\n", "* normalization of the SED\n", "* energy flux of the source\n", "* index of the SED with a PowerLaw SED\n", "* Test Statistics\n", "* npred is the number of sources associated to the source\n", "* free column that tells if the SED parameter of the sources are free (if the column is filled with an asterix) or fixed without no asterix." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Source dictionary" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "First of all, let's make a fit using gta.fit tool.\n", "Source fitting with fermipy is generally performed with the optimize and fit methods. fit is a wrapper on the pyLikelihood fit method and performs a likelihood fit of all free parameters of the model. This method can be used to manually optimize of the model by calling it after freeing one or more source parameters." ] }, { "cell_type": "code", "execution_count": 6, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:45:08.814436Z", "iopub.status.busy": "2026-07-17T21:45:08.814283Z", "iopub.status.idle": "2026-07-17T21:46:42.693926Z", "shell.execute_reply": "2026-07-17T21:46:42.693189Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0059.0-7242e : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0112.9-7506 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0023.9-7203 : ['norm', 'alpha', 'beta']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0029.1-7045 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0021.6-6835 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2351.9-7601 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2338.7-7401 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0146.4-6746 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2336.5-7620 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0002.0-6722 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for isodiff : ['Normalization']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.free_source(): Freeing parameters for galdiff : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:45:08 INFO GTAnalysis.fit(): Starting fit.\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Drm_Cache::update Measured counts < 0 3FGL J0023.9-7203 21 -3.23992e-11 4.66315e-11\n", "414.718 426.073 373.189 279.838 180.063 100.2 48.7164 20.8444 7.69708 2.46851 0.687741 0.167074 0.0355885 0.00655943 0.00103862 0.000142191 1.68771e-05 1.73584e-06 1.54968e-07 1.20097e-08 8.06495e-10 4.66315e-11 \n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/runner/work/fermipy/fermipy/fermipy/utils.py:791: UserWarning: \n", "The maximal number of iterations maxit (set to 20 by the program)\n", "allowed for finding a smoothing spline with fp=s has been reached: s\n", "too small.\n", "There is an approximation returned but the corresponding weighted sum\n", "of squared residuals does not satisfy the condition abs(fp-s)/s < tol.\n", " spline = UnivariateSpline(x, y, k=2,\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.fit(): Fit returned successfully. Quality: 3 Status: 0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.fit(): LogLike: -73819.412 DeltaLogLike: 117.780 \n" ] } ], "source": [ "gta.free_sources()\n", "fitresult=gta.fit()" ] }, { "cell_type": "code", "execution_count": 7, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:42.695526Z", "iopub.status.busy": "2026-07-17T21:46:42.695347Z", "iopub.status.idle": "2026-07-17T21:46:42.699016Z", "shell.execute_reply": "2026-07-17T21:46:42.698316Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.662 0.592 9.79e-06 2.70 5210.01 1799.7 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now you see that the ts column is filled and the free column has all asterix because we have freed the sources." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Fermipy gives the possibility to access many informations on the sources in the model.\n", "Below a few examples." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### NAME AND CHARACTERISTICS OF THE SOURCE" ] }, { "cell_type": "code", "execution_count": 8, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:42.700519Z", "iopub.status.busy": "2026-07-17T21:46:42.700373Z", "iopub.status.idle": "2026-07-17T21:46:42.705420Z", "shell.execute_reply": "2026-07-17T21:46:42.704661Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "3FGL J0059.0-7242e\n", "3FGL J0059.0-7242e\n", "SpatialMap\n", "None\n", "SpatialMap\n", "DiffuseSource\n", "PowerLaw\n", "$FERMIPY_DATA_DIR/catalogs/Extended_archive_v15/Templates/SMC.fits\n", "None\n", "{'3FGL J0002.0-6722': np.float64(0.011794625485246409), '3FGL J0021.6-6835': np.float64(0.01432824253624362), '3FGL J0023.9-7203': np.float64(-0.022731648752179236), '3FGL J0029.1-7045': np.float64(-0.00040026779818002966), '3FGL J0059.0-7242e': np.float64(1.0000000000000002), '3FGL J0112.9-7506': np.float64(-0.0063932421491231526), '3FGL J0146.4-6746': np.float64(0.014675449837013115), '3FGL J2336.5-7620': np.float64(0.022505753251819995), '3FGL J2338.7-7401': np.float64(0.012231430371385152), '3FGL J2351.9-7601': np.float64(0.006146338781071517), 'galdiff': np.float64(-0.19592840199405734), 'isodiff': np.float64(0.023507182830944526)}\n", "[4.46766752e+02 3.08339076e+02 2.09899654e+02 1.41330540e+02\n", " 9.41484536e+01 6.23954054e+01 4.15026559e+01 2.77768730e+01\n", " 1.84121023e+01 1.21974134e+01 8.07721457e+00 5.37935823e+00\n", " 3.60865359e+00 2.40716571e+00 1.59378486e+00 1.05069752e+00\n", " 6.93063408e-01 4.55898417e-01 3.01254978e-01 1.98846312e-01\n", " 1.30754972e-01 8.46071151e-02]\n" ] } ], "source": [ "print(gta.roi.sources[0]['name']) #name of the source\n", "print(gta.roi.sources[0]['Source_Name']) #name of the source\n", "print(gta.roi.sources[0]['SpatialModel']) #spatial model\n", "print(gta.roi.sources[0]['SpatialWidth']) #spatial size parameter\n", "print(gta.roi.sources[0]['SpatialType']) #spatial size parameter\n", "print(gta.roi.sources[0]['SourceType']) #Source type\n", "print(gta.roi.sources[0]['SpectrumType']) #Spectrum type string\n", "print(gta.roi.sources[0]['Spatial_Filename']) #Path to spatial template\n", "print(gta.roi.sources[0]['Spectrum_Filename']) #Path to the SED source template\n", "print(gta.roi.sources[0]['correlation']) #Dictionary of correlation coefficients.\n", "print(gta.roi.sources[0]['model_counts']) #Vector of predicted counts for this source" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### CHARACTERISTICS OF THE POSITION OF THE SOURCE" ] }, { "cell_type": "code", "execution_count": 9, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:42.706881Z", "iopub.status.busy": "2026-07-17T21:46:42.706693Z", "iopub.status.idle": "2026-07-17T21:46:42.712622Z", "shell.execute_reply": "2026-07-17T21:46:42.711827Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "14.75\n", "-72.7\n", "302.1449476022065\n", "-44.41670249722556\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "nan\n", "-0.07331403829880656\n", "0.04939684436004943\n", "0.07503178772129071\n", "-0.0467496716123047\n", "0.08840452965331853\n" ] } ], "source": [ "print(gta.roi.sources[0]['ra']) #ra\n", "print(gta.roi.sources[0]['dec']) #dec\n", "print(gta.roi.sources[0]['glon']) #glon\n", "print(gta.roi.sources[0]['glat']) #glat\n", "print(gta.roi.sources[0]['ra_err']) #error for ra\n", "print(gta.roi.sources[0]['dec_err']) #error for dec\n", "print(gta.roi.sources[0]['glon_err']) #error for glon\n", "print(gta.roi.sources[0]['glat_err']) #error for glat\n", "print(gta.roi.sources[0]['pos_err']) #error for the position in deg\n", "print(gta.roi.sources[0]['pos_r68']) #68% CL error for the position\n", "print(gta.roi.sources[0]['pos_r95']) #95% CL error for the position\n", "print(gta.roi.sources[0]['pos_r99']) #99% CL error for the position\n", "print(gta.roi.sources[0]['pos_err_semimajor']) #1-sigma uncertainty (deg) along major axis of uncertainty ellipse.\n", "print(gta.roi.sources[0]['pos_err_semiminor']) #1-sigma uncertainty (deg) along minor axis of uncertainty ellipse.\n", "print(gta.roi.sources[0]['offset_ra']) #Right ascension offset from ROI center in local celestial projection (deg).\n", "print(gta.roi.sources[0]['offset_dec']) #Declination offset from ROI center in local celestial projection (deg).\n", "print(gta.roi.sources[0]['offset_glon']) #Galactic longitude offset from ROI center in local galactic projection (deg).\n", "print(gta.roi.sources[0]['offset_glat']) #Galactic latitude offset from ROI center in local galactic projection (deg).\n", "print(gta.roi.sources[0]['offset']) #Angular offset from ROI center (deg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "The error for the position is nan because we have not calculated yet the relocalization. \n", "Let's run the localization for a source with gta.localize tool." ] }, { "cell_type": "code", "execution_count": 10, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:42.713996Z", "iopub.status.busy": "2026-07-17T21:46:42.713850Z", "iopub.status.idle": "2026-07-17T21:46:57.533290Z", "shell.execute_reply": "2026-07-17T21:46:57.532452Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.662 0.592 9.79e-06 2.70 5210.01 1799.7 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.662 0.592 9.79e-06 2.70 5210.01 1799.7 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:42 INFO GTAnalysis.localize(): Running localization for 3FGL J0023.9-7203\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/runner/work/fermipy/fermipy/fermipy/utils.py:1023: OptimizeWarning: Covariance of the parameters could not be estimated\n", " popt, pcov = scipy.optimize.curve_fit(curve_fit_fn,\n", "2026-07-17 21:46:55 INFO GTAnalysis._localize(): Localization succeeded.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:55 INFO GTAnalysis._localize(): Updating source 3FGL J0023.9-7203 to localized position.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:55 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0023.9-7203\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:55 INFO GTAnalysis.add_source(): Adding source 3FGL J0023.9-7203\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "Initial guess is outside of provided bounds\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/runner/work/fermipy/fermipy/fermipy/utils.py:791: UserWarning: \n", "The maximal number of iterations maxit (set to 20 by the program)\n", "allowed for finding a smoothing spline with fp=s has been reached: s\n", "too small.\n", "There is an approximation returned but the corresponding weighted sum\n", "of squared residuals does not satisfy the condition abs(fp-s)/s < tol.\n", " spline = UnivariateSpline(x, y, k=2,\n", "2026-07-17 21:46:56 INFO GTAnalysis._localize(): Localization completed with new position:\n", "( ra, dec) = ( 5.9780 +/- 0.0711, -72.0743 +/- 0.0711)\n", "(glon,glat) = ( 305.9159 +/- 0.0711, -44.8941 +/- 0.0711)\n", "offset = 0.0092 r68 = 0.1078 r95 = 0.1739 r99 = 0.2157\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:56 INFO GTAnalysis._localize(): LogLike: -73816.037 DeltaLogLike: 3.375\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:56 INFO GTAnalysis.localize(): Finished localization.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 WARNING GTAnalysis.localize(): Saving TS maps in .npy files is disabled b/c of incompatibilities in python3, remove the maps from the /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/3fgl_j0023.9-7203_loc.npy\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 INFO GTAnalysis.localize(): Execution time: 14.81 s\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.free_sources(free=True)\n", "gta.print_model()\n", "gta.free_sources(skydir=gta.roi[gta.roi.sources[2].name].skydir,distance=[3.0],free=True)\n", "gta.print_model()\n", "localsmc = gta.localize(gta.roi.sources[2].name, update=True, make_plots=True)\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Using the option make_plots=True a few control plots are created like 3fgl_j0023.9-7203_localize_peak.png with the result for the likelihood analysis for the besy fit position and error for the position." ] }, { "cell_type": "code", "execution_count": 11, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:57.534790Z", "iopub.status.busy": "2026-07-17T21:46:57.534602Z", "iopub.status.idle": "2026-07-17T21:46:57.541363Z", "shell.execute_reply": "2026-07-17T21:46:57.540574Z" } }, "outputs": [ { "data": { "image/png": "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9ve//72ZRALjAR5++GHJyMiQa6+9tgnOhqh5YguIQzAjAgpXXKxjsZi9e/fKhAkTzMVs7TmdsfATfkRQOGMVVVQSrrrqKrnkkkuksrLSY1tc4P73v/+VgQMHejxQualt8uTJMnHiRPNDunTpUrNdSUlJo48H+JHBDxWmorMWwcGFf+3VR/HfuBBv7HlqtnV/r08//dRU+iyvv/66rFy5ss75eVvAx9dtsQrpSy+9ZAajWTA4rEePHuaiDenDILHFixdL37595brrrqvzXj/88IN06dJF/ve//5l44kceeeOZZ55p8L3wb1xUNTfFxcUyePBguf/++83FdFxcnFx++eXmgg8XM43d9p133jEXQfDxxx+bC+nmBp8HPhd8jrXzTkxMTL37bdmyxXw/cfGPWVW83TyoPbDxn//8p7mIWbZsmRkAicobKmlt2rQxecodKsS4MB07dqwZAIkFuh555BHz3a5dBrm/F/ItvgvN0fPPP28qpJhppnPnzjJ9+nRzUYyKbGO3XbVqlfn8kPewLf69b98+aW6QT9avX18nj+Fi3h0qW7gh8+yzz5r/Rt7AAFaUT7fddpvHtjhPnC9+pxqzP+A1xBdlL/5iZXDEHemt770qKirMvxH75gbnj+8Iviv4zuC7g5tD3spxzbb47cR3C/BdQyWfKKhhFiyy36pVq+o89+WXX2LGMdfdd9/t8fxvfvMbV0xMjGvTpk01z3333Xdm2+eee85j2/Hjx7tycnJ8SsPAgQNd06dPr/nvIUOGuD744INGH2/mzJmu0NBQ16uvvurxfEVFhUfaoVOnTq7bbrut0eep2db9vc466yzX6NGja15LTU11XXXVVT6dn6/bFhQUmHRMmzat5rkjR464NmzYUGdbfNbYFp+9pbKy0tW1a1dX3759Tews999/vys8PNy1cuXKet8rLCzM9cQTT7iamxtvvNEVFxdn0muZMWOGSfuLL77Y6G3btWvn+v3vf2/+PWLECNeYMWNczQ0+D6Td/XyOpaqqyjVy5EjXGWecYfJvt27d6myDvDhgwACP51avXm3yj7vCwkJXfHy867TTTvN4/o033jDp+vDDD2ue27lzpys5OblOPnd/L+RDfBeamzVr1rgiIiJcd911V81ziMWgQYNMDN2/S5ptkecQp/LyctcXX3xh/u3+HWwuoqKiXLfccssxtzt48KDX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mpmfcFHWEMzGgcLejgGt9R0PFRJUoHDxVBsufMB9nENtmvO0IyYNQZcV8CVemm29QVcspNv9M7cGpNc+P4wXwRz53iYKaM6QLzDgtPb54G48nkP3HlQatdv6O7RM4FytAfUYu4MxPDjH2muF4IF/YxKCxrC6urjnM4wBw9is2ovXoR8/Lo5wM8Sf4HuD88QkFbXPB9y/N5pt/ZmmfPKWRzS87V9fWYaxcOi65W9xxncCFffa54PvEHowuE8motmWiLw40fMAB6ItW7a4Pv/88zrPW/PNW3OBWx555BGzvsa3335b89ykSZPMtu7reGC+/08++cRjX8ynPmHCBLNt7deORXu81157rc785ljvBGs6jBo16pjv5+t5aretz9y5c10rVqzweA7z22MdgBYtWpg1ERqzrTdz5syps/YL1ga58sorXSEhIR7nAVj/oVWrVq5du3aZ/8Yc+pdeeqkrKSnpmO/VHD344INmjZJZs2bVPPf888+bz+uzzz5r9Lb+AOttYD0ECz5L5F+czwMPPHDM/etbB8Sb119/3axX4Q7rMsTGxpo1cNx98803Jg2PPvpozXOLFy92RUZGuu677z6Xv8F3BWsujB07tmYtlL1797ratGnjGj58eKO39QdYAwlrm7jDukP5+fmuli1buvbt21fzPMqadevWeWx7+PBh17hx40yZunDhwgbfS7v/4MGDXe3bt3cVFRWZ/0a8sV5Penq6R7r8BdZuwndk0aJFNc/94x//MOW4e5ml3ZaIPLEC4gD8+J133nnmwgIFMRb7wwUGFma64447PBbBsgrs66+/3hUdHW1+MHExj23/9re/eWy3Z88e1/nnn+/q0KGD+YttsYhgSkqK65VXXlGnszHHwwUVFvjConAXXHCBKyEhwSyAZl1IN8TX89RuW5/58+ebxf7wwGeAY6Cy1LlzZ9eCBQsavW19FZB+/fqZB/bH556VleXKyMhwTZ48uc72WLjq5JNPNotTXXbZZeZ909LSXF999ZXLHyFP/+pXv6r5vHAxjM/rscceO65t/QEWaMOF4Jlnnmkq7126dDEXJfiu11408HgrIDfddJNZ+A0xw0JmuPjDRSG+i7jAru2ZZ54xscX39eKLLzZ5GvmtdiXGX6BShe9Uz549zflnZ2eb7xxuphzPts0dKgU4j/79+5s8hryGhVrx3NKlSz22xUJ/vXr1cp100klmW/wWIQ4oj/773/8e8720++NGDbbHbwfijDShUjR79myXP8LNBJw3KvX4zmDBUJRV//rXv45rWyLyFIL/89YyQscP0/ShKRpjI9CFCTOVYPrE+qALDmaYQheUIUOGmBlZ6jvukiVLTFcp9JcfNGiQGTR+POnUHA/91TG/O6b5RJeaPn36qN7P1/PUbttQVxgMkEf/e8x2g/R6W59Bu219azJgf8x8hu40mNLY2ywpgK8eprpEFzZMt4suM9Zgf3+FWdIwwxM+L3SVa2g6U822zV1RUZEZZI7vBvp9ozsVPlNfYGprDGLHwHJf4HuK98L3FuUJZlhraK0aTMmLbiL4vmIGI0w1688wwBddqTDFKdY2QnlV34ximm39AWbCWrVqlSk7unTp4nUqcAu6n2FbTKKBc0c+0XRv1OyPLpTodoQxSMj/KMv8cS0fdyjH8fuNwf6YLth9scHj2ZaIqrECQkRERERETcZ/bwUREREREZHfYQWEiIiIiIiaDCsgRERERETUZFgBISIiIiKiJsMKCBERERERsQJCRERERESBhy0gRERERETUZFgBISIiIiKiJsMKCBERERERNRlWQIiIiIiIqMmwAkJERERERE0mvOneiogo+OzatUs++eQT+emnn+TgwYOSmZkpeXl5MmrUKPNvS0VFhdx4440yaNAgufbaaxs8ZmlpqUyfPl0WLFggxcXFkpGRIaeeeqoMHz68zravvPKKzJ49W9q0aSN//OMf67x+9913S2pqqtx55502nTEREVHD2AJCROQAl8slDz30kKlsvPDCCxIbGyvdunWTyspKeeqpp6RVq1byu9/9zqMC8tJLL8mMGTMaPC4qEx07djQVhvDwcOnevbuphFx00UWm8lJQUOCx/bfffmuOe++995p9a5syZYqpzBARETUVtoAQETngnnvukb///e/y8ssvy9VXX+3x2p/+9Cd566235M0331Qdc+nSpXLGGWfIKaecIu+//75ER0fXvHbHHXeY59EKsmjRIklKSvLYFxUeVFrmzJlznGdGRER0fNgCQkRks1WrVsmjjz4q11xzTZ3Kh+XSSy813aM0fvvb30pISIi8/vrrHpUPyMnJkX//+9+ybt06+dvf/lZn37/85S8yd+5cmTp1qvJsiIiI7MUKCBGRzdC6UVVVJVdddVWD26Wnp/t8zMLCQtM969xzz613vxEjRkjr1q1l8uTJdV678sorpWfPnqZlpry83Of3JSIishsrIERENlu2bJn5i/EZdh8TlYiG9OjRQzZt2iT79+/3eD40NNR0CVu7dq0Zk0JERHSicAwIEZHNDhw4YP7GxcV5PI+xGc8995zHc08++aTEx8f7fMxjbWu9jhm3EhMTPV4766yzZOTIkfLnP//ZtIjUfp2IiKgpsAWEiMhmLVq0MH+Lioo8nsd0twMHDjSP9evXm9mpjhw54tMxsS/s3bu3we3wOsaJpKSkeH0dY1N2797tdZwIERFRU2AFhIjIZgMGDDB/sU6Hu/z8fLnuuuvMo2vXrqpj9u3bV8LCwmTevHn1boOxHWhlQdevmJgYr9v07t1brrjiCnniiSdk69atqjQQERHZgRUQIiKb4QIf6348/fTTth0T3aXGjx8vX331lVnU0Js33njDtID8+te/bvBYDz74oFmn5L777rMtfURERL5iBYSIyGZYmfz555+XL7/8Um699VY5dOiQx+uYIetYXam8efzxxyU7O1vGjh1rBpO7+/rrr+W2226T008/XW666aYGj4OZspCuV199VXbu3KlOBxER0fHgIHQiIgdMnDjRTJeLBQKxRseQIUMkLS3NVDyWLFkipaWlcvPNN0tCQoLHfuhihS5atfXv319uvPFGs5YH/mJV9VNPPVWysrJkzZo1pusVWj4wxgNdtY7lD3/4gxmD0piKEBER0fEIcaEdnoiIHF2YEN2m0BKCSglaMTAGJCIiomabysrKBhcmbNOmjVnnw7JlyxZZuHChmW4Xxxw0aJAkJyfX2W/mzJmyevVqr5WaWbNmmbShEjN69GhbzpWIiOhYWAEhIiIiIqImwzEgRERERETUZFgBISIiIiKiJsMKCBERERERNRlWQIiIiIiIqMmwAkJERERERE2GFRAiIiIiImoyrIAQEREREVGTYQWEiIiIiIiaDCsgRERERETUZFgBISIiIiKiJsMKCBERERERNRlWQIiIiIiIqMmwAkJERERERE2GFRAiIiIiImoyrIAQEREREVGTYQWEiIiIiIiaDCsgREREREQkTeX/A34pHwKLwxo+AAAAAElFTkSuQmCC", "text/plain": [ "" ] }, "execution_count": 11, "metadata": {}, "output_type": "execute_result" } ], "source": [ "Image(filename='./SMC_data/3fgl_j0023.9-7203_localize_peak.png') " ] }, { "cell_type": "code", "execution_count": 12, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:57.543006Z", "iopub.status.busy": "2026-07-17T21:46:57.542688Z", "iopub.status.idle": "2026-07-17T21:46:57.548788Z", "shell.execute_reply": "2026-07-17T21:46:57.547900Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "5.9779545581707225\n", "-72.07433742876283\n", "305.9158892063132\n", "-44.89408992087733\n", "0.07106733751729176\n", "0.07106733751729176\n", "0.07106733751729176\n", "0.07106733751729176\n", "0.07106733751729176\n", "0.10777895370679902\n", "0.17393358820584948\n", "0.21567502663300472\n", "0.07106733751729176\n", "0.07106733751729176\n", "2.6152074375512866\n", "0.4891295017961297\n", "-2.5960570474440545\n", "-0.5822040522840131\n", "2.6606451217639844\n" ] } ], "source": [ "print(gta.roi.sources[2]['ra']) #ra\n", "print(gta.roi.sources[2]['dec']) #dec\n", "print(gta.roi.sources[2]['glon']) #glon\n", "print(gta.roi.sources[2]['glat']) #glat\n", "print(gta.roi.sources[2]['ra_err']) #error for ra\n", "print(gta.roi.sources[2]['dec_err']) #error for dec\n", "print(gta.roi.sources[2]['glon_err']) #error for glon\n", "print(gta.roi.sources[2]['glat_err']) #error for glat\n", "print(gta.roi.sources[2]['pos_err']) #error for the position in deg\n", "print(gta.roi.sources[2]['pos_r68']) #68% CL error for the position\n", "print(gta.roi.sources[2]['pos_r95']) #95% CL error for the position\n", "print(gta.roi.sources[2]['pos_r99']) #99% CL error for the position\n", "print(gta.roi.sources[2]['pos_err_semimajor']) #1-sigma uncertainty (deg) along major axis of uncertainty ellipse.\n", "print(gta.roi.sources[2]['pos_err_semiminor']) #1-sigma uncertainty (deg) along minor axis of uncertainty ellipse.\n", "print(gta.roi.sources[2]['offset_ra']) #Right ascension offset from ROI center in local celestial projection (deg).\n", "print(gta.roi.sources[2]['offset_dec']) #Declination offset from ROI center in local celestial projection (deg).\n", "print(gta.roi.sources[2]['offset_glon']) #Galactic longitude offset from ROI center in local galactic projection (deg).\n", "print(gta.roi.sources[2]['offset_glat']) #Galactic latitude offset from ROI center in local galactic projection (deg).\n", "print(gta.roi.sources[2]['offset']) #Angular offset from ROI center (deg)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "### SED PARAMETERS FLUX AND SCAN OF FLUX" ] }, { "cell_type": "code", "execution_count": 13, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:57.550159Z", "iopub.status.busy": "2026-07-17T21:46:57.550014Z", "iopub.status.idle": "2026-07-17T21:46:57.555530Z", "shell.execute_reply": "2026-07-17T21:46:57.554787Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[b'Prefactor' b'Index' b'Scale' b'' b'' b'' b'' b'' b'' b'']\n", "[ 1.35358139e-11 -2.45920708e+00 6.65532043e+02 nan\n", " nan nan nan nan\n", " nan nan]\n", "[1.14095725e-12 6.10696738e-02 nan nan\n", " nan nan nan nan\n", " nan nan]\n", "631.1835156842135\n", "-73819.41452124825\n", "[1.54521173e-10 3.09042346e-09 3.13115665e-09 3.17188984e-09\n", " 3.21262303e-09 3.25335621e-09 3.29408940e-09 3.33482259e-09\n", " 3.37555578e-09 3.41628897e-09 3.45702216e-09 3.49775534e-09\n", " 3.53848853e-09 3.57922172e-09 3.61995491e-09 3.66068810e-09\n", " 3.70142129e-09 3.74215447e-09 3.78288766e-09 3.82362085e-09]\n", "[0.06141497 1.22829935 1.24448889 1.26067844 1.27686798 1.29305753\n", " 1.30924707 1.32543662 1.34162616 1.35781571 1.37400525 1.39019479\n", " 1.40638434 1.42257388 1.43876343 1.45495297 1.47114252 1.48733206\n", " 1.50352161 1.51971115]\n", "1386.750224996883\n", "3.4056353408987307e-09\n", "1.6136696073208486e-10\n", "3.6648239580518937e-09\n", "8.153088091928068e-13\n" ] } ], "source": [ "print(gta.roi.sources[0]['param_names']) #Names of spectral parameters.\n", "print(gta.roi.sources[0]['param_values']) #Spectral parameter values.\n", "print(gta.roi.sources[0]['param_errors']) #Spectral parameters errors.\n", "print(gta.roi.sources[0]['ts']) #Source test statistic.\n", "print(gta.roi.sources[0]['loglike']) #Log-likelihood of the model evaluated at the best-fit normalization of the source.\n", "print(gta.roi.sources[0]['flux_scan']) #Flux values for scan of source normalization.\n", "print(gta.roi.sources[0]['norm_scan']) #Normalization parameters values for scan of source normalization.\n", "print(gta.roi.sources[0]['npred']) #Number of predicted counts from this source integrated over the analysis energy range.\n", "print(gta.roi.sources[0]['flux']) #Photon flux (cm−2 s−1) integrated over analysis energy range\n", "print(gta.roi.sources[0]['flux_err']) #Photon flux uncertainty (cm−2 s−1) integrated over analysis energy range\n", "print(gta.roi.sources[0]['flux_ul95']) #95% CL upper limit on the photon Differential photon flux (cm−2 s−1 MeV−1tegrated over analysis energy range\n", "print(gta.roi.sources[0]['dnde']) #Differential photon flux (cm−2 s−1 MeV−1) evaluated at the pivot energy." ] }, { "cell_type": "code", "execution_count": 14, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:57.556942Z", "iopub.status.busy": "2026-07-17T21:46:57.556780Z", "iopub.status.idle": "2026-07-17T21:46:59.898909Z", "shell.execute_reply": "2026-07-17T21:46:59.897972Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 INFO GTBinnedAnalysis.write_xml(): Writing /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/model_test_00.xml...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 INFO GTAnalysis.write_fits(): Writing /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/model_test.fits...\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Format %s cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %f cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n", "WARNING: Format %s cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "WARNING: Format %s cannot be mapped to the accepted TDISPn keyword values. Format will not be moved into TDISPn keyword. [astropy.io.fits.column]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:57 INFO GTBinnedAnalysis.write_model_map(): Generating model map for component 00.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:58 INFO GTAnalysis.write_roi(): Writing /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/model_test.npy...\n" ] } ], "source": [ "gta.write_roi('model_test',make_plots=True,save_model_map=True)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Customizing your model" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As we saw before you can customize your model directly in the config.yaml file.\n", "However, sometimes you want to change something in your model directly in your Python script." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can free or fix sources using gta.free_sources.\n", "First let's fix the SED parameter of all the sources." ] }, { "cell_type": "code", "execution_count": 15, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:59.900544Z", "iopub.status.busy": "2026-07-17T21:46:59.900392Z", "iopub.status.idle": "2026-07-17T21:46:59.914270Z", "shell.execute_reply": "2026-07-17T21:46:59.913522Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0059.0-7242e : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0112.9-7506 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0023.9-7203 : ['norm', 'alpha', 'beta']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0029.1-7045 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0021.6-6835 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2351.9-7601 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2338.7-7401 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0146.4-6746 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2336.5-7620 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0002.0-6722 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for isodiff : ['Normalization']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for galdiff : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 \n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 \n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 \n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 \n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 \n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 \n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 \n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 \n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 \n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 \n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 \n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 \n", "\n" ] } ], "source": [ "gta.free_sources(free=False)\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we free all parameters:" ] }, { "cell_type": "code", "execution_count": 16, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:59.915688Z", "iopub.status.busy": "2026-07-17T21:46:59.915545Z", "iopub.status.idle": "2026-07-17T21:46:59.929659Z", "shell.execute_reply": "2026-07-17T21:46:59.928896Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0059.0-7242e : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0112.9-7506 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0023.9-7203 : ['norm', 'alpha', 'beta']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0029.1-7045 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0021.6-6835 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2351.9-7601 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2338.7-7401 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0146.4-6746 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J2336.5-7620 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0002.0-6722 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for isodiff : ['Normalization']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for galdiff : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.free_sources(free=True)\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we free all the SED parameters of sources within 3 degrees from 3FGL J0059.0-7242e:" ] }, { "cell_type": "code", "execution_count": 17, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:59.931162Z", "iopub.status.busy": "2026-07-17T21:46:59.930995Z", "iopub.status.idle": "2026-07-17T21:46:59.950564Z", "shell.execute_reply": "2026-07-17T21:46:59.949854Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0059.0-7242e : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0112.9-7506 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0023.9-7203 : ['norm', 'alpha', 'beta']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0029.1-7045 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0021.6-6835 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2351.9-7601 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2338.7-7401 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0146.4-6746 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J2336.5-7620 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for 3FGL J0002.0-6722 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for isodiff : ['Normalization']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Fixing parameters for galdiff : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0059.0-7242e : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0112.9-7506 : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for 3FGL J0023.9-7203 : ['norm', 'alpha', 'beta']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for isodiff : ['Normalization']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.free_source(): Freeing parameters for galdiff : ['Prefactor', 'Index']\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 \n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 \n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 \n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 \n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 \n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 \n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 \n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.free_sources(free=False)\n", "gta.free_sources(skydir=gta.roi['3FGL J0059.0-7242e'].skydir,distance=3.0)\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now we want to delete the source 3FGL J0021.6-6835:" ] }, { "cell_type": "code", "execution_count": 18, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:46:59.951977Z", "iopub.status.busy": "2026-07-17T21:46:59.951828Z", "iopub.status.idle": "2026-07-17T21:47:00.083820Z", "shell.execute_reply": "2026-07-17T21:47:00.082950Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:46:59 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0021.6-6835\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 \n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 \n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 \n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 \n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 \n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 \n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.delete_source('3FGL J0021.6-6835')\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "You can also delete all the sources as a function of the npred/ts or position using the options minmax_npred/minmax_ts/skydir options. Finally, you can delete sources in a given list using the option names." ] }, { "cell_type": "code", "execution_count": 19, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:00.085388Z", "iopub.status.busy": "2026-07-17T21:47:00.085219Z", "iopub.status.idle": "2026-07-17T21:47:00.088817Z", "shell.execute_reply": "2026-07-17T21:47:00.088094Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method delete_sources in module fermipy.gtanalysis:\n", "\n", "delete_sources(cuts=None, distance=None, skydir=None, minmax_ts=None, minmax_npred=None, exclude=None, square=False, names=None) method of fermipy.gtanalysis.GTAnalysis instance\n", " Delete sources in the ROI model satisfying the given\n", " selection criteria.\n", " \n", " Parameters\n", " ----------\n", " cuts : dict\n", " Dictionary of [min,max] selections on source properties.\n", " \n", " distance : float\n", " Cut on angular distance from ``skydir``. If None then no\n", " selection will be applied.\n", " \n", " skydir : `~astropy.coordinates.SkyCoord`\n", " Reference sky coordinate for ``distance`` selection. If\n", " None then the distance selection will be applied with\n", " respect to the ROI center.\n", " \n", " minmax_ts : list\n", " Select sources that have TS in the range [min,max]. If\n", " either min or max are None then only a lower (upper) bound\n", " will be applied. If this parameter is none no selection\n", " will be applied.\n", " \n", " minmax_npred : list\n", " Select sources that have npred in the range [min,max]. If\n", " either min or max are None then only a lower (upper) bound\n", " will be applied. If this parameter is none no selection\n", " will be applied.\n", " \n", " square : bool\n", " Switch between applying a circular or square (ROI-like)\n", " selection on the maximum projected distance from the ROI\n", " center.\n", " \n", " names : list \n", " Select sources matching a name in this list.\n", " \n", " Returns\n", " -------\n", " srcs : list\n", " A list of `~fermipy.roi_model.Model` objects.\n", "\n" ] } ], "source": [ "help(gta.delete_sources)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below we delete all the sources that have an npred=[0,500]" ] }, { "cell_type": "code", "execution_count": 20, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:00.090285Z", "iopub.status.busy": "2026-07-17T21:47:00.090129Z", "iopub.status.idle": "2026-07-17T21:47:00.417428Z", "shell.execute_reply": "2026-07-17T21:47:00.416625Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0112.9-7506\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0029.1-7045\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J2351.9-7601\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J2338.7-7401\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0146.4-6746\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J2336.5-7620\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.delete_source(): Deleting source 3FGL J0002.0-6722\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.delete_sources(minmax_npred=[0,500])\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "We can aldo add a new source in the model using the gta.add_source function." ] }, { "cell_type": "code", "execution_count": 21, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:00.418928Z", "iopub.status.busy": "2026-07-17T21:47:00.418777Z", "iopub.status.idle": "2026-07-17T21:47:00.422095Z", "shell.execute_reply": "2026-07-17T21:47:00.421333Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method add_source in module fermipy.gtanalysis:\n", "\n", "add_source(name, src_dict, free=None, init_source=True, save_source_maps=True, use_pylike=True, use_single_psf=False, **kwargs) method of fermipy.gtanalysis.GTAnalysis instance\n", " Add a source to the ROI model. This function may be called\n", " either before or after `~fermipy.gtanalysis.GTAnalysis.setup`.\n", " \n", " Parameters\n", " ----------\n", " name : str\n", " Source name.\n", " \n", " src_dict : dict or `~fermipy.roi_model.Source` object\n", " Dictionary or source object defining the source properties\n", " (coordinates, spectral parameters, etc.).\n", " \n", " free : bool\n", " Initialize the source with a free normalization parameter.\n", " \n", " use_pylike : bool\n", " Create source maps with pyLikelihood.\n", " \n", " use_single_psf : bool \n", " Use the PSF model calculated for the ROI center. If false\n", " then a new model will be generated using the position of\n", " the source.\n", "\n" ] } ], "source": [ "help(gta.add_source)" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below we add a Source called Source_PL with a PLSuperExpCutoff and pointlike and a source called Source_Gauss that is spatial extended with a PowerLaw SED and with a RadialGaussian template with an extension of 1 deg." ] }, { "cell_type": "code", "execution_count": 22, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:00.423447Z", "iopub.status.busy": "2026-07-17T21:47:00.423305Z", "iopub.status.idle": "2026-07-17T21:47:06.416988Z", "shell.execute_reply": "2026-07-17T21:47:06.416189Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:00 INFO GTAnalysis.add_source(): Adding source Source_PL\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:01 INFO GTAnalysis.add_source(): Adding source Source_Gauss\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:06 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "Source_Gauss 0.655 1.000 0.00621 2.00 nan 427843.4 *\n", "Source_PL 2.274 1.000 0.00319 4.00 nan 483408.5 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.add_source('Source_PL',{ 'glon' : 300., 'glat' : -46.,'SpectrumType' : 'PLSuperExpCutoff', 'Index1':-1.5, 'Index2' : 1.0,'Scale' : 1000,'Prefactor':1e-9,'SpatialModel' : 'PointSource' })\n", "gta.add_source('Source_Gauss',{ 'glon' : 302., 'glat' : -45.,'SpectrumType' : 'PowerLaw', 'Index':2.0,'Scale' : 1000,'Prefactor':1e-9,'SpatialModel' : 'RadialGaussian', 'SpatialWidth': 1.0 })\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "Now I load the model saved into model_test to have back the intial model." ] }, { "cell_type": "code", "execution_count": 23, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:06.418580Z", "iopub.status.busy": "2026-07-17T21:47:06.418427Z", "iopub.status.idle": "2026-07-17T21:47:11.841962Z", "shell.execute_reply": "2026-07-17T21:47:11.841123Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:06 INFO GTAnalysis.load_roi(): Loading ROI file: /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/model_test.npy\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:06 INFO GTBinnedAnalysis._create_binned_analysis(): Creating BinnedAnalysis for component 00.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:11 INFO GTAnalysis.load_roi(): Finished Loading ROI\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:11 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] } ], "source": [ "gta.load_roi('model_test')\n", "gta.print_model()" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to modify the SED parameters using the functions gta.set_norm, gta.set_parameter, gta.set_parameter_bounds, gta.set_parameter_error ." ] }, { "cell_type": "code", "execution_count": 24, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:11.843512Z", "iopub.status.busy": "2026-07-17T21:47:11.843366Z", "iopub.status.idle": "2026-07-17T21:47:11.847505Z", "shell.execute_reply": "2026-07-17T21:47:11.846890Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method set_norm in module fermipy.gtanalysis:\n", "\n", "set_norm(name, value, update_source=True) method of fermipy.gtanalysis.GTAnalysis instance\n", "\n", "Help on method set_parameter in module fermipy.gtanalysis:\n", "\n", "set_parameter(name, par, value, true_value=True, scale=None, bounds=None, error=None, update_source=True) method of fermipy.gtanalysis.GTAnalysis instance\n", " Update the value of a parameter. Parameter bounds will\n", " automatically be adjusted to encompass the new parameter\n", " value.\n", " \n", " Parameters\n", " ----------\n", " \n", " name : str\n", " Source name.\n", " \n", " par : str\n", " Parameter name.\n", " \n", " value : float\n", " Parameter value. By default this argument should be the\n", " unscaled (True) parameter value.\n", " \n", " scale : float\n", " Parameter scale (optional). Value argument is interpreted\n", " with respect to the scale parameter if it is provided.\n", " \n", " error : float\n", " Parameter error (optional). By default this argument should be the\n", " unscaled (True) parameter value.\n", " \n", " update_source : bool\n", " Update the source dictionary for the object.\n", "\n" ] } ], "source": [ "help(gta.set_norm)\n", "help(gta.set_parameter)" ] }, { "cell_type": "code", "execution_count": 25, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:11.849129Z", "iopub.status.busy": "2026-07-17T21:47:11.848972Z", "iopub.status.idle": "2026-07-17T21:47:11.852923Z", "shell.execute_reply": "2026-07-17T21:47:11.852107Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[b'Prefactor' b'Index' b'Scale' b'' b'' b'' b'' b'' b'' b'']\n", "[ 1.35358139e-11 -2.45920708e+00 6.65532043e+02 nan\n", " nan nan nan nan\n", " nan nan]\n", "[ 1.14095725e-12 -6.10696738e-02 nan nan\n", " nan nan nan nan\n", " nan nan]\n" ] } ], "source": [ "print(gta.roi['3FGL J0059.0-7242e']['param_names'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_values'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_errors'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "In the example below we fix the normalization to 1e-11 and the slope to 2.0." ] }, { "cell_type": "code", "execution_count": 26, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:11.854582Z", "iopub.status.busy": "2026-07-17T21:47:11.854280Z", "iopub.status.idle": "2026-07-17T21:47:12.064272Z", "shell.execute_reply": "2026-07-17T21:47:12.063370Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[b'Prefactor' b'Index' b'Scale' b'' b'' b'' b'' b'' b'' b'']\n", "[1.00000000e-11 2.00000000e+00 6.65532043e+02 nan\n", " nan nan nan nan\n", " nan nan]\n", "[ 0. 0. nan nan nan nan nan nan nan nan]\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/runner/work/fermipy/fermipy/fermipy/utils.py:791: UserWarning: \n", "A theoretically impossible result was found during the iteration\n", "process for finding a smoothing spline with fp = s: s too small.\n", "There is an approximation returned but the corresponding weighted sum\n", "of squared residuals does not satisfy the condition abs(fp-s)/s < tol.\n", " spline = UnivariateSpline(x, y, k=2,\n" ] } ], "source": [ "gta.set_norm('3FGL J0059.0-7242e',value=1.)\n", "gta.set_parameter('3FGL J0059.0-7242e',par='Index',value=2.0)\n", "print(gta.roi['3FGL J0059.0-7242e']['param_names'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_values'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_errors'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to set the SED shape of a source using gta.set_source_spectrum tool." ] }, { "cell_type": "code", "execution_count": 27, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:12.065878Z", "iopub.status.busy": "2026-07-17T21:47:12.065688Z", "iopub.status.idle": "2026-07-17T21:47:12.068804Z", "shell.execute_reply": "2026-07-17T21:47:12.068066Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method set_source_spectrum in module fermipy.gtanalysis:\n", "\n", "set_source_spectrum(name, spectrum_type='PowerLaw', spectrum_pars=None, update_source=True) method of fermipy.gtanalysis.GTAnalysis instance\n", " Set the spectral model of a source. This function can be\n", " used to change the spectral type of a source or modify its\n", " spectral parameters. If called with\n", " spectrum_type='FileFunction' and spectrum_pars=None, the\n", " source spectrum will be replaced with a FileFunction with the\n", " same differential flux distribution as the original spectrum.\n", " \n", " Parameters\n", " ----------\n", " \n", " name : str\n", " Source name.\n", " \n", " spectrum_type : str\n", " Spectrum type (PowerLaw, etc.).\n", " \n", " spectrum_pars : dict\n", " Dictionary of spectral parameters (optional).\n", " \n", " update_source : bool\n", " Recompute all source characteristics (flux, TS, NPred)\n", " using the new spectral model of the source.\n", "\n" ] } ], "source": [ "help(gta.set_source_spectrum)" ] }, { "cell_type": "code", "execution_count": 28, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:12.070174Z", "iopub.status.busy": "2026-07-17T21:47:12.070031Z", "iopub.status.idle": "2026-07-17T21:47:17.473342Z", "shell.execute_reply": "2026-07-17T21:47:17.472537Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:12 INFO GTAnalysis.load_roi(): Loading ROI file: /home/runner/work/fermipy/fermipy/fermipy-extra/notebooks/SMC_data/model_test.npy\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:12 INFO GTBinnedAnalysis._create_binned_analysis(): Creating BinnedAnalysis for component 00.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:17 INFO GTAnalysis.load_roi(): Finished Loading ROI\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:17 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.354 1.02e-05 2.46 631.18 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.130 2.16e-06 1.95 144.74 129.0 *\n", "3FGL J0023.9-7203 2.661 0.580 9.37e-06 2.69 5335.62 1800.0 *\n", "3FGL J0029.1-7045 3.008 0.459 2.07e-06 2.33 269.91 239.4 *\n", "3FGL J0021.6-6835 5.122 2.612 2.59e-07 3.28 16.67 57.4 *\n", "3FGL J2351.9-7601 5.495 1.403 2.85e-06 2.01 242.92 191.8 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.63 187.3 *\n", "3FGL J0146.4-6746 6.423 0.669 1.76e-06 2.36 258.02 202.6 *\n", "3FGL J2336.5-7620 6.454 0.389 1.28e-06 2.29 112.27 135.3 *\n", "3FGL J0002.0-6722 7.153 0.410 1.63e-06 1.98 94.41 95.8 *\n", "isodiff --- 0.689 0.0216 2.12 696.46 6002.2 *\n", "galdiff --- 1.178 0.141 0.06 7478.91 18027.8 *\n", "\n" ] }, { "data": { "text/plain": [ "'PowerLaw'" ] }, "execution_count": 28, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gta.load_roi('model_test')\n", "gta.print_model()\n", "gta.roi['3FGL J0059.0-7242e']['SpectrumType']" ] }, { "cell_type": "code", "execution_count": 29, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:17.474801Z", "iopub.status.busy": "2026-07-17T21:47:17.474621Z", "iopub.status.idle": "2026-07-17T21:47:17.584950Z", "shell.execute_reply": "2026-07-17T21:47:17.584023Z" } }, "outputs": [ { "data": { "text/plain": [ "'LogParabola'" ] }, "execution_count": 29, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gta.set_source_spectrum('3FGL J0059.0-7242e',spectrum_type='LogParabola')\n", "gta.roi['3FGL J0059.0-7242e']['SpectrumType']" ] }, { "cell_type": "code", "execution_count": 30, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:17.586505Z", "iopub.status.busy": "2026-07-17T21:47:17.586344Z", "iopub.status.idle": "2026-07-17T21:47:21.156791Z", "shell.execute_reply": "2026-07-17T21:47:21.156077Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:17 INFO GTAnalysis.fit(): Starting fit.\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "/home/runner/work/fermipy/fermipy/fermipy/utils.py:791: UserWarning: \n", "The maximal number of iterations maxit (set to 20 by the program)\n", "allowed for finding a smoothing spline with fp=s has been reached: s\n", "too small.\n", "There is an approximation returned but the corresponding weighted sum\n", "of squared residuals does not satisfy the condition abs(fp-s)/s < tol.\n", " spline = UnivariateSpline(x, y, k=2,\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:21 INFO GTAnalysis.fit(): Fit returned successfully. Quality: 3 Status: 0\n" ] }, { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:21 INFO GTAnalysis.fit(): LogLike: -73811.626 DeltaLogLike: 29.438 \n" ] }, { "data": { "text/plain": [ "{'fit_quality': 3,\n", " 'fit_status': 0,\n", " 'fit_success': True,\n", " 'dloglike': 29.438400359096704,\n", " 'edm': 0.0004033016572372735,\n", " 'loglike': -73811.62563988405,\n", " 'covariance': array([[ 4.98629219e-03, 4.07347412e-03, -2.56864598e-04,\n", " -5.91365009e-05, 1.76998796e-05, 3.75333692e-05,\n", " -1.21485285e-05, 1.69193396e-05, 1.31116089e-05,\n", " 9.49772911e-05, 1.01857103e-05, 4.96530060e-05,\n", " 1.55705916e-05, 4.74475442e-05, 2.57957354e-05,\n", " 2.75735887e-05, 2.82867189e-05, 2.24057520e-05,\n", " 1.78674893e-05, 3.26361875e-05, 1.88920350e-05,\n", " -1.86739226e-05, -3.89407488e-05, -1.07202878e-04],\n", " [ 4.07347412e-03, 1.88374867e-02, -4.98055737e-04,\n", " -7.78192894e-05, 2.37559484e-05, 4.83939962e-05,\n", " -1.25459824e-05, 2.09820158e-05, 2.70618802e-05,\n", " 1.76532498e-04, 6.23873979e-05, 7.44861406e-05,\n", " 3.37914593e-05, 4.82922133e-05, 3.61999237e-05,\n", " 4.90309601e-05, 6.45053670e-05, 2.30251359e-05,\n", " 2.97986979e-05, 2.67093286e-05, 3.92198562e-05,\n", " -9.20721590e-05, -8.08075818e-05, -2.55917915e-05],\n", " [-2.56864598e-04, -4.98055737e-04, 2.44453581e+00,\n", " 6.83350993e-01, 2.91858612e-04, 6.35053183e-04,\n", " -1.72425904e-04, -3.80195253e-04, -5.14722583e-04,\n", " 2.57889035e-03, 9.58964444e-04, 7.58607396e-04,\n", " 4.23638368e-04, 1.08682076e-03, 7.50215159e-04,\n", " 5.88654264e-04, 8.93444866e-04, 3.92663638e-04,\n", " 4.77897482e-04, 2.30879923e-04, 5.36592649e-04,\n", " -7.56056886e-04, -2.07864485e-03, -2.61510057e-03],\n", " [-5.91365009e-05, -7.78192894e-05, 6.83350993e-01,\n", " 2.48294513e-01, 3.63887026e-05, 8.34100252e-05,\n", " -1.61365309e-05, -7.14754304e-05, -8.51758601e-05,\n", " 3.99114014e-04, 2.48909442e-04, 2.27790818e-05,\n", " 6.23966707e-05, 1.32939811e-04, 1.19724508e-04,\n", " 6.28637389e-05, 1.50794610e-04, 2.64312397e-05,\n", " 7.00424766e-05, -6.38831503e-05, 8.29022659e-05,\n", " -1.46544230e-04, -4.63398100e-04, -3.52403652e-04],\n", " [ 1.76998796e-05, 2.37559484e-05, 2.91858612e-04,\n", " 3.63887026e-05, 2.98286075e-03, 9.29147973e-03,\n", " -3.42812204e-03, -1.47178282e-04, -2.04060502e-04,\n", " -1.42904999e-04, -5.28668567e-05, 3.13586372e-05,\n", " 1.65773697e-05, 4.06509092e-05, 2.75506848e-05,\n", " 1.87468415e-05, 2.89272933e-05, 8.83706549e-06,\n", " 9.55440612e-06, 5.69433617e-06, 1.51822276e-05,\n", " -2.30698847e-05, -7.65257806e-05, -1.04615647e-04],\n", " [ 3.75333692e-05, 4.83939962e-05, 6.35053183e-04,\n", " 8.34100252e-05, 9.29147973e-03, 3.46407795e-02,\n", " -1.41000828e-02, -2.89779207e-04, -4.63621940e-04,\n", " -3.22809545e-04, -1.34400282e-04, 2.50710295e-05,\n", " 2.46609183e-05, 9.80763481e-05, 6.61243156e-05,\n", " 2.20882509e-05, 4.89812767e-05, 1.57325305e-05,\n", " 1.65658819e-05, -9.09740747e-06, 2.34116196e-05,\n", " -3.09266752e-06, -2.14113357e-04, -3.43681959e-04],\n", " [-1.21485285e-05, -1.25459824e-05, -1.72425904e-04,\n", " -1.61365309e-05, -3.42812204e-03, -1.41000828e-02,\n", " 6.31610633e-03, 8.00294872e-05, 1.34097046e-04,\n", " 9.66133718e-05, 4.16425164e-05, -4.35153877e-08,\n", " -3.83727487e-06, -3.19128409e-05, -1.99562718e-05,\n", " -2.10617388e-06, -8.78687936e-06, -4.85969836e-06,\n", " -3.36450985e-06, 3.71825401e-06, -3.58746788e-06,\n", " -1.45531527e-05, 6.57667526e-05, 1.32192972e-04],\n", " [ 1.69193396e-05, 2.09820158e-05, -3.80195253e-04,\n", " -7.14754304e-05, -1.47178282e-04, -2.89779207e-04,\n", " 8.00294872e-05, 3.30428484e-03, 4.07586399e-03,\n", " -2.87434660e-06, -4.20666489e-06, 5.26188058e-05,\n", " 1.98357269e-05, 3.23881677e-05, 2.06626231e-05,\n", " 2.86403341e-05, 3.32599189e-05, 1.62139547e-05,\n", " 1.65386316e-05, 2.38124852e-05, 2.09488374e-05,\n", " -4.28438830e-05, -3.50686436e-05, -3.47460811e-05],\n", " [ 1.31116089e-05, 2.70618802e-05, -5.14722583e-04,\n", " -8.51758601e-05, -2.04060502e-04, -4.63621940e-04,\n", " 1.34097046e-04, 4.07586399e-03, 1.17835401e-02,\n", " 2.88745714e-06, 6.89130424e-06, 5.12273022e-05,\n", " 2.62837653e-05, 3.17813478e-05, 2.64049890e-05,\n", " 3.33836356e-05, 4.80433392e-05, 1.35379164e-05,\n", " 2.09583763e-05, 1.10736523e-05, 2.84967986e-05,\n", " -7.01300240e-05, -7.03764311e-05, -1.26886300e-05],\n", " [ 9.49772911e-05, 1.76532498e-04, 2.57889035e-03,\n", " 3.99114014e-04, -1.42904999e-04, -3.22809545e-04,\n", " 9.66133718e-05, -2.87434660e-06, 2.88745714e-06,\n", " 1.30166929e-02, 5.76727069e-03, -1.42087779e-04,\n", " -5.66214456e-05, 1.62098587e-04, 1.31756287e-04,\n", " 2.17588538e-04, 2.82181829e-04, 8.72706624e-05,\n", " 1.21664666e-04, 1.11597447e-04, 1.67517721e-04,\n", " -4.56743677e-04, -2.83956218e-04, 1.08664629e-04],\n", " [ 1.01857103e-05, 6.23873979e-05, 9.58964444e-04,\n", " 2.48909442e-04, -5.28668567e-05, -1.34400282e-04,\n", " 4.16425164e-05, -4.20666489e-06, 6.89130424e-06,\n", " 5.76727069e-03, 3.72931329e-03, -3.74838619e-05,\n", " -1.41780208e-05, 3.56160014e-05, 4.91320549e-05,\n", " 6.32497912e-05, 1.11228994e-04, 1.07790278e-05,\n", " 4.19887204e-05, -1.84527932e-05, 6.16358139e-05,\n", " -1.88764141e-04, -1.84644790e-04, 8.57440889e-05],\n", " [ 4.96530060e-05, 7.44861406e-05, 7.58607396e-04,\n", " 2.27790818e-05, 3.13586372e-05, 2.50710295e-05,\n", " -4.35153877e-08, 5.26188058e-05, 5.12273022e-05,\n", " -1.42087779e-04, -3.74838619e-05, 3.73213252e-02,\n", " 1.32911670e-02, 5.16838678e-05, 3.61765975e-05,\n", " 1.31750060e-04, 1.32976137e-04, 5.22687801e-05,\n", " 5.51055374e-05, 1.20598148e-04, 8.37223284e-05,\n", " -2.69992641e-04, 4.01894615e-05, 2.85715008e-04],\n", " [ 1.55705916e-05, 3.37914593e-05, 4.23638368e-04,\n", " 6.23966707e-05, 1.65773697e-05, 2.46609183e-05,\n", " -3.83727487e-06, 1.98357269e-05, 2.62837653e-05,\n", " -5.66214456e-05, -1.41780208e-05, 1.32911670e-02,\n", " 1.22826585e-02, 2.17453871e-05, 2.06110233e-05,\n", " 4.95902935e-05, 6.03782131e-05, 1.65258131e-05,\n", " 2.41900971e-05, 2.87145672e-05, 3.62226798e-05,\n", " -1.14882332e-04, -2.88295723e-05, 9.80349914e-05],\n", " [ 4.74475442e-05, 4.82922133e-05, 1.08682076e-03,\n", " 1.32939811e-04, 4.06509092e-05, 9.80763481e-05,\n", " -3.19128409e-05, 3.23881677e-05, 3.17813478e-05,\n", " 1.62098587e-04, 3.56160014e-05, 5.16838678e-05,\n", " 2.17453871e-05, 9.37757728e-03, 8.09735700e-03,\n", " 3.53527197e-05, 4.65562897e-05, 3.56582431e-05,\n", " 3.18594207e-05, 3.18366126e-05, 2.97095377e-05,\n", " -4.72905538e-06, -1.32159784e-04, -2.87925756e-04],\n", " [ 2.57957354e-05, 3.61999237e-05, 7.50215159e-04,\n", " 1.19724508e-04, 2.75506848e-05, 6.61243156e-05,\n", " -1.99562718e-05, 2.06626231e-05, 2.64049890e-05,\n", " 1.31756287e-04, 4.91320549e-05, 3.61765975e-05,\n", " 2.06110233e-05, 8.09735700e-03, 1.31191561e-02,\n", " 2.87625767e-05, 4.41127952e-05, 1.98600261e-05,\n", " 2.40964149e-05, 1.09825826e-05, 2.65101870e-05,\n", " -3.53886544e-05, -1.05782113e-04, -1.36915908e-04],\n", " [ 2.75735887e-05, 4.90309601e-05, 5.88654264e-04,\n", " 6.28637389e-05, 1.87468415e-05, 2.20882509e-05,\n", " -2.10617388e-06, 2.86403341e-05, 3.33836356e-05,\n", " 2.17588538e-04, 6.32497912e-05, 1.31750060e-04,\n", " 4.95902935e-05, 3.53527197e-05, 2.87625767e-05,\n", " 7.11445266e-03, 9.58534951e-03, -4.88598707e-06,\n", " -2.81970061e-06, -4.90852093e-04, -4.53675478e-04,\n", " -1.64187840e-04, -1.94106438e-05, 1.41556083e-04],\n", " [ 2.82867189e-05, 6.45053670e-05, 8.93444866e-04,\n", " 1.50794610e-04, 2.89272933e-05, 4.89812767e-05,\n", " -8.78687936e-06, 3.32599189e-05, 4.80433392e-05,\n", " 2.82181829e-04, 1.11228994e-04, 1.32976137e-04,\n", " 6.03782131e-05, 4.65562897e-05, 4.41127952e-05,\n", " 9.58534951e-03, 2.27499507e-02, -8.65754955e-06,\n", " -1.91305613e-06, -4.30407483e-04, -5.67347107e-04,\n", " -2.00654045e-04, -8.88366229e-05, 1.30779632e-04],\n", " [ 2.24057520e-05, 2.30251359e-05, 3.92663638e-04,\n", " 2.64312397e-05, 8.83706549e-06, 1.57325305e-05,\n", " -4.85969836e-06, 1.62139547e-05, 1.35379164e-05,\n", " 8.72706624e-05, 1.07790278e-05, 5.22687801e-05,\n", " 1.65258131e-05, 3.56582431e-05, 1.98600261e-05,\n", " -4.88598707e-06, -8.65754955e-06, 3.90067827e-03,\n", " 1.49193174e-03, -1.06742674e-05, -1.49098671e-05,\n", " -3.32505963e-05, -2.15532011e-05, -4.88038517e-05],\n", " [ 1.78674893e-05, 2.97986979e-05, 4.77897482e-04,\n", " 7.00424766e-05, 9.55440612e-06, 1.65658819e-05,\n", " -3.36450985e-06, 1.65386316e-05, 2.09583763e-05,\n", " 1.21664666e-04, 4.19887204e-05, 5.51055374e-05,\n", " 2.41900971e-05, 3.18594207e-05, 2.40964149e-05,\n", " -2.81970061e-06, -1.91305613e-06, 1.49193174e-03,\n", " 8.62276208e-03, -1.64104879e-05, -1.34064323e-05,\n", " -6.89005858e-05, -5.00925406e-05, -3.38311658e-06],\n", " [ 3.26361875e-05, 2.67093286e-05, 2.30879923e-04,\n", " -6.38831503e-05, 5.69433617e-06, -9.09740747e-06,\n", " 3.71825401e-06, 2.38124852e-05, 1.10736523e-05,\n", " 1.11597447e-04, -1.84527932e-05, 1.20598148e-04,\n", " 2.87145672e-05, 3.18366126e-05, 1.09825826e-05,\n", " -4.90852093e-04, -4.30407483e-04, -1.06742674e-05,\n", " -1.64104879e-05, 2.55645720e-02, -5.24034416e-03,\n", " -8.15932778e-05, 7.06684580e-05, 7.83641264e-05],\n", " [ 1.88920350e-05, 3.92198562e-05, 5.36592649e-04,\n", " 8.29022659e-05, 1.51822276e-05, 2.34116196e-05,\n", " -3.58746788e-06, 2.09488374e-05, 2.84967986e-05,\n", " 1.67517721e-04, 6.16358139e-05, 8.37223284e-05,\n", " 3.62226798e-05, 2.97095377e-05, 2.65101870e-05,\n", " -4.53675478e-04, -5.67347107e-04, -1.49098671e-05,\n", " -1.34064323e-05, -5.24034416e-03, 9.82304854e-03,\n", " -1.20705643e-04, -4.70485214e-05, 7.79403255e-05],\n", " [-1.86739226e-05, -9.20721590e-05, -7.56056886e-04,\n", " -1.46544230e-04, -2.30698847e-05, -3.09266752e-06,\n", " -1.45531527e-05, -4.28438830e-05, -7.01300240e-05,\n", " -4.56743677e-04, -1.88764141e-04, -2.69992641e-04,\n", " -1.14882332e-04, -4.72905538e-06, -3.53886544e-05,\n", " -1.64187840e-04, -2.00654045e-04, -3.32505963e-05,\n", " -6.89005858e-05, -8.15932778e-05, -1.20705643e-04,\n", " 4.48047535e-04, 1.41568846e-05, -6.26287288e-04],\n", " [-3.89407488e-05, -8.08075818e-05, -2.07864485e-03,\n", " -4.63398100e-04, -7.65257806e-05, -2.14113357e-04,\n", " 6.57667526e-05, -3.50686436e-05, -7.03764311e-05,\n", " -2.83956218e-04, -1.84644790e-04, 4.01894615e-05,\n", " -2.88295723e-05, -1.32159784e-04, -1.05782113e-04,\n", " -1.94106438e-05, -8.88366229e-05, -2.15532011e-05,\n", " -5.00925406e-05, 7.06684580e-05, -4.70485214e-05,\n", " 1.41568846e-05, 4.23841747e-04, 5.18442831e-04],\n", " [-1.07202878e-04, -2.55917915e-05, -2.61510057e-03,\n", " -3.52403652e-04, -1.04615647e-04, -3.43681959e-04,\n", " 1.32192972e-04, -3.47460811e-05, -1.26886300e-05,\n", " 1.08664629e-04, 8.57440889e-05, 2.85715008e-04,\n", " 9.80349914e-05, -2.87925756e-04, -1.36915908e-04,\n", " 1.41556083e-04, 1.30779632e-04, -4.88038517e-05,\n", " -3.38311658e-06, 7.83641264e-05, 7.79403255e-05,\n", " -6.26287288e-04, 5.18442831e-04, 1.86288004e-03]]),\n", " 'correlation': array([[ 1.00000000e+00, 4.20305062e-01, -2.32657571e-03,\n", " -1.68067291e-03, 4.58949562e-03, 2.85584650e-03,\n", " -2.16476172e-03, 4.16826966e-03, 1.71052423e-03,\n", " 1.17890982e-02, 2.36204423e-03, 3.63980532e-03,\n", " 1.98961966e-03, 6.93872301e-03, 3.18937879e-03,\n", " 4.62949570e-03, 2.65584963e-03, 5.08043147e-03,\n", " 2.72490563e-03, 2.89062194e-03, 2.69939684e-03,\n", " -1.24935151e-02, -2.67863520e-02, -3.51742737e-02],\n", " [ 4.20305062e-01, 1.00000000e+00, -2.32096326e-03,\n", " -1.13786888e-03, 3.16916174e-03, 1.89446322e-03,\n", " -1.15018706e-03, 2.65948161e-03, 1.81638788e-03,\n", " 1.12736061e-02, 7.44339315e-03, 2.80921815e-03,\n", " 2.22151515e-03, 3.63345935e-03, 2.30273110e-03,\n", " 4.23533894e-03, 3.11597627e-03, 2.68609061e-03,\n", " 2.33809744e-03, 1.21711672e-03, 2.88317745e-03,\n", " -3.16923761e-02, -2.85982044e-02, -4.32012950e-03],\n", " [-2.32657571e-03, -2.32096326e-03, 1.00000000e+00,\n", " 8.77126166e-01, 3.41788795e-03, 2.18231817e-03,\n", " -1.38764890e-03, -4.23028620e-03, -3.03275361e-03,\n", " 1.44572052e-02, 1.00436107e-02, 2.51154141e-03,\n", " 2.44484255e-03, 7.17818087e-03, 4.18923462e-03,\n", " 4.46366245e-03, 3.78860498e-03, 4.02116986e-03,\n", " 3.29164764e-03, 9.23567633e-04, 3.46276781e-03,\n", " -2.28451611e-02, -6.45773513e-02, -3.87523238e-02],\n", " [-1.68067291e-03, -1.13786888e-03, 8.77126166e-01,\n", " 1.00000000e+00, 1.33710810e-03, 8.99375106e-04,\n", " -4.07475870e-04, -2.49536729e-03, -1.57469001e-03,\n", " 7.02041986e-03, 8.17981300e-03, 2.36632354e-04,\n", " 1.12987830e-03, 2.75502897e-03, 2.09771532e-03,\n", " 1.49570484e-03, 2.00637462e-03, 8.49305439e-04,\n", " 1.51375200e-03, -8.01832213e-04, 1.67864822e-03,\n", " -1.38938663e-02, -4.51719483e-02, -1.63856772e-02],\n", " [ 4.58949562e-03, 3.16916174e-03, 3.41788795e-03,\n", " 1.33710810e-03, 1.00000000e+00, 9.14059709e-01,\n", " -7.89796251e-01, -4.68800968e-02, -3.44195009e-02,\n", " -2.29340418e-02, -1.58508503e-02, 2.97209141e-03,\n", " 2.73875349e-03, 7.68614278e-03, 4.40415869e-03,\n", " 4.06949829e-03, 3.51156797e-03, 2.59072621e-03,\n", " 1.88392672e-03, 6.52089713e-04, 2.80476103e-03,\n", " -1.99556964e-02, -6.80596033e-02, -4.43800422e-02],\n", " [ 2.85584650e-03, 1.89446322e-03, 2.18231817e-03,\n", " 8.99375106e-04, 9.14059709e-01, 1.00000000e+00,\n", " -9.53241891e-01, -2.70853625e-02, -2.29473352e-02,\n", " -1.52020519e-02, -1.18247486e-02, 6.97268125e-04,\n", " 1.19555408e-03, 5.44158143e-03, 3.10180443e-03,\n", " 1.40700860e-03, 1.74480156e-03, 1.35342654e-03,\n", " 9.58511950e-04, -3.05706417e-04, 1.26915448e-03,\n", " -7.85013923e-04, -5.58789282e-02, -4.27829240e-02],\n", " [-2.16476172e-03, -1.15018706e-03, -1.38764890e-03,\n", " -4.07475870e-04, -7.89796251e-01, -9.53241891e-01,\n", " 1.00000000e+00, 1.75180830e-02, 1.55437786e-02,\n", " 1.06552144e-02, 8.58020798e-03, -2.83425951e-06,\n", " -4.35664330e-04, -4.14663133e-03, -2.19230889e-03,\n", " -3.14194631e-04, -7.33026571e-04, -9.79071776e-04,\n", " -4.55904507e-04, 2.92613983e-04, -4.55449427e-04,\n", " -8.65107991e-03, 4.01957203e-02, 3.85381803e-02],\n", " [ 4.16826966e-03, 2.65948161e-03, -4.23028620e-03,\n", " -2.49536729e-03, -4.68800968e-02, -2.70853625e-02,\n", " 1.75180830e-02, 1.00000000e+00, 6.53195301e-01,\n", " -4.38278399e-04, -1.19835293e-03, 4.73831272e-03,\n", " 3.11360267e-03, 5.81838311e-03, 3.13829499e-03,\n", " 5.90702207e-03, 3.83612028e-03, 4.51627262e-03,\n", " 3.09840107e-03, 2.59087655e-03, 3.67703736e-03,\n", " -3.52117849e-02, -2.96331872e-02, -1.40047269e-02],\n", " [ 1.71052423e-03, 1.81638788e-03, -3.03275361e-03,\n", " -1.57469001e-03, -3.44195009e-02, -2.29473352e-02,\n", " 1.55437786e-02, 6.53195301e-01, 1.00000000e+00,\n", " 2.33145654e-04, 1.03955889e-03, 2.44278399e-03,\n", " 2.18475881e-03, 3.02335463e-03, 2.12370969e-03,\n", " 3.64606991e-03, 2.93430371e-03, 1.99684277e-03,\n", " 2.07920131e-03, 6.38019167e-04, 2.64871381e-03,\n", " -3.05213717e-02, -3.14910746e-02, -2.70822284e-03],\n", " [ 1.17890982e-02, 1.12736061e-02, 1.44572052e-02,\n", " 7.02041986e-03, -2.29340418e-02, -1.52020519e-02,\n", " 1.06552144e-02, -4.38278399e-04, 2.33145654e-04,\n", " 1.00000000e+00, 8.27762164e-01, -6.44655763e-03,\n", " -4.47800356e-03, 1.46718059e-02, 1.00824962e-02,\n", " 2.26107484e-02, 1.63979095e-02, 1.22475121e-02,\n", " 1.14839406e-02, 6.11765057e-03, 1.48145096e-02,\n", " -1.89129889e-01, -1.20892452e-01, 2.20671084e-02],\n", " [ 2.36204423e-03, 7.44339315e-03, 1.00436107e-02,\n", " 8.17981300e-03, -1.58508503e-02, -1.18247486e-02,\n", " 8.58020798e-03, -1.19835293e-03, 1.03955889e-03,\n", " 8.27762164e-01, 1.00000000e+00, -3.17724984e-03,\n", " -2.09485991e-03, 6.02261914e-03, 7.02421092e-03,\n", " 1.22793086e-02, 1.20757286e-02, 2.82614925e-03,\n", " 7.40448748e-03, -1.88985471e-03, 1.01834645e-02,\n", " -1.46030313e-01, -1.46865828e-01, 3.25309923e-02],\n", " [ 3.63980532e-03, 2.80921815e-03, 2.51154141e-03,\n", " 2.36632354e-04, 2.97209141e-03, 6.97268125e-04,\n", " -2.83425951e-06, 4.73831272e-03, 2.44278399e-03,\n", " -6.44655763e-03, -3.17724984e-03, 1.00000000e+00,\n", " 6.20780973e-01, 2.76268362e-03, 1.63491900e-03,\n", " 8.08540070e-03, 4.56357251e-03, 4.33205309e-03,\n", " 3.07180408e-03, 3.90429700e-03, 4.37259873e-03,\n", " -6.60254474e-02, 1.01048947e-02, 3.42658951e-02],\n", " [ 1.98961966e-03, 2.22151515e-03, 2.44484255e-03,\n", " 1.12987830e-03, 2.73875349e-03, 1.19555408e-03,\n", " -4.35664330e-04, 3.11360267e-03, 2.18475881e-03,\n", " -4.47800356e-03, -2.09485991e-03, 6.20780973e-01,\n", " 1.00000000e+00, 2.02616882e-03, 1.62367990e-03,\n", " 5.30493104e-03, 3.61196752e-03, 2.38751759e-03,\n", " 2.35054311e-03, 1.62045443e-03, 3.29770074e-03,\n", " -4.89716805e-02, -1.26354335e-02, 2.04947432e-02],\n", " [ 6.93872301e-03, 3.63345935e-03, 7.17818087e-03,\n", " 2.75502897e-03, 7.68614278e-03, 5.44158143e-03,\n", " -4.14663133e-03, 5.81838311e-03, 3.02335463e-03,\n", " 1.46718059e-02, 6.02261914e-03, 2.76268362e-03,\n", " 2.02616882e-03, 1.00000000e+00, 7.30037234e-01,\n", " 4.32819438e-03, 3.18744578e-03, 5.89582453e-03,\n", " 3.54298528e-03, 2.05618536e-03, 3.09547588e-03,\n", " -2.30710324e-03, -6.62906272e-02, -6.88878681e-02],\n", " [ 3.18937879e-03, 2.30273110e-03, 4.18923462e-03,\n", " 2.09771532e-03, 4.40415869e-03, 3.10180443e-03,\n", " -2.19230889e-03, 3.13829499e-03, 2.12370969e-03,\n", " 1.00824962e-02, 7.02421092e-03, 1.63491900e-03,\n", " 1.62367990e-03, 7.30037234e-01, 1.00000000e+00,\n", " 2.97717314e-03, 2.55341495e-03, 2.77623868e-03,\n", " 2.26556372e-03, 5.99697535e-04, 2.33526782e-03,\n", " -1.45965108e-02, -4.48598092e-02, -2.76954557e-02],\n", " [ 4.62949570e-03, 4.23533894e-03, 4.46366245e-03,\n", " 1.49570484e-03, 4.06949829e-03, 1.40700860e-03,\n", " -3.14194631e-04, 5.90702207e-03, 3.64606991e-03,\n", " 2.26107484e-02, 1.22793086e-02, 8.08540070e-03,\n", " 5.30493104e-03, 4.32819438e-03, 2.97717314e-03,\n", " 1.00000000e+00, 7.53437056e-01, -9.27494837e-04,\n", " -3.60005429e-04, -3.63965850e-02, -5.42689493e-02,\n", " -9.19619550e-02, -1.11780830e-02, 3.88834996e-02],\n", " [ 2.65584963e-03, 3.11597627e-03, 3.78860498e-03,\n", " 2.00637462e-03, 3.51156797e-03, 1.74480156e-03,\n", " -7.33026571e-04, 3.83612028e-03, 2.93430371e-03,\n", " 1.63979095e-02, 1.20757286e-02, 4.56357251e-03,\n", " 3.61196752e-03, 3.18744578e-03, 2.55341495e-03,\n", " 7.53437056e-01, 1.00000000e+00, -9.19040584e-04,\n", " -1.36588546e-04, -1.78472094e-02, -3.79520701e-02,\n", " -6.28486051e-02, -2.86088200e-02, 2.00889592e-02],\n", " [ 5.08043147e-03, 2.68609061e-03, 4.02116986e-03,\n", " 8.49305439e-04, 2.59072621e-03, 1.35342654e-03,\n", " -9.79071776e-04, 4.51627262e-03, 1.99684277e-03,\n", " 1.22475121e-02, 2.82614925e-03, 4.33205309e-03,\n", " 2.38751759e-03, 5.89582453e-03, 2.77623868e-03,\n", " -9.27494837e-04, -9.19040584e-04, 1.00000000e+00,\n", " 2.57250179e-01, -1.06892873e-03, -2.40868807e-03,\n", " -2.51516989e-02, -1.67625409e-02, -1.81047106e-02],\n", " [ 2.72490563e-03, 2.33809744e-03, 3.29164764e-03,\n", " 1.51375200e-03, 1.88392672e-03, 9.58511950e-04,\n", " -4.55904507e-04, 3.09840107e-03, 2.07920131e-03,\n", " 1.14839406e-02, 7.40448748e-03, 3.07180408e-03,\n", " 2.35054311e-03, 3.54298528e-03, 2.26556372e-03,\n", " -3.60005429e-04, -1.36588546e-04, 2.57250179e-01,\n", " 1.00000000e+00, -1.10529710e-03, -1.45668911e-03,\n", " -3.50540068e-02, -2.62028175e-02, -8.44114417e-04],\n", " [ 2.89062194e-03, 1.21711672e-03, 9.23567633e-04,\n", " -8.01832213e-04, 6.52089713e-04, -3.05706417e-04,\n", " 2.92613983e-04, 2.59087655e-03, 6.38019167e-04,\n", " 6.11765057e-03, -1.88985471e-03, 3.90429700e-03,\n", " 1.62045443e-03, 2.05618536e-03, 5.99697535e-04,\n", " -3.63965850e-02, -1.78472094e-02, -1.06892873e-03,\n", " -1.10529710e-03, 1.00000000e+00, -3.30687213e-01,\n", " -2.41086599e-02, 2.14686377e-02, 1.13554824e-02],\n", " [ 2.69939684e-03, 2.88317745e-03, 3.46276781e-03,\n", " 1.67864822e-03, 2.80476103e-03, 1.26915448e-03,\n", " -4.55449427e-04, 3.67703736e-03, 2.64871381e-03,\n", " 1.48145096e-02, 1.01834645e-02, 4.37259873e-03,\n", " 3.29770074e-03, 3.09547588e-03, 2.33526782e-03,\n", " -5.42689493e-02, -3.79520701e-02, -2.40868807e-03,\n", " -1.45668911e-03, -3.30687213e-01, 1.00000000e+00,\n", " -5.75363598e-02, -2.30579647e-02, 1.82199267e-02],\n", " [-1.24935151e-02, -3.16923761e-02, -2.28451611e-02,\n", " -1.38938663e-02, -1.99556964e-02, -7.85013923e-04,\n", " -8.65107991e-03, -3.52117849e-02, -3.05213717e-02,\n", " -1.89129889e-01, -1.46030313e-01, -6.60254474e-02,\n", " -4.89716805e-02, -2.30710324e-03, -1.45965108e-02,\n", " -9.19619550e-02, -6.28486051e-02, -2.51516989e-02,\n", " -3.50540068e-02, -2.41086599e-02, -5.75363598e-02,\n", " 1.00000000e+00, 3.24865640e-02, -6.85518384e-01],\n", " [-2.67863520e-02, -2.85982044e-02, -6.45773513e-02,\n", " -4.51719483e-02, -6.80596033e-02, -5.58789282e-02,\n", " 4.01957203e-02, -2.96331872e-02, -3.14910746e-02,\n", " -1.20892452e-01, -1.46865828e-01, 1.01048947e-02,\n", " -1.26354335e-02, -6.62906272e-02, -4.48598092e-02,\n", " -1.11780830e-02, -2.86088200e-02, -1.67625409e-02,\n", " -2.62028175e-02, 2.14686377e-02, -2.30579647e-02,\n", " 3.24865640e-02, 1.00000000e+00, 5.83453922e-01],\n", " [-3.51742737e-02, -4.32012950e-03, -3.87523238e-02,\n", " -1.63856772e-02, -4.43800422e-02, -4.27829240e-02,\n", " 3.85381803e-02, -1.40047269e-02, -2.70822284e-03,\n", " 2.20671084e-02, 3.25309923e-02, 3.42658951e-02,\n", " 2.04947432e-02, -6.88878681e-02, -2.76954557e-02,\n", " 3.88834996e-02, 2.00889592e-02, -1.81047106e-02,\n", " -8.44114417e-04, 1.13554824e-02, 1.82199267e-02,\n", " -6.85518384e-01, 5.83453922e-01, 1.00000000e+00]]),\n", " 'values': array([0.40874105, 1.97700749, 2.60173334, 3.28138638, 0.59399618,\n", " 1.17230004, 0.585862 , 0.46053991, 2.33014509, 1.35307766,\n", " 2.458851 , 1.13338827, 1.95255673, 0.66393218, 2.35290479,\n", " 0.39184757, 2.29005614, 0.59761283, 2.01576602, 1.40357282,\n", " 2.01264112, 1.09409227, 0.04642852, 0.68378211]),\n", " 'errors': array([0.07061368, 0.13724972, 1.56350114, 0.49829159, 0.05461557,\n", " 0.18612034, 0.07947393, 0.05748291, 0.10855202, 0.11409072,\n", " 0.0610681 , 0.19318728, 0.11082716, 0.09683789, 0.11453888,\n", " 0.08434721, 0.15083087, 0.06245541, 0.09285883, 0.15988925,\n", " 0.09911129, 0.02116713, 0.02058742, 0.04316109]),\n", " 'indices': array([ 0, 1, 3, 4, 6, 7, 8, 10, 11, 13, 14, 17, 18, 20, 21, 23, 24,\n", " 26, 27, 29, 30, 32, 33, 35]),\n", " 'is_norm': array([ True, False, True, False, True, False, False, True, False,\n", " True, False, True, False, True, False, True, False, True,\n", " False, True, False, True, False, True]),\n", " 'src_names': ['3FGL J0002.0-6722',\n", " '3FGL J0002.0-6722',\n", " '3FGL J0021.6-6835',\n", " '3FGL J0021.6-6835',\n", " '3FGL J0023.9-7203',\n", " '3FGL J0023.9-7203',\n", " '3FGL J0023.9-7203',\n", " '3FGL J0029.1-7045',\n", " '3FGL J0029.1-7045',\n", " '3FGL J0059.0-7242e',\n", " '3FGL J0059.0-7242e',\n", " '3FGL J0112.9-7506',\n", " '3FGL J0112.9-7506',\n", " '3FGL J0146.4-6746',\n", " '3FGL J0146.4-6746',\n", " '3FGL J2336.5-7620',\n", " '3FGL J2336.5-7620',\n", " '3FGL J2338.7-7401',\n", " '3FGL J2338.7-7401',\n", " '3FGL J2351.9-7601',\n", " '3FGL J2351.9-7601',\n", " 'galdiff',\n", " 'galdiff',\n", " 'isodiff'],\n", " 'par_names': ['Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'norm',\n", " 'alpha',\n", " 'beta',\n", " 'Prefactor',\n", " 'Index',\n", " 'norm',\n", " 'alpha',\n", " 'Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'Prefactor',\n", " 'Index',\n", " 'Normalization'],\n", " 'config': {'optimizer': 'MINUIT',\n", " 'tol': 0.001,\n", " 'max_iter': 100,\n", " 'init_lambda': 0.0001,\n", " 'retries': 3,\n", " 'min_fit_quality': 2,\n", " 'verbosity': 0,\n", " 'covar': True,\n", " 'reoptimize': False},\n", " 'niter': 1}" ] }, "execution_count": 30, "metadata": {}, "output_type": "execute_result" } ], "source": [ "gta.fit()" ] }, { "cell_type": "code", "execution_count": 31, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:21.158377Z", "iopub.status.busy": "2026-07-17T21:47:21.158224Z", "iopub.status.idle": "2026-07-17T21:47:21.161869Z", "shell.execute_reply": "2026-07-17T21:47:21.161059Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "[b'norm' b'alpha' b'beta' b'Eb' b'' b'' b'' b'' b'' b'']\n", "[1.35307766e-11 2.45885100e+00 0.00000000e+00 6.65532043e+02\n", " nan nan nan nan\n", " nan nan]\n", "[1.14090722e-12 6.10681037e-02 nan nan\n", " nan nan nan nan\n", " nan nan]\n" ] } ], "source": [ "print(gta.roi['3FGL J0059.0-7242e']['param_names'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_values'])\n", "print(gta.roi['3FGL J0059.0-7242e']['param_errors'])" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "As you can see above the tool gta.set_source_spectrum has modified the SED shape from PowerLaw to LogParabola." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "It is also possible to set the spatial morphology of a source using gta.set_source_morphology" ] }, { "cell_type": "code", "execution_count": 32, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:21.163269Z", "iopub.status.busy": "2026-07-17T21:47:21.163124Z", "iopub.status.idle": "2026-07-17T21:47:21.165990Z", "shell.execute_reply": "2026-07-17T21:47:21.165282Z" } }, "outputs": [ { "name": "stdout", "output_type": "stream", "text": [ "Help on method set_source_morphology in module fermipy.gtanalysis:\n", "\n", "set_source_morphology(name, **kwargs) method of fermipy.gtanalysis.GTAnalysis instance\n", " Set the spatial model of a source.\n", " \n", " Parameters\n", " ----------\n", " name : str\n", " Source name.\n", " \n", " spatial_model : str\n", " Spatial model name (PointSource, RadialGaussian, etc.).\n", " \n", " spatial_pars : dict\n", " Dictionary of spatial parameters (optional).\n", " \n", " use_cache : bool \n", " Generate the spatial model by interpolating the cached source\n", " map.\n", " \n", " use_pylike : bool\n", "\n" ] } ], "source": [ "help(gta.set_source_morphology)" ] }, { "cell_type": "code", "execution_count": 33, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:21.167326Z", "iopub.status.busy": "2026-07-17T21:47:21.167186Z", "iopub.status.idle": "2026-07-17T21:47:26.457485Z", "shell.execute_reply": "2026-07-17T21:47:26.456594Z" } }, "outputs": [], "source": [ "gta.set_source_morphology(name='3FGL J0029.1-7045',spatial_model='RadialGaussian',spatial_pars={'SpatialWidth': 1.0} )" ] }, { "cell_type": "code", "execution_count": 34, "metadata": { "execution": { "iopub.execute_input": "2026-07-17T21:47:26.459153Z", "iopub.status.busy": "2026-07-17T21:47:26.459000Z", "iopub.status.idle": "2026-07-17T21:47:26.463543Z", "shell.execute_reply": "2026-07-17T21:47:26.462636Z" } }, "outputs": [ { "name": "stderr", "output_type": "stream", "text": [ "2026-07-17 21:47:26 INFO GTAnalysis.print_model(): \n", "sourcename offset norm eflux index ts npred free\n", "--------------------------------------------------------------------------------\n", "3FGL J0059.0-7242e 0.088 1.353 1.02e-05 2.46 631.25 1386.8 *\n", "3FGL J0112.9-7506 2.572 1.133 2.16e-06 1.95 145.28 129.2 *\n", "3FGL J0023.9-7203 2.661 0.594 9.79e-06 2.70 5213.28 1799.4 *\n", "3FGL J0029.1-7045 3.008 0.461 2.07e-06 2.33 270.96 240.1 *\n", "3FGL J0021.6-6835 5.122 2.602 2.57e-07 3.28 16.47 57.1 *\n", "3FGL J2351.9-7601 5.495 1.404 2.85e-06 2.01 243.25 192.1 *\n", "3FGL J2338.7-7401 5.777 0.598 2.91e-06 2.02 294.32 187.1 *\n", "3FGL J0146.4-6746 6.423 0.664 1.76e-06 2.35 256.38 201.6 *\n", "3FGL J2336.5-7620 6.454 0.392 1.28e-06 2.29 112.84 135.9 *\n", "3FGL J0002.0-6722 7.153 0.409 1.63e-06 1.98 94.14 95.5 *\n", "isodiff --- 0.684 0.0214 2.12 714.05 6222.4 *\n", "galdiff --- 1.094 0.134 0.05 7037.89 17807.9 *\n", "\n" ] }, { "name": "stdout", "output_type": "stream", "text": [ "RadialGaussian\n", "1.0\n" ] } ], "source": [ "gta.print_model()\n", "print(gta.roi['3FGL J0029.1-7045']['SpatialType'])\n", "print(gta.roi['3FGL J0029.1-7045']['SpatialWidth'])" ] }, { "cell_type": "code", "execution_count": null, "metadata": {}, "outputs": [], "source": [] } ], "metadata": { "kernelspec": { "display_name": "Python 3 (ipykernel)", "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.11.15" } }, "nbformat": 4, "nbformat_minor": 4 }