示例#1
0
def load(h):

    h.add(_.Constant('GRIBEXSection1Problem', (120 - _.Get('section1Length'))))
    h.alias('grib2LocalSectionPresent', 'present')
    h.add(_.Constant('grib2LocalSectionNumber', 18))

    if (h.get_s('stepType') == "instant"):
        h.alias('productDefinitionTemplateNumber', 'epsPoint')
    else:
        h.alias('productDefinitionTemplateNumber', 'epsContinous')

    _.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(_.Codetable('dataOrigin', 1, "common/c-1.table"))
    h.alias('origin', 'dataOrigin')
    h.add(_.Ascii('modelIdentifier', 4))
    h.add(_.Unsigned('consensusCount', 1))
    h.add(_.Pad('padding_loc18_1', 3))

    with h.list('consensus'):
        for i in range(0, h.get_l('consensusCount')):
            h.add(_.Ascii('ccccIdentifiers', 4))
    h.add(_.Padto('padding_loc18_2', (_.Get('offsetSection1') + 120)))
    h.alias('local.dataOrigin', 'dataOrigin')
    h.alias('local.modelIdentifier', 'modelIdentifier')
    h.alias('local.consensusCount', 'consensusCount')
示例#2
0
def load(h):

    h.add(_.Position('startOfHeaders'))
    h.add(_.Ascii('identifier', 4))
    h.alias('ls.identifier', 'identifier')
    h.add(_.Transient('missingValue', 9999))
    h.add(_.Constant('ieeeFloats', 0))
    h.add(_.Constant('zero', 0))
    _.Template('diag/section.1.def').load(h)
    _.Template('diag/section.4.def').load(h)
    h.add(_.Ascii('endMark', 4))
    h.add(_.Position('totalLength'))
示例#3
0
def load(h):

    h.add(_.Codetable('dataOrigin', 1, "common/c-1.table"))
    h.alias('mars.origin', 'dataOrigin')
    h.add(_.Ascii('modelIdentifier', 4))
    h.add(_.Unsigned('consensusCount', 1))

    with h.list('consensus'):
        for i in range(0, h.get_l('consensusCount')):
            h.add(_.Ascii('ccccIdentifiers', 4))
    h.alias('local.dataOrigin', 'dataOrigin')
    h.alias('local.modelIdentifier', 'modelIdentifier')
    h.alias('local.consensusCount', 'consensusCount')
示例#4
0
def load(h):

    h.add(_.Position('startOfHeaders'))
    h.add(_.Ascii('identifier', 4))
    h.alias('ls.identifier', 'identifier')
    h.add(_.Uint64('totalLength', 8))
    h.add(_.Uint8('version', 1))
    h.add(_.Uint8('spare', 1))
    _.Template('wrap/metadata.[version].def').load(h)
    h.add(_.Position('endOfHeadersMarker'))
    h.add(_.Constant('dataLength', ((_.Get('totalLength') - _.Get('endOfHeadersMarker')) - 4)))
    h.add(_.Blob('data', _.Get('dataLength')))
    h.add(_.Ascii('endMark', 4))
    h.add(_.Position('totalLength'))
示例#5
0
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.add(_.Ascii('Model_Identifier', 8))
    h.add(_.Ascii('LBC_Initial_Conditions', 8))
    h.add(_.Ascii('Model_LBC_Member_Identifier', 4))
    h.add(_.Ascii('Model_Additional_Information', 8))
    h.add(_.Pad('padding_loc245_1', 20))
    h.add(_.Unsigned('Extra_Data_FreeFormat_0_none', 2))
    h.add(_.Position('offsetFreeFormData'))
    h.add(_.Unsigned('freeFormData', 1, _.Get('Extra_Data_FreeFormat_0_none')))
    h.add(_.Padtomultiple('padding_loc245_2', _.Get('offsetSection1'), 80))
