TNO Intern

Processing of CrIS NH3 data.

Support CrIS NH3: inquire, download, convert, simulate, postprocess.

Merge request reports

Loading

config/CrIS/cso.rc

0 → 100644
+1530 −0
Changes for config/CrIS/cso.rc: 1530 added lines, 0 removed lines.
Original line number Diff line number Diff line
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!
!!! CSO - CAMS Satellite Operator
!!!
!!! Settings for CrIS/NH3.
!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


!----------------------------------------------------------
! job tree
!----------------------------------------------------------

! class to create a job tree:
cso.class                                     :  utopya.UtopyaJobTree
! list of sub-elements:
cso.elements                                  :  cris-nh3

! class to create a job tree:
cso.cris-nh3.class                             :  utopya.UtopyaJobTree

! list of sub-elements:
!cso.cris-nh3.elements                          :  inquire \
!                                                  convert listing \
!                                                  catalogue

! ... preprocessor steps one by one:
cso.cris-nh3.elements                          :  inquire
!cso.cris-nh3.elements                          :  convert listing
!cso.cris-nh3.elements                          :  listing
!cso.cris-nh3.elements                          :  catalogue
!
! ... extra: gridded files from converted orbits:
!cso.cris-nh3.elements                          :  gridded
!cso.cris-nh3.elements                          :  gridded-catalogue
!
! ... create super-observations
!cso.cris-nh3.elements                          :  superobs
!cso.cris-nh3.elements                          :  superobs-catalogue
!
! ... after running the obs.oper:
!cso.cris-nh3.elements                          :  sim-catalogue
!cso.cris-nh3.elements                          :  sim-gridded
!cso.cris-nh3.elements                          :  sim-gridded-catalogue

! *

! single step:
cso.cris-nh3.inquire.class                     :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.inquire.tasks                     :  table-dataspace plot
!~ task: inquire available files:
cso.cris-nh3.inquire.table-dataspace.class     :  cso.CSO_DataSpace_Inquire
cso.cris-nh3.inquire.table-dataspace.args      :  '${__filename__}', \
                                                      rcbase='cso.cris-nh3.inquire-table-dataspace'
!~ task: create plot of available versions:
cso.cris-nh3.inquire.plot.class                :  cso.CSO_Inquire_Plot
cso.cris-nh3.inquire.plot.args                 :  '${__filename__}', \
                                                      rcbase='cso.cris-nh3.inquire-plot'

! *

! single step:
cso.cris-nh3.convert.class                     :  utopya.UtopyaJobStep
! task:
cso.cris-nh3.convert.task.class                :  cso.CSO_CrIS_Convert
cso.cris-nh3.convert.task.args                 :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.convert'

! *

! single step:
cso.cris-nh3.listing.class                     :  utopya.UtopyaJobStep
! task:
cso.cris-nh3.listing.task.class                :  cso.CSO_CrIS_Listing
cso.cris-nh3.listing.task.args                 :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.listing'

! *

! single step:
cso.cris-nh3.catalogue.class                   :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.catalogue.tasks                   :  figs index
! catalogue creation task:
cso.cris-nh3.catalogue.figs.class              :  cso.CSO_Catalogue
cso.cris-nh3.catalogue.figs.args               :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.catalogue'
! indexer task:
cso.cris-nh3.catalogue.index.class             :  utopya.Indexer
cso.cris-nh3.catalogue.index.args              :  '${__filename__}', \
                                                    rcbase='cso.cris-nh3.catalogue-index'

! *

! single step:
cso.cris-nh3.sim-catalogue.class               :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.sim-catalogue.tasks               :  figs index
! catalogue creation task:
cso.cris-nh3.sim-catalogue.figs.class          :  cso.CSO_SimCatalogue
cso.cris-nh3.sim-catalogue.figs.args           :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.sim-catalogue'
! indexer task:
cso.cris-nh3.sim-catalogue.index.class         :  utopya.Indexer
cso.cris-nh3.sim-catalogue.index.args          :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.sim-catalogue-index'

!
! * super observations
!

! single step:
cso.cris-nh3.superobs.class                    :  utopya.UtopyaJobStep
! tasks:
cso.cris-nh3.superobs.tasks                    :  create listing
!~ create:
cso.cris-nh3.superobs.create.class             :  cso.CSO_SuperObs
cso.cris-nh3.superobs.create.args              :  '${__filename__}', rcbase='cso.cris-nh3.superobs'
!~ create:
cso.cris-nh3.superobs.listing.class            :  cso.CSO_CrIS_Listing
cso.cris-nh3.superobs.listing.args             :  '${__filename__}', rcbase='cso.cris-nh3.superobs-listing'

! *

! single step:
cso.cris-nh3.superobs-catalogue.class          :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.superobs-catalogue.tasks          :  figs index
! catalogue creation task:
cso.cris-nh3.superobs-catalogue.figs.class     :  cso.CSO_Catalogue
cso.cris-nh3.superobs-catalogue.figs.args      :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.superobs-catalogue'
! indexer task:
cso.cris-nh3.superobs-catalogue.index.class    :  utopya.Indexer
cso.cris-nh3.superobs-catalogue.index.args     :  '${__filename__}', \
                                                    rcbase='cso.cris-nh3.superobs-catalogue-index'

!
! * gridded fields
!

! single step:
cso.cris-nh3.gridded.class                     :  utopya.UtopyaJobStep
! catalogue creation task:
cso.cris-nh3.gridded.task.class                :  cso.CSO_GriddedAverage
cso.cris-nh3.gridded.task.args                 :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.gridded'

! *

! single step:
cso.cris-nh3.gridded-catalogue.class           :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.gridded-catalogue.tasks           :  figs index
! catalogue creation task:
cso.cris-nh3.gridded-catalogue.figs.class      :  cso.CSO_GriddedCatalogue
cso.cris-nh3.gridded-catalogue.figs.args       :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.gridded-catalogue'
! indexer task:
cso.cris-nh3.gridded-catalogue.index.class     :  utopya.Indexer
cso.cris-nh3.gridded-catalogue.index.args      :  '${__filename__}', \
                                                   rcbase='cso.cris-nh3.gridded-catalogue-index'

!
! * gridded simulation fields
!

! single step:
cso.cris-nh3.sim-gridded.class                     :  utopya.UtopyaJobStep
! catalogue creation task:
cso.cris-nh3.sim-gridded.task.class                :  cso.CSO_GriddedAverage
cso.cris-nh3.sim-gridded.task.args                 :  '${__filename__}', \
                                                       rcbase='cso.cris-nh3.sim-gridded'

! *

! single step:
cso.cris-nh3.sim-gridded-catalogue.class           :  utopya.UtopyaJobStep
! two tasks:
cso.cris-nh3.sim-gridded-catalogue.tasks           :  figs index
! catalogue creation task:
cso.cris-nh3.sim-gridded-catalogue.figs.class      :  cso.CSO_GriddedCatalogue
cso.cris-nh3.sim-gridded-catalogue.figs.args       :  '${__filename__}', \
                                                       rcbase='cso.cris-nh3.sim-gridded-catalogue'
! indexer task:
cso.cris-nh3.sim-gridded-catalogue.index.class     :  utopya.Indexer
cso.cris-nh3.sim-gridded-catalogue.index.args      :  '${__filename__}', \
                                                       rcbase='cso.cris-nh3.sim-gridded-catalogue-index'



!======================================================================
!===
!=== settings
!===
!======================================================================


!-----------------------------------------------------------
! id's
!-----------------------------------------------------------

! file format:
my.cso.format         :   1.0

! file format convention:
my.cso.convention     :   CF-1.7


!-----------------------------------------------------------
! domain
!-----------------------------------------------------------

!
! Used for:
! - orbit selection durning download
! - pixel selection
! - map plots
!

! region name:
my.region                       :  CAMS
! CAMS regional ensemble domain:
my.region.west                  :  -30.0
my.region.east                  :   45.0
my.region.south                 :   30.0
my.region.north                 :   76.0
! size of map figures for this region:
my.region.figsize               :   (6,6)

!! region name:
!my.region                       :  globe
!! global domain:
!my.region.west                  : -180.0
!my.region.east                  :  180.0
!my.region.south                 :  -90.0
!my.region.north                 :   90.0
!! size of map figures for this region:
!my.region.figsize               :   (8,6)


!----------------------------------------------------------
! timerange
!----------------------------------------------------------

!! testing 3 days
!my.timerange.start              :  2018-06-01 00:00
!my.timerange.end                :  2018-06-03 23:59

! testing 3 days
my.timerange.start              :  2024-03-01 00:00
my.timerange.end                :  2024-03-03 23:59


!----------------------------------------------------------
! user specific settings:
!----------------------------------------------------------

! Attributes written to output files.
my.attr.author                  :  Your Name
my.attr.institution             :  CSO
my.attr.email                   :  Your.Name@cso.org

! base location for work directories:
!my.work                         :  /work/${USER}/CSO-CrIS-NH3
!my.work                         :  /Scratch/${USER}/CSO-CrIS-NH3
my.work                         :  ${WORK}/CSO-CrIS-NH3


!----------------------------------------------------------
! output
!----------------------------------------------------------

! pack variables on output:
*.output.packed            :  True
! zlib compression level, 0 for no compression:
*.output.complevel         :  1


!----------------------------------------------------------
! job step defaults
!----------------------------------------------------------

! run jobs in foreground:
*.script.class                      :  utopya.UtopyaJobScriptForeground

! dummy value, will be defined when running in virtrual environment:
VIRTUAL_ENV                         :
! running in virutual envionment?
#if "${VIRTUAL_ENV}" > ""
! interpretor from virtual enviornment, the system path is set automatically:
*.shell                             :  ${VIRTUAL_ENV}/bin/python3
#else
! search path for python modules:
*.pypath                            :  ${CSO_PREFIX}/src:${CSO_PREFIX}/src/utopya:${CSO_PREFIX}/src/cso
#endif

! work directory for jobs; 
*.workdir                           :  ${my.work}/__NAME2PATH__

