geoms_qa.pro 10.5 KB
Newer Older
Ian Boyd's avatar
Ian Boyd committed
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
;---------------------------------------------------------------------------------------------------
;
; 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
Ian Boyd's avatar
Ian Boyd committed
55
56
57
; 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
Ian Boyd's avatar
Ian Boyd committed
58
;                             be used for checks but an error code will be generated. Fix to idlcr8hdf
Ian Boyd's avatar
Ian Boyd committed
59
;                             that caused a crash if the file does not use a DATA_TEMPLATE
Ian Boyd's avatar
Ian Boyd committed
60
; 2019-05-14, v1.68 Ian Boyd  update due to fix in idlcr8ascii
Ian Boyd's avatar
Ian Boyd committed
61
; 2019-08-07, v1.69 Ian Boyd  update due to modifications to idlcr8ascii and idlcr8hdf
Ian Boyd's avatar
Ian Boyd committed
62
; 2019-08-21, v1.70 Ian Boyd  update due to fix in idlcr8ascii
Ian Boyd's avatar
Ian Boyd committed
63
64
65
66
; 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
Ian Boyd's avatar
Ian Boyd committed
67
; 2020-03-11, v2.02 Ian Boyd  update due to fix to idlcr8hdf
Ian Boyd's avatar
Ian Boyd committed
68
; 2020-04-27, v2.03 Ian Boyd  update due to geoms_vntools update
Ian Boyd's avatar
Ian Boyd committed
69
; 2020-07-09, v2.04 Ian Boyd  update due to fix to idlcr8hdf
Ian Boyd's avatar
Ian Boyd committed
70
71
72
; 2020-09-30, v2.05 Ian Boyd  update due to fix to idlcr8ascii; geoms_tools now returns a QA_error_code
;                             value of -2 to geoms_qa if idlcr8ascii can't read the input file, to stop
;                             template and version name checks
Ian Boyd's avatar
Ian Boyd committed
73
; 2020-10-20, v2.06 Ian Boyd  update due to fixes to idlcr8hdf
Ian Boyd's avatar
Ian Boyd committed
74
75
76
77
78
79
80
;---------------------------------------------------------------------------------------------------

PRO geoms_qa

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

Ian Boyd's avatar
Ian Boyd committed
81
	qaver='version 2.06, 2020-10-20'
Ian Boyd's avatar
Ian Boyd committed
82

Ian Boyd's avatar
Ian Boyd committed
83
84
85
	if ( iNrArgs lt 2 ) then begin
		print
		print, 'GEOMS quality assurance (geoms_qa)'
Ian Boyd's avatar
Ian Boyd committed
86
		print, '  Release '+qaver
Ian Boyd's avatar
Ian Boyd committed
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
		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

Ian Boyd's avatar
Ian Boyd committed
125
126
127
	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
Ian Boyd's avatar
Ian Boyd committed
128
129

	if ( file_test( chFileTAV ) eq 0 ) then begin
Ian Boyd's avatar
Ian Boyd committed
130
		QA_error_code = 2 ;can still do template checks if HDF and template files are present
Ian Boyd's avatar
Ian Boyd committed
131
132
133
134
135
136
137
		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
Ian Boyd's avatar
Ian Boyd committed
138
    print, 'ERROR: GEOMS file not found.'
Ian Boyd's avatar
Ian Boyd committed
139
	end else begin
Ian Boyd's avatar
Ian Boyd committed
140
    if QA_error_code ne 2 then QA_error_code = 0
Ian Boyd's avatar
Ian Boyd committed
141
142
	end

Ian Boyd's avatar
Ian Boyd committed
143
144
145
146
147
148
149
150
151
  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
Ian Boyd's avatar
Ian Boyd committed
152
153
154
155
156
157
158
159
160
161

	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
Ian Boyd's avatar
Ian Boyd committed
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
	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

Ian Boyd's avatar
Ian Boyd committed
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
  if QA_error_code ne -2 then begin
    ;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
  endif

  ; total error
  QATC_error_code = abs(QA_error_code) + TC_error_code

  exit, status=QATC_error_code
Ian Boyd's avatar
Ian Boyd committed
219
220

END