2013-12-08 (the 12th release on CRAN)

- corrected the dependency on R to '>= 3.0.0' (as noted by the CRAN team)
- use of the 'direct' argument of extract_columns() improved
- minor changes in the colour assignment of radial_plot(), some improvements
  of the documentation and of the corresponding chapter in the vignette 
- new parallelplot() methods
- as.data.frame() gets new arguments 'csv.data', 'settings', 'normalize' and
  'include'
- new OPM method for extract_columns()
- substrate_info() gets a 'peptide' mode


################################################################################


2013-11-18 (the 11th release on CRAN)

- replaced fast_estimate() by the matrix method of do_aggr(); if necessary, the
  old matrix method of do_aggr() can be easily replaced with stats::aggregate()
- removed deprecated functions well_to_substrate() and batch_opm_to_yaml()
- 'as.groups' argument is now mandatory for the OPMD listing() method
- removed deprecated 'check.names' argument of to_metadata()
- removed deprecated 'program' argument of do_aggr()
- position(), setup_time() and filename() are deprecated; use csv_data()
  instead
- read_opm() and opms() in 'grp' mode now return objects of the class MOPMX;
  these list objects are restricted to OPMX objects as elements, but
  as(x, "list") can be used to obtain a normal list
- the order of arguments of to_metadata() has slightly changed; this should only
  affect the character-scalar method
- the order of arguments of the data-frame methods of discrete() and
  phylo_data() have changed
- the order and composition of the arguments of the matrix method of radial_plot
  and the OPM method of level_plot has slightly changed
- glob_to_regex() is now an S3 generic function
- substrate naming is slightly different in some cases (e.g., numbering is used
  for multiple substrates per plate)
- stored discretisation settings additionally indicate the discretised curve
  parameter; older YAML files will be converted (with a warning) by inserting
  opm_opt('curve.param')
- heat_map() gets a 'lmap' argument and per default now uses another colouring
  for NA values

- read_single_opm() and the methods that depend on it are faster now
- the OPMX methods of collect_template() get most arguments of its character
  vector method
- well() gets a 'use.names' argument
- find_positions() gets a 'type' argument
- explicit length() method for OPM objects
- new merge() methods for OPM objects
- csv_data() gets 'what' and 'normalize' arguments; the OPMS method now always
  yields a matrix unless only a single element was selected; new MOPMX method
- collect_template() gets 'normalize' and 'instrument' arguments
- to_metadata() accepts character vectors of length > 1 if they are named
  (used as first row of the output data frame)
- aggr_settings() and disc_settings() get a 'join' argument
- do_aggr() and do_disc() methods for the new class MOPMX
- opm_files() gets more options
- new edit() function for editing metadata by hand (with some restrictions)
- new infix-operator methods for querying metadata
- aggregated() and discretized() get a 'full' argument (and other ones that
  that affect the names or column names)
- flatten() gets a 'numbers' argument
- new spline-fitting facilities (see set_spline_options())
- heat_map() gets an 'asqr' argument
- ci_plot() gets a 'crr' argument
- new plate_type() method (for displaying the known plate types)
- support for plate types FF, YT and AN2 added (thanks to Barry Bochner)
- substrate_info() gets a 'download' argument and more options for 'what'
- new generic function annotated() with a variety of methods and options
- conversion of substrate names to HTML now also formats stereochemistry and
  configuration indicators
- many additions to the stored substrate information, and some corrections
  (thanks to the ChEBI staff)
- opm_mcp() now handles non-syntactical names in metadata (converts them
  for multcomp::glht()); it computes specific 'Pairs...' contrast-types;
  specifying the 'base' for the 'Dunnett' contrast type is also easier now;
  the returned objects in 'mcp' mode are of class 'opm_ghlt', which inherits
  from 'glht'; novel explicit 'alternative' and 'rhs' arguments
- to_yaml() gets a 'nodots' argument
- opm_opt() gets 'max.chars', 'machine.id' and 'input.try.order' entries
- 'run_opm.R' gets additional command-line options '-F', '-l', '-y' and '-v'

- streamlined the documentation (merged many entries) in the manual
- substrate-information processing is now explained in a second vignette
- the vignettes are now available only as PDF files
- new examples in the example-code directory (now available via demo())


################################################################################


2013-07-11 (the 10th release on CRAN)

- ensured compatibility with 'yaml' >= 2.1.7 regarding treatment of NA values
  and added according conversion of metadata from YAML/JSON input files
- resolved ambiguities in method dispatch of `metadata<-`()
- fixed bug in batch_opm() that caused empty graphics files to be produced
- fixed bug in batch_opm() that caused crashes with MicroStation CSV files
- old-style CSV can now always be read if CSV entries contain commas (problem
  reported by Jesse van Dam)
