Skip to content
Snippets Groups Projects
Commit c42cc0e0 authored by Ian Boyd's avatar Ian Boyd
Browse files

Replace idlcr8hdf.pro

parent eaa204c8
No related branches found
No related tags found
No related merge requests found
;Main Program Version: idlcr8hdf.pro v4.0b66, 20241126
;Main Program Version: idlcr8hdf.pro v4.0b67, 20241218
; Written by Ian Boyd for the EVDC/AVDC - iboyd@bryanscientific.org
;
;Sub-versions (refer to idlcr8hdf-v4.0_Readme.pdf for full history)
......@@ -113,7 +113,7 @@ PRO intro, intype
COMMON WIDGET_WIN
nhdr=44 & errtxt=STRARR(nhdr)
vertxt=['idlcr8hdf-v4.0_Readme.pdf','v4.0b66 November 2024']
vertxt=['idlcr8hdf-v4.0_Readme.pdf','v4.0b67 December 2024']
errtxt[1]='Welcome to IDLcr8HDF. This program creates GEOMS compliant HDF4, HDF5 and netCDF files'
errtxt[2]='(also refer to '+vertxt[0]+').'
errtxt[4]='Inputs to the program (IDL Virtual Machine (VM) and IDL Licensed (LIC) Versions):'
......@@ -4650,6 +4650,9 @@ PRO read_data, sds, inf
; for identifying invalid wind speed or direction values - Version 4.0b43
; 20201020: Add check for negative random uncertainty values (standard or relative only)
; - Version 4.0b56
; 20241218: Identify fill values before checking that the vertical dimension values are
; monotonically increasing or decreasing. Needed for Pandora off-axis measurements
; - Version 4.0b67
;
; Inputs: sds - Either a structure containing the Variable Attributes and Data, or the input
; data file
......@@ -4903,22 +4906,28 @@ FOR vc=0,N_ELEMENTS(bchks)-1 DO BEGIN
bvals=DOUBLE(REFORM(dtest,ndm[bci[0],di])) ;put into array order and make numeric
IF nbcnt EQ 1 THEN n_sec=ndm[bci[0],nbi[0]] ELSE n_sec=1L ;Number of datasets to be read through
IF bi[0] NE 0 THEN bvals=TRANSPOSE(bvals) ;make ALTITUDE or PRESSURE array the first index
;determine the VAR_FILL_VALUE for the dataset
zci=WHERE(mv_dbl[*,bci[0]] NE 0.d,zccnt)
IF zccnt NE 0 THEN bvtfv=mv_dbl[2,bci[0]] ELSE bvtfv=DOUBLE(mv_lng[2,bci[0]])
FOR i=0L,n_sec-1L DO BEGIN ;e.g. number of DATETIME values or single loop if only one dimension
bvtest=bvals[*,i] ;set of PRESSURES or ALTITUDES to be tested
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF ascending EQ -1 THEN ascending=asc
IF (asc EQ -1) OR (ascending NE asc) THEN BEGIN ;altitudes/pressures not in any order
IF (ascending NE -1) AND (writeonce[1] EQ 1) THEN BEGIN ;more than one dimension and error in one or more of the sets
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 '+bchks[vc]+' values not in '+itxt+' order for every '+vdvals[nbi[0]]+' for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonce[1]=0
ENDIF ELSE IF writeonce[0] EQ 1 THEN BEGIN
infotxt='3 '+bchks[vc]+' values not monotonically increasing or decreasing for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonce[0]=0
gvi=WHERE(bvals[*,i] NE bvtfv,gvcnt) ;check for fill values
IF gvcnt GT 1 THEN BEGIN ;can't do monotonic test if there is only one value
bvtest=bvals[gvi,i] ;set of PRESSURES or ALTITUDES to be tested
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF ascending EQ -1 THEN ascending=asc
IF (asc EQ -1) OR (ascending NE asc) THEN BEGIN ;altitudes/pressures not in any order
IF (ascending NE -1) AND (writeonce[1] EQ 1) THEN BEGIN ;more than one dimension and error in one or more of the sets
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 '+bchks[vc]+' values not in '+itxt+' order for every '+vdvals[nbi[0]]+' for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonce[1]=0
ENDIF ELSE IF writeonce[0] EQ 1 THEN BEGIN
infotxt='3 '+bchks[vc]+' values not monotonically increasing or decreasing for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonce[0]=0
ENDIF
ENDIF
ENDIF
ENDFOR
......@@ -4978,6 +4987,9 @@ FOR vc=0,N_ELEMENTS(bchks)-1 DO BEGIN
ENDIF ELSE option=0
IF option NE 0 THEN BEGIN
;Determine the VAR_FILL_VALUE
zci=WHERE(mv_dbl[*,bbci[0]] NE 0.d,zccnt)
IF zccnt NE 0 THEN bvtfv=mv_dbl[2,bci[0]] ELSE bvtfv=DOUBLE(mv_lng[2,bci[0]])
writeonceb=[1,1]
FOR i=0L,n_sec-1L DO BEGIN
FOR j=0,n_ind-1 DO BEGIN ;check that order of the boundary sets matches the axis variable ordering
......@@ -4987,16 +4999,21 @@ FOR vc=0,N_ELEMENTS(bchks)-1 DO BEGIN
3: bvtest=bvals[*,i,j]
4: bvtest=bvals[j,*,i]
ENDCASE
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF (ascending NE asc) AND (writeonceb[0] EQ 1) THEN BEGIN
;order of the boundaries dataset does not match axis dataset
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 '+bchks[vc]+'.BOUNDARIES order does not match '+bchks[vc]+' '+itxt+' ordering for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonceb[0]=0
;check for VAR_FILL_VALUES in bvtest
gvi=WHERE(bvtest NE bvtfv,gvcnt)
IF gvcnt GT 1 THEN BEGIN
bvtest=bvtest[gvi]
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF (ascending NE asc) AND (writeonceb[0] EQ 1) THEN BEGIN
;order of the boundaries dataset does not match axis dataset
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 '+bchks[vc]+'.BOUNDARIES order does not match '+bchks[vc]+' '+itxt+' ordering for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonceb[0]=0
ENDIF
ENDIF
ENDFOR
ENDFOR
......@@ -5009,16 +5026,21 @@ FOR vc=0,N_ELEMENTS(bchks)-1 DO BEGIN
3: bvtest=bvals[j,i,*]
4: bvtest=bvals[*,j,i]
ENDCASE
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF (ascending NE asc) AND (writeonceb[1] EQ 1) AND (ftirchk EQ 0) THEN BEGIN
;order of the boundaries values does not match axis dataset
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 Boundary index order does not match '+bchks[vc]+' '+itxt+' ordering for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonceb[1]=0
;check for VAR_FILL_VALUES in bvtest
gvi=WHERE(bvtest NE bvtfv,gvcnt)
IF gvcnt GT 1 THEN BEGIN
bvtest=bvtest[gvi]
asc=-1
IF ARRAY_EQUAL(bvtest,bvtest[SORT(bvtest)]) THEN asc=1 $ ;ascending order
ELSE IF ARRAY_EQUAL(bvtest,bvtest[REVERSE(SORT(bvtest))]) THEN asc=0 ;descending order
IF (ascending NE asc) AND (writeonceb[1] EQ 1) AND (ftirchk EQ 0) THEN BEGIN
;order of the boundaries values does not match axis dataset
IF ascending EQ 1 THEN itxt='increasing' ELSE itxt='decreasing'
infotxt='3 Boundary index order does not match '+bchks[vc]+' '+itxt+' ordering for '+meta_arr[mi[0]]
INFOTXT_OUTPUT,infotxt
writeonceb[1]=0
ENDIF
ENDIF
ENDFOR
ENDFOR
......@@ -6166,7 +6188,7 @@ PRO idlcr8hdf, ga, sds, tav, odir, reterr, H5=o1, AVK=o2, LOG=o4, POPUP=o5, QA=o
;
;Program documentation, idlcr8hdf-v4.0_Readme.pdf, available from http://avdc.gsfc.nasa.gov.
;
;Program sub-version 4.0b66 (20241126)
;Program sub-version 4.0b67 (20241218)
; ----------
;Written by Ian Boyd for the EVDC/AVDC - iboyd@bryanscientific.org
;
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment