libsequence  1.9.5
REVISION_HISTORY.md
1 # libsequence revision history
2 
3 ## What this document implies
4 
5 This document lists major changes between tags/releases of libsequence. The following caveat is important:
6 
7 If you see a section below referring to libsequence version X, and no version X exists as a release, then you must consider the info here inaccurate. In such cases, the list of changes may refer to planned changes for a future release which may or may not be implemented yet in either the master or some development branch.
8 
9 ## Moving towards a "2.0" release: ABI compatibility in flux
10 
11 Starting with release 1.8.3, libsequence broke ABI compatibility with previous versions. The "soname" of the library is now set to 20:0:0, where it will remain __even as future release continue to break the ABI__. Basically, from here until 2.0, you should consider backwards-compatibility to be in flux.
12 
13 However:
14 
15 * As a rule, software depending on libsequence will have to be recompiled, not rewritten. The ABI breakage is (mostly...) coming from changing the implementation, not the interface.
16 * If I remove features, they will be marked as deprecated, meaning that they will be removed in 2.0
17 
18 ### ISSUES:
19 
20 1. Sequence/SeqRegexes.hpp -- not working. This will not be fixed until GCC supports <regex>. The function is now currently implemented in a non-regex manner, which is lame, but it works.
21 
22 ## libsequence 1.9.5
23 
24 * Support for slices of VariantMatrix and AlleleCountMatrix. [PR49](https://github.com/molpopgen/libsequence/pull/49)
25 * Faster summary statistic calculation. [PR46](https://github.com/molpopgen/libsequence/pull/46) [PR47](https://github.com/molpopgen/libsequence/pull/47) [PR48](https://github.com/molpopgen/libsequence/pull/48)
26 * Added Sequence::is_different_matrix. [PR45](https://github.com/molpopgen/libsequence/pull/45)
27 * Fixed a bug in Sequence::label_haplotypes.[PR44](https://github.com/molpopgen/libsequence/pull/44)
28 
29 ## libsequence 1.9.4
30 
31 A major step towards 2.0
32 
33 
34 * Summary statistics can now be calculated from a VariantMatrix.
35  [PR33](https://github.com/molpopgen/libsequence/pull/33) [PR36](https://github.com/molpopgen/libsequence/pull/36)
36 * More feature deprecation. See [Issue 21](https://github.com/molpopgen/libsequence/issues/21).
37 * Dependency on TBB removed. [PR38](https://github.com/molpopgen/libsequence/pull/38)
38 * Dependency on zlib removed. [PR39](https://github.com/molpopgen/libsequence/pull/39)
39 
40 ## libsequence 1.9.3
41 
42 * Refactor unit tests to be much faster to compile
43 * Remove dependency on htslib.
44 * The coalescent simulation machinery is no longer compiled or installed.
45 * Mark a lot of code as deprecated
46 * Travis CI is now Linux-only
47 * Add Sequence::VariantMatrix and Sequence::StateCounts
48 
49 This release includes the following GitHub PRs: 11, 12, 13, 14, 15, 25, 26, 30, 31, and 32.
50 
51 ## libsequence 1.9.2
52 
53 * Refactor API for nSL/iHS calculations
54 
55 ## libsequence 1.9.1
56 
57 * Sequence::SeqException was removed. Exceptions from namespace std are preferred, and are easier to wrap in other languages.
58 * Sequence::PolySNP::ThetaL throws exception if outrgroup not present
59 
60 ## libsequence 1.9.0
61 
62 * Fixed issues with Sequence::Comeron95 that made it impossible to allocate on the stack.
63 * Updated threaded implementation of the l-Haf statistic to use TBB.
64 * Weights on stop codons used in Grantham distance calculations is now configurable, and defaults to the max value of a double. Previous library versions arbitrarily used 999.0.
65 * PolySIM::ThetaL now correctly will not include fixed differences in the calculation.
66 * nSL/iHS, H1, H12, H2H1, and haplotype homozygosity statistics are now calculated in parallel.
67 * Sequence::Disequilibrium parallelized.
68 * Intel's TBB is now a dependency.
69 
70 ## libsequence 1.8.9
71 
72 Major API and ABI changes! This release is a __big__ step towards a "2.0"-style release.
73 
74 * Issue #8 fixed
75 * Sequence::PolyTableSlice will throw std::runtime_error if input range is not properly sorted
76 * War on "mutable". The use of this keyword has been removed from the library to the best extent possible.
77 * The API for calculations involving codons has been modernized. This includes Sequence::Comeron95, Sequence::RedundancyCom95, Sequence::WeightingScheme2 (and derived types), Sequence::WeightingScheme3 (and derived types), Sequence::TwoSubs, Sequence::ThreeSubs, functions in Sequence/PathwayHelper.hpp
78 * Sequence::PolyTable (and derived types) have been refactored. The fundamental idea is the same, but the API is modernized. IMO, it is still imperfect, and can be further changed to reflect more idiomatic C++11, but that'll have to wait.
79 * Private data members for classes have been hidden using the [PIMPL idiom](https://en.wikipedia.org/wiki/Opaque_pointer). This goes a long way to future-proofing the ABI compatibility of these types against further implementation changes such as bug fixes.
80 * Sequence/SummStats/classic.hpp provides a sneak previous of how summary statistics will work in the future, once the deprecated Sequence::PolySNP and Sequence::PolySIM can finally be removed
81 
82 ## libsequence 1.8.8
83 
84 * l-HAF statistic added (Sequence/SummStats/lHaf.hpp)
85 * Garud et al.'s H1, H2H1, etc. added (Sequence/SummStats/Garud.hpp)
86 * nSL added (Sequence/SummStats/nSL.hpp)
87 * fixed implementation of Sequence::invalidPolyChar, which was checking the wrong alphabet
88 * Various documentation fixes
89 * Sequence::FST functions shared,Private, and fixed now throw an exception if deme indexes are out of range. Previously, empty return values were sent, which could be confused with there being no sites in a category.
90 * Various code cleanups, esp. removal of commented-out code blocks
91 * The 8-bit encoding stuff has been removed. This was never used in real-world programs, and suffered from some design issues.
92 * Sequence::PolyTableSlice has several updates. First, a bug in "fixed-S" windows was identified through unit testing and fixed. The previous version would drop the last window in some cases. This probably didn't affect many people, but the bug was there for years. (In practice, most 'windows' are fixed distance, not fixed no. variable sites, hence my belief that most previous analyses are ok.) A new constructor supports 'chunking' a PolyTable into equal-sized windows (based on number of variable sites). The class no longer contains a data member of type T, which was never necessary anways.
93 * auto_ptr replaced with unique_ptr in src/Comeron95.cc
94 * binning of nSL/iHS statistics is improved, and better handling of non-finite values implemented.
95 
96 ## libsequence 1.8.7
97 
98 * Sliding windows over physical distance now require an end position
99 * A new unit test was added to test the new sliding window code
100 * A test un test/UhapsTest.cc was commented out. It is known to fail, but those parts of libsequence are not used yet anywhere else. I'll deal with it later
101 
102 ## libsequence 1.8.6
103 
104 * Patch for Issue #7
105 
106 ## libsequence 1.8.5
107 
108 * The API for the template classSequence::PolyTableSlice has changed. During the development of [another project](http://github.com/molpopgen/foRward), I ran into some limitations of the previous API that would require some ugly hacks to work around. The new interface is more modern, and the new implementation will be faster for sliding windows over a physical distance.
109 * The library now installs a program called libsequenceConfig, which may be used to check for what library version is installed:
110 
111 ~~~{sh}
112 libsequenceConfig --version
113 ~~~
114 
115 ## libsequence 1.8.4
116 
117 * Major improvements to the documentation. The doxygen output now contains a detailed tutorial.
118 * fastq stream + fastq unit tests added
119 * move semantics for the Sequence::Seq hierarchy + unit tests
120 * Programs in examples/ are now compiled via "make check"
121 * The build setup for the unit tests is improved
122 * Old-style enums replaced with C++11 enum classes. (These enums are WAY better.)
123 * The enum changes led to many other changes, primarily in the code base dealing wih calculating differences between codons. The new code is much simpler.
124 * A unit test was added to check the calculations of differences bewtween codons.
125 * Kimura80 and Comeron95 will now return a non-signalling NaN for non-finite values. Previous versions returned "999", which was a bit silly, in all honesty.
126 * PolyTable was redefined to publicly inherit from std::pair< std::vector<double>, std::vector<std::string> >. This change represents a major revision to the code. This change gives full access to the underlying data, and possibly even "too much rope". The change also totally wrecks binary compatiblity with previous versions. All unit tests pass.
127 * Routines for coalescent simulation moved from namespace Sequence to namespace Sequence::coalsim.
128 * Support for 4-bit encoding of sequence data and variation data
129 * Sequence::Ptable, introduced in 1.8.3, was a disaster, as it inherited publicly from std::vector, and was therefore a really poor design decision. The code base has been reverted to a design centered around Sequence::polySiteVector + conversion functions.
130 * Constructor inheritance for Sequence::Seq enabled.
131 * Sequence/util/vectorizer.hpp added, in order to facilitate safe inheritance from std::vector
132 * Issue #6, which was a bug in bamrecord::seq, is fixed
133 
134 ## libsequence 1.8.3 (Dec. 5, 2014)
135 
136 1. This release _breaks binary compatibility_ with previous releases. Programs depending on libsequence will likely need to be recompiled.
137 2. New constructor functions were added to Sequence::PolyTable, which breaks binary compatibility. These new constructors are needed for easier [Rcpp](http://www.rcpp.org/) integration. Derived classes have been updated to use these new constructors whenever possible.
138 3. Some I/O functions are no longer inline. These include the operator<< and operator>> for Sequence::Seq and Sequence::PolyTable.
139 4. The following header files have been removed: Sequence/ensureFloating.hpp (add too much complexity due to metaprogramming), Sequence/preferFloating.hpp (add too much complexity due to metaprogramming), Sequence/RNG/gsl_rng_wrappers.hpp (boost::bind, std::bind, and lambda expressions render these irrelevant. Removing this header gets rid of the dependency on GSL).
140 5. classes Comeron95, PolySNP, and FST no longer inherit from boost::noncopyable. The classes now declarte copy constructors and the assignment operator= in terms of the new C++11 keyword "delete". The classes are still not copyable.
141 6. All auto_ptr usage has been replaced with unique_ptr
142 7. All function from boost that are now part of C++11 have been replaced with the C++11 function calls. This mostly includes replacing boost::bind with std::bind and BOOST_STATIC_ASSERT (and the correspponding use of boost/type_traits.hpp) with the C++11 <type_traits> equivalent
143 8. All examples have been updated to C++11, with no dependencies on external libraries like [GSL](http://gnu.org/software/gsl). Importantly, the GSL is still probably a better way to do random numbers than the C++11 "random" header. (I personally don't like the design of the C++ random number system).
144 9. Lots of function prototypes have changed. There were some leftover foo(int x) that are now foo(const int & x). When called many times, the latter may be noticeably faster.
145 10. A new class, Sequence::Ptable : public std::vector<Sequence::polymorhpicSite> is added. This is a very powerful class for maninpulating polymorphism data in a general way.
146 11. The build system has been rebuilt around automake-1.14
147 12. SimDataIO.hpp/.cc have been rewritten. The new implementation is better, cleaner, and breaks binary compatibility.
148 13. A new namespace, Sequence::IOhelp, is declared in Sequence/IOhelp.hpp. It contains some functions to reduce the tedium of some IO conversions.
149 14. A new, faster implementation of Sequence::SimData::read
150 15. The configure script how checks for the existence of [htslib](http://www.htslib.org)
151 16. Sequence/bamreader.hpp and Sequence/bamrecord.hpp added for direct reading from bam files. Will only compile if [htslib](http://htslib.org) is detected by the configure script
152 17. I've performed extensive code auditing using cppcheck. Many issues were resolved. Most were stylistic, but they do make the code more idiomatic.
153 18. A unit test suite is starting to take shape in the test/ subdirectory. These test programs depend on the [boost](http://www.boost.org) "test" library. Future tests could add future dependencies.
154 19. The unit testing revealed a variety of subtle issues in the code base. All of these were in "dark corners" of the library, _e.g._ functions that have seen little or no use in production programs.
155 
156 ## Historical data (copied from the readme.txt previously found at molpopgen.org)
157 
158 current version 1.8.0 (Jan 14, 2014). Two files needed #include <sstream> to used std::ostringstream. Previous library versions were failing to compile on some systems due to the missing header.
159 
160 version 1.7.9 (Dec 12, 2013) Forward declaration of templates in namespace std were removed from Sequence/typedefs.hpp. The library will now compile on OS X Mavericks.
161 
162 version 1.7.8 (Nov 8, 2013): Fixed (a possibly 10 year old) bug in SingleSub.cc. This bug misclassified AGG to CGG changes as q_0 rather than q_2V. This would lead to errors in synonymous/nonsynonymous substitution counting. Programs like gestimator and polydNdS were affected. However, I have run through a lot of my own data, and recorded no differences in output. You have to have had this specific change (or possibly others involving amino acids with 6 codons in the family). The SingleSub code is now vastly simplified and gives correct output (fingers crossed).
163 
164 Binary compatilibity with previous versions of libsequence is now broken: All exception specifications are removed in anticipation of that language feature being removed/deprecated.
165 
166 A new file, SimDataIO.hpp has been added, allowing .gz and binary I/O for SimData objects. See examples/test_SimDataIO.cc for documentation. This now changes how one compiles programs depending on libsequence: you need zlib installed and must include -lsequence -lz (in that order) when compiling programs.
167 
168 version 1.7.7: never happened. never publicly released
169 
170 version 1.7.6 (Feb 13, 2013) Fixed inconsistent exception declarations in templates. libsequence is now compilable with the clang compiler. To use: CXX=clang++ CC=clang ./configure; make ; sudo make install
171 
172 version 1.7.5 (Dec. 18 2012). The operator>> for Clustalw was not processing whitespace properly when compiled with new versions of gcc. That issue is now fixed.
173 
174 version 1.7.4 (Oct 31, 2011). Replaced all instances of typename ptrdiff_t with std::ptrdiff_t, as gcc 4.6 is picky enough to care.
175 
176 1.7.3 (Aug 11, 2011). The more efficient version of Sequence::Recombination::Disequilibrium failed to set a flag in the return value, leading to duplicated output. Now fixed.
177 
178 version 1.7.2 (Aug 11, 2011). The bugfix in 1.7.1 didn't really work. Implementation class data weren't fully-copied. That is now fixed
179 
180 version 1.7.1 (Aug 3, 2011). Fixed bug in samrecord class. Copying of samrecords led to segfaults in previous versions, due to the private pointer-to-implementation-class not getting its data copied to the new object.
181 
182 version 1.7.0 (December 13, 2010). A bug is fixed in the calculation of the number of states at a SNP when doing LD calculations. For monomorphic sites, the old version had problems. Also, an initial release of sam/bam record parsing is included (Sequence/sam*.hpp)
183 
184 version 1.6.9 (June 25,2010) A bug is fixed in calculation of haplotype diversity. When there is considerable missing data in a sequence file, this statistic was severely under-estimated. Previous analyses using this statistic on real data should be re run.
185 
186 version 1.6.8 (March 29, 2009) Implemented a much more efficient means of calculating basic LD statistics. This is not (yet) available through the PolySNP/PolySIM classes yet, but must be accessed via the header file Sequence/Recombination.hpp
187 
188 version 1.6.7 (March 24, 2009) Implemented a safer iteration through coalescent histories, in light of a recent bug in "ms", on which my routine was based. Also implemented a "max marker distance" for LD calculations. NOTE: This version is binary-incompatible with previous releases, meaning any software depending on libsequence should be recompiled.
189 
190 version 1.6.6 (Feb 4, 2009) Updated to be compile cleanly with gcc 4.3.x.
191 
192 version 1.6.5 (Nov. 29, 2007) Updated math function calls to C99 standard. Should compile find on Apple's "Leopard" operating system now.
193 
194 version 1.6.4 (Jun 19, 2007). Fixed bug where haplotype statistics for SNP data were incorrectly calculated in some cases. When alignment columns containing polymorphic sites also contain a mix of upper- and lower-case letters, the extra case was incorrectly detected as an extra haplotype. This affected the following statistics: # haplotypes, haplotype diversity, Wall's statistics, and Hudson's (1987) estimator of 4Nr.
195 
196 version 1.6.3 (Jun 22, 2006). Several changes. Templates for
197 coalescent simulation should now be much more flexible with respect to
198 random number generators. Also, the new design allows them to work with
199 boost::bind + GSL routines, simplifying life quite a bit. Code for Hudson's
200 Snn test has been added, as well as code for simulating Coop &amp;
201 Griffiths-style trajectories of beneficial alleles.
202 
203 version 1.6.2 (March 5, 2006). Three bugs fixed. First, in the FST module, when there are lots of populations, the sum of all the population weights was sometimes detected as not summing to 1, when they actually did. The bug was not accounting for numerical precision, which is now fixed. Second, a rare segfault in the sliding window module (PolyTableSlice.hpp) is now fixed. Third, pairwise LD statistics were being calculated incorrectly in the presence of an outgroup. Now fixed.
204 
205 version 1.6.1 (Jan 6, 2006). New summary statistics added for SNP data.
206 Some example demographic models for coalescent simulations added (see header
207 Sequence/Coalescent/DemographicModels.hpp). Five bugs fixed:
208  1.) src/CoalescentInitialize.cc: Fixed bug in init_sample. Regions with 0 "sites" now have the last "site" in the chromosome labelled 0, which is correct. Previously, it was labelled 1.
209 
210  2.) src/HKA.cc: Fixed minor error in calculation of f_hat which was pointed out by Andy Kern. I was taking the mean(f_hat) across loci as the estimate, rather than following equation 5 of the HKA paper closely enough. The effect was small, and estiamtes of theta and T_hat were unaffected or affected only very little, repsectively.
211 
212  3.) src/PolySNP.cc: Fixed glitch in calculation of ThetaW. When totMuts==false, only the number of bi-allelic SNPs was used in the numerator of ThetaW. Now, the total number of variable sites is used, as intended.
213 
214  4.) src/Recombination.cc (affects calculation of LD statistics): In the calculation of D', the 11 gamete was ancestral/ancestral, rather than derived/derived. This is now fixed to match the documentation.
215 
216  5.) src/CoalescentTreeOperations.cc: in function total_time_on_arg, there was a bug leading to an exception always being thrown. This was due to an inequality being tested as &lt; , when &gt; was what was intended.
217 
218 version 1.6.0 (Oct 15, 2005). In class PolySNP, summary statistics
219 that require outgroup data now return "nan" when the outgroup is not
220 present. Bug fix: when a PolySNP/PolySIM object was constructed from a
221 SimData object that has 0 segregating sites, the value of 0 was returned for
222 number of haplotypes. It now correctly returns 1.
223 
224 version 1.5.9 (Sept 21, 2005) more efficient placing of mutations
225 on simulated genealogies. class SimData can now be used as a base class.
226 Note: binary compatibility broken w/previous versions!
227 
228 version 1.5.8 (July 21, 2005) fixed memory leak introduced in 1.5.7
229 
230 version 1.5.7 (July 19, 2005) more efficient crossover routine for
231 coalescent simulation. Bug fixed in Sequence::SimpleSNP that lead to some
232 columns mistakenly getting dropped on input.
233 
234 version 1.5.6 (Jun 15, 2005). No bugfixes. A function in namespace
235 Sequence::Alignment is no longer recursive. Library source can now be
236 configured to generate cpu-specific optimizations on G4 and G5 powerpc
237 systems running OS X with gcc.
238 
239 version 1.5.5 (Jun 9, 2005). Bugfix in Sequence::PolySNP where
240 preprocessing was not correctly applied. The effect of the bug was that
241 some results would be incorrect when performed in certain orders. This
242 affected no programs that I have written and distribute, and analysis of
243 simulated data (using Sequence::PolySIM) was unaffected. In short, it
244 shouldn't have hurt anybody. The non-const operator[] of
245 Sequence::PolyTable now sets non_const_access to true (this fixes a minor
246 bug, which again will rarely affect anything because most operations in the
247 library are on const PolyTables).
248 
249 
250 
251 version 1.5.4 (May 27, 2005). Major new additions. Old coalescent
252 simulation code is removed. New types and functions allowing simulations
253 with recombination added. changes in support for random number generators
254 implemented (boost-based stu
255 ff removed in favor of the GNU scientific
256 library). This release breaks runtime compatibility.
257 
258 
259 version 1.5.3 (April 21, 2005) bug in PolySNP::ThetaPi() (i.e.
260 calculation of pi for sequence data) where sites in tables where all but 1
261 individual had missing data were not handled correctly
262 
263 version 1.5.2 (April 8, 2005) The bugfix in 1.5.1 was incomplete.
264 Now fixed and tested.
265 
266 version 1.5.1 (April 5, 2005). Bugfix in sliding window code for
267 non-overlapping windows along the DNA sequence. New example code. Cleanup
268 to code base so that .cc files compile without preprocessor macros.
269 
270 version 1.5.0 (Jan 11, 2005). Several minor bugfixes: implicit typenames fixed so that library now compiles under gcc 3.4, a bug in the documentation of the formula for PolySNP::ThetaPi() is now corrected, &lt;ieeefp.h&gt; is now included in the HKA source code for systems that have that header (i.e. cygwin), and the estimate of the sample variance in &lt;Sequence/descriptiveStats.hpp&gt; is now unbiased (i.e uses n-1 rather than n in the denominator). In addition, there is a policy change in the calculation of several summary statistics in the classes Sequence::PolySNP and Sequence::PolySIM. When a summary statistic is undefined, the value nan (not a number) is now returned.
271 
272 version 1.4.9 (Dec 3, 2004). Minor bug in HKA code node fixed.
273 That probably affected nobody, as I don't distribute any programs that
274 depend on it. In addition, several issues with compiling under gcc 3.4 were
275 fixed. These were not related to algorithms, etc., but rather involed
276 non-standard declarations and such.
277 
278 version 1.4.8 (Nov 3, 2004) -- Major bug in counting derived states
279 fixed in Sequence::PolySNP. Analyses using previous versions of the library
280 should be repeated. Analysis of coalescent sim data (using
281 Sequence::PolySIM) was not affected.
282 
283 
284 version 1.4.7 (Oct 7, 2004) Class Sequence::PolySIM now correctly
285 sets both Wall's B and Q to -1 if there are &lt; 2 segregating sites.
286 Previously, only Wall's B was set correctly
287 
288 version 1.4.6 (Oct 6, 2004)
289 Fixed bug in HKA calculations where the poly data in species 1 had 0 seg
290 sites. Sequence::SimpleSNP now does better checking of its input.
291 PolyTableSlice (aka "sliding windows") now stores windows both with and
292 without segregating sites.
293 
294 version 1.4.5 (Aug 22, 2004).
295 Bugs fixed:
296 The output shift operator for template class AlignStream now takes a const reference.
297 The input routines for SimParams now reserve memory, which seems to have
298 fixed a rare crash on OS X systems.
299 
300 New features:
301 Sequence/HKA.hpp provides an interface to calculating the HKA test of
302 Hudson, Kreitman, and Aguade.
303 
304 The class Sequence::PolySIM (Sequence/PolySIM.hpp) is now much more
305 efficient, due to a reorganization of code in the base class
306 Sequence::PolySNP (Sequence/PolySNP.hpp). In some applications,
307 calculations can be up to 1/3 faster. The reorganization of code breaks
308 binary compatibility with previous library versions.
309 
310 Sequence::SimParams (Sequence/SimParams.hpp) now has a member function
311 fromfile(FILE *), mimicing that of Sequence::SimData.
312 
313 version 1.4.4 (Jul 8, 2004) : minor bugfix. All files that use
314 toupper now include &lt;cctype&gt;
315 
316 version 1.4.3 (Jun 4, 2004) :
317  * bugfixes : in PolySNP.cc, NumSingletons and NumExternalMutations could
318 give incorrect results with missing data (in cases were all but 1 individual
319 is missing). This affected the output of Fu &amp; Li statistics.
320  * class SimData now does output exactly like hudson's ms program when
321 there are 0 segregating sites
322  * class SimData can now be read in from C-style FILE *.
323  * made implementations of routines for coalescent simulation a little
324 more robust to uniform random number generators that return 1.0
325  * in Alignment.hpp, an exception specification in a declaration did not
326 match the definition. Fixed.
327 
328 version 1.4.2 (May 14, 2004) -- several bug fixes &amp; new features:
329  *removal of unused variables in several place
330  *efficiency improvement in Sequence::NumDiffs() (in Comparisons.hpp)
331  *updated Sequence::uniform (in BoostRandomNumbers.hpp) so that it
332 compiles and is compatible with std::random_shuffle
333  *new functions added to namespace Alignment and PolyTableFunctions.hpp
334  *added several new headers providing template functions for simple
335 statistics
336  *fixed some bugs in Sequence::SimpleSNP (sample size now printed
337 correctly upon output when there is an outgroup)
338  *fixed bug in Recombination::Disequilibrium (frequency filter now works,
339 case-insensitivity implemented). And, for D and D', the 11 gamete type is
340 in terms of the minor (or derived) allele
341  *fixed use of assert() to deal with compiler warnings
342 
343 version 1.4.1 (Apr 26, 2004) -- Many bug fixes!
344  * PolySNP -- member functions explicitly check for gaps in snps
345  * PolySNP -- NumExternalMutations() was incorrect, leading to bad
346 values for Fu/Li statistics with outgroup. Fixed.
347  * PolySNP/PolySIM -- bugs fixed in calculations of Wall's statistics. Q
348 was simply incorrect, and all statistics were incorrect for polymorphism
349 tables constructed with invariant ingroup data
350  * SimpleSNP -- fixed segfault on input for files containing outgroup data
351  * PolyTableFunctions.hpp added, contains functions to manipulate
352 PolyTable objects in non-const ways
353 
354 version 1.4.0 (Apr 16, 2004) --
355  * PolySNP::FuLiD() is now correct, no longer returning -inf
356  * PolySites::read() is now public
357  * PolyFunctional.hpp is now included
358 
359 
360 version 1.3.9 (Apr 12, 2004) -- version 1.3.8 had a bug where the
361 Translate function printed all the codons it processed to stdout. That's
362 fixed in this version. Also fixed a design flaw where output for PolyTables
363 did not work in const contexts.
364 
365 version 1.3.8 (Apr 08, 2004) : 2 bug fixes: The first was in
366 Sequence::PolyTable::Binary(), and resulted in the binary-format data not
367 being assigned to the object. The second bug was in Sequence::SimData, and
368 resulted in "ms output" being read in incorrectly when using C++-style
369 input. The member function SimData::fromstdin(), which uses C-style input
370 for speed, however, worked just fine. Other new features include :
371  * non-const operator[] added to PolyTable
372  * public memeber assign() added to AlignStream
373  * print() defined for Clustalw
374  * removed Hudson's code (since in practice everyone just pipes
375 the results of ms to another program anyways...)
376  * libsequence should now be case-preserving of input data
377  * PolyTable now has assign() member functions, to mimic std::vector
378  * PolyTableSlice, a template class for sliding window analyses, is
379 completely re-written and easier to use
380  * updates to documentation
381 
382 
383 version 1.3.7 (Feb 11, 2004) : Sequence::SimData has 2 changes. First: you
384 can now say while(cin &gt;&gt; d) {} and it works as expected, where d is an
385 instance of SimData. Two, SimData::fromstdin() now returns the return value
386 from the C function fscanf, which makes checking for end of input more robust.
387 Also, the class Sequence::uniform in &lt;Sequence/BoostRandomNumbers.hpp&gt; had
388 it's declaration changed to be compatible with old and new verions of boost.
389 
390 version 1.3.6 (Feb 02, 2004) : new constructor for PolyTable,
391 allowing construction from a range of PolyTable::const_site_iterator.
392 New classes in &lt;Sequence/shortestPath.hpp&gt; to aid in dealing w/differences
393 between codons.
394 
395 version 1.3.5 (Jan 19, 2004) -- Bugfix: PolySNP::Minrec() was
396 returning a value for the Rmin statistic that was incorrect for a small
397 number of data sets. This has been fixed. Other changes : random number
398 system added, based on boost classes. Autoconf macros now work properly at
399 creating #define's for needed headers.
400 
401 version 1.3.4 (Jan 12, 2004) -- Binary compatibility broken w/previous version.
402 PolyTable column iterators added. New function PolyTable::RemoveAmbiguous
403 added. Ka/Ks code cleaned up. See ChangeLog and manual for details.
404 Sequence::Seq now inherits from std::pair&lt;std::string,std::string&gt;, and
405 various template functions were updated to accomodate that. Template
406 memebers added to Sequence::PolyTable.
407 Requires boost (http://www.boost.org) to compile.
408 
409 version 1.3.3 (Nov 1, 2003) -- Exception specifications added.
410 Development headers now included in subdirectory Sequence (so you now need
411 to say things like (#include &lt;Sequence/Fasta.hpp&gt;).
412 
413 version 1.3.2 (August 7, 2003) -- Yesterday's release forgot to
414 include the iterator types for Sequence::AlignStream&lt;T&gt;. Here they are.
415 The soname of the shared library is unchanged, since no one downloaded 1.3.1
416 yet :).
417 
418 version 1.3.1 (August 6, 2003) -- updated to autoconf 2.5. added
419 new iterator type to Sequence::PolyTable. soname changed to 12:0:0.
420 Sequence::FST updated.
421 
422 version 1.3.0 (July 9, 2003) -- Bugfix for
423 Sequence::Comparisons::NumDiffs(). Function now skips missing data as it
424 should. The bug was due to a rewrite of the fxn several versions ago.
425 
426 version 1.2.9 (Jun 21, 2003) -- Bugfix for PolySNP::ThetaW(). Caused
427 the denominator to be incorrectly calculated. It only occured when running
428 my 'compute' program (from analysis 0.4.8) on several files at once. May
429 have been gcc-3.3 specific, but now it works more generally.
430 
431 version 1.2.8 (Jun 1, 2003) -- no major changes, so no particular
432 need to update to this version. Restores compatibility with gcc 2.95
433 
434 version 1.2.7 (Jun 1, 2003) -- added label(unsigned) to
435 Sequence::Hudson2001. Also fixed a preprocessor bug that prevented
436 SeqUtilitites.hpp from being included. No programs were affected by that
437 bug. Also cleaned up example code.
438 
439 version 1.2.6 (May 21, 2003) -- Two things. One, a bug in PolySNP::ThetaH is fixed which
440 resulted in the value of the statistic being about 6 times too large.
441 (Calculation of ThetaH for simulated was fine). Second, several substantial
442 speed improvements were made to class PolySNP, which speed up the analysis
443 of sequence data. First, calculation of Rmin is no longer recursive, which
444 led to a 10-fold speed up on my machine. Second, a preprocessing of the
445 frequency spectrum now allows summary stastics to be calculated in linear
446 time (at the cost of a bit more memory).
447 
448 version 1.2.5 -- fixed missing #include&lt;cassert&gt; in Comeron95.cc
449 
450 version 1.2.4 -- Several bugfixes. PolySNP::WallStats went beyond
451 array bounds for the number of segsites &lt; 2. This is now fixed, and -1 is
452 returned for the statistics, indicating not applicable. Also, several
453 missing #include directives were added to source files, which should make
454 compilers more happy (don't know why gcc 3.3 wasn't complaining, but 2.95
455 did complain).
456 
457 version 1.2.3 -- Bugfix release for OS X systems.
458 Sequence::PolyTable::Assign(double *, unsigned, char **, unsigned) ran into
459 an issue where the c++ compiler on OS X does not seem to generate
460 standard-compliant code for vector&lt;T&gt;::assign(). A workaround was
461 implemented.
462 
463 
464 version 1.2.2 -- Template specializations of routines in namespace
465 Sequence::Alignment are now provided for std::string. A bug causing a
466 segfault was fixed in Sequence::Alignment::RemoveGaps&lt;T&gt;()
467 
468 version 1.2.1 -- loads of changes. Sequence::Poly is removed,
469 replaced by Sequence::PolySNP and Sequence::PolySIM. Sequence::FST is
470 added. see ChangeLog for details
471 
472 version 1.2.0 -- lots of changes, mostly internal to the code. See ChangeLog.
473 
474 version 1.1.9 -- lots of changes. Iterators added to Seq and
475 PolyTable. See ChangeLog for details.
476 
477 version 1.1.8 -- Minimum # of recombination event and disequilibrium
478 coefficients now work with sequence data.
479 
480 version 1.1.7 -- many changes, see ChangeLog for Details
481 
482 version 1.1.6 -- fixed bug in input routine for Hudson2001,
483 resulting in occasional segfaults
484 
485 version 1.1.5 -- fixed bugs in
486 PolyTable::RemoveMultiHits(),ApplyFreqFilter(), and RemoveMissing() that led
487 to segfaults. Also, members of Poly that returned int now return unsigned int
488 
489 version 1.1.4 -- general code cleanup. Also, removed a
490 simplification in the calculation of Sequence::Poly::ThetaW(SimData *)
491 
492 version 1.1.3 -- added Sequence::MS_Interface::empty()
493 
494 version 1.1.2 -- fixed simple bug in output of Sequence::SimParams
495 
496 version 1.1.1 -- lots of new stuff added to PolyTable. OS X
497 compatibility with g++ 3.1 is now working!
498 
499 version 1.0.9 -- fixed bug in Sequence::PolySites::print() where
500 position of first seg site was off by 1
501 
502 version 1.0.8 -- D' added back to
503 Sequence::Recombination::Disequilibrium()
504 
505 version 1.0.7 -- removed D' statistic from
506 Sequence::Recombination::Disequilibrium until a correct version of the code
507 can be written (I found an error in the calculation and I don't have time to
508 fix it right now)
509 
510 version 1.0.6 -- generalized Poly::ThetaW(PolyData) to handle
511 missing data. fixed several documentation bugs.
512 
513 version 1.0.5 -- fixed a problem in SimData.cc that prevented
514 compiling on Sun systems (did not affect output, just compiling)
515 
516 version: 1.0.4 -- fixed bug in processing simulation output when
517 segstites = 0. Also added a new method to Sequence::SimData that really
518 speeds up input, see manual for details
519 
520 version: 1.0.3 -- stable, things work well :)
521 NOTE: a bug has been found in Sequence::SimData that causes a segfault when
522 there are 0 segregating sites in the output. Fix coming soon.
523 
524 
525