- fixed bug when generating OPMA objects from YAML data that made inputting
  order-dependent (problem reported by Marco Galardini)
- made to_kmeans() compatible with the new kind of 'kmeans' objects (relevant
  as of R > 3.0.1; problem reported by CRAN team)

- removed deprecated select() function
- well_to_substrate() is now deprecated in favour of new wells() methods
- order of arguments of listing() has been slightly changed, and it is
  deprecated to not set the 'as.groups' argument in the OPMD method

- novel as.data.frame() methods, supporting the output of CSV files
- more opm_opt() entries, allowing for more global control
- many additions and some corrections in the stored substrate information
- the OPMD listing() method can now also produce 'OPMS_Listing' objects
- logical scalars can now be passed as 'as.groups' argument to extract()
- extract(), extract_columns() and opm_mcp() now support on-the-fly combination
  of data-frame columns, yielding new factors
- novel 'factors' argument for extract_columns() as well as option to provide
  a list as 'what' argument
- character-string well names used for indexing are now automatically cleaned
  (e.g. 'A1' yields 'A01')
- find_substrate() returns dedicated S3 objects with nicer print() method
- substrate_info() now yields KEGG drug IDs and ChEBI IDs and objects of class
  'substrate_data' for displaying all available information
- novel substrate_info() and find_position() methods for OPM and OPMS classes
- batch_collect() and batch_opm() get more arguments
- batch_opm() gets more running modes, and 'run_opm.R' gets more command-line
  options; this mainly allows for combining data sets into the same output file
- do_disc() gets a 'unify' argument
- run_kmeans() gets a 'cores' argument
- substrate_info() gets a 'browse' argument, and MeSH IDs were replaced by
  MeSH names, thus allowing for the creation of an URL
- to_yaml() gets a 'listify' argument


################################################################################


2013-04-18 (the 9th release on CRAN)

- fixed bug in helper xy_plot() that caused a missing negative-control well to
  not only yield a warning but also an uninformative plot
- fixed bug in aggregated() (wrong object returned)
- fixed bug in argument treatment of do_disc() (best-cutoff discretisation now
  possible with 'groups' set to FALSE)

- batch_opm_to_yaml() is deprecated, use batch_opm() instead
- extract() function for data frames changes its behaviour (see below)
- the '-a' argument of the 'run_opm.R' changes its behaviour (see below), and
  '-l' is removed, whereas '-r' gets more options
- additional dependencies on packages parallel, splines and mgcv
- grofit >= 1.1 is now necessary because it is imported (its older versions do
  not contain a namespace)
- it is now an error if do_aggr() and batch_opm()/batch_opm_to_yaml() are run
  with > 1 core but this is impossible (as, e.g., under Windows)
- a newer version of R is required

- do_aggr() has a new option for the 'method' argument ('splines', which is 
  recommended) and an according new helper function set_spline_options();
  the 'run_opm.R' script is expanded accordingly
- novel opm_mcp() function for multiple comparisons of means tests directly
  applicable to OPMS objects, and according 'contrast.type' entry of opm_opt()
- novel extract() method for data frames (for calculating means and confidence
  intervals); the old one has been integrated into extract_columns(), which gets
  new arguments accordingly
- listing() methods get a 'html' argument and return S3 objects with adapted 
  print() and phylo_data() methods, i.e. it is possible to generate
  HTML-formatted text
- do_disc() gets a 'subset' argument (for setting the curve parameter),
  disc_settings() is accordingly expanded, and opm_opt() gets a 'disc.param'
  entry

- indexed assignment '[<-'() introduced for OPMS objects
- in `[`(), wells(), measurements() and well_to_substrate(), wells can now be 
  indexed using formulae, thus allowing for sequences of well coordinates and 
  less code
- the infix operators now work with query formulae, and the two arguments can
  be swapped; likewise, subset() works with query formulae
- novel expression methods for map_metadata() and `metadata<-`()
- to_metadata() gets methods for WMD and OPMS objects
- novel `metadata<-`() methods with OPMS or WMD objects as 'value' arguments
- novel map_metadata() method for missing 'mapping' arguments that conducts
  metadata cleaning 

- the character method of plate_type() gets all arguments of the OPMX method
- batch_opm(), the former batch_opm_to_yaml(), gets 'output' and other novel
  arguments
- ci_plot() gets a 'split.at' argument
- opm_opt() gets new entries 'hm.colours' and 'key.join', and better error
  messages
- param_names() gets a 'what' argument
- file_pattern() now deals with input file names if 'literally' is TRUE and
  considers the 'json' file extension
