Version - 2.6 - 12-01-15
-Fixed an issued with fossilRecord2fossilRanges where a dataset with a single taxon resulted in a fatal error regarding an attempt to replace more elements than already exists
-Fixed issue with merging cryptic taxa in fossilRecord2fossilRanges
-Discovered slight stochastic element in minBranchLength where order of edges mattered, and I apparently used sample() to choose the next edge, which means I was an idiot in 2011. Thanks to Manabu Sakamoto for reporting this very difficult to notice bug.
-Made several improvements to timeSliceTree thanks to modified code from Klaus Schliep, particularly replacing use of dist.nodes for root-to-tip distances with node.depth.edgelength instead (much more efficient, much faster!)
-Made similar changes to all functions in modifyTerminalBranches based on Klaus Schliep's suggestions, including dropExtinct
-Replaced any instance where dist.nodes was used to get root-to-node distances with node.depth.edgelength throughout paleotree, including branchClasses, cal3TimePaleoPhy, compareNodeAges, dateNodes, depthRainbow, multiDiv, phyloDiv, plotTraitgram, taxa2phylo, termTaxa, timePaleoPhy
-Revised DESCRIPTION's description of paleotree
-Revised README
-Removed functions getSampRateCont and getSampProbDisc and all references elsewhere in paleotree: use 'durationFreq' functions instead!
-Removed functions simFossilTaxa, simFossilTaxa_SRCond and simPaleoTrees and all references elsewhere in paleotree. Use simFossilRecord instead!
-Changed simTermTaxaAdvanced to use simFossilRecord rather than simFossilTaxa
-Modified divCurveFossilRecordSim (which powers plot functionality for simFossilRecord) so that red sampling curve isn't plotted if the only sampled taxa are extant sampled-at-the-modern taxa
-Added check to freqRat in case calculated freqRat is NaN (i.e. 0 / 0 )

Version - 2.5 - 09-20-15
-Added argument APIversion to makePBDBtaxonTree which allows a user to control which version of the API is called when argument solveMissing=queryPBDB. Current default is "1.1", this will need to be updated when PBDB API 1.2 becomes public
-Added some safety checks to degradeTree
-Added function equation2function which converts a character string containing the right-hand side of a single-line equation (like from class formula) to an R function with arguments corresponding the parameters in the input equation.
-Added handling for ambiguous and polymorphic characters to minCharChange, AncPropStateMat and resolveTreeChar by adding support for these options as they already existed in phangorn
-Altered function parentChild2TaxonTree to handle datasets where root-ancestor was indicated with an NA value
-Additional checking in testEdgeMat to catch when the root node is misnumbered,  also additional checking taken with modification from Emmanuel Paradis's checkValidPhylo
-Additional routines in cleanNewPhylo to convert $edge and $Nnode to integer storage, and in case collapse.singles fails to collapse all nodes
-Modified taxa2phylo, expandTaxonTree, resolveTreeChar, taxa2cladogram to use cleanNewPhylo
-Sweeping grandiose changes of how trees are created, cleaned, checked, etc with loads of tiny hidden functions. An unlikable yet necessary thing to implement.
-Function taxa2phylo apparently requires that taxa be ordered by FAD, with the root ancestor being listed first (probably reflecting bad coding practices of Dave circa 2011...)
	-Function taxa2phylo will now silently coerce a dataset (and input obs_time) so that taxa are ordered by FAD, before continuing
	-Fixed small bug introduced by this, which mis-numbered ancestral taxa when passing to further parts of taxa2phylo (ugh)
