##// END OF EJS Templates
Add BASE_URL in settings to work with proxys
Add BASE_URL in settings to work with proxys

File last commit:

r0:b84e1135c2c4
r18:5a8055e18e7b
Show More
exportToHdf.py
138 lines | 4.8 KiB | text/x-python | PythonLexer
#!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))