- the 'what' argument of opm_files() gets more options
- safe_labels() gets a 'comment' argument
- substrate_info() gets new 'greek' and 'html' arguments
- opms() now normalises the 'group' argument (if a character string)
- to_yaml() can produce JSON, too

- improved print() methods for OPM(S)_Summary objects
- the data-frame method of separate() now deals with columns with only empty
  strings
- warning messages from radial_plot() occurring as of R 3.0.0 are now silenced

- added support (substrate name and other information) for plates PM21 to PM25
  and plate PM-M TOX01, and adapted plate_type() accordingly

- much expanded and refreshed vignette and help pages
- documentation of the YAML/JSON format was improved
- new example-code directory


################################################################################


2013-01-22 (the 8th release on CRAN)

- flatten() now correctly uses its 'strict' argument
- fixed bug in safe_labels() that affected beginnings and ends of strings
- fixed bug in a non-exported helper function of phylo_data()

- the 'yaml' package is now an obligate dependency, and the latest version is
  required
- select() is deprecated in favour of the new OPMS method subset()
- the content of the disc_settings() and aggr_settings() entries has been
  modified, causing some incompatibilities between objects stored using save()
  (or in .RData files), which can be fixed using conversion of OPMX objects to 
  a list and back; stored YAML files will be automatically converted
- opm_opt() is more restrictive regarding differences between the data types of
  default and newly set values
- the meaning of the 'prefer.char' argument to phylo_data() has been changed
- extract_columns(), extract() and the functions that depend on them are now
  stricter regarding the 'as.labels' and 'as.groups' arguments (which are now
  passed as 'key' argument to metadata() without conversion to a list)

- the 'gen.iii' entry of opm_opt() is changed to a character scalar, and the
  command-line '-G'/'-Gen3' switch of 'run_opm.R' is accordingly changed to
  '-t'/'--type'; batch_opm_to_yaml() now also deals with character values used
  as 'gen.iii' argument
- the 'xy.colours' argument of opm_opt() is renamed to 'colours' and now also
  used by radial_plot() and heat_map()
- opm_opt() gets a 'curve.param' entry, which is used per default as 'subset'
  argument of extract() and those plotting functions that have such an argument
- 'split' argument of all separate() methods is now set to the opm_opt() entry
- opm_opt() gets a 'file.encoding' entry, which is honoured by read_opm() and
  other input functions, and 'run_opm.R' gets an according '-n'/'--encoding'
  command-line switch
- if new entries are set, opm_opt() returns the previous values invisibly

- support for ECO, SF-N2 and SF-P2 plates (MicroStation plates), including
  substrate mappings; inputting them copies superfluous columns directly to
  the metadata
- new listing() methods for OPMD and OPMS objects, which create a textual
  description of the discretised reactions
- the summary() methods of OPMX objects now yield more information and dedicated
  S3 summary objects (with own print() methods)
- do_aggr() directly copies singleton values (point measurements) in case of
  special plates (MicroStation, ID)
- gen_iii() gets a 'to' argument, and the 'gen.iii' argument of read_opm() is
  enhanced accordingly
- csv_data() gets a 'strict' argument
- phylo_data() gets 'cutoff' and 'html.args' arguments and a helper function
  default_html_args(); the resulting HTML is much enriched and can be customized
  in detail using CSS
- opm_opt() gets according 'css.file' and 'html.class' entries, which are used
  by phylo_data()
- opm_files() now also shows the novel 'auxiliary' files (e.g., CSS files)
- batch_opm_to_yaml() gets arguments 'disc.args' and 'force.disc'
- wells() and plate_type() get a 'downcase' argument, also available to all
  functions that pass arguments to either method
- substrate_info() gets a 'downcase' option of the 'what' argument
- substrate_info() now also yields MeSH IDs of the substrates
- substrate_info() is better standardised, and a couple of corrections of the
  substrate data have been conducted

- updated the package URL to http://opm.dsmz.de/

- some aesthetical improvements (nicer formatting) of the documentation
- some improvements of the previous documentation's content, e.g. for discrete()

- tests have been improved to make them CRAN-compatible (particularly on
  Winbuilder)
- tests are now consistently arranged in files, with a 1:1 relationship to the
  R code files, and more consistently named
- more tests have been included
- some internal improvements of text-processing functions


################################################################################


2012-10-25 (the 7th release on CRAN)

- fixed bug in metadata-file handling of 'run_opm.R' script
- listing(), max_rgb_contrast(), paper_size() and mypdf(), as well as a series 
  of internal functions, moved to 'pkgutils' package; introduced dependency on
  this package