示例#6
0
def load(h):

    h.add(_.Constant('GRIBEXSection1Problem', (328 - _.Get('section1Length'))))
    _.Template('grib1/mars_labeling.def').load(h)
    h.add(_.Unsigned('clusterNumber', 1))
    h.alias('number', 'clusterNumber')
    h.add(_.Unsigned('totalNumberOfClusters', 1))
    h.alias('totalNumber', 'totalNumberOfClusters')
    h.add(_.Pad('padding_loc2_1', 1))
    h.add(_.Unsigned('clusteringMethod', 1))
    h.add(_.Unsigned('startTimeStep', 2))
    h.add(_.Unsigned('endTimeStep', 2))
    h.add(_.Signed('northernLatitudeOfDomain', 3))
    h.add(_.Signed('westernLongitudeOfDomain', 3))
    h.add(_.Signed('southernLatitudeOfDomain', 3))
    h.add(_.Signed('easternLongitudeOfDomain', 3))
    h.add(_.Ascii('clusteringDomain', 1))
    h.add(_.Unsigned('operationalForecastCluster', 1))
    h.add(_.Unsigned('controlForecastCluster', 1))
    h.add(_.Unsigned('representativeMember', 1))
    h.add(_.Codetable('climatologicalRegime', 1, "grib1/regime.table"))
    h.add(_.Unsigned('numberOfForecastsInCluster', 1))

    if (h.get_l('numberOfForecastsInCluster') > 0):
        h.add(
            _.Unsigned('ensembleForecastNumbers', 1,
                       _.Get('numberOfForecastsInCluster')))

    h.add(_.Padto('padding_loc2_2', (_.Get('offsetSection1') + 328)))
    h.alias('mars.number', 'clusterNumber')
    h.alias('mars.domain', 'clusteringDomain')
示例#7
0
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)
示例#8
0
def load(h):

    h.add(_.Constant('GRIBEXSection1Problem', (100 - _.Get('section1Length'))))
    _.Template('grib1/mars_labeling.def').load(h)
    h.add(_.Unsigned('forecastOrSingularVectorNumber', 2))
    h.add(_.Unsigned('numberOfIterations', 2))
    h.add(_.Unsigned('numberOfSingularVectorsComputed', 2))
    h.add(_.Unsigned('normAtInitialTime', 1))
    h.add(_.Unsigned('normAtFinalTime', 1))
    h.add(_.Unsigned('multiplicationFactorForLatLong', 4))
    h.add(_.Signed('northWestLatitudeOfVerficationArea', 4))
    h.add(_.Signed('northWestLongitudeOfVerficationArea', 4))
    h.add(_.Signed('southEastLatitudeOfVerficationArea', 4))
    h.add(_.Signed('southEastLongitudeOfVerficationArea', 4))
    h.add(_.Unsigned('accuracyMultipliedByFactor', 4))
    h.add(_.Unsigned('numberOfSingularVectorsEvolved', 2))
    h.add(_.Signed('NINT_LOG10_RITZ', 4))
    h.add(_.Signed('NINT_RITZ_EXP', 4))
    h.add(_.Unsigned('optimisationTime', 1))
    h.alias('mars.opttime', 'optimisationTime')
    h.add(_.Unsigned('forecastLeadTime', 1))
    h.alias('mars.leadtime', 'forecastLeadTime')
    h.add(_.Ascii('marsDomain', 1))
    h.add(_.Unsigned('methodNumber', 2))
    h.add(_.Unsigned('numberOfForecastsInEnsemble', 2))
    h.add(_.Unsigned('shapeOfVerificationArea', 1))
    h.add(_.Pad('padding_loc21_1', 1))
    h.alias('mars.domain', 'marsDomain')
示例#9
0
def load(h):

    h.add(_.Constant('section8Length', 4))
    h.add(_.Position('offsetSection8'))
    h.add(_.Ascii('7777', 4))
    h.add(
        _.Section_pointer('section8Pointer', _.Get('offsetSection8'),
                          _.Get('section8Length'), 8))
示例#10
0
def load(h):

    h.add(_.Position('startOfHeaders'))
    h.add(_.Ascii('identifier', 4))
    h.alias('ls.identifier', 'identifier')
    h.add(_.Transient('missingValue', 9999))
    h.add(_.Constant('ieeeFloats', 0))
    _.Template('tide/section.1.def').load(h)
    _.Template('tide/mars_labeling.def').load(h)
    h.add(_.Position('endOfHeadersMarker'))
    h.add(
        _.Evaluate('lengthOfHeaders',
                   (_.Get('endOfHeadersMarker') - _.Get('startOfHeaders'))))
    h.add(
        _.Md5('md5Headers', _.Get('startOfHeaders'), _.Get('lengthOfHeaders')))
    _.Template('tide/section.4.def').load(h)
    h.add(_.Ascii('endMark', 4))
    h.add(_.Position('totalLength'))
