National Oceanic and
Atmospheric Administration
United States Department of Commerce

Creating seasonal masks

Creating seasonal masks

Question:

How can I create a seasonalmask?

Example:


Explanation:

One of the easiest ways to create a seasonal mask is to usethe MOD() function to convert the underlying units of your data'stime axis into the number of those units elapsed during a year.Use the ncdump program with the "-h" flag to get detailedinformation on your data's time axis. In the case of a daily timeseries, as in Reynolds SST, you might have:

use reynolds_sst_wk
let year_days = mod(t[gt=wsst],365.2425)

Note: If your time origin is not at a year boundaryyour definition may have to subtract in order to get the correctnumber of elapsed units since year begin.

Note: If you're more comfortable with dates, you canget the Julian day number for any given date with

define axis/T0=1-jan-0000/T=1-jan-0000:31-dec-0000:1/unit=day tjday
let TJ = T[gt=tjday]

then, for example,

`TJ[t=15-mar]`

can be used as an expression for the Julian day number of 15-MARas in

yes? say The Ides of March is Julian day `TJ[t=15-mar]`
The Ides of March is Julian day 74

The limitation of this is that the Julian day calculation willnot regard Feb as a 28.2425 day month. Rather it will be eithera 28 or a 29 day month, depending upon the year (0000 is a leapyear - use 0001 for a non-leap year)

Solution:

Here's the journal script that produced the graphic above

! A journal script demonstrating one way to create
! a seasonal mask.
!
! First use ncdump to see what the units and T0
! for the reynolds time axis are
!
! > ncdump -h reynolds_sst_wk.cdf
!
! REYNOLDS_T:units = "DAY since 0000-12-30 00:00:00" ;
! REYNOLDS_T:time_origin = "30-DEC-0000" ;
!
! Now create a variable that has values of day number
! but that is defined on a grid with the reynolds time axis.

use reynolds_sst_wk
let year_days = mod(t[gt=wsst],365.2425)

! Now create a mask which has a value of 1 only for days
! 60 to 151 (March to May).
! All other days will be flagged as missing values.

let daily_mask_a = IF year_days gt 59 then 1
let daily_mask_b = IF year_days lt 152 then 1
let daily_mask = daily_mask_a * daily_mask_b

! Use one definition of springiness for the spring and
! another for the rest of the year.

let spring = fsst + 10
let rest = fsst - 10
let/title="liklihood of spring" springiness = IF daily_mask THEN spring ELSE rest

! Set the desired region and plot the result

set region/x=180:270/y=10s:0n/t=15-jan-1985:15-jan-2000
fill/transpose springiness[y=@ave]