docs: def _photometricErrors(self, n_per_bin=100, plot=False):
          """
          Realistic photometric errors estimated from catalog objects and mask.
          Extend below the magnitude threshold with a flat extrapolation.
          """
  
          self.catalog.spatialBin(self.roi)
  
          if len(self.catalog.mag_1) < n_per_bin:
              logger.warning("Catalog contains fewer objects than requested to calculate errors.")
              n_per_bin = int(len(self.catalog.mag_1) / 3)
  
          # Band 1
          mag_1_thresh = self.mask.mask_1.mask_roi_sparse[self.catalog.pixel_roi_index] - self.catalog.mag_1
          sorting_indices = np.argsort(mag_1_thresh)
          mag_1_thresh_sort = mag_1_thresh[sorting_indices]
          mag_err_1_sort = self.catalog.mag_err_1[sorting_indices]
  
          # ADW: Can't this be done with np.median(axis=?)
          mag_1_thresh_medians = []
          mag_err_1_medians = []
          for i in range(0, int(len(mag_1_thresh) / float(n_per_bin))):
              mag_1_thresh_medians.append(np.median(mag_1_thresh_sort[n_per_bin * i: n_per_bin * (i + 1)]))
              mag_err_1_medians.append(np.median(mag_err_1_sort[n_per_bin * i: n_per_bin * (i + 1)]))
          
          if mag_1_thresh_medians[0] > 0.:
              mag_1_thresh_medians = np.insert(mag_1_thresh_medians, 0, -99.)
              mag_err_1_medians = np.insert(mag_err_1_medians, 0, mag_err_1_medians[0])
          
          self.photo_err_1 = scipy.interpolate.interp1d(mag_1_thresh_medians, mag_err_1_medians,
                                                        bounds_error=False, fill_value=mag_err_1_medians[-1])
  
          # Band 2
          mag_2_thresh = self.mask.mask_2.mask_roi_sparse[self.catalog.pixel_roi_index] - self.catalog.mag_2
          sorting_indices = np.argsort(mag_2_thresh)
          mag_2_thresh_sort = mag_2_thresh[sorting_indices]
          mag_err_2_sort = self.catalog.mag_err_2[sorting_indices]
  
          mag_2_thresh_medians = []
          mag_err_2_medians = []
          for i in range(0, int(len(mag_2_thresh) / float(n_per_bin))):
              mag_2_thresh_medians.append(np.median(mag_2_thresh_sort[n_per_bin * i: n_per_bin * (i + 1)]))
              mag_err_2_medians.append(np.median(mag_err_2_sort[n_per_bin * i: n_per_bin * (i + 1)]))
  
          if mag_2_thresh_medians[0] > 0.:
              mag_2_thresh_medians = np.insert(mag_2_thresh_medians, 0, -99.)
              mag_err_2_medians = np.insert(mag_err_2_medians, 0, mag_err_2_medians[0])
          
          self.photo_err_2 = scipy.interpolate.interp1d(mag_2_thresh_medians, mag_err_2_medians,
                                                        bounds_error=False, fill_value=mag_err_2_medians[-1])