-Added tolerance argument to dateNodes to stop spurious warnings related to floating precision about native node dates that were barely distinguishable from zero
-Added new example dataset of macroperforate foram relationships and ages taken from Aze et al. 2011 for use in testing taxa2phylo and other related functions
-Added a tolerance argument to cal3timePaleoPhy to stop spurious warnings related to floating precision about terminal tip ages that were barely distinguishable from zero
-Discovered broken while() loop in getUltimateAnc and testParentChild, added code to avoid infinite-running while loops
-Added example dataset of character matrix and cladogram from Song and Zhang (2014) study of dicranograptid relationships
-Removed variables from functions that were assigned but never used via package codetools
-Following recent change in CRAN policy, now explicitly importing various functions from default non-base package into paleotree namespace, including importing package stats as a whole. These imports now listed in DESCRIPTION.
-Added function bindPaleoTip which wraps phytool's bind.tip for use with non-ultrametric paleontological phylogenies with $root.time elements, allows input of the new tips age and updates $root.time
-Added 'kanto' a fictional example dataset, consisting of a taxon abundances-by-sites table for community ecology
-Added community ecology functions 'pairwiseSpearmanRho' and 'HurlbertPIE' since they don't seem to be in any other package
-Modified how timePaleoPhy looks for node dates to assign, after taxa are dropped (originally matched clades based on tip IDs, not tip labels)
-Added argument to multiDiv that allows for control of line type
-Modified taxa2phylo so root.time is added before plotting
-Removed erroneous, incorrect references to Hartmann et al. 2011 from simFossilTaxa; this effect is now properly accounted for by simFossilRecord
-Added function createMrBayesConstraints to convert a topology to a list of topological constraint commands for MrBayes
-Changed many cases where classes of objects are checked to use inherits(), not is() or class()=="", both of which are less preferred methods
-Added function simFossilRecord, a large number of unexported functions and several minor exported helper functions listed under simFossilRecordMethods
	-simFossilRecord is a complex, elaborate piece of software for fast, precise simulation of fossil records under a birth-death-sampling process, with a wide range of models of morphological differentiation allowed, and a wide range of forms for rates to be defined as with respect to several key parameters
	-Current intention is to remove simFossilTaxa and related functions in next version *and* port simFossilRecord to its own package, simultaneously with the release of he *next* CRAN version of paleotree (2.6), as well as remove some other older, redundant functions. This will require considerable modification of examples in paleotree.

Version - 2.4 - 05-01-15
-Modified timePaleoPhy help file to clarify 'these are not realistic time-scaling functions' statement and correcting an 'either' to 'neither' in the description of argument 'ntrees'
-Modified bin_timePaleoPhy and bin_cal3TimePaleoPhy to clarify that dateTreatment=minMax should be replaced be *either* the point.occur argument *or* a sites matrix
-Changed license from GPL ver 2 or higher to Creative Common zero, as I finally realized that CC0 is supported by CRAN (apparently I missed this change years ago)
-Added 'clade' option to collapseNodes to collapse *all* descendant edges of a selected node
-Added function testEdgeMat which is a simple checker of the $edge matrix of phylo objects for inconsistencies
-Added function taxonSortPBDBocc which sorts unique taxa out of PBDB occurrence datasets
-Added function occData2timeList which converts taxon-sorted occurrence data lists to the two-matrix timeList object useable by many other paleotree functions
-Added example data downloads from the Paleobiology Database of occurrence data and taxonomic data, available under 'graptPBDB'
-Added function makePBDBtaxonTree which takes taxon data from the PBDB and constructs a very informal taxon tree from either (a) parent-child taxon relationships pairs, by default, or (b) the Linnean taxonomic hierarchy
-Added functions timeList2fourDate and fourDate2timeList which convert between the 'four-date' and 'timeList' formats for first and last appearance dates given as bounded ages (i.e. start and end times of intervals)
-Added function plotOccData which will plot occurrence data, such as that output by taxonSortPBDBocc from PBDB downloads
-Changed a number of \dontrun to \donttest so they will run during modified non-CRAN R CHECK tests with --run-donttest
-Now allowed to have a simpler Travis CI structure, apparently with --run-donttest 
	-REVERTED due to new r-travis not failing broken builds; Will make this change on a later date)
-Added retioChar, character data for 3 characters for the 22 Retiolitinae species, to the retiolitinae example dataset
-Added functions minCharChange and ancPropStateMat which are wrappers for doing parsimony ancestral reconstruction via phangorn's ancestral.pars
-Added a badge to README that counts number of paleotree downloads from RStudio server
-Added $sampledLogLike and $sumLogLike elements as additional output attached to time-scaled trees from cal3 functions, to allow users to quantify the relative optimality of each tree in a sample under the cal3 probability density function.
-Added function resolveTreeChar, which will use parsimony ancestral reconstruction algorithms to try to resolve polytomies in a phylogeny, so as to minimize the number of independent transitions for some given discrete trait (ordered or unordered). This function ultimately relies on phangorn's ancestral.pars, via ancPropStateMat
-Added function parentChild2TaxonTree which converts a two-column matrix parent-child relationships to a taxon-tree of 'phylo' format
-Added function taxonTable2TaxonTree which converts a table of taxonomic hierarchy membership to a taxon-tree of 'phylo' format


