# This program was automatically generated with bufr_dump -Epython # and then edited to add the bitmap. # See ECC-869 import sys import traceback from eccodes import * OUTPUT_FILENAME = "outfile_ecc_869_test.bufr" VERBOSE = 1 # verbose error reporting def bufr_encode(): ibufr = codes_bufr_new_from_samples("BUFR3_local") ivalues = ( 0, 0, 0, 0, ) codes_set_array(ibufr, "inputShortDelayedDescriptorReplicationFactor", ivalues) SIZE_OF_BMP = 41 bitMask = [1] * SIZE_OF_BMP bitMask[0] = 0 # marineObservingPlatformIdentifier bitMask[37] = 0 # pressureReducedToMeanSeaLevel codes_set_array(ibufr, "inputDataPresentIndicator", bitMask) codes_set(ibufr, "edition", 3) codes_set(ibufr, "masterTableNumber", 0) codes_set(ibufr, "bufrHeaderSubCentre", 0) codes_set(ibufr, "bufrHeaderCentre", 98) codes_set(ibufr, "updateSequenceNumber", 0) codes_set(ibufr, "dataCategory", 1) codes_set(ibufr, "dataSubCategory", 182) codes_set(ibufr, "masterTablesVersionNumber", 22) codes_set(ibufr, "localTablesVersionNumber", 0) codes_set(ibufr, "typicalYearOfCentury", 18) codes_set(ibufr, "typicalMonth", 11) codes_set(ibufr, "typicalDay", 21) codes_set(ibufr, "typicalHour", 21) codes_set(ibufr, "typicalMinute", 4) codes_set(ibufr, "rdbType", 1) codes_set(ibufr, "oldSubtype", 182) codes_set(ibufr, "localYear", 2018) codes_set(ibufr, "localMonth", 11) codes_set(ibufr, "localDay", 21) codes_set(ibufr, "localHour", 21) codes_set(ibufr, "localMinute", 4) codes_set(ibufr, "localSecond", 0) codes_set(ibufr, "ident", " 3101544") codes_set(ibufr, "rdbtimeDay", 21) codes_set(ibufr, "rdbtimeHour", 21) codes_set(ibufr, "rdbtimeMinute", 26) codes_set(ibufr, "rdbtimeSecond", 59) codes_set(ibufr, "rectimeDay", 10) codes_set(ibufr, "rectimeHour", 10) codes_set(ibufr, "rectimeMinute", 0) codes_set(ibufr, "rectimeSecond", 0) codes_set(ibufr, "correction1", 0) codes_set(ibufr, "correction1Part", 0) codes_set(ibufr, "correction2", 0) codes_set(ibufr, "correction2Part", 0) codes_set(ibufr, "correction3", 0) codes_set(ibufr, "correction3Part", 0) codes_set(ibufr, "correction4", 0) codes_set(ibufr, "correction4Part", 0) codes_set(ibufr, "qualityControl", 70) codes_set(ibufr, "newSubtype", 0) codes_set(ibufr, "numberOfSubsets", 1) codes_set(ibufr, "localLatitude", -3.598198000000000008e01) codes_set(ibufr, "localLongitude", -4.484317000000000064e01) codes_set(ibufr, "observedData", 1) codes_set(ibufr, "compressedData", 0) # Create the structure of the data section codes_set_array( ibufr, "unexpandedDescriptors", (315009, 222000, 236000, 101000 + SIZE_OF_BMP, 31031, 33007, 33007), ) codes_set(ibufr, "marineObservingPlatformIdentifier", 3101544) codes_set(ibufr, "marineObservingPlatformIdentifier->percentConfidence", 44) codes_set(ibufr, "longStationName", "SIO Lagrangian Drifter Lab") codes_set(ibufr, "dataBuoyType", 1) codes_set(ibufr, "#1#timeSignificance", 26) codes_set(ibufr, "#1#year", 2018) codes_set(ibufr, "#1#month", 11) codes_set(ibufr, "#1#day", 21) codes_set(ibufr, "#1#hour", 21) codes_set(ibufr, "#1#minute", 4) codes_set(ibufr, "latitude", -3.598198000000000008e01) codes_set(ibufr, "longitude", -4.484317000000000064e01) codes_set(ibufr, "platformTransmitterIdNumber", " 300234065315740") codes_set(ibufr, "dataCollectionLocationSystem", 8) codes_set(ibufr, "directionOfMotionOfMovingObservingPlatform", CODES_MISSING_LONG) codes_set(ibufr, "platformDriftSpeed", CODES_MISSING_DOUBLE) codes_set(ibufr, "qualityOfBuoySatelliteTransmission", 0) codes_set(ibufr, "qualityOfBuoyLocation", 0) codes_set(ibufr, "locationQualityClassRangeOfRadiusOf66Confidence", 3) codes_set(ibufr, "batteryVoltageLargeRange", 1.020000000000000107e01) codes_set(ibufr, "drogueType", 1) codes_set(ibufr, "lagrangianDrifterDrogueStatus", 2) codes_set(ibufr, "drogueDepth", 15) codes_set(ibufr, "lagrangianDrifterSubmergenceTimeSubmerged", 30) codes_set(ibufr, "#2#timeSignificance", 25) codes_set(ibufr, "#2#year", 2018) codes_set(ibufr, "#2#month", 11) codes_set(ibufr, "#2#day", 21) codes_set(ibufr, "#2#hour", 21) codes_set(ibufr, "#2#minute", 4) codes_set_missing(ibufr, "temperatureObservationPrecision") codes_set(ibufr, "oceanographicWaterTemperature", 2.914499999999999886e02) codes_set_missing(ibufr, "methodOfSalinityOrDepthMeasurement") codes_set(ibufr, "seaSurfaceSalinity", CODES_MISSING_DOUBLE) codes_set(ibufr, "surfaceType", CODES_MISSING_LONG) codes_set(ibufr, "iceThickness", CODES_MISSING_DOUBLE) codes_set(ibufr, "nonCoordinatePressure", CODES_MISSING_DOUBLE) codes_set(ibufr, "pressureReducedToMeanSeaLevel", 1.021700000000000000e05) codes_set(ibufr, "pressureReducedToMeanSeaLevel->percentConfidence", 45) # Encode the keys back in the data section codes_set(ibufr, "pack", 1) outfile = open(OUTPUT_FILENAME, "wb") codes_write(ibufr, outfile) print("Created output BUFR file ", OUTPUT_FILENAME) codes_release(ibufr) def main(): try: bufr_encode() except CodesInternalError as err: if VERBOSE: traceback.print_exc(file=sys.stderr) else: sys.stderr.write(err.msg + "\n") return 1 if __name__ == "__main__": sys.exit(main())