TNO Intern

Updated template settings for CrIS/NH3 data.

Merge request reports

Loading
+987 −0
Changes for config/CrIS/cso-cris-nh3.rc: 987 added lines, 0 removed lines.
Original line number Diff line number Diff line
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!
!!! CSO CrIS/NH3 Processing
!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


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

! include user specfic settings:
#include cso-user-settings.rc


!-----------------------------------------------------------------------
! multi-product
!-----------------------------------------------------------------------

! instrument selection:
#if "${MY_PRODUCT}" in ["cris1-nh3"]
my.instrument                       :  CrIS1
my.platform                         :  snpp
#elif "${MY_PRODUCT}" in  ["cris2-nh3"]
my.instrument                       :  CrIS2
my.platform                         :  noaa20
#else
#error unsupported product '${MY_PRODUCT}'
#endif

! current version available:
my.version                          :  v1_6_4

! local archive:
my.arch.dir                         :  ${my.work}/ECCC/${my.instrument}


!======================================================================
!===
!=== Inquire
!===
!======================================================================


!-----------------------------------------------------------------------
! inquire portal
!-----------------------------------------------------------------------

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

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

! full time range:
cso.inquire-table-cris.timerange.start     :  ${my.inquire.timerange.start}
cso.inquire-table-cris.timerange.end       :  ${my.inquire.timerange.end}

! archive location:
cso.inquire-table-cris.url                 :  https://hpfx.collab.science.gc.ca/~mas001/satellite_ext/cris/${my.platform}/nh3/${my.version}/global

!! user/password settings for this server:
!cso.inquire-table-cris.netrc               :  ${HOME}/.netrc

! csv file that will hold records per file with:
! - timerange of pixels in file
! - orbit number
cso.inquire-table-cris.output.file         :  ${my.arch.dir}/inquire/inquire_%Y-%m-%d.csv



!-----------------------------------------------------------
! overview plot of versions
!-----------------------------------------------------------

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

! listing files:
cso.inquire-plot.file                     :  ${cso.inquire-table-cris.output.file}
cso.inquire-plot.filedate                 :  2026-02-19

! listing table type: S5P VIIRS CrIS
cso.inquire-plot.filetype                 :  CrIS

! annote:
cso.inquire-plot.title                    :  ${my.instrument}-NH3  (archive %Y-%m-%d)

! output figure, eventually use templates for time values:
cso.inquire-plot.output.file              :  ${my.arch.dir}/inquire/inquire_%Y-%m-%d.png


!======================================================================
!===
!=== convert
!===
!======================================================================


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

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



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

! listing file with input data:
cso.convert.input.listing                   :  ${cso.inquire-table-cris.output.file}
!cso.convert.input.listing.filedate          :  2026-02-19