示例#11
0
def load(h):

    h.add(_.Constant('identifier', "HDF5"))
    h.add(_.Ascii('signature', 8))
    h.add(_.Uint8('versionNumberOfSuperblock', 1))

    if ((h.get_l('versionNumberOfSuperblock') == 0)
            or (h.get_l('versionNumberOfSuperblock') == 1)):
        h.add(_.Uint8('versionNumOfFilesFreeSpaceStorage', 1))
        h.add(_.Uint8('versionNumOfRootGroupSymbolTableEntry', 1))
        h.add(_.Uint8('reserved1', 1))
        h.add(_.Uint8('versionNumOfSharedHeaderMessageFormat', 1))
        h.add(_.Uint8('sizeOfOffsets', 1))
        h.add(_.Uint8('sizeOfLength', 1))
        h.add(_.Uint8('reserved2', 1))
        h.add(_.Unsigned('groupLeafNodeK', 2))
        h.add(_.Unsigned('groupInternalNodeK', 2))
        h.add(_.Unsigned('fileConsistencyFlags', 4))

        if (h.get_l('versionNumberOfSuperblock') == 1):
            h.add(_.Uint16('indexedStorageInternalNodeK', 2))
            h.add(_.Uint16('reserved3', 2))

        if (h.get_l('sizeOfOffsets') == 8):
            h.add(_.Uint64_little_endian('baseAddress', 8))
            h.add(_.Uint64_little_endian('addressOfFileFreeSpaceInfo', 8))
            h.add(_.Uint64_little_endian('endOfFileAddress', 8))
            h.add(_.Uint64_little_endian('driverInformationBlockAddress', 8))
            h.add(_.Uint64_little_endian('rootGroupSymbolTableEntry', 8))

        if (h.get_l('sizeOfOffsets') == 4):
            h.add(_.Uint32_little_endian('baseAddress', 4))
            h.add(_.Uint32_little_endian('addressOfFileFreeSpaceInfo', 4))
            h.add(_.Uint32_little_endian('endOfFileAddress', 4))
            h.add(_.Uint32_little_endian('driverInformationBlockAddress', 4))
            h.add(_.Uint32_little_endian('rootGroupSymbolTableEntry', 4))

    if ((h.get_l('versionNumberOfSuperblock') == 2)
            or (h.get_l('versionNumberOfSuperblock') == 3)):
        h.add(_.Uint8('sizeOfOffsets', 1))
        h.add(_.Uint8('sizeOfLength', 1))
        h.add(_.Uint8('fileConsistencyFlags', 1))

        if (h.get_l('sizeOfOffsets') == 8):
            h.add(_.Uint64_little_endian('baseAddress', 8))
            h.add(_.Uint64_little_endian('superblockExtensionAddress', 8))
            h.add(_.Uint64_little_endian('endOfFileAddress', 8))
            h.add(_.Uint64_little_endian('rootGroupObjectHeaderAddress', 8))

        if (h.get_l('sizeOfOffsets') == 4):
            h.add(_.Uint32_little_endian('baseAddress', 4))
            h.add(_.Uint32_little_endian('superblockExtensionAddress', 4))
            h.add(_.Uint32_little_endian('endOfFileAddress', 4))
            h.add(_.Uint32_little_endian('rootGroupObjectHeaderAddress', 4))