- Ckmeans.1d.dp is now a mandatory dependency
- data set 'vaas_et_al' moved to 'opmdata' package for size reasons
- removed 'kmeans.args' and 'program' arguments of run_kmeans()
- novel OPMD class and according novel functions do_disc(), has_disc(), 
  discretised and disc_settings(), as well as according extensions of the IO
  and conversion functions
- extract() can now also extract discretised  data
- select() gets a 'positive' argument and a  a 'negative' argument
- phylo_data() has been made more user-friendly
- summary() for OPM(S) objects now shows whether or not aggregated or
  discretised values are present
- improved method definitions of sort(), duplicated() and anyDuplicated(), and
  novel unique() method for OPM and OPMS objects
- the vector method of discrete() now preserves the 'names' attribute
- the matrix method of map_values() now preserves more attributes
- 'opm' vignette was included
- improved documentation of flatten()


################################################################################


2012-08-23 (the 6th release on CRAN)

- corrections of some substrate names according to information provided by
  BIOLOG Inc. (thanks to Barry *Bochner*)
- novel substrate_info() function for getting external information on 
  substrates
- novel opm_opt() method for registering 'opm'-global options, and according
  changes of the default arguments of a number of functions (not affecting
  the default behaviour)
- novel paper_size() and mypdf() functions
- level_plot() gains three additional arguments for fine-tuning the colour 
  palette used
- default colour set of xy_plot() changed to 'w3c' (because it contains more 
  colours than 'nora')
- novel flatten() method for lists
- novel 'vline' argument to ci_plot()
- novel rev() and rep() methods for OPM and OPMS objects
- novel sort(), duplicated() and anyDuplicated() methods for OPM objects
- heat_map() now automatically converts 'logical' matrices to 'integer' storage
  mode
- novel best_cutoff() helper function for discretisation
- fixed bug in matrix method of do_aggr() causing lists to occur within data 
  frames
- sort() for 'OPMS' objects gets much more options
- merge() for 'OPMS' objects gets a 'sort.first' and 'parse' arguments
- glob_to_regex() improved: now escapes even more special characters, and keeps 
  all input attributes (such as names)
- separate() in 'list.wise' mode now works with NA values
- entire package rearranged by newly assorting the class, method and function
  definitions to files, almost 1:1 correspondence between function family (as
  indicated in the manual) and location in source-code files
- fixed bug in xy_plot() that caused 'space' to overwrite 'legend.fmt'
- improved `metadata<-`() behaviour if data frames with a single column are
  supplied
- find_substrate() now also allows pmatch()-based searching
- novel 'literally' argument to file_pattern() and batch_process()
- batch_collect() gets a 'simplify' argument


################################################################################


2012-05-20 (the 5th release on CRAN)

- included show() method for OPM(S) objects
- modified `[` to remove incompatibilities with the 'Matrix' package
- changed to lazy loading of the data sets
- duplicate() and anyDuplicated() get a 'what' argument allowing the detection
  of duplicate combinations of selected components of the contained OPM objects
- novel plates() methods for lists and OPM objects
- added factor methods for find_substrate(), find_positions(), glob_to_regex()
  `metadata<-`() and the infix operators; metadata() now betters supports
  factors as keys
- added character and factor methods for plate_type(); the character method
  replaces normalize_plate_name(), which has been removed
- novel case() methods (improved switch())
- run_kmeans() method for matrices
- optional arguments for contains() passed to identical() and allowing fine 
  control of strictness
- separate has been extended; it now automatically selects multiple- vs. 
  single-character splitting modes if split is a non-empty character vector,
  and it has a novel 'list.wise' argument
- added so far missing map_values() for NULL+function; map_names() was 
  accordingly simplified and made more consistent
- summary() for OPMS objects is more detailed
- added formula-based methods for map_values(), map_metadata() and metadata()<-
- added data frame-based OPMS methods for metadata()<-
- fixed 'run_opm.R' bug causing an error in conjunction with '-r template'
- fixed 'run_opm.R' bug causing '-s' to be ignored in conjunction with 
  '-r template'
- more functionality (plotting) for 'run_opm.R', and automated tests for it
- do_aggr() helper method for matrices
- novel contains() method for OPMS objects


################################################################################

2012-04-21 (the 4th release on CRAN)

- added Gen-III-run file to example files
- sort() method for OPMS objects
- phylo_data(), heat_map() and radial_plot() methods directly for OPMS objects
- extract(), select(), discrete() and phylo_data() methods for data frames
- gplots silenced
- improved documentation according to http://developer.r-project.org/Rds.html
  (two exceptions: indentation and line length of the examples, as well as
  a single instead of two spaces in running text)
- added full citation information 
- included preliminary version of radial_plot()
- added missing OPMS-method documentation entries
- fixed bug in merge() that caused it to crash with input plates with unequal
  running times