! for new job files, use jobtree settings from this file:
*.rcfile                            :  ${__filename__}



!======================================================================
!===
!=== Inquire DataSpace
!===
!======================================================================

! Obtain names of all available CrIS files.
! Stored as csv with processing type, processor version, filenames, etc.

!! full time range:
!cso.cris-nh3.inquire-table-dataspace.timerange.start        :  2018-04-30 00:00:00
!cso.cris-nh3.inquire-table-dataspace.timerange.end          :  2025-01-01 00:00:00
! testing ...
cso.cris-nh3.inquire-table-dataspace.timerange.start        :  2018-06-01 00:00:00
cso.cris-nh3.inquire-table-dataspace.timerange.end          :  2018-07-01 00:00:00

! API url:
cso.cris-nh3.inquire-table-dataspace.url                    :  https://stac.dataspace.copernicus.eu/v1

! collection name:
cso.cris-nh3.inquire-table-dataspace.collections             :  sentinel-5p-l2-no2-rpro \
                                                                sentinel-5p-l2-no2-offl
!!~ near-real time processing:
!cso.cris-nh3.inquire-table-dataspace.collections             :  sentinel-5p-l2-no2-nrti

! target area;
!!~ empty for no limitation:
!cso.cris-nh3.inquire-table-dataspace.area                   :  
!~ domain specified as:  west,south,east,north
cso.cris-nh3.inquire-table-dataspace.area                   :  ${my.region.west},${my.region.south},${my.region.east},${my.region.north}

! output table, date of today:
cso.cris-nh3.inquire-table-dataspace.output.file            :  ${my.work}/Copernicus/Copernicus_CrIS_NH3_dataspace__%Y-%m-%d.csv


! * create plot

! renew existing plots?
cso.cris-nh3.inquire-plot.renew                    :  True

! listing files:
cso.cris-nh3.inquire-plot.file                     :  ${cso.cris-nh3.inquire-table-dataspace.output.file}
!!~ specify dates ("yyyy-mm-dd") to use historic tables,
!!  default is table of today:
!cso.cris-nh3.inquire-plot.filedate                 :  2026-03-11

! annote:
cso.cris-nh3.inquire-plot.title                    :  CrIS/NH3 %Y-%m-%d

! output figure, date of today:
cso.cris-nh3.inquire-plot.output.file              :  ${my.work}/Copernicus/Copernicus_CrIS_NH3_dataspace__%Y-%m-%d.png


!======================================================================
!===
!=== convert (and download)
!===
!======================================================================


! renew existing files (True|False) ?
!cso.cris-nh3.convert.renew                  :  True
cso.cris-nh3.convert.renew                  :  False

! time range:
cso.cris-nh3.convert.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.convert.timerange.end          :  ${my.timerange.end}


!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! input files
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

! listing of available source files,  created by 'inquire' job:
cso.cris-nh3.convert.inquire.file                   :  ${my.work}/Copernicus/Copernicus_CrIS_NH3_dataspace__%Y-%m-%d.csv
!!~ historic inquire ...
!cso.cris-nh3.convert.inquire.filedate               :  2026-03-25

! selection keyword:
my.cris-nh3.selection                                :  C03

! Provide ';' seperated list of to decide if a particular orbit file should be processed.
! If more than one file is available for a particular orbit (from "OFFL" and "RPRO" processing),
! the file with the first match will be used.
! The expressions should include templates '%{header}' for the column values.
! Example to select files from collection '03', preferably from processing 'RPRO' but otherwise from 'OFFL':
!   (%{collection} == '03') and (%{processing} == 'RPRO') ; \
!   (%{collection} == '03') and (%{processing} == 'OFFL')
!
cso.cris-nh3.convert.selection                     :  (%{collection} == '03') and (%{processing} == 'RPRO') ; \
                                                      (%{collection} == '03') and (%{processing} == 'OFFL')
!!~ for near-real-time processing:
!cso.cris-nh3.convert.selection                     :  %{collection} == '03'

! input directory;
! files are searched here or downloaded to if not present yet;
! supported templates:
!   %{processing}
cso.cris-nh3.convert.input.dir                      :  ${my.work}/Copernicus/S5P/%{processing}/NH3/%Y/%m

! remove downloaded input files after convert?
cso.cris-nh3.convert.downloads.cleanup              :  False

! selection names:
cso.cris-nh3.convert.filters                        :  lons lats valid quality

! filter settings:
cso.cris-nh3.convert.filter.lons.var                :  PRODUCT/longitude
cso.cris-nh3.convert.filter.lons.type               :  minmax
cso.cris-nh3.convert.filter.lons.minmax             :  ${my.region.west} ${my.region.east}
cso.cris-nh3.convert.filter.lons.units              :  degrees_east

! filter settings:
cso.cris-nh3.convert.filter.lats.var                :  PRODUCT/latitude
cso.cris-nh3.convert.filter.lats.type               :  minmax
cso.cris-nh3.convert.filter.lats.minmax             :  ${my.region.south} ${my.region.north}
cso.cris-nh3.convert.filter.lats.units              :  degrees_north

! skip pixel with "no data", use the "qa_value" variable to check:
cso.cris-nh3.convert.filter.valid.var               :  PRODUCT/qa_value
cso.cris-nh3.convert.filter.valid.type              :  valid

! Comment in "PRODUCT/qa_value" variable:
!   "A continuous quality descriptor, 
!   varying between 0 (no data) and 1 (full quality data). 
!   Recommend to ignore data with qa_value < 0.5" 
! Recomended is qa_value>=0.75 to remove clouded and other problematic pixels;
! here use 0.5 to include retrievals over clouds and snow/ice.
cso.cris-nh3.convert.filter.quality.var             :  PRODUCT/qa_value
cso.cris-nh3.convert.filter.quality.type            :  min
cso.cris-nh3.convert.filter.quality.min             :  0.5
cso.cris-nh3.convert.filter.quality.units           :  1



!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! output files
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

! output directory and filename:
! - times are taken from mid of selection, rounded to hours
! - use '%{processing}' for the processing name
! - use '%{orbit}' for orbit number
! - include start time to have different files if orbit is stored in patches
cso.cris-nh3.convert.output.filename            :  ${my.work}/CSO-data/${my.region}/CrIS/NH3/${my.cris-nh3.selection}/%Y/%m/CrIS_%{processing}_NH3_%{orbit}_%Y%m%dT%H%M%S.nc

! global attributes:
cso.cris-nh3.convert.output.attrs               :  format Conventions \
                                                     author institution email
!
cso.cris-nh3.convert.output.attr.format         :  ${my.cso.format}
cso.cris-nh3.convert.output.attr.Conventions    :  ${my.cso.convention}
cso.cris-nh3.convert.output.attr.author         :  ${my.attr.author}
cso.cris-nh3.convert.output.attr.institution    :  ${my.attr.institution}
cso.cris-nh3.convert.output.attr.email          :  ${my.attr.email}

! no need to swap layes:
cso.cris-nh3.convert.swap_layers                :  False


! ~ variables

! which fields to be put out ?
cso.cris-nh3.convert.output.vars    :  longitude longitude_bounds \
                                       latitude  latitude_bounds \
                                       track_longitude track_longitude_bounds \
                                       track_latitude  track_latitude_bounds \
                                       time \
                                       qa_value \
                                       pressure kernel_trop amf amf_trop nla \
                                       vcd vcd_errvar \
                                       cloud_fraction cloud_radiance_fraction

! 
! Describe per variable:
! * .dims :  dimensions list:
!     pixel       : selected pixels
!     corner      : number of footprint bounds (probably 4)
!     layer       : number of layers in atmospheric profile (layers in kernel)
!     layeri      : number of layer interfaces in atmospheric profile (layer+1)
!     retr        : number of layers in retrieval product (1 for columns) ;
!                   for error covariance use (retr,retr0) to avoid repeated dimensions
!     track_scan  : original scan index   in 2D track
!     track_pixel : original ground pixel in 2D track
! * .specal  : keyword to select special processing
!     * None                     : no special processing (default)
!     * track_longitude          : longiudes at centers of original 2D track
!     * track_latitude           : latiudes  at centers of original 2D track
!     * track_longitude_bounds   : longiude bounds at centers of original 2D track
!     * track_latitude_bounds    : latiude  bounds at centers of original 2D track
! * .units   : target units if different from original
! * .oper    : special postprocessing, currently supported:
!     * square      :  fill variable with squared valued (used to form variance from standard deviation)
! In case no special processing is needed:
! * .from : original variable (group path and variable name)
!

! center longitudes; remove bounds attribute, no coordinate ...
cso.cris-nh3.convert.output.var.longitude.dims                   :   pixel
cso.cris-nh3.convert.output.var.longitude.from                   :   PRODUCT/longitude
cso.cris-nh3.convert.output.var.longitude.attrs                  :   { 'bounds' : None }

! center latitudes; remove bounds attribute, no coordinate ...
cso.cris-nh3.convert.output.var.latitude.dims                    :   pixel
cso.cris-nh3.convert.output.var.latitude.from                    :   PRODUCT/latitude
cso.cris-nh3.convert.output.var.latitude.attrs                   :   { 'bounds' : None }

! corner longitudes; no units in file:
cso.cris-nh3.convert.output.var.longitude_bounds.dims            :   pixel corner
cso.cris-nh3.convert.output.var.longitude_bounds.from            :   PRODUCT/SUPPORT_DATA/GEOLOCATIONS/longitude_bounds
cso.cris-nh3.convert.output.var.longitude_bounds.units           :   degrees_east
! ensure that near dateline the corners form a convex region around center
! (with some points outside [-180,+180] if necessary)
cso.cris-nh3.convert.output.var.longitude_bounds.special         :   longitude_bounds

! corner latitudes, no units in file:
cso.cris-nh3.convert.output.var.latitude_bounds.dims             :   pixel corner
cso.cris-nh3.convert.output.var.latitude_bounds.from             :   PRODUCT/SUPPORT_DATA/GEOLOCATIONS/latitude_bounds
cso.cris-nh3.convert.output.var.latitude_bounds.units            :   degrees_north

