Skip to content

Commit

Permalink
March update
Browse files Browse the repository at this point in the history
  • Loading branch information
khyde committed Mar 6, 2024
1 parent 59a52f5 commit ecb8d2f
Show file tree
Hide file tree
Showing 22 changed files with 207 additions and 18 deletions.
184 changes: 184 additions & 0 deletions IDL_PROGRAMS/soe_annual_timeseries.pro
Original file line number Diff line number Diff line change
@@ -0,0 +1,184 @@
; $ID: SOE_ANNUAL_TIMESERIES.PRO, 2024-02-29-12, USER-KJWH $
PRO SOE_ANNUAL_TIMESERIES, VERSION_STRUCT, PRODS=PRODS, BUFFER=BUFFER

;+
; NAME:
; SOE_ANNUAL_TIMESERIES
;
; PURPOSE:
; $PURPOSE$
;
; PROJECT:
; SOE_PHYTOPLANKTON
;
; CALLING SEQUENCE:
; SOE_ANNUAL_TIMESERIES,$Parameter1$, $Parameter2$, $Keyword=Keyword$, ....
;
; REQUIRED INPUTS:
; Parm1.......... Describe the positional input parameters here.
;
; OPTIONAL INPUTS:
; Parm2.......... Describe optional inputs here. If none, delete this section.
;
; KEYWORD PARAMETERS:
; KEY1........... Document keyword parameters like this. Note that the keyword is shown in ALL CAPS!
;
; OUTPUTS:
; OUTPUT.......... Describe the output of this program or function
;
; OPTIONAL OUTPUTS:
; None
;
; COMMON BLOCKS:
; None
;
; SIDE EFFECTS:
; None
;
; RESTRICTIONS:
; None
;
; EXAMPLE:
;
;
; NOTES:
; $Citations or any other useful notes$
;
; COPYRIGHT:
; Copyright (C) 2024, Department of Commerce, National Oceanic and Atmospheric Administration, National Marine Fisheries Service,
; Northeast Fisheries Science Center, Narragansett Laboratory.
; This software may be used, copied, or redistributed as long as it is not sold and this copyright notice is reproduced on each copy made.
; This routine is provided AS IS without any express or implied warranties whatsoever.
;
; AUTHOR:
; This program was written on February 29, 2024 by Kimberly J. W. Hyde, Northeast Fisheries Science Center | NOAA Fisheries | U.S. Department of Commerce, 28 Tarzwell Dr, Narragansett, RI 02882
;
; MODIFICATION HISTORY:
; Feb 29, 2024 - KJWH: Initial code written
;-
; ****************************************************************************************************
ROUTINE_NAME = 'SOE_ANNUAL_TIMESERIES'
COMPILE_OPT IDL3
SL = PATH_SEP()

IF ~N_ELEMENTS(VERSION_STRUCT) THEN MESSAGE, 'ERROR: Must provide the SOE VERSION structure'
IF ~N_ELEMENTS(BUFFER) THEN BUFFER=0
IF ~N_ELEMENTS(PRODS) THEN PRODS = ['CHLOR_A','PPD','PPD_REQUIRED','PSC_MICRO','PSC_NANO','PSC_PICO','PSC_FMICRO','PSC_FNANO','PSC_FPICO','SST']
IF ~N_ELEMENTS(PAL) THEN PAL = 'PAL_DEFAULT'
IF ~N_ELEMENTS(YEAR_COLOR) THEN YCLR = 'RED' ELSE YCLR = YEAR_COLOR

TYPES = ['STATS'];,'ANOMS']

VERSTR = VERSION_STRUCT
SHAPES = VERSTR.SHAPEFILES
MP = VERSTR.INFO.MAP_OUT
DR = VERSTR.INFO.DATERANGE
YEARS = YEAR_RANGE(DR,/STRING)
NYEARS = N_ELEMENTS(YEARS)

MINDATE = YEARS[0]+'0101000000'
MAXDATE = YEARS[-1]+'0101000000'
AX = DATE_AXIS([MINDATE,MAXDATE],/YEAR,STEP=4)
X2TICKNAME = REPLICATE(' ',N_ELEMENTS(AX.TICKNAME))
YTICKNAMES=[' ',' ',' ']
CHARSIZE = 11
MARGIN = [0.03,0.0,0.11,0.0]

STRPRODS = TAG_NAMES(VERSTR.PROD_INFO)
OK = WHERE_MATCH(STRPRODS,PRODS,COUNT)
IF COUNT EQ 0 THEN STOP
PRODS = PRODS[OK]