- for 'opm-fast', CIs that cannot be calculated because the values are 
  constant are not set to NA anymore but to that value (only for the 'A' 
  parameter)
- export of phylogenetic data in Hennig86 format, and more flexibility (novel
  arguments) for phylo_data(); for instance, vector-based merging is possible
  via the 'join' argument; HTML output has been considerably improved (e.g.,
  it runs without warnings through Tidy); added 'run.tidy' option for 
  reformatting it with HTML Tidy
- improved map_metadata() by using map_values() throughout


################################################################################

2012-03-29 (the 3rd release on CRAN)

- fixed problems causing the tests to crash on the Windows version of
  R-devel and R-2.15.0
- added methods for the estimation of +, w and - and the subsequent generation
  of reports for, e.g., IJSEM
- option for opms() to recognise plate types and construct OPMS objects
  separately, or select those with a certain plate type
- redundancies in input plates with 'OTH' as plate type are automatically 
  removed
- novel merge() method for OPMS objects, i.e. a function for merging plates 
  from subsequent runs of the same organism
- novel arguments to read_opm() (automatically assorting according to the 
  plate type)
- novel helper functions for k-means based discretisation: to_kmeans(),
  borders(), calinski(), and, of course, run_kmeans()
- novel 'digits' argument to listing()
- map_names() has been completed, including methods for data frames, arrays and
  matrices, as well as for 'ANY' objects
- map_values() has been extended
- applications of structure() that unnecessarily dropped attributes were 
  replaced
- novel 'pad' argument of safe_labels()
- improved documentation of xy_plot() (the arguments passed to wells())
- improved format of references in the documentation
- include factor method for separate(), automated removal of constant 
  columns and 'simplify' argument


################################################################################


2012-03-09 (the second release on CRAN)

- documentation was changed to syntactical names throughout, and all duplication
  removed; now there is a single documentation entry for all methods of the 
  same generic function
- the documentation was carefully proofread again; thanks to L.A.I.V.
- the 'see also' references in the documentation now use full names, including
  the name of the respective package, even for packages that come with the R
  distribution
- improved documentation of find_substrate()
- included OPMS splitting and traversal (looping) examples in the documentation 
  (e.g., for plotting individual plates)
- included generation-III hints in the documentation of the IO functions
- fixed bug regarding 'theor.max' argument of xy_plot()
- novel oapply() method for applying a function to the entries in an OPMS 
  object
- novel seq() method for OPMS objects for easier looping
- novel duplicated() and anyDuplicated() methods for OPMS objects  
- added missing filename() and aggr_settings() functions for OPMS objects and
  more according tests
- novel map_names() and map_values() methods for other objects, particularly 
  data frames, and extended functionality via 'coerce = TRUE'; this is also
  available for map_metadata() and metadata_chars()
- added splitting function for character entries in data frames, automatically
  recognising the best split pattern; thus easing metadata construction from
  CSV data; included the treatment of fixed-width strings and a data frame
  method for this generic function
- the 'coerce' argument of map_metadata() and metadata_chars() has been renamed
  to 'classes' (to make this uniform)
- novel 'include' argument to split_files()
- curve_params() has been removed and integrated into do_aggr(), which hence
  has a novel 'plain' argument
- file input now automatically changes 'OTH' to generation-III plate type
- improved the 'remove.csv.data' behaviour of include_metadata() (the default 
  keys were always removed, and 'remove.csv.data' had a distinct effect);
  changed the argument to 'remove.keys'; also changed argument 'stop.on.error'
  to 'skip.failure' (with the reverse meaning, but the default behaviour 
  remained the same)
- fixed error in the documentation in heat_map() and changed 'gplots' to 
  default of 'use.fun'
- replaced use of rep() by rep.int() where possible
- added tests for the 'time' mode of select()


################################################################################


13-02-12 (the first release on CRAN)

- novel 'single' and 'invert' arguments for split_files()
- improved 'demo' mode of split_files() and clean_filenames() and their
  documentation
- improved behaviour of clean_filenames() in the (pathological) case of empty
  output filenames
- added 'split' and 'clean' result modes to the 'run_opm.R' script and improved 
  the help message by exampling each result mode
- improved read_opm() and read_single_opm() error messages
- extract_labels() has been removed and integrated into extract_columns(),
  which has a novel 'join' argument to accommodate that
- novel 'strict' argument of metadata()
- novel 'exact' and 'strict' arguments to flatten(), extract_columns() and 
  extract(); both are TRUE by default; that is, these functions by default
  generate an error in the case of missing metadata; they will now also
  generate an error, not a warning only, if the numbers of rows in the metadata
  columns do not fit to each other