! original track:
!~ center lon; remove bounds attribute, no coordinate ...
cso.cris-nh3.convert.output.var.track_longitude.dims             :   track_scan track_pixel
cso.cris-nh3.convert.output.var.track_longitude.special          :   track_longitude
cso.cris-nh3.convert.output.var.track_longitude.from             :   PRODUCT/longitude
cso.cris-nh3.convert.output.var.track_longitude.attrs            :   { 'bounds' : None }
!
!~ center lat; remove bounds attribute, no coordinate ...
cso.cris-nh3.convert.output.var.track_latitude.dims              :   track_scan track_pixel
cso.cris-nh3.convert.output.var.track_latitude.special           :   track_latitude
cso.cris-nh3.convert.output.var.track_latitude.from              :   PRODUCT/latitude
cso.cris-nh3.convert.output.var.track_latitude.attrs             :   { 'bounds' : None }
!
!~ corner lons
cso.cris-nh3.convert.output.var.track_longitude_bounds.dims      :   track_scan track_pixel corner
cso.cris-nh3.convert.output.var.track_longitude_bounds.special   :   track_longitude_bounds
cso.cris-nh3.convert.output.var.track_longitude_bounds.from      :   PRODUCT/SUPPORT_DATA/GEOLOCATIONS/longitude_bounds
cso.cris-nh3.convert.output.var.track_longitude_bounds.units     :   degrees_east
!
!~ corner lats
cso.cris-nh3.convert.output.var.track_latitude_bounds.dims       :   track_scan track_pixel corner
cso.cris-nh3.convert.output.var.track_latitude_bounds.special    :   track_latitude_bounds
cso.cris-nh3.convert.output.var.track_latitude_bounds.from       :   PRODUCT/SUPPORT_DATA/GEOLOCATIONS/latitude_bounds
cso.cris-nh3.convert.output.var.track_latitude_bounds.units      :   degrees_north

! time value per scan line
cso.cris-nh3.convert.output.var.time.dims                        :   pixel
cso.cris-nh3.convert.output.var.time.special                     :   time-delta
cso.cris-nh3.convert.output.var.time.tref                        :   PRODUCT/time
cso.cris-nh3.convert.output.var.time.dt                          :   PRODUCT/delta_time

! vertical column density:
cso.cris-nh3.convert.output.var.vcd.dims                         :   pixel retr
cso.cris-nh3.convert.output.var.vcd.from                         :   PRODUCT/nitrogendioxide_tropospheric_column
cso.cris-nh3.convert.output.var.vcd.attrs                        :   { 'ancillary_variables' : None }

! error variance in vertical column density (after application of kernel),
! fill with single element 'covariance matrix', from square of standard error:
! use dims with different names to avoid that cf-checker complains:
cso.cris-nh3.convert.output.var.vcd_errvar.dims                  :   pixel retr retr0
cso.cris-nh3.convert.output.var.vcd_errvar.special               :   square
cso.cris-nh3.convert.output.var.vcd_errvar.from                  :   PRODUCT/nitrogendioxide_tropospheric_column_precision_kernel
!~ skip standard name, modifier "standard_error" is not valid anymore:
cso.cris-nh3.convert.output.var.vcd_errvar.attrs                 :   { 'standard_name' : None }

! Convert from hybride coefficient bounds in (2,nlev) aray to 3D half level pressure:
cso.cris-nh3.convert.output.var.pressure.dims                    :   pixel layeri
cso.cris-nh3.convert.output.var.pressure.special                 :   hybounds_to_pressure
cso.cris-nh3.convert.output.var.pressure.sp                      :   PRODUCT/SUPPORT_DATA/INPUT_DATA/surface_pressure
cso.cris-nh3.convert.output.var.pressure.hyab                    :   PRODUCT/tm5_constant_a
cso.cris-nh3.convert.output.var.pressure.hybb                    :   PRODUCT/tm5_constant_b
cso.cris-nh3.convert.output.var.pressure.units                   :   Pa

! (total) airmass factor:
cso.cris-nh3.convert.output.var.amf.dims                         :   pixel retr
cso.cris-nh3.convert.output.var.amf.from                         :   PRODUCT/air_mass_factor_total
cso.cris-nh3.convert.output.var.amf.attrs                        :   { 'coordinates' : None, 'ancillary_variables' : None }

! tropospheric airmass factor:
cso.cris-nh3.convert.output.var.amf_trop.dims                    :   pixel retr
cso.cris-nh3.convert.output.var.amf_trop.from                    :   PRODUCT/air_mass_factor_troposphere
cso.cris-nh3.convert.output.var.amf_trop.attrs                   :   { 'coordinates' : None, 'ancillary_variables' : None }

! number of apriori layers in retrieval layer,
! enforce that it is stored as a short integer:
cso.cris-nh3.convert.output.var.nla.dims                         :   pixel retr
cso.cris-nh3.convert.output.var.nla.dtype                        :   i2
cso.cris-nh3.convert.output.var.nla.from                         :   PRODUCT/tm5_tropopause_layer_index
cso.cris-nh3.convert.output.var.nla.attrs                        :   { 'coordinates' : None, 'ancillary_variables' : None }

! description:
!   kernel := averaging_kernel * amf/amf_trop
! for layers up to l_trop, zero above
cso.cris-nh3.convert.output.var.kernel_trop.dims                 :   pixel layer retr
cso.cris-nh3.convert.output.var.kernel_trop.special              :   kernel_trop
cso.cris-nh3.convert.output.var.kernel_trop.avk                  :   PRODUCT/averaging_kernel
cso.cris-nh3.convert.output.var.kernel_trop.amf                  :   PRODUCT/air_mass_factor_total
cso.cris-nh3.convert.output.var.kernel_trop.amft                 :   PRODUCT/air_mass_factor_troposphere
cso.cris-nh3.convert.output.var.kernel_trop.troplayer            :   PRODUCT/tm5_tropopause_layer_index
cso.cris-nh3.convert.output.var.kernel_trop.attrs                :   { 'coordinates' : None, 'ancillary_variables' : None }

! cloud property:
cso.cris-nh3.convert.output.var.cloud_fraction.dims             :   pixel
cso.cris-nh3.convert.output.var.cloud_fraction.from             :   PRODUCT/SUPPORT_DATA/INPUT_DATA/cloud_fraction_crb
cso.cris-nh3.convert.output.var.cloud_fraction.attrs            :   { 'coordinates' : None, 'source' : None }

! cloud property:
cso.cris-nh3.convert.output.var.cloud_radiance_fraction.dims    :   pixel
cso.cris-nh3.convert.output.var.cloud_radiance_fraction.from    :   PRODUCT/SUPPORT_DATA/DETAILED_RESULTS/cloud_radiance_fraction_nitrogendioxide_window
cso.cris-nh3.convert.output.var.cloud_radiance_fraction.attrs   :   { 'coordinates' : None, 'ancillary_variables' : None }

! quality flag:
cso.cris-nh3.convert.output.var.qa_value.dims                   :   pixel
cso.cris-nh3.convert.output.var.qa_value.from                   :   PRODUCT/qa_value
!~ skip some attributes, cf-checker complains ...
cso.cris-nh3.convert.output.var.qa_value.attrs                  :   { 'valid_min' : None, 'valid_max' : None }


!======================================================================
!===
!=== listing
!===
!======================================================================

! csv file that will hold records per file with:
! - timerange of pixels in file
! - orbit number
cso.cris-nh3.listing.file                :  ${my.work}/CSO-data/${my.region}/CrIS/NH3/${my.cris-nh3.selection}/listing.csv

! renew table if file already exists?
cso.cris-nh3.listing.renew               :  True

! time range:
cso.cris-nh3.listing.timerange.start     :  ${my.timerange.start}
cso.cris-nh3.listing.timerange.end       :  ${my.timerange.end}

! filename filters relative to listing file that should be scanned for orbit files;
! names could include time templates ;
! if same orbit is found in multiple directories, the first found is used;
! remove existing table for safety to ensure that this is done correctly ...
cso.cris-nh3.listing.patterns            :  %Y/%m/CrIS_*.nc

! extra columns to be added, read from global attributes:
cso.cris-nh3.listing.xcolumns            :  orbit


!======================================================================
!===
!=== catalogue
!===
!======================================================================

! listing file with filenames/timerange.
cso.cris-nh3.catalogue.input.listing               :  ${cso.cris-nh3.listing.file}

! time range:
cso.cris-nh3.catalogue.timerange.start             :  ${my.timerange.start}
cso.cris-nh3.catalogue.timerange.end               :  ${my.timerange.end}

! target filenames; templates:
! - time values
! - %{orbit}   : from listing
! - %{varname} for variable
cso.cris-nh3.catalogue.output.file                 :  ${my.work}/CSO-data-catalogue/${my.region}/CrIS/NH3/${my.cris-nh3.selection}/%Y/%m/%d/CrIS_NH3_%{orbit}__%{varname}.png

! map domain (west east south north)
cso.cris-nh3.catalogue.domain                      :  ${my.region.west} ${my.region.east} ${my.region.south} ${my.region.north}

! figure size (inches), default is (8,6):
cso.cris-nh3.catalogue.figsize                     :  ${my.region.figsize}

! renew existing files?
!cso.cris-nh3.catalogue.renew                       :  False
cso.cris-nh3.catalogue.renew                       :  True

! variables to be plotted:
cso.cris-nh3.catalogue.vars                        :  vcd vcd_errvar qa_value \
                                                      amf amf_trop nla \
                                                      cloud_fraction cloud_radiance_fraction

!! color for no-data values in track, default '0.8' (gray):
!cso.cris-nh3.catalogue.color_nan                   :  white

!! extra keyword arguments for map:
!cso.cris-nh3.catalogue.map                         :  resolution='h'

! convert units:
cso.cris-nh3.catalogue.var.vcd.units                         :  umol/m2
! style:
cso.cris-nh3.catalogue.var.vcd.vmin                          :   0.0
cso.cris-nh3.catalogue.var.vcd.vmax                          :  100.0