! Provide ';' seperated list of to decide if a particular orbit file should be processed.
! If more than one file is available for a particular day (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 processing 'OFFL' but otherwise from 'NRT':
!   %{stream} == 'OFFL' ; %{stream} == 'NRT'
!
cso.convert.selection                     :  %{stream} == 'OFFL' ; %{stream} == 'NRT'

! input directory;
! files are searched here or downloaded to if not present yet:
cso.convert.downloads.dir                  :  ${my.arch.dir}/download

! remove files extracted from collection files after convert?
cso.convert.downloads.cleanup.extracts    :  True
!!~ TESTING ...
!cso.convert.downloads.cleanup.extracts    :  False

! only extract datafiles that overlap with target region (w/e/s/n):
cso.convert.downloads.region               :  ${my.region.west} ${my.region.east} ${my.region.south} ${my.region.north}


!
! * pixel selection
!

! selection names:
cso.convert.filters                        :  lons lats daytime landfraction pressure valid cloud_flag quality

! filter settings:
cso.convert.filter.lons.var                :  Longitude
cso.convert.filter.lons.type               :  minmax
cso.convert.filter.lons.minmax             :  ${my.region.west} ${my.region.east}
cso.convert.filter.lons.units              :  degrees_east

! filter settings:
cso.convert.filter.lats.var                :  Latitude
cso.convert.filter.lats.type               :  minmax
cso.convert.filter.lats.minmax             :  ${my.region.south} ${my.region.north}
cso.convert.filter.lats.units              :  degrees_north

! 1 gives daytime obs, 0 nighttime
cso.convert.filter.daytime.var             :  Daylight_Flag
cso.convert.filter.daytime.type            :  equal
cso.convert.filter.daytime.value           :  1
cso.convert.filter.daytime.units           :  1

! exclude water pixels, at least 80% land
cso.convert.filter.landfraction.var        :  LandFraction
cso.convert.filter.landfraction.type       :  min
cso.convert.filter.landfraction.min        :  0.5
cso.convert.filter.landfraction.units      :  1

! exclude pixels over mountains; 
! "surface" pressure in profile should be at least 900 mbar (~1000m)
cso.convert.filter.pressure.var            :  pressure
cso.convert.filter.pressure.type           :  min-of-max-in-profile
cso.convert.filter.pressure.min            :  900.0
cso.convert.filter.pressure.units          :  hPa

! some pixels have incorrect meteo values ("tm", "zm", and "h2o" variables)
! with values of about 9.969e36 ; remove these pixels based on the "zm" profiles:
cso.convert.filter.valid.var               :  zm
cso.convert.filter.valid.type              :  max
cso.convert.filter.valid.max               :  1e36
cso.convert.filter.valid.units             :  km

!2.1. Quality Flags
!CFPR currently generates a Quality_Flag (QF) variable for each observation, ranging from -1 (did not converge) to 5, 
!which is determined by applying a series of quality checks on the retrievals. Each QF value can be considered as a step, 
!with higher values implying that all the conditions for lower QF values have also been met. The QF values are listed below:
!
! * -1
!    Retrieval did not converge
!    Flag indicating that the retrieval did not converge. Often these are not written into the product files.
! * 1
!    Retrieval converged
!    Flag indicating that the retrieval converged is specified number of iterations.
! * 2
!    Large outlier flag
!    Quality flag 1 & profile retrieved value less than 200 ppbv.
! * 3
!    Retrieval quality flag
!    Quality flag 2 & chi-squared less than 20
! * 4
!    More conservative retrieval quality flag
!    Quality flag 3 & signal-to-noise >= 1 and thermal contrast > 0
! * 5
!    More conservative retrieval quality flag with information content
!    Quality flag 4 & also filtered to have a minimum degree-of-freedom for signal of 0.1
!
! Following recomendations, use pixels with quality flag >= 5
cso.convert.filter.quality.var             :  Quality_Flag
cso.convert.filter.quality.type            :  min
cso.convert.filter.quality.min             :  5
cso.convert.filter.quality.units           :  1

! Cloud_Flag values:
!  -1  : no cloud information
!   0  : clear retrieval                               [selected]
!   1  : cloudy retrieval
!   2  : smoke plume
!   3  : cloud-free pixels below the detection limit   [selected]
! Note that thick-cloud pixels are not retrieved anyhow.
! Following recomendations, reject pixels with Cloud_Flag==1
! However, also "smoke" pixels were found to have too high prior, so also reject these.
! For safety, only include pixels that are clearly cloud-free.
cso.convert.filter.cloud_flag.var          :  Cloud_Flag
cso.convert.filter.cloud_flag.type         :  in
cso.convert.filter.cloud_flag.value        :  0 3


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

! output filename:
cso.convert.output.filename                :  ${my.arch.dir}/${my.version}/${my.region}/%Y/%m/${my.instrument}_NH3_%Y%m%d.nc



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

! ~ variables

! which fields to be put out ?
cso.convert.output.vars    :   longitude latitude pixel_bounds time \
                                pressure hpressure altitude isfc pressure_sfc landfraction \
                                tot_col tot_col_meas_errvar tot_col_total_errvar xr yr \
                                xa ya \
                                log_kernel lin_kernel A \
                                quality_flag cloud_flag


! 
! 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)
!     layer0       : 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)
!