- internally improved extract() and ci_plot() and added more tests for the 
  former
- added more tests to heat_map()
- moved c() to the OPMX virtual class
- date and version number are now automatically inserted during the build phase
  of the package documentation
- deleted the identifier entries in the metadata of 'vaas_et_al' (they are 
  redundant compared to the combination of the other entries)
- added more references to the discretisation methods
- added more 'see also' entries to the documentation
- simplified the stopifnot() statements of the examples


################################################################################


09-02-12

- novel split_files() function for splitting old-style CSV files with multiple
  plates; added according example file (which cannot directly be read using the
  input functions)
- novel clean_filenames() function for creating nicer filenames
- described 'opm-fast' parameter estimation in the manual
- default plate-name normalisation now removes the plate subtype/version; was
  necessary because of the PM-M plates
- made read_old_opm() more robust against commas in CSV comments
- improved error messages of read_single_opm() and include_metadata()
- xy_plot() now correctly sets the baseline to the smallest (!) of the negative
  control well maxima; see examples for how to use the largest maximum
- added more tests to the many groups of methods, e.g., numeric, phylogenetic,
  etc. ones
- novel arguments 'brewer' and 'brewer.i' for select_colors(); thanks to Nora


################################################################################


30-01-12

- added 'opm-fast' estimation methods for the curve parameters A and AUC; 
  because these are based on very simple calculations, they are MUCH faster
  than the grofit approach; regarding their correspondence with the grofit
  results, see the examples to do_aggr(); a corresponding -f/--fast option was
  added to the 'run_opm.R' script.
- added support for heatmap.2() from the gplots package to heat_map(); it is
  not used by default and not required for installation but useful, as it adds
  a legend with the assignment of colours to numeric values; the return value
  of heat_map() now includes the colour mappings of groups to row/column side
  colours, if these were used
- added data frame method for heat_map()
- added 'time' argument to select(), allowing for the automated restriction
  of plates to common time points; accordingly enhanced the OPMS `[` method
  by allowing for lists as third argument (i.e., as the second index)
- fixed bug in trimming mode of aggregated()
- finished ALL examples in the documentation except for the CI-plots (waiting
  for input from Lea); for instance, the IO documentation is now complete; 
  enhanced some other examples; added selected literature references
- novel function opm_files() for easy access to the scripts and test data
- fixed bug in aggregated() if more than one parameter was requested
- changed aggregate() to do_aggr() as requested by Lea/Johannes
- novel 'paren.sep' argument of wells() and hence of all plotting functions
- novel 'striptext.fmt' argument to level_plot() (OPMS method)
- 'range = TRUE' now possible for discrete(); improved documentation of 
  phylogenetic methods; improved output of phylo_data()
- removed warning messages from collect_template() and fixed a bug regarding 
  its data frame output; improved its output; included more tests
- moved most packaged dependencies from 'depends' to 'import'


################################################################################


26-01-12


- finished the heat_map() function for matrices; added 'as.groups' to extract()
  to ease the construction of heatmap row-side colours
- select() now also accepts logical and numeric 'query' arguments and treats
  them specially; an example for selecting all plates with aggregated values
  is given
- the 'trim' argument of aggregated() and extract() was moved to character and
  now accepts three modes: 'no', 'medium' and 'full'
- finished OPMS documentation (with the exception of ci_plot() and relatives
  because they need to be reworked)
- finished IO documentation with the exception of those marked with NEEDINPUT;
  see the manual for which kind of information I need from you
- finished the documentation of the list functions
- documented the YAML output format (at least its technical details)
- miscellaneous other improvements to the documentation such as disclaimers 
  regarding malformed CSV files in the IO documentation
- 'ignore.dups' argument of extract() changed to 'dups', its type changed from
  logical to character; default changed to a warning message
- novel 'add.cols' argument to all collect_template() methods; the character
  (filename) version now also works with YAML input with multiple plates
- improved internal handling of option lists with defaults
- added more tests to the OPMS methods that collect information from all plates
  and improved their internal consistency
- fixed bug causing some arguments to plate_type() being ignored by xy_plot()
- fixed bug regarding the character labels in phylo_data() output and added
  'paup.block' argument


################################################################################


24-01-12

- novel 'space' argument of xy_plot() for OPMS; changed default to 'top'
- collect_template() is now generic, and OPM and OPMS methods are available
  (and well documented, by the way)
- finished the documentation examples of all OPM methods
- finished the documentation examples of most OPMS methods 
- fixed bug in some of the '+' methods 
- improved behaviour of some OPMS methods that are also available for OPM and
  collect information from the plates


################################################################################


23-01-12