IF ~N_ELEMENTS(DIR_PLOTS) THEN DIRPLT = VERSTR.DIRS.DIR_PLOTS+'ANNUAL_TIMESERIES'+SL ELSE DIR_MOV = DIR_PLOTS & DIR_TEST, DIRPLT
IF ~N_ELEMENTS(DATFILE) THEN DATFILE = VERSTR.INFO.DATAFILE
FULLSTRUCT = IDL_RESTORE(DATFILE)
FULLSTRUCT[WHERE(FULLSTRUCT.MATH EQ 'STACKED_STATS')].MATH = 'STATS'
FULLSTRUCT[WHERE(FULLSTRUCT.MATH EQ 'STACKED_ANOMS')].MATH = 'ANOM'
STRUCT = FULLSTRUCT[WHERE(FULLSTRUCT.MATH EQ 'STATS',/NULL)]
ASTRUCT = FULLSTRUCT[WHERE(FULLSTRUCT.MATH EQ 'ANOM',/NULL)]

FOR S=0, N_ELEMENTS(PRODS)-1 DO BEGIN
APROD = PRODS[S]
PSTR = VERSTR.PROD_INFO.(WHERE(TAG_NAMES(VERSTR.PROD_INFO) EQ APROD,/NULL))
DSET = PSTR.DATASET
TSET = PSTR.TEMP_DATASET

CASE VALIDS('PRODS',APROD) OF
'SST': BEGIN & YTITLE=UNITS('TEMP') & SRNG=[0,30] & PSTATS='AMEAN' & ARNG=[-5,5] & AMID=0 & ASTATS='AMEAN' & END
'CHLOR_A': BEGIN & YTITLE=UNITS('CHLOR_A') & SRNG=[0.5,2.0] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PPD': BEGIN & YTITLE=UNITS('PPD') & SRNG=[0.0,1.5] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_MICRO': BEGIN & YTITLE=UNITS('PSC_MICRO') & SRNG=[0.0,10] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_NANO': BEGIN & YTITLE=UNITS('PSC_NANO') & SRNG=[0.0,10] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_PICO': BEGIN & YTITLE=UNITS('PSC_PICO') & SRNG=[0.0,10] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_FMICRO': BEGIN & YTITLE=UNITS('PSC_FMICRO') & SRNG=[0.0,1.0] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_FNANO': BEGIN & YTITLE=UNITS('PSC_FNANO') & SRNG=[0.0,1.0] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
'PSC_FPICO': BEGIN & YTITLE=UNITS('PSC_FPICO') & SRNG=[0.0,1.0] & PSTATS='MED' & ARNG=[0.5,2] & AMID=1 & ASTATS='AMEAN' & END
ENDCASE

FOR T=0, N_ELEMENTS(TYPES)-1 DO BEGIN
ATYP = TYPES[T]

PNGFILE = DIRPLT + 'ANNUAL_' + MIN(YEARS) + '_' + MAX(YEARS) + '-' + APROD + '-' + ATYP + '-TIMESERIES.PNG'
;PNGFILES = DIRPLT + 'ANNUAL_' + YEARS + '-' + ANAME + '-' + APROD + '-' + ATYP + '-TIMESERIES.PNG'

IF FILE_MAKE(DATFILE, PNGFILE, OVERWRITE=OVERWRITE) EQ 0 THEN CONTINUE



FOR H=0, N_ELEMENTS(SHAPES)-1 DO BEGIN
SHAPE = VERSTR.SHAPEFILES.(H)
NAMES = SHAPE.SUBAREA_NAMES
TITLES = SHAPE.SUBAREA_TITLES
COLORS = ['DEEP_SKY_BLUE','SALMON','MEDIUM_PURPLE','GOLD']

FOR N=0, N_ELEMENTS(NAMES)-1 DO BEGIN
ANAME = NAMES[N]
CASE ANAME OF
'MAB': PLT_TITLE = 'Mid-Atlantic Bight'
'GOM': PLT_TITLE = 'Gulf of Maine'
'GB': PLT_TITLE = 'Georges Bank'
'SS': PLT_TITLE = 'Scotian Shelf'
ENDCASE
PSTR = STRUCT[WHERE(STRUCT.PROD EQ APROD AND STRUCT.SUBAREA EQ ANAME AND STRUCT.PERIOD_CODE EQ 'A',/NULL)]
CSTR = STRUCT[WHERE(STRUCT.PROD EQ APROD AND STRUCT.SUBAREA EQ ANAME AND STRUCT.PERIOD_CODE EQ 'ANNUAL',/NULL)]
ASTR = ASTRUCT[WHERE(ASTRUCT.PROD EQ APROD AND ASTRUCT.SUBAREA EQ ANAME AND STRUCT.PERIOD_CODE EQ 'A',/NULL)]
IF PSTR EQ [] THEN STOP

