code: def calibrate(self, data, dsid):
          
          tic = datetime.now()
  
          data15hdr = self.header['15_DATA_HEADER']
          calibration = dsid.calibration
          channel = dsid.name
  
          # even though all the channels may not be present in the file,
          # the header does have calibration coefficients for all the channels
          # hence, this channel index needs to refer to full channel list
          i = list(CHANNEL_NAMES.values()).index(channel)
  
          if calibration == 'counts':
              return data
  
          if calibration in ['radiance', 'reflectance', 'brightness_temperature']:
              # determine the required calibration coefficients to use
              # for the Level 1.5 Header
              if (self.calib_mode.upper() != 'GSICS' and self.calib_mode.upper() != 'NOMINAL'):
                  raise NotImplementedError(
                      'Unknown Calibration mode : Please check')
  
              # NB GSICS doesn't have calibration coeffs for VIS channels
              if (self.calib_mode.upper() != 'GSICS' or channel in VIS_CHANNELS):
                  coeffs = data15hdr[
                      'RadiometricProcessing']['Level15ImageCalibration']
                  gain = coeffs['CalSlope'][i]
                  offset = coeffs['CalOffset'][i]
              else:
                  coeffs = data15hdr[
                      'RadiometricProcessing']['MPEFCalFeedback']
                  gain = coeffs['GSICSCalCoeff'][i]
                  offset = coeffs['GSICSOffsetCount'][i]
                  offset = offset * gain
              res = self._convert_to_radiance(data, gain, offset)
  
          if calibration == 'reflectance':
              solar_irradiance = CALIB[self.platform_id][channel]["F"]
              res = self._vis_calibrate(res, solar_irradiance)
  
          elif calibration == 'brightness_temperature':
              cal_type = data15hdr['ImageDescription'][
                  'Level15ImageProduction']['PlannedChanProcessing'][i]
              res = self._ir_calibrate(res, channel, cal_type)
  
          logger.debug("Calibration time " + str(datetime.now() - tic))
          return res
docs: Calibrate the data.