! show error as std.dev, convert to vcd units:
cso.cris-nh3.catalogue.var.vcd_errvar.units                  :  umol/m2
! style:
cso.cris-nh3.catalogue.var.vcd_errvar.vmax                   :  100.0

! style:
cso.cris-nh3.catalogue.var.amf.vmin                          :   0.0
cso.cris-nh3.catalogue.var.amf.vmax                          :   4.0

! style:
cso.cris-nh3.catalogue.var.amf_trop.vmin                     :   0.0
cso.cris-nh3.catalogue.var.amf_trop.vmax                     :   4.0

! style:
cso.cris-nh3.catalogue.var.nla.vmin                          :   1
cso.cris-nh3.catalogue.var.nla.vmax                          :   34

! style:
cso.cris-nh3.catalogue.var.qa_value.vmin                     :   0.5
cso.cris-nh3.catalogue.var.qa_value.vmax                     :   1.0
cso.cris-nh3.catalogue.var.qa_value.colors                   :   ['red','yellow','green']

! style:
cso.cris-nh3.catalogue.var.cloud_fraction.vmax               :   1.0
cso.cris-nh3.catalogue.var.cloud_fraction.colors             :   ['blue','cyan','white']

! style:
cso.cris-nh3.catalogue.var.cloud_radiance_fraction.vmax      :   1.0
cso.cris-nh3.catalogue.var.cloud_radiance_fraction.colors    :   ['blue','cyan','white']


!-----------------------------------------------------------
! catalogue index
!-----------------------------------------------------------

! target location:
cso.cris-nh3.catalogue-index.outdir                    :  ${my.work}/CSO-data-catalogue/${my.region}/CrIS/NH3/${my.cris-nh3.selection}

! title:
cso.cris-nh3.catalogue-index.header                    :  CSO catalogue
! show info on created page?
cso.cris-nh3.catalogue-index.info                      :  True

! create new page for each value?
cso.cris-nh3.catalogue-index.newpage                   :  True

! content type:
cso.cris-nh3.catalogue-index.type                      :  list
! define row values:
cso.cris-nh3.catalogue-index.name                      :  date
cso.cris-nh3.catalogue-index.values                    :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 day', '%Y%m%d' )

! create new page for each value:
cso.cris-nh3.catalogue-index.date.newpage                   :  True
! content type:
cso.cris-nh3.catalogue-index.date.type                      :  table-row
! define row values:
cso.cris-nh3.catalogue-index.date.name                      :  orbit
cso.cris-nh3.catalogue-index.date.values                    :  CsvFile( '%{date[0:4]}/%{date[4:6]}/%{date[6:8]}/orbits.csv' )

! content type:
cso.cris-nh3.catalogue-index.date.orbit.type                :  table-col
! define column values:
cso.cris-nh3.catalogue-index.date.orbit.name                :  var
cso.cris-nh3.catalogue-index.date.orbit.values              :  ${cso.cris-nh3.catalogue.vars}

! content type:
cso.cris-nh3.catalogue-index.date.orbit.var.type            :  img
! define image:
cso.cris-nh3.catalogue-index.date.orbit.var.img             :  %{date[0:4]}/%{date[4:6]}/%{date[6:8]}/CrIS_NH3_%{orbit}__%{var}.png
cso.cris-nh3.catalogue-index.date.orbit.var.kwargs          :  height=300



!======================================================================
!===
!=== gridded orbits
!===
!======================================================================


!-----------------------------------------------------------
! gridded orbits
!-----------------------------------------------------------

! time range:
cso.cris-nh3.gridded.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.gridded.timerange.end          :  ${my.timerange.end}
! create one gridded file per hour:
cso.cris-nh3.gridded.timerange.step         :  hour

! renew existing files?
cso.cris-nh3.gridded.renew                  :  True

! keyword used for subdir for resolution and filters:
my.gridded.subdir                           :  ${my.region}__r01x01__qa08

!~

! grid definition:
!~ same as pixel selection on conversion:
cso.cris-nh3.gridded.grid.west              :  ${my.region.west}
cso.cris-nh3.gridded.grid.east              :  ${my.region.east}
cso.cris-nh3.gridded.grid.south             :  ${my.region.south}
cso.cris-nh3.gridded.grid.north             :  ${my.region.north}
! resolution:
cso.cris-nh3.gridded.grid.dlon              :  0.1
cso.cris-nh3.gridded.grid.dlat              :  0.1

! level of recursive splitting of footprint into triangles,
! and assignment of centroids to grid cells;
! for 4-corner footprints, number of centroids is:
!  1 (levels=0), 4 (1), 8 (2), 16 (3), 64 (5), 256 (7)
cso.cris-nh3.gridded.mapping.levels         :  5

!~

! keywords for source files; 
! the first one should have the footprints;
! here the only source are the converted files:
cso.cris-nh3.gridded.sources                  :  data

! input files for each source type:
!~ here: specify listing file, 
!  this is only supported for a single source
cso.cris-nh3.gridded.source.data.listing      :  ${cso.cris-nh3.listing.file}
!!~ alternative: filename patterns with time templates,
!!  but here the source files do not have time stamps
!cso.cris-nh3.gridded.source.data.filenames    :  ${my.work}/CSO-data/CrIS/RPRO/NH3/${my.region}/%Y/%m/CrIS_*.nc

!~

! keywords for filters:
cso.cris-nh3.gridded.filters                  :  quality

! minimum quality value required:
cso.cris-nh3.gridded.filter.quality.var       :  qa_value
cso.cris-nh3.gridded.filter.quality.type      :  min
cso.cris-nh3.gridded.filter.quality.min       :  0.8
cso.cris-nh3.gridded.filter.quality.units     :  1
        
!~

! target file, might contain templates:
!   %Y,%m,etc     : time values
cso.cris-nh3.gridded.output.file              :  ${my.work}/CSO-gridded/${my.gridded.subdir}/%Y/%m/CrIS_NH3_%Y%m%d_%H%M_gridded.nc

! pack floats as short values?
cso.cris-nh3.gridded.output.packed            :  True
! zlib compression level (default 1, 0 for no compression):
cso.cris-nh3.gridded.output.complevel         :  1

! data variables to be created:
cso.cris-nh3.gridded.output.vars              :  yr

! input variables:
!   data:vcd    : variable "vcd" from source "data"
cso.cris-nh3.gridded.output.yr.source         :  data:vcd


!-----------------------------------------------------------
! catalogue of gridded fields
!-----------------------------------------------------------

! time range:
cso.cris-nh3.gridded-catalogue.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.gridded-catalogue.timerange.end          :  ${my.timerange.end}
! create one gridded file per hour:
cso.cris-nh3.gridded-catalogue.timerange.step         :  hour

! renew existing files?
cso.cris-nh3.gridded-catalogue.renew                  :  True
!cso.cris-nh3.gridded-catalogue.renew                  :  False

! target directory for catalogue:
my.gridded-catalogue.output.dir                       :  ${my.work}/CSO-gridded/${my.gridded.subdir}/catalogue

! input files:
cso.cris-nh3.gridded-catalogue.input.file             :  ${my.work}/CSO-gridded/${my.gridded.subdir}/%Y/%m/CrIS_NH3_%Y%m%d_%H%M_gridded.nc
!!~ idem for daily average:
!cso.cris-nh3.gridded-catalogue.input.file             :  ${my.work}/CSO-gridded/${my.gridded.subdir}/CrIS_NH3_%Y%m%d_aver_gridded.nc

! target files, time tempates and variable name are replaced:
cso.cris-nh3.gridded-catalogue.output.file            :  ${my.gridded-catalogue.output.dir}/%Y/%m/%d/CrIS_NH3_%Y%m%d_%H%M_gridded_%{var}.png
!!~ idem for daily average:
!cso.cris-nh3.gridded-catalogue.output.file            :  ${my.gridded-catalogue.output.dir}/%Y/%m/%d/CrIS_NH3_%Y%m%d_aver_gridded_%{var}.png

! figure size (inches), default is (8,6):
cso.cris-nh3.gridded-catalogue.figsize                :  ${my.region.figsize}

! variables to be plotted:
cso.cris-nh3.gridded-catalogue.vars                   :  yr

! variable:
cso.cris-nh3.gridded-catalogue.var.yr.source          :  yr
! convert units:
cso.cris-nh3.gridded-catalogue.var.yr.units           :  umol/m2
! style:
cso.cris-nh3.gridded-catalogue.var.yr.vmin            :    0.0
cso.cris-nh3.gridded-catalogue.var.yr.vmax            :  100.0


!-----------------------------------------------------------
! gridded catalogue index
!-----------------------------------------------------------

! target location:
cso.cris-nh3.gridded-catalogue-index.outdir                    :  ${my.gridded-catalogue.output.dir}

! title:
cso.cris-nh3.gridded-catalogue-index.header                    :  CSO catalogue
! show info on created page?
cso.cris-nh3.gridded-catalogue-index.info                      :  True

! create new page for each value?
cso.cris-nh3.gridded-catalogue-index.newpage                   :  True

! content type:
cso.cris-nh3.gridded-catalogue-index.type                      :  list
! define row values:
cso.cris-nh3.gridded-catalogue-index.name                      :  date
cso.cris-nh3.gridded-catalogue-index.values                    :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 day', '%Y%m%d' )

! create new page for each value:
cso.cris-nh3.gridded-catalogue-index.date.newpage              :  True
! content type:
cso.cris-nh3.gridded-catalogue-index.date.type                 :  table-row
! define row values:
cso.cris-nh3.gridded-catalogue-index.date.name                 :  time
cso.cris-nh3.gridded-catalogue-index.date.values               :  Range( 0, 23, 1, '%2.2i00' )

! content type:
cso.cris-nh3.gridded-catalogue-index.date.time.type            :  table-col
! define column values:
cso.cris-nh3.gridded-catalogue-index.date.time.name            :  var
cso.cris-nh3.gridded-catalogue-index.date.time.values          :  ${cso.cris-nh3.gridded-catalogue.vars}