; FOR R=0, N_ELEMENTS(PERIODS)-1 DO BEGIN
; PER = PERIODS[R]
; CASE PER OF
; 'W': BEGIN & NDATES = 52 & CPER = 'WEEK' & END
; 'M': BEGIN & NDATES = 12 & CPER = 'MONTH' & END
; ENDCASE
;
; CSTR = PSTR[WHERE(PSTR.PERIOD_CODE EQ CPER,/NULL)]
; IF CSTR EQ [] THEN STOP ; CONTINUE

CDATE = DATE_2JD(DATE_2YEAR(PERIOD_2DATE(PSTR.PERIOD)))
CASE ATYP OF
'STATS': BEGIN & PDATA = GET_TAG(PSTR,PSTATS) & CDATA=GET_TAG(CSTR,PSTATS) & YRNG=SRNG & END
'ANOMS': BEGIN & PDATA = GET_TAG(ASTR,PSTATS) & CDATA=AMID & YRNG=ARNG & END
ENDCASE

DIMS = [1000,600]
THICK = 3
FONT_SIZE = 12

; PC = PLOT(AX.JD,REPLICATE(CDATA,2),COLOR=COLORS[N],THICK=THICK,FONT_SIZE=FONT_SIZE,TITLE='',/OVERPLOT,$
; XRANGE=AX.JD,YRANGE=YRNG,XTICKNAME=AX.TICKNAME,XTICKVALUES=AX.TICKV,XMINOR=0,XSTYLE=1,YMAJOR=YMAJOR,YTICKV=YTICKS,YTITLE=YTITLE,DIMENSIONS=DIMS,MARGIN=[0.08,0.08,0.08,0.08])

PA = PLOT(CDATE,PDATA,COLOR=COLORS[N],THICK=THICK,FONT_SIZE=FONT_SIZE,/OVERPLOT,NAME=ANAME,$
XRANGE=AX.JD,YRANGE=YRNG,XTICKNAME=AX.TICKNAME,XTICKVALUES=AX.TICKV,XSTYLE=1,YMAJOR=YMAJOR,YTICKV=YTICKS,YTITLE=YTITLE,DIMENSIONS=DIMS,MARGIN=[0.08,0.08,0.08,0.08])
LG = LEGEND(TARGET=PA,POSITION=[0.1,0.9-N*0.025],/NORMAL,COLOR='BLACK',LINESTYLE=6,SAMPLE_WIDTH=0.07,HORIZONTAL_ALIGNMENT=0)

ENDFOR ; NAMES

stop
PA.SAVE, PNGFILE
PA.CLOSE
ENDFOR ; SHAPES
ENDFOR ; TYPES
ENDFOR ; PRODS


