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))
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')
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))
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(_.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')))