def load(h): h.add(_.StringCodetable('typeOfFirstFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('unitsOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add(_.Codetable_title('nameOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add(_.Signed('scaleFactorOfFirstFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfFirstFixedSurface', 4)) h.add(_.Codetable('typeOfSecondFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('unitsOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add(_.Codetable_title('nameOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add(_.Signed('scaleFactorOfSecondFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfSecondFixedSurface', 4)) h.add(_.Transient('pressureUnits', "hPa")) def typeOfLevel_inline_concept(h): def wrapped(h): typeOfFirstFixedSurface = h.get_l('typeOfFirstFixedSurface') typeOfSecondFixedSurface = h.get_l('typeOfSecondFixedSurface') if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 255: return 'surface' if typeOfFirstFixedSurface == 2 and typeOfSecondFixedSurface == 255: return 'cloudBase' if typeOfFirstFixedSurface == 3 and typeOfSecondFixedSurface == 255: return 'cloudTop' if typeOfFirstFixedSurface == 4 and typeOfSecondFixedSurface == 255: return 'isothermZero' if typeOfFirstFixedSurface == 5 and typeOfSecondFixedSurface == 255: return 'adiabaticCondensation' if typeOfFirstFixedSurface == 6 and typeOfSecondFixedSurface == 255: return 'maxWind' if typeOfFirstFixedSurface == 7 and typeOfSecondFixedSurface == 255: return 'tropopause' if typeOfFirstFixedSurface == 8 and typeOfSecondFixedSurface == 255: return 'nominalTop' if typeOfFirstFixedSurface == 9 and typeOfSecondFixedSurface == 255: return 'seaBottom' if typeOfFirstFixedSurface == 10 and typeOfSecondFixedSurface == 255: return 'atmosphere' if typeOfFirstFixedSurface == 20 and typeOfSecondFixedSurface == 255: return 'isothermal' pressureUnits = h.get_s('pressureUnits') if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 255 and pressureUnits == "Pa": return 'isobaricInPa' if typeOfFirstFixedSurface == 100 and pressureUnits == "hPa" and typeOfSecondFixedSurface == 255: return 'isobaricInhPa' if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 100: return 'isobaricLayer' if typeOfFirstFixedSurface == 101 and typeOfSecondFixedSurface == 255: return 'meanSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 255: return 'heightAboveSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 102: return 'heightAboveSeaLayer' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 255: return 'heightAboveGround' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 103: return 'heightAboveGroundLayer' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 255: return 'sigma' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 104: return 'sigmaLayer' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 255: return 'hybrid' if typeOfFirstFixedSurface == 118 and typeOfSecondFixedSurface == 255: return 'hybridHeight' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 105: return 'hybridLayer' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 255: return 'depthBelowLand' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 106: return 'depthBelowLandLayer' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 255: return 'theta' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 107: return 'thetaLayer' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 255: return 'pressureFromGround' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 108: return 'pressureFromGroundLayer' if typeOfFirstFixedSurface == 109 and typeOfSecondFixedSurface == 255: return 'potentialVorticity' if typeOfFirstFixedSurface == 111 and typeOfSecondFixedSurface == 255: return 'eta' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 255: return 'soil' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 151: return 'soilLayer' genVertHeightCoords = h.get_l('genVertHeightCoords') NV = h.get_l('NV') if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and NV == 6: return 'generalVertical' if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and typeOfSecondFixedSurface == 150 and NV == 6: return 'generalVerticalLayer' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 255: return 'depthBelowSea' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 8: return 'entireAtmosphere' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 9: return 'entireOcean' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 255: return 'snow' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 114: return 'snowLayer' scaleFactorOfFirstFixedSurface = h.get_l('scaleFactorOfFirstFixedSurface') scaledValueOfFirstFixedSurface = h.get_l('scaledValueOfFirstFixedSurface') if typeOfFirstFixedSurface == 160 and scaleFactorOfFirstFixedSurface == 0 and scaledValueOfFirstFixedSurface == 0 and typeOfSecondFixedSurface == 255: return 'oceanSurface' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 160: return 'oceanLayer' if typeOfFirstFixedSurface == 169 and typeOfSecondFixedSurface == 255: return 'mixedLayerDepth' return wrapped h.add(_.Concept('typeOfLevel', 'unknown', concepts=typeOfLevel_inline_concept(h))) h.alias('vertical.typeOfLevel', 'typeOfLevel') h.alias('levelType', 'typeOfFirstFixedSurface') if (h.get_l('typeOfSecondFixedSurface') == 255): h.add(_.G2level('level', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add(_.Transient('bottomLevel', _.Get('level'))) h.add(_.Transient('topLevel', _.Get('level'))) else: h.add(_.G2level('topLevel', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add(_.G2level('bottomLevel', _.Get('typeOfSecondFixedSurface'), _.Get('scaleFactorOfSecondFixedSurface'), _.Get('scaledValueOfSecondFixedSurface'), _.Get('pressureUnits'))) h.alias('level', 'topLevel') h.alias('ls.level', 'level') h.alias('vertical.level', 'level') h.alias('vertical.bottomLevel', 'bottomLevel') h.alias('vertical.topLevel', 'topLevel') h.alias('extraDim', 'zero') if h._defined('extraDimensionPresent'): if h.get_l('extraDimensionPresent'): h.alias('extraDim', 'one') if h.get_l('extraDim'): h.alias('mars.levelist', 'dimension') h.alias('mars.levtype', 'dimensionType') else: h.add(_.Transient('tempPressureUnits', _.Get('pressureUnits'))) if not ((h.get_s('typeOfLevel') == "surface")): if (h.get_s('tempPressureUnits') == "Pa"): h.add(_.Scale('marsLevel', _.Get('level'), _.Get('one'), _.Get('hundred'))) h.alias('mars.levelist', 'marsLevel') else: h.alias('mars.levelist', 'level') h.alias('mars.levtype', 'typeOfFirstFixedSurface') if (h.get_s('levtype') == "sfc"): h.unalias('mars.levelist') if ((h.get_l('typeOfFirstFixedSurface') == 151) and (h.get_l('typeOfSecondFixedSurface') == 151)): h.alias('mars.levelist', 'bottomLevel') h.alias('ls.typeOfLevel', 'typeOfLevel')
def load(h): h.add( _.Codetable('parameterCategory', 1, "4.1.[discipline:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('parameterNumber', 1, "4.2.[discipline:l].[parameterCategory:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('parameterUnits', _.Get('parameterNumber'))) h.add(_.Codetable_title('parameterName', _.Get('parameterNumber'))) h.add( _.Codetable('constituentType', 2, "4.230.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('sourceSinkChemicalPhysicalProcess', 1, "4.238.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('typeOfGeneratingProcess', 1, "4.3.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('backgroundProcess', 1)) h.alias('backgroundGeneratingProcessIdentifier', 'backgroundProcess') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('hoursAfterDataCutoff', 2)) h.alias('hoursAfterReferenceTimeOfDataCutoff', 'hoursAfterDataCutoff') h.add(_.Unsigned('minutesAfterDataCutoff', 1)) h.alias('minutesAfterReferenceTimeOfDataCutoff', 'minutesAfterDataCutoff') h.add( _.Codetable('indicatorOfUnitOfTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('defaultStepUnits', 'one') _.Template('grib2/localConcepts/[centre:s]/default_step_units.def', True).load(h) h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table")) h.add(_.Signed('forecastTime', 4)) h.add( _.StringCodetable('typeOfFirstFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable_units('unitsOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add( _.Codetable_title('nameOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add(_.Signed('scaleFactorOfFirstFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfFirstFixedSurface', 4)) h.add( _.Codetable('typeOfSecondFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable_units('unitsOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add( _.Codetable_title('nameOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add(_.Signed('scaleFactorOfSecondFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfSecondFixedSurface', 4)) h.add(_.Transient('pressureUnits', "hPa")) def typeOfLevel_inline_concept(h): def wrapped(h): typeOfFirstFixedSurface = h.get_l('typeOfFirstFixedSurface') typeOfSecondFixedSurface = h.get_l('typeOfSecondFixedSurface') if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 255: return 'surface' if typeOfFirstFixedSurface == 2 and typeOfSecondFixedSurface == 255: return 'cloudBase' if typeOfFirstFixedSurface == 3 and typeOfSecondFixedSurface == 255: return 'cloudTop' if typeOfFirstFixedSurface == 4 and typeOfSecondFixedSurface == 255: return 'isothermZero' if typeOfFirstFixedSurface == 5 and typeOfSecondFixedSurface == 255: return 'adiabaticCondensation' if typeOfFirstFixedSurface == 6 and typeOfSecondFixedSurface == 255: return 'maxWind' if typeOfFirstFixedSurface == 7 and typeOfSecondFixedSurface == 255: return 'tropopause' if typeOfFirstFixedSurface == 8 and typeOfSecondFixedSurface == 255: return 'nominalTop' if typeOfFirstFixedSurface == 9 and typeOfSecondFixedSurface == 255: return 'seaBottom' if typeOfFirstFixedSurface == 10 and typeOfSecondFixedSurface == 255: return 'atmosphere' if typeOfFirstFixedSurface == 20 and typeOfSecondFixedSurface == 255: return 'isothermal' pressureUnits = h.get_s('pressureUnits') if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 255 and pressureUnits == "Pa": return 'isobaricInPa' if typeOfFirstFixedSurface == 100 and pressureUnits == "hPa" and typeOfSecondFixedSurface == 255: return 'isobaricInhPa' if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 100: return 'isobaricLayer' if typeOfFirstFixedSurface == 101 and typeOfSecondFixedSurface == 255: return 'meanSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 255: return 'heightAboveSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 102: return 'heightAboveSeaLayer' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 255: return 'heightAboveGround' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 103: return 'heightAboveGroundLayer' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 255: return 'sigma' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 104: return 'sigmaLayer' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 255: return 'hybrid' if typeOfFirstFixedSurface == 118 and typeOfSecondFixedSurface == 255: return 'hybridHeight' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 105: return 'hybridLayer' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 255: return 'depthBelowLand' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 106: return 'depthBelowLandLayer' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 255: return 'theta' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 107: return 'thetaLayer' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 255: return 'pressureFromGround' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 108: return 'pressureFromGroundLayer' if typeOfFirstFixedSurface == 109 and typeOfSecondFixedSurface == 255: return 'potentialVorticity' if typeOfFirstFixedSurface == 111 and typeOfSecondFixedSurface == 255: return 'eta' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 255: return 'soil' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 151: return 'soilLayer' genVertHeightCoords = h.get_l('genVertHeightCoords') NV = h.get_l('NV') if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and NV == 6: return 'generalVertical' if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and typeOfSecondFixedSurface == 150 and NV == 6: return 'generalVerticalLayer' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 255: return 'depthBelowSea' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 8: return 'entireAtmosphere' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 9: return 'entireOcean' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 255: return 'snow' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 114: return 'snowLayer' scaleFactorOfFirstFixedSurface = h.get_l( 'scaleFactorOfFirstFixedSurface') scaledValueOfFirstFixedSurface = h.get_l( 'scaledValueOfFirstFixedSurface') if typeOfFirstFixedSurface == 160 and scaleFactorOfFirstFixedSurface == 0 and scaledValueOfFirstFixedSurface == 0 and typeOfSecondFixedSurface == 255: return 'oceanSurface' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 160: return 'oceanLayer' if typeOfFirstFixedSurface == 169 and typeOfSecondFixedSurface == 255: return 'mixedLayerDepth' return wrapped h.add( _.Concept('typeOfLevel', 'unknown', concepts=typeOfLevel_inline_concept(h))) h.alias('vertical.typeOfLevel', 'typeOfLevel') h.alias('levelType', 'typeOfFirstFixedSurface') if (h.get_l('typeOfSecondFixedSurface') == 255): h.add( _.G2level('level', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add(_.Transient('bottomLevel', _.Get('level'))) h.add(_.Transient('topLevel', _.Get('level'))) else: h.add( _.G2level('topLevel', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add( _.G2level('bottomLevel', _.Get('typeOfSecondFixedSurface'), _.Get('scaleFactorOfSecondFixedSurface'), _.Get('scaledValueOfSecondFixedSurface'), _.Get('pressureUnits'))) h.alias('level', 'topLevel') h.alias('ls.level', 'level') h.alias('vertical.level', 'level') h.alias('vertical.bottomLevel', 'bottomLevel') h.alias('vertical.topLevel', 'topLevel') h.alias('extraDim', 'zero') if h._defined('extraDimensionPresent'): if h.get_l('extraDimensionPresent'): h.alias('extraDim', 'one') if h.get_l('extraDim'): h.alias('mars.levelist', 'dimension') h.alias('mars.levtype', 'dimensionType') else: h.add(_.Transient('tempPressureUnits', _.Get('pressureUnits'))) if not ((h.get_s('typeOfLevel') == "surface")): if (h.get_s('tempPressureUnits') == "Pa"): h.add( _.Scale('marsLevel', _.Get('level'), _.Get('one'), _.Get('hundred'))) h.alias('mars.levelist', 'marsLevel') else: h.alias('mars.levelist', 'level') h.alias('mars.levtype', 'typeOfFirstFixedSurface') if (h.get_s('levtype') == "sfc"): h.unalias('mars.levelist') if ((h.get_l('typeOfFirstFixedSurface') == 151) and (h.get_l('typeOfSecondFixedSurface') == 151)): h.alias('mars.levelist', 'bottomLevel') h.alias('ls.typeOfLevel', 'typeOfLevel') h.add(_.Unsigned('yearOfEndOfOverallTimeInterval', 2)) h.add(_.Unsigned('monthOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('dayOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('hourOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('minuteOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('secondOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('numberOfTimeRange', 1)) h.alias('n', 'numberOfTimeRange') h.add(_.Unsigned('numberOfMissingInStatisticalProcess', 4)) h.alias('totalNumberOfDataValuesMissingInStatisticalProcess', 'numberOfMissingInStatisticalProcess') with h.list('statisticalProcessesList'): for i in range(0, h.get_l('numberOfTimeRange')): h.add( _.Codetable('typeOfStatisticalProcessing', 1, "4.10.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('typeOfTimeIncrement', 1, "4.11.table", _.Get('masterDir'), _.Get('localDir'))) h.alias( 'typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing', 'typeOfTimeIncrement') h.add( _.Codetable('indicatorOfUnitForTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('lengthOfTimeRange', 4)) h.add( _.Codetable('indicatorOfUnitForTimeIncrement', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('timeIncrement', 4)) h.alias('timeIncrementBetweenSuccessiveFields', 'timeIncrement') if ((h.get_l('numberOfTimeRange') == 1) or (h.get_l('numberOfTimeRange') == 2)): def stepTypeInternal_inline_concept(h): def wrapped(h): typeOfStatisticalProcessing = h.get_l( 'typeOfStatisticalProcessing') if typeOfStatisticalProcessing == 255: return 'instant' typeOfTimeIncrement = h.get_l('typeOfTimeIncrement') if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 2: return 'avg' if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 3: return 'avg' if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 1: return 'avgd' if typeOfStatisticalProcessing == 1 and typeOfTimeIncrement == 2: return 'accum' if typeOfStatisticalProcessing == 2: return 'max' if typeOfStatisticalProcessing == 3: return 'min' if typeOfStatisticalProcessing == 4: return 'diff' if typeOfStatisticalProcessing == 5: return 'rms' if typeOfStatisticalProcessing == 6: return 'sd' if typeOfStatisticalProcessing == 7: return 'cov' if typeOfStatisticalProcessing == 8: return 'sdiff' if typeOfStatisticalProcessing == 9: return 'ratio' if typeOfStatisticalProcessing == 10: return 'stdanom' if typeOfStatisticalProcessing == 11: return 'sum' return wrapped h.add( _.Concept('stepTypeInternal', None, concepts=stepTypeInternal_inline_concept(h))) h.add( _.Step_in_units('startStep', _.Get('forecastTime'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'), _.Get('indicatorOfUnitForTimeRange'), _.Get('lengthOfTimeRange'))) h.add( _.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits'), _.Get('year'), _.Get('month'), _.Get('day'), _.Get('hour'), _.Get('minute'), _.Get('second'), _.Get('yearOfEndOfOverallTimeInterval'), _.Get('monthOfEndOfOverallTimeInterval'), _.Get('dayOfEndOfOverallTimeInterval'), _.Get('hourOfEndOfOverallTimeInterval'), _.Get('minuteOfEndOfOverallTimeInterval'), _.Get('secondOfEndOfOverallTimeInterval'), _.Get('indicatorOfUnitForTimeRange'), _.Get('lengthOfTimeRange'), _.Get('typeOfTimeIncrement'), _.Get('numberOfTimeRange'))) h.add(_.G2step_range('stepRange', _.Get('startStep'), _.Get('endStep'))) else: h.add(_.Constant('stepType', "multiple steps")) h.add(_.Constant('stepTypeInternal', "multiple steps")) h.add(_.Constant('endStep', "unavailable")) h.add(_.Constant('startStep', "unavailable")) h.add(_.Constant('stepRange', "unavailable")) h.alias('ls.stepRange', 'stepRange') h.alias('mars.step', 'endStep') h.alias('time.stepType', 'stepType') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.add( _.Validity_date('validityDate', _.Get('date'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'), _.Get('yearOfEndOfOverallTimeInterval'), _.Get('monthOfEndOfOverallTimeInterval'), _.Get('dayOfEndOfOverallTimeInterval'))) h.alias('time.validityDate', 'validityDate') h.add( _.Validity_time('validityTime', _.Get('date'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'), _.Get('hourOfEndOfOverallTimeInterval'), _.Get('minuteOfEndOfOverallTimeInterval'))) h.alias('time.validityTime', 'validityTime')
def load(h): h.add(_.Constant('dataRepresentationType', 90)) h.add(_.Codetable('parameterCategory', 1, "4.1.[discipline:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable('parameterNumber', 1, "4.2.[discipline:l].[parameterCategory:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('parameterUnits', _.Get('parameterNumber'))) h.add(_.Codetable_title('parameterName', _.Get('parameterNumber'))) h.add(_.Codetable('typeOfGeneratingProcess', 1, "4.3.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('backgroundProcess', 1)) h.alias('backgroundGeneratingProcessIdentifier', 'backgroundProcess') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('hoursAfterDataCutoff', 2)) h.alias('hoursAfterReferenceTimeOfDataCutoff', 'hoursAfterDataCutoff') h.add(_.Unsigned('minutesAfterDataCutoff', 1)) h.alias('minutesAfterReferenceTimeOfDataCutoff', 'minutesAfterDataCutoff') h.add(_.Codetable('indicatorOfUnitOfTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('defaultStepUnits', 'one') _.Template('grib2/localConcepts/[centre:s]/default_step_units.def', True).load(h) h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table")) h.add(_.Signed('forecastTime', 4)) h.add(_.Step_in_units('startStep', _.Get('forecastTime'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'))) h.add(_.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits'))) h.alias('step', 'startStep') h.alias('marsStep', 'startStep') h.alias('mars.step', 'startStep') h.alias('marsStartStep', 'startStep') h.alias('marsEndStep', 'endStep') h.add(_.G2step_range('stepRange', _.Get('startStep'))) h.alias('ls.stepRange', 'stepRange') def stepTypeInternal_inline_concept(h): def wrapped(h): dummy = h.get_l('dummy') if dummy == 1: return 'instant' return wrapped h.add(_.Concept('stepTypeInternal', None, concepts=stepTypeInternal_inline_concept(h))) h.alias('time.stepType', 'stepType') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.add(_.Validity_date('validityDate', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityDate', 'validityDate') h.add(_.Validity_time('validityTime', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityTime', 'validityTime') h.add(_.Constant('typeOfLevel', "surface")) h.add(_.Constant('levelType', "surface")) h.add(_.Constant('level', 0)) h.add(_.Unsigned('NB', 1)) h.alias('numberOfContributingSpectralBands', 'NB') with h.list('listOfContributingSpectralBands'): for i in range(0, h.get_l('numberOfContributingSpectralBands')): h.add(_.Unsigned('satelliteSeries', 2)) h.add(_.Unsigned('satelliteNumber', 2)) h.add(_.Unsigned('instrumentType', 2)) h.add(_.Unsigned('scaleFactorOfCentralWaveNumber', 1)) h.add(_.Unsigned('scaledValueOfCentralWaveNumber', 4))
def load(h): h.add( _.Codetable('shapeOfTheEarth', 1, "3.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('scaleFactorOfRadiusOfSphericalEarth', 1)) h.add(_.Unsigned('scaledValueOfRadiusOfSphericalEarth', 4)) h.add(_.Unsigned('scaleFactorOfEarthMajorAxis', 1)) h.alias('scaleFactorOfMajorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMajorAxis') h.add(_.Unsigned('scaledValueOfEarthMajorAxis', 4)) h.alias('scaledValueOfMajorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMajorAxis') h.add(_.Unsigned('scaleFactorOfEarthMinorAxis', 1)) h.alias('scaleFactorOfMinorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMinorAxis') h.add(_.Unsigned('scaledValueOfEarthMinorAxis', 4)) h.alias('scaledValueOfMinorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMinorAxis') h.alias('earthIsOblate', 'one') if (h.get_l('shapeOfTheEarth') == 0): h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 1): h.add( _.From_scale_factor_scaled_value( 'radius', _.Get('scaleFactorOfRadiusOfSphericalEarth'), _.Get('scaledValueOfRadiusOfSphericalEarth'))) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 6): h.add(_.Transient('radius', 6371229)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 8): h.add(_.Transient('radius', 6371200)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 2): h.add(_.Transient('earthMajorAxis', 6.37816e+06)) h.add(_.Transient('earthMinorAxis', 6.35678e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 3): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.add( _.Divdouble('earthMajorAxisInMetres', _.Get('earthMajorAxis'), 0.001)) h.add( _.Divdouble('earthMinorAxisInMetres', _.Get('earthMinorAxis'), 0.001)) if (h.get_l('shapeOfTheEarth') == 7): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if ((h.get_l('shapeOfTheEarth') == 4) or (h.get_l('shapeOfTheEarth') == 5)): h.add(_.Transient('earthMajorAxis', 6.37814e+06)) h.add(_.Transient('earthMinorAxis', 6.35675e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 9): h.add(_.Transient('earthMajorAxis', 6.37756e+06)) h.add(_.Transient('earthMinorAxis', 6.35626e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') h.add(_.Unsigned('numberOfHorizontalPoints', 5)) h.add(_.Unsigned('basicAngleOfTheInitialProductionDomain', 4)) h.add(_.Unsigned('subdivisionsOfBasicAngle', 4)) h.add(_.Signed('latitudeOfFirstGridPoint', 4)) h.alias('La1', 'latitudeOfFirstGridPoint') h.add(_.Unsigned('longitudeOfFirstGridPoint', 4)) h.alias('Lo1', 'longitudeOfFirstGridPoint') h.add( _.Codeflag('scanningMode', 1, "grib2/tables/[tablesVersion]/3.4.table")) h.add(_.Bit('iScansNegatively', _.Get('scanningMode'), 7)) h.add(_.Bit('jScansPositively', _.Get('scanningMode'), 6)) h.add(_.Bit('jPointsAreConsecutive', _.Get('scanningMode'), 5)) h.add(_.Bit('alternativeRowScanning', _.Get('scanningMode'), 4)) if h.get_l('jPointsAreConsecutive'): h.alias('numberOfRows', 'Ni') h.alias('numberOfColumns', 'Nj') else: h.alias('numberOfRows', 'Nj') h.alias('numberOfColumns', 'Ni') h.alias('geography.iScansNegatively', 'iScansNegatively') h.alias('geography.jScansPositively', 'jScansPositively') h.alias('geography.jPointsAreConsecutive', 'jPointsAreConsecutive') h.add(_.Transient('iScansPositively', _.Not(_.Get('iScansNegatively')))) h.add(_.Bit('scanningMode5', _.Get('scanningMode'), 3)) h.add(_.Bit('scanningMode6', _.Get('scanningMode'), 2)) h.add(_.Bit('scanningMode7', _.Get('scanningMode'), 1)) h.add(_.Bit('scanningMode8', _.Get('scanningMode'), 0)) h.add( _.Change_scanning_direction('swapScanningX', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('xFirst'), _.Get('xLast'), _.Get('x'))) h.alias('swapScanningLon', 'swapScanningX') h.add( _.Change_scanning_direction('swapScanningY', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('yFirst'), _.Get('yLast'), _.Get('y'))) h.alias('swapScanningLat', 'swapScanningY') h.add(_.Signed('latitudeOfLastGridPoint', 4)) h.alias('La2', 'latitudeOfLastGridPoint') h.add(_.Unsigned('longitudeOfLastGridPoint', 4)) h.alias('Lo2', 'longitudeOfLastGridPoint') h.add( _.Codetable('typeOfHorizontalLine', 1, "3.20.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('numberOfTimeSteps', 4)) h.alias('NT', 'numberOfTimeSteps') h.add( _.Codetable('unitOfOffsetFromReferenceTime', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('offsetFromReferenceOfFirstTime', 4)) h.add( _.Codetable('typeOfTimeIncrement', 1, "4.11.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('unitOfTimeIncrement', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('timeIncrement', 4)) h.add(_.Unsigned('year', 2)) h.add(_.Unsigned('month', 1)) h.add(_.Unsigned('day', 1)) h.add(_.Unsigned('hour', 1)) h.add(_.Unsigned('minute', 1)) h.add(_.Unsigned('second', 1))
def load(h): h.add( _.Codetable('parameterCategory', 1, "4.1.[discipline:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('parameterNumber', 1, "4.2.[discipline:l].[parameterCategory:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('parameterUnits', _.Get('parameterNumber'))) h.add(_.Codetable_title('parameterName', _.Get('parameterNumber'))) h.add( _.Codetable('aerosolType', 2, "4.233.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('typeOfSizeInterval', 1, "4.91.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('typeOfIntervalForFirstAndSecondSize', 'typeOfSizeInterval') h.add(_.Signed('scaleFactorOfFirstSize', 1)) h.add(_.Signed('scaledValueOfFirstSize', 4)) h.add(_.Signed('scaleFactorOfSecondSize', 1)) h.add(_.Signed('scaledValueOfSecondSize', 4)) h.add( _.Codetable('typeOfGeneratingProcess', 1, "4.3.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('backgroundProcess', 1)) h.alias('backgroundGeneratingProcessIdentifier', 'backgroundProcess') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('hoursAfterDataCutoff', 2)) h.alias('hoursAfterReferenceTimeOfDataCutoff', 'hoursAfterDataCutoff') h.add(_.Unsigned('minutesAfterDataCutoff', 1)) h.alias('minutesAfterReferenceTimeOfDataCutoff', 'minutesAfterDataCutoff') h.add( _.Codetable('indicatorOfUnitOfTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('defaultStepUnits', 'one') _.Template('grib2/localConcepts/[centre:s]/default_step_units.def', True).load(h) h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table")) if (h._new() or ((h.get_l('section4Length') - (4 * h.get_l('NV'))) == 45)): h.add(_.Unsigned('forecastTime', 2)) else: h.add(_.Signed('forecastTime', 4)) h.add( _.Step_in_units('startStep', _.Get('forecastTime'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'))) h.add(_.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits'))) h.alias('step', 'startStep') h.alias('marsStep', 'startStep') h.alias('mars.step', 'startStep') h.alias('marsStartStep', 'startStep') h.alias('marsEndStep', 'endStep') h.add(_.G2step_range('stepRange', _.Get('startStep'))) h.alias('ls.stepRange', 'stepRange') def stepTypeInternal_inline_concept(h): def wrapped(h): dummy = h.get_l('dummy') if dummy == 1: return 'instant' return wrapped h.add( _.Concept('stepTypeInternal', None, concepts=stepTypeInternal_inline_concept(h))) h.alias('time.stepType', 'stepType') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.add( _.Validity_date('validityDate', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityDate', 'validityDate') h.add( _.Validity_time('validityTime', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityTime', 'validityTime') h.add( _.StringCodetable('typeOfFirstFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable_units('unitsOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add( _.Codetable_title('nameOfFirstFixedSurface', _.Get('typeOfFirstFixedSurface'))) h.add(_.Signed('scaleFactorOfFirstFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfFirstFixedSurface', 4)) h.add( _.Codetable('typeOfSecondFixedSurface', 1, "4.5.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable_units('unitsOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add( _.Codetable_title('nameOfSecondFixedSurface', _.Get('typeOfSecondFixedSurface'))) h.add(_.Signed('scaleFactorOfSecondFixedSurface', 1)) h.add(_.Unsigned('scaledValueOfSecondFixedSurface', 4)) h.add(_.Transient('pressureUnits', "hPa")) def typeOfLevel_inline_concept(h): def wrapped(h): typeOfFirstFixedSurface = h.get_l('typeOfFirstFixedSurface') typeOfSecondFixedSurface = h.get_l('typeOfSecondFixedSurface') if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 255: return 'surface' if typeOfFirstFixedSurface == 2 and typeOfSecondFixedSurface == 255: return 'cloudBase' if typeOfFirstFixedSurface == 3 and typeOfSecondFixedSurface == 255: return 'cloudTop' if typeOfFirstFixedSurface == 4 and typeOfSecondFixedSurface == 255: return 'isothermZero' if typeOfFirstFixedSurface == 5 and typeOfSecondFixedSurface == 255: return 'adiabaticCondensation' if typeOfFirstFixedSurface == 6 and typeOfSecondFixedSurface == 255: return 'maxWind' if typeOfFirstFixedSurface == 7 and typeOfSecondFixedSurface == 255: return 'tropopause' if typeOfFirstFixedSurface == 8 and typeOfSecondFixedSurface == 255: return 'nominalTop' if typeOfFirstFixedSurface == 9 and typeOfSecondFixedSurface == 255: return 'seaBottom' if typeOfFirstFixedSurface == 10 and typeOfSecondFixedSurface == 255: return 'atmosphere' if typeOfFirstFixedSurface == 20 and typeOfSecondFixedSurface == 255: return 'isothermal' pressureUnits = h.get_s('pressureUnits') if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 255 and pressureUnits == "Pa": return 'isobaricInPa' if typeOfFirstFixedSurface == 100 and pressureUnits == "hPa" and typeOfSecondFixedSurface == 255: return 'isobaricInhPa' if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 100: return 'isobaricLayer' if typeOfFirstFixedSurface == 101 and typeOfSecondFixedSurface == 255: return 'meanSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 255: return 'heightAboveSea' if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 102: return 'heightAboveSeaLayer' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 255: return 'heightAboveGround' if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 103: return 'heightAboveGroundLayer' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 255: return 'sigma' if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 104: return 'sigmaLayer' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 255: return 'hybrid' if typeOfFirstFixedSurface == 118 and typeOfSecondFixedSurface == 255: return 'hybridHeight' if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 105: return 'hybridLayer' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 255: return 'depthBelowLand' if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 106: return 'depthBelowLandLayer' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 255: return 'theta' if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 107: return 'thetaLayer' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 255: return 'pressureFromGround' if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 108: return 'pressureFromGroundLayer' if typeOfFirstFixedSurface == 109 and typeOfSecondFixedSurface == 255: return 'potentialVorticity' if typeOfFirstFixedSurface == 111 and typeOfSecondFixedSurface == 255: return 'eta' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 255: return 'soil' if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 151: return 'soilLayer' genVertHeightCoords = h.get_l('genVertHeightCoords') NV = h.get_l('NV') if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and NV == 6: return 'generalVertical' if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and typeOfSecondFixedSurface == 150 and NV == 6: return 'generalVerticalLayer' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 255: return 'depthBelowSea' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 8: return 'entireAtmosphere' if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 9: return 'entireOcean' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 255: return 'snow' if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 114: return 'snowLayer' scaleFactorOfFirstFixedSurface = h.get_l( 'scaleFactorOfFirstFixedSurface') scaledValueOfFirstFixedSurface = h.get_l( 'scaledValueOfFirstFixedSurface') if typeOfFirstFixedSurface == 160 and scaleFactorOfFirstFixedSurface == 0 and scaledValueOfFirstFixedSurface == 0 and typeOfSecondFixedSurface == 255: return 'oceanSurface' if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 160: return 'oceanLayer' if typeOfFirstFixedSurface == 169 and typeOfSecondFixedSurface == 255: return 'mixedLayerDepth' return wrapped h.add( _.Concept('typeOfLevel', 'unknown', concepts=typeOfLevel_inline_concept(h))) h.alias('vertical.typeOfLevel', 'typeOfLevel') h.alias('levelType', 'typeOfFirstFixedSurface') if (h.get_l('typeOfSecondFixedSurface') == 255): h.add( _.G2level('level', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add(_.Transient('bottomLevel', _.Get('level'))) h.add(_.Transient('topLevel', _.Get('level'))) else: h.add( _.G2level('topLevel', _.Get('typeOfFirstFixedSurface'), _.Get('scaleFactorOfFirstFixedSurface'), _.Get('scaledValueOfFirstFixedSurface'), _.Get('pressureUnits'))) h.add( _.G2level('bottomLevel', _.Get('typeOfSecondFixedSurface'), _.Get('scaleFactorOfSecondFixedSurface'), _.Get('scaledValueOfSecondFixedSurface'), _.Get('pressureUnits'))) h.alias('level', 'topLevel') h.alias('ls.level', 'level') h.alias('vertical.level', 'level') h.alias('vertical.bottomLevel', 'bottomLevel') h.alias('vertical.topLevel', 'topLevel') h.alias('extraDim', 'zero') if h._defined('extraDimensionPresent'): if h.get_l('extraDimensionPresent'): h.alias('extraDim', 'one') if h.get_l('extraDim'): h.alias('mars.levelist', 'dimension') h.alias('mars.levtype', 'dimensionType') else: h.add(_.Transient('tempPressureUnits', _.Get('pressureUnits'))) if not ((h.get_s('typeOfLevel') == "surface")): if (h.get_s('tempPressureUnits') == "Pa"): h.add( _.Scale('marsLevel', _.Get('level'), _.Get('one'), _.Get('hundred'))) h.alias('mars.levelist', 'marsLevel') else: h.alias('mars.levelist', 'level') h.alias('mars.levtype', 'typeOfFirstFixedSurface') if (h.get_s('levtype') == "sfc"): h.unalias('mars.levelist') if ((h.get_l('typeOfFirstFixedSurface') == 151) and (h.get_l('typeOfSecondFixedSurface') == 151)): h.alias('mars.levelist', 'bottomLevel') h.alias('ls.typeOfLevel', 'typeOfLevel')
def load(h): h.add( _.Codetable('shapeOfTheEarth', 1, "3.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('scaleFactorOfRadiusOfSphericalEarth', 1)) h.add(_.Unsigned('scaledValueOfRadiusOfSphericalEarth', 4)) h.add(_.Unsigned('scaleFactorOfEarthMajorAxis', 1)) h.alias('scaleFactorOfMajorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMajorAxis') h.add(_.Unsigned('scaledValueOfEarthMajorAxis', 4)) h.alias('scaledValueOfMajorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMajorAxis') h.add(_.Unsigned('scaleFactorOfEarthMinorAxis', 1)) h.alias('scaleFactorOfMinorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMinorAxis') h.add(_.Unsigned('scaledValueOfEarthMinorAxis', 4)) h.alias('scaledValueOfMinorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMinorAxis') h.alias('earthIsOblate', 'one') if (h.get_l('shapeOfTheEarth') == 0): h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 1): h.add( _.From_scale_factor_scaled_value( 'radius', _.Get('scaleFactorOfRadiusOfSphericalEarth'), _.Get('scaledValueOfRadiusOfSphericalEarth'))) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 6): h.add(_.Transient('radius', 6371229)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 8): h.add(_.Transient('radius', 6371200)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 2): h.add(_.Transient('earthMajorAxis', 6.37816e+06)) h.add(_.Transient('earthMinorAxis', 6.35678e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 3): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.add( _.Divdouble('earthMajorAxisInMetres', _.Get('earthMajorAxis'), 0.001)) h.add( _.Divdouble('earthMinorAxisInMetres', _.Get('earthMinorAxis'), 0.001)) if (h.get_l('shapeOfTheEarth') == 7): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if ((h.get_l('shapeOfTheEarth') == 4) or (h.get_l('shapeOfTheEarth') == 5)): h.add(_.Transient('earthMajorAxis', 6.37814e+06)) h.add(_.Transient('earthMinorAxis', 6.35675e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 9): h.add(_.Transient('earthMajorAxis', 6.37756e+06)) h.add(_.Transient('earthMinorAxis', 6.35626e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') h.add(_.Unsigned('Ni', 4)) h.alias('numberOfPointsAlongAParallel', 'Ni') h.alias('Nx', 'Ni') h.add(_.Unsigned('Nj', 4)) h.alias('numberOfPointsAlongAMeridian', 'Nj') h.alias('Ny', 'Nj') h.alias('geography.Ni', 'Ni') h.alias('geography.Nj', 'Nj') h.add(_.Unsigned('basicAngleOfTheInitialProductionDomain', 4)) h.add( _.Transient('mBasicAngle', (_.Get('basicAngleOfTheInitialProductionDomain') * _.Get('oneMillionConstant')))) h.add(_.Transient('angleMultiplier', 1)) h.add(_.Transient('mAngleMultiplier', 1000000)) pass # when block h.add(_.Unsigned('subdivisionsOfBasicAngle', 4)) h.add(_.Transient('angleDivisor', 1000000)) pass # when block h.add( _.Codeflag('resolutionAndComponentFlags', 1, "grib2/tables/[tablesVersion]/3.3.table")) h.add( _.Bit('resolutionAndComponentFlags1', _.Get('resolutionAndComponentFlags'), 7)) h.add( _.Bit('resolutionAndComponentFlags2', _.Get('resolutionAndComponentFlags'), 6)) h.add( _.Bit('iDirectionIncrementGiven', _.Get('resolutionAndComponentFlags'), 5)) h.add( _.Bit('jDirectionIncrementGiven', _.Get('resolutionAndComponentFlags'), 4)) h.add(_.Bit('uvRelativeToGrid', _.Get('resolutionAndComponentFlags'), 3)) h.add( _.Bit('resolutionAndComponentFlags6', _.Get('resolutionAndComponentFlags'), 7)) h.add( _.Bit('resolutionAndComponentFlags7', _.Get('resolutionAndComponentFlags'), 6)) h.add( _.Bit('resolutionAndComponentFlags8', _.Get('resolutionAndComponentFlags'), 6)) def ijDirectionIncrementGiven_inline_concept(h): def wrapped(h): iDirectionIncrementGiven = h.get_l('iDirectionIncrementGiven') jDirectionIncrementGiven = h.get_l('jDirectionIncrementGiven') if iDirectionIncrementGiven == 1 and jDirectionIncrementGiven == 1: return 1 if iDirectionIncrementGiven == 1 and jDirectionIncrementGiven == 0: return 0 if iDirectionIncrementGiven == 0 and jDirectionIncrementGiven == 1: return 0 if iDirectionIncrementGiven == 0 and jDirectionIncrementGiven == 0: return 0 return wrapped h.add( _.Concept('ijDirectionIncrementGiven', None, concepts=ijDirectionIncrementGiven_inline_concept(h))) h.alias('DiGiven', 'iDirectionIncrementGiven') h.alias('DjGiven', 'jDirectionIncrementGiven') h.add( _.Codeflag('scanningMode', 1, "grib2/tables/[tablesVersion]/3.4.table")) h.add(_.Bit('iScansNegatively', _.Get('scanningMode'), 7)) h.add(_.Bit('jScansPositively', _.Get('scanningMode'), 6)) h.add(_.Bit('jPointsAreConsecutive', _.Get('scanningMode'), 5)) h.add(_.Bit('alternativeRowScanning', _.Get('scanningMode'), 4)) if h.get_l('jPointsAreConsecutive'): h.alias('numberOfRows', 'Ni') h.alias('numberOfColumns', 'Nj') else: h.alias('numberOfRows', 'Nj') h.alias('numberOfColumns', 'Ni') h.alias('geography.iScansNegatively', 'iScansNegatively') h.alias('geography.jScansPositively', 'jScansPositively') h.alias('geography.jPointsAreConsecutive', 'jPointsAreConsecutive') h.add(_.Transient('iScansPositively', _.Not(_.Get('iScansNegatively')))) h.add(_.Bit('scanningMode5', _.Get('scanningMode'), 3)) h.add(_.Bit('scanningMode6', _.Get('scanningMode'), 2)) h.add(_.Bit('scanningMode7', _.Get('scanningMode'), 1)) h.add(_.Bit('scanningMode8', _.Get('scanningMode'), 0)) h.add( _.Change_scanning_direction('swapScanningX', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('xFirst'), _.Get('xLast'), _.Get('x'))) h.alias('swapScanningLon', 'swapScanningX') h.add( _.Change_scanning_direction('swapScanningY', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('yFirst'), _.Get('yLast'), _.Get('y'))) h.alias('swapScanningLat', 'swapScanningY') with h.list('longitudesList'): for i in range(0, h.get_l('Ni')): h.add(_.Unsigned('longitudes', 4)) with h.list('latitudesList'): for i in range(0, h.get_l('Nj')): h.add(_.Signed('latitudes', 4))
def load(h): h.add(_.Constant('ECMWF', 98)) h.add(_.Constant('ECMWF_s', "ecmf")) h.add(_.Constant('WMO', 0)) h.add(_.Constant('conceptsMasterDir', "grib1")) h.add(_.Constant('conceptsLocalDirECMF', "grib1/localConcepts/ecmf")) h.add(_.Constant('conceptsLocalDirAll', "grib1/localConcepts/[centre:s]")) h.add(_.Constant('tablesMasterDir', "grib1")) h.add(_.Constant('tablesLocalDir', "grib1/local/[centre:s]")) h.add(_.Transient('productionStatusOfProcessedData', 0)) h.add(_.Position('offsetSection1')) h.add(_.Section_length('section1Length', 3)) h.add(_.Section_pointer('section1Pointer', _.Get('offsetSection1'), _.Get('section1Length'), 1)) h.add(_.Constant('wrongPadding', 0)) h.add(_.Unsigned('table2Version', 1)) h.alias('gribTablesVersionNo', 'table2Version') h.add(_.StringCodetable('centre', 1, "common/c-1.table")) h.alias('identificationOfOriginatingGeneratingCentre', 'centre') h.add(_.Codetable_title('centreDescription', _.Get('centre'))) h.alias('parameter.centre', 'centre') h.alias('originatingCentre', 'centre') h.alias('ls.centre', 'centre') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.alias('generatingProcessIdentificationNumber', 'generatingProcessIdentifier') h.alias('process', 'generatingProcessIdentifier') h.add(_.Unsigned('gridDefinition', 1)) h.add(_.Codeflag('section1Flags', 1, "grib1/1.table")) h.alias('centreForTable2', 'centre') h.add(_.Codetable('indicatorOfParameter', 1, "grib1/2.[centreForTable2:l].[table2Version:l].table")) h.add(_.Codetable_title('parameterName', _.Get('indicatorOfParameter'))) h.add(_.Codetable_units('parameterUnits', _.Get('indicatorOfParameter'))) h.add(_.StringCodetable('indicatorOfTypeOfLevel', 1, "3.table", _.Get('tablesLocalDir'), _.Get('tablesMasterDir'))) h.alias('levelType', 'indicatorOfTypeOfLevel') h.add(_.Transient('pressureUnits', "hPa")) h.add(_.Concept('typeOfLevelECMF', 'unknown', 'typeOfLevel.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', True)) h.add(_.Concept('typeOfLevel', 'typeOfLevelECMF', 'typeOfLevel.def', 'conceptsMasterDir', 'conceptsLocalDirAll', True)) h.alias('vertical.typeOfLevel', 'typeOfLevel') pass # when block h.alias('ls.typeOfLevel', 'typeOfLevel') if ((((((((((((h.get_l('indicatorOfTypeOfLevel') == 101) or (h.get_l('indicatorOfTypeOfLevel') == 104)) or (h.get_l('indicatorOfTypeOfLevel') == 106)) or (h.get_l('indicatorOfTypeOfLevel') == 108)) or (h.get_l('indicatorOfTypeOfLevel') == 110)) or (h.get_l('indicatorOfTypeOfLevel') == 112)) or (h.get_l('indicatorOfTypeOfLevel') == 114)) or (h.get_l('indicatorOfTypeOfLevel') == 116)) or (h.get_l('indicatorOfTypeOfLevel') == 120)) or (h.get_l('indicatorOfTypeOfLevel') == 121)) or (h.get_l('indicatorOfTypeOfLevel') == 128)) or (h.get_l('indicatorOfTypeOfLevel') == 141)): h.add(_.Unsigned('topLevel', 1)) h.add(_.Unsigned('bottomLevel', 1)) h.add(_.Sprintf('levels', "%d-%d", _.Get('topLevel'), _.Get('bottomLevel'))) h.alias('ls.levels', 'levels') h.alias('vertical.level', 'topLevel') h.alias('vertical.topLevel', 'topLevel') h.alias('vertical.bottomLevel', 'bottomLevel') else: h.add(_.Unsigned('level', 2)) if (h.get_l('indicatorOfTypeOfLevel') == 210): h.add(_.Scale('marsLevel', _.Get('level'), _.Get('oneConstant'), _.Get('hundred'))) h.alias('mars.levelist', 'marsLevel') h.alias('vertical.level', 'level') h.alias('vertical.topLevel', 'level') h.alias('vertical.bottomLevel', 'level') h.alias('ls.level', 'level') h.alias('lev', 'level') if (((((h.get_l('indicatorOfTypeOfLevel') == 109) or (h.get_l('indicatorOfTypeOfLevel') == 100)) or (h.get_l('indicatorOfTypeOfLevel') == 110)) or (h.get_l('indicatorOfTypeOfLevel') == 113)) or (h.get_l('indicatorOfTypeOfLevel') == 117)): h.alias('mars.levelist', 'level') h.add(_.Unsigned('yearOfCentury', 1)) h.add(_.Unsigned('month', 1)) h.add(_.Unsigned('day', 1)) h.add(_.Unsigned('hour', 1)) h.add(_.Unsigned('minute', 1)) h.add(_.Transient('second', 0)) h.add(_.Codetable('unitOfTimeRange', 1, "grib1/4.table")) h.alias('unitOfTime', 'unitOfTimeRange') h.alias('indicatorOfUnitOfTimeRange', 'unitOfTimeRange') h.add(_.Unsigned('P1', 1)) h.add(_.Unsigned('P2', 1)) h.add(_.Codetable('timeRangeIndicator', 1, "5.table", _.Get('tablesLocalDir'), _.Get('tablesMasterDir'))) h.add(_.Unsigned('numberIncludedInAverage', 2)) h.add(_.Bits('mybits', _.Get('numberIncludedInAverage'), 0, 12)) h.add(_.Unsigned('numberMissingFromAveragesOrAccumulations', 1)) h.add(_.Unsigned('centuryOfReferenceTimeOfData', 1)) h.add(_.Codetable('subCentre', 1, "grib1/0.[centre].table")) if (h.get_l('table2Version') >= 128): if ((h.get_l('centre') != 98) and (h.get_l('subCentre') == 98)): h.alias('centreForTable2', 'subCentre') else: h.alias('centreForTable2', 'centre') else: h.alias('centreForTable2', 'WMO') h.add(_.Concept('paramIdECMF', 'defaultParameter', 'paramId.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('paramId', 'paramIdECMF', 'paramId.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.add(_.Concept('cfNameECMF', 'defaultName', 'cfName.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('cfName', 'cfNameECMF', 'cfName.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.add(_.Concept('cfVarNameECMF', 'defaultName', 'cfVarName.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('cfVarName', 'cfVarNameECMF', 'cfVarName.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.add(_.Concept('unitsECMF', 'defaultName', 'units.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('units', 'unitsECMF', 'units.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.add(_.Concept('nameECMF', 'defaultName', 'name.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('name', 'nameECMF', 'name.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.add(_.Signed('decimalScaleFactor', 2)) h.add(_.Transient('setLocalDefinition', 0)) h.add(_.Transient('optimizeScaleFactor', 0)) h.add(_.G1date('dataDate', _.Get('centuryOfReferenceTimeOfData'), _.Get('yearOfCentury'), _.Get('month'), _.Get('day'))) h.add(_.Evaluate('year', (_.Get('dataDate') / 10000))) h.add(_.Time('dataTime', _.Get('hour'), _.Get('minute'), _.Get('second'))) h.add(_.Julian_day('julianDay', _.Get('dataDate'), _.Get('hour'), _.Get('minute'), _.Get('second'))) h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table")) h.add(_.Concept('stepType', 'timeRangeIndicator', 'stepType.def', 'conceptsMasterDir', 'conceptsLocalDirAll', True)) if (h.get_s('stepType') == "instant"): h.alias('productDefinitionTemplateNumber', 'zero') else: h.alias('productDefinitionTemplateNumber', 'eight') h.add(_.G1step_range('stepRange', _.Get('P1'), _.Get('P2'), _.Get('timeRangeIndicator'), _.Get('unitOfTimeRange'), _.Get('stepUnits'), _.Get('stepType'))) h.add(_.Long_vector('startStep', _.Get('stepRange'), 0)) h.add(_.Long_vector('endStep', _.Get('stepRange'), 1)) h.alias('stepInHours', 'endStep') h.alias('ls.stepRange', 'stepRange') h.alias('ls.dataDate', 'dataDate') h.alias('mars.step', 'endStep') h.alias('mars.date', 'dataDate') h.alias('mars.levtype', 'indicatorOfTypeOfLevel') h.alias('mars.time', 'dataTime') h.add(_.Mars_param('marsParam', _.Get('paramId'), _.Get('gribTablesVersionNo'), _.Get('indicatorOfParameter'))) h.alias('mars.param', 'marsParam') if ((h.get_l('centre') == 34) and (h.get_l('subCentre') == 241)): h.alias('mars.param', 'paramId') if (h.get_l('indicatorOfTypeOfLevel') == 101): h.add(_.Constant('sfc_levtype', "sfc")) h.alias('mars.levtype', 'sfc_levtype') h.add(_.Validity_date('validityDate', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityDate', 'validityDate') h.add(_.Validity_time('validityTime', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityTime', 'validityTime') h.add(_.Transient('deleteLocalDefinition', 0)) if ((((h.get_l('section1Length') > 40) or h._new()) or (h.get_l('setLocalDefinition') > 0)) and (h.get_l('deleteLocalDefinition') == 0)): h.add(_.Constant('localUsePresent', 1)) h.alias('grib2LocalSectionPresent', 'present') if ((h.get_l('centre') == h.get_l('ECMWF')) or ((h.get_l('centre') != h.get_l('ECMWF')) and (h.get_l('subCentre') == h.get_l('ECMWF')))): h.add(_.Pad('reservedNeedNotBePresent', 12)) h.add(_.Codetable('localDefinitionNumber', 1, "grib1/localDefinitionNumber.98.table")) _.Template('grib1/local.98.[localDefinitionNumber:l].def', True).load(h) if h._changed('localDefinitionNumber'): if (not (h._new()) and (h.get_l('localDefinitionNumber') != 4)): h.add(_.Section_padding('localExtensionPadding')) _.Template('mars/grib.[stream:s].[type:s].def', True).load(h) else: if (not (h._new()) or h.get_l('setLocalDefinition')): h.add(_.Pad('reservedNeedNotBePresent', 12)) _.Template('grib1/local.[centre:l].def', True).load(h) h.add(_.Section_padding('localExtensionPadding')) else: h.add(_.Constant('localUsePresent', 0)) h.add(_.Section_padding('section1Padding')) h.add(_.Concept('shortNameECMF', 'defaultShortName', 'shortName.def', 'conceptsMasterDir', 'conceptsLocalDirECMF', False)) h.add(_.Concept('shortName', 'shortNameECMF', 'shortName.def', 'conceptsMasterDir', 'conceptsLocalDirAll', False)) h.alias('ls.shortName', 'shortName') h.add(_.Ifs_param('ifsParam', _.Get('paramId'), _.Get('type'))) h.alias('parameter.paramId', 'paramId') h.alias('parameter.shortName', 'shortName') h.alias('parameter.units', 'units') h.alias('parameter.name', 'name') h.alias('parameter', 'paramId') h.alias('short_name', 'shortName') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.alias('time.stepType', 'stepType') h.add(_.Concept('stepTypeForConversion', 'unknown', 'stepTypeForConversion.def', 'conceptsMasterDir', 'conceptsLocalDirAll', True)) if (h.get_s('stepTypeForConversion') == "accum"): h.alias('productDefinitionTemplateNumber', 'eight') h.add(_.Md5('md5Section1', _.Get('offsetSection1'), _.Get('section1Length'))) h.add(_.Md5('md5Product', _.Get('offsetSection1'), _.Get('section1Length'), _.Get('gridDefinition'), _.Get('section1Flags'), _.Get('decimalScaleFactor')))
def load(h): h.add( _.Codetable('shapeOfTheEarth', 1, "3.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('scaleFactorOfRadiusOfSphericalEarth', 1)) h.add(_.Unsigned('scaledValueOfRadiusOfSphericalEarth', 4)) h.add(_.Unsigned('scaleFactorOfEarthMajorAxis', 1)) h.alias('scaleFactorOfMajorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMajorAxis') h.add(_.Unsigned('scaledValueOfEarthMajorAxis', 4)) h.alias('scaledValueOfMajorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMajorAxis') h.add(_.Unsigned('scaleFactorOfEarthMinorAxis', 1)) h.alias('scaleFactorOfMinorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMinorAxis') h.add(_.Unsigned('scaledValueOfEarthMinorAxis', 4)) h.alias('scaledValueOfMinorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMinorAxis') h.alias('earthIsOblate', 'one') if (h.get_l('shapeOfTheEarth') == 0): h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 1): h.add( _.From_scale_factor_scaled_value( 'radius', _.Get('scaleFactorOfRadiusOfSphericalEarth'), _.Get('scaledValueOfRadiusOfSphericalEarth'))) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 6): h.add(_.Transient('radius', 6371229)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 8): h.add(_.Transient('radius', 6371200)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 2): h.add(_.Transient('earthMajorAxis', 6.37816e+06)) h.add(_.Transient('earthMinorAxis', 6.35678e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 3): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.add( _.Divdouble('earthMajorAxisInMetres', _.Get('earthMajorAxis'), 0.001)) h.add( _.Divdouble('earthMinorAxisInMetres', _.Get('earthMinorAxis'), 0.001)) if (h.get_l('shapeOfTheEarth') == 7): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if ((h.get_l('shapeOfTheEarth') == 4) or (h.get_l('shapeOfTheEarth') == 5)): h.add(_.Transient('earthMajorAxis', 6.37814e+06)) h.add(_.Transient('earthMinorAxis', 6.35675e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 9): h.add(_.Transient('earthMajorAxis', 6.37756e+06)) h.add(_.Transient('earthMinorAxis', 6.35626e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis')
def load(h): h.add(_.Codetable('lcwfvSuiteName', 2, "grib2/lcwfv_suiteName.table")) h.alias('mars.origin', 'lcwfvSuiteName')
def load(h): h.add(_.Constant('dataRepresentationType', 90)) h.add( _.Codetable('parameterCategory', 1, "4.1.[discipline:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('parameterNumber', 1, "4.2.[discipline:l].[parameterCategory:l].table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Codetable_units('parameterUnits', _.Get('parameterNumber'))) h.add(_.Codetable_title('parameterName', _.Get('parameterNumber'))) h.add( _.Codetable('typeOfGeneratingProcess', 1, "4.3.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('backgroundProcess', 1)) h.alias('backgroundGeneratingProcessIdentifier', 'backgroundProcess') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('hoursAfterDataCutoff', 2)) h.alias('hoursAfterReferenceTimeOfDataCutoff', 'hoursAfterDataCutoff') h.add(_.Unsigned('minutesAfterDataCutoff', 1)) h.alias('minutesAfterReferenceTimeOfDataCutoff', 'minutesAfterDataCutoff') h.add( _.Codetable('indicatorOfUnitOfTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('defaultStepUnits', 'one') _.Template('grib2/localConcepts/[centre:s]/default_step_units.def', True).load(h) h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table")) h.add(_.Signed('forecastTime', 4)) h.add( _.Step_in_units('startStep', _.Get('forecastTime'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'))) h.add(_.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits'))) h.alias('step', 'startStep') h.alias('marsStep', 'startStep') h.alias('mars.step', 'startStep') h.alias('marsStartStep', 'startStep') h.alias('marsEndStep', 'endStep') h.add(_.G2step_range('stepRange', _.Get('startStep'))) h.alias('ls.stepRange', 'stepRange') def stepTypeInternal_inline_concept(h): def wrapped(h): dummy = h.get_l('dummy') if dummy == 1: return 'instant' return wrapped h.add( _.Concept('stepTypeInternal', None, concepts=stepTypeInternal_inline_concept(h))) h.alias('time.stepType', 'stepType') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.add( _.Validity_date('validityDate', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityDate', 'validityDate') h.add( _.Validity_time('validityTime', _.Get('dataDate'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'))) h.alias('time.validityTime', 'validityTime') h.add(_.Constant('typeOfLevel', "surface")) h.add(_.Constant('levelType', "surface")) h.add(_.Constant('level', 0)) h.add(_.Unsigned('NB', 1)) h.alias('numberOfContributingSpectralBands', 'NB') with h.list('listOfContributingSpectralBands'): for i in range(0, h.get_l('numberOfContributingSpectralBands')): h.add(_.Unsigned('satelliteSeries', 2)) h.add(_.Unsigned('satelliteNumber', 2)) h.add(_.Unsigned('instrumentType', 2)) h.add(_.Unsigned('scaleFactorOfCentralWaveNumber', 1)) h.add(_.Unsigned('scaledValueOfCentralWaveNumber', 4)) h.add( _.Codetable('typeOfEnsembleForecast', 1, "4.6.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('perturbationNumber', 1)) h.alias('number', 'perturbationNumber') h.add(_.Unsigned('numberOfForecastsInEnsemble', 1)) h.alias('totalNumber', 'numberOfForecastsInEnsemble') if ((((((((h.get_l('productionStatusOfProcessedData') == 4) or (h.get_l('productionStatusOfProcessedData') == 5)) or (h.get_l('productionStatusOfProcessedData') == 6)) or (h.get_l('productionStatusOfProcessedData') == 7)) or (h.get_l('productionStatusOfProcessedData') == 8)) or (h.get_l('productionStatusOfProcessedData') == 9)) or (h.get_l('productionStatusOfProcessedData') == 10)) or (h.get_l('productionStatusOfProcessedData') == 11)): h.alias('mars.number', 'perturbationNumber') h.add(_.Unsigned('yearOfEndOfOverallTimeInterval', 2)) h.add(_.Unsigned('monthOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('dayOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('hourOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('minuteOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('secondOfEndOfOverallTimeInterval', 1)) h.add(_.Unsigned('numberOfTimeRange', 1)) h.alias('n', 'numberOfTimeRange') h.add(_.Unsigned('numberOfMissingInStatisticalProcess', 4)) h.alias('totalNumberOfDataValuesMissingInStatisticalProcess', 'numberOfMissingInStatisticalProcess') with h.list('statisticalProcessesList'): for i in range(0, h.get_l('numberOfTimeRange')): h.add( _.Codetable('typeOfStatisticalProcessing', 1, "4.10.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable('typeOfTimeIncrement', 1, "4.11.table", _.Get('masterDir'), _.Get('localDir'))) h.alias( 'typeOfTimeIncrementBetweenSuccessiveFieldsUsedInTheStatisticalProcessing', 'typeOfTimeIncrement') h.add( _.Codetable('indicatorOfUnitForTimeRange', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('lengthOfTimeRange', 4)) h.add( _.Codetable('indicatorOfUnitForTimeIncrement', 1, "4.4.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('timeIncrement', 4)) h.alias('timeIncrementBetweenSuccessiveFields', 'timeIncrement') if ((h.get_l('numberOfTimeRange') == 1) or (h.get_l('numberOfTimeRange') == 2)): def stepTypeInternal_inline_concept(h): def wrapped(h): typeOfStatisticalProcessing = h.get_l( 'typeOfStatisticalProcessing') if typeOfStatisticalProcessing == 255: return 'instant' typeOfTimeIncrement = h.get_l('typeOfTimeIncrement') if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 2: return 'avg' if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 3: return 'avg' if typeOfStatisticalProcessing == 0 and typeOfTimeIncrement == 1: return 'avgd' if typeOfStatisticalProcessing == 1 and typeOfTimeIncrement == 2: return 'accum' if typeOfStatisticalProcessing == 2: return 'max' if typeOfStatisticalProcessing == 3: return 'min' if typeOfStatisticalProcessing == 4: return 'diff' if typeOfStatisticalProcessing == 5: return 'rms' if typeOfStatisticalProcessing == 6: return 'sd' if typeOfStatisticalProcessing == 7: return 'cov' if typeOfStatisticalProcessing == 8: return 'sdiff' if typeOfStatisticalProcessing == 9: return 'ratio' if typeOfStatisticalProcessing == 10: return 'stdanom' if typeOfStatisticalProcessing == 11: return 'sum' return wrapped h.add( _.Concept('stepTypeInternal', None, concepts=stepTypeInternal_inline_concept(h))) h.add( _.Step_in_units('startStep', _.Get('forecastTime'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'), _.Get('indicatorOfUnitForTimeRange'), _.Get('lengthOfTimeRange'))) h.add( _.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits'), _.Get('year'), _.Get('month'), _.Get('day'), _.Get('hour'), _.Get('minute'), _.Get('second'), _.Get('yearOfEndOfOverallTimeInterval'), _.Get('monthOfEndOfOverallTimeInterval'), _.Get('dayOfEndOfOverallTimeInterval'), _.Get('hourOfEndOfOverallTimeInterval'), _.Get('minuteOfEndOfOverallTimeInterval'), _.Get('secondOfEndOfOverallTimeInterval'), _.Get('indicatorOfUnitForTimeRange'), _.Get('lengthOfTimeRange'), _.Get('typeOfTimeIncrement'), _.Get('numberOfTimeRange'))) h.add(_.G2step_range('stepRange', _.Get('startStep'), _.Get('endStep'))) else: h.add(_.Constant('stepType', "multiple steps")) h.add(_.Constant('stepTypeInternal', "multiple steps")) h.add(_.Constant('endStep', "unavailable")) h.add(_.Constant('startStep', "unavailable")) h.add(_.Constant('stepRange', "unavailable")) h.alias('ls.stepRange', 'stepRange') h.alias('mars.step', 'endStep') h.alias('time.stepType', 'stepType') h.alias('time.stepRange', 'stepRange') h.alias('time.stepUnits', 'stepUnits') h.alias('time.dataDate', 'dataDate') h.alias('time.dataTime', 'dataTime') h.alias('time.startStep', 'startStep') h.alias('time.endStep', 'endStep') h.add( _.Validity_date('validityDate', _.Get('date'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'), _.Get('yearOfEndOfOverallTimeInterval'), _.Get('monthOfEndOfOverallTimeInterval'), _.Get('dayOfEndOfOverallTimeInterval'))) h.alias('time.validityDate', 'validityDate') h.add( _.Validity_time('validityTime', _.Get('date'), _.Get('dataTime'), _.Get('step'), _.Get('stepUnits'), _.Get('hourOfEndOfOverallTimeInterval'), _.Get('minuteOfEndOfOverallTimeInterval'))) h.alias('time.validityTime', 'validityTime') h.alias('instrument', 'instrumentType') h.alias('ident', 'satelliteNumber')
def load(h): h.add(_.Transient('biFourierMakeTemplate', 0)) h.add(_.Label('BiFourier coefficients')) h.add(_.Constant('biFourierCoefficients', 1)) h.add(_.Codetable('spectralType', 1, "3.6.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('spectralDataRepresentationType', 'spectralType') h.add(_.Unsigned('biFourierResolutionParameterN', 4)) h.add(_.Unsigned('biFourierResolutionParameterM', 4)) h.add(_.Codetable('biFourierTruncationType', 1, "3.25.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('Lx', 8)) h.alias('geography.LxInMetres', 'Lx') h.add(_.Unsigned('Lux', 8)) h.alias('geography.LuxInMetres', 'Lux') h.add(_.Unsigned('Lcx', 8)) h.alias('geography.LcxInMetres', 'Lcx') h.add(_.Unsigned('Ly', 8)) h.alias('geography.LyInMetres', 'Ly') h.add(_.Unsigned('Luy', 8)) h.alias('geography.LuyInMetres', 'Luy') h.add(_.Unsigned('Lcy', 8)) h.alias('geography.LcyInMetres', 'Lcy') h.add(_.Codetable('shapeOfTheEarth', 1, "3.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('scaleFactorOfRadiusOfSphericalEarth', 1)) h.add(_.Unsigned('scaledValueOfRadiusOfSphericalEarth', 4)) h.add(_.Unsigned('scaleFactorOfEarthMajorAxis', 1)) h.alias('scaleFactorOfMajorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMajorAxis') h.add(_.Unsigned('scaledValueOfEarthMajorAxis', 4)) h.alias('scaledValueOfMajorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMajorAxis') h.add(_.Unsigned('scaleFactorOfEarthMinorAxis', 1)) h.alias('scaleFactorOfMinorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMinorAxis') h.add(_.Unsigned('scaledValueOfEarthMinorAxis', 4)) h.alias('scaledValueOfMinorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMinorAxis') h.alias('earthIsOblate', 'one') if (h.get_l('shapeOfTheEarth') == 0): h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 1): h.add(_.From_scale_factor_scaled_value('radius', _.Get('scaleFactorOfRadiusOfSphericalEarth'), _.Get('scaledValueOfRadiusOfSphericalEarth'))) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 6): h.add(_.Transient('radius', 6371229)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 8): h.add(_.Transient('radius', 6371200)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 2): h.add(_.Transient('earthMajorAxis', 6.37816e+06)) h.add(_.Transient('earthMinorAxis', 6.35678e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 3): h.add(_.From_scale_factor_scaled_value('earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add(_.From_scale_factor_scaled_value('earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.add(_.Divdouble('earthMajorAxisInMetres', _.Get('earthMajorAxis'), 0.001)) h.add(_.Divdouble('earthMinorAxisInMetres', _.Get('earthMinorAxis'), 0.001)) if (h.get_l('shapeOfTheEarth') == 7): h.add(_.From_scale_factor_scaled_value('earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add(_.From_scale_factor_scaled_value('earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if ((h.get_l('shapeOfTheEarth') == 4) or (h.get_l('shapeOfTheEarth') == 5)): h.add(_.Transient('earthMajorAxis', 6.37814e+06)) h.add(_.Transient('earthMinorAxis', 6.35675e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 9): h.add(_.Transient('earthMajorAxis', 6.37756e+06)) h.add(_.Transient('earthMinorAxis', 6.35626e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') h.add(_.Signed('latitudeOfFirstGridPoint', 4)) h.alias('La1', 'latitudeOfFirstGridPoint') h.add(_.Scale('latitudeOfFirstGridPointInDegrees', _.Get('latitudeOfFirstGridPoint'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.latitudeOfFirstGridPointInDegrees', 'latitudeOfFirstGridPointInDegrees') h.add(_.Signed('longitudeOfFirstGridPoint', 4)) h.alias('Lo1', 'longitudeOfFirstGridPoint') h.add(_.Scale('longitudeOfFirstGridPointInDegrees', _.Get('longitudeOfFirstGridPoint'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.longitudeOfFirstGridPointInDegrees', 'longitudeOfFirstGridPointInDegrees') h.add(_.Signed('LaD', 4)) h.add(_.Scale('LaDInDegrees', _.Get('LaD'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.LaDInDegrees', 'LaDInDegrees') h.add(_.Signed('latitudeOfLastGridPoint', 4)) h.alias('La2', 'latitudeOfLastGridPoint') h.add(_.Scale('latitudeOfLastGridPointInDegrees', _.Get('latitudeOfLastGridPoint'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.latitudeOfLastGridPointInDegrees', 'latitudeOfLastGridPointInDegrees') h.add(_.Signed('longitudeOfLastGridPoint', 4)) h.alias('Lo2', 'longitudeOfLastGridPoint') h.add(_.Scale('longitudeOfLastGridPointInDegrees', _.Get('longitudeOfLastGridPoint'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.longitudeOfLastGridPointInDegrees', 'longitudeOfLastGridPointInDegrees') h.add(_.Unsigned('orientationOfTheGrid', 4)) h.add(_.Scale('orientationOfTheGridInDegrees', _.Get('orientationOfTheGrid'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.orientationOfTheGridInDegrees', 'orientationOfTheGridInDegrees')
def load(h): h.add(_.Codetable('localDefinitionNumber', 1, "grib1/localDefinitionNumber.34.table")) _.Template('grib1/local.34.[localDefinitionNumber:l].def').load(h) _.Template('mars/grib.[stream:s].[type:s].def', True).load(h)
def load(h): _.Template('grib1/mars_labeling.def').load(h) h.add(_.Unsigned('perturbationNumber', 1)) h.alias('number', 'perturbationNumber') h.add(_.Unsigned('numberOfForecastsInEnsemble', 1)) h.alias('totalNumber', 'numberOfForecastsInEnsemble') h.add(_.Unsigned('directionNumber', 1)) h.alias('mars.direction', 'directionNumber') h.add(_.Unsigned('frequencyNumber', 1)) h.alias('mars.frequency', 'frequencyNumber') h.add(_.Unsigned('numberOfDirections', 1)) h.alias('totalNumberOfDirections', 'numberOfDirections') h.add(_.Unsigned('numberOfFrequencies', 1)) h.alias('totalNumberOfFrequencies', 'numberOfFrequencies') h.add(_.Unsigned('directionScalingFactor', 4)) h.alias('integerScalingFactorAppliedToDirections', 'directionScalingFactor') h.add(_.Unsigned('frequencyScalingFactor', 4)) h.alias('integerScalingFactorAppliedToFrequencies', 'frequencyScalingFactor') h.add(_.Constant('localFlagLatestVersion', 4)) h.add(_.Codetable('localFlag', 1, "grib1/local.13.table")) if (h.get_l('localFlag') == 0): h.add(_.Pad('padding_loc13_1', 36)) if (h.get_l('localFlag') == 1): h.add(_.Unsigned('systemNumber', 2)) h.add(_.Unsigned('methodNumber', 2)) h.alias('system', 'systemNumber') h.alias('method', 'methodNumber') h.add(_.Pad('padding_loc13_2', 32)) if (h.get_l('localFlag') == 2): h.add(_.Unsigned('systemNumber', 2)) h.add(_.Unsigned('methodNumber', 2)) h.add(_.Unsigned('referenceDate', 4)) h.add(_.Unsigned('climateDateFrom', 4)) h.add(_.Unsigned('climateDateTo', 4)) h.alias('system', 'systemNumber') h.alias('method', 'methodNumber') h.alias('refdate', 'referenceDate') h.add(_.Pad('padding_loc13_3', 20)) if (h.get_l('localFlag') == 3): h.add(_.Unsigned('systemNumber', 2)) h.add(_.Unsigned('methodNumber', 2)) h.add(_.Unsigned('referenceDate', 4)) h.add(_.Unsigned('climateDateFrom', 4)) h.add(_.Unsigned('climateDateTo', 4)) h.add(_.Unsigned('legBaseDate', 4)) h.alias('baseDateOfThisLeg', 'legBaseDate') h.add(_.Unsigned('legBaseTime', 2)) h.alias('baseTimeOfThisLeg', 'legBaseTime') h.add(_.Unsigned('legNumber', 1)) h.add(_.Unsigned('oceanAtmosphereCoupling', 1)) h.add(_.Pad('padding_loc13_4', 12)) h.alias('system', 'systemNumber') h.alias('method', 'methodNumber') h.alias('refdate', 'referenceDate') h.alias('mars._leg_number', 'legNumber') if (h.get_l('localFlag') == 4): h.add(_.Unsigned('systemNumber', 2)) h.add(_.Unsigned('methodNumber', 2)) h.add(_.Unsigned('referenceDate', 4)) h.add(_.Unsigned('climateDateFrom', 4)) h.add(_.Unsigned('climateDateTo', 4)) h.add(_.Unsigned('legBaseDate', 4)) h.alias('baseDateOfThisLeg', 'legBaseDate') h.add(_.Unsigned('legBaseTime', 2)) h.alias('baseTimeOfThisLeg', 'legBaseTime') h.add(_.Unsigned('legNumber', 1)) h.add(_.Unsigned('oceanAtmosphereCoupling', 1)) h.add(_.Unsigned('offsetToEndOf4DvarWindow', 2)) h.alias('anoffset', 'offsetToEndOf4DvarWindow') h.add(_.Unsigned('lengthOf4DvarWindow', 2)) h.alias('system', 'systemNumber') h.alias('method', 'methodNumber') h.alias('refdate', 'referenceDate') h.alias('mars._leg_number', 'legNumber') h.add(_.Pad('padding_loc13_5', 8)) h.add(_.Unsigned('scaledDirections', 4, _.Get('numberOfDirections'))) h.add(_.Unsigned('scaledFrequencies', 4, _.Get('numberOfFrequencies'))) h.add(_.Constant('GRIBEXSection1Problem', (((100 + (4 * _.Get('numberOfDirections'))) + (4 * _.Get('numberOfFrequencies'))) - _.Get('section1Length'))))
def load(h): h.add(_.Position('offsetSection1')) h.add(_.Section_length('section1Length', 4)) h.add(_.Section_pointer('section1Pointer', _.Get('offsetSection1'), _.Get('section1Length'), 1)) h.add(_.Unsigned('numberOfSection', 1)) h.add(_.StringCodetable('centre', 2, "common/c-11.table")) h.alias('identificationOfOriginatingGeneratingCentre', 'centre') h.add(_.Codetable_title('centreDescription', _.Get('centre'))) h.alias('parameter.centre', 'centre') h.alias('ls.centre', 'centre') h.alias('originatingCentre', 'centre') h.add(_.Unsigned('subCentre', 2)) if (h.get_l('subCentre') == 98): h.alias('centreForLocal', 'subCentre') else: h.alias('centreForLocal', 'centre') h.add(_.Codetable('tablesVersion', 1, "grib2/tables/1.0.table")) h.alias('gribMasterTablesVersionNumber', 'tablesVersion') h.add(_.Transient('masterDir', "grib2/tables/[tablesVersion]")) if (h.get_l('tablesVersion') > h.get_l('tablesVersionLatest')): h.add(_.Transient('masterDir', "grib2/tables/[tablesVersionLatest]")) pass # when block h.add(_.Codetable('localTablesVersion', 1, "grib2/tables/local/[centreForLocal]/1.1.table")) h.alias('versionNumberOfGribLocalTables', 'localTablesVersion') h.add(_.Transient('localDir', "")) if ((h.get_l('localTablesVersion') != 0) and (h.get_l('localTablesVersion') != 255)): h.add(_.Transient('localDir', "grib2/tables/local/[centre]/[localTablesVersion]")) h.add(_.Codetable('significanceOfReferenceTime', 1, "1.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('year', 2)) h.add(_.Unsigned('month', 1)) h.add(_.Unsigned('day', 1)) h.add(_.Unsigned('hour', 1)) h.add(_.Unsigned('minute', 1)) h.add(_.Unsigned('second', 1)) h.add(_.G2date('dataDate', _.Get('year'), _.Get('month'), _.Get('day'))) h.alias('mars.date', 'dataDate') h.alias('ls.date', 'dataDate') h.add(_.Julian_day('julianDay', _.Get('dataDate'), _.Get('hour'), _.Get('minute'), _.Get('second'))) h.add(_.Time('dataTime', _.Get('hour'), _.Get('minute'), _.Get('second'))) h.alias('mars.time', 'dataTime') h.add(_.Codetable('productionStatusOfProcessedData', 1, "1.3.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.StringCodetable('typeOfProcessedData', 1, "1.4.table", _.Get('masterDir'), _.Get('localDir'))) h.alias('ls.dataType', 'typeOfProcessedData') h.add(_.Md5('md5Section1', _.Get('offsetSection1'), _.Get('section1Length'))) h.add(_.Select_step_template('selectStepTemplateInterval', _.Get('productDefinitionTemplateNumber'), 0)) h.add(_.Select_step_template('selectStepTemplateInstant', _.Get('productDefinitionTemplateNumber'), 1)) h.add(_.Transient('stepTypeInternal', "instant")) def stepType_inline_concept(h): def wrapped(h): selectStepTemplateInstant = h.get_l('selectStepTemplateInstant') stepTypeInternal = h.get_s('stepTypeInternal') if selectStepTemplateInstant == 1 and stepTypeInternal == "instant": return 'instant' selectStepTemplateInterval = h.get_l('selectStepTemplateInterval') if selectStepTemplateInterval == 1 and stepTypeInternal == "avg": return 'avg' if selectStepTemplateInterval == 1 and stepTypeInternal == "avgd": return 'avgd' if selectStepTemplateInterval == 1 and stepTypeInternal == "accum": return 'accum' if selectStepTemplateInterval == 1 and stepTypeInternal == "max": return 'max' if selectStepTemplateInterval == 1 and stepTypeInternal == "min": return 'min' if selectStepTemplateInterval == 1 and stepTypeInternal == "diff": return 'diff' if selectStepTemplateInterval == 1 and stepTypeInternal == "sdiff": return 'sdiff' if selectStepTemplateInterval == 1 and stepTypeInternal == "rms": return 'rms' if selectStepTemplateInterval == 1 and stepTypeInternal == "sd": return 'sd' if selectStepTemplateInterval == 1 and stepTypeInternal == "cov": return 'cov' if selectStepTemplateInterval == 1 and stepTypeInternal == "ratio": return 'ratio' if selectStepTemplateInterval == 1 and stepTypeInternal == "stdanom": return 'stdanom' if selectStepTemplateInterval == 1 and stepTypeInternal == "sum": return 'sum' return wrapped h.add(_.Concept('stepType', None, concepts=stepType_inline_concept(h))) h.add(_.G2_chemical('is_chemical', _.Get('productDefinitionTemplateNumber'), _.Get('stepType'), 0)) h.add(_.G2_chemical('is_chemical_distfn', _.Get('productDefinitionTemplateNumber'), _.Get('stepType'), 1)) h.add(_.G2_aerosol('is_aerosol', _.Get('productDefinitionTemplateNumber'), _.Get('stepType'), 0)) h.add(_.G2_aerosol('is_aerosol_optical', _.Get('productDefinitionTemplateNumber'), _.Get('stepType'), 1)) h.add(_.Transient('setCalendarId', 0)) h.add(_.Transient('deleteCalendarId', 0)) h.alias('calendarIdPresent', 'zero') if (((h.get_l('section1Length') > 21) or (h.get_l('setCalendarId') > 0)) and (h.get_l('deleteCalendarId') == 0)): h.alias('calendarIdPresent', 'present') h.add(_.StringCodetable('calendarIdentificationTemplateNumber', 2, "1.5.table", _.Get('masterDir'), _.Get('localDir'))) _.Template('grib2/template.1.[calendarIdentificationTemplateNumber:l].def').load(h) def is_uerra_inline_concept(h): def wrapped(h): productionStatusOfProcessedData = h.get_l('productionStatusOfProcessedData') if productionStatusOfProcessedData == 10: return 1 if productionStatusOfProcessedData == 11: return 1 if productionStatusOfProcessedData == 9: return 1 if productionStatusOfProcessedData == 8: return 1 dummy = h.get_l('dummy') if dummy == 1: return 0 return wrapped h.add(_.Concept('is_uerra', 'zero', concepts=is_uerra_inline_concept(h)))
def load(h): h.add( _.Codetable('typeOfOriginalFieldValues', 1, "5.1.table", _.Get('masterDir'), _.Get('localDir')))
def load(h): h.add( _.Codetable('typeOfCalendar', 1, "1.6.table", _.Get('masterDir'), _.Get('localDir')))
def load(h): h.add(_.Transient('timeRangeIndicator', 0)) h.add(_.Position('offsetSection4')) h.add(_.Section_length('section4Length', 4)) h.add( _.Section_pointer('section4Pointer', _.Get('offsetSection4'), _.Get('section4Length'), 4)) h.add(_.Unsigned('numberOfSection', 1)) h.add(_.Unsigned('NV', 2)) h.alias('numberOfVerticalCoordinateValues', 'NV') h.alias('numberOfCoordinatesValues', 'NV') h.alias('numberOfVerticalGridDescriptors', 'NV') h.add(_.Transient('neitherPresent', 0)) if ((h.get_l('centre') == 7) or (h.get_l('centre') == 46)): h.alias('disableGrib1LocalSection', 'one') h.add( _.Codetable('productDefinitionTemplateNumber', 2, "4.0.table", _.Get('masterDir'), _.Get('localDir'))) if (h.get_l('section2Used') == 1): pass # when block h.add(_.Transient('genVertHeightCoords', 0)) _.Template( 'grib2/template.4.[productDefinitionTemplateNumber:l].def').load(h) if (h._defined('marsStream') and h._defined('marsType')): _.Template('mars/grib.[marsStream:s].[marsType:s].def', True).load(h) _.Template('grib2/parameters.def').load(h) if h._defined('typeOfFirstFixedSurface'): if (h.get_l('typeOfFirstFixedSurface') == 150): h.add(_.Transient('genVertHeightCoords', 1)) h.add(_.Transient('PVPresent', 0)) if h.get_l('genVertHeightCoords'): h.add(_.Ieeefloat('nlev', 4)) h.add(_.Ieeefloat('numberOfVGridUsed', 4)) h.add(_.Bytes('uuidOfVGrid', 16)) h.alias('numberOfVerticalCoordinateValues', 'nlev') h.alias('numberOfCoordinatesValues', 'nlev') h.alias('numberOfVerticalGridDescriptors', 'nlev') else: if (h.get_l('NV') == 0): h.add(_.Transient('PVPresent', 0)) else: h.add(_.Transient('PVPresent', 1)) if (h.get_l('PVPresent') or (h.get_l('NV') > 0)): h.add(_.Ieeefloat('pv', 4, _.Get('numberOfCoordinatesValues'))) h.alias('vertical.pv', 'pv') def deletePV_inline_concept(h): def wrapped(h): PVPresent = h.get_l('PVPresent') NV = h.get_l('NV') if PVPresent == 0 and NV == 0: return 1 return wrapped h.add( _.Concept('deletePV', 'unknown', concepts=deletePV_inline_concept(h))) h.add( _.Md5('md5Section4', _.Get('offsetSection4'), _.Get('section4Length')))
def load(h): h.add( _.Codetable('localDefinitionNumber', 1, "grib1/localDefinitionNumber.7.table")) _.Template('grib1/local.7.[localDefinitionNumber:l].def').load(h)
def load(h): h.add(_.Position('offsetSection2')) h.add(_.Section_length('section2Length', 3)) h.add(_.Section_pointer('section2Pointer', _.Get('offsetSection2'), _.Get('section2Length'), 2)) h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.add(_.Transient('shapeOfTheEarth', 6)) h.add(_.Unsigned('numberOfVerticalCoordinateValues', 1)) h.add(_.Constant('neitherPresent', 255)) h.alias('NV', 'numberOfVerticalCoordinateValues') h.alias('numberOfCoordinatesValues', 'numberOfVerticalCoordinateValues') h.add(_.Unsigned('pvlLocation', 1)) h.add(_.Codetable('dataRepresentationType', 1, "grib1/6.table")) h.add(_.Codetable_title('gridDefinitionDescription', _.Get('dataRepresentationType'))) h.alias('isRotatedGrid', 'zero') if (h.get_l('dataRepresentationType') < 192): _.Template('grib1/grid_definition_[dataRepresentationType:l].def').load(h) else: _.Template('grib1/grid_definition_[dataRepresentationType:l].[centre:l].def').load(h) h.add(_.Position('endGridDefinition')) h.add(_.Position('offsetBeforePV')) h.add(_.Transient('PVPresent', (_.Get('NV') > 0))) if (h.get_l('pvlLocation') != h.get_l('neitherPresent')): h.add(_.Padto('padding_sec2_2', ((_.Get('offsetSection2') + _.Get('pvlLocation')) - 1))) else: h.add(_.Padto('padding_sec2_2', (_.Get('offsetSection2') + 32))) if h.get_l('PVPresent'): h.add(_.Ibmfloat('pv', 4, _.Get('NV'))) h.alias('vertical.pv', 'pv') h.add(_.Position('offsetBeforePL')) h.add(_.Transient('PLPresent', _.And((_.Get('section2Length') > (_.Get('offsetBeforePL') - _.Get('offsetSection2'))), (_.Get('section2Length') >= (((_.Get('Nj') * 2) + _.Get('offsetBeforePL')) - _.Get('offsetSection2')))))) if h.get_l('PLPresent'): h.add(_.Constant('numberOfOctectsForNumberOfPoints', 2)) h.add(_.Constant('interpretationOfNumberOfPoints', 1)) h.add(_.Unsigned('pl', 2, _.Get('Nj'))) h.alias('geography.pl', 'pl') if ((h.get_l('PVPresent') == 0) and (h.get_l('PLPresent') == 0)): h.add(_.Padto('padding_sec2_1', (_.Get('offsetSection2') + 32))) pass # when block pass # when block h.alias('reducedGrid', 'PLPresent') def deletePV_inline_concept(h): def wrapped(h): PVPresent = h.get_l('PVPresent') NV = h.get_l('NV') if PVPresent == 0 and NV == 0: return 1 return wrapped h.add(_.Concept('deletePV', 'unknown', concepts=deletePV_inline_concept(h))) h.add(_.Padtoeven('padding_sec2_3', _.Get('offsetSection2'), _.Get('section2Length'))) h.add(_.Md5('md5Section2', _.Get('offsetSection2'), _.Get('section2Length'))) h.alias('md5GridSection', 'md5Section2')
def load(h): h.add( _.Codetable('shapeOfTheEarth', 1, "3.2.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('scaleFactorOfRadiusOfSphericalEarth', 1)) h.add(_.Unsigned('scaledValueOfRadiusOfSphericalEarth', 4)) h.add(_.Unsigned('scaleFactorOfEarthMajorAxis', 1)) h.alias('scaleFactorOfMajorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMajorAxis') h.add(_.Unsigned('scaledValueOfEarthMajorAxis', 4)) h.alias('scaledValueOfMajorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMajorAxis') h.add(_.Unsigned('scaleFactorOfEarthMinorAxis', 1)) h.alias('scaleFactorOfMinorAxisOfOblateSpheroidEarth', 'scaleFactorOfEarthMinorAxis') h.add(_.Unsigned('scaledValueOfEarthMinorAxis', 4)) h.alias('scaledValueOfMinorAxisOfOblateSpheroidEarth', 'scaledValueOfEarthMinorAxis') h.alias('earthIsOblate', 'one') if (h.get_l('shapeOfTheEarth') == 0): h.add(_.Transient('radius', 6367470)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 1): h.add( _.From_scale_factor_scaled_value( 'radius', _.Get('scaleFactorOfRadiusOfSphericalEarth'), _.Get('scaledValueOfRadiusOfSphericalEarth'))) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 6): h.add(_.Transient('radius', 6371229)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 8): h.add(_.Transient('radius', 6371200)) h.alias('radiusOfTheEarth', 'radius') h.alias('radiusInMetres', 'radius') h.alias('earthIsOblate', 'zero') if (h.get_l('shapeOfTheEarth') == 2): h.add(_.Transient('earthMajorAxis', 6.37816e+06)) h.add(_.Transient('earthMinorAxis', 6.35678e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 3): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.add( _.Divdouble('earthMajorAxisInMetres', _.Get('earthMajorAxis'), 0.001)) h.add( _.Divdouble('earthMinorAxisInMetres', _.Get('earthMinorAxis'), 0.001)) if (h.get_l('shapeOfTheEarth') == 7): h.add( _.From_scale_factor_scaled_value( 'earthMajorAxis', _.Get('scaleFactorOfEarthMajorAxis'), _.Get('scaledValueOfEarthMajorAxis'))) h.add( _.From_scale_factor_scaled_value( 'earthMinorAxis', _.Get('scaleFactorOfEarthMinorAxis'), _.Get('scaledValueOfEarthMinorAxis'))) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if ((h.get_l('shapeOfTheEarth') == 4) or (h.get_l('shapeOfTheEarth') == 5)): h.add(_.Transient('earthMajorAxis', 6.37814e+06)) h.add(_.Transient('earthMinorAxis', 6.35675e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') if (h.get_l('shapeOfTheEarth') == 9): h.add(_.Transient('earthMajorAxis', 6.37756e+06)) h.add(_.Transient('earthMinorAxis', 6.35626e+06)) h.alias('earthMajorAxisInMetres', 'earthMajorAxis') h.alias('earthMinorAxisInMetres', 'earthMinorAxis') h.add(_.Unsigned('Ni', 4)) h.alias('numberOfPointsAlongAParallel', 'Ni') h.alias('Nx', 'Ni') h.add(_.Unsigned('Nj', 4)) h.alias('numberOfPointsAlongAMeridian', 'Nj') h.alias('Ny', 'Nj') h.alias('geography.Ni', 'Ni') h.alias('geography.Nj', 'Nj') h.add(_.Unsigned('basicAngleOfTheInitialProductionDomain', 4)) h.add( _.Transient('mBasicAngle', (_.Get('basicAngleOfTheInitialProductionDomain') * _.Get('oneMillionConstant')))) h.add(_.Transient('angleMultiplier', 1)) h.add(_.Transient('mAngleMultiplier', 1000000)) pass # when block h.add(_.Unsigned('subdivisionsOfBasicAngle', 4)) h.add(_.Transient('angleDivisor', 1000000)) pass # when block h.add(_.Signed('latitudeOfFirstGridPoint', 4)) h.alias('La1', 'latitudeOfFirstGridPoint') h.add(_.Signed('longitudeOfFirstGridPoint', 4)) h.alias('Lo1', 'longitudeOfFirstGridPoint') h.add( _.Codeflag('resolutionAndComponentFlags', 1, "grib2/tables/[tablesVersion]/3.3.table")) h.add( _.Bit('resolutionAndComponentFlags1', _.Get('resolutionAndComponentFlags'), 7)) h.add( _.Bit('resolutionAndComponentFlags2', _.Get('resolutionAndComponentFlags'), 6)) h.add( _.Bit('iDirectionIncrementGiven', _.Get('resolutionAndComponentFlags'), 5)) h.add( _.Bit('jDirectionIncrementGiven', _.Get('resolutionAndComponentFlags'), 4)) h.add(_.Bit('uvRelativeToGrid', _.Get('resolutionAndComponentFlags'), 3)) h.add( _.Bit('resolutionAndComponentFlags6', _.Get('resolutionAndComponentFlags'), 7)) h.add( _.Bit('resolutionAndComponentFlags7', _.Get('resolutionAndComponentFlags'), 6)) h.add( _.Bit('resolutionAndComponentFlags8', _.Get('resolutionAndComponentFlags'), 6)) def ijDirectionIncrementGiven_inline_concept(h): def wrapped(h): iDirectionIncrementGiven = h.get_l('iDirectionIncrementGiven') jDirectionIncrementGiven = h.get_l('jDirectionIncrementGiven') if iDirectionIncrementGiven == 1 and jDirectionIncrementGiven == 1: return 1 if iDirectionIncrementGiven == 1 and jDirectionIncrementGiven == 0: return 0 if iDirectionIncrementGiven == 0 and jDirectionIncrementGiven == 1: return 0 if iDirectionIncrementGiven == 0 and jDirectionIncrementGiven == 0: return 0 return wrapped h.add( _.Concept('ijDirectionIncrementGiven', None, concepts=ijDirectionIncrementGiven_inline_concept(h))) h.alias('DiGiven', 'iDirectionIncrementGiven') h.alias('DjGiven', 'jDirectionIncrementGiven') h.add(_.Signed('latitudeOfLastGridPoint', 4)) h.alias('La2', 'latitudeOfLastGridPoint') h.add(_.Signed('longitudeOfLastGridPoint', 4)) h.alias('Lo2', 'longitudeOfLastGridPoint') h.add(_.Unsigned('iDirectionIncrement', 4)) h.alias('Di', 'iDirectionIncrement') h.add(_.Unsigned('N', 4)) h.alias('numberOfParallelsBetweenAPoleAndTheEquator', 'N') h.alias('geography.N', 'N') h.add( _.Codeflag('scanningMode', 1, "grib2/tables/[tablesVersion]/3.4.table")) h.add(_.Bit('iScansNegatively', _.Get('scanningMode'), 7)) h.add(_.Bit('jScansPositively', _.Get('scanningMode'), 6)) h.add(_.Bit('jPointsAreConsecutive', _.Get('scanningMode'), 5)) h.add(_.Bit('alternativeRowScanning', _.Get('scanningMode'), 4)) if h.get_l('jPointsAreConsecutive'): h.alias('numberOfRows', 'Ni') h.alias('numberOfColumns', 'Nj') else: h.alias('numberOfRows', 'Nj') h.alias('numberOfColumns', 'Ni') h.alias('geography.iScansNegatively', 'iScansNegatively') h.alias('geography.jScansPositively', 'jScansPositively') h.alias('geography.jPointsAreConsecutive', 'jPointsAreConsecutive') h.add(_.Transient('iScansPositively', _.Not(_.Get('iScansNegatively')))) h.add(_.Bit('scanningMode5', _.Get('scanningMode'), 3)) h.add(_.Bit('scanningMode6', _.Get('scanningMode'), 2)) h.add(_.Bit('scanningMode7', _.Get('scanningMode'), 1)) h.add(_.Bit('scanningMode8', _.Get('scanningMode'), 0)) h.add( _.Change_scanning_direction('swapScanningX', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('xFirst'), _.Get('xLast'), _.Get('x'))) h.alias('swapScanningLon', 'swapScanningX') h.add( _.Change_scanning_direction('swapScanningY', _.Get('values'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('jScansPositively'), _.Get('yFirst'), _.Get('yLast'), _.Get('y'))) h.alias('swapScanningLat', 'swapScanningY') h.add( _.G2grid('g2grid', _.Get('latitudeOfFirstGridPoint'), _.Get('longitudeOfFirstGridPoint'), _.Get('latitudeOfLastGridPoint'), _.Get('longitudeOfLastGridPoint'), _.Get('iDirectionIncrement'), None, _.Get('basicAngleOfTheInitialProductionDomain'), _.Get('subdivisionsOfBasicAngle'))) h.add(_.G2latlon('latitudeOfFirstGridPointInDegrees', _.Get('g2grid'), 0)) h.alias('geography.latitudeOfFirstGridPointInDegrees', 'latitudeOfFirstGridPointInDegrees') h.add(_.G2latlon('longitudeOfFirstGridPointInDegrees', _.Get('g2grid'), 1)) h.alias('geography.longitudeOfFirstGridPointInDegrees', 'longitudeOfFirstGridPointInDegrees') h.add(_.G2latlon('latitudeOfLastGridPointInDegrees', _.Get('g2grid'), 2)) h.alias('geography.latitudeOfLastGridPointInDegrees', 'latitudeOfLastGridPointInDegrees') h.add(_.G2latlon('longitudeOfLastGridPointInDegrees', _.Get('g2grid'), 3)) h.alias('geography.longitudeOfLastGridPointInDegrees', 'longitudeOfLastGridPointInDegrees') h.add( _.G2latlon('iDirectionIncrementInDegrees', _.Get('g2grid'), 4, _.Get('iDirectionIncrementGiven'))) h.alias('geography.iDirectionIncrementInDegrees', 'iDirectionIncrementInDegrees') h.add( _.Global_gaussian('global', _.Get('N'), _.Get('Ni'), _.Get('iDirectionIncrement'), _.Get('latitudeOfFirstGridPoint'), _.Get('longitudeOfFirstGridPoint'), _.Get('latitudeOfLastGridPoint'), _.Get('longitudeOfLastGridPoint'), _.Get('PLPresent'), _.Get('pl'), _.Get('basicAngleOfTheInitialProductionDomain'), _.Get('subdivisionsOfBasicAngle'))) h.alias('xFirst', 'longitudeOfFirstGridPointInDegrees') h.alias('yFirst', 'latitudeOfFirstGridPointInDegrees') h.alias('xLast', 'longitudeOfLastGridPointInDegrees') h.alias('yLast', 'latitudeOfLastGridPointInDegrees') h.alias('latitudeFirstInDegrees', 'latitudeOfFirstGridPointInDegrees') h.alias('longitudeFirstInDegrees', 'longitudeOfFirstGridPointInDegrees') h.alias('latitudeLastInDegrees', 'latitudeOfLastGridPointInDegrees') h.alias('longitudeLastInDegrees', 'longitudeOfLastGridPointInDegrees') h.alias('DiInDegrees', 'iDirectionIncrementInDegrees') if (h._missing('Ni') and (h.get_l('PLPresent') == 1)): h.add( _.Iterator('ITERATOR', _.Get('gaussian_reduced'), _.Get('numberOfPoints'), _.Get('missingValue'), _.Get('values'), _.Get('latitudeOfFirstGridPointInDegrees'), _.Get('longitudeOfFirstGridPointInDegrees'), _.Get('latitudeOfLastGridPointInDegrees'), _.Get('longitudeOfLastGridPointInDegrees'), _.Get('N'), _.Get('pl'), _.Get('Nj'))) h.add( _.Nearest('NEAREST', _.Get('reduced'), _.Get('values'), _.Get('radius'), _.Get('Nj'), _.Get('pl'))) else: h.add( _.Iterator('ITERATOR', _.Get('gaussian'), _.Get('numberOfPoints'), _.Get('missingValue'), _.Get('values'), _.Get('longitudeFirstInDegrees'), _.Get('DiInDegrees'), _.Get('Ni'), _.Get('Nj'), _.Get('iScansNegatively'), _.Get('latitudeFirstInDegrees'), _.Get('latitudeLastInDegrees'), _.Get('N'), _.Get('jScansPositively'))) h.add( _.Nearest('NEAREST', _.Get('regular'), _.Get('values'), _.Get('radius'), _.Get('Ni'), _.Get('Nj'))) h.add(_.Latlonvalues('latLonValues', _.Get('values'))) h.alias('latitudeLongitudeValues', 'latLonValues') h.add(_.Latitudes('latitudes', _.Get('values'), 0)) h.add(_.Longitudes('longitudes', _.Get('values'), 0)) h.add(_.Latitudes('distinctLatitudes', _.Get('values'), 1)) h.add(_.Longitudes('distinctLongitudes', _.Get('values'), 1)) h.add( _.Octahedral_gaussian('isOctahedral', _.Get('N'), _.Get('Ni'), _.Get('PLPresent'), _.Get('pl'))) h.add( _.Gaussian_grid_name('gaussianGridName', _.Get('N'), _.Get('Ni'), _.Get('isOctahedral'))) h.alias('gridName', 'gaussianGridName') h.add( _.Number_of_points_gaussian( 'numberOfDataPointsExpected', _.Get('Ni'), _.Get('Nj'), _.Get('PLPresent'), _.Get('pl'), _.Get('N'), _.Get('latitudeOfFirstGridPointInDegrees'), _.Get('longitudeOfFirstGridPointInDegrees'), _.Get('latitudeOfLastGridPointInDegrees'), _.Get('longitudeOfLastGridPointInDegrees'), _.Get('zero'))) h.add( _.Evaluate('legacyGaussSubarea', (_.Get('numberOfDataPoints') != _.Get('numberOfDataPointsExpected')))) h.add(_.Signed('latitudeOfThePoleOfStretching', 4)) h.add(_.Signed('longitudeOfThePoleOfStretching', 4)) h.add( _.Scale('latitudeOfStretchingPoleInDegrees', _.Get('latitudeOfThePoleOfStretching'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.latitudeOfStretchingPoleInDegrees', 'latitudeOfStretchingPoleInDegrees') h.add( _.Scale('longitudeOfStretchingPoleInDegrees', _.Get('longitudeOfThePoleOfStretching'), _.Get('oneConstant'), _.Get('grib2divider'), _.Get('truncateDegrees'))) h.alias('geography.longitudeOfStretchingPoleInDegrees', 'longitudeOfStretchingPoleInDegrees') h.add(_.Unsigned('stretchingFactorScaled', 4)) h.add( _.Scale('stretchingFactor', _.Get('stretchingFactorScaled'), _.Get('oneConstant'), _.Get('grib2divider'))) h.alias('geography.stretchingFactor', 'stretchingFactor')
def load(h): h.add(_.Codetable('suiteName', 2, "grib2/tigge_suiteName.table")) h.alias('tiggeSuiteID', 'suiteName')