Ejemplo n.º 1
0
def load(h):

    h.add(_.Unsigned('YearOfModelVersion', 2))
    h.add(_.Unsigned('MonthOfModelVersion', 1))
    h.add(_.Unsigned('DayOfModelVersion', 1))
    h.add(_.Unsigned('HourOfModelVersion', 1))
    h.add(_.Unsigned('MinuteOfModelVersion', 1))
    h.add(_.Unsigned('SecondOfModelVersion', 1))
    h.add(
        _.G2date('modelVersionDate', _.Get('YearOfModelVersion'),
                 _.Get('MonthOfModelVersion'), _.Get('DayOfModelVersion')))
    h.add(
        _.Time('modelVersionTime', _.Get('HourOfModelVersion'),
               _.Get('MinuteOfModelVersion'), _.Get('SecondOfModelVersion')))
    h.add(_.Constant('isHindcast', 1))
Ejemplo n.º 2
0
def load(h):

    h.add(_.Unsigned('yearOfAnalysis', 2))
    h.add(_.Unsigned('monthOfAnalysis', 1))
    h.add(_.Unsigned('dayOfAnalysis', 1))
    h.add(_.Unsigned('hourOfAnalysis', 1))
    h.add(_.Unsigned('minuteOfAnalysis', 1))
    h.add(
        _.StringCodetable('originatingCentreOfAnalysis', 2,
                          "common/c-1.table"))
    h.add(_.Unsigned('subcentreOfAnalysis', 2))
    h.add(_.Constant('secondsOfAnalysis', 0))
    h.add(
        _.G2date('dateOfAnalysis', _.Get('yearOfAnalysis'),
                 _.Get('monthOfAnalysis'), _.Get('dayOfAnalysis')))
    h.add(
        _.Time('timeOfAnalysis', _.Get('hourOfAnalysis'),
               _.Get('minuteOfAnalysis'), _.Get('secondsOfAnalysis')))
    h.alias('date', 'dateOfAnalysis')
    h.alias('time', 'timeOfAnalysis')