! ~ footprints

! description:
cso.convert.output.var.longitude.dims                  :  pixel
cso.convert.output.var.longitude.from                  :  Longitude
cso.convert.output.var.longitude.units                 :  degrees_east
cso.convert.output.var.longitude.attrs                 :  { 'standard_name' : 'longitude' }

! description:
cso.convert.output.var.latitude.dims                   :  pixel
cso.convert.output.var.latitude.from                   :  Latitude
cso.convert.output.var.latitude.units                  :  degrees_north
cso.convert.output.var.latitude.attrs                  :  { 'standard_name' : 'latitude' }


! corner longitudes and latitudes:
cso.convert.output.var.pixel_bounds.dims            :   pixel corner
cso.convert.output.var.pixel_bounds.special         :   pixel_bounds_cris
!~ input variables:
cso.convert.output.var.pixel_bounds.from.range      :   SatelliteRange
cso.convert.output.var.pixel_bounds.from.zenith     :   SatelliteZenithAngle
cso.convert.output.var.pixel_bounds.from.azimuth    :   SatelliteAzimuthAngle
cso.convert.output.var.pixel_bounds.from.lon        :   Longitude
cso.convert.output.var.pixel_bounds.from.lat        :   Latitude
! target variables;
cso.convert.output.var.pixel_bounds.out.lon         :   longitude_bounds
cso.convert.output.var.pixel_bounds.out.lat         :   latitude_bounds

! ~ time

! time value per pixel:
cso.convert.output.var.time.dims                       :  pixel
cso.convert.output.var.time.special                    :  datetime64
cso.convert.output.var.time.from                       :  mdate

! ~ pressure and altitude

! description:
cso.convert.output.var.pressure.dims                   :  pixel layer
cso.convert.output.var.pressure.from                   :  pressure
cso.convert.output.var.pressure.units                  :  Pa

! retrieved surface conc;
! this is the lowest value that is not nan:
cso.convert.output.var.pressure_sfc.dims               :  pixel
cso.convert.output.var.pressure_sfc.special            :  surface_non_fill
cso.convert.output.var.pressure_sfc.from               :  pressure
cso.convert.output.var.pressure_sfc.units              :  Pa

! half level pressures:
!  - lowest pressure
!  - mid of pressure levels
!  - 0.0 Pa at top
cso.convert.output.var.hpressure.dims                  :  pixel layeri
cso.convert.output.var.hpressure.special               :  pressure_to_hpressure
cso.convert.output.var.hpressure.from                  :  pressure
cso.convert.output.var.hpressure.units                 :  Pa

! altitude
cso.convert.output.var.altitude.dims                   :  pixel layer
cso.convert.output.var.altitude.from                   :  zm
cso.convert.output.var.altitude.units                  :  m

! land fraction
cso.convert.output.var.landfraction.dims               :  pixel
cso.convert.output.var.landfraction.from               :  LandFraction
cso.convert.output.var.landfraction.units              :  1

! 0-based index of surface layer:
cso.convert.output.var.isfc.dims                       :  pixel
cso.convert.output.var.isfc.special                    :  sfc_layer_index
cso.convert.output.var.isfc.from                       :  pressure

! ~ retrieved

! description:
cso.convert.output.var.tot_col.dims                    :  pixel retr
cso.convert.output.var.tot_col.from                    :  tot_col
cso.convert.output.var.tot_col.units                   :  mol m-2

! description:
cso.convert.output.var.tot_col_meas_errvar.dims        :  pixel retr retr0
cso.convert.output.var.tot_col_meas_errvar.from        :  tot_col_meas_error
cso.convert.output.var.tot_col_meas_errvar.special     :  square
cso.convert.output.var.tot_col_meas_errvar.units       :  mol m-2