Version - 2.3 - 01-16-15
-New function dropPaleoTip which is a simple wrapper for drop.tip in ape but uses fixRootTime to adjust the $root.time element in the resulting tree, after tips are dropped (Thanks to a conversation with Graeme Lloyd)
-Modified how fixRootTime worked so that (by default) it drew the root age based on shared taxon membership of treeNew between the clades in treeOrig, see the description of argument nodeAgeTransfer for complete details. The original method, based on modifying the root-time based on changes in tree-depth (which is less robust to changes in taxon membership) can be executed by setting the argument nodeAgeTransfer to FALSE.
-Modified dateNodes so that tip labels given to label node dates when the argument labelDates is TRUE are sorted alphabetically
-Added a function minBranchLength which mirrors the 'mbl' time-scaling approach, in taking a tree that already has edge lengths and adjusting branches so all are above some given minimum branch length. timePaleoPhy was modified to use this function rather than doing this algorithm internally.
-Added checks for duplicate taxa in input time or tree data for time-scaling functions (Thanks Tim Astrop for pointing this out!)
-Fixed bug in timeSliceTree where an error was produced if plot=FALSE was given (Thanks to Min Wang, Tyler Smith and Manabu Sakamoto!)

Version - 2.2 - 09-18-14
-Added a new time-scaling method to timePaleoPhy, "equal2" which is otherwise identical to "equal" but replicates the old branch-ordering routine used for 'equal' prior to version 2.0
-Fixed bug in simPaleoTrees when ranges.only=FALSE, modified examples to catch error in the future
-Altered several parts of the timePaleoPhy help file to clarify use of timePaleoPhy (not bin_timePaleoPhy) when there is stratigraphic age uncertainty for taxa, including dropping a harshly worded Note. (Thanks Gene Hunt for pointing out some contradictions in the text!)
-Altered diversity curve functions (including multiDiv) to plot *exactly* to given timelims arguments using xaxs="i" argument in plot
-Slight modification to how plotting works in diversity curve functions (including multiDiv) to decrease interval boundary line overlap from 100th to 10000th of the total plotted area.
-Added axisPhylo() to more functions that have secondary plotting in anticipation of ape referring to $root.time when calculating axis labels. (crosses fingers, thanks E. Paradis!)
-Added a new example dataset, 'graptDisparity' which is the temporal ranges and character data from 183 Ordovician-Silurian graptoloid species taken from Bapst et al. (2012, PNAS), including a dissimilarity matrix calculated from the aforementioned character data.
-Added a new function 'nearestNeighborDist' which calculated nearest neighbor distance for each unit in a pair-wise distance matrix. This function is added mainly for a minor pedagogical purpose, as NND is easily calculated without a specialized function.

Version - 2.1 - 08-15-14
-Changes to bin_timePaleoPhy and bin_cal3TimePaleoPhy so taxa not included in the tree are dropped before random dates are drawn from those intervals, which increases computational efficiency.
-New function perfectCharTree, for obtaining matrices of simulated parsimony informative characters on a topology
-New function seqTimeList, which randomly searches a given timeList object with overlapping intervals for solutions which have fully sequential intervals
-Added error message to timePaleoPhy to report an error if 'type' argument is not one of the listed options
-Fixed error in sampleRanges when handed data with a single instantaneous taxon
-Added option to return all sampling events in $ranges for simPaleoTrees
-Modified bin_timePaleoPhy and bin_cal3TimePaleoPhy so that the $ranges.used arguments name the columns "FAD" and "LAD" respectively for ease of use with geoscalePhylo in package strap
-Small modifications to how plotting worked in freqRat, changed calculations to work on proportions and not absolute frequencies, made it so that a warning is issued if a freqRat over 1 is calculated.
-Clarifications to help file and warning statements regarding use of 'zlba' and 'aba' time-scaling methods (thanks Graeme Lloyd!)
-Added calcExtinction argument to freqRat to give capability to get extinction rate from slope of log frequencies