! content type:
cso.cris-nh3.gridded-catalogue-index.date.time.var.type        :  img
! define image:
cso.cris-nh3.gridded-catalogue-index.date.time.var.img         :  %{date[0:4]}/%{date[4:6]}/%{date[6:8]}/CrIS_NH3_%{date}_%{time}_gridded_%{var}.png
cso.cris-nh3.gridded-catalogue-index.date.time.var.kwargs      :  height=300




!======================================================================
!===
!=== super observations
!===
!======================================================================

! time range:
cso.cris-nh3.superobs.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.superobs.timerange.end          :  ${my.timerange.end}

! renew existing files?
cso.cris-nh3.superobs.renew                  :  True
!cso.cris-nh3.superobs.renew                  :  False

!~

! keyword to describe super-observations,
! here gridding to 1.0x1.0
my.supobs.key                               :  sup1x1__qa08

! grid definition:
cso.cris-nh3.superobs.grid.west              :  ${my.region.west}
cso.cris-nh3.superobs.grid.east              :  ${my.region.east}
cso.cris-nh3.superobs.grid.south             :  ${my.region.south}
cso.cris-nh3.superobs.grid.north             :  ${my.region.north}
! resolution:
cso.cris-nh3.superobs.grid.dlon              :  1.0
cso.cris-nh3.superobs.grid.dlat              :  1.0

! mapping level from footprints to grid cells:
!!~ center only, one pixel is enough ..
!cso.cris-nh3.superobs.mapping.levels             :  0
!cso.cris-nh3.superobs.mapping.minimum_number     :  0
!~ footprint area
cso.cris-nh3.superobs.mapping.levels             :  3
cso.cris-nh3.superobs.mapping.minimum_coverage   :  0.10

!~

! input listing:
cso.cris-nh3.superobs.source.listing         :  ${cso.cris-nh3.listing.file}


!~

! keywords for filters:
cso.cris-nh3.superobs.filters                  :  quality

! minimum quality value required:
cso.cris-nh3.superobs.filter.quality.var       :  qa_value
cso.cris-nh3.superobs.filter.quality.type      :  min
cso.cris-nh3.superobs.filter.quality.min       :  0.8
cso.cris-nh3.superobs.filter.quality.units     :  1
        
!~

! output directory and filename:
cso.cris-nh3.superobs.output.file              :  ${my.work}/CSO-data/${my.region}/CrIS/NH3/${my.cris-nh3.selection}__${my.supobs.key}/%Y/%m/%{root}.nc

! pack floats as short values?
cso.cris-nh3.superobs.output.packed        :  False
! zlib compression level (default 1, 0 for no compression):
cso.cris-nh3.superobs.output.complevel     :  1


!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
! listing
!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

! renew table if file already exists?
cso.cris-nh3.superobs-listing.renew               :  True

! time range:
cso.cris-nh3.superobs-listing.timerange.start     :  ${my.timerange.start}
cso.cris-nh3.superobs-listing.timerange.end       :  ${my.timerange.end}

! filename filters relative to listing file that should be scanned for orbit files;
! names could include time templates ;
! if same orbit is found in multiple directories, the first found is used;
! remove existing table for safety to ensure that this is done correctly ...
cso.cris-nh3.superobs-listing.file                :  ${my.work}/CSO-data/${my.region}/CrIS/NH3/${my.cris-nh3.selection}__${my.supobs.key}/listing.csv
cso.cris-nh3.superobs-listing.patterns            :  %Y/%m/CrIS_*.nc

! extra columns to be added, read from global attributes:
cso.cris-nh3.superobs-listing.xcolumns            :  orbit processing processor_version


!-----------------------------------------------------------
! catalogue of superobs fields
!-----------------------------------------------------------

! listing file with filenames/timerange.
cso.cris-nh3.superobs-catalogue.input.listing               :  ${cso.cris-nh3.superobs-listing.file}

! time range:
cso.cris-nh3.superobs-catalogue.timerange.start             :  ${my.timerange.start}
cso.cris-nh3.superobs-catalogue.timerange.end               :  ${my.timerange.end}

! target filenames; templates:
! - time values
! - %{orbit}   : from listing
! - %{varname} for variable
cso.cris-nh3.superobs-catalogue.output.file                 :  ${my.work}/CSO-data-catalogue__${my.supobs.key}/${my.region}/CrIS/NH3/${my.cris-nh3.selection}/%Y/%m/%d/CrIS_NH3_%{orbit}__%{varname}.png

! map domain (west east south north)
cso.cris-nh3.superobs-catalogue.domain                      :  ${my.region.west} ${my.region.east} ${my.region.south} ${my.region.north}

! figure size (inches), default is (8,6):
cso.cris-nh3.superobs-catalogue.figsize                     :  ${my.region.figsize}

! renew existing files?
!cso.cris-nh3.superobs-catalogue.renew                       :  False
cso.cris-nh3.superobs-catalogue.renew                       :  True

! variables to be plotted:
cso.cris-nh3.superobs-catalogue.vars                        :  vcd vcd_errvar qa_value \
                                                               amf amf_trop nla \
                                                               cloud_fraction cloud_radiance_fraction

!! color for no-data values in track, default '0.8' (gray):
!cso.cris-nh3.superobs-catalogue.color_nan                   :  white

!! extra keyword arguments for map:
!cso.cris-nh3.superobs-catalogue.map                         :  resolution='h'

! convert units:
cso.cris-nh3.superobs-catalogue.var.vcd.units                         :  umol/m2
! style:
cso.cris-nh3.superobs-catalogue.var.vcd.vmin                          :   0.0
cso.cris-nh3.superobs-catalogue.var.vcd.vmax                          :  100.0

! show error as std.dev, convert to vcd units:
cso.cris-nh3.superobs-catalogue.var.vcd_errvar.units                  :  umol/m2
! style:
cso.cris-nh3.superobs-catalogue.var.vcd_errvar.vmax                   :  100.0

! style:
cso.cris-nh3.superobs-catalogue.var.amf.vmin                          :   0.0
cso.cris-nh3.superobs-catalogue.var.amf.vmax                          :   4.0

! style:
cso.cris-nh3.superobs-catalogue.var.amf_trop.vmin                     :   0.0
cso.cris-nh3.superobs-catalogue.var.amf_trop.vmax                     :   4.0

! style:
cso.cris-nh3.superobs-catalogue.var.nla.vmin                          :   1
cso.cris-nh3.superobs-catalogue.var.nla.vmax                          :   34

! style:
cso.cris-nh3.superobs-catalogue.var.qa_value.vmin                     :   0.5
cso.cris-nh3.superobs-catalogue.var.qa_value.vmax                     :   1.0
cso.cris-nh3.superobs-catalogue.var.qa_value.colors                   :   ['red','yellow','green']

! style:
cso.cris-nh3.superobs-catalogue.var.cloud_fraction.vmax               :   1.0
cso.cris-nh3.superobs-catalogue.var.cloud_fraction.colors             :   ['blue','cyan','white']

! style:
cso.cris-nh3.superobs-catalogue.var.cloud_radiance_fraction.vmax      :   1.0
cso.cris-nh3.superobs-catalogue.var.cloud_radiance_fraction.colors    :   ['blue','cyan','white']


! *** catalogue index

! target location:
cso.cris-nh3.superobs-catalogue-index.outdir                    :  ${my.work}/CSO-data-catalogue__${my.supobs.key}/${my.region}/CrIS/NH3/${my.cris-nh3.selection}

! title:
cso.cris-nh3.superobs-catalogue-index.header                    :  CSO catalogue
! show info on created page?
cso.cris-nh3.superobs-catalogue-index.info                      :  True

! create new page for each value?
cso.cris-nh3.superobs-catalogue-index.newpage                   :  True

! content type:
cso.cris-nh3.superobs-catalogue-index.type                      :  list
! define row values:
cso.cris-nh3.superobs-catalogue-index.name                      :  date
cso.cris-nh3.superobs-catalogue-index.values                    :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 day', '%Y%m%d' )

! create new page for each value:
cso.cris-nh3.superobs-catalogue-index.date.newpage                   :  True
! content type:
cso.cris-nh3.superobs-catalogue-index.date.type                      :  table-row
! define row values:
cso.cris-nh3.superobs-catalogue-index.date.name                      :  orbit
cso.cris-nh3.superobs-catalogue-index.date.values                    :  CsvFile( '%{date[0:4]}/%{date[4:6]}/%{date[6:8]}/orbits.csv' )

! content type:
cso.cris-nh3.superobs-catalogue-index.date.orbit.type                :  table-col
! define column values:
cso.cris-nh3.superobs-catalogue-index.date.orbit.name                :  var
cso.cris-nh3.superobs-catalogue-index.date.orbit.values              :  ${cso.cris-nh3.superobs-catalogue.vars}

! content type:
cso.cris-nh3.superobs-catalogue-index.date.orbit.var.type            :  img
! define image:
cso.cris-nh3.superobs-catalogue-index.date.orbit.var.img             :  %{date[0:4]}/%{date[4:6]}/%{date[6:8]}/CrIS_NH3_%{orbit}__%{var}.png
cso.cris-nh3.superobs-catalogue-index.date.orbit.var.kwargs          :  height=300



!======================================================================
!===
!=== simulation catalogue
!===
!======================================================================


!-----------------------------------------------------------
! simulation catalogue
!-----------------------------------------------------------

! time range:
cso.cris-nh3.sim-catalogue.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.sim-catalogue.timerange.end          :  ${my.timerange.end}

! listing with "data" and "state" files:
cso.cris-nh3.sim-catalogue.input.listing          :  ${CSO_PREFIX}/oper/listing.csv

! target directory for figures:
! - time values  : average time of pixels in file
! full filenames includes "basename" of simulation files (without "_data.nc" or "_state.nc")
! and the variable name: 
!   <output.dir>/<basename>_<var>.png
cso.cris-nh3.sim-catalogue.output.dir            :  ${my.work}/CSO-sim-catalogue/%Y/%m