示例#12
0
def load(h):

    h.add(_.Constant('ieeeFloats', 0))
    h.add(_.Transient('eps', 0))
    h.add(_.Constant('two', 1))
    h.add(_.Constant('three', 1))
    h.add(_.Constant('eight', 8))
    h.add(_.Constant('eleven', 11))
    h.add(_.Constant('epsPoint', 1))
    h.add(_.Constant('epsContinous', 11))
    h.add(_.Constant('epsStatisticsPoint', 2))
    h.add(_.Constant('epsStatisticsContinous', 12))
    h.add(_.Headers_only('headersOnly'))
    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(_.Ascii('identifier', 4))
    h.add(_.Constant('offsetSection0', 0))
    h.add(_.Constant('section0Length', 8))
    h.add(_.Section_pointer('section0Pointer', _.Get('offsetSection0'), _.Get('section0Length'), 0))
    h.add(_.G1_message_length('totalLength', 3, _.Get('section4Length')))
    h.add(_.Position('startOfHeaders'))
    h.add(_.Unsigned('editionNumber', 1))
    _.Template('grib1/section.1.def').load(h)
    h.alias('ls.edition', 'editionNumber')
    h.add(_.Bit('gridDescriptionSectionPresent', _.Get('section1Flags'), 7))
    h.add(_.Gds_is_present('GDSPresent', _.Get('gridDescriptionSectionPresent'), _.Get('gridDefinition'), _.Get('bitmapPresent'), _.Get('values')))
    h.add(_.Bit('bitmapPresent', _.Get('section1Flags'), 6))
    h.alias('bitmapSectionPresent', 'bitmapPresent')
    h.alias('geography.bitmapPresent', 'bitmapPresent')
    h.alias('missingValuesPresent', 'bitmapPresent')
    h.add(_.Transient('angleSubdivisions', 1000))

    if h.get_l('gridDescriptionSectionPresent'):
        _.Template('grib1/section.2.def').load(h)
    else:
        _.Template('grib1/predefined_grid.def').load(h)

    h.add(_.Position('endOfHeadersMarker'))
    h.add(_.Evaluate('lengthOfHeaders', (_.Get('endOfHeadersMarker') - _.Get('startOfHeaders'))))
    h.add(_.Md5('md5Headers', _.Get('startOfHeaders'), _.Get('lengthOfHeaders')))

    if not (h.get_l('headersOnly')):
        h.add(_.Transient('missingValue', 9999))

        if h.get_l('bitmapPresent'):
            _.Template('grib1/section.3.def').load(h)
        else:
            h.add(_.Constant('tableReference', 0))

        _.Template('grib1/section.4.def').load(h)
        _.Template('grib1/section.5.def').load(h)
示例#13
0
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))
示例#14
0
def load(h):

    h.add(_.Constant('GRIBEXSection1Problem', (300 - _.Get('section1Length'))))
    _.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('modelIdentifier', 1))
    h.add(_.Signed('latitudeOfNorthWestCornerOfArea', 4))
    h.add(_.Signed('longitudeOfNorthWestCornerOfArea', 4))
    h.add(_.Signed('latitudeOfSouthEastCornerOfArea', 4))
    h.add(_.Signed('longitudeOfSouthEastCornerOfArea', 4))
    h.add(_.Unsigned('originalParameterNumber', 1))
    h.add(_.Unsigned('originalParameterTableNumber', 1))
    h.add(_.Pad('padding_loc50_1', 46))
    h.add(_.Ascii('optionalData', 184))
示例#15
0
def load(h):

    h.add(_.Constant('gridDefinitionTemplateNumber', 2))
    _.Template('grib1/grid_definition_latlon.def').load(h)
    h.add(_.Ascii('zeros', 4))
    h.add(_.Signed('latitudeOfStretchingPole', 3))
    h.add(_.Signed('longitudeOfStretchingPole', 3))
    h.add(
        _.Scale('latitudeOfStretchingPoleInDegrees',
                _.Get('latitudeOfStretchingPole'), _.Get('oneConstant'),
                _.Get('grib1divider'), _.Get('truncateDegrees')))
    h.alias('geography.latitudeOfStretchingPoleInDegrees',
            'latitudeOfStretchingPoleInDegrees')
    h.add(
        _.Scale('longitudeOfStretchingPoleInDegrees',
                _.Get('longitudeOfStretchingPole'), _.Get('oneConstant'),
                _.Get('grib1divider'), _.Get('truncateDegrees')))
    h.alias('geography.longitudeOfStretchingPoleInDegrees',
            'longitudeOfStretchingPoleInDegrees')
    h.add(_.Ibmfloat('stretchingFactor', 4))
    h.alias('geography.stretchingFactor', 'stretchingFactor')