! description:
cso.convert.output.var.tot_col_total_errvar.dims       :  pixel retr retr0
cso.convert.output.var.tot_col_total_errvar.from       :  tot_col_total_error
cso.convert.output.var.tot_col_total_errvar.special    :  square
cso.convert.output.var.tot_col_total_errvar.units      :  mol m-2

! retrieved profile:
cso.convert.output.var.xr.dims                         :  pixel retr_profile
cso.convert.output.var.xr.from                         :  xretv
cso.convert.output.var.xr.units                        :  ppmv

! retrieved surface conc;
! this is the lowest value that is not nan:
cso.convert.output.var.xr_sfc.special                  :  surface_non_fill
cso.convert.output.var.xr_sfc.from                     :  xretv
cso.convert.output.var.xr_sfc.units                    :  ppmv
cso.convert.output.var.xr_sfc.dims                     :  pixel layer

! retrieved profile as column;
! requires an earlier computed variable on layers and "half-level pressure" variable:
cso.convert.output.var.yr.dims                         :  pixel retr
cso.convert.output.var.yr.special                      :  vcd
cso.convert.output.var.yr.profiles                     :  xr
cso.convert.output.var.yr.hp                           :  hpressure
cso.convert.output.var.yr.units                        :  mol m-2
cso.convert.output.var.yr.attrs                        :  { 'long_name' : 'Retrieved Species Total Column (computed from retrieved profile)' }

! ~ prior

! a priori profile:
cso.convert.output.var.xa.dims                         :  pixel layer
cso.convert.output.var.xa.from                         :  xa
cso.convert.output.var.xa.units                        :  ppmv

! a priori surface conc;
! this is the lowest value that is not nan:
cso.convert.output.var.xa_sfc.special                  :  surface_non_fill
cso.convert.output.var.xa_sfc.from                     :  xa
cso.convert.output.var.xa_sfc.units                    :  ppmv
cso.convert.output.var.xa_sfc.dims                     :  pixel layer

! apriori profile as column;
! requires an earlier computed "half-level pressure" variable:
cso.convert.output.var.ya.dims                         :  pixel retr
cso.convert.output.var.ya.special                      :  vcd
cso.convert.output.var.ya.profiles                     :  xa
cso.convert.output.var.ya.hp                           :  hpressure
cso.convert.output.var.ya.units                        :  mol m-2
cso.convert.output.var.ya.attrs                        :  { 'long_name' : 'Apriori Species Total Column (computed from apriori profile)' }

! ~ kernels

! kernel:
cso.convert.output.var.log_kernel.dims                :   pixel layer retr_profile
cso.convert.output.var.log_kernel.from                :   avg_kernel
cso.convert.output.var.log_kernel.units               :   1
cso.convert.output.var.log_kernel.attrs               :   { 'long_units' : 'ln(ppmv)/ln(ppmv)' }

! linearization from units "ln(ppmv)/ln(ppmv)" to "ppmv/ppmv":
!   kernel := averaging_kernel * amf/amft
cso.convert.output.var.lin_kernel.dims                :   pixel layer retr_profile
cso.convert.output.var.lin_kernel.special             :   linearize_kernel
cso.convert.output.var.lin_kernel.avk                 :   avg_kernel
cso.convert.output.var.lin_kernel.apri                :   xa
cso.convert.output.var.lin_kernel.units               :   1
cso.convert.output.var.lin_kernel.attrs               :   { 'long_name' : 'linearized averaging kernel matrix in ppmv/ppmv' }

! linearized kernel as profile
cso.convert.output.var.A.dims                         :  pixel layer retr
cso.convert.output.var.A.special                      :  vcd
cso.convert.output.var.A.profiles                     :  lin_kernel
cso.convert.output.var.A.hp                           :  hpressure
cso.convert.output.var.A.units                        :  1
cso.convert.output.var.A.attrs                        :  { 'long_name' : 'linearized averaging kernel profile in (mol/m2)/ppmv' }