!! domain of converted data:
!cso.cris-nh3.sim-catalogue.domain                 :  ${my.region.west} ${my.region.east} ${my.region.south} ${my.region.north}
! map domain used for simulations (west east south north):
cso.cris-nh3.sim-catalogue.domain                 :  -10 30 35 65
!!~ globe:
!cso.cris-nh3.sim-catalogue.domain                 :  -180 180 -90 90

! figure size (inches), default is (8,6):
cso.cris-nh3.sim-catalogue.figsize                :  ${my.region.figsize}

! format for timestamp in title, here just the day:
cso.cris-nh3.sim-catalogue.title.tfmt             :  %Y-%m-%d

! renew existing files?
!cso.cris-nh3.sim-catalogue.renew                  :  False
cso.cris-nh3.sim-catalogue.renew                  :  True

! variables to be plotted:
cso.cris-nh3.sim-catalogue.vars                   :  yr ys ya

! variable:
cso.cris-nh3.sim-catalogue.var.yr.source          :  data:yr
! annote:
cso.cris-nh3.sim-catalogue.var.yr.long_name       :  CrIS NH3 retrieval
! convert units:
cso.cris-nh3.sim-catalogue.var.yr.units           :  umol/m2
! style:
cso.cris-nh3.sim-catalogue.var.yr.vmin            :   0.0
cso.cris-nh3.sim-catalogue.var.yr.vmax            : 500.0
cso.cris-nh3.sim-catalogue.var.yr.cmap            : colors="hot_r"

! variable:
cso.cris-nh3.sim-catalogue.var.ys.source          :  state:ys
! annote:
cso.cris-nh3.sim-catalogue.var.ys.long_name       :  EMEP CrIS NH3 simulation
! convert units:
cso.cris-nh3.sim-catalogue.var.ys.units           :  umol/m2
! style:
cso.cris-nh3.sim-catalogue.var.ys.vmin            :  ${cso.cris-nh3.sim-catalogue.var.yr.vmin}
cso.cris-nh3.sim-catalogue.var.ys.vmax            :  ${cso.cris-nh3.sim-catalogue.var.yr.vmax}
cso.cris-nh3.sim-catalogue.var.ys.cmap            :  ${cso.cris-nh3.sim-catalogue.var.yr.cmap}

! variable:
cso.cris-nh3.sim-catalogue.var.ya.source          :  data:ya
! annote:
cso.cris-nh3.sim-catalogue.var.ya.long_name       :  CrIS NH3 prior
! convert units:
cso.cris-nh3.sim-catalogue.var.ya.units           :  umol/m2
! style:
cso.cris-nh3.sim-catalogue.var.ya.vmin            :  ${cso.cris-nh3.sim-catalogue.var.yr.vmin}
cso.cris-nh3.sim-catalogue.var.ya.vmax            :  ${cso.cris-nh3.sim-catalogue.var.yr.vmax}
cso.cris-nh3.sim-catalogue.var.ya.cmap            :  ${cso.cris-nh3.sim-catalogue.var.yr.cmap}



!-----------------------------------------------------------
! sim catalogue index
!-----------------------------------------------------------

! target location:
cso.cris-nh3.sim-catalogue-index.outdir                     :  ${my.work}/CSO-sim-catalogue/index

! title:
cso.cris-nh3.sim-catalogue-index.header                     :  CSO catalogue
! show info on created page?
cso.cris-nh3.sim-catalogue-index.info                       :  True

! create new page for each value?
cso.cris-nh3.sim-catalogue-index.newpage                    :  True

! content type:
cso.cris-nh3.sim-catalogue-index.type                       :  list
! define row values:
cso.cris-nh3.sim-catalogue-index.name                       :  month
cso.cris-nh3.sim-catalogue-index.values                     :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 month', '%Y-%m' )

! create new page for each value:
cso.cris-nh3.sim-catalogue-index.month.newpage              :  True
! content type:
cso.cris-nh3.sim-catalogue-index.month.type                 :  table-row
! define row values:
cso.cris-nh3.sim-catalogue-index.month.name                 :  basename
cso.cris-nh3.sim-catalogue-index.month.values               :  CsvFile( '../%{month[0:4]}/%{month[5:7]}/basenames.csv' )

! content type:
cso.cris-nh3.sim-catalogue-index.month.basename.type        :  table-col
! define column values:
cso.cris-nh3.sim-catalogue-index.month.basename.name        :  var
cso.cris-nh3.sim-catalogue-index.month.basename.values      :  ${cso.cris-nh3.sim-catalogue.vars}

! content type:
cso.cris-nh3.sim-catalogue-index.month.basename.var.type    :  img
! define image:
cso.cris-nh3.sim-catalogue-index.month.basename.var.img     :  ../%{month[0:4]}/%{month[5:7]}/%{basename}_%{var}.png
cso.cris-nh3.sim-catalogue-index.month.basename.var.kwargs  :  height=400



!======================================================================
!===
!=== gridded simulated orbits
!===
!======================================================================


!-----------------------------------------------------------
! gridded orbits
!-----------------------------------------------------------

! time range:
cso.cris-nh3.sim-gridded.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.sim-gridded.timerange.end          :  ${my.timerange.end}
! step is one of: hour | day | month
cso.cris-nh3.sim-gridded.timerange.step         :  monthly
!cso.cris-nh3.sim-gridded.timerange.step         :  hour

! renew existing files?
cso.cris-nh3.sim-gridded.renew                  :  True
!cso.cris-nh3.sim-gridded.renew                  :  False

! target directory, incl. subdir for resolution and filters:
my.sim-gridded.dir                              :  ${my.work}/CSO-sim-gridded/r02x02

!~

! grid definition:
!!~ same as pixel selection on conversion:
!cso.cris-nh3.sim-gridded.grid.west              :  ${my.region.west}
!cso.cris-nh3.sim-gridded.grid.east              :  ${my.region.east}
!cso.cris-nh3.sim-gridded.grid.south             :  ${my.region.south}
!cso.cris-nh3.sim-gridded.grid.north             :  ${my.region.north}
!! resolution:
!cso.cris-nh3.sim-gridded.grid.dlon              :  0.1
!cso.cris-nh3.sim-gridded.grid.dlat              :  0.1
!
!~ observation operator tutorial:
cso.cris-nh3.sim-gridded.grid.west              :  -10
cso.cris-nh3.sim-gridded.grid.east              :   30
cso.cris-nh3.sim-gridded.grid.south             :   35
cso.cris-nh3.sim-gridded.grid.north             :   65
! resolution:
cso.cris-nh3.sim-gridded.grid.dlon              :  0.2
cso.cris-nh3.sim-gridded.grid.dlat              :  0.2

! level of recursive splitting of footprint into triangles,
! and assignment of centroids to grid cells;
! for 4-corner footprints, number of centroids is:
!  1 (levels=0), 4 (1), 8 (2), 16 (3), 64 (5), 256 (7)
cso.cris-nh3.sim-gridded.mapping.levels         :  5

!~

! keywords for source files; 
! the first one should have the footprints:
cso.cris-nh3.sim-gridded.sources                  :  data state

! listing file for simulation output:
! - time templates are evaluated
! - index column is assumed to be "filename" and holds the name of the "data" file,
!   for the other sources ("state" etc) there should be columns "filename_state" etc.
cso.cris-nh3.sim-gridded.source.listing           :  ${CSO_PREFIX}/oper/listing.csv

!~

! keywords for filters:
!cso.cris-nh3.sim-gridded.filters                  :  quality
cso.cris-nh3.sim-gridded.filters                  :  

!! minimum quality value required:
!cso.cris-nh3.sim-gridded.filter.quality.var       :  qa_value
!cso.cris-nh3.sim-gridded.filter.quality.type      :  min
!cso.cris-nh3.sim-gridded.filter.quality.min       :  0.8
!cso.cris-nh3.sim-gridded.filter.quality.units     :  1
        
!~

! output frequency:
!   hourly (default) | daily | monthly | yearly
cso.cris-nh3.sim-gridded.output.freq              :  monthly

! keywords for output files:
cso.cris-nh3.sim-gridded.output.files             :  all

! target file, might contain templates:
!   %Y,%m,etc     : time values
!   %{basename}   : basename (without extension) of first source file
cso.cris-nh3.sim-gridded.output.all.filename      :  ${my.sim-gridded.dir}/CSO_output_%Y%m_gridded_${cso.cris-nh3.sim-gridded.timerange.step}.nc

! data variables to be created:
!cso.cris-nh3.sim-gridded.output.all.vars          :  yr ys
cso.cris-nh3.sim-gridded.output.all.vars          :  yr ys mod_col xrc_log xrc_lin

! input variables:
!   data:yr    : from data file
!   state:ys    : from state file
cso.cris-nh3.sim-gridded.output.all.yr.source        :  data:yr
cso.cris-nh3.sim-gridded.output.all.ys.source        :  state:ys
cso.cris-nh3.sim-gridded.output.all.mod_col.source   :  state:mod_col
cso.cris-nh3.sim-gridded.output.all.xrc_log.source   :  state:xrc_log
cso.cris-nh3.sim-gridded.output.all.xrc_lin.source   :  state:xrc_lin

! remove last dimension ("retr") if equal to 1?
cso.cris-nh3.sim-gridded.output.squeeze              :  False


!-----------------------------------------------------------
! catalogue of gridded simulations
!-----------------------------------------------------------

! time range:
cso.cris-nh3.sim-gridded-catalogue.timerange.start        :  ${my.timerange.start}
cso.cris-nh3.sim-gridded-catalogue.timerange.end          :  ${my.timerange.end}

! time resolutions:
!cso.cris-nh3.sim-gridded-catalogue.timerange.steps        :  monthly yearly
cso.cris-nh3.sim-gridded-catalogue.timerange.steps        :  monthly

! renew existing files?
cso.cris-nh3.sim-gridded-catalogue.renew                  :  True
!cso.cris-nh3.sim-gridded-catalogue.renew                  :  False