示例#16
0
def load(h):

    h.add(_.Transient('defaultFaFieldName', ""))
    h.add(_.Transient('defaultFaLevelName', ""))
    h.add(_.Transient('defaultFaModelName', ""))
    h.add(
        _.Concept('faFieldName', 'defaultFaFieldName', 'faFieldName.def',
                  'conceptsMasterDir', 'conceptsLocalDirAll', False))
    h.add(
        _.Concept('faLevelName', 'defaultFaLevelName', 'faLevelName.def',
                  'conceptsMasterDir', 'conceptsLocalDirAll', False))
    h.add(
        _.Concept('faModelName', 'defaultFaModelName', 'faModelName.def',
                  'conceptsMasterDir', 'conceptsLocalDirAll', False))
    h.add(_.Transient('LSTCUM', 0))
    h.add(_.Transient('ZLMULT', 1))
    h.add(_.Transient('ZLBASE', 0))
    h.add(_.Ascii('CLNOMA', 16))
    h.add(_.Unsigned('INGRIB', 8))
    h.add(_.Unsigned('LLCOSP', 8))
    h.add(_.Unsigned('INBITS', 8))
    h.add(_.Signed('FMULTM', 8))
    h.add(_.Signed('FMULTE', 8))
示例#17
0
def load(h):

    h.add(_.Constant('gridDefinitionTemplateNumber', 1))
    _.Template('grib1/grid_definition_latlon.def').load(h)
    h.add(_.Ascii('zeros', 4))
    h.add(_.Signed('latitudeOfSouthernPole', 3))
    h.add(
        _.Scale('latitudeOfSouthernPoleInDegrees',
                _.Get('latitudeOfSouthernPole'), _.Get('oneConstant'),
                _.Get('grib1divider'), _.Get('truncateDegrees')))
    h.alias('geography.latitudeOfSouthernPoleInDegrees',
            'latitudeOfSouthernPoleInDegrees')
    h.add(_.Signed('longitudeOfSouthernPole', 3))
    h.add(
        _.Scale('longitudeOfSouthernPoleInDegrees',
                _.Get('longitudeOfSouthernPole'), _.Get('oneConstant'),
                _.Get('grib1divider'), _.Get('truncateDegrees')))
    h.alias('geography.longitudeOfSouthernPoleInDegrees',
            'longitudeOfSouthernPoleInDegrees')
    h.add(_.Ibmfloat('angleOfRotationInDegrees', 4))
    h.alias('geography.angleOfRotationInDegrees', 'angleOfRotationInDegrees')
    h.alias('angleOfRotation', 'angleOfRotationInDegrees')
    h.alias('isRotatedGrid', 'one')
示例#18
0
def load(h):

    h.add(_.Unsigned('forecastOrSingularVectorNumber', 2))
    h.add(_.Unsigned('numberOfIterations', 2))
    h.add(_.Unsigned('numberOfSingularVectorsComputed', 2))
    h.add(_.Unsigned('normAtInitialTime', 1))
    h.add(_.Unsigned('normAtFinalTime', 1))
    h.add(_.Unsigned('multiplicationFactorForLatLong', 4))
    h.add(_.Signed('northWestLatitudeOfVerficationArea', 4))
    h.add(_.Signed('northWestLongitudeOfVerficationArea', 4))
    h.add(_.Signed('southEastLatitudeOfVerficationArea', 4))
    h.add(_.Signed('southEastLongitudeOfVerficationArea', 4))
    h.add(_.Unsigned('accuracyMultipliedByFactor', 4))
    h.add(_.Unsigned('numberOfSingularVectorsEvolved', 2))
    h.add(_.Signed('NINT_LOG10_RITZ', 4))
    h.add(_.Signed('NINT_RITZ_EXP', 4))
    h.add(_.Unsigned('optimisationTime', 1))
    h.alias('mars.opttime', 'optimisationTime')
    h.add(_.Unsigned('forecastLeadTime', 1))
    h.alias('mars.leadtime', 'forecastLeadTime')
    h.add(_.Ascii('marsDomain', 1))
    h.add(_.Unsigned('methodNumber', 2))
    h.add(_.Unsigned('shapeOfVerificationArea', 1))
    h.alias('mars.domain', 'marsDomain')
