{"action":"created","comment":{"url":"https://api.github.com/repos/gammapy/gammapy/pulls/comments/200107289","pull_request_review_id":134356276,"id":200107289,"node_id":"MDI0OlB1bGxSZXF1ZXN0UmV2aWV3Q29tbWVudDIwMDEwNzI4OQ==","diff_hunk":"@@ -0,0 +1,266 @@\n+# Licensed under a 3-clause BSD style license - see LICENSE.rst\n+from __future__ import absolute_import, division, print_function, unicode_literals\n+import numpy as np\n+from astropy.coordinates import Angle\n+from astropy.coordinates.angle_utilities import angular_separation\n+import astropy.units as u\n+from astropy.units import Quantity\n+from astropy.convolution import convolve_fft\n+from ..maps import Map, WcsGeom\n+from ..image.models.gauss import Gauss2DPDF\n+from ..irf import TablePSF\n+\n+__all__ = [\n+    'PSFKernel',\n+]\n+\n+def _make_kernel_geom(geom, max_radius):\n+    # Create a new geom object with an odd number of pixel and a maximum size\n+    # This is useful for PSF kernel creation.\n+    center = geom.center_coord[:2]\n+    binsz = Quantity(np.abs(geom.wcs.wcs.cdelt[0]), 'deg')\n+    max_radius = Quantity(max_radius, 'deg')\n+    npix = 2 * int(max_radius / binsz) + 1\n+    return WcsGeom.create(skydir=center, binsz=binsz, npix=npix, proj=geom.projection,\n+                          coordsys=geom.coordsys, axes=geom.axes)\n+\n+\n+def _compute_kernel_separations(geom, factor):\n+    # utility function used for preparing distance to the center of the upsampled geom\n+    # TODO : take into account non regular geometry for energy dependent PSF kernel size\n+    if geom.is_regular is False:\n+        raise ValueError(\"Non regular geometries are not supported yet.\")\n+\n+    upsampled_image_geom = geom.to_image().upsample(factor)\n+    # get center coordinate\n+    center_coord = upsampled_image_geom.center_coord * u.deg\n+    # get coordinates\n+    map_c = upsampled_image_geom.get_coord()\n+    # compute distances to map center\n+    separations = angular_separation(center_coord[0], center_coord[1], map_c.lon * u.deg, map_c.lat * u.deg)\n+\n+    # Create map\n+    kernel_map = Map.from_geom(geom=upsampled_image_geom.to_cube(axes=geom.axes),\n+                               unit='')\n+    return kernel_map, separations\n+\n+def table_psf_to_kernel_map(table_psf, geom, factor=4):\n+    \"\"\"Compute a PSF kernel on a given MapGeom.\n+\n+    If the MapGeom is not an image, the same kernel will be present on all axes.\n+\n+    The PSF is estimated by oversampling defined by a given factor.\n+    The PSF kernel is normalized\n+\n+    Parameters\n+    ----------\n+    table_psf : `~gammapy.irf.TablePSF`\n+        the input table PSF\n+    geom : `~gammapy.maps.MapGeom`\n+        the target geometry. The PSF kernel will be centered on the spatial center.\n+    factor : int\n+        the oversample factor to compute the PSF\n+    \"\"\"\n+\n+    # prepare map and compute distances to map center\n+    kernel_map, rads = _compute_kernel_separations(geom, factor)\n+\n+    vals = table_psf.evaluate(rad=rads)\n+    norm = np.sum(vals).value\n+\n+    # loop over images and fill map\n+    for img, idx in kernel_map.iter_by_image():\n+        img += vals.reshape(img.shape).value/norm\n+\n+    # downsample the psf kernel map. Take the average\n+    kernel_map = kernel_map.downsample(factor, preserve_counts=True)\n+\n+    return kernel_map\n+\n+\n+def energy_dependent_table_psf_to_kernel_map(table_psf, geom, factor=4):\n+    \"\"\"Compute an energy dependent PSF kernel on a given MapGeom.\n+\n+    The PSF is estimated by oversampling defined by a given factor.\n+\n+    Parameters\n+    ----------\n+    table_psf : `~gammapy.irf.EnergyDependentTablePSF`\n+        the input table PSF\n+    geom : `~gammapy.maps.MapGeom`\n+        the target geometry. The PSF kernel will be centered on the spatial centre.\n+        the geometry axes should contain an energy MapAxis. The kernel will be\n+        duplicated along other axes.\n+    factor : int\n+        the oversample factor to compute the PSF\n+    \"\"\"\n+    # Find energy axis in geom\n+    energy_axis = geom.get_axis_by_type('energy')\n+    energy_idx = geom.axes.index(energy_axis)\n+    energy_unit = u.Unit(energy_axis.unit)\n+\n+    # prepare map and compute distances to map center\n+    kernel_map, rads = _compute_kernel_separations(geom, factor)\n+\n+    # loop over images\n+    for img, idx in kernel_map.iter_by_image():\n+        energy = energy_axis.center[idx[energy_idx]] * energy_unit\n+        vals = table_psf.evaluate(energy=energy, rad=rads).reshape(img.shape)\n+        img += vals.value / np.sum(vals).value\n+\n+    # downsample the psf kernel map. Take the average\n+    kernel_map = kernel_map.downsample(factor, preserve_counts=True)\n+\n+    return kernel_map\n+\n+\n+class PSFKernel(object):\n+    \"\"\"PSF kernel for `~gammapy.maps.Map`.\n+\n+    This is a container class to store a PSF kernel\n+    that can be used to convolve `~gammapy.maps.WcsNDMap` objects.\n+    It is usually computed from an EnergyDependentTablePSF\n+\n+    Parameters\n+    ----------\n+    psf_kernel_map : `~gammapy.maps.Map`\n+        PSF kernel stored in a Map\n+\n+    Examples\n+    --------\n+\n+    .. code:: python\n+\n+        import numpy as np\n+        from gammapy.maps import WcsGeom, MapAxis\n+        from astropy import units as u\n+\n+        # Define energy axis\n+        energy_axis = MapAxis.from_edges(np.logspace(-1., 1., 4), unit='TeV', name='energy')\n+\n+        # Create WcsGeom\n+        geom = WcsGeom.create(binsz=0.02*u.deg, width=10.0*u.deg, axes=[energy_axis])\n+\n+        # Extract EnergyDependentTablePSF from PSF IRF (here a PSF3D)\n+        table_psf = psf.to_energy_dependent_table_psf(theta=0.5*u.deg)\n+\n+        psf_kernel = PSFKernel.from_table_psf(table_psf,geom, max_radius=1*u.deg)\n+\n+        some_map_convolved = psf_kernel.apply(some_map)\n+    \"\"\"\n+\n+    def __init__(self, psf_kernel_map):\n+        self._psf_kernel_map = psf_kernel_map\n+\n+    @property\n+    def psf_kernel_map(self):\n+        return self._psf_kernel_map\n+\n+    @classmethod\n+    def read(cls, *args, **kwargs):\n+        \"\"\"Read kernel Map from file.\"\"\"\n+\n+        psf_kernel_map = WcsNDMap.read(*args, **kwargs)","path":"gammapy/cube/psf_kernel.py","position":163,"original_position":163,"commit_id":"a27888123a6e2b66beddee666cf7a4767b4b865d","original_commit_id":"a27888123a6e2b66beddee666cf7a4767b4b865d","user":{"login":"cdeil","id":852409,"node_id":"MDQ6VXNlcjg1MjQwOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/852409?v=4","gravatar_id":"","url":"https://api.github.com/users/cdeil","html_url":"https://github.com/cdeil","followers_url":"https://api.github.com/users/cdeil/followers","following_url":"https://api.github.com/users/cdeil/following{/other_user}","gists_url":"https://api.github.com/users/cdeil/gists{/gist_id}","starred_url":"https://api.github.com/users/cdeil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdeil/subscriptions","organizations_url":"https://api.github.com/users/cdeil/orgs","repos_url":"https://api.github.com/users/cdeil/repos","events_url":"https://api.github.com/users/cdeil/events{/privacy}","received_events_url":"https://api.github.com/users/cdeil/received_events","type":"User","site_admin":false},"body":"In PyCharm I see: Unresolved reference `WcsNDMap`\r\nYou're missing the import, and this will give a NameError if someone tries to read.\r\nIt also means this method isn't covered by a test.\r\nCan you please add one?","created_at":"2018-07-04T12:13:37Z","updated_at":"2018-07-04T12:13:38Z","html_url":"https://github.com/gammapy/gammapy/pull/1447#discussion_r200107289","pull_request_url":"https://api.github.com/repos/gammapy/gammapy/pulls/1447","author_association":"MEMBER","_links":{"self":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/comments/200107289"},"html":{"href":"https://github.com/gammapy/gammapy/pull/1447#discussion_r200107289"},"pull_request":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/1447"}}},"pull_request":{"url":"https://api.github.com/repos/gammapy/gammapy/pulls/1447","id":198079459,"node_id":"MDExOlB1bGxSZXF1ZXN0MTk4MDc5NDU5","html_url":"https://github.com/gammapy/gammapy/pull/1447","diff_url":"https://github.com/gammapy/gammapy/pull/1447.diff","patch_url":"https://github.com/gammapy/gammapy/pull/1447.patch","issue_url":"https://api.github.com/repos/gammapy/gammapy/issues/1447","number":1447,"state":"open","locked":false,"title":"Add a PSFKernel to perform PSF convolution on Maps","user":{"login":"registerrier","id":5047091,"node_id":"MDQ6VXNlcjUwNDcwOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/5047091?v=4","gravatar_id":"","url":"https://api.github.com/users/registerrier","html_url":"https://github.com/registerrier","followers_url":"https://api.github.com/users/registerrier/followers","following_url":"https://api.github.com/users/registerrier/following{/other_user}","gists_url":"https://api.github.com/users/registerrier/gists{/gist_id}","starred_url":"https://api.github.com/users/registerrier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/registerrier/subscriptions","organizations_url":"https://api.github.com/users/registerrier/orgs","repos_url":"https://api.github.com/users/registerrier/repos","events_url":"https://api.github.com/users/registerrier/events{/privacy}","received_events_url":"https://api.github.com/users/registerrier/received_events","type":"User","site_admin":false},"body":"This is a first commit to discuss.\r\n\r\nTwo function that take a TablePSF or an EnergyDependentTablePSF as well as a MapGeom are provided and are used to build the PSF kernel map.\r\n\r\nThe creators on PSFKernel ensure that there is an odd number of pixels for convolution.\r\n\r\nThe `PSFKernel.apply()`method is performing the PSF kernel convolution on a Map that has the same geometry.\r\n\r\nA number of tests are present already and should be completed.\r\n","created_at":"2018-06-28T16:05:16Z","updated_at":"2018-07-04T12:13:38Z","closed_at":null,"merged_at":null,"merge_commit_sha":"4ecf704584422f8b94b1f7ec5e85a118adff313a","assignee":{"login":"cdeil","id":852409,"node_id":"MDQ6VXNlcjg1MjQwOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/852409?v=4","gravatar_id":"","url":"https://api.github.com/users/cdeil","html_url":"https://github.com/cdeil","followers_url":"https://api.github.com/users/cdeil/followers","following_url":"https://api.github.com/users/cdeil/following{/other_user}","gists_url":"https://api.github.com/users/cdeil/gists{/gist_id}","starred_url":"https://api.github.com/users/cdeil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdeil/subscriptions","organizations_url":"https://api.github.com/users/cdeil/orgs","repos_url":"https://api.github.com/users/cdeil/repos","events_url":"https://api.github.com/users/cdeil/events{/privacy}","received_events_url":"https://api.github.com/users/cdeil/received_events","type":"User","site_admin":false},"assignees":[{"login":"cdeil","id":852409,"node_id":"MDQ6VXNlcjg1MjQwOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/852409?v=4","gravatar_id":"","url":"https://api.github.com/users/cdeil","html_url":"https://github.com/cdeil","followers_url":"https://api.github.com/users/cdeil/followers","following_url":"https://api.github.com/users/cdeil/following{/other_user}","gists_url":"https://api.github.com/users/cdeil/gists{/gist_id}","starred_url":"https://api.github.com/users/cdeil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdeil/subscriptions","organizations_url":"https://api.github.com/users/cdeil/orgs","repos_url":"https://api.github.com/users/cdeil/repos","events_url":"https://api.github.com/users/cdeil/events{/privacy}","received_events_url":"https://api.github.com/users/cdeil/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":39740771,"node_id":"MDU6TGFiZWwzOTc0MDc3MQ==","url":"https://api.github.com/repos/gammapy/gammapy/labels/feature","name":"feature","color":"84b6eb","default":false}],"milestone":{"url":"https://api.github.com/repos/gammapy/gammapy/milestones/11","html_url":"https://github.com/gammapy/gammapy/milestone/11","labels_url":"https://api.github.com/repos/gammapy/gammapy/milestones/11/labels","id":2487784,"node_id":"MDk6TWlsZXN0b25lMjQ4Nzc4NA==","number":11,"title":"0.8","description":"","creator":{"login":"cdeil","id":852409,"node_id":"MDQ6VXNlcjg1MjQwOQ==","avatar_url":"https://avatars3.githubusercontent.com/u/852409?v=4","gravatar_id":"","url":"https://api.github.com/users/cdeil","html_url":"https://github.com/cdeil","followers_url":"https://api.github.com/users/cdeil/followers","following_url":"https://api.github.com/users/cdeil/following{/other_user}","gists_url":"https://api.github.com/users/cdeil/gists{/gist_id}","starred_url":"https://api.github.com/users/cdeil/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/cdeil/subscriptions","organizations_url":"https://api.github.com/users/cdeil/orgs","repos_url":"https://api.github.com/users/cdeil/repos","events_url":"https://api.github.com/users/cdeil/events{/privacy}","received_events_url":"https://api.github.com/users/cdeil/received_events","type":"User","site_admin":false},"open_issues":28,"closed_issues":126,"state":"open","created_at":"2017-04-28T09:17:03Z","updated_at":"2018-07-02T19:24:59Z","due_on":null,"closed_at":null},"commits_url":"https://api.github.com/repos/gammapy/gammapy/pulls/1447/commits","review_comments_url":"https://api.github.com/repos/gammapy/gammapy/pulls/1447/comments","review_comment_url":"https://api.github.com/repos/gammapy/gammapy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/gammapy/gammapy/issues/1447/comments","statuses_url":"https://api.github.com/repos/gammapy/gammapy/statuses/a27888123a6e2b66beddee666cf7a4767b4b865d","head":{"label":"registerrier:psf_kernel","ref":"psf_kernel","sha":"a27888123a6e2b66beddee666cf7a4767b4b865d","user":{"login":"registerrier","id":5047091,"node_id":"MDQ6VXNlcjUwNDcwOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/5047091?v=4","gravatar_id":"","url":"https://api.github.com/users/registerrier","html_url":"https://github.com/registerrier","followers_url":"https://api.github.com/users/registerrier/followers","following_url":"https://api.github.com/users/registerrier/following{/other_user}","gists_url":"https://api.github.com/users/registerrier/gists{/gist_id}","starred_url":"https://api.github.com/users/registerrier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/registerrier/subscriptions","organizations_url":"https://api.github.com/users/registerrier/orgs","repos_url":"https://api.github.com/users/registerrier/repos","events_url":"https://api.github.com/users/registerrier/events{/privacy}","received_events_url":"https://api.github.com/users/registerrier/received_events","type":"User","site_admin":false},"repo":{"id":17434390,"node_id":"MDEwOlJlcG9zaXRvcnkxNzQzNDM5MA==","name":"gammapy","full_name":"registerrier/gammapy","owner":{"login":"registerrier","id":5047091,"node_id":"MDQ6VXNlcjUwNDcwOTE=","avatar_url":"https://avatars0.githubusercontent.com/u/5047091?v=4","gravatar_id":"","url":"https://api.github.com/users/registerrier","html_url":"https://github.com/registerrier","followers_url":"https://api.github.com/users/registerrier/followers","following_url":"https://api.github.com/users/registerrier/following{/other_user}","gists_url":"https://api.github.com/users/registerrier/gists{/gist_id}","starred_url":"https://api.github.com/users/registerrier/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/registerrier/subscriptions","organizations_url":"https://api.github.com/users/registerrier/orgs","repos_url":"https://api.github.com/users/registerrier/repos","events_url":"https://api.github.com/users/registerrier/events{/privacy}","received_events_url":"https://api.github.com/users/registerrier/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/registerrier/gammapy","description":"Gamma-ray astronomy high-level data analysis Python package","fork":true,"url":"https://api.github.com/repos/registerrier/gammapy","forks_url":"https://api.github.com/repos/registerrier/gammapy/forks","keys_url":"https://api.github.com/repos/registerrier/gammapy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/registerrier/gammapy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/registerrier/gammapy/teams","hooks_url":"https://api.github.com/repos/registerrier/gammapy/hooks","issue_events_url":"https://api.github.com/repos/registerrier/gammapy/issues/events{/number}","events_url":"https://api.github.com/repos/registerrier/gammapy/events","assignees_url":"https://api.github.com/repos/registerrier/gammapy/assignees{/user}","branches_url":"https://api.github.com/repos/registerrier/gammapy/branches{/branch}","tags_url":"https://api.github.com/repos/registerrier/gammapy/tags","blobs_url":"https://api.github.com/repos/registerrier/gammapy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/registerrier/gammapy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/registerrier/gammapy/git/refs{/sha}","trees_url":"https://api.github.com/repos/registerrier/gammapy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/registerrier/gammapy/statuses/{sha}","languages_url":"https://api.github.com/repos/registerrier/gammapy/languages","stargazers_url":"https://api.github.com/repos/registerrier/gammapy/stargazers","contributors_url":"https://api.github.com/repos/registerrier/gammapy/contributors","subscribers_url":"https://api.github.com/repos/registerrier/gammapy/subscribers","subscription_url":"https://api.github.com/repos/registerrier/gammapy/subscription","commits_url":"https://api.github.com/repos/registerrier/gammapy/commits{/sha}","git_commits_url":"https://api.github.com/repos/registerrier/gammapy/git/commits{/sha}","comments_url":"https://api.github.com/repos/registerrier/gammapy/comments{/number}","issue_comment_url":"https://api.github.com/repos/registerrier/gammapy/issues/comments{/number}","contents_url":"https://api.github.com/repos/registerrier/gammapy/contents/{+path}","compare_url":"https://api.github.com/repos/registerrier/gammapy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/registerrier/gammapy/merges","archive_url":"https://api.github.com/repos/registerrier/gammapy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/registerrier/gammapy/downloads","issues_url":"https://api.github.com/repos/registerrier/gammapy/issues{/number}","pulls_url":"https://api.github.com/repos/registerrier/gammapy/pulls{/number}","milestones_url":"https://api.github.com/repos/registerrier/gammapy/milestones{/number}","notifications_url":"https://api.github.com/repos/registerrier/gammapy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/registerrier/gammapy/labels{/name}","releases_url":"https://api.github.com/repos/registerrier/gammapy/releases{/id}","deployments_url":"https://api.github.com/repos/registerrier/gammapy/deployments","created_at":"2014-03-05T09:15:43Z","updated_at":"2018-02-08T09:09:16Z","pushed_at":"2018-07-04T11:59:41Z","git_url":"git://github.com/registerrier/gammapy.git","ssh_url":"git@github.com:registerrier/gammapy.git","clone_url":"https://github.com/registerrier/gammapy.git","svn_url":"https://github.com/registerrier/gammapy","homepage":"https://gammapy.readthedocs.org/","size":11082,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"archived":false,"open_issues_count":0,"license":null,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"gammapy:master","ref":"master","sha":"cc47347a8bc5694eaef5b294dbf13efaeac4ae62","user":{"login":"gammapy","id":852764,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg1Mjc2NA==","avatar_url":"https://avatars2.githubusercontent.com/u/852764?v=4","gravatar_id":"","url":"https://api.github.com/users/gammapy","html_url":"https://github.com/gammapy","followers_url":"https://api.github.com/users/gammapy/followers","following_url":"https://api.github.com/users/gammapy/following{/other_user}","gists_url":"https://api.github.com/users/gammapy/gists{/gist_id}","starred_url":"https://api.github.com/users/gammapy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gammapy/subscriptions","organizations_url":"https://api.github.com/users/gammapy/orgs","repos_url":"https://api.github.com/users/gammapy/repos","events_url":"https://api.github.com/users/gammapy/events{/privacy}","received_events_url":"https://api.github.com/users/gammapy/received_events","type":"Organization","site_admin":false},"repo":{"id":10073640,"node_id":"MDEwOlJlcG9zaXRvcnkxMDA3MzY0MA==","name":"gammapy","full_name":"gammapy/gammapy","owner":{"login":"gammapy","id":852764,"node_id":"MDEyOk9yZ2FuaXphdGlvbjg1Mjc2NA==","avatar_url":"https://avatars2.githubusercontent.com/u/852764?v=4","gravatar_id":"","url":"https://api.github.com/users/gammapy","html_url":"https://github.com/gammapy","followers_url":"https://api.github.com/users/gammapy/followers","following_url":"https://api.github.com/users/gammapy/following{/other_user}","gists_url":"https://api.github.com/users/gammapy/gists{/gist_id}","starred_url":"https://api.github.com/users/gammapy/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/gammapy/subscriptions","organizations_url":"https://api.github.com/users/gammapy/orgs","repos_url":"https://api.github.com/users/gammapy/repos","events_url":"https://api.github.com/users/gammapy/events{/privacy}","received_events_url":"https://api.github.com/users/gammapy/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/gammapy/gammapy","description":"A Python package for gamma-ray astronomy","fork":false,"url":"https://api.github.com/repos/gammapy/gammapy","forks_url":"https://api.github.com/repos/gammapy/gammapy/forks","keys_url":"https://api.github.com/repos/gammapy/gammapy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/gammapy/gammapy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/gammapy/gammapy/teams","hooks_url":"https://api.github.com/repos/gammapy/gammapy/hooks","issue_events_url":"https://api.github.com/repos/gammapy/gammapy/issues/events{/number}","events_url":"https://api.github.com/repos/gammapy/gammapy/events","assignees_url":"https://api.github.com/repos/gammapy/gammapy/assignees{/user}","branches_url":"https://api.github.com/repos/gammapy/gammapy/branches{/branch}","tags_url":"https://api.github.com/repos/gammapy/gammapy/tags","blobs_url":"https://api.github.com/repos/gammapy/gammapy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/gammapy/gammapy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/gammapy/gammapy/git/refs{/sha}","trees_url":"https://api.github.com/repos/gammapy/gammapy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/gammapy/gammapy/statuses/{sha}","languages_url":"https://api.github.com/repos/gammapy/gammapy/languages","stargazers_url":"https://api.github.com/repos/gammapy/gammapy/stargazers","contributors_url":"https://api.github.com/repos/gammapy/gammapy/contributors","subscribers_url":"https://api.github.com/repos/gammapy/gammapy/subscribers","subscription_url":"https://api.github.com/repos/gammapy/gammapy/subscription","commits_url":"https://api.github.com/repos/gammapy/gammapy/commits{/sha}","git_commits_url":"https://api.github.com/repos/gammapy/gammapy/git/commits{/sha}","comments_url":"https://api.github.com/repos/gammapy/gammapy/comments{/number}","issue_comment_url":"https://api.github.com/repos/gammapy/gammapy/issues/comments{/number}","contents_url":"https://api.github.com/repos/gammapy/gammapy/contents/{+path}","compare_url":"https://api.github.com/repos/gammapy/gammapy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/gammapy/gammapy/merges","archive_url":"https://api.github.com/repos/gammapy/gammapy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/gammapy/gammapy/downloads","issues_url":"https://api.github.com/repos/gammapy/gammapy/issues{/number}","pulls_url":"https://api.github.com/repos/gammapy/gammapy/pulls{/number}","milestones_url":"https://api.github.com/repos/gammapy/gammapy/milestones{/number}","notifications_url":"https://api.github.com/repos/gammapy/gammapy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/gammapy/gammapy/labels{/name}","releases_url":"https://api.github.com/repos/gammapy/gammapy/releases{/id}","deployments_url":"https://api.github.com/repos/gammapy/gammapy/deployments","created_at":"2013-05-15T07:50:40Z","updated_at":"2018-07-02T18:55:42Z","pushed_at":"2018-07-04T11:59:43Z","git_url":"git://github.com/gammapy/gammapy.git","ssh_url":"git@github.com:gammapy/gammapy.git","clone_url":"https://github.com/gammapy/gammapy.git","svn_url":"https://github.com/gammapy/gammapy","homepage":"http://gammapy.org","size":11031,"stargazers_count":48,"watchers_count":48,"language":"Python","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":75,"mirror_url":null,"archived":false,"open_issues_count":239,"license":null,"forks":75,"open_issues":239,"watchers":48,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/1447"},"html":{"href":"https://github.com/gammapy/gammapy/pull/1447"},"issue":{"href":"https://api.github.com/repos/gammapy/gammapy/issues/1447"},"comments":{"href":"https://api.github.com/repos/gammapy/gammapy/issues/1447/comments"},"review_comments":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/1447/comments"},"review_comment":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/1447/commits"},"statuses":{"href":"https://api.github.com/repos/gammapy/gammapy/statuses/a27888123a6e2b66beddee666cf7a4767b4b865d"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"cdeil"}}