A short history of CAMA
This is a short overview of the history of CAMA. CAMA started out as a tool to figure out the properties of the OMCLDO2 cloud product. Some of the assumptions about the HDF-5 file format structure originate from this period. The original version was pretty specific for the OMCLDO2 product, although the field names were separated from the rest of the actual code right from the start.
Once the rest of the validation team saw what I had, they were quick to request a generic version of the software, which eventually lead to the software that is available now.
Version history of public releases
In reverse chronological order, these are the release notes for publicly released versions of CAMA. This will allow you to identify the version in which certain features were added, or specific issues were fixed. The first item is the current release. The date is the creation date of the zip archive, and can be found in the filename.
Oktober 28, 2010
Trim strings that are read from the configuration file. This makes the use of aliases more robust (‘OMDOAO3 ’ will not work, ‘OMDOAO3’ does).
June 3, 2010
Changed verification_generator_sza_filter to function as intented in filter mode.
May 31, 2010
Changed verification_generator_sza_filter, to accept a 'filter' option. It will now apply a threshold filter suitable for multiplication if an optiona ‘filter’ keyword is added to the parameter list.
March 23, 2010
Changed the name and location of the file which indicates the presence of the row anomaly for a particular row. The current file can be downloaded here. The file is downloaded automatically by CAMA if requested (and running with a sufficiently recent IDL).
February 23, 2010
Added a filter parameter to the index_value filter function option. Previously this filter function took no parameters. Now you can use 'filter,low,high' as a function parameter. This will change the behaviour of the index_value filter function. Normally it generates a filed with time-index values, with the filter parameter it creates a 1.0 or NaN value field, depending on the low and high values. This makes the function suitable for per-field processing (multiply the lot...).
February 22, 2010
Documentation update
August 28, 2009
The name of the instrument is now a configuration option, at least in generating the graphs. You can now set this to ‘GOME-2’, and have that name appear in the graphs.
March 10, 2009
Changed instrument configuration filter code, so that the Ozone hole special from 2004 is passed through. Changed geolocation plotting code.
March 3, 2009
Bugfix in the row anomaly code.
February 17, 2009
To exclude rows affected by the row anomaly, it is now possible to download a file from www.knmi.nl to indicate which rows are affected, and at which orbit this starts. This is off by default. See the manual for details, look for apply_bad_row_filter in the manual.
January 28, 2009
Fixed bug where hdf-5 file would not be created if the geolocation mapping wasn't performed.
January 26, 2009
Along track averages are now displayed using a zero-based index.
April 14, 2008
Several changes to be able to analyze data with a swath width of 1.
March 25, 2008
Analysing a product with new dimensions always uncovers new bugs. In this case comparing two products with 60 or 30 across track pixels uncovered a problem with the location where the edge cutoff was performed. After changing the location this problem was fixed. A side effect is potentially a bogus number of pixels in the report. You were not using those anyway, right?
February 15, 2008
Fixed an issue with the feature introduced on January 18, reported by Ed Celarier. The text of the labels was white on white. Needless to say that this was not the intended effect.
February 1st, 2008
Fixed an old bug in the synchronise_nans routine, or rather the detection of missing orbits. Missing orbits are now properly skipped.
January 28, 2008
Clarified an error message
January 22, 2008
- Packaging error
- Added the files implementing the changes from yesterday to the archive. Sorry for the inconvenience this may have caused.
- Bug fix
- Thanks to Remco for reporting: dirlist could not be an array (i.e. contain multiple directories). Now it can do that.
- color table selection
- Spurious spaces in the color table could lead to incorrectly selected color tables. A bit tougher sanity check has been added.
- Sun glint filter
- Previously the sun-glint filter function relied on bit 4 of the ground pixel quality flags. This bit was set soley using the values of the solar- and viewing angles, regardless of the surface type. This meant that sun-glint was possible over the Sahara. This filter only filters sun-glint when not over land. Thanks to Remco.
- Absorbing aerosol optical thickness
- A new filter function is added, aaot. This function calculates the absorbing optical
thickness from an (extinction) optical thickness datafield and a single-scattering albedo datafield.
The AOT field goes in the third column of the parameter specification in a CAMA configuration file,
the SSA field in the fourth, like this.
DATA:OMAERO:ColumnAmountAerosol:AerosolOpticalThicknessMW:SingleScatteringAlbedoMW:AAOT_MW:AAOT:13::0.0,0.4:Aerosol Absorption Optical Thickness at 483.5 nm:25::
The wavelength at which the AAOT is returned, is specified by means of the extra parameter (which is compulsory in this case; “13” in the above example). Thanks to Remco. - Added a few filter functions
- A few filter functions were added to filter on the InstrumentConfigurationID (to skip zoom orbits), and on other criteria.
- Added option to skip the scatter density plots
- In some cases it may be desirable to skip the scatter density plots. This option is added: set ‘;# skip_scatter_plots = yes’ to skip the scatter density plots in the configuration file.
- Maintenance update
- Bug fix in the latitude detection for the equal area histograms.
- Maintenance update
- Miscelaneous bug fixes.
- Update in the output
- The averages, standard deviations, minima, and maxima for all parameters are now exported to the HDF output file. Previously these values were only exported for each across track position independently, but not the values displayed in table 2. Thanks to Remco Braak for adding this feature.
- Added check for multiple copies in tree
- When comparing versions of the same product using aliases, it is imperative that the different versions are well separated. We now add an extra warning if this possibility is detected.
- Pixel count overview
- The number of pixels included in each geolocation pixel is stored and plotted (when synchronized) as well.
- Re-creation of the tex and configuration files
- The tex and configuration files are now stored in the hdf-5 file, so the complete output can be restored from the hdf-5 output file.
- Documentation update
- The URL for TeXtoIDL has changed, I've included the current one. Thanks to MariLiza Koukouli for reporting the issue. Update: TeXtoIDL is still at the old location, the url is in all lowercase though. Documentation and the install page updated again.
- Fixed bug when reading fields with a single value per image.
- When reading a field with a single value per image (i.e. InstrumentConfigurationId), the side filter would remove all values except for the first 60. This has been fixed. A filter function one_value_per_image has been added to produce a value for all cross track positions.
- Fixed bug in the minumum determination.
- Remco brought some strange behaviour of the minumum to my attention, and even better figured out how to fix it. The IDL < and > operators and NaN values do not behave in a pleasant way. I didn't know that NaN values were ordered.
- When scene hunting, the output file is now created in the standard output directory
- If the scene_hunting parameters is given as a plain filename, the file is created in the output directory of the run, otherwise the path is used as absolute or relative to the location where you started cama.
- Added dirlist override command-line option
- An option was added to cama.pro and cama.sh to override the standard dirlist parameter (not aliasses). This is useful for running in sequence on different datasets.
- Clarified error message
- Clarified the error message you get when the rato/diff fields are in the wrong order
- Added a new color table
- Added a new color table, suitable for highlighting symmetric differences (red positive, blue negative, green near zero) with the name posneg_color_table.
- Added a new color table
- Added a new color table, suitable for highlighting symmetric differences (red positive, blue negative, white near zero) with the name trend_color_table.
- Update to resolve possible earlier web-site issues
- Due to permission issues on the server some earlier updates may not have come through. This is an update to clean things up.
- Updated documentation
- Google earth creation can now use orbit ranges, to facilitate the plotting of zoom data. The documentation is now updated to tell you how to actually use this option.
- Google earth creation can now use orbit ranges
- Google earth creation can now use orbit ranges, to facilitate the plotting of zoom data.
- Added special_color_table_no2.pro
- Added a different special color table, a subset of the Ozone standard color table, for use with NO2 data.
- Corrected error in the color table selection code
- The change listed above triggered an error in the color table selection code.
- Added read_hdfeos5_data_or_geo_field_and_filter.pro
- The function read_hdfeos5_data_or_geo_field_and_filter is now in the distribution. It isn't used in CAMA, but it can serve as a convernience function when actually reading OMI L2 data.
- Included Google Earth single OMI day plotting
- While there are some remaining issues in the Google Earth single day plotting tool, I think it is fit for wider consumption.
- Bug fix
- Fixed a bug in the scene hunting code where an error would occur if no scenes were found at all.
- (Temporarily) removed Google Earth single OMI day plotting
- The tool to plot a single day of OMI data has been temporarily removed; I'm not satisfied with the quality and stability.
- Packaging bug
- All the right items are now in the package.
- Bug fix
- A bug in the kml module (dealing with missing parameters) was fixed. Non short-circuited logic in IDL is no fun.
- Dedicated Google Earth module added
- A dedicated module to produce high-res Google Earth output has been added. A sample is included in the documentation.
- Google Earth output
- A file for Google Earth is generated to show the geolocated averages
- Bug fix in record_interesting_locations.pro
- The cnt variable was used incorrectly in this function.
- Change in the shell script
- The shell script now tells you how to obtain the results when using the -mail=address@somewhere.com notification option.
- Bug fix suggested by Ed Celarier
- There was a bug in the error reporting code when using a malformed configuragion file (which is probably why I never found it).
- Bug fix in cama.sh
- Mail works better when you include a destination address.
- Bug fix in the cama shell script
- There was a small typo in the cama shell script.
- Change in the ‘Scene hunting output’
- The HDF file that stores the output for the scene hunting effort is now restructured. Instead of one HDF group per orbit, with each group containing a small set of arrays, the scene hunting output now contains just the arrays, with all previous arrays concatenated. This is much easier to read back in as it doesn't require a manual loop. The orbit number is stored in an appropriately named array.
- Change in behavior of the filename information extraction
- Previously, when an OMI file name did not contain all parts, no information of orbit numbers etc. would be returned. Now as much information as is available is returned. This code is not part of the core CAMA, but it is part of the distributed code anyway.
- Bugfix in the location recorder
- When recording all interesting locations, a bug was encountered when an orbit did not contain any interesting data. This bug is fixed in this update.
- Update to the cama.sh script
- We have been requested to be a little more social on the TLCF cluster, so I've added a ‘nice’ option to cama.sh. By default idl now runs at nice level 5, but using the -nice[=LEVEL] argument, this can be changed.
- Improvements in the error messages
- I've enhanced some error messages to help users find errors in the configuration file more easily.
- Update to the cama.sh script to reflect the new default IDL in the TLCF
- The default IDL has been upgraded to IDL version 6.3 (see below why this is important). The cama.sh script is updated to reflect the new location, it previously used the test location for IDL 6.3.
- Ensure that local names are valid (reprise)
- The local name must be a valid IDL variable name. Of course IDL has a function to ensure this, and we now use that function. Of course this function is not string-array aware. Fixed issue with that.
- Ensure that local names are valid
- The local name must be a valid IDL variable name. Of course IDL has a function to ensure this, and we now use that function
- IDL version in the cama.sh script
-
The cama.sh shell script can now use a user specified idl. As of this moment, the shell script tries to use /usr/local/lib/idl_6.3/bin/idl, and if that doesn't work, it uses $(which idl) to find an idl in the current path. This selection can be overridden by using the -idl=IDL parameter to the cama script.
The current default is a test version on the TLCF, but it resolves the issue we have encountered below.
- Minor enhancement
- Force the graphs to start on a page without additional text. This makes it easier to flip from the first graph to another graph to visually inspect them for differences.
- Bugfix
- Fixed the x-axis title on the equal earth area histograms.
- Graph generation now depends on the hdf-5 output file
- Graph generation now depends on the hdf-5 output file. This means that the hdf-5 output file is no longer optional, generating the graphs is (see documentation of how to do this). Another consequence of this change is that the minimum required version of IDL to run CAMA is 6.2, but because of some bugs (see below), it is highly recommended to upgrade to version 6.3. No changes are needed in the configuration file. Some sensible default names are used if a required parameter is absent.
- Additional routine
- Because of the separation of the analysis and the visualization stages in CAMA, it is possible to re-create the graphs using the HDF-5 output file. A routine is provided to do just that (post_cama). This routine requires no parameters, all information it needs is gathered through interactive dialogs.
- HDF-5 compression
- The hdf-5 write routine used in CAMA now has compression turned on, resulting in much smaller files.
- The report template
- A change in the template for the report has hyperlinks turned on, allowing you to quickly jump to the graphs of interest using the list of figures in the back of a report.
- Add the work around a signed byte issue in IDL to the download archive
-
IDL doesn’t know about signed bytes. This shouldn’t be a problem, but the field selective methods used in CAMA have a bug in them, that cause the fill values (typically -127 for these fields) to be mapped to 0. They should be mapped to 129 (unsigned), because that is the same bit-image, but they aren’t. For byte fields, the data is now read with h5_parse, which doesn’t suffer from this issue. It is much slower, so this is done only for byte fields.
I forgot to add the actual work around to the archive. Some more investigation revealed that this bug always occurs with IDL before 6.3. Testing on IDL 6.3 has revlealed that the problem is absent there, please update your version of IDL.
CAMA now runs on IDL before 6.3, but issues a warning if it encounters a byte field. On linux it will use the work around, on other systems it will throw an error.
- Add the work around a signed byte issue in IDL to the download archive
-
IDL doesn’t know about signed bytes. This shouldn’t be a problem, but the field selective methods used in CAMA have a bug in them, that cause the fill values (typically -127 for these fields) to be mapped to 0. They should be mapped to 129 (unsigned), because that is the same bit-image, but they aren’t. For byte fields, the data is now read with h5_parse, which doesn’t suffer from this issue. It is much slower, so this is done only for byte fields.
I forgot to add the actual work around to the archive. Some more investigation revealed that this bug always occurs with IDL/Windows 6.1.1. Testing on IDL 6.3/Windows has revlealed that the problem is absent there, please update your version of IDL if you experience this issue on Windows as the work around doesn’t even work there. The issue is still unresolved, and totally incomprehensible to me on IDL/Linux 6.3.
- Work around a signed byte issue in IDL
- IDL doesn’t know about signed bytes. This shouldn’t be a problem, but the field selective methods used in CAMA have a bug in them, that cause the fill values (typically -127 for these fields) to be mapped to 0. They should be mapped to 129 (unsigned), because that is the same bit-image, but they aren’t. For byte fields, the data is now read with h5_parse, which doesn’t suffer from this issue. It is much slower, so this is done only for byte fields.
- Concurrency issue fixed
- When running multiple instances of CAMA in parallel, there was a possibility to overwrite graphs, or get missing graphs with a ‘stat’ error. This has been fixed.
- Covariances
- Instead of the average over all cross track positions, the average for each individual cross track position was used in calculating the covariance matrix. This has been fixed.
- Linear regression coefficients stored for further processing
- The linear regression coefficients are added to the HDF ouput file for further processing.
- Pixel counts
- The pixel count statistics are now improved and are more realistic (it is still a hack). The hidden fields are now included to see the effect of the land/sea/ice filter (for example). The statistics are still gathered before synchronisation of the fields. A line about the synchronised fields is added. An attempt is made to exclude night-side measurements (θ0 > 88 degrees is excluded).
- Scene hunting can record data fields
- When hunting for specific scenes, it is now possible to record OMI data values in the generated HDF file. The documentation contains details on how to construct the configuration file for this.
- Missing widgets
- A default value was set to ‘false’, where it should have been set to ‘true’. This caused some trouble when running with the progress feedback widget.
- Searching for the report template
- The report is located at a different position in the tree with the CVS release we use internally, and the tree we distribute. This difference is now taken into account.
- Linear regression coefficients
- The linear regression coefficients are calculated and added to the report. Note that these coefficients assume a constant error in the ‘y’ values, and no error on the ‘x’ values. This causes the matrix of the slopes to be assymmetric. If the correlation coefficient is 1, then the the slope γ of item (i,j) is equal to 1/γ of item (j,i). In practise this is rarely the case.
- Scene searching
- Record all scene locations that match all criteria given in the configuration file, for example to find all scenes over a week where there are very high clouds in the mid-latitudes, with a very low cloud fraction, to hunt for cirrus in our measurements.
- Separate data products with the same short name
- It is now possible to compare two data-sets that use the same short name. Please read the manual for details on how to configure this.
- Correct counting of orbits
- Previously the number of processed orbits was calculated by considering the range of the orbits requested. Now we actually count the number of orbits available to CAMA.
January 21, 2008
Added a filename cache, which should speed up operations when a large number of files are present in the directory tree.
January 18, 2008
Added an option to label the geolocation plots themselves, rather than relying on the caption in the final report.
December 3, 2007
Filter functions bitwise_and and sunglint_filter were added. The first allows to filter on a mak, the second corrects the OMI sunglint flag. The OMI sunglint flag only checks the angles, not whether a pixel is over land or sea. This filter adds that second check
November 28, 2007
November 19, 2007
November 16, 2007
Added dumpstruct2hdf5.pro.
November 14, 2007
October 4, 2007
October 3, 2007
October 1, 2007
September 20, 2007
September 4, 2007
August 24, 2007
August 21, 2007
July 20, 2007
July 4, 2007
June 25, 2007
May 14, 2007
May 11, 2007
May 10, 2007
May 4, 2007
May 3, 2007
April 10, 2007
March 27, 2007
March 20, 2007
March 16, 2007
March 13, 2007
March 7, 2007
New feature
February 20, 2007
February 9, 2007
February 2, 2007
February 1, 2007
January 15, 2007
January 8, 2007
November 16, 2006
November 13, 2006
November 8, 2006
November 6, 2006
November 1, 2006
October 24, 2006
October 23, 2006
October 17, 2006
October 13, 2006
September 25, 2006
The hdf-5 file with all the histogram data can now be stored outside the figures directory. If the proposed file name contains a directory separator, it is assumed to point to a valid location, and the file is created there instead of inside the normal output directory.
Graph generation is skipped altogether if the last character of the proposed hdf-5 output file is a ‘*’. This star will be removed from the actual output name.
A filter was added to allow for easy filtering on the values of the flags, for instance to process the ozone column only if the cloud fraction falls between 0.0 and 0.15, without needing synchronization.
September 5, 2006
Updated documentation, added IDL .sav file for users without an IDL license. You'll have to download the IDL virtual machine yourself. Note that this is only offered as a convenience for those without a full IDL license, and is absolutely unsupported (and not very thoroughly tested either), use of the >full version is recommended. Only the filters listed in the manual can be used, and all configuration information has to be set in the configuration file. You must be able to access widgets, as a file selection panel is used to identify the configuration file to cama.
August 25, 2006 (release of 12:08)
Bug fixes
August 25, 2006
Bug fixes
August 23, 2006
Bug fixes
August 15, 2006
Bug fixes
August 11, 2006
Bug fixes
Improvements
August 8, 2006
Improvements
Bug fixes
August 7, 2006
Bug fixes
July 20, 2006
New features
Bug fixes:
June 21, 2006
First public release outside of the KNMI.
Contact information
The main author of CAMA is .