! target files, time tempates and variable name are replaced:
cso.cris-nh3.sim-gridded-catalogue.monthly.output.file    :  ${my.sim-gridded.dir}__catalogue/CrIS_NH3_%Y%m_gridded_%{var}.png
cso.cris-nh3.sim-gridded-catalogue.yearly.output.file     :  ${my.sim-gridded.dir}__catalogue/CrIS_NH3_%Y_gridded_%{var}.png

! figure size (inches), default is (8,6):
cso.cris-nh3.sim-gridded-catalogue.figsize                :  ${my.region.figsize}

! input files:
#for VAR in ${cso.cris-nh3.sim-gridded-catalogue.vars}
cso.cris-nh3.sim-gridded-catalogue.monthly.var.VAR.input.file    :  ${my.sim-gridded.dir}/CSO_output_%Y%m_gridded_monthly.nc
cso.cris-nh3.sim-gridded-catalogue.yearly.var.VAR.input.file     :  ${my.sim-gridded.dir}/CSO_output_%Y_gridded_yearly.nc
#endfor

! variables to be plotted:
cso.cris-nh3.sim-gridded-catalogue.vars                   :  yr ys ys-yr mod_col xrc_log xrc_lin
!cso.cris-nh3.sim-gridded-catalogue.vars                   :  yr ys ys-yr

! variable:
cso.cris-nh3.sim-gridded-catalogue.var.yr.input.var       :  yr
! annote:
cso.cris-nh3.sim-gridded-catalogue.var.yr.long_name       :  CrIS NH3 retrieval
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.yr.units           :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.yr.vmin            :    0.0
cso.cris-nh3.sim-gridded-catalogue.var.yr.vmax            :  300.0
cso.cris-nh3.sim-gridded-catalogue.var.yr.cmap            :  colors="hot_r"

! variable:
cso.cris-nh3.sim-gridded-catalogue.var.ys.input.var       :  ys
! annote:
cso.cris-nh3.sim-gridded-catalogue.var.ys.long_name       :  EMEP CrIS NH3 simulation
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.ys.units           :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.ys.vmin            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmin}
cso.cris-nh3.sim-gridded-catalogue.var.ys.vmax            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmax}
cso.cris-nh3.sim-gridded-catalogue.var.ys.cmap            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.cmap}

! annote:
cso.cris-nh3.sim-gridded-catalogue.var.ys-yr.long_name    :  EMEP CrIS NH3 simulation minus retrieval
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.ys-yr.units        :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.ys-yr.vmin         :  -100
cso.cris-nh3.sim-gridded-catalogue.var.ys-yr.vmax         :   100
cso.cris-nh3.sim-gridded-catalogue.var.ys-yr.cmap         :  colors="RdYlBu_r"

! variable:
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.input.var  :  mod_col
! annote:
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.long_name  :  EMEP NH3 column (CrIS pixels)
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.units      :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.vmin       :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmin}
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.vmax       :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmax}
cso.cris-nh3.sim-gridded-catalogue.var.mod_col.cmap       :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.cmap}

! variable:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.input.var       :  xrc_log
! annote:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.long_name       :  EMEP CrIS NH3 simulation (A_log)
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.units           :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.vmin            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmin}
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.vmax            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmax}
cso.cris-nh3.sim-gridded-catalogue.var.xrc_log.cmap            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.cmap}

! variable:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.input.var       :  xrc_lin
! annote:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.long_name       :  EMEP CrIS NH3 simulation (A_lin)
! convert units:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.units           :  umol/m2
! style:
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.vmin            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmin}
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.vmax            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.vmax}
cso.cris-nh3.sim-gridded-catalogue.var.xrc_lin.cmap            :  ${cso.cris-nh3.sim-gridded-catalogue.var.yr.cmap}



!-----------------------------------------------------------
! gridded catalogue index
!-----------------------------------------------------------

! target location:
cso.cris-nh3.sim-gridded-catalogue-index.outdir               :  ${my.sim-gridded.dir}__catalogue

! title:
cso.cris-nh3.sim-gridded-catalogue-index.header               :  CSO catalogue
! show info on created page?
cso.cris-nh3.sim-gridded-catalogue-index.info                 :  True

! content type:
cso.cris-nh3.sim-gridded-catalogue-index.type                 :  sections
cso.cris-nh3.sim-gridded-catalogue-index.values               :  yearly monthly
!cso.cris-nh3.sim-gridded-catalogue-index.values               :  monthly

#for TRES in ${cso.cris-nh3.sim-gridded-catalogue-index.values}

! annote:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.header               :  TRES

! content type:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.type                 :  table-row
! define row values:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.name                 :  period
#if "TRES" == "monthly"
cso.cris-nh3.sim-gridded-catalogue-index.TRES.values               :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 month', '%Y%m' )
#elif "TRES" == "yearly"
cso.cris-nh3.sim-gridded-catalogue-index.TRES.values               :  TimeSeries( ${my.timerange.start}, ${my.timerange.end}, '1 year', '%Y' )
#endif

! content type:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.type          :  table-col
! define column values:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.name          :  var
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.values        :  ${cso.cris-nh3.sim-gridded-catalogue.vars}

! content type:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.var.type      :  img
! define image:
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.var.img       :  CrIS_NH3_%{period}_gridded_%{var}.png
cso.cris-nh3.sim-gridded-catalogue-index.TRES.period.var.kwargs    :  height=400

#endfor


!======================================================================
!===
!=== end
!===
!======================================================================

+5 −8
Changes for config/tutorial/tutorial.rc: 5 added lines, 8 removed lines.
Original line number Diff line number Diff line
@@ -299,12 +299,9 @@ VIRTUAL_ENV :
! Obtain names of all available S5p files.
! Stored as csv with processing type, processor version, filenames, etc.

!! full time range:
!cso.tutorial.inquire-table-dataspace.timerange.start        :  2018-04-30 00:00:00
!cso.tutorial.inquire-table-dataspace.timerange.end          :  2025-01-01 00:00:00
! testing ...
cso.tutorial.inquire-table-dataspace.timerange.start        :  2018-06-01 00:00:00
cso.tutorial.inquire-table-dataspace.timerange.end          :  2018-07-01 00:00:00
! full time range:
cso.tutorial.inquire-table-dataspace.timerange.start        :  2018-04-30 00:00:00
cso.tutorial.inquire-table-dataspace.timerange.end          :  2025-01-01 00:00:00

! API url:
cso.tutorial.inquire-table-dataspace.url                    :  https://stac.dataspace.copernicus.eu/v1
@@ -351,8 +348,8 @@ cso.tutorial.inquire-plot.output.file : ${my.work}/Copernicus/Cope


! renew existing files (True|False) ?
!cso.tutorial.convert.renew                  :  True
cso.tutorial.convert.renew                  :  False
cso.tutorial.convert.renew                  :  True
!cso.tutorial.convert.renew                  :  False