Version - 2.0 - 02-03-14
-Changed parInit to use uniform distribution to randomly draw initial parameter values between bounds, rather than take mid value between bounds
-Changed how time-scaling functions dealt with node.mins argument; can no longer use node.mins with a dataset that has unshared taxa that are to be dropped
-Altered example for use of node.mins in help files for time-scaling functions; thanks John Clarke of Oxford for the heads up! Also other modifications were made to the help descriptions, clarifying that node.mins can be used to constrain the minimum age for the root node.
-Also on a different issue brought to my attention by John Clarke, added an error message to paleotree when 'equal' is attempted by the edges leading to the root are zero-length (because 'equal' cannot run under this situation!)
-Added new function collapseNodes that collapses specific user-defined nodes, either forward or backward
-Made all lines checking for dichotomous trees check both with is.binary.tree() *and* is.rooted()
-Added new function dateNodes which returns the dates of the internal and tip nodes of a phylogeny on an absolute time-scale, with respect to the $root.time element if one exists
-On a trial basis, I have added new function inverseSurv which attempts to replicate the forward and inverse survivorship modeling applied by Foote (2001, 2003, 2005) and is useable with the newly implemented constrainParPaleo framework implemented in the previous version of paleotree. I am not yet convinced this function is a 100% faithful replicate of the original method.
-fixed error in plotTraitgram where if trait data was entered in same order as tree$tip.label, trait data was not resorted prior to running ace
-'equal' method in timePaleoPhy wasn't returning same result as 'equal' method in DatePhylo from Graeme Lloyd's original code. This turned out to be a result of differences in how we ordered nodes: Graeme ordered them by time or distance-from-the-root (using dist.nodes) and I was using node.depth, which counts number of branching events. This choice shouldn't make a considerable difference on the performance of the algorithm, but does produce some differences in the resulting time-scaled trees. For consistency, I have change timePaleoPhy to match Graeme's algorithm.
-altered timePaleoPhy and cal3timePaleoPhy to allow the point date occurrences with the first and second column of timeData interpreted as bounds instead, using the argument dateTreatment="minMax"
-related to above change, the argument rand.obs was removed from timePaleoPhy and cal3TimePaleoPhy as no longer necessary, this functionality is now available via dateTreatment="randObs"
-Although it may be strange to not report a lack of a change, but still have not added the finite time window approach for durationFreq

Version - 1.9 - 01-02-14
-Changed all functions to individual R script files rather than single master script. Why didn't I do this years ago??!
-All help files converted to an roxygen2 format within function scripts
-At suggestion of Fabricio Villalobos, added option to expandTaxonTree that allows branch lengths to be retained and the added lower-taxa are connected with zero-length branches. Only useful for very specific purposes, please use with caution.
-Changed all lines which checked for class "phylo" of input objects to use is(obj,"phylo") instead of class(obj)=="phylo" per recommendation of Carl Boettiger
-Added new warning line to taxicDivDisc so people who try to pass it matrices with character strings in the matrix will get more helpful warning messages
-Upgraded probAnc and qSProb2comp based on equations in Foote (1996) for all three modes of origination, also fixed some errors in previous versions
-Added new function pqr2Ps which uses Emily King's exact derivation for the joint probability of a clade being (a) going extinct but sampled on an infinite time scale and (b) never going extinct on an infinite time scale
-Removed internal Ps function from cal3, now pqr2Ps which is exported directly to namespace
-Converted to new way to handle likelihood functions in paleotree, moving to a function-as-an-object system like diversitree.
-Following on last point, added new functions for fitting models of duration frequency data, replacing getSampProbDisc and getSampRateCont
-More models to follow in future versions of paleotree: added new function footeValues which will (eventually) support a release of a function that implements Foote's (2001, 2003, 2005) inverse survivorship models
-Modified diversitree's 'constrain' function to make a paleotree version named constrainParPaleo which is both entirely separate and fulfills needs such as constraining many similarly named parameters to a single value
-See new functions listed in ?modelMethods for manipulating functions in the new model format
-Added some not-exported hidden functions for use by the various model-handling functions
-Added a 'terrible idea' function optimPaleo which simplifies using optim with new parameter bounds functions. This function is entirely for pedagogical reasons and may be removed later.
-Added new function horizonSampRate which uses ML estimator from Solow and Smith (1997) for estimating sampling rate from precise durations in continuous time and number of sampled horizons
-Added new function perCapitaRates which estimates the per-capita origination and extinction rates from discrete interval data, following the methods from Foote (2000)