END ; ***************** End of SOE_ANNUAL_TIMESERIES *****************
15 changes: 9 additions & 6 deletions IDL_PROGRAMS/soe_main.pro
Original file line number Diff line number Diff line change
Expand Up @@ -94,13 +94,13 @@
IF ~N_ELEMENTS(MAKE_EPU_MAPS) THEN MAKE_EPU_MAPS = ''
IF ~N_ELEMENTS(MAKE_NETCDFS) THEN MAKE_NETCDFS = ''
IF ~N_ELEMENTS(DATA_UPDATE) THEN DATA_UPDATE = ''
IF ~N_ELEMENTS(DATA_EXTRACTS) THEN DATA_EXTRACTS = 'Y'
IF ~N_ELEMENTS(PP_REQ_EXTRACTS) THEN PP_REQ_EXTRACTS = 'Y'
IF ~N_ELEMENTS(DATA_EXTRACTS) THEN DATA_EXTRACTS = ''
IF ~N_ELEMENTS(PP_REQ_EXTRACTS) THEN PP_REQ_EXTRACTS = ''
IF ~N_ELEMENTS(PHYSIZE_PLOTS) THEN PHYSIZE_PLOTS = 'Y'
IF ~N_ELEMENTS(PHYSIZE_COMPOSITES) THEN PHYSIZE_COMPOSITES = ''
IF ~N_ELEMENTS(WEEKLY_PLOTS) THEN WEEKLY_PLOTS = 'Y'
IF ~N_ELEMENTS(MONTHLY_TIMESERIES) THEN MONTHLY_TIMESERIES = 'Y'
IF ~N_ELEMENTS(STACKED_TIMESERIES) THEN STACKED_TIMESERIES = 'Y'
IF ~N_ELEMENTS(WEEKLY_PLOTS) THEN WEEKLY_PLOTS = ''
IF ~N_ELEMENTS(MONTHLY_TIMESERIES) THEN MONTHLY_TIMESERIES = ''
IF ~N_ELEMENTS(STACKED_TIMESERIES) THEN STACKED_TIMESERIES = ''
IF ~N_ELEMENTS(ANNUAL_COMPOSITES) THEN ANNUAL_COMPOSITES = ''
IF ~N_ELEMENTS(SST_PNGS) THEN SST_PNGS = ''
IF ~N_ELEMENTS(SEASONAL_COMPS) THEN SEASONAL_COMPS = ''
Expand All @@ -125,7 +125,7 @@
IF KEYWORD_SET(MAKE_NETCDFS) THEN STOP;SOE_NETCDFS, VER
IF KEYWORD_SET(DATA_EXTRACTS) THEN BEGIN & PROJECT_SUBAREA_EXTRACT, VERSTR & SOE_EXTRACTS_2LONGFORM, VERSTR, DIR_DATA=DIR_OUT & ENDIF
IF KEYWORD_SET(PP_REQ_EXTRACTS) THEN BEGIN & SOE_PP_REQUIRED, VERSTR & SOE_EXTRACTS_2LONGFORM, VERSTR, DIR_DATA=DIR_OUT,/PPREQUIRED & ENDIF
IF KEYWORD_SET(PHYSIZE_PLOTS) THEN SOE_PHYTOSIZE_PLOT, VER, BUFFER=1
IF KEYWORD_SET(PHYSIZE_PLOTS) THEN SOE_PHYTOSIZE_PLOT, VER, BUFFER=0
IF KEYWORD_SET(PHYSIZE_COMPOSITES) THEN STOP ;SOE_PHYTOSIZE_COMPOSITES, VER, BUFFER=1
IF KEYWORD_SET(WEEKLY_PLOTS) THEN SOE_WEEKLY_PLOTS, VER, BUFFER=BUFFER
IF KEYWORD_SET(STACKED_TIMESERIES) THEN SOE_STACKED_TIMESERIES_PLOT, VERSTR, BUFFER=1
Expand All @@ -145,6 +145,9 @@
IF KEYWORD_SET(SST_PNGS) THEN SOE_SST,VER, BUFFER=BUFFER
ENDELSE

; Annual plots
SOE_ANNUAL_TIMESERIES, VERSTR, PRODS=['CHLOR_A','PPD','SST'], BUFFER=0
stop
; CHL bloom
MP = 'NES'
SDR = ['20230101','20230930']
Expand Down
26 changes: 14 additions & 12 deletions IDL_PROGRAMS/soe_phytosize_plot.pro
Original file line number Diff line number Diff line change
Expand Up @@ -71,9 +71,9 @@
FOR V=0, N_ELEMENTS(VERSION)-1 DO BEGIN
VER = VERSION[V]
VERSTR = SOE_VERSION_INFO(VER)
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FMICRO_TAG = 'PSC_FMICRO' ELSE FMICRO_TAG = 'MICRO_PERCENTAGE'
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FNANO_TAG = 'PSC_FNANO' ELSE FNANO_TAG = 'NANO_PERCENTAGE'
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FPICO_TAG = 'PSC_FPICO' ELSE FPICO_TAG = 'PICO_PERCENTAGE'
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FMICRO_TAG = 'PSC_MICRO' ELSE FMICRO_TAG = 'MICRO_PERCENTAGE'
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FNANO_TAG = 'PSC_NANO' ELSE FNANO_TAG = 'NANO_PERCENTAGE'
IF VERSTR.INFO.SOE_YEAR GE '2022'THEN FPICO_TAG = 'PSC_PICO' ELSE FPICO_TAG = 'PICO_PERCENTAGE'

IF ~N_ELEMENTS(DATFILE) THEN DATFILE = VERSTR.INFO.DATAFILE
STRUCT = IDL_RESTORE(DATFILE)
Expand Down Expand Up @@ -149,10 +149,7 @@
FOR N=0, N_ELEMENTS(NAMES)-1 DO BEGIN ; Subareas
ANAME = NAMES[N]
TITLE = TITLES[N]
IF YR EQ '2021' AND I EQ 1 THEN BEGIN ; WORK AROUND FOR THE 2021 DATA SWITCH BETWEEN SENSORS
OK = WHERE(OSET.PERIOD EQ 'W_202118' AND OSET.SENSOR EQ 'OCCCI',/NULL, COMPLEMENT=COMP)
IF N_ELEMENTS(COMP) GT 0 THEN OSET = OSET[COMP]
ENDIF