! time range:
cso.tutorial.convert.timerange.start        :  ${my.timerange.start}
+226 −0
Changes for doc/samples/CrIS__Combined_NH3_n020_0_n010_0_n010_0_n005_0_20230301.txt: 226 added lines, 0 removed lines.
Original line number Diff line number Diff line
netcdf Combined_NH3_n020_0_n010_0_n010_0_n005_0_20230301 {
dimensions:
	Observations = 942 ;
	Layers = 15 ;
	RVMRLen = 5 ;
	nerr = 2 ;
variables:
	double Quality_Flag(Observations) ;
		Quality_Flag:long_name = "" ;
		Quality_Flag:units = "" ;
		Quality_Flag:description = "# 5 qflag_thres=4 & DOF > 0.1\n 4  qflag_thres=2 & chisq < 5 & (SNR >=1 or TCON > 0)\n 3  qflag_thres=2 & chisq < 20\n 2: qflag_thres=1 & retv < 200 ppbv\n 1: converged\n -1: did not converge" ;
		Quality_Flag:_Storage = "contiguous" ;
		Quality_Flag:_Endianness = "little" ;
	double pressure(Observations, Layers) ;
		pressure:long_name = "Retrieval Pressure Levels " ;
		pressure:units = "mbar" ;
		pressure:_Storage = "contiguous" ;
		pressure:_Endianness = "little" ;
	double tm(Observations, Layers) ;
		tm:long_name = "Temperature Profile " ;
		tm:units = "K" ;
		tm:_Storage = "contiguous" ;
		tm:_Endianness = "little" ;
	double zm(Observations, Layers) ;
		zm:long_name = "Altitude " ;
		zm:units = "km" ;
		zm:_Storage = "contiguous" ;
		zm:_Endianness = "little" ;
	double h2o(Observations, Layers) ;
		h2o:long_name = "Water Vapour Profile " ;
		h2o:units = "ppmv" ;
		h2o:_Storage = "contiguous" ;
		h2o:_Endianness = "little" ;
	double xa(Observations, Layers) ;
		xa:long_name = "Apriori Species Concentration " ;
		xa:units = "ppmv" ;
		xa:_Storage = "contiguous" ;
		xa:_Endianness = "little" ;
	double xretv(Observations, Layers) ;
		xretv:long_name = "Retrieved Species Concentration " ;
		xretv:units = "ppmv" ;
		xretv:_Storage = "contiguous" ;
		xretv:_Endianness = "little" ;
	double xretv_meas_error(Observations, Layers, nerr) ;
		xretv_meas_error:long_name = "Retrieved Species Measurement Error: (Minus,Plus)" ;
		xretv_meas_error:units = "ppmv" ;
		xretv_meas_error:_Storage = "contiguous" ;
		xretv_meas_error:_Endianness = "little" ;
	double xretv_total_error(Observations, Layers, nerr) ;
		xretv_total_error:long_name = "Retrieved Species Total Error: (Minus,Plus)" ;
		xretv_total_error:units = "ppmv" ;
		xretv_total_error:_Storage = "contiguous" ;
		xretv_total_error:_Endianness = "little" ;
	double avg_kernel(Observations, Layers, Layers) ;
		avg_kernel:long_name = "The averaging kernel is the sensitivity of the estimated state to variations in the atmospheric state. The averaging kernel matrix is stored in [col,row] notation.  The rows of the averaging kernel represent the sensitivity of the estimated state at a specific pressure level to variations in the atmospheric state at all levels. The columns of averaging kernel represent the sensitivity of the estimated state at all levels to variations in the atmospheric state at specific pressure level.  For atmospheric species this is the sensitivity of retrieved ln(vmr) to the true ln(vmr)." ;
		avg_kernel:units = "unitless in ln space for species and linear space for temperature" ;
		avg_kernel:_Storage = "contiguous" ;
		avg_kernel:_Endianness = "little" ;
	double total_covariance_error(Observations, Layers, Layers) ;
		total_covariance_error:long_name = "The total error covariance matrix is the sum of smoothing and measurement error (systmatic not included at this time). For atmospheric temperature, it represents the covariance of the error of temperature. For Atmospheric Species, it is the covariance of the error of ln(vmr)" ;
		total_covariance_error:units = "ln(vmr)^2" ;
		total_covariance_error:_Storage = "contiguous" ;
		total_covariance_error:_Endianness = "little" ;
	double noise_error_covariance(Observations, Layers, Layers) ;
		noise_error_covariance:long_name = "The Measurement error covariance matrix from the radiances.  Presently it is also used as a lower limit on the Observation error covariance matrix (Measurement + systematic + cross-state errors) as systematic and cross-state are not explicitly derived at this time.  The utility of the observation error is for comparisons with other measurements and for assimilation.  The smoothing error is accounted for when one applies the averaging kernel, so the observation error accounts for everything else." ;
		noise_error_covariance:units = "ln(vmr)^2" ;
		noise_error_covariance:_Storage = "contiguous" ;
		noise_error_covariance:_Endianness = "little" ;
	double tot_col(Observations) ;
		tot_col:long_name = "Retrieved Species Total Column" ;
		tot_col:units = "molec/cm2" ;
		tot_col:_Storage = "contiguous" ;
		tot_col:_Endianness = "little" ;
	double tot_col_meas_error(Observations) ;
		tot_col_meas_error:long_name = "Retrieved Species Total Column Measurement Error" ;
		tot_col_meas_error:units = "molec/cm2" ;
		tot_col_meas_error:_Storage = "contiguous" ;
		tot_col_meas_error:_Endianness = "little" ;
	double tot_col_total_error(Observations) ;
		tot_col_total_error:long_name = "Retrieved Species Total Column Total Error" ;
		tot_col_total_error:units = "molec/cm2" ;
		tot_col_total_error:_Storage = "contiguous" ;
		tot_col_total_error:_Endianness = "little" ;
	double tsfc(Observations) ;
		tsfc:long_name = "Surface Temperature" ;
		tsfc:units = "K" ;
		tsfc:_Storage = "contiguous" ;
		tsfc:_Endianness = "little" ;
	double tsfc_ap(Observations) ;
		tsfc_ap:long_name = "Surface temperature apriori and initial guess for each FOV (pixel)" ;
		tsfc_ap:units = "K" ;
		tsfc_ap:_Storage = "contiguous" ;
		tsfc_ap:_Endianness = "little" ;
	double tstd_ap(Observations) ;
		tstd_ap:long_name = "Standard deviation of the FOV (pixel) surface temperature apriori and initial guess over the FOR (9-pixels): Used for diagnostics" ;
		tstd_ap:units = "K" ;
		tstd_ap:_Storage = "contiguous" ;
		tstd_ap:_Endianness = "little" ;
	double tsfc_for(Observations) ;
		tsfc_for:long_name = "Input Level2 (e.g. NUCAPS) surface temperature over FOR (9-FOVs): Used for diagnostics" ;
		tsfc_for:units = "K" ;
		tsfc_for:_Storage = "contiguous" ;
		tsfc_for:_Endianness = "little" ;
	double dt_nh3(Observations) ;
		dt_nh3:long_name = "Spectral brightness temperature difference:  window [981.25 cm-1] - ammonia [967.5 cm-1]: Used for diagnostics" ;
		dt_nh3:units = "K" ;
		dt_nh3:_Storage = "contiguous" ;
		dt_nh3:_Endianness = "little" ;
	double rvmr(Observations, RVMRLen) ;
		rvmr:long_name = "Representative Volume Mixing Ratio" ;
		rvmr:units = "ppmv" ;
		rvmr:_Storage = "contiguous" ;
		rvmr:_Endianness = "little" ;
	double rvmr_press(Observations, RVMRLen) ;
		rvmr_press:long_name = "RVMR Pressure Levels " ;
		rvmr_press:units = "mbar" ;
		rvmr_press:_Storage = "contiguous" ;
		rvmr_press:_Endianness = "little" ;
	double rvmr_fwhm(Observations, RVMRLen) ;
		rvmr_fwhm:long_name = "RVMR Resolution " ;
		rvmr_fwhm:units = "mbar" ;
		rvmr_fwhm:_Storage = "contiguous" ;
		rvmr_fwhm:_Endianness = "little" ;
	double rvmr_wgt(Observations, Layers, RVMRLen) ;
		rvmr_wgt:long_name = "" ;
		rvmr_wgt:units = "" ;
		rvmr_wgt:_Storage = "contiguous" ;
		rvmr_wgt:_Endianness = "little" ;
	double rvmr_error(Observations, RVMRLen) ;
		rvmr_error:long_name = "RVMR Error " ;
		rvmr_error:units = "ppmv" ;
		rvmr_error:_Storage = "contiguous" ;
		rvmr_error:_Endianness = "little" ;
	string File_Creation_Timestamp(Observations) ;
		File_Creation_Timestamp:_Storage = "contiguous" ;
	double Version(Observations) ;
		Version:_Storage = "contiguous" ;
		Version:_Endianness = "little" ;
	string Run_ID(Observations) ;
		Run_ID:_Storage = "contiguous" ;
	double Latitude(Observations) ;
		Latitude:_Storage = "contiguous" ;
		Latitude:_Endianness = "little" ;
	double Longitude(Observations) ;
		Longitude:_Storage = "contiguous" ;
		Longitude:_Endianness = "little" ;
	double SatelliteZenithAngle(Observations) ;
		SatelliteZenithAngle:_Storage = "contiguous" ;
		SatelliteZenithAngle:_Endianness = "little" ;
	double SatelliteAzimuthAngle(Observations) ;
		SatelliteAzimuthAngle:_Storage = "contiguous" ;
		SatelliteAzimuthAngle:_Endianness = "little" ;
	double SatelliteRange(Observations) ;
		SatelliteRange:_Storage = "contiguous" ;
		SatelliteRange:_Endianness = "little" ;
	double LandFraction(Observations) ;
		LandFraction:_Storage = "contiguous" ;
		LandFraction:_Endianness = "little" ;
	string SurfaceReflection(Observations) ;
		SurfaceReflection:_Storage = "contiguous" ;
	string Date(Observations) ;
		Date:_Storage = "contiguous" ;
	string Time_UTC(Observations) ;
		Time_UTC:_Storage = "contiguous" ;
	double Day_Night_Flag(Observations) ;
		Day_Night_Flag:_Storage = "contiguous" ;
		Day_Night_Flag:_Endianness = "little" ;
	string L2_file_source(Observations) ;
		L2_file_source:_Storage = "contiguous" ;
	double Number_of_L2_files_per_L1(Observations) ;
		Number_of_L2_files_per_L1:_Storage = "contiguous" ;
		Number_of_L2_files_per_L1:_Endianness = "little" ;
	double Number_of_iterations(Observations) ;
		Number_of_iterations:_Storage = "contiguous" ;
		Number_of_iterations:_Endianness = "little" ;
	double CHISQ(Observations) ;
		CHISQ:_Storage = "contiguous" ;
		CHISQ:_Endianness = "little" ;
	double CHISQ_0(Observations) ;
		CHISQ_0:_Storage = "contiguous" ;
		CHISQ_0:_Endianness = "little" ;
	double DOF(Observations) ;
		DOF:_Storage = "contiguous" ;
		DOF:_Endianness = "little" ;
	string xa_Type(Observations) ;
		xa_Type:_Storage = "contiguous" ;
	string x0_Type(Observations) ;
		x0_Type:_Storage = "contiguous" ;
	double surf_Type(Observations) ;
		surf_Type:_Storage = "contiguous" ;
		surf_Type:_Endianness = "little" ;
	double nedt(Observations) ;
		nedt:_Storage = "contiguous" ;
		nedt:_Endianness = "little" ;
	double snr(Observations) ;
		snr:_Storage = "contiguous" ;
		snr:_Endianness = "little" ;
	double mdate(Observations) ;
		mdate:long_name = "Date in python datetime" ;
		mdate:units = "Days since 1970-01-01: e.g. 2013,1,1 = 15706.0" ;
		mdate:_Storage = "contiguous" ;
		mdate:_Endianness = "little" ;
	double Retrieval_Status(Observations) ;
		Retrieval_Status:_Storage = "contiguous" ;
		Retrieval_Status:_Endianness = "little" ;
	double Daylight_Flag(Observations) ;
		Daylight_Flag:_Storage = "contiguous" ;
		Daylight_Flag:_Endianness = "little" ;
	double Local_solar_mdate(Observations) ;
		Local_solar_mdate:_Storage = "contiguous" ;
		Local_solar_mdate:_Endianness = "little" ;
	string Time_local_solar(Observations) ;
		Time_local_solar:_Storage = "contiguous" ;
	double Cloud_Flag(Observations) ;
		Cloud_Flag:_Storage = "contiguous" ;
		Cloud_Flag:_Endianness = "little" ;

// global attributes:
		:total_FOVs = 2236LL ;
		:satellite = "noaa20" ;
		:version = "1.6.4" ;
		:_NCProperties = "version=2,netcdf=4.7.4,hdf5=1.12.0," ;
		:_SuperblockVersion = 0 ;
		:_IsNetcdf4 = 1 ;
		:_Format = "netCDF-4" ;
}
+534 KiB
Loading image diff...
+322 KiB
Loading image diff...
Loading
Loading