! jnl file that uses Argo data to make different temperature time series anomaly plots.  The anomaly is from the yearly 
! mean.
! requires input arguments for time range, depth range and lat/lon range

! to run the program in ferret, you will need to type the following line with the various values filled in:

!  go fer_temp_time_series_yearly_anom time_start time_end depth_min depth_max lat_min lat_max lon_min lon_max con_lev

! If you choose not to give values for the various variables, default ones will be substituted for you.
! If you only want to choose some values, you can, but you cannot skip any values.  This means you can 
! fill in the first 2 and no others, or if you want to specify the lat/lon ranges, you must fill in values
! for the first 4 variables as well as the lat/lon ranges.

! depth values are entered in the range of 0 - 2000dbar
! time values are entered corresponding to monthly values starting with Jan, 2004 
! con_lev sets the contour and fill levels of the plot.  This is done in the following format:  (lo,hi,delta).  
! More than one can be chosen:  (lo,mid,delta1),(mid,hi,delta2).  See the Ferret Users Manual for more information.
! if no values are entered, the default region is 50S to 25N and 130E to 250E with an average over the 
! entire depth and time region
cancel/all data
cancel/all var
cancel/all sym
set window/clear
go set_pixel_size 1024 768
set mem/size=80


! assigning variables to arguments passed in the go command as well as default values
let lat_min=`$5%0%`
let lat_max=`$6%0%`
let lon_min=`$7%160%`
let lon_max=`$8%160%`
let depth_min=`$3%0%`
let depth_max=`$4%2000%`
let time_start=`$1%1%`
let time_end=`$2%53%`
set mode interpolate
set region/z=`depth_min`:`depth_max`/y=`lat_min`:`lat_max`/x=`lon_min`:`lon_max`
define viewport/xlim=.0,.95/ylim=0,1 top

PPL DFLTFNT DR
ppl conpre @P1@DR
ppl axlsze 0.15,.15
ppl axset 1,1,1,1
ppl pen 0,7
ppl pen 1,7
ppl labset .15,.15,.15

use RG_ArgoClim_Full.nc
let temp=ARGO_TEMPERATURE_MEAN[d=1]+ARGO_TEMPERATURE_ANOMALY[d=1]
let psal=ARGO_SALINITY_MEAN[d=1]+ARGO_SALINITY_ANOMALY[d=1]

! Ensuring longitudes are properly plotted
let boundb=if (`lon_min`) gt (`lon_max`) then 1 else 0
if `boundb` then
let lon_max=`lon_max`+360
endif 

! only lat is the same
let a=if (`lat_min`) eq (`lat_max`) and (`lon_min`) ne (`lon_max`) then 1 else 0
if `a` then 
let temp_time_anom= temp[x=`lon_min`:`lon_max`@ave,y=`lat_min`,z=`depth_min`:`depth_max`,l=`time_start`:`time_end`] -temp[x=`lon_min`:`lon_max`@ave,y=`lat_min`,z=`depth_min`:`depth_max`,l=1:60@ave] 
endif
! only lon is the same
let b=if `lon_min` eq `lon_max` and `lat_min` ne `lat_max` then 1 else 0
if `b` then 
let temp_time_anom= temp[x=`lon_min`,y=`lat_min`:`lat_max`@ave,z=`depth_min`:`depth_max`,l=`time_start`:`time_end`]-temp[x=`lon_min`,y=`lat_min`:`lat_max`@ave,z=`depth_min`:`depth_max`,l=1:60@ave]
endif
! lat and lon are the same
let c=if `lon_min` eq `lon_max` and `lat_min` eq `lat_max` then 1 else 0
if `c` then
let temp_time_anom= temp[x=`lon_min`,y=`lat_min`,z=`depth_min`:`depth_max`,l=`time_start`:`time_end`] -temp[x=`lon_min`,y=`lat_min`,z=`depth_min`:`depth_max`,l=1:60@ave] 
endif
! both are different
let d=if `lon_min` ne `lon_max` and `lat_min` ne `lat_max` then 1 else 0
if `d` then
let temp_time_anom= temp[x=`lon_min`:`lon_max`@ave,y=`lat_min`:`lat_max`@ave,z=`depth_min`:`depth_max`,l=`time_start`:`time_end`] -temp[x=`lon_min`:`lon_max`@ave,y=`lat_min`:`lat_max`@ave,z=`depth_min`:`depth_max`,l=1:60@ave] 
endif


let anom_max=temp_time_anom[l=@max,z=@max]
let anom_min=temp_time_anom[l=@min,z=@min]
let abs_max=ABS(`anom_max`)
let abs_min=ABS(`anom_min`)
! case where anom_max is bigger than anom_min
let maxz=if `abs_max` gt `abs_min` and `abs_max` lt 1 then 1 else 0
if `maxz` then
let lev_max = (int(10*abs_max)+1)/10
let lev_min = (int(-10*abs_max)-1)/10
endif
let maxnz=if `abs_max` gt `abs_min` and `abs_max` gt 1 then 1 else 0
if `maxnz` then
let lev_max=(int(anom_max)+1)
let lev_min=(int((-1*anom_max))-1)
endif
let anom_diff=lev_max-lev_min
let anom_delta=anom_diff/8

! case where anom_min is bigger than anom_max
let minz=if `abs_min` gt `abs_max` and `abs_min` lt 1 then 1 else 0
if `minz` then
let lev_max = (int(10*abs_min)+1)/10
let lev_min = (int(10*anom_min)-1)/10
endif
let minnz=if `abs_min` gt `abs_max` and `abs_min` gt 1 then 1 else 0
if `minnz` then
let lev_max=(int(abs_min)+1)
let lev_min=(int(anom_min)-1)
endif
let anom_diff=lev_max-lev_min
let anom_delta=anom_diff/8

let con_lev= $9&"(`lev_min`,`lev_max`,`anom_delta`)"|*>"*"&

fill/nolab/pal=cofi_pot_centered/set/lev="`con_lev`"  temp_time_anom
ppl ylab Pressure(dbar)
ppl shakey 1,1,.08,0,5,9,,,, 
ppl fill
! adding contours
 con/set_up/over/nolab/lev="`con_lev`" temp_time_anom
 ppl conset .11,,,,,,,5.7,1.,1
 ppl contour/overlay



say Plot is finished
say To adjust parameters, use the command line to pass arguments
say For this file, the form to pass arguments is
say go fer_temp_time_series_yearly_anom time_start time_end depth_min depth_max lat_min lat_max lon_min lon_max con_lev