Skip to content
Snippets Groups Projects
geoms_qa.pro 10.00 KiB
;---------------------------------------------------------------------------------------------------
;
; name:			geoms_qa.pro
; description: 	Wrapper for AVDC/EVDC QA tool
;
; 2010-12-09, v0.1	Christian Retscher	initial implementation
; 2010-12-21, v0.5	Christian Retscher	rename to geoms_qa
; 2011-03-03, v0.6	Christian Retscher	dim ordering support
; 2011-03-29, v0.7	Christian Retscher	dialog; high level error checks
; 2011-04-26, v0.8	Christian Retscher	geoms_tc support added
; 2011-06-07, v1.0	Christian Retscher	code refactored
; 2011-08-19, v1.1	Christian Retscher	accept balloon_sonde.o3 files with DATETIME fill values
; 2012-04-26, v1.2  Ian Boyd  align version number with geoms_tools, update comment to include
;                   QA on netCDF files
; 2013-10-23, v1.3  Ian Boyd  align version with geoms_tools
; 2013-10-28, v1.31 Ian Boyd  align version with geoms_tools
; 2014-01-28, v1.34 Ian Boyd  align geoms_tools version due to change in geoms_tctools
; 2014-03-11, v1.35 Ian Boyd  align version with geoms_tools
; 2014-03-25, v1.36 Ian Boyd  update due to modification to idlcr8ascii
; 2014-03-29, v1.37 Ian Boyd  update due to modification to idlcr8hdf
; 2014-05-22, v1.38 Ian Boyd  update due to modification to idlcr8hdf
; 2014-08-06, v1.39 Ian Boyd  update due to modification to idlcr8hdf and geoms_tools
; 2014-09-09, v1.40 Ian Boyd  update due to modification to idlcr8hdf and geoms_tools
; 2014-11-10, v1.41 Ian Boyd  update due to modification to idlcr8hdf and idlcr8ascii
; 2015-01-27, v1.42 Ian Boyd  update due to modification to idlcr8hdf and idlcr8ascii
; 2015-02-17, v1.43 Ian Boyd  update due to modification to idlcr8hdf and idlcr8ascii
; 2015-03-02, v1.44 Ian Boyd  update due to bug fix in idlcr8hdf
; 2015-04-09, v1.45 Ian Boyd  update due to bug fix in idlcr8hdf
; 2015-08-11, v1.46 Ian Boyd  update due to bug fixes and improvements in idlcr8hdf
; 2015-09-26, v1.47 Ian Boyd  update due to bug fixes and improvements in idlcr8hdf
; 2015-10-21, v1.48 Ian Boyd  update due to bug fixes and improvements in idlcr8hdf
; 2015-11-04, v1.49 Ian Boyd  update due to fix in idlcr8hdf
; 2015-11-09, v1.50 Ian Boyd  update due to bug fixes and improvements in idlcr8hdf and idlcr8ascii
; 2015-11-16, v1.51 Ian Boyd  update due to fix in idlcr8hdf
; 2015-12-15, v1.52 Ian Boyd  update due to fix in idlcr8hdf
; 2016-02-13, v1.53 Ian Boyd  Add extra satellite instruments to the obsolete list for DATA_SOURCE
;                             in idlcr8hdf. Modifications to idlcr8hdf and idlc8ascii
; 2016-06-14, v1.54 Ian Boyd  update due to fix in idlcr8ascii
; 2016-07-25, v1.55 Ian Boyd  update due to fix in idlcr8ascii and idlcr8hdf
; 2016-11-16, v1.56 Ian Boyd  update due to fix in idlcr8hdf
; 2016-11-30, v1.57 Ian Boyd  update due to fix in idlcr8ascii and idlcr8hdf and account for
;                             non-GEOMS variable attributes (ptr_valid check) in geoms_tctools
; 2016-12-17, v1.58 Ian Boyd  update due to fixes in idlcr8ascii
; 2016-12-30, v1.59 Ian Boyd  Add FV keyword to geoms_tools (options 20-22 in geoms_harmon call).
;                             If called then forces the DATA_FILE_VERSION not to increment when
;                             performing harmonization; Incorporates fixes made to idlcr8hdf; QA no
;                             longer checks full ORIGINATOR attributes - removed from TAV file from
; 2017-03-31, v1.60 Ian Boyd  update due to improvements to idlcr8hdf
; 2017-11-21, v1.61 Ian Boyd  update due to fixes in idlcr8hdf
; 2018-02-18, v1.62 Ian Boyd  update due to fix in idlcr8ascii and idlcr8hdf
; 2018-03-14, v1.63 Ian Boyd  update due to fix in idlcr8hdf
; 2018-05-28, v1.64 Ian Boyd  update due to fix in idlcr8hdf
; 2018-09-01, v1.65 Ian Boyd  update due to fix in idlcr8hdf
; 2018-11-16, v1.66 Ian Boyd  update due to fix in idlcr8ascii
; 2019-05-06, v1.67 Ian Boyd  QA checks now carried out using the metadata definitions in the TAV version
;                             given in the FILE_META_VERSION global attribute. If this attribute is invalid
;                             or not present, or the TAV file can't be located, the input TAV file will
;                             be used for checks but an error code will be generated. Fix to idlcr8hdf
;                             that caused a crash if the file does not use a DATA_TEMPLATE
; 2019-05-14, v1.68 Ian Boyd  update due to fix in idlcr8ascii
; 2019-08-07, v1.69 Ian Boyd  update due to modifications to idlcr8ascii and idlcr8hdf
; 2019-08-21, v1.70 Ian Boyd  update due to fix in idlcr8ascii
; 2019-12-05, v2.00 Ian Boyd  Add support for checks on the optional DATA_SOURCE Version Name value
;                             (third field in DATA_SOURCE). Calls new geoms_vntools function (similar
;                             in concept to geoms_tctools)
; 2020-02-26, v2.01 Ian Boyd  update due to geoms_vntools updates
; 2020-03-11, v2.02 Ian Boyd  update due to fix to idlcr8hdf
; 2020-04-27, v2.03 Ian Boyd  update due to geoms_vntools update
;---------------------------------------------------------------------------------------------------
PRO geoms_qa

	args = command_line_args()
	iNrArgs = size(args, /N_ELEMENTS)

	qaver='version 2.03, 2020-04-27'

	if ( iNrArgs lt 2 ) then begin
		print
		print, 'GEOMS quality assurance (geoms_qa)'
		print, '  Release '+qaver
		print, '  Does GEOMS quality assurance on HDF4/5 and netCDF files.'
		print
		print, 'usage: idl -rt=geoms_qa.sav -args [TAVFILE] [[GEOMSTEFILE]] [ORIGFILE]'
		print
		print, '1: TAVFILE is the path of the TAV file, you want to validate against'
		print, '2: GEOMSTEFILE is the path of the GEOMS template file, you want to test
		print, '      (optional argument; template checks are only performed if GEOMS-TE is provided)'
		print, '3: ORIGFILE is the path of the original HDF file, you want to test'
		print, '------------------------------------------------------------------------------------------------'
		print

		QA_error_code = 3
		exit, status=QA_error_code
	end

	; error codes
	; 0 QA pass, 	no TC
	; 1 QA limit, 	no TC
	; 2 QA fail, 	no TC
	; 3 wrong parameters
	; 4 QA pass, 	TC pass
	; 5 QA limit, 	TC pass
	; 6 QA fail, 	TC pass
	; 7 QA pass,	TC fail
	; 8 QA limit,	TC fail
	; 9 QA fail, 	TC fail

	chFileTAV 	= STRTRIM( args( 0 ), 2 )

	; check the number of variables provided
	if ( iNrArgs eq 2 ) then begin
		chFileOrig	= STRTRIM( args( 1 ), 2 )
	end
	if ( iNrArgs eq 3 ) then begin
		chFileGEOMSTE	= STRTRIM( args( 1 ), 2 )
		chFileOrig	= STRTRIM( args( 2 ), 2 )
	end

	QA_error_code = 3 ;default QA error code
	TC_error_code = 1 ;default TC error code
	TC_error_code_2 = 1 ;default VN error code

	if ( file_test( chFileTAV ) eq 0 ) then begin
		QA_error_code = 2 ;can still do template checks if HDF and template files are present
		print, 'ERROR: TAV file not found.'
	end else begin
		QA_error_code = 0
	end

	if ( file_test( chFileOrig ) eq 0 ) then begin
		QA_error_code = 3
    print, 'ERROR: GEOMS file not found.'
	end else begin
    if QA_error_code ne 2 then QA_error_code = 0
	end

  if ( iNrArgs eq 3 ) then begin
    if ( file_test( chFileGEOMSTE ) eq 0 ) then begin
      print, 'ERROR: GEOMS-TE file not found.'
    end else begin
      if QA_error_code ne 3 then TC_error_code = 0 ;i.e. HDF file exists
    endelse
  end

  if QA_error_code ne 3 then TC_error_code_2 = 0 ;i.e. HDF file exists

	if ( QA_error_code eq 0 ) then begin
		print, chFileTAV
		print, chFileOrig

		if (STRMID(FILE_BASENAME(chFileOrig),0,16) eq "balloon_sonde.o3") then begin
			QA_error_code = geoms_tools( 0, chFileTAV, chFileOrig ) ;, /DATETIME )
		end else begin
			QA_error_code = geoms_tools( 0, chFileTAV, chFileOrig )
		end
	endif else if (TC_error_code eq 0) or (TC_error_code_2 eq 0) then begin
    ;can't do QA but can do Template and/or Version Name checks so create logfile
	  logfile=STRMID(chFileOrig,0,STRPOS(chFileOrig,'.',/REVERSE_SEARCH))+'.log'
	  OPENW, lu, logfile, /GET_LUN
	  PRINTF,lu, 'geoms_tools '+qaver
	  PRINTF,lu,'GEOMS Quality Assurance Tool'
	  PRINTF,lu,'Maintained by the Aura Validation Data Center, NASA/GSFC'
	  PRINTF,lu,'http://avdc.gsfc.nasa.gov/GEOMS'
	  PRINTF,lu,''
	  PRINTF,lu,'Log started on '+SYSTIME(0)
	  PRINTF,lu,'Result of performing Quality Assurance on '+chFileOrig
	  PRINTF,lu,'(0=PASS, 1=GEOMS compliant with non-standard components, 2=FAIL)'
    PRINTF,lu,''
    PRINTF,lu,'ERROR: TAV file not found'
    IF iNrArgs eq 3 then $
      printf,lu,'INFORMATION: Required Metadata Template: '+File_Basename(chFileGEOMSTE)
    PRINTF,lu,''
    PRINTF,lu,'2 (Failed QA)'
    Free_Lun, lu
  endif

  ;Determine working directory for the version names list file
  ;First try the template directory, but otherwise use the TAV file directory
	if iNrArgs eq 3 then chDirGEOMSvn = FILE_DIRNAME(chFileGEOMSTE, /Mark_Directory) $
	else if iNrArgs eq 2 then chDirGEOMSvn = FILE_DIRNAME(chFileTAV, /Mark_Directory) $
	else chDirGEOMSvn = '' ;can't find directory holding the version names list file

	if ( TC_error_code eq 0 ) then begin
		TC_error_code = geoms_tctools( chFileGEOMSTE, chFileOrig, QA_error_code )
		TC_error_code_hold = TC_error_code*3 + 4
  endif else if (iNrArgs eq 3) and (QA_error_code ne 3) then begin
    logfile=STRMID(chFileOrig,0,STRPOS(chFileOrig,'.',/REVERSE_SEARCH))+'.log'
    OPENW, lu, logfile, /GET_LUN, /Append
    printf, lu, ''
    printf, lu, 'ERROR: GEOMS Metadata Template file not found'
    Free_Lun, lu
    QA_error_code = 3
    TC_error_code = 0 & TC_error_code_hold = 0
  endif else begin
		TC_error_code = 0 & TC_error_code_hold = 0
	endelse

	if TC_error_code_2 eq 0 then begin
	  TC_error_code_2 = geoms_vntools( chDirGEOMSvn, chFileOrig, QA_error_code, TC_error_code )
    ;Note TC_error_code_2 will return the highest of TC_error_code or the Version Name error check value
    if (TC_error_code_2 eq -1) or (QA_error_code eq 3) then begin
	    ;File input error as data_version_name list file can't be found and there is a version name in the GEOMS file
	    TC_error_code = 0 & QA_error_code = 3
	  endif else TC_error_code = TC_error_code_2*3 + 4
 	endif else TC_error_code = TC_error_code_hold

	; total error
	QATC_error_code = QA_error_code + TC_error_code
	exit, status=QATC_error_code

END