Ejemplo n.º 3
0
def load(h):

    h.add(
        _.Codetable('parameterCategory', 1, "4.1.[discipline:l].table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.add(
        _.Codetable('parameterNumber', 1,
                    "4.2.[discipline:l].[parameterCategory:l].table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.add(_.Codetable_units('parameterUnits', _.Get('parameterNumber')))
    h.add(_.Codetable_title('parameterName', _.Get('parameterNumber')))
    h.add(
        _.Codetable('typeOfGeneratingProcess', 1, "4.3.table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.add(_.Unsigned('backgroundProcess', 1))
    h.alias('backgroundGeneratingProcessIdentifier', 'backgroundProcess')
    h.add(_.Unsigned('generatingProcessIdentifier', 1))
    h.add(_.Unsigned('hoursAfterDataCutoff', 2))
    h.alias('hoursAfterReferenceTimeOfDataCutoff', 'hoursAfterDataCutoff')
    h.add(_.Unsigned('minutesAfterDataCutoff', 1))
    h.alias('minutesAfterReferenceTimeOfDataCutoff', 'minutesAfterDataCutoff')
    h.add(
        _.Codetable('indicatorOfUnitOfTimeRange', 1, "4.4.table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.alias('defaultStepUnits', 'one')
    _.Template('grib2/localConcepts/[centre:s]/default_step_units.def',
               True).load(h)
    h.add(_.TransientCodetable('stepUnits', 1, "stepUnits.table"))
    h.add(_.Signed('forecastTime', 4))
    h.add(
        _.Step_in_units('startStep', _.Get('forecastTime'),
                        _.Get('indicatorOfUnitOfTimeRange'),
                        _.Get('stepUnits')))
    h.add(_.G2end_step('endStep', _.Get('startStep'), _.Get('stepUnits')))
    h.alias('step', 'startStep')
    h.alias('marsStep', 'startStep')
    h.alias('mars.step', 'startStep')
    h.alias('marsStartStep', 'startStep')
    h.alias('marsEndStep', 'endStep')
    h.add(_.G2step_range('stepRange', _.Get('startStep')))
    h.alias('ls.stepRange', 'stepRange')

    def stepTypeInternal_inline_concept(h):
        def wrapped(h):

            dummy = h.get_l('dummy')

            if dummy == 1:
                return 'instant'

        return wrapped

    h.add(
        _.Concept('stepTypeInternal',
                  None,
                  concepts=stepTypeInternal_inline_concept(h)))

    h.alias('time.stepType', 'stepType')
    h.alias('time.stepRange', 'stepRange')
    h.alias('time.stepUnits', 'stepUnits')
    h.alias('time.dataDate', 'dataDate')
    h.alias('time.dataTime', 'dataTime')
    h.alias('time.startStep', 'startStep')
    h.alias('time.endStep', 'endStep')
    h.add(
        _.Validity_date('validityDate', _.Get('dataDate'), _.Get('dataTime'),
                        _.Get('step'), _.Get('stepUnits')))
    h.alias('time.validityDate', 'validityDate')
    h.add(
        _.Validity_time('validityTime', _.Get('dataDate'), _.Get('dataTime'),
                        _.Get('step'), _.Get('stepUnits')))
    h.alias('time.validityTime', 'validityTime')
    h.add(
        _.StringCodetable('typeOfFirstFixedSurface', 1, "4.5.table",
                          _.Get('masterDir'), _.Get('localDir')))
    h.add(
        _.Codetable_units('unitsOfFirstFixedSurface',
                          _.Get('typeOfFirstFixedSurface')))
    h.add(
        _.Codetable_title('nameOfFirstFixedSurface',
                          _.Get('typeOfFirstFixedSurface')))
    h.add(_.Signed('scaleFactorOfFirstFixedSurface', 1))
    h.add(_.Unsigned('scaledValueOfFirstFixedSurface', 4))
    h.add(
        _.Codetable('typeOfSecondFixedSurface', 1, "4.5.table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.add(
        _.Codetable_units('unitsOfSecondFixedSurface',
                          _.Get('typeOfSecondFixedSurface')))
    h.add(
        _.Codetable_title('nameOfSecondFixedSurface',
                          _.Get('typeOfSecondFixedSurface')))
    h.add(_.Signed('scaleFactorOfSecondFixedSurface', 1))
    h.add(_.Unsigned('scaledValueOfSecondFixedSurface', 4))
    h.add(_.Transient('pressureUnits', "hPa"))

    def typeOfLevel_inline_concept(h):
        def wrapped(h):

            typeOfFirstFixedSurface = h.get_l('typeOfFirstFixedSurface')
            typeOfSecondFixedSurface = h.get_l('typeOfSecondFixedSurface')

            if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 255:
                return 'surface'

            if typeOfFirstFixedSurface == 2 and typeOfSecondFixedSurface == 255:
                return 'cloudBase'

            if typeOfFirstFixedSurface == 3 and typeOfSecondFixedSurface == 255:
                return 'cloudTop'

            if typeOfFirstFixedSurface == 4 and typeOfSecondFixedSurface == 255:
                return 'isothermZero'

            if typeOfFirstFixedSurface == 5 and typeOfSecondFixedSurface == 255:
                return 'adiabaticCondensation'

            if typeOfFirstFixedSurface == 6 and typeOfSecondFixedSurface == 255:
                return 'maxWind'

            if typeOfFirstFixedSurface == 7 and typeOfSecondFixedSurface == 255:
                return 'tropopause'

            if typeOfFirstFixedSurface == 8 and typeOfSecondFixedSurface == 255:
                return 'nominalTop'

            if typeOfFirstFixedSurface == 9 and typeOfSecondFixedSurface == 255:
                return 'seaBottom'

            if typeOfFirstFixedSurface == 10 and typeOfSecondFixedSurface == 255:
                return 'atmosphere'

            if typeOfFirstFixedSurface == 20 and typeOfSecondFixedSurface == 255:
                return 'isothermal'

            pressureUnits = h.get_s('pressureUnits')

            if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 255 and pressureUnits == "Pa":
                return 'isobaricInPa'

            if typeOfFirstFixedSurface == 100 and pressureUnits == "hPa" and typeOfSecondFixedSurface == 255:
                return 'isobaricInhPa'

            if typeOfFirstFixedSurface == 100 and typeOfSecondFixedSurface == 100:
                return 'isobaricLayer'

            if typeOfFirstFixedSurface == 101 and typeOfSecondFixedSurface == 255:
                return 'meanSea'

            if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 255:
                return 'heightAboveSea'

            if typeOfFirstFixedSurface == 102 and typeOfSecondFixedSurface == 102:
                return 'heightAboveSeaLayer'

            if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 255:
                return 'heightAboveGround'

            if typeOfFirstFixedSurface == 103 and typeOfSecondFixedSurface == 103:
                return 'heightAboveGroundLayer'

            if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 255:
                return 'sigma'

            if typeOfFirstFixedSurface == 104 and typeOfSecondFixedSurface == 104:
                return 'sigmaLayer'

            if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 255:
                return 'hybrid'

            if typeOfFirstFixedSurface == 118 and typeOfSecondFixedSurface == 255:
                return 'hybridHeight'

            if typeOfFirstFixedSurface == 105 and typeOfSecondFixedSurface == 105:
                return 'hybridLayer'

            if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 255:
                return 'depthBelowLand'

            if typeOfFirstFixedSurface == 106 and typeOfSecondFixedSurface == 106:
                return 'depthBelowLandLayer'

            if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 255:
                return 'theta'

            if typeOfFirstFixedSurface == 107 and typeOfSecondFixedSurface == 107:
                return 'thetaLayer'

            if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 255:
                return 'pressureFromGround'

            if typeOfFirstFixedSurface == 108 and typeOfSecondFixedSurface == 108:
                return 'pressureFromGroundLayer'

            if typeOfFirstFixedSurface == 109 and typeOfSecondFixedSurface == 255:
                return 'potentialVorticity'

            if typeOfFirstFixedSurface == 111 and typeOfSecondFixedSurface == 255:
                return 'eta'

            if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 255:
                return 'soil'

            if typeOfFirstFixedSurface == 151 and typeOfSecondFixedSurface == 151:
                return 'soilLayer'

            genVertHeightCoords = h.get_l('genVertHeightCoords')
            NV = h.get_l('NV')

            if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and NV == 6:
                return 'generalVertical'

            if genVertHeightCoords == 1 and typeOfFirstFixedSurface == 150 and typeOfSecondFixedSurface == 150 and NV == 6:
                return 'generalVerticalLayer'

            if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 255:
                return 'depthBelowSea'

            if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 8:
                return 'entireAtmosphere'

            if typeOfFirstFixedSurface == 1 and typeOfSecondFixedSurface == 9:
                return 'entireOcean'

            if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 255:
                return 'snow'

            if typeOfFirstFixedSurface == 114 and typeOfSecondFixedSurface == 114:
                return 'snowLayer'

            scaleFactorOfFirstFixedSurface = h.get_l(
                'scaleFactorOfFirstFixedSurface')
            scaledValueOfFirstFixedSurface = h.get_l(
                'scaledValueOfFirstFixedSurface')

            if typeOfFirstFixedSurface == 160 and scaleFactorOfFirstFixedSurface == 0 and scaledValueOfFirstFixedSurface == 0 and typeOfSecondFixedSurface == 255:
                return 'oceanSurface'

            if typeOfFirstFixedSurface == 160 and typeOfSecondFixedSurface == 160:
                return 'oceanLayer'

            if typeOfFirstFixedSurface == 169 and typeOfSecondFixedSurface == 255:
                return 'mixedLayerDepth'

        return wrapped

    h.add(
        _.Concept('typeOfLevel',
                  'unknown',
                  concepts=typeOfLevel_inline_concept(h)))

    h.alias('vertical.typeOfLevel', 'typeOfLevel')
    h.alias('levelType', 'typeOfFirstFixedSurface')

    if (h.get_l('typeOfSecondFixedSurface') == 255):
        h.add(
            _.G2level('level', _.Get('typeOfFirstFixedSurface'),
                      _.Get('scaleFactorOfFirstFixedSurface'),
                      _.Get('scaledValueOfFirstFixedSurface'),
                      _.Get('pressureUnits')))
        h.add(_.Transient('bottomLevel', _.Get('level')))
        h.add(_.Transient('topLevel', _.Get('level')))
    else:
        h.add(
            _.G2level('topLevel', _.Get('typeOfFirstFixedSurface'),
                      _.Get('scaleFactorOfFirstFixedSurface'),
                      _.Get('scaledValueOfFirstFixedSurface'),
                      _.Get('pressureUnits')))
        h.add(
            _.G2level('bottomLevel', _.Get('typeOfSecondFixedSurface'),
                      _.Get('scaleFactorOfSecondFixedSurface'),
                      _.Get('scaledValueOfSecondFixedSurface'),
                      _.Get('pressureUnits')))
        h.alias('level', 'topLevel')

    h.alias('ls.level', 'level')
    h.alias('vertical.level', 'level')
    h.alias('vertical.bottomLevel', 'bottomLevel')
    h.alias('vertical.topLevel', 'topLevel')
    h.alias('extraDim', 'zero')

    if h._defined('extraDimensionPresent'):

        if h.get_l('extraDimensionPresent'):
            h.alias('extraDim', 'one')

    if h.get_l('extraDim'):
        h.alias('mars.levelist', 'dimension')
        h.alias('mars.levtype', 'dimensionType')
    else:
        h.add(_.Transient('tempPressureUnits', _.Get('pressureUnits')))

        if not ((h.get_s('typeOfLevel') == "surface")):

            if (h.get_s('tempPressureUnits') == "Pa"):
                h.add(
                    _.Scale('marsLevel', _.Get('level'), _.Get('one'),
                            _.Get('hundred')))
                h.alias('mars.levelist', 'marsLevel')
            else:
                h.alias('mars.levelist', 'level')

        h.alias('mars.levtype', 'typeOfFirstFixedSurface')

        if (h.get_s('levtype') == "sfc"):
            h.unalias('mars.levelist')

    if ((h.get_l('typeOfFirstFixedSurface') == 151)
            and (h.get_l('typeOfSecondFixedSurface') == 151)):
        h.alias('mars.levelist', 'bottomLevel')

    h.alias('ls.typeOfLevel', 'typeOfLevel')
    h.add(
        _.Codetable('typeOfEnsembleForecast', 1, "4.6.table",
                    _.Get('masterDir'), _.Get('localDir')))
    h.add(_.Unsigned('perturbationNumber', 1))
    h.alias('number', 'perturbationNumber')
    h.add(_.Unsigned('numberOfForecastsInEnsemble', 1))
    h.alias('totalNumber', 'numberOfForecastsInEnsemble')

    if ((((((((h.get_l('productionStatusOfProcessedData') == 4) or
              (h.get_l('productionStatusOfProcessedData') == 5)) or
             (h.get_l('productionStatusOfProcessedData') == 6)) or
            (h.get_l('productionStatusOfProcessedData') == 7)) or
           (h.get_l('productionStatusOfProcessedData') == 8)) or
          (h.get_l('productionStatusOfProcessedData') == 9)) or
         (h.get_l('productionStatusOfProcessedData') == 10))
            or (h.get_l('productionStatusOfProcessedData') == 11)):
        h.alias('mars.number', 'perturbationNumber')

    h.add(_.Unsigned('YearOfModelVersion', 2))
    h.add(_.Unsigned('MonthOfModelVersion', 1))
    h.add(_.Unsigned('DayOfModelVersion', 1))
    h.add(_.Unsigned('HourOfModelVersion', 1))
    h.add(_.Unsigned('MinuteOfModelVersion', 1))
    h.add(_.Unsigned('SecondOfModelVersion', 1))
    h.add(
        _.G2date('modelVersionDate', _.Get('YearOfModelVersion'),
                 _.Get('MonthOfModelVersion'), _.Get('DayOfModelVersion')))
    h.add(
        _.Time('modelVersionTime', _.Get('HourOfModelVersion'),
               _.Get('MinuteOfModelVersion'), _.Get('SecondOfModelVersion')))
    h.add(_.Constant('isHindcast', 1))
Ejemplo n.º 4
0
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)))
Ejemplo n.º 5
0
def load(h):

    h.add(_.Unsigned('isFillup', 1))
    h.alias('local.isFillup', 'isFillup')
    h.add(_.Unsigned('yearOfForecast', 2))
    h.add(_.Unsigned('monthOfForecast', 1))
    h.add(_.Unsigned('dayOfForecast', 1))
    h.add(_.Unsigned('hourOfForecast', 1))
    h.add(_.Unsigned('minuteOfForecast', 1))
    h.add(_.Constant('secondOfForecast', 0))
    h.add(
        _.G2date('dateOfForecast', _.Get('yearOfForecast'),
                 _.Get('monthOfForecast'), _.Get('dayOfForecast')))
    h.add(
        _.Time('timeOfForecast', _.Get('hourOfForecast'),
               _.Get('minuteOfForecast'), _.Get('secondOfForecast')))
    h.add(
        _.Julian_day('julianForecastDay', _.Get('dateOfForecast'),
                     _.Get('hourOfForecast'), _.Get('minuteOfForecast'),
                     _.Get('secondOfForecast')))
    h.add(
        _.Transient('diffInDays',
                    (_.Get('julianForecastDay') - _.Get('julianDay'))))
    h.add(
        _.Transient('diffInHours',
                    (((_.Get('diffInDays') * 1440) + 0.5) / 60)))
    h.add(_.Round('_anoffset', _.Get('diffInHours'), 10))
    h.add(_.Transient('anoffset', _.Get('_anoffset')))
    h.alias('local.anoffset', 'anoffset')
    h.add(_.Unsigned('anoffsetFirst', 2))
    h.add(_.Unsigned('anoffsetLast', 2))
    h.add(_.Unsigned('anoffsetFrequency', 2))
    h.add(_.Transient('is_efas', 1))
    h.add(_.Transient('lsdate_bug', 1))

    def efas_post_proc_inline_concept(h):
        def wrapped(h):

            typeOfPostProcessing = h.get_l('typeOfPostProcessing')

            if typeOfPostProcessing == 0:
                return 'unknown'

            if typeOfPostProcessing == 1:
                return 'lisflood'

            if typeOfPostProcessing == 2:
                return 'lisflood_eric'

            if typeOfPostProcessing == 3:
                return 'lisflood_season'

            if typeOfPostProcessing == 4:
                return 'lisflood_merged'

            if typeOfPostProcessing == 51:
                return 'ericha'

            if typeOfPostProcessing == 101:
                return 'htessel_lisflood'

            if typeOfPostProcessing == 102:
                return 'htessel_eric'

            if typeOfPostProcessing == 103:
                return 'htessel_camaflood'

            if typeOfPostProcessing == 152:
                return 'epic'

            dummy = h.get_l('dummy')

            if dummy == 1:
                return 'unknown'

        return wrapped

    h.add(
        _.Concept('efas_post_proc',
                  None,
                  concepts=efas_post_proc_inline_concept(h)))

    h.add(_.Unsigned('yearOfModelVersion', 2))
    h.add(_.Unsigned('monthOfModelVersion', 1))
    h.add(_.Unsigned('dayOfModelVersion', 1))
    h.add(_.Unsigned('hourOfModelVersion', 1))
    h.add(_.Unsigned('minuteOfModelVersion', 1))
    h.add(_.Constant('secondOfModelVersion', 0))
    h.add(
        _.G2date('dateOfModelVersion', _.Get('yearOfModelVersion'),
                 _.Get('monthOfModelVersion'), _.Get('dayOfModelVersion')))
    h.add(
        _.Time('timeOfModelVersion', _.Get('hourOfModelVersion'),
               _.Get('minuteOfModelVersion'), _.Get('secondOfModelVersion')))