{"action":"created","comment":{"url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/comments/186245115","pull_request_review_id":117795904,"id":186245115,"diff_hunk":"@@ -303,92 +328,237 @@ def ols_ramp_fit(model, buffsize, save_opt, readnoise_model, gain_model,\n \n             opt_res.cr_mag_seg[num_int, :, rlo:rhi, :] = \\\n                        data_diff * (dq_cr != 0)\n- \n-            m_by_var_int[num_int, rlo:rhi, :] = m_by_var.reshape(sect_shape)\n-            inv_var_int[num_int, rlo:rhi, :] = inv_var.reshape(sect_shape)\n \n-        slope_int[num_int, :, :] = \\\n-            utils.calc_slope_int(slope_int, m_by_var_int, inv_var_int, num_int)\n+    # Compute the final 2D array of differences.\n+    median_diffs_2d /= n_int\n+    med_slopes = median_diffs_2d.copy()\n+\n+    # In this 'Second Pass' over the data, loop over integrations and data\n+    #   sections to calculate the variances of the slope using the estimated\n+    #   median slopes from the 'First Pass'. These variances are due to Poisson\n+    #   noise only, read noise only, and the combination of Poisson noise and\n+    #   read noise. The integration-specific variances are 3D arrays, and\n+    #   the segment-specific variances are 4D arrays . The naming convention for\n+    #   the arrays:\n+    #     'var': a variance\n+    #     'p3': intermediate 3D array for variance due to Poisson noise\n+    #     'r4': intermediate 4D array for variance due to read noise\n+    #     'both4': intermediate 4D array for ocmbined variance due to both\n+    #               Poisson and read noise\n+    #     'inv_<X>': intermediate array = 1/<X>\n+    #     's_inv_<X>': intermediate array = 1/<X>, summed over integrations\n+\n+    # Loop over data integrations\n+    for num_int in range(n_int):\n+\n+        # loop over data sections\n+        for rlo in range(0, cubeshape[1], nrows):\n+            rhi = rlo + nrows\n+\n+            if rhi > cubeshape[1]:\n+                rhi = cubeshape[1]\n+\n+            # data_sect and gdq_sect are: [ groups, y, x ]\n+            data_sect = model.get_section('data')[num_int, :, rlo:rhi, :]\n+            gdq_sect = gdq_cube[num_int, :, rlo:rhi, :]\n+\n+            rn_sect = readnoise_2d[rlo:rhi, :]\n+            gain_sect = gain_2d[rlo:rhi, :]\n+\n+            #  Calculate results needed to compute the variance arrays\n+            den_r3, den_p3, num_r3, segs_beg_3 = \\\n+                utils.calc_slope_vars( rn_sect, gain_sect, gdq_sect,\n+                                       group_time, max_seg )\n+\n+            segs_4[num_int, :, rlo:rhi, :] = segs_beg_3\n+            var_p4[num_int, :, rlo:rhi, :] = den_p3 * med_slopes[ rlo:rhi, :]\n+            var_r4[num_int, :, rlo:rhi, :] = num_r3 * den_r3\n+\n+        var_p4[var_p4 < 0.] = 0.\n+        var_p4 = utils.rem_nan_inf(var_p4)\n+\n+        var_r4[var_r4 < 0.] = 0.\n+        var_r4 = utils.rem_nan_inf(var_r4)\n+\n+        inv_var_p4[num_int, :, :, :] = 1./var_p4[num_int, :, :, :]\n+        inv_var_p4 = utils.rem_nan_inf(inv_var_p4)\n+        s_inv_var_p3[num_int, :, :] = (inv_var_p4[num_int, :, :, :]).sum(axis=0)\n \n-        opt_res.ped_int[num_int, :, :] = \\\n+        var_p3[num_int, :, :] = 1./ s_inv_var_p3[num_int, :, :]\n+        var_p3 = utils.rem_nan_inf(var_p3)\n+\n+        inv_var_r4[num_int, :, :, :] = 1./var_r4[num_int, :, :, :]\n+        inv_var_r4 = utils.rem_nan_inf(inv_var_r4)\n+ \n+        s_inv_var_r3[num_int, :, :] = (inv_var_r4[num_int, :, :, :]).sum(axis=0)\n+        var_r3[num_int, :, :] = 1./ s_inv_var_r3[num_int, :, :]\n+        var_r3 = utils.rem_nan_inf(var_r3)\n+\n+        var_both4[ num_int,:,:,:] = var_r4[num_int,:,:,:] + var_p4[num_int,:,:,:]\n+        inv_var_both4[num_int, :, :, :] = 1./var_both4[num_int, :, :, :]\n+        inv_var_both4 = utils.rem_nan_inf(inv_var_both4)\n+\n+        # Want to retain values in the 4D arrays only for the segments that each\n+        #   pixel has, so will zero out values for the higher indices. Creating\n+        #   and manipulating intermediate arrays (views, such as var_p4_int)\n+        #   will zero out the appropriate indices in var_p4 and var_r4.\n+        # Extract the slice of 4D arrays for the current integration\n+        # \n+        var_p4_int = var_p4[ num_int,:,:,:]   # [ segment, y, x ]\n+        var_r4_int = var_r4[ num_int,:,:,:]\n+        inv_var_both4_int = inv_var_both4[ num_int,:,:,:]\n+\n+        # reshape these arrays to simplify masking [ segment, 1D pixel ]\n+        var_p4_int2 = var_p4_int.reshape(( var_p4_int.shape[0],\n+                            var_p4_int.shape[1]*var_p4_int.shape[2]))\n+        var_r4_int2 = var_r4_int.reshape(( var_r4_int.shape[0],\n+                            var_r4_int.shape[1]*var_r4_int.shape[2]))\n+        inv_var_both4_int2 = inv_var_both4_int.reshape(\n+                           ( inv_var_both4_int.shape[0], \n+                             inv_var_both4_int.shape[1] * \n+                             inv_var_both4_int.shape[2]))\n+\n+        num_seg_int = num_seg_per_int[num_int,:, :] # number of segs per pixel\n+        num_pix = num_seg_int.shape[0] * num_seg_int.shape[1]\n+        num_seg_int1 = num_seg_int.reshape(num_pix) # [ seg, 1D pixel ]\n+\n+        arr_ind_all = np.array([np.arange( var_p4_int2.shape[0] ),] *\n+                                num_pix).transpose()\n+\n+        var_p4_int2[ arr_ind_all >= num_seg_int1 ] = 0\n+        var_r4_int2[ arr_ind_all >= num_seg_int1 ] = 0\n+        inv_var_both4_int2[ arr_ind_all >= num_seg_int1 ] = 0\n+\n+        var_p4_int = var_p4_int2.reshape((var_p4_int.shape[0],\n+                                          var_p4_int.shape[1],\n+                                          var_p4_int.shape[2]))\n+\n+        var_r4_int = var_r4_int2.reshape((var_r4_int.shape[0],\n+                                          var_r4_int.shape[1],\n+                                          var_r4_int.shape[2]))\n+\n+        inv_var_both4_int = inv_var_both4_int2.reshape((inv_var_both4_int.shape[0],\n+                        inv_var_both4_int.shape[1], inv_var_both4_int.shape[2]))\n+\n+        # Zero out non-existing segments\n+        var_p4_int *= ( segs_4[num_int,:,:,:] > 0)\n+        var_r4_int *= ( segs_4[num_int,:,:,:] > 0)\n+        inv_var_both4_int *= ( segs_4[num_int,:,:,:] > 0)\n+\n+        s_inv_var_both3[num_int,:,:] = (inv_var_both4[num_int,:,:,:]).sum(axis=0)\n+        var_both3[num_int, :, :] = 1./s_inv_var_both3[num_int, :, :]\n+\n+    var_p3 = utils.rem_nan_inf(var_p3)\n+    var_p3[ var_p3 < 0. ] = 0.\n+\n+    var_r3 = utils.rem_nan_inf(var_r3)\n+\n+    var_both3 = utils.rem_nan_inf(var_both3)\n+    var_both3[ var_both3 < 0.] = 0.\n+\n+    # Now that the segment-specific and integration-specific variances have\n+    #   been calculated, the segment-specific, integration-specific, and\n+    #   overall slopes will be calculated. The integration-specific slope is\n+    #   calculated as a weighted average of the segments in the integration:\n+    #     slope_int = sum_over_segs(slope_seg/var+seg)/ sum_over_segs(1/var_seg)\n+    #  The overall slope is calculated as a weighted average of the segments in\n+    #     all integrations:\n+    #     slope = sum_over_integs_and_segs(slope_seg/var+seg)/\n+    #                    sum_over_integs_and_segs(1/var_seg)\n+\n+    slope_seg = opt_res.slope_seg.copy()\n+    slope_by_var4 = slope_seg / var_both4\n+    slope_by_var4 = utils.rem_nan_inf(slope_by_var4)\n+\n+    s_slope_by_var3 = slope_by_var4.sum(axis=1) # sum over SEGMENTS (not integs)\n+    s_slope_by_var2 = s_slope_by_var3.sum(axis=0) # sum over integrations\n+\n+    s_inv_var_both2 = s_inv_var_both3.sum(axis=0)\n+\n+    # Compute the 'dataset-averaged' slope\n+    slope_dataset2 = s_slope_by_var2/s_inv_var_both2\n+    slope_dataset2 = utils.rem_nan_inf(slope_dataset2)\n+\n+    # Compute the integration-specific slope\n+    the_num = (slope_seg * inv_var_both4).sum(axis = 1) # sum over all segments\n+    the_den = (inv_var_both4).sum(axis=1)\n+\n+    slope_int = the_num/the_den\n+    slope_int = utils.rem_nan_inf(slope_int)\n+\n+    # Loop over data integrations to calculate integration-specific pedestal\n+    for num_int in range(0, n_int):\n+        opt_res.ped_int[ num_int, :, : ] = \\\n             utils.calc_pedestal(num_int, slope_int, opt_res.firstf_int,\\\n             gdq_cube, nframes, groupgap, dropframes1)\n \n-        var_p_int[num_int, :, :], var_r_int[num_int, :, :] = \\\n-            utils.calc_vars_int( slope_int, readnoise_2d, gdq_cube, num_int, \\\n-            var_p_int, var_r_int)\n+    # Compute 2D 'error' for primary output\n+    var_p2 = 1/(s_inv_var_p3.sum(axis=0))\n+    var_p2 = utils.rem_nan_inf(var_p2)\n+    var_p2[ var_p2 < 0.] = 0.\n \n-    # Average integration-specific variances \n-    var_p_2d_all = var_p_int.mean( axis=0 ) \n-    var_r_2d_all = var_r_int.mean( axis=0 )\n-    err_2d_all = np.sqrt( var_p_2d_all + var_r_2d_all )  \n+    var_r2 = 1/(s_inv_var_r3.sum(axis=0))\n+    var_r2 = utils.rem_nan_inf(var_r2)\n+    var_r2[ var_r2 < 0.] = 0.\n \n-    wh_non_zero = (var_sum_2d != 0.0)\n-    slope_wtd[wh_non_zero] = (m_sum_2d[wh_non_zero] /\n-                                var_sum_2d[wh_non_zero])\n-    slopes = slope_wtd.reshape(imshape)\n+    err_2d = np.sqrt( var_p2 + var_r2 )\n \n-    # collect optional results for output\n+    # Collect optional results for output\n     opt_res.shrink_crmag(n_int, gdq_cube, imshape, nreads)\n+\n+    # Truncate results at the maximum number of segments found\n     opt_res.slope_seg = opt_res.slope_seg[:,:f_max_seg,:,:]\n     opt_res.sigslope_seg = opt_res.sigslope_seg[:,:f_max_seg,:,:]\n     opt_res.yint_seg = opt_res.yint_seg[:,:f_max_seg,:,:]\n     opt_res.sigyint_seg = opt_res.sigyint_seg[:,:f_max_seg,:,:]\n-    opt_res.weights = (opt_res.inv_var_seg[:,:f_max_seg,:,:])**2.\n-\n-    var_p_s_4d[ var_p_s_4d < 0.] = 0.\n-    var_r_s_4d[ var_r_s_4d < 0.] = 0.\n-\n-    opt_res.var_p_seg = var_p_s_4d\n-    opt_res.var_r_seg = var_r_s_4d\n+    opt_res.weights = (inv_var_both4[:,:f_max_seg,:,:])**2.\n+    opt_res.var_p_seg = var_p4[:,:f_max_seg,:,:]\n+    opt_res.var_r_seg = var_r4[:,:f_max_seg,:,:]\n \n-    if save_opt: \n+    if save_opt:\n         opt_model = opt_res.output_optional(model, effintim)\n     else:\n         opt_model = None\n \n     # Divide slopes by total (summed over all integrations) effective\n     #   integration time to give count rates.\n-    c_rates = slopes / effintim\n-\n-    # Values in err_cube have been 1./variance, so take reciprocal\n-    #    of non-zero values to write\n-    err_cube[err_cube <= 0.] = MIN_ERR  # for pixels having no signal\n-    err_cube = 1. / err_cube # has no zero values\n+    c_rates = slope_dataset2 / effintim\n \n     # Compress all integration's dq arrays to create 2D PIXELDDQ array for\n     #   primary output\n     final_pixeldq = dq_compress_final(dq_int, n_int)\n \n     if n_int > 1:\n-        int_model = utils.output_integ(model, slope_int, dq_int, effintim, var_p_int, var_r_int)\n+        int_model = utils.output_integ(model, slope_int, dq_int, effintim,\n+                                       var_p3, var_r3, var_both3)\n     else:\n         int_model = None\n \n     tstop = time.time()\n \n     log_stats(c_rates)\n \n-    log.debug('Instrument: %s' % (instrume))\n-    log.debug('Number of pixels in 2D array: %d' % (npix))\n-    log.debug('Shape of 2D image: (%d, %d)' % (imshape))\n-    log.debug('Shape of data cube: (%d, %d, %d)' % (orig_cubeshape))\n-    log.debug('Buffer size (bytes): %d' % (buffsize))\n-    log.debug('Number of rows per buffer: %d' % (nrows))\n-    log.info('Number of groups per integration: %d' % (orig_nreads))\n-    log.info('Number of integrations: %d' % (n_int))\n-    log.debug('The execution time in seconds: %f' % (tstop - tstart))\n+    log.debug('Instrument: %s', instrume)\n+    log.debug('Number of pixels in 2D array: %d', npix)\n+    log.debug('Shape of 2D image: (%d, %d)' %(imshape))\n+    log.debug('Shape of data cube: (%d, %d, %d)' %(orig_cubeshape))\n+    log.debug('Buffer size (bytes): %d', buffsize)\n+    log.debug('Number of rows per buffer: %d', nrows)\n+    log.info('Number of groups per integration: %d', orig_nreads)\n+    log.info('Number of integrations: %d', n_int)\n+    log.debug('The execution time in seconds: %f', tstop - tstart)\n \n     # Create new model...\n     new_model = datamodels.ImageModel(data=c_rates.astype(np.float32),\n-            dq=final_pixeldq.astype(np.uint32), \n-            var_poisson=var_p_2d_all.astype(np.float32),\n-            var_rnoise=var_r_2d_all.astype(np.float32), err=err_2d_all.copy())\n+            dq=final_pixeldq.astype(np.uint32),\n+            var_poisson=var_p2.astype(np.float32),\n+            var_rnoise=var_r2.astype(np.float32), err=err_2d.copy())","path":"jwst/ramp_fitting/ramp_fit.py","position":null,"original_position":559,"commit_id":"21fc7db6536fc8cc462a37ea36a92bf0169f8acd","original_commit_id":"6261b884660b70adc3492393851418808af73516","user":{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false},"body":"No, copy() is not needed - fixed.","created_at":"2018-05-05T00:01:53Z","updated_at":"2018-05-05T00:01:53Z","html_url":"https://github.com/STScI-JWST/jwst/pull/1925#discussion_r186245115","pull_request_url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925","author_association":"CONTRIBUTOR","_links":{"self":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/comments/186245115"},"html":{"href":"https://github.com/STScI-JWST/jwst/pull/1925#discussion_r186245115"},"pull_request":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925"}},"in_reply_to_id":184081866},"pull_request":{"url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925","id":183382603,"html_url":"https://github.com/STScI-JWST/jwst/pull/1925","diff_url":"https://github.com/STScI-JWST/jwst/pull/1925.diff","patch_url":"https://github.com/STScI-JWST/jwst/pull/1925.patch","issue_url":"https://api.github.com/repos/STScI-JWST/jwst/issues/1925","number":1925,"state":"open","locked":false,"title":"Update ramp_fit slope variances","user":{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false},"body":"Updates to the ramp_fit computations for segment-specific and integration-specific variances of the slope due to either Poisson noise, readnoise, or both.\r\n\r\n2. Updated computations of integration-specific and overall slopes, and weights.\r\n\r\n3. Added code to use data from a good initial group in a ramp only if there are not good data in later groups.\r\n\r\n4. Added check to ensure that MIRI dataset has a minimum of 2 groups.\r\n\r\n5. Updated deprecated logging format\r\n\r\n6. Removed obsolete code and variables.\r\n\r\n7. Updated code resolves these github issues: 1681, 1683, 1686, 1687, 1714","created_at":"2018-04-23T09:59:15Z","updated_at":"2018-05-05T00:01:53Z","closed_at":null,"merged_at":null,"merge_commit_sha":"8508ca0eefefd8ebe3b444c81882722a60944e59","assignee":{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false},"assignees":[{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false}],"requested_reviewers":[],"requested_teams":[],"labels":[{"id":517627051,"url":"https://api.github.com/repos/STScI-JWST/jwst/labels/error%20propagation","name":"error propagation","color":"bfdadc","default":false},{"id":390243263,"url":"https://api.github.com/repos/STScI-JWST/jwst/labels/ramp_fitting","name":"ramp_fitting","color":"d4c5f9","default":false}],"milestone":{"url":"https://api.github.com/repos/STScI-JWST/jwst/milestones/6","html_url":"https://github.com/STScI-JWST/jwst/milestone/6","labels_url":"https://api.github.com/repos/STScI-JWST/jwst/milestones/6/labels","id":2946419,"number":6,"title":"Build 7.1.3","description":"Patch build. SCSB development due 11-May-2018.","creator":{"login":"hbushouse","id":12860084,"avatar_url":"https://avatars1.githubusercontent.com/u/12860084?v=4","gravatar_id":"","url":"https://api.github.com/users/hbushouse","html_url":"https://github.com/hbushouse","followers_url":"https://api.github.com/users/hbushouse/followers","following_url":"https://api.github.com/users/hbushouse/following{/other_user}","gists_url":"https://api.github.com/users/hbushouse/gists{/gist_id}","starred_url":"https://api.github.com/users/hbushouse/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/hbushouse/subscriptions","organizations_url":"https://api.github.com/users/hbushouse/orgs","repos_url":"https://api.github.com/users/hbushouse/repos","events_url":"https://api.github.com/users/hbushouse/events{/privacy}","received_events_url":"https://api.github.com/users/hbushouse/received_events","type":"User","site_admin":false},"open_issues":20,"closed_issues":211,"state":"open","created_at":"2017-11-29T12:14:10Z","updated_at":"2018-05-04T21:28:33Z","due_on":"2018-05-11T07:00:00Z","closed_at":null},"commits_url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925/commits","review_comments_url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925/comments","review_comment_url":"https://api.github.com/repos/STScI-JWST/jwst/pulls/comments{/number}","comments_url":"https://api.github.com/repos/STScI-JWST/jwst/issues/1925/comments","statuses_url":"https://api.github.com/repos/STScI-JWST/jwst/statuses/21fc7db6536fc8cc462a37ea36a92bf0169f8acd","head":{"label":"dmggh:ramp_fit_vars","ref":"ramp_fit_vars","sha":"21fc7db6536fc8cc462a37ea36a92bf0169f8acd","user":{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false},"repo":{"id":60785819,"name":"jwst","full_name":"dmggh/jwst","owner":{"login":"dmggh","id":3719822,"avatar_url":"https://avatars3.githubusercontent.com/u/3719822?v=4","gravatar_id":"","url":"https://api.github.com/users/dmggh","html_url":"https://github.com/dmggh","followers_url":"https://api.github.com/users/dmggh/followers","following_url":"https://api.github.com/users/dmggh/following{/other_user}","gists_url":"https://api.github.com/users/dmggh/gists{/gist_id}","starred_url":"https://api.github.com/users/dmggh/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/dmggh/subscriptions","organizations_url":"https://api.github.com/users/dmggh/orgs","repos_url":"https://api.github.com/users/dmggh/repos","events_url":"https://api.github.com/users/dmggh/events{/privacy}","received_events_url":"https://api.github.com/users/dmggh/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/dmggh/jwst","description":null,"fork":true,"url":"https://api.github.com/repos/dmggh/jwst","forks_url":"https://api.github.com/repos/dmggh/jwst/forks","keys_url":"https://api.github.com/repos/dmggh/jwst/keys{/key_id}","collaborators_url":"https://api.github.com/repos/dmggh/jwst/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/dmggh/jwst/teams","hooks_url":"https://api.github.com/repos/dmggh/jwst/hooks","issue_events_url":"https://api.github.com/repos/dmggh/jwst/issues/events{/number}","events_url":"https://api.github.com/repos/dmggh/jwst/events","assignees_url":"https://api.github.com/repos/dmggh/jwst/assignees{/user}","branches_url":"https://api.github.com/repos/dmggh/jwst/branches{/branch}","tags_url":"https://api.github.com/repos/dmggh/jwst/tags","blobs_url":"https://api.github.com/repos/dmggh/jwst/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/dmggh/jwst/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/dmggh/jwst/git/refs{/sha}","trees_url":"https://api.github.com/repos/dmggh/jwst/git/trees{/sha}","statuses_url":"https://api.github.com/repos/dmggh/jwst/statuses/{sha}","languages_url":"https://api.github.com/repos/dmggh/jwst/languages","stargazers_url":"https://api.github.com/repos/dmggh/jwst/stargazers","contributors_url":"https://api.github.com/repos/dmggh/jwst/contributors","subscribers_url":"https://api.github.com/repos/dmggh/jwst/subscribers","subscription_url":"https://api.github.com/repos/dmggh/jwst/subscription","commits_url":"https://api.github.com/repos/dmggh/jwst/commits{/sha}","git_commits_url":"https://api.github.com/repos/dmggh/jwst/git/commits{/sha}","comments_url":"https://api.github.com/repos/dmggh/jwst/comments{/number}","issue_comment_url":"https://api.github.com/repos/dmggh/jwst/issues/comments{/number}","contents_url":"https://api.github.com/repos/dmggh/jwst/contents/{+path}","compare_url":"https://api.github.com/repos/dmggh/jwst/compare/{base}...{head}","merges_url":"https://api.github.com/repos/dmggh/jwst/merges","archive_url":"https://api.github.com/repos/dmggh/jwst/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/dmggh/jwst/downloads","issues_url":"https://api.github.com/repos/dmggh/jwst/issues{/number}","pulls_url":"https://api.github.com/repos/dmggh/jwst/pulls{/number}","milestones_url":"https://api.github.com/repos/dmggh/jwst/milestones{/number}","notifications_url":"https://api.github.com/repos/dmggh/jwst/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/dmggh/jwst/labels{/name}","releases_url":"https://api.github.com/repos/dmggh/jwst/releases{/id}","deployments_url":"https://api.github.com/repos/dmggh/jwst/deployments","created_at":"2016-06-09T15:32:19Z","updated_at":"2016-06-09T15:32:21Z","pushed_at":"2018-05-05T00:00:01Z","git_url":"git://github.com/dmggh/jwst.git","ssh_url":"git@github.com:dmggh/jwst.git","clone_url":"https://github.com/dmggh/jwst.git","svn_url":"https://github.com/dmggh/jwst","homepage":null,"size":67110,"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":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"STScI-JWST:master","ref":"master","sha":"11ae5c7ebb858f18efd2382f4412e7de3adbcc91","user":{"login":"STScI-JWST","id":17731768,"avatar_url":"https://avatars0.githubusercontent.com/u/17731768?v=4","gravatar_id":"","url":"https://api.github.com/users/STScI-JWST","html_url":"https://github.com/STScI-JWST","followers_url":"https://api.github.com/users/STScI-JWST/followers","following_url":"https://api.github.com/users/STScI-JWST/following{/other_user}","gists_url":"https://api.github.com/users/STScI-JWST/gists{/gist_id}","starred_url":"https://api.github.com/users/STScI-JWST/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STScI-JWST/subscriptions","organizations_url":"https://api.github.com/users/STScI-JWST/orgs","repos_url":"https://api.github.com/users/STScI-JWST/repos","events_url":"https://api.github.com/users/STScI-JWST/events{/privacy}","received_events_url":"https://api.github.com/users/STScI-JWST/received_events","type":"Organization","site_admin":false},"repo":{"id":60551519,"name":"jwst","full_name":"STScI-JWST/jwst","owner":{"login":"STScI-JWST","id":17731768,"avatar_url":"https://avatars0.githubusercontent.com/u/17731768?v=4","gravatar_id":"","url":"https://api.github.com/users/STScI-JWST","html_url":"https://github.com/STScI-JWST","followers_url":"https://api.github.com/users/STScI-JWST/followers","following_url":"https://api.github.com/users/STScI-JWST/following{/other_user}","gists_url":"https://api.github.com/users/STScI-JWST/gists{/gist_id}","starred_url":"https://api.github.com/users/STScI-JWST/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/STScI-JWST/subscriptions","organizations_url":"https://api.github.com/users/STScI-JWST/orgs","repos_url":"https://api.github.com/users/STScI-JWST/repos","events_url":"https://api.github.com/users/STScI-JWST/events{/privacy}","received_events_url":"https://api.github.com/users/STScI-JWST/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/STScI-JWST/jwst","description":"JWST Calibration Pipeline","fork":false,"url":"https://api.github.com/repos/STScI-JWST/jwst","forks_url":"https://api.github.com/repos/STScI-JWST/jwst/forks","keys_url":"https://api.github.com/repos/STScI-JWST/jwst/keys{/key_id}","collaborators_url":"https://api.github.com/repos/STScI-JWST/jwst/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/STScI-JWST/jwst/teams","hooks_url":"https://api.github.com/repos/STScI-JWST/jwst/hooks","issue_events_url":"https://api.github.com/repos/STScI-JWST/jwst/issues/events{/number}","events_url":"https://api.github.com/repos/STScI-JWST/jwst/events","assignees_url":"https://api.github.com/repos/STScI-JWST/jwst/assignees{/user}","branches_url":"https://api.github.com/repos/STScI-JWST/jwst/branches{/branch}","tags_url":"https://api.github.com/repos/STScI-JWST/jwst/tags","blobs_url":"https://api.github.com/repos/STScI-JWST/jwst/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/STScI-JWST/jwst/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/STScI-JWST/jwst/git/refs{/sha}","trees_url":"https://api.github.com/repos/STScI-JWST/jwst/git/trees{/sha}","statuses_url":"https://api.github.com/repos/STScI-JWST/jwst/statuses/{sha}","languages_url":"https://api.github.com/repos/STScI-JWST/jwst/languages","stargazers_url":"https://api.github.com/repos/STScI-JWST/jwst/stargazers","contributors_url":"https://api.github.com/repos/STScI-JWST/jwst/contributors","subscribers_url":"https://api.github.com/repos/STScI-JWST/jwst/subscribers","subscription_url":"https://api.github.com/repos/STScI-JWST/jwst/subscription","commits_url":"https://api.github.com/repos/STScI-JWST/jwst/commits{/sha}","git_commits_url":"https://api.github.com/repos/STScI-JWST/jwst/git/commits{/sha}","comments_url":"https://api.github.com/repos/STScI-JWST/jwst/comments{/number}","issue_comment_url":"https://api.github.com/repos/STScI-JWST/jwst/issues/comments{/number}","contents_url":"https://api.github.com/repos/STScI-JWST/jwst/contents/{+path}","compare_url":"https://api.github.com/repos/STScI-JWST/jwst/compare/{base}...{head}","merges_url":"https://api.github.com/repos/STScI-JWST/jwst/merges","archive_url":"https://api.github.com/repos/STScI-JWST/jwst/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/STScI-JWST/jwst/downloads","issues_url":"https://api.github.com/repos/STScI-JWST/jwst/issues{/number}","pulls_url":"https://api.github.com/repos/STScI-JWST/jwst/pulls{/number}","milestones_url":"https://api.github.com/repos/STScI-JWST/jwst/milestones{/number}","notifications_url":"https://api.github.com/repos/STScI-JWST/jwst/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/STScI-JWST/jwst/labels{/name}","releases_url":"https://api.github.com/repos/STScI-JWST/jwst/releases{/id}","deployments_url":"https://api.github.com/repos/STScI-JWST/jwst/deployments","created_at":"2016-06-06T18:34:23Z","updated_at":"2018-05-04T21:28:36Z","pushed_at":"2018-05-05T00:00:03Z","git_url":"git://github.com/STScI-JWST/jwst.git","ssh_url":"git@github.com:STScI-JWST/jwst.git","clone_url":"https://github.com/STScI-JWST/jwst.git","svn_url":"https://github.com/STScI-JWST/jwst","homepage":"","size":67473,"stargazers_count":43,"watchers_count":43,"language":"Jupyter Notebook","has_issues":true,"has_projects":true,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":39,"mirror_url":null,"archived":false,"open_issues_count":207,"license":{"key":"other","name":"Other","spdx_id":null,"url":null},"forks":39,"open_issues":207,"watchers":43,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925"},"html":{"href":"https://github.com/STScI-JWST/jwst/pull/1925"},"issue":{"href":"https://api.github.com/repos/STScI-JWST/jwst/issues/1925"},"comments":{"href":"https://api.github.com/repos/STScI-JWST/jwst/issues/1925/comments"},"review_comments":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925/comments"},"review_comment":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/STScI-JWST/jwst/pulls/1925/commits"},"statuses":{"href":"https://api.github.com/repos/STScI-JWST/jwst/statuses/21fc7db6536fc8cc462a37ea36a92bf0169f8acd"}},"author_association":"CONTRIBUTOR"}}
{"actor":{"display_login":"dmggh"}}