# Frequency Calibration Notes from CrIS NPP

Thu, Dec 7, 2017## 1 Previous Work

### 1.1 Npp

#### 1.1.1 Locations

- Early calibration codes are in ~strow/Work/Cris/Calval/Npp/
- Later long-term time series are in ~strow/Work/Cris/Stats

#### 1.1.2 Commissioning Codes

- I am just describing what I am finding in these old codes. I think I will re-write them completely. For now I am describing what I found in
`cris_speccal_v2.m`

. Early codes used rtp allfov output. Spectra with good contrast (min/max BT > 5K) and "clear scenes" with less than 5K of clouds are used. The "clear scenes" are determined by comparing

\begin{equation} \text{btc_surf} = \text{radtot(f(indsurf),prof.calc(indsurf,:)./ew);} \\ \text{bto_surf} = \text{radtot(f(indsurf),prof.robs1(indsurf,:)./ew);} \end{equation}`bto_surf`

to`btc_surf`

. These are derived as follows:Note that

`prof.rcalc`

is a clear-only simulation. Not sure why this is done, it seems fine to me to just use BTobs and BTcal directly to test for clear.- We did not use a clear rtp file because I was worried the calibration might be time dependent. That turned out to not be a problem.
- The code has an option to not do absolute frequency calibration, but instead calibration relative to FOV5. This option treats prof.robs1 for FOV5 as the computed radiance. I think I continued to use the contrast and clear tests for this, but in theory I could probably relax them a lot with this approach.
- To start, the computed radiance is interpolated to a 60X finer grid using finterp2. Then, further spline interpolations are done on this BTcal that are used for the cross-correlations.
- All of this is done on programmable "time block", looks to be set to 6 minutes, the granule length.
- Output is: (nblocks are the number of discrete time blocks used.)

results(ifov).percent_shift = results(ifov).percent_shift(1:nblocks); results(ifov).rtime_min = results(ifov).rtime_min(1:nblocks); results(ifov).rtime_max = results(ifov).rtime_max(1:nblocks); results(ifov).rlat_mintime = results(ifov).rlat_mintime(1:nblocks); results(ifov).rlat_maxtime = results(ifov).rlat_maxtime(1:nblocks); results(ifov).orbit_phase = results(ifov).orbit_phase(1:nblocks); results(ifov).landfrac = results(ifov).landfrac(1:nblocks); results(ifov).count = results(ifov).count(1:nblocks); results(ifov).corrcoef = results(ifov).corrcoef(1:nblocks); results(ifov).ccall = results(ifov).ccall(:,1:nblocks); results(ifov).bto = results(ifov).bto(:,1:nblocks); results(ifov).btc = results(ifov).btc(:,1:nblocks); results(ifov).ppm = 1E6 * results(ifov).percent_shift * channel_df * 0.01 / mean_freq;

- These data are then processed by codes like
`process_freqcal_feb24.m`

in the subdirectory Feb24. Or many of them in the code (top level)`process_freqcal_series.m`

. - The output of
`process_freqcal`

codes are read into`mod_dg.m`

(or similar) for fitting the focal plane geometry. - Looks like there is a fft version:
`cris_speccal_v2_fft.m`

- Looks like test.m is a version of D. Tobin's approach where he intercompares radiances relative to FOV5 and then find the freqcal that minimizes each relative to FOV5 radiances.

#### 1.1.3 Long Term Trending Codes

- Codes matching
`cris_speccal_stats*.m`

do spectral calibration using stats files as inputs. In particular`cris_speccal_stats_highres_sw.m`

uses the \cd lines in the short-wave high resolution data to get the Neon calibration. These work very well because they are above clouds. This code has better handling of indices and has a subroutine,`getind.m`

that specifies which indices to use for the correlations. This is probably a better starting point than the Commissioning Codes.