def load(h): h.add(_.Constant('tablesVersionLatest', 25)) h.add(_.Constant('million', 1000000)) h.add(_.Constant('grib2divider', 1000000)) h.alias('extraDimensionPresent', 'zero') h.alias('is_tigge', 'zero') h.alias('is_s2s', 'zero') h.add(_.Transient('is_efas', 0)) h.add(_.Transient('angleSubdivisions', _.Get('grib2divider'))) h.add(_.Gts_header('gts_header')) h.add(_.Gts_header('gts_TTAAii', 20, 6)) h.add(_.Gts_header('gts_CCCC', 27, 4)) h.add(_.Gts_header('gts_ddhh00', 32, 6)) h.add(_.Transient('missingValue', 9999)) h.add(_.Constant('ieeeFloats', 1)) h.add(_.Constant('isHindcast', 0)) h.add(_.Position('offsetSection0')) h.add(_.Constant('section0Length', 16)) h.add(_.Ascii('identifier', 4)) h.add(_.Unsigned('reserved', 2)) h.add(_.Codetable('discipline', 1, "0.0.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('editionNumber', 1)) h.alias('ls.edition', 'editionNumber') h.add(_.Section_length('totalLength', 8)) h.add(_.Position('startOfHeaders')) h.add(_.Section_pointer('section0Pointer', _.Get('offsetSection0'), _.Get('section0Length'), 0)) _.Template('grib2/sections.def').load(h) _.Template('grib2/section.8.def').load(h)
def load(h): h.add(_.Position('offsetSection6')) h.add(_.Position('offsetBSection6')) h.add(_.Section_length('section6Length', 4)) h.add(_.Section_pointer('section6', _.Get('offsetSection6'), _.Get('section6Length'), 6)) h.add(_.Unsigned('numberOfSection', 1)) h.add(_.Codetable('bitMapIndicator', 1, "6.0.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.G2bitmap_present('bitmapPresent', _.Get('bitMapIndicator'))) h.alias('geography.bitmapPresent', 'bitmapPresent') h.add(_.Transient('missingValuesPresent', _.Get('bitmapPresent'))) if (h.get_l('bitMapIndicator') == 0): if (h.get_l('dataRepresentationTemplateNumber') == 1): if (h.get_l('matrixBitmapsPresent') == 1): h.add(_.G2bitmap('primaryBitmap', _.Get('tableReference'), _.Get('missingValue'), _.Get('offsetBSection6'), _.Get('section6Length'), _.Get('numberOfDataMatrices'))) else: h.add(_.G2bitmap('bitmap', _.Get('tableReference'), _.Get('missingValue'), _.Get('offsetBSection6'), _.Get('section6Length'), _.Get('numberOfDataPoints'))) h.alias('geography.bitmap', 'bitmap') else: h.add(_.G2bitmap('bitmap', _.Get('tableReference'), _.Get('missingValue'), _.Get('offsetBSection6'), _.Get('section6Length'), _.Get('numberOfDataPoints'))) h.alias('geography.bitmap', 'bitmap') if (h.get_l('bitMapIndicator') == 255): if ((h.get_l('dataRepresentationTemplateNumber') == 2) or (h.get_l('dataRepresentationTemplateNumber') == 3)): h.add(_.Transient('missingValuesPresent', (_.Get('missingValueManagementUsed') != 0))) h.add(_.Md5('md5Section6', _.Get('offsetSection6'), _.Get('section6Length')))
def load(h): h.add(_.Section_length('section4Length', 3)) h.add(_.Unsigned('reserved1', 1)) h.add(_.Codeflag('missingDataFlag', 1, "grib1/1.table")) h.add(_.Unsigned('numberOfBytesPerInteger', 1)) h.add(_.Unsigned('reserved', 2)) h.add(_.Unsigned('numberOfCharacters', 3)) h.alias('numberOfChars', 'numberOfCharacters') h.add(_.Unsigned('numberOfFloats', 3)) h.add(_.Unsigned('numberOfIntegers', 3)) h.alias('numberOfInts', 'numberOfIntegers') h.add(_.Unsigned('numberOfLogicals', 3)) h.add(_.Unsigned('numberOfReservedBytes', 3)) h.add(_.Unsigned('reserved', 4)) h.add(_.Unsigned('reserved', 4)) h.add(_.Unsigned('reserved', 1)) h.add(_.Ibmfloat('floatValues', 4, _.Get('numberOfFloats'))) h.alias('floatVal', 'floatValues') if h.get_l('numberOfIntegers'): h.add(_.Signed('integerValues', 4, _.Get('numberOfIntegers'))) if h.get_l('numberOfCharacters'): h.add(_.StringUnsigned('charValues', 1, _.Get('numberOfCharacters'))) h.add(_.Section_padding('padding'))
def load(h): h.add(_.Position('offsetSection7')) h.add(_.Section_length('section7Length', 4)) h.add(_.Section_pointer('section7', _.Get('offsetSection7'), _.Get('section7Length'), 7)) h.add(_.Unsigned('numberOfSection', 1)) h.add(_.Position('offsetBeforeData')) _.Template('grib2/template.7.[dataRepresentationTemplateNumber:l].def').load(h) h.add(_.Decimal_precision('changeDecimalPrecision', _.Get('bitsPerValue'), _.Get('decimalScaleFactor'), _.Get('changingPrecision'), _.Get('values'))) h.add(_.Decimal_precision('decimalPrecision', _.Get('bitsPerValue'), _.Get('decimalScaleFactor'), _.Get('changingPrecision'))) h.alias('setDecimalPrecision', 'changeDecimalPrecision') h.add(_.Bits_per_value('setBitsPerValue', _.Get('values'), _.Get('bitsPerValue'))) h.add(_.Size('getNumberOfValues', _.Get('values'))) h.add(_.Scale_values('scaleValuesBy', _.Get('values'), _.Get('missingValue'))) h.add(_.Offset_values('offsetValuesBy', _.Get('values'), _.Get('missingValue'))) def productType_inline_concept(h): def wrapped(h): grib2LocalSectionPresent = h.get_l('grib2LocalSectionPresent') centre = h.get_l('centre') grib2LocalSectionNumber = h.get_l('grib2LocalSectionNumber') productDefinitionTemplateNumber = h.get_l('productDefinitionTemplateNumber') if grib2LocalSectionPresent == 1 and centre == 98 and grib2LocalSectionNumber == 500 and productDefinitionTemplateNumber == 2000: return 'obstat' return wrapped h.add(_.Concept('productType', 'unknown', concepts=productType_inline_concept(h))) h.add(_.Position('offsetAfterData')) h.add(_.Md5('md5Section7', _.Get('offsetSection7'), _.Get('section7Length'))) h.alias('md5DataSection', 'md5Section7')
def load(h): h.add(_.Position('offsetSection3')) h.add(_.Section_length('section3Length', 3)) h.add(_.Section_pointer('section3Pointer', _.Get('offsetSection3'), _.Get('section3Length'), 3)) h.add(_.Unsigned('numberOfUnusedBitsAtEndOfSection3', 1)) h.alias('unusedBitsInBitmap', 'numberOfUnusedBitsAtEndOfSection3') h.add(_.Unsigned('tableReference', 2)) h.add(_.Position('offsetBeforeBitmap')) h.add(_.G1bitmap('bitmap', _.Get('tableReference'), _.Get('missingValue'), _.Get('offsetSection3'), _.Get('section3Length'), _.Get('numberOfUnusedBitsAtEndOfSection3'))) h.alias('geography.bitmap', 'bitmap') h.add(_.Position('offsetAfterBitmap')) h.add(_.Padtoeven('padding_sec3_1', _.Get('offsetSection3'), _.Get('section3Length'))) h.add(_.Section_padding('section3Padding')) h.add(_.Md5('md5Section3', _.Get('offsetSection3'), _.Get('section3Length')))
def load(h): h.add(_.Position('offsetSection0')) h.add(_.Constant('section0Length', 16)) h.add(_.Ascii('identifier', 4)) h.add(_.Unsigned('reserved', 2)) h.add( _.Codetable('discipline', 1, "0.0.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('editionNumber', 1)) h.alias('ls.edition', 'editionNumber') h.add(_.Section_length('totalLength', 8)) h.add(_.Position('startOfHeaders')) h.add( _.Section_pointer('section0Pointer', _.Get('offsetSection0'), _.Get('section0Length'), 0))
def load(h): h.add(_.Position('offsetSection2')) h.add(_.Section_length('section2Length', 4)) h.add( _.Section_pointer('section2Pointer', _.Get('offsetSection2'), _.Get('section2Length'), 2)) h.add(_.Unsigned('numberOfSection', 1)) h.alias('tiggeSuiteID', 'zero') h.add(_.Transient('addEmptySection2', 0)) if (h.get_l('addEmptySection2') == 0): if ((h.get_l('grib2LocalSectionPresent') == 1) or ((h.get_l('section2Length') > 5) or h._new())): h.alias('section2Used', 'one') if ((h.get_l('productionStatusOfProcessedData') == 4) or (h.get_l('productionStatusOfProcessedData') == 5)): h.add( _.Codetable('tiggeLocalVersion', 2, "grib2/tiggeLocalVersion.table")) _.Template('grib2/local.tigge.[tiggeLocalVersion:l].def').load( h) if ((h.get_l('productionStatusOfProcessedData') == 10) or (h.get_l('productionStatusOfProcessedData') == 11)): h.add( _.Codetable('crraLocalVersion', 2, "grib2/crraLocalVersion.table")) _.Template('grib2/local.crra.[crraLocalVersion:l].def').load(h) h.add( _.Codetable( 'grib2LocalSectionNumber', 2, "grib2/grib2LocalSectionNumber.[centreForLocal:l].table")) if (h.get_l('grib2LocalSectionNumber') != 0): _.Template('grib2/local.[centreForLocal:l].def', True).load(h) else: h.add(_.Constant('deleteLocalDefinition', 1)) h.add(_.Position('offsetAfterCentreLocalSection')) h.add(_.Section_padding('section2Padding'))
def load(h): h.add(_.Section_length('section1Length', 3)) h.add(_.Unsigned('gribTablesVersionNo', 1)) h.add(_.Codetable('centre', 1, "common/c-1.table")) h.alias('ls.centre', 'centre') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('gridDefinition', 1)) h.add(_.Codeflag('flag', 1, "grib1/1.table")) h.add( _.Codetable('indicatorOfParameter', 1, "grib1/2.[centre:l].[gribTablesVersionNo:l].table")) h.add(_.StringCodetable('indicatorOfTypeOfLevel', 1, "grib1/3.table")) h.alias('ls.levelType', 'indicatorOfTypeOfLevel') h.add(_.Codetable('heightPressureEtcOfLevels', 2, "grib1/3.table")) 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(_.Codetable('indicatorOfUnitOfTimeRange', 1, "grib1/4.table")) h.add(_.Unsigned('periodOfTime', 1)) h.alias('P1', 'periodOfTime') h.add(_.Unsigned('periodOfTimeIntervals', 1))
def load(h): h.add(_.Position('offsetBSection5')) h.add(_.Position('offsetSection5')) h.add(_.Section_length('section5Length', 4)) h.add( _.Section_pointer('section5', _.Get('offsetSection5'), _.Get('section5Length'), 5)) h.add(_.Unsigned('numberOfSection', 1)) h.add(_.Unsigned('numberOfValues', 4)) h.alias('numberOfCodedValues', 'numberOfValues') h.alias('numberOfEffectiveValues', 'numberOfValues') h.add( _.Codetable('dataRepresentationTemplateNumber', 2, "5.0.table", _.Get('masterDir'), _.Get('localDir'))) def packingType_inline_concept(h): def wrapped(h): dataRepresentationTemplateNumber = h.get_l( 'dataRepresentationTemplateNumber') if dataRepresentationTemplateNumber == 0: return 'grid_simple' spectralType = h.get_l('spectralType') spectralMode = h.get_l('spectralMode') if dataRepresentationTemplateNumber == 51 and spectralType == 1 and spectralMode == 1: return 'spectral_complex' if dataRepresentationTemplateNumber == 50 and spectralType == 1 and spectralMode == 1: return 'spectral_simple' if dataRepresentationTemplateNumber == 1: return 'grid_simple_matrix' if dataRepresentationTemplateNumber == 2: return 'grid_complex' if dataRepresentationTemplateNumber == 3: return 'grid_complex_spatial_differencing' if dataRepresentationTemplateNumber == 40000: return 'grid_jpeg' if dataRepresentationTemplateNumber == 40: return 'grid_jpeg' if dataRepresentationTemplateNumber == 40010: return 'grid_png' if dataRepresentationTemplateNumber == 41: return 'grid_png' if dataRepresentationTemplateNumber == 42: return 'grid_ccsds' if dataRepresentationTemplateNumber == 4: return 'grid_ieee' if dataRepresentationTemplateNumber == 50001: return 'grid_second_order' if dataRepresentationTemplateNumber == 50002: return 'grid_second_order' if dataRepresentationTemplateNumber == 50002: return 'grid_second_order_boustrophedonic' if dataRepresentationTemplateNumber == 50001: return 'grid_second_order_no_boustrophedonic' if dataRepresentationTemplateNumber == 50001: return 'grid_second_order_row_by_row' if dataRepresentationTemplateNumber == 50001: return 'grid_second_order_constant_width' if dataRepresentationTemplateNumber == 50001: return 'grid_second_order_general_grib1' orderOfSPD = h.get_l('orderOfSPD') if dataRepresentationTemplateNumber == 50001 and orderOfSPD == 0: return 'grid_second_order_no_SPD' if dataRepresentationTemplateNumber == 50001 and orderOfSPD == 1: return 'grid_second_order_SPD1' if dataRepresentationTemplateNumber == 50001 and orderOfSPD == 2: return 'grid_second_order_SPD2' if dataRepresentationTemplateNumber == 50001 and orderOfSPD == 3: return 'grid_second_order_SPD3' if dataRepresentationTemplateNumber == 50000: return 'spectral_ieee' if dataRepresentationTemplateNumber == 61: return 'grid_simple_log_preprocessing' if dataRepresentationTemplateNumber == 53 and spectralType == 2: return 'bifourier_complex' return wrapped h.add( _.Concept('packingType', 'unknown', concepts=packingType_inline_concept(h))) _.Template( 'grib2/template.5.[dataRepresentationTemplateNumber:l].def').load(h) h.alias('ls.packingType', 'packingType') h.alias('dataRepresentation', 'packingType') h.alias('typeOfPacking', 'packingType') h.add(_.Transient('representationMode', 0)) h.add( _.Md5('md5Section5', _.Get('offsetSection5'), _.Get('section5Length')))
def load(h): h.add(_.Constant('gridDescriptionSectionPresent', 1)) h.add(_.Position('offsetSection3')) h.add(_.Section_length('section3Length', 4)) h.add( _.Section_pointer('section3Pointer', _.Get('offsetSection3'), _.Get('section3Length'), 3)) h.add(_.Unsigned('numberOfSection', 1)) h.add( _.Codetable('sourceOfGridDefinition', 1, "3.0.table", _.Get('masterDir'), _.Get('localDir'))) h.add(_.Unsigned('numberOfDataPoints', 4)) h.alias('numberOfPoints', 'numberOfDataPoints') h.add(_.Unsigned('numberOfOctectsForNumberOfPoints', 1)) h.add( _.Codetable('interpretationOfNumberOfPoints', 1, "3.11.table", _.Get('masterDir'), _.Get('localDir'))) if (h.get_l('numberOfOctectsForNumberOfPoints') == 0): h.add(_.Transient('PLPresent', 0)) else: h.add(_.Transient('PLPresent', 1)) h.add( _.Codetable('gridDefinitionTemplateNumber', 2, "3.1.table", _.Get('masterDir'), _.Get('localDir'))) h.add( _.Codetable_title('gridDefinitionDescription', _.Get('gridDefinitionTemplateNumber'))) h.alias('isRotatedGrid', 'zero') _.Template('grib2/template.3.[gridDefinitionTemplateNumber:l].def').load(h) if h.get_l('PLPresent'): if (h.get_l('numberOfOctectsForNumberOfPoints') == 1): h.add(_.Unsigned('pl', 1, _.Get('Nj'))) if (h.get_l('numberOfOctectsForNumberOfPoints') == 2): h.add(_.Unsigned('pl', 2, _.Get('Nj'))) if (h.get_l('numberOfOctectsForNumberOfPoints') == 3): h.add(_.Unsigned('pl', 3, _.Get('Nj'))) h.alias('geography.pl', 'pl') pass # when block h.add(_.Section_padding('section3Padding')) def gridType_inline_concept(h): def wrapped(h): gridDefinitionTemplateNumber = h.get_l( 'gridDefinitionTemplateNumber') PLPresent = h.get_l('PLPresent') if gridDefinitionTemplateNumber == 0 and PLPresent == 0: return 'regular_ll' if gridDefinitionTemplateNumber == 0 and PLPresent == 1: return 'reduced_ll' if gridDefinitionTemplateNumber == 1 and PLPresent == 0: return 'rotated_ll' if gridDefinitionTemplateNumber == 2 and PLPresent == 0: return 'stretched_ll' if gridDefinitionTemplateNumber == 3 and PLPresent == 0: return 'stretched_rotated_ll' if gridDefinitionTemplateNumber == 10 and PLPresent == 0: return 'mercator' if gridDefinitionTemplateNumber == 12 and PLPresent == 0: return 'transverse_mercator' if gridDefinitionTemplateNumber == 20 and PLPresent == 0: return 'polar_stereographic' if gridDefinitionTemplateNumber == 30 and PLPresent == 0: return 'lambert' if gridDefinitionTemplateNumber == 31 and PLPresent == 0: return 'albers' if gridDefinitionTemplateNumber == 40 and PLPresent == 0: return 'regular_gg' numberOfOctectsForNumberOfPoints = h.get_l( 'numberOfOctectsForNumberOfPoints') iDirectionIncrementGiven = h.get_l('iDirectionIncrementGiven') numberOfPointsAlongAParallel = h.get_l( 'numberOfPointsAlongAParallel') if gridDefinitionTemplateNumber == 40 and PLPresent == 1 and numberOfOctectsForNumberOfPoints == 2 and iDirectionIncrementGiven == 0 and numberOfPointsAlongAParallel == h._missing( ): return 'reduced_gg' if gridDefinitionTemplateNumber == 41 and PLPresent == 0: return 'rotated_gg' if gridDefinitionTemplateNumber == 41 and PLPresent == 1 and numberOfOctectsForNumberOfPoints == 2 and iDirectionIncrementGiven == 0 and numberOfPointsAlongAParallel == h._missing( ): return 'reduced_rotated_gg' if gridDefinitionTemplateNumber == 42 and PLPresent == 0: return 'stretched_gg' if gridDefinitionTemplateNumber == 42 and PLPresent == 1 and numberOfOctectsForNumberOfPoints == 2 and iDirectionIncrementGiven == 0 and numberOfPointsAlongAParallel == h._missing( ): return 'reduced_stretched_gg' if gridDefinitionTemplateNumber == 43 and PLPresent == 0: return 'stretched_rotated_gg' if gridDefinitionTemplateNumber == 43 and PLPresent == 1 and numberOfOctectsForNumberOfPoints == 2 and iDirectionIncrementGiven == 0 and numberOfPointsAlongAParallel == h._missing( ): return 'reduced_stretched_rotated_gg' if gridDefinitionTemplateNumber == 41 and PLPresent == 0: return 'regular_rotated_gg' if gridDefinitionTemplateNumber == 42 and PLPresent == 0: return 'regular_stretched_gg' if gridDefinitionTemplateNumber == 43 and PLPresent == 0: return 'regular_stretched_rotated_gg' if gridDefinitionTemplateNumber == 50 and PLPresent == 0: return 'sh' if gridDefinitionTemplateNumber == 51 and PLPresent == 0: return 'rotated_sh' if gridDefinitionTemplateNumber == 52 and PLPresent == 0: return 'stretched_sh' if gridDefinitionTemplateNumber == 53 and PLPresent == 0: return 'stretched_rotated_sh' if gridDefinitionTemplateNumber == 90 and PLPresent == 0: return 'space_view' if gridDefinitionTemplateNumber == 100 and PLPresent == 0: return 'triangular_grid' if gridDefinitionTemplateNumber == 101 and PLPresent == 0: return 'unstructured_grid' if gridDefinitionTemplateNumber == 110 and PLPresent == 0: return 'equatorial_azimuthal_equidistant' if gridDefinitionTemplateNumber == 120 and PLPresent == 0: return 'azimuth_range' if gridDefinitionTemplateNumber == 130 and PLPresent == 0: return 'irregular_latlon' if gridDefinitionTemplateNumber == 140 and PLPresent == 0: return 'lambert_azimuthal_equal_area' if gridDefinitionTemplateNumber == 1000 and PLPresent == 0: return 'cross_section' if gridDefinitionTemplateNumber == 1100 and PLPresent == 0: return 'Hovmoller' if gridDefinitionTemplateNumber == 1200 and PLPresent == 0: return 'time_section' if gridDefinitionTemplateNumber == 33 and PLPresent == 0: return 'lambert_lam' if gridDefinitionTemplateNumber == 13 and PLPresent == 0: return 'mercator_lam' if gridDefinitionTemplateNumber == 23 and PLPresent == 0: return 'polar_stereographic_lam' if gridDefinitionTemplateNumber == 63 and PLPresent == 0: return 'lambert_bf' if gridDefinitionTemplateNumber == 61 and PLPresent == 0: return 'mercator_bf' if gridDefinitionTemplateNumber == 62 and PLPresent == 0: return 'polar_stereographic_bf' if PLPresent == 0: return 'unknown' if PLPresent == 1: return 'unknown_PLPresent' return wrapped h.add(_.Concept('gridType', None, concepts=gridType_inline_concept(h))) h.alias('ls.gridType', 'gridType') h.alias('geography.gridType', 'gridType') h.alias('typeOfGrid', 'gridType') h.add( _.Md5('md5Section3', _.Get('offsetSection3'), _.Get('section3Length'))) h.alias('md5GridSection', 'md5Section3')
def load(h): h.add(_.Section_length('section1Length', 3)) h.add(_.Unsigned('gribTablesVersionNo', 1)) h.add(_.StringCodetable('centre', 1, "common/c-1.table")) h.alias('ls.centre', 'centre') h.alias('identificationOfOriginatingGeneratingCentre', 'centre') h.add(_.Unsigned('generatingProcessIdentifier', 1)) h.add(_.Unsigned('gridDefinition', 1)) h.add(_.Codeflag('flag', 1, "grib1/1.table")) h.add( _.Codetable('indicatorOfParameter', 1, "grib1/2.[centre:l].[gribTablesVersionNo:l].table")) h.add(_.Codetable('indicatorOfTypeOfLevel', 1, "grib1/3.table")) h.add(_.Codetable('heightPressureEtcOfLevels', 2, "grib1/3.table")) h.alias('ls.levelType', 'indicatorOfTypeOfLevel') 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( _.Budgdate('dataDate', _.Get('yearOfCentury'), _.Get('month'), _.Get('day'))) h.alias('ls.date', 'dataDate') h.add(_.Time('dataTime', _.Get('hour'), _.Get('minute'), _.Get('second'))) h.alias('ls.time', 'dataTime') h.add( _.Julian_day('julianDay', _.Get('dataDate'), _.Get('hour'), _.Get('minute'), _.Get('second'))) h.add(_.Codetable('indicatorOfUnitOfTimeRange', 1, "grib1/4.table")) h.add(_.Unsigned('periodOfTime', 1)) h.alias('P1', 'periodOfTime') h.add(_.Unsigned('periodOfTimeIntervals', 1)) h.alias('P2', 'periodOfTimeIntervals') h.add(_.Codetable('timeRangeIndicator', 1, "grib1/5.table")) h.add(_.TransientCodetable('stepUnits', 1, "grib2/tables/1/4.4.table")) def stepType_inline_concept(h): def wrapped(h): timeRangeIndicator = h.get_l('timeRangeIndicator') if timeRangeIndicator == 1: return 'instant' if timeRangeIndicator == 10: return 'instant' if timeRangeIndicator == 0: return 'instant' if timeRangeIndicator == 3: return 'avg' if timeRangeIndicator == 4: return 'accum' if timeRangeIndicator == 2: return 'max' if timeRangeIndicator == 2: return 'min' if timeRangeIndicator == 5: return 'diff' if timeRangeIndicator == 2: return 'rms' if timeRangeIndicator == 2: return 'sd' if timeRangeIndicator == 2: return 'cov' if timeRangeIndicator == 2: return 'ratio' return wrapped h.add(_.Concept('stepType', None, concepts=stepType_inline_concept(h))) h.add( _.G1step_range('stepRange', _.Get('P1'), _.Get('P2'), _.Get('timeRangeIndicator'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('stepUnits'), _.Get('stepType'))) h.alias('ls.stepRange', 'stepRange') h.add(_.Long_vector('startStep', _.Get('stepRange'), 0)) h.add(_.Long_vector('endStep', _.Get('stepRange'), 1)) h.add( _.G1step_range('stepRangeInHours', _.Get('P1'), _.Get('P2'), _.Get('timeRangeIndicator'), _.Get('indicatorOfUnitOfTimeRange'), _.Get('one'), _.Get('stepType'))) h.add(_.Long_vector('startStepInHours', _.Get('stepRangeInHours'), 0)) h.add(_.Long_vector('endStepInHours', _.Get('stepRangeInHours'), 1)) h.add(_.Constant('paramId', 0)) h.alias('parameter', 'paramId') h.alias('ls.parameter', 'parameter') h.add(_.Section_padding('section1Padding'))
def load(h): h.add(_.Section_length('section4Length', 3)) h.add(_.Unsigned('reserved1', 1)) if (h.get_l('reserved1') == 0): h.add(_.Codeflag('missingDataFlag', 1, "grib1/1.table")) h.add(_.Unsigned('numberOfBytesPerInteger', 1)) h.add(_.Unsigned('reserved', 2)) h.add(_.Unsigned('numberOfChars', 3)) h.add(_.Unsigned('numberOfFloats', 3)) h.add(_.Unsigned('numberOfIntegers', 3)) h.alias('numberOfInts', 'numberOfIntegers') h.add(_.Unsigned('numberOfLogicals', 3)) h.add(_.Unsigned('numberOfReservedBytes', 3)) h.add(_.Unsigned('reserved', 4)) h.add(_.Unsigned('reserved', 4)) h.add(_.Unsigned('reserved', 1)) h.add(_.Ibmfloat('floatValues', 4, _.Get('numberOfFloats'))) h.alias('floatVal', 'floatValues') if (h.get_l('numberOfBytesPerInteger') == 1): h.add(_.Signed('integerValues', 1, _.Get('numberOfIntegers'))) if (h.get_l('numberOfBytesPerInteger') == 2): h.add(_.Signed('integerValues', 2, _.Get('numberOfIntegers'))) if (h.get_l('numberOfBytesPerInteger') == 3): h.add(_.Signed('integerValues', 3, _.Get('numberOfIntegers'))) if (h.get_l('numberOfBytesPerInteger') == 4): h.add(_.Signed('integerValues', 4, _.Get('numberOfIntegers'))) if (h.get_l('numberOfChars') >= 12): h.add(_.Ascii('marsClass', 2)) h.add(_.Ascii('dummy1', 2)) h.add(_.Ascii('marsType', 2)) h.add(_.Ascii('dummy2', 2)) h.add(_.Ascii('experimentVersionNumber', 4)) h.alias('expver', 'experimentVersionNumber') h.alias('marsExpver', 'experimentVersionNumber') h.add( _.Constant('numberOfRemaininChars', (_.Get('numberOfChars') - 12))) with h.list('charValues'): for i in range(0, h.get_l('numberOfRemaininChars')): h.add(_.Ascii('char', 1)) h.add(_.Constant('zero', 0)) def isEps_inline_concept(h): def wrapped(h): marsType = h.get_s('marsType') if marsType == "pf": return 1 return wrapped h.add(_.Concept('isEps', 'zero', concepts=isEps_inline_concept(h))) def isSens_inline_concept(h): def wrapped(h): marsType = h.get_s('marsType') if marsType == "sf": return 1 return wrapped h.add( _.Concept('isSens', 'zero', concepts=isSens_inline_concept(h))) h.add(_.Constant('oper', "oper")) def marsStream_inline_concept(h): def wrapped(h): marsType = h.get_s('marsType') if marsType == "pf": return 'enfo' if marsType == "cf": return 'enfo' if marsType == "sf": return 'sens' return wrapped h.add( _.Concept('marsStream', 'oper', concepts=marsStream_inline_concept(h))) if h.get_l('isEps'): h.add(_.Constant('perturbationNumber', 0)) h.alias('mars.number', 'perturbationNumber') if h.get_l('isSens'): h.add(_.Constant('iterationNumber', 0)) h.add(_.Constant('diagnosticNumber', 0)) h.alias('mars.iteration', 'iterationNumber') h.alias('mars.diagnostic', 'diagnosticNumber') h.alias('mars.stream', 'marsStream') h.alias('mars.class', 'marsClass') h.alias('mars.type', 'marsType') h.alias('mars.expver', 'marsExpver') else: with h.list('charValues'): for i in range(0, h.get_l('numberOfChars')): h.add(_.Ascii('char', 1)) else: h.add(_.Section_padding('padding'))
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(_.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(_.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(_.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')))