示例#19
0
def load(h):

    h.add(_.Position('startOfHeaders'))
    h.add(_.Ascii('SOH', 4))
    h.add(_.Ascii('nnn', 3))
    h.add(_.Ascii('crcrlf', 3))
    h.add(_.Ascii('TT', 2))
    h.add(_.Ascii('AA', 2))
    h.add(_.Ascii('II', 2))
    h.add(_.Ascii('sp1', 1))
    h.add(_.Ascii('CCCC', 4))
    h.add(_.Ascii('sp2', 1))
    h.add(_.Ascii('YY', 2))
    h.add(_.Ascii('GG', 2))
    h.add(_.Ascii('gg', 2))
    h.add(_.Lookup('lBB', 2, 29, _.Get('BB')))

    if (((h.get_s('lBB') == "RR") or (h.get_s('lBB') == "CC"))
            or (h.get_s('lBB') == "AA")):
        h.add(_.Ascii('sp3', 1))
        h.add(_.Ascii('BBB', 3))
    else:
        h.add(_.Constant('BBB', "NNN"))

    h.alias('ls.BBB', 'BBB')
    h.alias('ls.count', 'count')
    h.alias('ls.TT', 'TT')
    h.alias('ls.AA', 'AA')
    h.alias('ls.II', 'II')
    h.alias('ls.CCCC', 'CCCC')
    h.alias('ls.YY', 'YY')
    h.alias('ls.GG', 'GG')
    h.alias('ls.gg', 'gg')
    h.add(_.Position('endOfHeadersMarker'))
    h.add(_.Message('theMessage', 4))
    h.add(
        _.Evaluate('lengthOfHeaders',
                   (_.Get('endOfHeadersMarker') - _.Get('startOfHeaders'))))
    h.add(
        _.Md5('md5Headers', _.Get('startOfHeaders'), _.Get('lengthOfHeaders')))
    h.add(_.Ascii('endMark', 4))
    h.add(_.Position('totalLength'))
    h.alias('ls.totalLength', 'totalLength')
示例#20
0
def load(h):

    h.add(_.Constant('gridDefinitionTemplateNumber', 0))
    _.Template('grib1/grid_definition_latlon.def').load(h)
    h.add(_.Ascii('zeros', 4))
