# Copyright 2005-2019 ECMWF.
#
# This software is licensed under the terms of the Apache Licence Version 2.0
# which can be obtained at http://www.apache.org/licenses/LICENSE-2.0.
# 
# In applying this licence, ECMWF does not waive the privileges and immunities granted to it by
# virtue of its status as an intergovernmental organisation nor does it submit to any jurisdiction.
#

# Section 1 - Originator Section

position offsetSection1;
section_length[4] section1Length ;
meta section1Pointer section_pointer(offsetSection1,section1Length,1);

unsigned[1] numberOfSection = 1 :read_only;

codetable[2] centre  'common/c-11.table' : dump,string_type;
alias identificationOfOriginatingGeneratingCentre=centre;
meta centreDescription codetable_title(centre);

alias parameter.centre=centre;
alias ls.centre=centre;
alias originatingCentre=centre;

unsigned[2] subCentre  : dump;

_if (subCentre==98 ) {
  alias centreForLocal=subCentre;
} else {
  alias centreForLocal=centre;
}

#codetable[1] tablesVersion 'grib3/tables/1.0.table' = 1 : edition_specific;
#alias gribMasterTablesVersionNumber=tablesVersion;

codetable[1] localTablesVersion 'grib3/tables/[tablesVersion]/1.0.table' ;
alias versionNumberOfGribLocalTables=localTablesVersion;
transient localDir="";
if (localTablesVersion != 0) {
  transient localDir="grib3/tables/local/[centre]/[localTablesVersion]";
}

transient masterDir="grib3/tables/[tablesVersion]";
when (tablesVersion!=255) {
  set masterDir="grib3/tables/[tablesVersion]";
} else {
  set masterDir="grib3/tables/1";
}

codetable[1] identificationOfProject 'grib3/tables/[tablesVersion]/1.1.table' = 255 : dump;


#  Production status of processed data in this GRIB message
codetable[1] productionStatusOfProcessedData ('1.2.table',masterDir,localDir) : dump;
concept is_uerra(zero) {
   '1' = {productionStatusOfProcessedData=9;}
   '1' = {productionStatusOfProcessedData=8;}
   '0' = {dummy=1;}
}

unsigned[2] originatorLocalTemplateNumber = missing() : dump,edition_specific,can_be_missing;
unsigned[2] lengthOfOriginatorLocalTemplate = 0: dump,edition_specific;
template_nofail originatorLocalTemplate "grib3/template.1.originator.[originatorLocalTemplateNumber:i].def";


unsigned[2] projectLocalTemplateNumber = missing() : dump,edition_specific,can_be_missing;
unsigned[2] lengthOfProjectLocalTemplate = 0: dump,edition_specific;
template_nofail projectLocalTemplate "grib3/template.1.project.[projectLocalTemplateNumber:i].def";

#  Type of processed data in this GRIB message
#codetable[1] typeOfProcessedData ('1.4.table',masterDir,localDir) = 255  : dump,string_type,no_fail;
#alias ls.dataType=typeOfProcessedData;

meta md5Section1 md5(offsetSection1,section1Length);

#meta selectStepTemplateInterval select_step_template(productDefinitionTemplateNumber,0); # 0 -> not instant
#meta selectStepTemplateInstant  select_step_template(productDefinitionTemplateNumber,1); # 1 -> instant

#transient stepTypeInternal="instant" : hidden,no_copy;

#concept stepType {
#    "instant" = {selectStepTemplateInstant=1; stepTypeInternal="instant";}
#    "avg"     = {selectStepTemplateInterval=1; stepTypeInternal="avg";}
#    "avgd"    = {selectStepTemplateInterval=1; stepTypeInternal="avgd";}
#    "accum"   = {selectStepTemplateInterval=1; stepTypeInternal="accum";}
#    "max"     = {selectStepTemplateInterval=1; stepTypeInternal="max";}
#    "min"     = {selectStepTemplateInterval=1; stepTypeInternal="min";}
#    "diff"    = {selectStepTemplateInterval=1; stepTypeInternal="diff";}
#    "rms"     = {selectStepTemplateInterval=1; stepTypeInternal="rms";}
#    "sd"      = {selectStepTemplateInterval=1; stepTypeInternal="sd";}
#    "cov"     = {selectStepTemplateInterval=1; stepTypeInternal="cov";}
#    "ratio"   = {selectStepTemplateInterval=1; stepTypeInternal="ratio";}
#}

#transient setCalendarId = 0 ;
#transient deleteCalendarId = 0 ;
#alias calendarIdPresent = zero;
#if ( ((section1Length > 21) or setCalendarId > 0) and deleteCalendarId == 0) {
#  alias calendarIdPresent = present;
#  codetable[2] calendarIdentificationTemplateNumber ('1.5.table',masterDir,localDir) : dump,string_type,no_fail;
#  template calendarIdentification "grib3/template.1.[calendarIdentificationTemplateNumber:i].def";
#}
