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')
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'))
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')
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'))
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))
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')
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(_.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')
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))
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'))
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))
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)
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(_.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))
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')
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))
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')
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')
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')
def load(h): h.add(_.Constant('gridDefinitionTemplateNumber', 0)) _.Template('grib1/grid_definition_latlon.def').load(h) h.add(_.Ascii('zeros', 4))
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))
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'))