MST = YSET[WHERE(YSET.PROD EQ FMICRO_TAG AND YSET.SUBAREA EQ ANAME,/NULL)] & OMST=OSET[WHERE(OSET.PROD EQ FMICRO_TAG AND OSET.SUBAREA EQ ANAME,/NULL)]
NST = YSET[WHERE(YSET.PROD EQ FNANO_TAG AND YSET.SUBAREA EQ ANAME,/NULL)] & ONST=OSET[WHERE(OSET.PROD EQ FNANO_TAG AND OSET.SUBAREA EQ ANAME,/NULL)]
PST = YSET[WHERE(YSET.PROD EQ FPICO_TAG AND YSET.SUBAREA EQ ANAME,/NULL)] & OPST=OSET[WHERE(OSET.PROD EQ FPICO_TAG AND OSET.SUBAREA EQ ANAME,/NULL)]
Expand All @@ -173,10 +170,15 @@
AX = DATE_AXIS([FDT[0],FDT[-1]],/FYEAR,/MID)
XTICKNAMES = REPLICATE(' ',N_ELEMENTS(AX.TICKNAME))

YTOT = MST.MED + NST.MED + PST.MED & TOT = OMST.MED + ONST.MED + OPST.MED
YMICRO = MST.MED/YTOT & MICRO = OMST.MED/TOT
YNANO = NST.MED/YTOT & NANO = ONST.MED/TOT
YPICO = PST.MED/YTOT & PICO = OPST.MED/TOT

BOT = REPLICATE(0.0,N_ELEMENTS(MDT))
MY = [BOT,REVERSE(MST.MED)]
NY = [MST.MED,REVERSE(MST.MED+NST.MED)]
PY = [MST.MED+NST.MED,REPLICATE(1.0,N_ELEMENTS(MDT))]
MY = [BOT,REVERSE(YMICRO)]
NY = [YMICRO,REVERSE(YMICRO+YNANO)]
PY = [YMICRO+YNANO,REPLICATE(1.0,N_ELEMENTS(MDT))]
YRANGE = NICE_RANGE([0,1])

IF N GT 0 THEN Y1 = Y1 + YS + SP
Expand All @@ -196,8 +198,8 @@
A1 = AXIS('Y',TARGET=P3,LOCATION=[MAX(DATE_2JD(FDT)),0,0],TEXTPOS=1,TITLE=UNITS('CHLOR_A'),TICKFONT_SIZE=11,TEXT_COLOR='BLACK',COLOR='BLACK',TICKLEN=0.02,TICKDIR=1,YRANGE=CRANGE) ;AXIS,YAXIS=1,YRANGE=[0,300],/SAVE, YTITLE=YTITLE2,CHARSIZE=CHARSIZE,COLOR=0
A2 = AXIS('X',TARGET=PD,LOCATION=[MIN(XX),1,0],MAJOR=0,MINOR=0);,COLOR=PL(252))
ENDIF ELSE BEGIN
P3 = PLOT(DATE_2JD(FDT),OMST.MED,YRANGE=YRANGE,COLOR=CLRS[1],THICK=4,LINESTYLE=0,/OVERPLOT)
P3 = PLOT(DATE_2JD(FDT),OMST.MED+ONST.MED,YRANGE=YRANGE,COLOR=CLRS[2],THICK=4,LINESTYLE=0,/OVERPLOT)
P3 = PLOT(DATE_2JD(FDT),MICRO,YRANGE=YRANGE,COLOR=CLRS[1],THICK=4,LINESTYLE=0,/OVERPLOT)
P3 = PLOT(DATE_2JD(FDT),MICRO+NANO,YRANGE=YRANGE,COLOR=CLRS[2],THICK=4,LINESTYLE=0,/OVERPLOT)
; P3 = PLOT(DATE_2JD(FDT),OMST.MED+ONST.MED+OPST.MED,YRANGE=CRANGE,COLOR=CLRS[3],THICK=3,LINESTYLE=0,/OVERPLOT)
ENDELSE
TA = TEXT(POS[0]+.02,POS[3]-0.03,ANAME,FONT_COLOR='BLACK',FONT_SIZE=FONTSIZE+4,FONT_STYLE='BOLD')
Expand Down
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.
Binary file not shown.

0 comments on commit ecb8d2f

Please sign in to comment.