! ~ flags

! Quality flag:
cso.convert.output.var.quality_flag.dims              :  pixel
cso.convert.output.var.quality_flag.from              :  Quality_Flag
cso.convert.output.var.quality_flag.units             :  1
cso.convert.output.var.quality_flag.dtype             :  i1
cso.convert.output.var.quality_flag.attrs             :  { 'long_name' : 'quality flag' }

! Cloud_Flag:
cso.convert.output.var.cloud_flag.dims                :  pixel
cso.convert.output.var.cloud_flag.from                :  Cloud_Flag
cso.convert.output.var.cloud_flag.units               :  1
cso.convert.output.var.cloud_flag.dtype               :  i1
cso.convert.output.var.cloud_flag.attrs               :  { 'long_name' : 'cloud flag' }



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

! csv file that will hold records per file with:
! - timerange of pixels in file
! - orbit number
cso.listing.file                :  ${my.arch.dir}/${my.version}/${my.region}/listing.csv

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

! time range:
cso.listing.timerange.start     :  ${my.timerange.start}
cso.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.listing.patterns            :  %Y/%m/${my.instrument}_*.nc



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

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

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

! target filenames; templates:
! - time values
! - %{varname} for variable
cso.catalogue.output.file                 :  ${my.work}/CSO-data-catalogue/${my.instrument}/%Y/%m/${my.instrument}_NH3_%Y%m%d__%{varname}.png

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

! map domain (west east south north)
!cso.catalogue.domain                      :  ${my.region.west} ${my.region.east} ${my.region.south} ${my.region.north}
! ~ zooom:
cso.catalogue.domain                      :  7 12 54 60
!!~ TESTING TJK domain:
!cso.catalogue.domain                      :  67 75.5 36.5 41.5

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

! renew existing files?
cso.catalogue.renew                       :  True
!cso.catalogue.renew                       :  False

! variables to be plotted:
cso.catalogue.vars                        :  yr ya quality_flag cloud_flag landfraction

! convert units:
cso.catalogue.var.tot_col.units                    :  umol/m2
! style:
cso.catalogue.var.tot_col.vmin                     :    0.0
cso.catalogue.var.tot_col.vmax                     :  500.0

! convert units:
cso.catalogue.var.yr.units                         :  umol/m2
! style:
cso.catalogue.var.yr.vmin                          :    0.0
cso.catalogue.var.yr.vmax                          :  500.0

! convert units:
cso.catalogue.var.ya.units                         :  umol/m2
! style:
cso.catalogue.var.ya.vmin                          :    0.0
cso.catalogue.var.ya.vmax                          :  500.0

! quality flags from 1 to 5:
cso.catalogue.var.quality_flag.vmin                :  0.5
cso.catalogue.var.quality_flag.vmax                :  5.5
cso.catalogue.var.quality_flag.colors              :  ["cyan","blue","yellow","orange","green"]
cso.catalogue.var.quality_flag.ncolor              :  5

! style:
cso.catalogue.var.cloud_flag.vmin                  :  -1.5
cso.catalogue.var.cloud_flag.vmax                  :   3.5
cso.catalogue.var.cloud_flag.colors                :   ['gray','green','orange','red','magenta']
cso.catalogue.var.cloud_flag.ncolor                :   5

! style:
cso.catalogue.var.landfraction.colors              :   ["blue","cyan","yellow","green"]
cso.catalogue.var.landfraction.ncolor              :   4


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

! target location:
cso.catalogue-index.outdir                    :  ${my.work}/CSO-data-catalogue/${my.instrument}

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

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

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

