Observation vectors

In pyCIF, the observation vector \(\mathbf{y}\) is stored as a folder, with a structure by type of observation and species. Therein, individual files follow a format similar to the one expected to provide observations.

obsvect folder
├── obs type #1
│   ├── species #1
│   │   └── monitor.nc
│   └── species #2f
│       └── monitor.nc
└── obs type #2
    ├── species #1
    │   └── monitor.nc
    └── species #2
        └── monitor.nc

NetCDF format

NetCDF monitor.nc in the observation vector use the group features to separate different types of observations.

By default there are two groups of information:

maindata

it includes the observations, observation errors, simulated equivalents, increments in the case of the tangent-linear and adjoint sensitivities

metadata

it includes all other information, including the date, longitude, latitude, etc. of the corresponding observation

Each output monitor.nc file is then formatted as illustrated in the following example:

netcdf monitor {

// global attributes:
		:_NCProperties = "version=2,netcdf=4.8.0,hdf5=1.10.6" ;

group: maindata {
  dimensions:
  	index = 10912 ;
  variables:
  	int64 index(index) ;
  	double obs(index) ;
  		obs:_FillValue = NaN ;
  	double obserror(index) ;
  		obserror:_FillValue = NaN ;
  	double sim(index) ;
  		sim:_FillValue = NaN ;
  	double sim_tl(index) ;
  		sim_tl:_FillValue = NaN ;
  	double adj_out(index) ;
  		adj_out:_FillValue = NaN ;
  	double spec(index) ;
  		spec:_FillValue = NaN ;
  	double incr(index) ;
  		incr:_FillValue = NaN ;

  // group attributes:
  		:datei = "01-01-2008 00:00:00" ;
  		:datef = "01-01-2009 00:00:00" ;
  		:model\ name = "CHIMERE" ;
  		:model\ version = "std" ;
  		:domain\ nlon = "101" ;
  		:domain\ nlat = "85" ;
  		:history = "Created on 11-05-2022 20:42:13" ;
  } // group maindata

group: metadata {
  dimensions:
  	index = 10912 ;
  	station_id = 16 ;
  	network_id = 1 ;
  	parameter_id = 1 ;
  variables:
  	int64 index(index) ;
  	double alt(index) ;
  		alt:_FillValue = NaN ;
  	int64 date(index) ;
  		date:units = "minutes since 2008-04-10 12:00:00" ;
  		date:calendar = "proleptic_gregorian" ;
  	double dtstep(index) ;
  		dtstep:_FillValue = NaN ;
  	double duration(index) ;
  		duration:_FillValue = NaN ;
  	double i(index) ;
  		i:_FillValue = NaN ;
  	byte is_obsvect(index) ;
  		is_obsvect:dtype = "bool" ;
  	double j(index) ;
  		j:_FillValue = NaN ;
  	double lat(index) ;
  		lat:_FillValue = NaN ;
  	double level(index) ;
  		level:_FillValue = NaN ;
  	double lon(index) ;
  		lon:_FillValue = NaN ;
  	int64 network(index) ;
  	int64 parameter(index) ;
  	int64 station(index) ;
  	double tstep(index) ;
  		tstep:_FillValue = NaN ;
  	double tstep_glo(index) ;
  		tstep_glo:_FillValue = NaN ;
  	string list_stations(station_id) ;
  	string list_networks(network_id) ;
  	string list_parameters(parameter_id) ;

  // group attributes:
  		:datei = "01-01-2008 00:00:00" ;
  		:datef = "01-01-2009 00:00:00" ;
  		:model\ name = "CHIMERE" ;
  		:model\ version = "std" ;
  		:domain\ nlon = "101" ;
  		:domain\ nlat = "85" ;
  		:history = "Created on 11-05-2022 20:42:14" ;
  } // group metadata
}