Version 1.8.2 - 09-03-13
-Added sample retiolitid graptolite dataset, try data(retiolinae)
-Small fix to time-scaling functions to avoid bug associated with geiger 1.99
-Added minor option to simFossilTaxa to change taxon sorting
-Added slight change to warning message for taxa2phylo in case data that looks like times of observeration from merged cryptic taxa is passed to it
-Slight change to simPaleoTrees so that cryptic taxa are never merged when sampleRanges is applied (since that breaks taxa2phylo)
-Following error reports from users using old versions of R, have now restricted this paleotree update to require R 3.0.0

Version 1.8.1 - 04-03-13
-Removed dependency on geiger by changing plotTraitgram to only use ace in ape

Version 1.8 - 02-22-13
-simTermTaxaAdvanced had a bug which scrambled taxon names; this is fixed
-Small changes to error checking in trueTermTaxaTree to stop erroneous error messages in environments with excessive numeric precision
-added new argument 'int.times' to multiDiv to allow prior intervals to be added (note this change previosuly accidentally left out of v1.8 changelog)
-added new argument 'inc.term.adj' to timePaleoPhy at the suggestion of Shan Huang which allows terminal ranges to be included for adjusting branch lengths under the various non-'basic' timescaling method options

Version 1.7 - 12-30-12
-added new argument 'point.occur' bin_timePaleoPhy and bin_cal3TimePaleoPhy to allow for datasets composed on point-occurance/single-find taxa (i.e. FAD is equal to LAD for all taxa), following a conversation with G. Hunt
-Altered sampleRanges so that taxa with last occurance at time=0 were treated as 'live' even if input was only a two-column matrix of ranges and not a 'simFossilTaxa' matrix result
-Added a new 'advanced' version of the terminal-taxa / candle simulator, which uses simFossilTaxa to allow for trees with extant taxa
-At the dogged insistence of my illustrious committee, I have changed the name of the 'candle' model to the 'terminal-taxon' model
-altered multiDiv, phyloDiv and taxicDivDisc so to deal with extant datasets better with new arguments and changes to interval splitting
-add minExtant and mintime options to simFossilTaxa_SRcond to more closely match simFossilTaxa
-Nodetimes slightly rounded (to six figures) in compareNodeAges, dropExtinct, dropExtant to avoid error relating to negative relative node ages
-altered binTimeData to place extant taxa in an interval bounded 0,0 for their last occurrence
-altered getSampProbDisc and getSampRateCont to drop all extant taxa (for getSampProbDisc, this is defined as being in a bin defined (0,0); see above for binTimeData)

Version 1.6 - 11-05-12
-Changes to bin time-scaling functions so that rand.obs and FAD.only conditions were forwarded to their associated functions, rather than done  by the bin wrapper function (this caused problems with the calculation of the weight adjustment for the cal3 methods)
-New function fixRootTime which is called by any other function which needs to fix $root.time elements after dropping taxa, etc.
	-Uses solution for fixing root.times previous being used by dropZLB
