exportToHdf.py
138 lines
| 4.8 KiB
| text/x-python
|
PythonLexer
r0 | #!PYTHONEXE | |||
#$Id: exportToHdf.py 7355 2021-03-31 20:25:01Z brideout $ | ||||
usage = """ | ||||
exportToHdf.py is a script used to convert a Cedar file to hdf5 format. | ||||
Required arguments: | ||||
--cedarFilename - full path of existing Madrigal file. | ||||
--hdf5Filename - full path of hdf5 file to write. | ||||
Optional arguments - set these to add layouts, parameters or filters. Default is to use cachedFiles.ini: | ||||
--independentSpatialParms - a comma separated list of parameters as mnemonics | ||||
that represent independent spatial variables. Causes array layout to be added to | ||||
output Hdf5 file. If not given, uses $MADROOT/cachedFiles.ini | ||||
--arraySplittingParms - a comma separated list of parameters as mnemonics used to split | ||||
arrays into subarrays. For example, beamcode would split data with separate beamcodes | ||||
into separate arrays. The number of separate arrays will be up to the product of the number of | ||||
unique values found for each parameter, with the restriction that combinations with no records will | ||||
not create a separate array. . If not given, uses $MADROOT/cachedFiles.ini | ||||
--extraParameters - These parameters will be added to the output file if | ||||
they are not already in the input file. Comma-delimited. Default is no | ||||
extra parameter | ||||
--filter - Filter argument as in isprint command as string (eg, 'ti.500,2000') Only one allowed. | ||||
Default is no filtering | ||||
--status - use to set status of file. Default is 1 (default). Use -1 to get from fileTab (error raised | ||||
if not available) | ||||
Example: | ||||
exportToHdf --cedarFilename=/opt/madrigal/experiments/1998/mlh/20jan98/mil20100112.001 | ||||
--hdf5Filename=/home/user/data/mil20100112.hdf5 | ||||
--independentSpatialParms=range | ||||
--arraySplittingParms=kinst,pl,mdtyp | ||||
--extraParameters=ti,te | ||||
--filter=ti,500,1000 | ||||
""" | ||||
import sys | ||||
import os, os.path | ||||
import getopt | ||||
import traceback | ||||
import madrigal.data | ||||
# parse command line | ||||
arglist = 'h' | ||||
longarglist = ['cedarFilename=', | ||||
'hdf5Filename=', | ||||
'independentSpatialParms=', | ||||
'arraySplittingParms=', | ||||
'extraParameters=', | ||||
'filter=', | ||||
'status=' | ||||
'help'] | ||||
optlist, args = getopt.getopt(sys.argv[1:], arglist, longarglist) | ||||
# set default values | ||||
cedarFilename = None | ||||
hdf5Filename = None | ||||
independentSpatialParms = None | ||||
arraySplittingParms = None | ||||
extraParameters = [] | ||||
filter = None | ||||
status = '1' | ||||
for opt in optlist: | ||||
if opt[0] == '--cedarFilename': | ||||
cedarFilename = opt[1] | ||||
elif opt[0] == '--hdf5Filename': | ||||
hdf5Filename = opt[1] | ||||
elif opt[0] == '--independentSpatialParms': | ||||
independentSpatialParms = opt[1].split(',') | ||||
elif opt[0] == '--arraySplittingParms': | ||||
arraySplittingParms = opt[1].split(',') | ||||
elif opt[0] == '--extraParameters': | ||||
extraParameters = opt[1].split(',') | ||||
elif opt[0] == '--filter': | ||||
filter = opt[1] | ||||
elif opt[0] == '--status': | ||||
status = opt[1] | ||||
if status == '-1': | ||||
status = None | ||||
elif opt[0] in ('-h', '--help'): | ||||
print(usage) | ||||
sys.exit(0) | ||||
else: | ||||
raise ValueError('Illegal option %s\n%s' % (opt[0], usage)) | ||||
# check that all required arguments passed in | ||||
if cedarFilename == None: | ||||
print('--cedarFilename argument required - must be full path of existing madrigal file') | ||||
print(usage) | ||||
sys.exit(-1) | ||||
if hdf5Filename == None: | ||||
print('--hdf5Filename argument required - must be full path of hdf5 file to write') | ||||
sys.exit(-1) | ||||
fileObj = madrigal.data.MadrigalFile(cedarFilename) | ||||
# read the cachedFiles.ini to see if information needed | ||||
kinst = fileObj.getKinstList()[0] | ||||
kindat = fileObj.getKindatList()[0] | ||||
x,y,x = fileObj._parseCachedIni(kinst, kindat) | ||||
iniExtraParms, altFormatDict, skipArray = fileObj._parseCachedIni(kinst, kindat) | ||||
iniSpatialParms = [] | ||||
iniSplittingParms=[] | ||||
if 'array' in altFormatDict: | ||||
value = altFormatDict['array'] | ||||
if type(value) in (bytes, str): | ||||
iniSpatialParms = [value] | ||||
elif len(value) == 2 and type(value[0]) in (tuple, list): | ||||
iniSpatialParms = value[0] | ||||
iniSplittingParms = value[1] | ||||
else: | ||||
iniSpatialParms = value | ||||
if independentSpatialParms is None: | ||||
independentSpatialParms = iniSpatialParms | ||||
if arraySplittingParms is None: | ||||
arraySplittingParms = iniSplittingParms | ||||
fileObj.exportToHdf(output = hdf5Filename, | ||||
independentSpatialParms = independentSpatialParms, | ||||
arraySplittingParms = arraySplittingParms, | ||||
extraParameters = extraParameters, | ||||
filter = filter, skipArray = skipArray, status=status) | ||||
print() | ||||
print('The file %s has been converted to hdf5 format: %s' % (cedarFilename, hdf5Filename)) | ||||