- completed the OPM examples (affects particularly metadata<- and the infix
  operators)
- better panel header construction for the OPMS level_plot() method
- novel 'i' argument to measurements()
- novel 'word.wise' argument to wells() and plate_type() (and thus to all 
  plotting functions), other arguments of wells() now also for plate_type()
- improved behaviour of contains() for nested name-based queries and thus the 
  behaviour of the list-based %k% operator; also improved the behaviour of %Q%
  for character queries
- made to_metadata() and collect_template() more flexible
- include_metadata() works now with data frames with a single row only; added
  more according tests


################################################################################


20-01-12

- changed default to 'values = TRUE' in select() and improved documentation
- renamed 'include.args' to 'md.args' to avoid name clash with 'include' in
  batch_opm_to_yaml()
- added examples to almost all OPM and OPMA methods, using the small data set
- added first examples to the OPMS methods, using the medium-sized data set,
  and to some helper and list functions
- marked all remaining, undone examples as TODO
- additional arguments for hours(); deleted time_points() because this is now
  covered by hours(); automated trimming of OPMS objects to same number of
  time points will soon follow


################################################################################


19-01-2012


- added two smaller data sets, subsets of 'vaas_et_al'
- added warning message in case of non-uniform measurement running times when
  building an OPMS object (if users get too annoyed, I'll hasten to remove this
  again!)
- moved some of the flatten() parameters that are passed to wells() anyway to
  '...' and updated the documentation accordingly
- novel 'brackets' and 'clean' arguments of wells() (and thus of flatten() and
  the plotting functions)
- replaced 'set.zero' by 'trim' argument to aggregated() and extract() and
  improved the underlying algorithm; setting negative values to 0 might be
  added as an option in the future
- made improvements of some substrate names; introduced more name checks 
  during the building of the package
- fixed bug in error message (not relevant in a successful run) of 
  include_metadata() and added according test


################################################################################


17-01-2012

- included examples for phylogeny functions and most helper functions
- added support for 'logical' data type and for NEXUS comments to phylo_data()
- added support for 1 character state to discrete() (not very interesting...)
- beautified example data set


################################################################################


16-01-2012

- the usage entries for '+' and 'metadata<-' are now included in the manual,
  and the corresponding S4 method for each combination of types of arguments is
  described in detail separately
- N.B. a special metadata-deletion method has been omitted because this can 
  actually be done using metadata(x, key) <- NULL or even metadata(x) <- list();
  note that 'metadata<-' methods are also defined for the OPMS class
- the duplicated class manual entries have been combined; textual description
  and method list now have the same entry
- well_to_substrate() can now deal with several plate names at once and allows
  partial matching
- novel param_names() function for showing the internally used names for the
  curve parameters
- additional documentation added to to_metadata(); note particularly that you
  should prefer this function for inputting metadata tables over read.table(),
  read.delim() etc. because of the way column names and character data are
  handled
- improved argument naming of curve_params() (and thus aggregate()) to make it
  easier to add other curve-parameter estimation methods in the future; lowered
  RAM usage by calling grofit() separately for each well
- added coarse-grained to fine-grained parallelisation using 'multicore': 
  'coarse' means traversing input files in parallel, 'fine' means traversing
  the wells of one plate in parallel, but processing files serially; this is
  somewhat faster for moderate to large numbers of files; note that the
  meaning of the -c option to 'run_opm.R' has changed!
- improved the internal structure of the tests, added some new ones


################################################################################

13-01-2012

- now only user-level functions appear in the manual, reducing the PDF version
  to about 80-90 pages; empty cross-links should also have been fixed
- made the keywords entries consistent, resulting in an improved 'topics'
  listing in the manual index
- the usage entries for the infix functions are now included in the manual
- miscellaneous other improvements of the documentation; for instance, shell
  globbing is explained in detail under glob_to_regex()
- novel normalize_plate_type() and well_to_substrate() functions; the former is
  now always applied if an OPM object is constructed, and the latter is more
  convenient user-level function
- added 'neg.to.zero' argument to aggregated() and extract(), which is FALSE by
  default
- improved contains(), which is used by the list-based metadata queries


################################################################################

11-01-2012-b

- improved %q% for character queries (should now cope with factors in the 
  metadata, for instance, and now is really less strict than %Q%, as it should
  be)
- added some minor documentation improvements for these functions
- added updated example data set
- fixed problem caused by the last release (the auxiliary functions entirely
  disappeared from the manual!)
- additionally marked all auxiliary functions with '*' in their title
- added arguments to extract() enabling the export of full substrate names as
  column names
- WARNING: removed handling of 'subset' vectors of length > 1 from extract();
  if you need this, you can easily get it for free using lapply() or something
  like that by yourself