-Inconsistency found in how root.time elements were fixed in terminal-branch dropping functions; dropExtant was found to be buggy
-New simulation functions for 'candle trees' which are clades were all observable taxa are monophyletic lineages which correspond to the terminal branches of a phylogeny
-Changes to taxa2phylo so that an error is returned if observation times outside the original taxon ranges are passed to it
-SRC method is now considered deprecated and is removed from the public release of paleotree, along with any references in the help files. The SRC method, as of 10/29/12, can be found in the paleotree github repo in the deprecated functions folder. THE AUTHOR OF THIS PACKAGE STRONGLY RECOMMENDS NOT TO USE THE SRC METHOD. Users interested in using rate calibrated timescaling should use cal3 instead.
-cal3 is now modified so that step.size can be changed as an argument
-cal3 is modified so that differences between time of observation and LAD do not cause differences in the extent to which nodes are dated, by adding the densities calculated for 'unconsidered' potential node ages to the maximum potential node agenot alter the placement of node ages, which can be modified with 
-Bug fixed whereby cal3 was unable to properly use the rand.obs argument, giving out trees with time of obs at the LADs instead (perhaps the package author may have been drunk or just feeling reckless when he wrote the rand.obs arguments in the various timescaling functions?)
-Bug fixed in simFossilTaxa where some sets of conditions would sometimes produce an error in some runs (thanks Tiego Quental for the bug report!)
-Bug fixed in using rand.obs argument in timePaleoPhy where timeData was recycled over many runs (thanks Roger Benson for the bug report!)
-Modified cal3 timescaling methods to have a randres option and to allow per-taxon anc.wt values
-Modified plotMultiDiv to allow plotting multiple diversity curves, by default as a crazy rainbow

version 1.5 - 10/05/12
-New functions, cal3TimePaleoPhy and bin_cal3TimePaleoPhy, similar to SRC methods but different probability equations used, req div rates
-Modifications to SRC methods to work more like how cal3 calculates unobs evol history at each node
-Added function freqRat for estimating the per-interval sampling probability via the frequency ratio method of Foote and Raup (1996)
-Added function rootSplit, which finds most basal split among a set of taxa
-Added function timeLadderTree, which resolves polytomies according to order of appearance
-Added function reverseList, which takes a hierarchial list and reverses that hierarchial order
-fixed bug in binTimeData where extant taxa were returned as NA in the output timeList object
-Modified function compareNodeAges to allow multiple trees as input, for all nodes shared in common among all input trees
-Modification to diversity curve functions so plots are cut off before going past the Modern (time 0)
-Modification to avgtaxa equation used in simFossilTaxa_SRcond. See help file for details.
-Warning/Error Line added to timePaleoPhy in case phylogeny tips are not a character vector like they should be

version 1.4 - 06/17/12
-Added a CITATION file, accessible via citation("paleotree")
-Added randLiveHat option to sampleRanges which controls how the 'hats' of taxa still alive at the modern day are treated
-modified how timeData and timeList input were handled in various functions so that data.frames were converted to matrices
-Added count.cryptic argument to simFossilTaxa and simFossilTaxa_SRCond
-Fixed error where simFossilTaxa_SRCond treated anag.rate as prop.bifurc (and vice versa)
-Cleaning up of help files: fixing typos, weird line breaks, clarification

version 1.3 - 04/17/12
-The various 'bin' time-scaling functions for phylogenies now include a non-stochastic option, for prettier plotting.
-Added new features to sampleRanges for variation in sampling rate similar to Liow et al. 2010
-New feature added to binTimeData to allow for pre-made intervals to be used
-Changed the naming of output from diversity curve functions, simFossilTaxa and sampling rate estimating functions
-Added split.int and timelims arguments to diversity curve functions to stop 'spiky' diversity curve syndrome
-Changed all 'T's and 'F's to TRUE and FALSE statements in code
-Changes made to simFossilTaxa for cryptic cladogenesis, requiring change in output and several other functions
-Changes made to simFossilTaxa for pure-birth simulations
-Changes made to simFossilTaxa_SRcond to fix simulations to right number of nExtant with bifurcation/anagenesis
-The sampling rate/probability estimation functions now print warning messages if convergence does not occur
-Added some additional warning messages to functions
-New function for simulating speciational/cladogenetic patterns of trait evolution under a Brownian model
-New functions for analyzing differences in time-scaling between two phylo objects
-General cleanup of typos and clarification in manual files

version 1.2 - 02/22/12
-changes made to "bin_" time-scaling functions to improve computational speed
-changes made to some help files to add clarification, some examples added

version 1.1 - 02/13/12
-changes made to conditioning structure in simFossilTaxa
	-changes also to simFossilTaxa_SRCond and simPaleoTrees as a result of this
-additional clarification of help files
-changed all calls of print() in the functions to message()

version 1.0 - 01/27/12
-first release