! create new page for each value:
cso.catalogue-index.month.newpage                  :  True
! content type:
cso.catalogue-index.month.type                     :  table-row
! define row values:
cso.catalogue-index.month.name                     :  date
cso.catalogue-index.month.values                   :  TimeSeries( %{month}, %{month}, 1 day, %Y%m%d )

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

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




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


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

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

! listing with "data" and "state" files:
cso.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.sim-catalogue.output.dir            :  ${my.work}/CSO-sim-catalogue/%Y/%m

!! domain of converted data:
!cso.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.sim-catalogue.domain                 :  -10 30 35 65
!!~ globe:
!cso.sim-catalogue.domain                 :  -180 180 -90 90

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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



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


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

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

! renew existing files?
cso.sim-gridded.renew                  :  True
!cso.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.sim-gridded.grid.west              :  ${my.region.west}
!cso.sim-gridded.grid.east              :  ${my.region.east}
!cso.sim-gridded.grid.south             :  ${my.region.south}
!cso.sim-gridded.grid.north             :  ${my.region.north}
!! resolution:
!cso.sim-gridded.grid.dlon              :  0.1
!cso.sim-gridded.grid.dlat              :  0.1
!
!~ observation operator tutorial:
cso.sim-gridded.grid.west              :  -10
cso.sim-gridded.grid.east              :   30
cso.sim-gridded.grid.south             :   35
cso.sim-gridded.grid.north             :   65
! resolution:
cso.sim-gridded.grid.dlon              :  0.2
cso.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.sim-gridded.mapping.levels         :  5

!~

! keywords for source files; 
! the first one should have the footprints:
cso.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.sim-gridded.source.listing           :  ${CSO_PREFIX}/oper/listing.csv

!~

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

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

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

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

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

! data variables to be created:
!cso.sim-gridded.output.all.vars          :  yr ys
cso.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.sim-gridded.output.all.yr.source        :  data:yr
cso.sim-gridded.output.all.ys.source        :  state:ys
cso.sim-gridded.output.all.mod_col.source   :  state:mod_col
cso.sim-gridded.output.all.xrc_log.source   :  state:xrc_log
cso.sim-gridded.output.all.xrc_lin.source   :  state:xrc_lin

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


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

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

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

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

! target files, time tempates and variable name are replaced:
cso.sim-gridded-catalogue.monthly.output.file    :  ${my.sim-gridded.dir}__catalogue/CrIS_NH3_%Y%m_gridded_%{var}.png
cso.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.sim-gridded-catalogue.figsize                :  ${my.region.figsize}

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

#endfor


!======================================================================
!===
!=== end
!===
!======================================================================
+133 −0
Changes for config/CrIS/cso-user-settings.rc: 133 added lines, 0 removed lines.
Original line number Diff line number Diff line
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
!!!
!!! CSO common configuration
!!!
!!! Base settings that are used by multiple tasks:
!!! - time range(s)
!!! - target domain(s)
!!!
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!


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

! file format:
my.cso.format         :   1.0

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


!-----------------------------------------------------------
! 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,5)

! region name:
my.region                       :  xEMEP
! CAMS regional ensemble domain:
my.region.west                  :  -30.0
my.region.east                  :   90.0
my.region.south                 :   30.0
my.region.north                 :   82.0
! size of map figures for this region:
my.region.figsize               :   (8,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
!----------------------------------------------------------

! inquire full timerange:
my.inquire.timerange.start      :  2011-10-01 00:00
my.inquire.timerange.end        :  2026-12-31 23:59

! process single year:
my.timerange.start              :  2024-01-01 00:00
my.timerange.end                :  2024-12-31 23:59


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

!..............................
#if "${USER}" == "you"
!..............................

! 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                         :  /Scratch/${USER}/CSO-Test-CrIS

!..............................
#else
#error unsupported USER "${USER}"
#endif
!..............................


!----------------------------------------------------------
! 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__}



!----------------------------------------------------------
! end
!----------------------------------------------------------


+111 −1459

File changed.

Preview size limit exceeded, changes collapsed.

Loading