{"action":"created","comment":{"url":"https://api.github.com/repos/gammapy/gammapy/pulls/comments/74502322","id":74502322,"diff_hunk":"@@ -57,200 +62,552 @@ def difference_of_gauss_kernel(radius, scale_step, n_sigmas=8):\n \n \n class CWT(object):\n-    \"\"\"Continuous wavelet transform.\n+    \"\"\"\n+    Continuous wavelet transform.\n+\n+    TODO: describe algorithm (modify the words below)\n+\n+    Depending on their spectral index, sources won't have the same characteristic scale.\n+    Therefore to detect sources, we need to compute the wavelet transform at several\n+    scales in order to search for various PSF sizes. Then for each scale, the wavelet\n+    transform values under the given significance threshold are rejected. This gives us\n+    a multiscale support. Then, using the reconstruction by continuous wavelet packets,\n+    we obtain a filtered image yielding the detected sources.\n+    To compute the threshold map for a given scale a, the standard EGRET diffuse\n+    background model to which was added the flux of the extragalactic background,\n+    and the exposure for the considered energy range were used.\n+\n+    Parameters\n+    ----------\n+    kernels : '~gammapy.detect.CWTKernels'\n+        Kernels for the algorithm.\n+    max_iter : int, optional (default 10)\n+        The maximum number of iterations of the CWT algorithm.\n+    tol : double, optional (default 1e-5)\n+        Tolerance for stopping criterion.\n+    significance_threshold : double, optional (default 3.0)\n+        Measure of statistical significance.\n+    significance_island_threshold : double, optional (default None)\n+        Measure is used for cleaning of isolated pixel islands\n+        that are slightly above ``significance_threshold``.\n+    remove_isolated : boolean, optional (default True)\n+        If ``True``, isolated pixels will be removed.\n+    keep_history : boolean, optional (default False)\n+        Save cwt data from all the iterations.\n+\n+    References\n+    ----------\n+    R. Terrier et al (2001) \"Wavelet analysis of EGRET data\"\n+    See http://adsabs.harvard.edu/abs/2001ICRC....7.2923T\n+    \"\"\"\n+\n+    def __init__(self, kernels,\n+                 max_iter=10, tol=1e-5,\n+                 significance_threshold=3.0,\n+                 significance_island_threshold=4.0,\n+                 remove_isolated=True,\n+                 keep_history=False):\n+        self.kernels = kernels\n+        self.max_iter = max_iter\n+        self.tol = tol\n+        self.significance_threshold = significance_threshold\n+        self.significance_island_threshold = significance_island_threshold\n+        self.remove_isolated = remove_isolated\n+        self.history = [] if keep_history else None\n+\n+        # previous_variance is initialized on the first iteration\n+        self.previous_variance = None\n+\n+    def _execute_iteration(self, data):\n+        \"\"\"\n+        Do one iteration of the algorithm.\n+\n+        Parameters\n+        ----------\n+        data : `~gammapy.detect.CWTData`\n+            Images.\n+        \"\"\"\n+        self._transform(data=data)\n+        self._compute_support(data=data)\n+        self._inverse_transform(data=data)\n+\n+    def _transform(self, data):\n+        \"\"\"\n+        Do the transform itself.\n+\n+        The transform is made by using `scipy.signal.fftconvolve`.\n+\n+        TODO: document.\n+\n+        Parameters\n+        ----------\n+        data : `~gammapy.detect.CWTData`\n+            Images for transform.\n+        \"\"\"\n+        from scipy.signal import fftconvolve\n+\n+        total_background = data.model + data.background + data.approx\n+        excess = data.counts - total_background\n+\n+        log.info('Computing transform and error')\n+        for idx_scale, kern in self.kernels.kern_base.items():\n+            data.transform[idx_scale] = fftconvolve(excess, kern, mode='same')\n+            data.error[idx_scale] = np.sqrt(fftconvolve(total_background, kern ** 2, mode='same'))\n+\n+        log.info('Computing approx and approx_bkg')\n+        data.approx = fftconvolve(data.counts - data.model - data.background,\n+                                  self.kernels.kern_approx, mode='same')\n+        data.approx_bkg = fftconvolve(data.background, self.kernels.kern_approx, mode='same')\n \n-    TODO: describe algorithm\n+    def _compute_support(self, data):\n+        \"\"\"\n+        Compute the multiresolution support with hard sigma clipping.\n \n-    TODO: instead of storing all the arrays as data members,\n-    we could have a ``.data`` member which is a dict of images?\n+        Imposing a minimum significance on a connected region of significant pixels\n+        (i.e. source detection).\n+\n+        TODO: document?\n+        What's happening here:\n+        - calc significance for all scales\n+        - for each scale compute support:\n+            - create mask, whether significance value more than significance_threshold\n+            - find all separated structures on mask, label them (with help\n+              of 'scipy.ndimage.label')\n+            - for each structure do:\n+                - find pixels coordinates of the structure\n+                - if just one pixel, we can remove it from mask if we want\n+                - if the max value of significance in that structure less\n+                  than significance_island_threshold, remove this structure from mask\n+            - update support by mask\n \n-    TODO: give references\n+        Parameters\n+        ----------\n+        data : `~gammapy.detect.CWTData`\n+            Images after transform.\n+        \"\"\"\n+        from scipy.ndimage import label\n \n-    Initialization of wavelet family.\n+        log.info('Computing significance')\n+        significance = data.transform / data.error\n \n-    Data members used by this algorithm:\n+        log.info('For each scale start to compute support')\n+        for idx_scale in range(self.kernels.n_scale):\n+            log.info('Start to compute support for scale {:.2f}'.format(self.kernels.scales[idx_scale]))\n \n-    - counts : 2D counts image (input, fixed)\n-    - background : 2D background image (input, fixed)\n+            log.info('Create mask based on significance '\n+                     'threshold {:.2f}'.format(self.significance_threshold))\n+            mask = significance[idx_scale] > self.significance_threshold\n \n-    - scales : dict\n-        - Keys are scale index integers\n-        - Values are scale values (pixel size)\n-    - kernbase : dict\n-        - Keys are scale index integers\n-        - Values are 2D kernel arrays (mexican hat)\n-    - kern_approx : 2D kernel array\n-        - Gaussian kernel from maximum scale\n+            # Produce a list of connex structures in the support\n+            labeled_mask, n_structures = label(mask)\n+            for struct_label in range(n_structures):\n+                coords = np.where(labeled_mask == struct_label + 1)\n \n-    The ``do_transform`` step computes the following:\n+                # Remove isolated pixels from support\n+                if self.remove_isolated and coords[0].size == 1:\n+                    log.info('Remove isolated pixels from support')\n+                    mask[coords] = False\n \n-    - transform : 3D cube, init to 0\n-      - Convolution of ``excess`` with kernel for each scale\n-    - error : 3D cube, init to 0\n-      - Convolution of ``total_background`` with kernel^2 for each scale\n-    - approx : 2D image, init to 0\n-      - Convolution of ``counts - model - background`` with ``kern_approx``\n-    - approx_bkg : 2D image, filled by do_transform\n-      - Convolution of ``background`` with ``kern_approx``\n+                if self.significance_island_threshold is not None:\n+                    # If maximal significance of the structure does not reach significance\n+                    # island threshold, remove significant pixels island from support\n+                    struct_signif = significance[idx_scale][coords]\n+                    if struct_signif.max() < self.significance_island_threshold:\n+                        log.info('Remove significant pixels island {0} from support'.format(struct_label + 1))\n+                        mask[coords] = False\n \n-    - ``total_background = self.model + self.background + self.approx``\n+            log.info('Update support for scale {:.2f}'.format(self.kernels.scales[idx_scale]))\n+            data.support[idx_scale] |= mask\n \n-    The ``compute_support_peak`` step does the following:\n+    def _inverse_transform(self, data):\n+        \"\"\"\n+        Do the inverse transform (reconstruct the image).\n+\n+        TODO: describe better what this does.\n+\n+        Parameters\n+        ----------\n+        data : `~gammapy.detect.CWTData`\n+            Images for inverse transform.\n+        \"\"\"\n+        data.mysterious_result = np.sum(data.support * data.transform, axis=0)\n+        log.info('Update model')\n+        data.model += data.mysterious_result * (data.mysterious_result > 0)\n \n-    - computes significance ``sig = transform / error``\n-    - support : 3D cube exclusion mask\n-      - filled as ``sig > nsigma``\n+    def _is_converged(self, data):\n+        \"\"\"\n+        Check if the algorithm has converged on current iteration.\n \n-    The ``inverse_transform`` step does the following:\n+        TODO: document metric used, but not super important.\n \n-    - model : 2D image, init to 0\n-        - Fill ``res = np.sum(self.support * self.transform, axis=0)``\n-        - Fill ``self.model += res * (res > 0)``\n-        - What is this??\n+        Parameters\n+        ----------\n+        data : `~gammapy.detect.CWTData`\n+            Images after iteration.\n \n+        Returns\n+        -------\n+        answer : boolean\n+            Answer if CWT has converged.\n+        \"\"\"\n+        answer = False","path":"gammapy/detect/cwt.py","position":245,"original_position":245,"commit_id":"47fbcd0224c2a870b6467034111e0f5238bd3c41","original_commit_id":"47fbcd0224c2a870b6467034111e0f5238bd3c41","user":{"login":"cdeil","id":852409,"avatar_url":"https://avatars.githubusercontent.com/u/852409?v=3","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":"You can remove this line `answer=False` here.\r\nIt's unused and overwritten by `answer = variance_ratio < self.tol` below.","created_at":"2016-08-11T21:01:50Z","updated_at":"2016-08-11T21:01:50Z","html_url":"https://github.com/gammapy/gammapy/pull/661#discussion_r74502322","pull_request_url":"https://api.github.com/repos/gammapy/gammapy/pulls/661","_links":{"self":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/comments/74502322"},"html":{"href":"https://github.com/gammapy/gammapy/pull/661#discussion_r74502322"},"pull_request":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/661"}}},"pull_request":{"url":"https://api.github.com/repos/gammapy/gammapy/pulls/661","id":79936402,"html_url":"https://github.com/gammapy/gammapy/pull/661","diff_url":"https://github.com/gammapy/gammapy/pull/661.diff","patch_url":"https://github.com/gammapy/gammapy/pull/661.patch","issue_url":"https://api.github.com/repos/gammapy/gammapy/issues/661","number":661,"state":"open","locked":false,"title":"Improve detect.CWT","user":{"login":"OlgaVorokh","id":11058113,"avatar_url":"https://avatars.githubusercontent.com/u/11058113?v=3","gravatar_id":"","url":"https://api.github.com/users/OlgaVorokh","html_url":"https://github.com/OlgaVorokh","followers_url":"https://api.github.com/users/OlgaVorokh/followers","following_url":"https://api.github.com/users/OlgaVorokh/following{/other_user}","gists_url":"https://api.github.com/users/OlgaVorokh/gists{/gist_id}","starred_url":"https://api.github.com/users/OlgaVorokh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlgaVorokh/subscriptions","organizations_url":"https://api.github.com/users/OlgaVorokh/orgs","repos_url":"https://api.github.com/users/OlgaVorokh/repos","events_url":"https://api.github.com/users/OlgaVorokh/events{/privacy}","received_events_url":"https://api.github.com/users/OlgaVorokh/received_events","type":"User","site_admin":false},"body":"This PR improves [CWT](http://docs.gammapy.org/en/latest/api/gammapy.detect.CWT.html), which was added in #25 and recently improved directly in Gammapy master.\r\n\r\nTasks for this PR:\r\n- [ ] Improve the code quality\r\n- [ ] Add tests\r\n- [ ] Fix docs\r\n","created_at":"2016-08-03T16:23:44Z","updated_at":"2016-08-11T21:01:50Z","closed_at":null,"merged_at":null,"merge_commit_sha":"ec019f6deb0cdf3e85d30c21ee5c92e564efc9a1","assignee":{"login":"cdeil","id":852409,"avatar_url":"https://avatars.githubusercontent.com/u/852409?v=3","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,"avatar_url":"https://avatars.githubusercontent.com/u/852409?v=3","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}],"milestone":{"url":"https://api.github.com/repos/gammapy/gammapy/milestones/7","html_url":"https://github.com/gammapy/gammapy/milestones/0.5","labels_url":"https://api.github.com/repos/gammapy/gammapy/milestones/7/labels","id":1275561,"number":7,"title":"0.5","description":"","creator":{"login":"cdeil","id":852409,"avatar_url":"https://avatars.githubusercontent.com/u/852409?v=3","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":14,"closed_issues":131,"state":"open","created_at":"2015-08-27T09:29:48Z","updated_at":"2016-08-11T14:48:06Z","due_on":"2016-08-04T22:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/gammapy/gammapy/pulls/661/commits","review_comments_url":"https://api.github.com/repos/gammapy/gammapy/pulls/661/comments","review_comment_url":"https://api.github.com/repos/gammapy/gammapy/pulls/comments{/number}","comments_url":"https://api.github.com/repos/gammapy/gammapy/issues/661/comments","statuses_url":"https://api.github.com/repos/gammapy/gammapy/statuses/47fbcd0224c2a870b6467034111e0f5238bd3c41","head":{"label":"OlgaVorokh:improve_cwt","ref":"improve_cwt","sha":"47fbcd0224c2a870b6467034111e0f5238bd3c41","user":{"login":"OlgaVorokh","id":11058113,"avatar_url":"https://avatars.githubusercontent.com/u/11058113?v=3","gravatar_id":"","url":"https://api.github.com/users/OlgaVorokh","html_url":"https://github.com/OlgaVorokh","followers_url":"https://api.github.com/users/OlgaVorokh/followers","following_url":"https://api.github.com/users/OlgaVorokh/following{/other_user}","gists_url":"https://api.github.com/users/OlgaVorokh/gists{/gist_id}","starred_url":"https://api.github.com/users/OlgaVorokh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlgaVorokh/subscriptions","organizations_url":"https://api.github.com/users/OlgaVorokh/orgs","repos_url":"https://api.github.com/users/OlgaVorokh/repos","events_url":"https://api.github.com/users/OlgaVorokh/events{/privacy}","received_events_url":"https://api.github.com/users/OlgaVorokh/received_events","type":"User","site_admin":false},"repo":{"id":51820874,"name":"gammapy","full_name":"OlgaVorokh/gammapy","owner":{"login":"OlgaVorokh","id":11058113,"avatar_url":"https://avatars.githubusercontent.com/u/11058113?v=3","gravatar_id":"","url":"https://api.github.com/users/OlgaVorokh","html_url":"https://github.com/OlgaVorokh","followers_url":"https://api.github.com/users/OlgaVorokh/followers","following_url":"https://api.github.com/users/OlgaVorokh/following{/other_user}","gists_url":"https://api.github.com/users/OlgaVorokh/gists{/gist_id}","starred_url":"https://api.github.com/users/OlgaVorokh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/OlgaVorokh/subscriptions","organizations_url":"https://api.github.com/users/OlgaVorokh/orgs","repos_url":"https://api.github.com/users/OlgaVorokh/repos","events_url":"https://api.github.com/users/OlgaVorokh/events{/privacy}","received_events_url":"https://api.github.com/users/OlgaVorokh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/OlgaVorokh/gammapy","description":"A Python package for gamma-ray astronomy","fork":true,"url":"https://api.github.com/repos/OlgaVorokh/gammapy","forks_url":"https://api.github.com/repos/OlgaVorokh/gammapy/forks","keys_url":"https://api.github.com/repos/OlgaVorokh/gammapy/keys{/key_id}","collaborators_url":"https://api.github.com/repos/OlgaVorokh/gammapy/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/OlgaVorokh/gammapy/teams","hooks_url":"https://api.github.com/repos/OlgaVorokh/gammapy/hooks","issue_events_url":"https://api.github.com/repos/OlgaVorokh/gammapy/issues/events{/number}","events_url":"https://api.github.com/repos/OlgaVorokh/gammapy/events","assignees_url":"https://api.github.com/repos/OlgaVorokh/gammapy/assignees{/user}","branches_url":"https://api.github.com/repos/OlgaVorokh/gammapy/branches{/branch}","tags_url":"https://api.github.com/repos/OlgaVorokh/gammapy/tags","blobs_url":"https://api.github.com/repos/OlgaVorokh/gammapy/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/OlgaVorokh/gammapy/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/OlgaVorokh/gammapy/git/refs{/sha}","trees_url":"https://api.github.com/repos/OlgaVorokh/gammapy/git/trees{/sha}","statuses_url":"https://api.github.com/repos/OlgaVorokh/gammapy/statuses/{sha}","languages_url":"https://api.github.com/repos/OlgaVorokh/gammapy/languages","stargazers_url":"https://api.github.com/repos/OlgaVorokh/gammapy/stargazers","contributors_url":"https://api.github.com/repos/OlgaVorokh/gammapy/contributors","subscribers_url":"https://api.github.com/repos/OlgaVorokh/gammapy/subscribers","subscription_url":"https://api.github.com/repos/OlgaVorokh/gammapy/subscription","commits_url":"https://api.github.com/repos/OlgaVorokh/gammapy/commits{/sha}","git_commits_url":"https://api.github.com/repos/OlgaVorokh/gammapy/git/commits{/sha}","comments_url":"https://api.github.com/repos/OlgaVorokh/gammapy/comments{/number}","issue_comment_url":"https://api.github.com/repos/OlgaVorokh/gammapy/issues/comments{/number}","contents_url":"https://api.github.com/repos/OlgaVorokh/gammapy/contents/{+path}","compare_url":"https://api.github.com/repos/OlgaVorokh/gammapy/compare/{base}...{head}","merges_url":"https://api.github.com/repos/OlgaVorokh/gammapy/merges","archive_url":"https://api.github.com/repos/OlgaVorokh/gammapy/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/OlgaVorokh/gammapy/downloads","issues_url":"https://api.github.com/repos/OlgaVorokh/gammapy/issues{/number}","pulls_url":"https://api.github.com/repos/OlgaVorokh/gammapy/pulls{/number}","milestones_url":"https://api.github.com/repos/OlgaVorokh/gammapy/milestones{/number}","notifications_url":"https://api.github.com/repos/OlgaVorokh/gammapy/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/OlgaVorokh/gammapy/labels{/name}","releases_url":"https://api.github.com/repos/OlgaVorokh/gammapy/releases{/id}","deployments_url":"https://api.github.com/repos/OlgaVorokh/gammapy/deployments","created_at":"2016-02-16T08:43:10Z","updated_at":"2016-02-16T08:43:12Z","pushed_at":"2016-08-11T15:38:17Z","git_url":"git://github.com/OlgaVorokh/gammapy.git","ssh_url":"git@github.com:OlgaVorokh/gammapy.git","clone_url":"https://github.com/OlgaVorokh/gammapy.git","svn_url":"https://github.com/OlgaVorokh/gammapy","homepage":"https://gammapy.readthedocs.org/","size":6900,"stargazers_count":0,"watchers_count":0,"language":"Python","has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"gammapy:master","ref":"master","sha":"af8b567797b8fb0b5c443d6384db907de145b29d","user":{"login":"gammapy","id":852764,"avatar_url":"https://avatars.githubusercontent.com/u/852764?v=3","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,"name":"gammapy","full_name":"gammapy/gammapy","owner":{"login":"gammapy","id":852764,"avatar_url":"https://avatars.githubusercontent.com/u/852764?v=3","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":"2016-08-02T16:21:25Z","pushed_at":"2016-08-11T15:18: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://docs.gammapy.org","size":7412,"stargazers_count":24,"watchers_count":24,"language":"Python","has_issues":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":43,"mirror_url":null,"open_issues_count":156,"forks":43,"open_issues":156,"watchers":24,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/661"},"html":{"href":"https://github.com/gammapy/gammapy/pull/661"},"issue":{"href":"https://api.github.com/repos/gammapy/gammapy/issues/661"},"comments":{"href":"https://api.github.com/repos/gammapy/gammapy/issues/661/comments"},"review_comments":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/661/comments"},"review_comment":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/gammapy/gammapy/pulls/661/commits"},"statuses":{"href":"https://api.github.com/repos/gammapy/gammapy/statuses/47fbcd0224c2a870b6467034111e0f5238bd3c41"}}}}
{"actor":{"display_login":"cdeil"}}