#!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))