示例#21
0
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.add(_.Ascii('************_EXPERIMENT_************', 4))
    h.add(_.Ascii('Experiment_Identifier', 8))
    h.add(_.Ascii('Sub-Experiment_Identifier', 8))
    h.add(_.Ascii('************_PRODUCT_***************', 4))
    h.add(_.Unsigned('Original_CodeTable_2_Version_Number', 1))
    h.add(_.Unsigned('Original_Parameter_Iden_CodeTable2', 1))
    h.add(_.Ascii('Original_Parameter_Identifier', 8))
    h.add(_.Ascii('Product_Identifier', 8))
    h.add(_.Unsigned('Threshold_Or_Distribution_0_no_1_yes', 2))
    h.add(_.Ascii('Threshold_Or_Distribution_Units', 4))
    h.add(_.Unsigned('At_least__Or_Distribut_Proportion_Of', 4))
    h.add(_.Unsigned('Less_Than_Or_To_Overall_Distribution', 4))
    h.add(_.Pad('padding_loc244_1', 40))
    h.add(_.Ascii('************_ENSEMBLE_**************', 4))
    h.add(_.Unsigned('Number_Combination_Ensembles_1_none', 2))
    h.add(_.Unsigned('Show_Combination_Ensem_E2_0_no_1_yes', 1))
    h.add(_.Unsigned('Show_Combination_Ensem_E3_0_no_1_yes', 1))
    h.add(_.Unsigned('Show_Combination_Ensem_E4_0_no_1_yes', 1))
    h.add(_.Pad('padding_loc244_2', 7))
    h.add(_.Unsigned('Total_Number_Members_Used', 2))
    h.add(_.Unsigned('Total_Number_Members_Possible', 2))
    h.add(_.Unsigned('Total_Number_Members_Missing', 2))
    h.add(_.Unsigned('Ensemble_Combination_Number', 2))
    h.add(_.Ascii('Ensemble_Identifier', 8))
    h.add(_.Unsigned('Local_Number_Members_Used', 2))
    h.add(_.Unsigned('Local_Number_Members_Possible', 2))
    h.add(_.Unsigned('Local_Number_Members_Missing', 2))

    with h.list('listMembersUsed'):
        for i in range(0, h.get_l('Local_Number_Members_Used')):
            h.add(_.Ascii('Used_Model_LBC', 4))

    with h.list('listMembersMissing'):
        for i in range(0, h.get_l('Local_Number_Members_Missing')):
            h.add(_.Ascii('Missing_Model_LBC', 4))

    if (h.get_l('Show_Combination_Ensem_E2_0_no_1_yes') == 1):
        h.add(_.Unsigned('Ensemble_Combinat_Number_0_none_E2', 2))
        h.add(_.Ascii('Ensemble_Identifier_E2', 8))
        h.add(_.Unsigned('Local_Number_Members_Used_E2', 2))
        h.add(_.Unsigned('Local_Number_Members_Possible_E2', 2))
        h.add(_.Unsigned('Local_Number_Members_Missing_E2', 2))
        h.add(_.Unsigned('Date_E2', 3))
        h.add(_.Unsigned('Hour_E2', 1))
        h.add(_.Unsigned('Minute_E2', 1))
        h.add(_.Unsigned('Time_Range_One_E2', 2))
        h.add(_.Unsigned('Time_Range_Two_E2', 2))

        with h.list('listMembersUsed2'):
            for i in range(0, h.get_l('Local_Number_Members_Used_E2')):
                h.add(_.Ascii('Used_Model_LBC_E2', 4))

        with h.list('listMembersMissing2'):
            for i in range(0, h.get_l('Local_Number_Members_Missing_E2')):
                h.add(_.Ascii('Missing_Model_LBC_E2', 4))

    if (h.get_l('Show_Combination_Ensem_E3_0_no_1_yes') == 1):
        h.add(_.Unsigned('Ensemble_Combinat_Number_0_none_E3', 2))
        h.add(_.Ascii('Ensemble_Identifier_E3', 8))
        h.add(_.Unsigned('Local_Number_Members_Used_E3', 2))
        h.add(_.Unsigned('Local_Number_Members_Possible_E3', 2))
        h.add(_.Unsigned('Local_Number_Members_Missing_E3', 2))
        h.add(_.Unsigned('Date_E3', 3))
        h.add(_.Unsigned('Hour_E3', 1))
        h.add(_.Unsigned('Minute_E3', 1))
        h.add(_.Unsigned('Time_Range_One_E3', 2))
        h.add(_.Unsigned('Time_Range_Two_E3', 2))

        with h.list('listMembersUsed3'):
            for i in range(0, h.get_l('Local_Number_Members_Used_E3')):
                h.add(_.Ascii('Used_Model_LBC_E3', 4))

        with h.list('listMembersMissing3'):
            for i in range(0, h.get_l('Local_Number_Members_Missing_E3')):
                h.add(_.Ascii('Missing_Model_LBC_E3', 4))

    if (h.get_l('Show_Combination_Ensem_E4_0_no_1_yes') == 1):
        h.add(_.Unsigned('Ensemble_Combinat_Number_0_none_E4', 2))
        h.add(_.Ascii('Ensemble_Identifier_E4', 8))
        h.add(_.Unsigned('Local_Number_Members_Used_E4', 2))
        h.add(_.Unsigned('Local_Number_Members_Possible_E4', 2))
        h.add(_.Unsigned('Local_Number_Members_Missing_E4', 2))
        h.add(_.Unsigned('Date_E4', 3))
        h.add(_.Unsigned('Hour_E4', 1))
        h.add(_.Unsigned('Minute_E4', 1))
        h.add(_.Unsigned('Time_Range_One_E4', 2))
        h.add(_.Unsigned('Time_Range_Two_E4', 2))

        with h.list('listMembersUsed4'):
            for i in range(0, h.get_l('Local_Number_Members_Used_E4')):
                h.add(_.Ascii('Used_Model_LBC_E4', 4))

        with h.list('listMembersMissing4'):
            for i in range(0, h.get_l('Local_Number_Members_Missing_E4')):
                h.add(_.Ascii('Missing_Model_LBC_E4', 4))

    h.add(_.Ascii('*********_EXTRA_DATA_***************', 4))
    h.add(_.Unsigned('Extra_Data_FreeFormat_0_none', 2))
    h.add(_.Position('offsetFreeFormData'))
    h.add(_.Unsigned('freeFormData', 1, _.Get('Extra_Data_FreeFormat_0_none')))
    h.add(_.Padtomultiple('padding_loc244_3', _.Get('offsetSection1'), 80))
示例#22
0
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'))