-
Notifications
You must be signed in to change notification settings - Fork 30
/
CHANGELOG
402 lines (378 loc) · 25.2 KB
/
CHANGELOG
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
v. 3.7.0
- Add two new options to manage the format of the numerical output of some observables [6d03f40]
- Deprecate many old plugins in the contrib/rovigatti folder [95bd2e0]
- Add compiler flags to support Ampere GPUs [21d7e48]
- Update generate-sa.py to support generation of dsDNA with sticky ends and add an example to show its functionalities [08dcc2c]
- Add an attraction plane that constrains particles to stay on one side of it while attracting them with a constant force (`type = attraction_plane`). Documentation is also included [f0e0c9d]
- Port the ANNaMo interaction to CUDA [3568256]
- Make it possible to print the kinetic and total energies with any precision [f42d61d]
- Make the NA interaction support custom bases (fix #129) [306a276]
- Make it possible to simulate arbitrary LJ binary mixtures [b191c3d]
- DPS: Add an optional Yukawa repulsion to the model [dbdc726]
- DPS: Add an input file key to disable three body interaction [2d62ba7]
- DPS: Fix a bug whereby species with 0 particles would not be handled correctly [2d33bcc]
- Fix a bug whereby the CUDA code would crash for particular initial configurations made by nucleotides aligned along z (#120) [2b69edf]
- Fix an example (#123) [f4853f9]
- Fix a bug whereby the code would hang if bases_file (used by HBEnergy) was not readable [a20df96]
- Fix a bug that made VMMC simulate the wrong model when used with the DNA2 interaction [6096fdb]
- Improve the docs (see *e.g.* #116)
oxpy:
- Fix #97 (FFS Simulation Type Fails to Log Correctly When Running Consecutive Processes) [2b93f63]
- Add a workaround documentation to a known oxpy bug [960a8c5]
- Fix #138: make oxpy's get_bool() to handle non-lowercase booleans [208049d]
- Improve the docs
oat:
- Duplex angle plotter now works with ANY nucleotide id in the duplex [eb17a42]
- Fixed bug where output_bonds would fail instead of exiting normally when no plot was requested [c287226]
- Fixed bug where duplexes were detected as longer than they should be if they became unpaired [e1580e6]
- Fixed bug where inboxing would always center the structure, center=False works now [b23bdb7]
- Fixed parser and data type errors in oxDNA_PDB [d951742]
- Fixed bug where strands would sometimes be backwards in converted PDBs and fixed bug where the box center was incorrect during inboxing [2f179ad]
- In oxview.py, now from_path supports multiple systems loading [0050492]
- Updated bond_analysis to be able to drop data files [27d2fbb]
- Added __len__ methods to System and Strand [ac5e632]
- Changed read_force_file to interpret particle IDs as ints rather than floats [e7f6818]
- Make oxDNA_PDB callable from scripting interface [a20207b]
- Improved consistency in oat cli calls [3d628eb]
- Updated oat superimpose to allow separate index files for each configuration [8a6ed9d]
- Removal of now removed 'center' keywords from align function call [1cb3b40]
- Fix error in input file parsing (#119) [bca41ab]
- Created forces/pairs to dot-bracket converters and a skeleton script for trajectory analysis [cce8009]
- Fixed bugs in pdb output file naming and improved RNA detection [e753007]
- Fix parsing error for strand circularity in oat's new topology reader [a168f8d]
- Faster linear version of decimate script [adbba3c]
- Added PDB -> oxDNA converter to oat [e0084bc]
v. 3.6.1 [6854eec]
- Fix some bugs and docs errors due to the DRH -> NA change (see #81) [79728d3 and 7cf4b94]
- Add and document an option to control the DH cut-off (see #83) [95a9f0d]
- Make the MPI VMMC backend runnable once again, after it had been broken for years (see #85) [8becd5f]
- Fix how the trap, twist and string forces behave on CUDA (see #71) [e92695c]
- Fix the oat test's suite (see #89) [ffd1dd9]
- Add an observable that can be used to print the total external force acting on particles [7f0eff6]
- Fix a bug whereby the DPS interaction would segfault of dying gracefully when too many patches were used [b38ae1c]
oxpy:
- Add a method to Python's InputFile and update some outdated info [bd7c9e6]
oat:
- Added RMSD calculation to superimpose [99320e0]
- Added output file naming option to superimpose [3d316b6]
- Clarified argparse strings for distance and subset [eae41a9]
- Fixed missing newline bug in write_conf [0e5c28d]
- Fixed bad error in get_confs [171f2ca]
- Overhaul of clustering to have significantly more options and cleaner output [80920ab]
v. 3.6.0 [aaebaeb]
- Add 6 more tests to the `run` level; these tests use the new topology and check that the DNA, RNA and NA interactions compute the right energies for a short nicked duplex
- Add support for a "new" topology format where nucleotides are listed in the 5' -> 3' order, which is the standard in the community
- Add the NA interaction, which can be used to simulate hybrid DNA/RNA systems (by @eryykr, see #68)
- Add a old<->new topology converter to the `utils` folder
- Add an option `stiff_rate` to the `mutual_trap` force
- Remove a few warnings when compiling with CUDA
- Fix the computation of the stress tensor on the GPU
oxpy:
- Update pybind to make oxpy compatible with newer Python versions
- Deprecate support for Python versions < 3.8
- Add (undocumented) support for `-Dpython=On` and `-DPYTHON=On`
oat:
- Add support for the new topology format
- Fixed an error in the oxDNA_PDB CLI parser
- Added error handling for truncated trajectories in the oat parser (see #67)
v. 3.5.2 [50479f2]
oat:
- remove usage of `|` to specify type annotations for unions to make oat compatible with Python 3.9
- improve the portability of the `setup.py` script to fix installation issues on some systems
v. 3.5.1 [c549859]
- Add the stress tensor calculation on GPUs for DNA
- Improve the performance and memory consumption of the DNA and RNA interactions
- Improve the numerical stability of the CUDA RNA and DNA codes
- Make the StressAutocorrelation observable output also the bulk and longitudinal ACFs
- Remove some unnecessary checks on the required keys from the MC backend
- Add a pivot move to the MC2 backend
- Add the possibility of disabling JSON support at compile time (-DJSON_ENABLED=Off)
- Fix a bug whereby a DNA force was sometimes incorrectly evaluated on GPU
- Fix two minor bugs in the CUDARNA interaction [0112a3e]
- Fix a bug whereby the code would sometimes segfault due to plugins [b6ed721]
oxpy:
- Make the metad interface set more default input options
oat:
- Completely rewrote oxDNA/ANM -> PDB converter
- Now works with RNA as well as DNA and proteins
- No longer depends on Biopython (removed from oat dependencies).
- More control over output files.
- All oat utilities that don't involve oxpy have compete and correct type annotations
- Many doctoring updates.
- Better error messages when something that isn't a configuration file is passed to the configuration parser.
- Update the dot-bracket parser to accept pseudoknotted structures
- bugfixes:
- Decimal in particle IDs no longer break forces2pairs.
- Extra spaces in the header of the topology parser no longer crash it.
v. 3.5.0 [a16d07b]
- Strip down the exprtk library to speed up compilation
- Fix a bug whereby setting lastconf_file to /dev/null would segfault
- Make the code compilable on older gcc versions (>= 5.4)
- Update some examples (fix the oxDNA path and remove references to the old UTILS folder)
- Remove some outdated examples
- Update the documentation
oxpy:
- Remove a redundant library from oxpy's linking stage
- Clean up include paths for pybind11, python_defs
oat:
- Functionalized db_to_force and forces2pairs
- Cleanup typing in forces2pairs
- Fixed bug where oxpy calls always said t=0
- Fixed oxDNA1 incompatibility in output_bonds
- Added trajectory visualization and generally cleaned up bond_analysis
- Added desired bond output for the summary in bond_analysis
- RyeReader now handles confs with velocities removed
- Updated oxDNA_PDB to use RyeReader
- Removed deprecated readers.py
v. 3.4.2 [6794178]
- Change libcommon.so to liboxdna_common.so, allowing the file to be reasonably placed in a system-wide / non-specific library directory
- Add methods to sync data from and to CUDA interactions (see 7e437f63a8c551333b677d56edc20121551741da)
- Fix a bug whereby confs without momenta would be printed with trailing spaces
- Fix a bug whereby the code wouldn't sometimes compile with CUDA 10.x
- Update a CUDA error message
- Fix some typos in the documentation
oxpy:
- Fix a bug whereby oxpy couldn't be compiled in debug mode (-DDebug=True)
oat:
- Fix external_force_utils import in exclude_force.py
v. 3.4.1 [238196f]
- Fix a compilation bug of a contrib observable
v. 3.4 [1c89963]
- Observables can now update their data structures while the sim runs
- Add a new observable to compute the stress autocorrelation
- Normalise the behaviour of log-lin trajectories
- Improve error messages on CUDA
- Remove a deprecated function by reworking how textures are accessed
- Fix a bug whereby the kinetic energy was not correctly printed to configuration files (issue #22)
- Fix a bug whereby RNA simulations with CUDA11 would crash
- Fix a bug in the CUDA barostat that sometimes made the code crash
- Fix a bug whereby "use_average_seq" would be always interpreted as an int rather than a boolean value (issue #27)
- Fix a bug whereby the code would not compile on Apple systems (issue #30)
oxpy:
- Make it possible to access the last_conf observable from python
- Add a Jupyter Notebook example
- Make the code deallocate ConfigInfo at the end of each simulation
- Fix a bug whereby oxpy simulations on CUDA couldn't be run consequently
- Fix a bug whereby the ConfigInfo object wouldn't be accessible from Python through the analysis backend
oat:
- Clarify python version requirements
- Change svd_align to not always align to (0, 0, 0)
- Add oxview visual bindings
- Update get_confs to handle times larger than the max value of int
- Update pca to have CLI control over how many oxView json files get printed (see issue #24)
- Add cli documentation to oat
- Fix a typo in db_to_force parser
- Several documentation improvements
v. 3.3 [7cb66cf]
- Add variables to the input file
- Add support for mathematical expressions to the input file
- Add tests for the new input features
- Greatly improve the performance of the configuration parser. The speed increase is very noticeable when using DNAnalysis on large trajectories.
- Add a Python-powered metadynamics interface (examples/METADYNAMICS)
- Add Python bindings to the external forces
- Add support for observable and external force files written in JSON
- Add tests for oxpy
- Complete rewrite of the docs files. The documentation is now much more complete and handled by sphinx
- Remove the old (and outdated) UTILS folder
- Add oxDNA_analysis_tools to the repo (in the analysis folder)
v. 3.2.1 [ee2553c]
- Fix a bug by avoiding free'ing uninitialised CUDA arrays
- Substitute a call to the deprecated cudaThreadSetCacheConfig function
- Fix compilation with double precision on CUDA
- Fix compilation of plugins on Mac OS X and remove warnings
- Port the COMForce force to CUDA
- Reduce the host memory consumption when using forces on CUDA
- Add an overloaded operator to print LR_matrix instances
- Make a Python3-compatible version of the standalone generator
v. 3.2.0 [399f3e4]
- Add the list of papers to cite to the README and to the oxDNA output
- Add a method to remove outputs from the simulation
- Refactor IBaseInteraction to remove the need of the Curiously Recurring Template Pattern
- Move methods from IBaseInteraction to Mesh
- Remove warnings found by clang
- Compile with the -march=native option by default (use -DNATIVE_COMPILATION=Off to disable it)
- Add a new object (FlattenedConfigInfo) to access the simulation details as plain arrays, which get turned into numpy arrays on Python
- Add a Molecule class to the python bindings
- Port the test suite to python3
- Create bindings for the AnalysisBackend class
- Make it possible to install a GPU-powered oxpy with pip
- Bugfixing
- Fix the way the DNA and RNA sites where computed on Python
v. 3.1.2 [83e7823]
- Add a rudimentary subscriber/notifier mechanism and use it to implement a way of handling temperature changes
- Make the code compilable with the -DMPI=ON option
- Remove calls to tmpfile() from the codebase
- Use setuptools and setuptools-scm to install the python bindings
- Make oxpy installable with pip
- Add an example implementing replica-exchange MD simulations with oxpy
- Make it possible to define custom observables on Python
- Update github's issue templates
- Add a github workflow to update the online python documentation
- Bugfixing:
- Fix a bug whereby a failing list update on CUDA would not throw an exception as it should
- Fix compilation of oxpy and with CUDA
v. 3.1.1 [c83eda2]
- Make oxDNA compile with older CMake versions
- Add github CI scripts
- Remove a few useless members from SimBackend
- Make the code compatible with CUDA 11
- Make it possible to print non-averaged density profiles
- Add a method to print a configuration at will from Python (OxpyManager::print_configuration)
- Add a method to get the system's total energy (OxpyManager::system_energy)
- Bugfixing:
- Fix a bug whereby the Hilbert sorting done on GPU would lead to wrong results due to a wrong updating of the particle data structures
- Fix a bug a CPU simulation run with a CUDA-enabled oxDNA would take up a GPU
v. 3.1.0 [0897aa1]
- Implement a molecular barostat (i.e. a barostat that acts on the centres of mass of molecules)
- Add a simple in-backend implementation of another Langevin thermostat
- Add data structures to handle "molecules"
- LR_vector* changed in bool in IBaseInteraction's methods
- Add an oxpy example
- Improve oxpy's documentation
- Make it possible to change the input file options from Python
- Make plugins loadable also from oxpy
- Create a `utils` Python module
- Add python bindings to obtain the positions of nucleotide sites
- Add Python bindings for BaseObservable
- Bugfixing:
- Make it possible to compile the contrib folders with old CMake versions
- Fix a small bug in VolumeMove and CUDA barostat
v. 3.0.0-alpha [5634f27]
- Python bindings are now available. It is now possible to run simulations from Python, although not every option is available and most behaviour is still controlled by the input file
- Substitute the `number` and `number4` templated stuff with `using` statements (which are equivalent to `typedef`s) chosen at compile time:
* on the CPU side the default precision is `double`;
* on the CUDA side `number` and `number4` have become `c_number` and `c_number4` and default to `float` and `float4`;
* on CUDA the mixed precision can be used only if `-DCUDA_DOUBLE=OFF`, which is the default behaviour.
- Plugins now require a single entry point, which should be called `make_MyPlugin`, where `MyPlugin` is the name of the plugin class (and file).
- The codebase underwent a substantial cleaning up; compilation time went down and performance went up by a few percent.
v. 2.4 (revision 6963, 27th June 2019)
- Added a r_ext option to RepulsiveSphere which acts as an optional outer cut-off
- Added a parallel tempering backend for Monte Carlo simulations
- Now external forces are accounted for during configuration generation through their associated Boltzmann factor
- RepulsiveSphere now uses the _add_self_to_particles method that makes it possible to write expressiones like "particle = 0-999" instead of having 1000 times near-copies of the same stanza
- GenericCentralForce now supports an E_shift option to shift the non-zero portion of the energy. Useful during configuration generation
- Added the option to use plugin manager to dynamically load custom MCMove class for MC2 Backend from contrib
- Added a "rate" option to mutual traps in order to make their strength time-dependent
- Added the "compute_energy_before" option to MC2 Moves not to compute the energy before the move, useful in case of purely repulsive hard potentials. Defaults to true
- Made oxDNA compatible with CUDA 9.1 and remove a few subsequent warnings
- Made the G and DBG cmake options work also with nvcc
- Added a new option to cmake (CUDA_COMMON_ARCH) that is set to ON by default. If ON, this optional will make oxDNA be compiled for a list of architectures that depend on the installed CUDA version. This might result in a very slow compilation. Use -DCUDA_COMMON_ARCH=OFF to have cmake detect the installed GPU and compile only for its arch
Bug fixes:
- Mutual traps now work in the same way on the CPU and GPU backends
- General bug fixes to the Writhe observable, which now works as intended also when plectonemes are close to the end of the chain
- Fixed a bug whereby the code would segfault when PairEnergy was given incorrect particle indexes. Now the code exits with a meaningful message instead
- Fixed the umpteenth fix_diffusion bug which unphysically made the system's centre of mass move towards the -1,-1,-1 direction
- Fixed a bug with the cadnano interface by making sure that new_nodes.begin and new_nodes.end are the same length at the end of the "insert_loop_skip" method
- Updated base.py to avoid ValueError exceptions when variables that may be numpy arrays are checked against None's and True's
v 2.3.2
Bugfixing release:
- Fixed a bug in SimManager.cpp that would make the ambiguous case of equilibration_steps>0
and restart_step_counter=false misbehave
- Removed the inclusion of xlocale.h from defs.h
v 2.3.1
Bugfixing release:
- Fixed a bug that would prevent compilation on Apple systems
- Fixed a bug introduced in the previous version that broke the mindistance order parameter.
- Fixed a bug in the cadnano_interface.py that prevented the processing of sequence files with
\r\n newline sequences.
- Added a function to SantaLucia.py that computes the melting temperature of a duplex from given
values of DeltaH, DeltaS, and duplex concentration.
- Minor clean-up to SantaLucia.py and cullTraj.py.
v 2.3 (revision 6874, February 2018)
This new version contains a lot of under-the-hood improvements and a few more features. As
far as we can tell, the code is fully backward compatible (input-file-wise).
Here is a condensed list of changes:
- It is now possible to write interactions that feature three-body contributions. The only
perative difference is that each particle now stores a vector of ParticlePair objects which
contain all particle pairs that are involved in a bonded interaction with that particle. This
vector should be initialised by the Interaction object. Look how it is done in the DNA or RNA
interactions.
- oxDNA now supports non-cubic boxes. Both CPU and CUDA backends have this.
- The code now has a check that is not producing too much data. The default limit is set to
1 MB/s (after a 30-second grace period). This limit can be modified from the input file with the
keyword
max_io = <float> [units of MB/s]
and can be raised to any number should a user need to do so.
- There is a new Timings class for more intuitive and usable timings.
- oxDNA can now simulate the TEP model (see "Models for twistable elastic polymers in Brownian
dynamics, and their implementation for LAMMPS.", http://www.ncbi.nlm.nih.gov/pubmed/24712817)
- Added a "reset_initial_com_momentum" option that, if set to true, will set the momentum of
the centre of mass of the initial configuration to 0. A similar key, "reset_com_momentum", will
do the same every time the diffusion is fixed.
- Added DOCS/HOWTO_write_interactions.txt, a short guide on how to write new interactions.
- Added the Bussi-Donadio-Parrinello thermostat (from Bussi et al, J. Chem. Phys. 2007).
- Checkpoints have been implemented, although not thoroughly tested, so that the code can be
restarted and follow the same trajectory. See the Doxygen documentation for SimBackend on how to
use them. This cannot work on CUDA due to the operation order not being predictable.
- Implemented a new test suite. It is lighter and easier to use. Use "make test_run" and "make test_quick"
to check whether the code runs and gives sensible results in simple cases, respectively.
- Added the NPT ensemble to Monte Carlo simulations.
- Added a new Monte Carlo backend that supports custom moves (src/Backends/MCMoves). It is
flexible and modular. It supports, rotations, translations, site-rotations, volume and shape
moves and VMMC.
- Added a segfault handler that prints out the intercept the SIGSEGV signal and prints out the
stacktrace of the program before crashing.
- Added mismatch_repulsion (0 by default) option to RNA2 interaction. When set to 1 in input file,
it introduces repulsion potential between non-complementary bases.
- Added a new type of wall (LJ_wall). In contrast with repulsion_plane, LJ_wall acts on both sides
and its properties can be finely tuned (the diameter, stiffness and steepness can all be chosen,
and the user can choose whether the wall should feature an attractive part or not).
- confGenerator can now be used to generate DNA and RNA initial configurations. These configurations
are generated randomly and hence mostly composed of single strands in coil configurations.
- Added some new relaxation strategies. See the NEW_RELAX_PROCEDURE/README file for details.
- Added a simple (MC-like) barostat to the MD backends. The barostat_probability key makes it
possible to tune the coupling of the MC-like barostat. A value of 1 means that the barostat will be
applied every time step.
- oxDNA can now be compiled with c++11-complaint compilers by setting the CMake CXX11 flag to 1
(-DCXX11=1). This might result in small speed-ups.
- Added the cells_auto_optimisation key (defaults to true). If true, the number of cells (both on
CPU and GPU) will not exceed the number of particles, thus avoiding running out of memory when using
extremely large boxes. However, doing so might result in a performance hit, which is why the new key
was added. Experienced users might want to turn it off to optimise simulations.
- Lees-Edwards boundary conditions to simulate systems under shear are now enabled for MD simulations
(on CPU only). Simulating with shear requires the two mandatory keys
lees_edwards = true
lees_edwards_shear_rate = <float>
Only Bussi, Langevin and DPD thermostats should be used to control the temperature of simulations
under shear.
- UTILS/base.py and its main accompanying scripts are now compatible with numpy > 1.10
v 2.2.2 (June 2015)
Fixed the hairpin example (see https://sourceforge.net/p/oxdna/discussion/general/thread/92fbef91/?limit=25#3c9b)
v 2.2.1 (May 2015)
This release fixes a serious bug that could affect the calculation of the number of cells along
the box. In some cases this bug could affect the simulation outcome, as not all interacting
pairs would be seen as such. All CPU backends (MD, MC, VMMC) were affected by this bug.
v 2.2 (April 2015)
This release includes the finalised code implementing the oxDNA2 model. In addition there are
numerous bug fixes, more helpful error messages and other messages to the user, fixes to the
examples and various new features.
- Added support for the oxDNA2 model. See the oxDNA wiki for more information. Use it by setting
interaction_type = DNA2 in the input file. The salt concentration must also be specified.
- Added more observables.
- Added more external forces.
- Added GPU support for the salt-dependent RNA model.
- Updated the syntax for the CPU order parameter parser (the old syntax still works). Non-
consecutive numbers and letters can now be used to label particle pairs, and pairs can be added
as lists. See commit message for revision 6431.
- The Langevin thermostat may now be used on GPUs.
- Reworked the way the oxDNA code handles plugins. It is now possible to use custom names for
the functions that act as entry points for the shared libraries. See the documentation in the
PluginManager class.
- Various improvements to the python utility scripts.
v 2.1 (June 2014)
This is mostly a bug-fixing release. We have fixed a few issues with different compilers
and platforms and a few severe bugs that could result in segmentation faults.
- Added support for interaction plugins. Now you can write separate classes to manage custom
interactions and load them in oxDNA as plugins. The mechanism is very similar to the one that
manages observable plugins. See PluginManagement/PluginManager.h for additional documentation.
- Added a new, improved and safer input parser. User-wise, the only difference with respect to
the old parser is that it is now possible to put more than a single key-value pair on the same
line by separating them with semicolons (e.g. key1 = value1; key2 = value2)
- Added salt-dependent DNA and RNA interactions. Note that these are still under development
and then we advise not to use them as they are still subject to changes and possibly unstable.
- A SRD (stochastic rotational dynamics) thermostat has been added. It works on both CPUs and
GPUs. It seems working but we did not have thoroughly tested it. Use it at your own risk.
- Added many observables (in the Observables folder).
- Plenty of bugfixes, see commit messages for more information.
v 2.0 (March 2014)
First release on sourceforge.