################################################################################


11-01-2012-a

- fixed persistently unmatched plate names (no bug report => no bug fix!), but
  needed to guess them for the PM-M plates (Nora's treatment of the PM plates
  also seems to be mainly based on guessing...)
- completed map_metadata() and metadata_chars() for applying mappings to stored
  metadata
- included 'internal' keyword in all auxiliary functions, causing 
  help(package = 'opm') to report only the user-level functions, and extended 
  all help headers which are displayed in that listing
- miscellaneous additions to the documentation


################################################################################


09-01-2012

- added example data set to package; from now on, you MUST take the data set
  from the package, not from the original e-mail (this was possible because I 
  finally found a way to compress the entire data set below 4MB)
- added first version of 'run_opm.R', which you can find in the 'scripts'
  subdirectory of the directory where 'opm' has been installed; already includes
  'yaml' and 'template' result modes
- better documented 'metadata<-'
- added novel map_metadata() and metadata_chars() methods and several auxiliary
  functions for running these two
- added arguments to batch_process(), thus improved the file-extension handling 
  of batch_opm_to_yaml()
- improved metadata input handling by batch_opm_to_yaml(), and added 'gen.iii'
  argument, acting like the one of read_opm()
- fixed bug introduced in last to_metadata() version
- made some improvements to the package directory and file structure


################################################################################


06-01-2012

- added 'cores' argument to curve_params() (and thus to aggregate(), too)
  enabling parallel parameter estimation using the 'multicore' package
- moved most examples from the manuscript draft to the 'opm' manual and added 
  examples to '+' and c(), i.e. most functions lacking a 'usage' documentation
  entry now have at least an 'examples' entry
- added several 'seealso' links to similar functions from 'base' and other
  standard R packages
- move almost all plain functions where useful to S4 methods


################################################################################


22-12-2011

- added 'exact' argument to contains() and changed default behaviour
- added %Q% infix operator; changed behaviour of %q% to non-exact matching
  (i.e. matching one of several alternatives)
- added user-level function max_rgb_contrast() for arranging user-selected 
  colours
- made some internal code rearrangements and improvements of the scripts that
  repair the documentation
- added two line-width arguments, 'lwd' and 'base.lwd', to each of the two 
  xy_plot() functions
- changed default baseline colour to dark grey
- fixed missing export of select() and improved the documentation
- fixed two documentation bugs
- fixed 'striptext.fmt' bug (there is a strange reverse precedence of the 
  'par.strip.text' parameter of xyplot())


################################################################################


08-12-2011

- defaults of level_plot() improved (panel header background colour)
- defaults of xy_plot() improved (baseline colour)
- main_title() directly accepts expressions (e.g., for writing stuff in 
  italics) and thus the 'main' argument of the plotting functions, too
- the 'panel.header' argument of level_plot() now also accepts expressions
- added infix operators for querying the metadata of OPM and OPMS objects: %k%,
  %K% and %q% (documentation usage entries for these are not yet produced)
- added select() method for OPMS allowing metadata-based selection of subsets
  using either %k% or %q%
- improved summary() function
- YAML_VIA_LIST class extended
- better adapted batch_opm_to_yaml() to YAML input
- some documentation improvements


################################################################################


04-12-2011

- fixed bug in explode_dir() related to the 'wildcard' argument
- added 'demo' argument to all user-level functions that call explode_dir()
- renamed two arguments of the IO functions ('input' => 'names', 'pattern' =>
  'include') to improve consistency
- removed user-level access to file_pattern(); works now via list arguments to
  'include' and 'exclude', not affected by 'wildcard'
- 'wildcard' = TRUE is now the default of these IO functions
- added more flexibility (i.e., access all explode_dir() arguments) to 
  collect_template()
- added third overwrite option (overwrites output file only if it is older than
  the input file)
- changed substrate-query functions to S4 generics and added second 
  find_position() function
- miscellaneous improvements of the documentation
- solved all remaining 'R CMD check' warning messages (but currently the 
  replacement functions have no 'usage' entry)


################################################################################


01-12-2011

- improved summary() function
- novel minmax() function
- improved 'main' and 'neg.ctrl' arguments of xy_plot()
- length() method for OPMS
- read_opm_yaml() and, hence, read_single_opm() and read_opm() can now work with
  YAML lists of OPM lists; important for IO of OPMS objects
- to_yaml() improved (metadata at the beginning)
- `[` with useful 'drop' argument
- added easter-egg function
- virtual class YAML_VIA_LIST documented
- miscellaneous improvements of the documentation
- added keywords to all documented objects
- changed list functions to S4 methods and sorted them together


################################################################################

