12 Commits
v1.1.3 ... main

Author SHA1 Message Date
dependabot[bot]
a366d89713 Bump rayon from 1.8.0 to 1.8.1 (#13)
Bumps [rayon](https://github.com/rayon-rs/rayon) from 1.8.0 to 1.8.1.
- [Changelog](https://github.com/rayon-rs/rayon/blob/master/RELEASES.md)
- [Commits](https://github.com/rayon-rs/rayon/compare/rayon-core-v1.8.0...rayon-core-v1.8.1)

---
updated-dependencies:
- dependency-name: rayon
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2024-02-17 20:31:17 +01:00
Daniel Bauer
545c0ecbd3 bump version (#7) 2023-10-27 08:02:27 +02:00
dependabot[bot]
23548dadfb Bump rand from 0.7.3 to 0.8.5 (#8) 2023-10-27 06:00:48 +00:00
dependabot[bot]
6f0a00ace9 Bump clap from 2.34.0 to 3.2.25 (#9)
Bumps [clap](https://github.com/clap-rs/clap) from 2.34.0 to 3.2.25.
- [Release notes](https://github.com/clap-rs/clap/releases)
- [Changelog](https://github.com/clap-rs/clap/blob/v3.2.25/CHANGELOG.md)
- [Commits](https://github.com/clap-rs/clap/compare/v2.34.0...v3.2.25)

---
updated-dependencies:
- dependency-name: clap
  dependency-type: direct:production
  update-type: version-update:semver-major
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2023-10-27 07:43:40 +02:00
Daniel Bauer
0c4e015aa5 dependabot (#6) 2023-10-27 07:39:46 +02:00
daniel
9392a3365c remove unneccessary format in assert 2023-10-27 07:37:06 +02:00
daniel
3532d474ed update dependencies 2023-10-27 07:29:39 +02:00
Daniel Bauer
f8ca61d5d0 git actions (#5)
* add build action

* publish job
2023-10-27 07:25:38 +02:00
Daniel Bauer
b143f7a65a unignore slow tests 2021-07-22 17:36:04 +02:00
Daniel Bauer
6f35f15e46 faster tests (2) 2021-07-22 16:34:43 +02:00
Daniel Bauer
b6881a6db1 code formatting 2021-07-22 15:48:14 +02:00
Daniel Bauer
ec7024a285 Squashed commit of the following:
commit 07e5a0a1a5cef7b99ac8602fa39226ddce175b67
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 12:48:35 2021 +0200

    version up

commit 4c58f5a42c091a480473809f8fdb5c4f361b8883
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 12:22:01 2021 +0200

    test convdt needs start/end

commit fad1c0c4fca3cffe91db32c7e4d91139a6513a9f
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 12:14:21 2021 +0200

    unit test for empty timeseries

commit cdf520aad6e70ea22d96363d28c1110d3d5bc3e0
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 11:51:12 2021 +0200

    refractored convdt slices; fix issue with incomplete convdt slices

commit 5b33d9cb61b59ead4a22f03ae3981175feb25770
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 10:37:13 2021 +0200

    test dataset for convdt

commit 023bba0a0d46929b3ea4c2ede075b851deb7b779
Author: Daniel Bauer <bauer@cbs.tu-darmstadt.de>
Date:   Thu Jul 22 10:36:45 2021 +0200

    force --start and --end with --convdt
2021-07-22 12:52:50 +02:00
24 changed files with 5242 additions and 691 deletions

7
.github/dependabot.yml vendored Normal file
View File

@@ -0,0 +1,7 @@
version: 2
updates:
- package-ecosystem: "cargo"
directory: "/"
schedule:
interval: "monthly"
rebase-strategy: "disabled"

45
.github/workflows/build.yml vendored Normal file
View File

@@ -0,0 +1,45 @@
name: Cargo Build and Test
on:
push:
branches: [ "main" ]
pull_request:
concurrency:
group: ${{ github.head_ref || github.run_id }}
cancel-in-progress: true
env:
CARGO_TERM_COLOR: always
jobs:
build_and_test:
name: WHAM Test
runs-on: ubuntu-latest
strategy:
matrix:
toolchain:
- stable
- beta
- nightly
steps:
- uses: actions/checkout@v3
- run: rustup update ${{ matrix.toolchain }} && rustup default ${{ matrix.toolchain }}
- run: cargo build --verbose
- run: cargo test --verbose
publish:
name: WHAM Publish
runs-on: ubuntu-latest
needs: [build_and_test]
steps:
- uses: actions/checkout@v3
- uses: actions-rs/toolchain@v1
with:
toolchain: stable
override: true
- uses: katyo/publish-crates@v2
with:
registry-token: ${{ secrets.CARGO_REGISTRY_TOKEN }}
ignore-unpublished-changes: true
dry-run: ${{ github.event_name != 'push' }}

272
Cargo.lock generated
View File

@@ -1,28 +1,21 @@
# This file is automatically @generated by Cargo. # This file is automatically @generated by Cargo.
# It is not intended for manual editing. # It is not intended for manual editing.
version = 3
[[package]] [[package]]
name = "addr2line" name = "addr2line"
version = "0.13.0" version = "0.21.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1b6a2d3371669ab3ca9797670853d61402b03d0b4b9ebf33d677dfa720203072" checksum = "8a30b2e23b9e17a9f90641c7ab1549cd9b44f296d3ccbf309d2863cfe398a0cb"
dependencies = [ dependencies = [
"gimli", "gimli",
] ]
[[package]] [[package]]
name = "adler" name = "adler"
version = "0.2.3" version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee2a4ec343196209d6594e19543ae87a39f96d5534d7174822a3ad825dd6ed7e" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ansi_term"
version = "0.11.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ee49baf6cb617b853aa8d93bf420db2383fab46d314482ca2803b40d5fde979b"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "assert_approx_eq" name = "assert_approx_eq"
@@ -43,18 +36,19 @@ dependencies = [
[[package]] [[package]]
name = "autocfg" name = "autocfg"
version = "1.0.1" version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cdb031dd78e28731d87d56cc8ffef4a8f36ca26c38fe2de700543e627f8a464a" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa"
[[package]] [[package]]
name = "backtrace" name = "backtrace"
version = "0.3.53" version = "0.3.69"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "707b586e0e2f247cbde68cdd2c3ce69ea7b7be43e1c5b426e37c9319c4b9838e" checksum = "2089b7e3f35b9dd2d0ed921ead4f6d318c27680d4a5bd167b3ee120edb105837"
dependencies = [ dependencies = [
"addr2line", "addr2line",
"cfg-if 1.0.0", "cc",
"cfg-if",
"libc", "libc",
"miniz_oxide", "miniz_oxide",
"object", "object",
@@ -63,15 +57,18 @@ dependencies = [
[[package]] [[package]]
name = "bitflags" name = "bitflags"
version = "1.2.1" version = "1.3.2"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cf1de2fe8c75bc145a2f577add951f8134889b4795d47466a54a5c846d691693" checksum = "bef38d45163c2f1dde094a7dfd33ccf595c92905c8f8f4fdc18d06fb1037718a"
[[package]] [[package]]
name = "cfg-if" name = "cc"
version = "0.1.10" version = "1.0.83"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4785bdd1c96b2a846b2bd7cc02e86b6b3dbf14e7e53446c4f54c92a361040822" checksum = "f1174fb0b6ec23863f8b971027804a42614e347eafb0a95bf0b12cdae21fc4d0"
dependencies = [
"libc",
]
[[package]] [[package]]
name = "cfg-if" name = "cfg-if"
@@ -81,78 +78,67 @@ checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]] [[package]]
name = "clap" name = "clap"
version = "2.33.3" version = "3.2.25"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37e58ac78573c40708d45522f0d80fa2f01cc4f9b4e2bf749807255454312002" checksum = "4ea181bf566f71cb9a5d17a59e1871af638180a18fb0035c92ae62b705207123"
dependencies = [ dependencies = [
"ansi_term",
"atty", "atty",
"bitflags", "bitflags",
"clap_lex",
"indexmap",
"strsim", "strsim",
"termcolor",
"textwrap", "textwrap",
"unicode-width",
"vec_map",
"yaml-rust", "yaml-rust",
] ]
[[package]] [[package]]
name = "const_fn" name = "clap_lex"
version = "0.4.2" version = "0.2.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ce90df4c658c62f12d78f7508cf92f9173e5184a539c10bfe54a3107b3ffd0f2" checksum = "2850f2f5a82cbf437dd5af4d49848fbdfc27c157c3d010345776f952765261c5"
[[package]]
name = "crossbeam-channel"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dca26ee1f8d361640700bde38b2c37d8c22b3ce2d360e1fc1c74ea4b0aa7d775"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "os_str_bytes",
"crossbeam-utils",
] ]
[[package]] [[package]]
name = "crossbeam-deque" name = "crossbeam-deque"
version = "0.8.0" version = "0.8.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "94af6efb46fef72616855b036a624cf27ba656ffc9be1b9a3c931cfc7749a9a9" checksum = "ce6fd6f855243022dcecf8702fef0c297d4338e226845fe067f6341ad9fa0cef"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "cfg-if",
"crossbeam-epoch", "crossbeam-epoch",
"crossbeam-utils", "crossbeam-utils",
] ]
[[package]] [[package]]
name = "crossbeam-epoch" name = "crossbeam-epoch"
version = "0.9.0" version = "0.9.15"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec0f606a85340376eef0d6d8fec399e6d4a544d648386c6645eb6d0653b27d9f" checksum = "ae211234986c545741a7dc064309f67ee1e5ad243d0e48335adc0484d960bcc7"
dependencies = [ dependencies = [
"cfg-if 1.0.0", "autocfg",
"const_fn", "cfg-if",
"crossbeam-utils", "crossbeam-utils",
"lazy_static",
"memoffset", "memoffset",
"scopeguard", "scopeguard",
] ]
[[package]] [[package]]
name = "crossbeam-utils" name = "crossbeam-utils"
version = "0.8.0" version = "0.8.16"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec91540d98355f690a86367e566ecad2e9e579f230230eb7c21398372be73ea5" checksum = "5a22b2d63d4d1dc0b7f1b6b2747dd0088008a9be28b6ddf0b1e7d335e3037294"
dependencies = [ dependencies = [
"autocfg", "cfg-if",
"cfg-if 1.0.0",
"const_fn",
"lazy_static",
] ]
[[package]] [[package]]
name = "either" name = "either"
version = "1.6.1" version = "1.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e78d4f1cc4ae33bbfc157ed5d5a5ef3bc29227303d595861deb238fcec4e9457" checksum = "a26ae43d7bcc3b814de94796a5e736d4029efb0ee900c12e2d54c993ad1a1e07"
[[package]] [[package]]
name = "error-chain" name = "error-chain"
@@ -166,101 +152,119 @@ dependencies = [
[[package]] [[package]]
name = "getrandom" name = "getrandom"
version = "0.1.15" version = "0.2.10"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fc587bc0ec293155d5bfa6b9891ec18a1e330c234f896ea47fbada4cadbe47e6" checksum = "be4136b2a15dd319360be1c07d9933517ccf0be8f16bf62a3bee4f0d618df427"
dependencies = [ dependencies = [
"cfg-if 0.1.10", "cfg-if",
"libc", "libc",
"wasi", "wasi",
] ]
[[package]] [[package]]
name = "gimli" name = "gimli"
version = "0.22.0" version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "aaf91faf136cb47367fa430cd46e37a788775e7fa104f8b4bcb3861dc389b724" checksum = "6fb8d784f27acf97159b40fc4db5ecd8aa23b9ad5ef69cdd136d3bc80665f0c0"
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
[[package]] [[package]]
name = "hermit-abi" name = "hermit-abi"
version = "0.1.17" version = "0.1.19"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5aca5565f760fb5b220e499d72710ed156fdb74e631659e99377d9ebfbd13ae8" checksum = "62b467343b94ba476dcb2500d242dadbb39557df889310ac77c5d99100aaac33"
dependencies = [ dependencies = [
"libc", "libc",
] ]
[[package]] [[package]]
name = "lazy_static" name = "indexmap"
version = "1.4.0" version = "1.9.3"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2abad23fbc42b3700f2f279844dc832adb2b2eb069b2df918f455c4e18cc646" checksum = "bd070e393353796e801d209ad339e89596eb4c8d430d18ede6a1cced8fafbd99"
dependencies = [
"autocfg",
"hashbrown",
]
[[package]] [[package]]
name = "libc" name = "libc"
version = "0.2.80" version = "0.2.149"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4d58d1b70b004888f764dfbf6a26a3b0342a1632d33968e4a179d8011c760614" checksum = "a08173bc88b7955d1b3145aa561539096c421ac8debde8cbc3612ec635fee29b"
[[package]]
name = "linked-hash-map"
version = "0.5.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
[[package]]
name = "memchr"
version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]] [[package]]
name = "memoffset" name = "memoffset"
version = "0.5.6" version = "0.9.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "043175f069eda7b85febe4a74abbaeff828d9f8b448515d3151a14a3542811aa" checksum = "5a634b1c61a95585bd15607c6ab0c4e5b226e695ff2800ba0cdccddf208c406c"
dependencies = [ dependencies = [
"autocfg", "autocfg",
] ]
[[package]] [[package]]
name = "miniz_oxide" name = "miniz_oxide"
version = "0.4.3" version = "0.7.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0f2d26ec3309788e423cfbf68ad1800f061638098d76a83681af979dc4eda19d" checksum = "e7810e0be55b428ada41041c41f32c9f1a42817901b4ccf45fa3d4b6561e74c7"
dependencies = [ dependencies = [
"adler", "adler",
"autocfg",
]
[[package]]
name = "num_cpus"
version = "1.13.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05499f3756671c15885fee9034446956fff3f243d6077b91e5767df161f766b3"
dependencies = [
"hermit-abi",
"libc",
] ]
[[package]] [[package]]
name = "object" name = "object"
version = "0.21.1" version = "0.32.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "37fd5004feb2ce328a52b0b3d01dbf4ffff72583493900ed15f22d4111c51693" checksum = "9cf5f9dd3933bd50a9e1f149ec995f39ae2c496d31fd772c1fd45ebc27e902b0"
dependencies = [
"memchr",
]
[[package]]
name = "os_str_bytes"
version = "6.6.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2355d85b9a3786f481747ced0e0ff2ba35213a1f9bd406ed906554d7af805a1"
[[package]] [[package]]
name = "ppv-lite86" name = "ppv-lite86"
version = "0.2.9" version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c36fa947111f5c62a733b652544dd0016a43ce89619538a8ef92724a6f501a20" checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]] [[package]]
name = "rand" name = "rand"
version = "0.7.3" version = "0.8.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03" checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
dependencies = [ dependencies = [
"getrandom",
"libc", "libc",
"rand_chacha", "rand_chacha",
"rand_core", "rand_core",
"rand_hc",
] ]
[[package]] [[package]]
name = "rand_chacha" name = "rand_chacha"
version = "0.2.2" version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402" checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
dependencies = [ dependencies = [
"ppv-lite86", "ppv-lite86",
"rand_core", "rand_core",
@@ -268,101 +272,81 @@ dependencies = [
[[package]] [[package]]
name = "rand_core" name = "rand_core"
version = "0.5.1" version = "0.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19" checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
dependencies = [ dependencies = [
"getrandom", "getrandom",
] ]
[[package]]
name = "rand_hc"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
dependencies = [
"rand_core",
]
[[package]] [[package]]
name = "rayon" name = "rayon"
version = "1.5.0" version = "1.8.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8b0d8e0819fadc20c74ea8373106ead0600e3a67ef1fe8da56e39b9ae7275674" checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051"
dependencies = [ dependencies = [
"autocfg",
"crossbeam-deque",
"either", "either",
"rayon-core", "rayon-core",
] ]
[[package]] [[package]]
name = "rayon-core" name = "rayon-core"
version = "1.9.0" version = "1.12.1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9ab346ac5921dc62ffa9f89b7a773907511cdfa5490c572ae9be1be33e8afa4a" checksum = "1465873a3dfdaa8ae7cb14b4383657caab0b3e8a0aa9ae8e04b044854c8dfce2"
dependencies = [ dependencies = [
"crossbeam-channel",
"crossbeam-deque", "crossbeam-deque",
"crossbeam-utils", "crossbeam-utils",
"lazy_static",
"num_cpus",
] ]
[[package]] [[package]]
name = "rustc-demangle" name = "rustc-demangle"
version = "0.1.18" version = "0.1.23"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6e3bad0ee36814ca07d7968269dd4b7ec89ec2da10c4bb613928d3077083c232" checksum = "d626bb9dae77e28219937af045c257c28bfd3f69333c512553507f5f9798cb76"
[[package]] [[package]]
name = "scopeguard" name = "scopeguard"
version = "1.1.0" version = "1.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd" checksum = "94143f37725109f92c262ed2cf5e59bce7498c01bcc1502d7b9afe439a4e9f49"
[[package]] [[package]]
name = "strsim" name = "strsim"
version = "0.8.0" version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8ea5119cdb4c55b55d432abb513a0429384878c15dde60cc77b1c99de1a95a6a" checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]] [[package]]
name = "textwrap" name = "termcolor"
version = "0.11.0" version = "1.3.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d326610f408c7a4eb6f51c37c330e496b08506c9457c9d34287ecc38809fb060" checksum = "6093bad37da69aab9d123a8091e4be0aa4a03e4d601ec641c327398315f62b64"
dependencies = [ dependencies = [
"unicode-width", "winapi-util",
] ]
[[package]] [[package]]
name = "unicode-width" name = "textwrap"
version = "0.1.8" version = "0.16.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "9337591893a19b88d8d87f2cec1e73fad5cdfd10e5a6f349f498ad6ea2ffb1e3" checksum = "222a222a5bfe1bba4a77b45ec488a741b3cb8872e5e499451fd7d0129c9c7c3d"
[[package]]
name = "vec_map"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1bddf1187be692e79c5ffeab891132dfb0f236ed36a43c7ed39f1165ee20191"
[[package]] [[package]]
name = "version_check" name = "version_check"
version = "0.9.2" version = "0.9.4"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b5a972e5669d67ba988ce3dc826706fb0a8b01471c088cb0b6110b805cc36aed" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
[[package]] [[package]]
name = "wasi" name = "wasi"
version = "0.9.0+wasi-snapshot-preview1" version = "0.11.0+wasi-snapshot-preview1"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519" checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
[[package]] [[package]]
name = "wham" name = "wham"
version = "1.1.2" version = "1.1.4"
dependencies = [ dependencies = [
"assert_approx_eq", "assert_approx_eq",
"clap", "clap",
@@ -387,6 +371,15 @@ version = "0.4.0"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
[[package]]
name = "winapi-util"
version = "0.1.6"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f29e6f9198ba0d26b4c9f07dbe6f9ed633e1f3d5b8b414090084349e46a52596"
dependencies = [
"winapi",
]
[[package]] [[package]]
name = "winapi-x86_64-pc-windows-gnu" name = "winapi-x86_64-pc-windows-gnu"
version = "0.4.0" version = "0.4.0"
@@ -395,6 +388,9 @@ checksum = "712e227841d057c1ee1cd2fb22fa7e5a5461ae8e48fa2ca79ec42cfc1931183f"
[[package]] [[package]]
name = "yaml-rust" name = "yaml-rust"
version = "0.3.5" version = "0.4.5"
source = "registry+https://github.com/rust-lang/crates.io-index" source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e66366e18dc58b46801afbf2ca7661a9f59cc8c5962c29892b6039b4f86fa992" checksum = "56c1936c4cc7a1c9ab21a1ebb602eb942ba868cbd44a99cb7cdc5892335e1c85"
dependencies = [
"linked-hash-map",
]

View File

@@ -1,6 +1,6 @@
[package] [package]
name = "wham" name = "wham"
version = "1.1.2" version = "1.1.4"
authors = ["Daniel Bauer <bauer@cbs.tu-darmstadt.de>"] authors = ["Daniel Bauer <bauer@cbs.tu-darmstadt.de>"]
description = "An implementation of the weighted histogram analysis method" description = "An implementation of the weighted histogram analysis method"
license = "GPL-3.0" license = "GPL-3.0"
@@ -13,10 +13,10 @@ exclude = [
] ]
[dependencies] [dependencies]
clap = {version="2.32.0", features=['yaml']} clap = {version="3.2.25", features=['yaml']}
error-chain = "0.12.0" error-chain = "0.12.0"
rand = "0.7.*" rand = "0.8.*"
rayon = "1.0.3" rayon = "1.8.1"
[dev-dependencies] [dev-dependencies]
assert_approx_eq = "1.1.0" assert_approx_eq = "1.1.0"

View File

@@ -153,12 +153,6 @@ timeseries is used for unbiasing. A more detailed description of the method can
*Chodera, J.D. et al. (2007). Use of the weighted histogram analysis method for the analysis of simulated and parallel *Chodera, J.D. et al. (2007). Use of the weighted histogram analysis method for the analysis of simulated and parallel
tempering simulations, JCTC 3(1):26-41* tempering simulations, JCTC 3(1):26-41*
TODO
---
- Option to output histograms
- Replica exchange
License & Citing License & Citing
--- ---
WHAM is licensed under the GPL-3.0 license. Please read the LICENSE file in this WHAM is licensed under the GPL-3.0 license. Please read the LICENSE file in this

View File

@@ -1,101 +1,101 @@
#coord1 Free Energy +/- Probability +/- #coord1 Free Energy +/- Probability +/-
-3.110177 7.158102 0.071438 0.003494 0.000068 -3.110177 7.158102 0.066061 0.003494 0.000070
-3.047345 5.365727 0.069449 0.007168 0.000135 -3.047345 5.365727 0.066577 0.007168 0.000135
-2.984513 3.873190 0.067495 0.013039 0.000232 -2.984513 3.873190 0.064431 0.013039 0.000233
-2.921681 2.953162 0.067589 0.018855 0.000343 -2.921681 2.953162 0.065142 0.018855 0.000334
-2.858849 1.949554 0.064640 0.028195 0.000480 -2.858849 1.949554 0.064047 0.028195 0.000483
-2.796017 1.391747 0.063570 0.035261 0.000584 -2.796017 1.391747 0.062115 0.035261 0.000594
-2.733186 1.128270 0.061710 0.039189 0.000620 -2.733186 1.128270 0.059763 0.039189 0.000647
-2.670354 0.839970 0.060445 0.043991 0.000667 -2.670354 0.839970 0.059287 0.043991 0.000712
-2.607522 0.624769 0.060762 0.047955 0.000739 -2.607522 0.624769 0.058500 0.047955 0.000797
-2.544690 0.663757 0.060786 0.047211 0.000731 -2.544690 0.663757 0.058265 0.047211 0.000798
-2.481858 1.051932 0.059774 0.040407 0.000617 -2.481858 1.051932 0.056788 0.040407 0.000664
-2.419026 1.463048 0.060422 0.034267 0.000527 -2.419026 1.463048 0.059709 0.034267 0.000622
-2.356194 1.990616 0.055242 0.027734 0.000360 -2.356194 1.990616 0.053483 0.027734 0.000423
-2.293363 2.190692 0.044458 0.025597 0.000210 -2.293363 2.190692 0.043319 0.025597 0.000266
-2.230531 2.553036 0.042144 0.022136 0.000159 -2.230531 2.553036 0.039698 0.022136 0.000187
-2.167699 2.572522 0.043313 0.021964 0.000165 -2.167699 2.572522 0.039097 0.021964 0.000156
-2.104867 2.472360 0.039799 0.022863 0.000157 -2.104867 2.472360 0.036596 0.022863 0.000147
-2.042035 2.517562 0.036792 0.022453 0.000203 -2.042035 2.517562 0.037999 0.022453 0.000209
-1.979203 2.469778 0.036324 0.022887 0.000237 -1.979203 2.469778 0.038176 0.022887 0.000241
-1.916372 2.223125 0.049496 0.025266 0.000565 -1.916372 2.223125 0.047408 0.025266 0.000449
-1.853540 2.080157 0.039205 0.026756 0.000453 -1.853540 2.080157 0.037957 0.026756 0.000373
-1.790708 1.793841 0.041488 0.030011 0.000558 -1.790708 1.793841 0.037537 0.030011 0.000435
-1.727876 1.458784 0.042362 0.034326 0.000565 -1.727876 1.458784 0.038048 0.034326 0.000494
-1.665044 0.914441 0.037561 0.042697 0.000682 -1.665044 0.914441 0.036602 0.042697 0.000617
-1.602212 0.303813 0.028701 0.054540 0.000761 -1.602212 0.303813 0.033286 0.054540 0.000762
-1.539380 0.268335 0.025765 0.055321 0.000771 -1.539380 0.268335 0.032947 0.055321 0.000800
-1.476549 0.000000 0.023371 0.061604 0.000866 -1.476549 0.000000 0.032532 0.061604 0.000915
-1.413717 0.537061 0.026370 0.049671 0.000715 -1.413717 0.537061 0.035421 0.049671 0.000786
-1.350885 1.439940 0.025620 0.034586 0.000547 -1.350885 1.439940 0.036002 0.034586 0.000580
-1.288053 2.391838 0.027653 0.023614 0.000393 -1.288053 2.391838 0.038449 0.023614 0.000426
-1.225221 3.779470 0.027093 0.013538 0.000229 -1.225221 3.779470 0.038521 0.013538 0.000246
-1.162389 5.685555 0.027762 0.006305 0.000111 -1.162389 5.685555 0.039935 0.006305 0.000119
-1.099557 7.661896 0.028996 0.002855 0.000051 -1.099557 7.661896 0.039852 0.002855 0.000054
-1.036726 9.946594 0.032118 0.001142 0.000021 -1.036726 9.946594 0.041239 0.001142 0.000022
-0.973894 12.359408 0.042801 0.000434 0.000009 -0.973894 12.359408 0.044291 0.000434 0.000009
-0.911062 14.954655 0.052443 0.000153 0.000004 -0.911062 14.954655 0.049774 0.000153 0.000003
-0.848230 17.742242 0.063261 0.000050 0.000002 -0.848230 17.742242 0.059250 0.000050 0.000001
-0.785398 20.555785 0.068133 0.000016 0.000001 -0.785398 20.555785 0.065401 0.000016 0.000001
-0.722566 22.811160 0.075518 0.000007 0.000000 -0.722566 22.811160 0.073860 0.000007 0.000000
-0.659734 25.178094 0.086226 0.000003 0.000000 -0.659734 25.178094 0.086184 0.000003 0.000000
-0.596903 26.442288 0.091783 0.000002 0.000000 -0.596903 26.442288 0.091674 0.000002 0.000000
-0.534071 27.897565 0.093175 0.000001 0.000000 -0.534071 27.897565 0.091810 0.000001 0.000000
-0.471239 29.062473 0.096027 0.000001 0.000000 -0.471239 29.062473 0.093492 0.000001 0.000000
-0.408407 30.384521 0.096855 0.000000 0.000000 -0.408407 30.384521 0.091621 0.000000 0.000000
-0.345575 31.638454 0.099956 0.000000 0.000000 -0.345575 31.638454 0.094954 0.000000 0.000000
-0.282743 32.817727 0.107689 0.000000 0.000000 -0.282743 32.817727 0.104975 0.000000 0.000000
-0.219911 33.770369 0.108946 0.000000 0.000000 -0.219911 33.770369 0.107367 0.000000 0.000000
-0.157080 34.505503 0.112902 0.000000 0.000000 -0.157080 34.505503 0.107448 0.000000 0.000000
-0.094248 35.431659 0.120856 0.000000 0.000000 -0.094248 35.431659 0.122770 0.000000 0.000000
-0.031416 35.615810 0.122046 0.000000 0.000000 -0.031416 35.615810 0.123003 0.000000 0.000000
0.031416 35.561946 0.118225 0.000000 0.000000 0.031416 35.561946 0.119921 0.000000 0.000000
0.094248 35.382089 0.108652 0.000000 0.000000 0.094248 35.382089 0.107837 0.000000 0.000000
0.157080 34.934827 0.118384 0.000000 0.000000 0.157080 34.934827 0.112907 0.000000 0.000000
0.219911 33.673460 0.119195 0.000000 0.000000 0.219911 33.673460 0.107974 0.000000 0.000000
0.282743 32.731563 0.121592 0.000000 0.000000 0.282743 32.731563 0.106959 0.000000 0.000000
0.345575 31.261855 0.129698 0.000000 0.000000 0.345575 31.261855 0.107235 0.000000 0.000000
0.408407 29.717377 0.139789 0.000000 0.000000 0.408407 29.717377 0.110897 0.000000 0.000000
0.471239 28.076620 0.137289 0.000001 0.000000 0.471239 28.076620 0.110736 0.000001 0.000000
0.534071 26.481097 0.135712 0.000002 0.000000 0.534071 26.481097 0.110570 0.000002 0.000000
0.596903 24.487358 0.135156 0.000003 0.000000 0.596903 24.487358 0.110678 0.000003 0.000000
0.659734 22.344251 0.131027 0.000008 0.000000 0.659734 22.344251 0.108746 0.000008 0.000000
0.722566 20.241543 0.133145 0.000018 0.000001 0.722566 20.241543 0.110764 0.000018 0.000001
0.785398 18.341869 0.131952 0.000039 0.000002 0.785398 18.341869 0.110562 0.000039 0.000002
0.848230 16.261582 0.134676 0.000091 0.000006 0.848230 16.261582 0.113400 0.000091 0.000005
0.911062 14.301801 0.134417 0.000199 0.000013 0.911062 14.301801 0.113555 0.000199 0.000010
0.973894 12.603788 0.131018 0.000394 0.000024 0.973894 12.603788 0.113740 0.000394 0.000020
1.036726 11.249601 0.131276 0.000678 0.000043 1.036726 11.249601 0.113019 0.000678 0.000035
1.099557 10.087886 0.132498 0.001079 0.000070 1.099557 10.087886 0.112748 0.001079 0.000056
1.162389 9.443303 0.132990 0.001398 0.000092 1.162389 9.443303 0.111507 0.001398 0.000072
1.225221 9.152799 0.132250 0.001570 0.000104 1.225221 9.152799 0.110347 0.001570 0.000081
1.288053 9.331937 0.133178 0.001462 0.000099 1.288053 9.331937 0.110858 0.001462 0.000076
1.350885 9.905546 0.133357 0.001161 0.000078 1.350885 9.905546 0.111592 0.001161 0.000061
1.413717 11.042050 0.133807 0.000736 0.000051 1.413717 11.042050 0.111362 0.000736 0.000039
1.476549 12.598167 0.132722 0.000395 0.000027 1.476549 12.598167 0.111371 0.000395 0.000021
1.539380 14.520167 0.131816 0.000183 0.000012 1.539380 14.520167 0.110164 0.000183 0.000010
1.602212 16.569783 0.131773 0.000080 0.000005 1.602212 16.569783 0.110233 0.000080 0.000004
1.665044 18.687390 0.132601 0.000034 0.000002 1.665044 18.687390 0.110987 0.000034 0.000002
1.727876 20.775408 0.133867 0.000015 0.000001 1.727876 20.775408 0.112748 0.000015 0.000001
1.790708 22.905200 0.129265 0.000006 0.000000 1.790708 22.905200 0.107353 0.000006 0.000000
1.853540 24.643852 0.128894 0.000003 0.000000 1.853540 24.643852 0.109825 0.000003 0.000000
1.916372 26.301740 0.130266 0.000002 0.000000 1.916372 26.301740 0.109608 0.000002 0.000000
1.979203 27.372071 0.128620 0.000001 0.000000 1.979203 27.372071 0.108712 0.000001 0.000000
2.042035 28.697726 0.133263 0.000001 0.000000 2.042035 28.697726 0.112741 0.000001 0.000000
2.104867 29.417901 0.133513 0.000000 0.000000 2.104867 29.417901 0.111171 0.000000 0.000000
2.167699 30.008351 0.130925 0.000000 0.000000 2.167699 30.008351 0.111253 0.000000 0.000000
2.230531 30.406016 0.124398 0.000000 0.000000 2.230531 30.406016 0.109443 0.000000 0.000000
2.293363 30.171275 0.122493 0.000000 0.000000 2.293363 30.171275 0.109685 0.000000 0.000000
2.356194 29.884646 0.130278 0.000000 0.000000 2.356194 29.884646 0.123195 0.000000 0.000000
2.419026 29.428153 0.130844 0.000000 0.000000 2.419026 29.428153 0.121519 0.000000 0.000000
2.481858 28.546982 0.148114 0.000001 0.000000 2.481858 28.546982 0.142684 0.000001 0.000000
2.544690 27.757520 0.133045 0.000001 0.000000 2.544690 27.757520 0.125824 0.000001 0.000000
2.607522 26.505787 0.134364 0.000001 0.000000 2.607522 26.505787 0.127311 0.000001 0.000000
2.670354 24.491866 0.115061 0.000003 0.000000 2.670354 24.491866 0.105644 0.000003 0.000000
2.733186 22.320664 0.110036 0.000008 0.000000 2.733186 22.320664 0.094847 0.000008 0.000000
2.796017 20.052723 0.107894 0.000020 0.000001 2.796017 20.052723 0.089885 0.000020 0.000001
2.858849 17.655650 0.105964 0.000052 0.000002 2.858849 17.655650 0.087837 0.000052 0.000002
2.921681 15.471590 0.107005 0.000125 0.000005 2.921681 15.471590 0.087834 0.000125 0.000005
2.984513 13.138167 0.099378 0.000318 0.000012 2.984513 13.138167 0.081947 0.000318 0.000011
3.047345 11.092386 0.087770 0.000722 0.000022 3.047345 11.092386 0.074513 0.000722 0.000020
3.110177 9.065722 0.077092 0.001626 0.000038 3.110177 9.065722 0.068298 0.001626 0.000036

View File

@@ -1,6 +1,6 @@
name: wham name: wham
version: "1.1.2" version: "1.1.3"
author: D. Bauer <bauer@cbs.tu-darmstadt.de> author: D. Bauer <bauer@bio.tu-darmstadt.de>
about: | about: |
wham is a fast implementation of the weighted histogram analysis method (WHAM) written in Rust. It currently supports potential of mean force (PMF) calculations in multiple dimensions at constant temperature. wham is a fast implementation of the weighted histogram analysis method (WHAM) written in Rust. It currently supports potential of mean force (PMF) calculations in multiple dimensions at constant temperature.

View File

@@ -73,29 +73,29 @@ mod tests {
use super::super::histogram::Histogram; use super::super::histogram::Histogram;
fn build_hist() -> Histogram { fn build_hist() -> Histogram {
Histogram::new( Histogram::new(
22, // num_points 22, // num_points
vec![1.0, 1.0, 3.0, 5.0, 12.0] // bins vec![1.0, 1.0, 3.0, 5.0, 12.0] // bins
) )
} }
fn build_hist_set() -> Dataset { fn build_hist_set() -> Dataset {
let h1 = build_hist(); let h1 = build_hist();
let h2 = build_hist(); let h2 = build_hist();
let h3 = build_hist(); let h3 = build_hist();
Dataset::new( Dataset::new(
5, // num bins 5, // num bins
vec![3], vec![3],
vec![1.0], // bin width vec![1.0], // bin width
vec![0.0], // hist min vec![0.0], // hist min
vec![9.0], // hist max vec![9.0], // hist max
vec![4.5, 4.5, 4.5], // x0 vec![4.5, 4.5, 4.5], // x0
vec![10.0, 10.0, 10.0], // fc vec![10.0, 10.0, 10.0], // fc
300.0*k_B, // kT 300.0*k_B, // kT
vec![h1, h2, h3], // hists vec![h1, h2, h3], // hists
false // cyclic false // cyclic
) )
} }
#[test] #[test]
fn random_weights() { fn random_weights() {

View File

@@ -3,266 +3,266 @@ use std::fmt;
// One histogram // One histogram
#[derive(Debug,Clone)] #[derive(Debug,Clone)]
pub struct Histogram { pub struct Histogram {
// total number of data points stored in the histogram // total number of data points stored in the histogram
pub num_points: u32, pub num_points: u32,
// histogram bins // histogram bins
pub bins: Vec<f64> pub bins: Vec<f64>
} }
impl Histogram { impl Histogram {
pub fn new(num_points: u32, bins: Vec<f64>) -> Histogram { pub fn new(num_points: u32, bins: Vec<f64>) -> Histogram {
Histogram {num_points, bins} Histogram {num_points, bins}
} }
} }
// a set of histograms // a set of histograms
#[derive(Debug,Clone)] #[derive(Debug,Clone)]
pub struct Dataset { pub struct Dataset {
// number of histogram windows (number of simulations) // number of histogram windows (number of simulations)
pub num_windows: usize, pub num_windows: usize,
// total number of bins // total number of bins
pub num_bins: usize, pub num_bins: usize,
// number of bins in each dimension // number of bins in each dimension
pub dimens_lengths: Vec<usize>, pub dimens_lengths: Vec<usize>,
// min values of the histogram in each dimension // min values of the histogram in each dimension
hist_min: Vec<f64>, hist_min: Vec<f64>,
// max values of the histogram in each dimension // max values of the histogram in each dimension
hist_max: Vec<f64>, hist_max: Vec<f64>,
// width of a bin in unit of its dimension // width of a bin in unit of its dimension
bin_width: Vec<f64>, bin_width: Vec<f64>,
// value of kT // value of kT
pub kT: f64, pub kT: f64,
// histogram for each window // histogram for each window
pub histograms: Vec<Histogram>, pub histograms: Vec<Histogram>,
// flag for cyclic reaction coordinates // flag for cyclic reaction coordinates
pub cyclic: bool, pub cyclic: bool,
// locations of biases // locations of biases
bias_pos: Vec<f64>, bias_pos: Vec<f64>,
// force constants of biases // force constants of biases
bias_fc: Vec<f64>, bias_fc: Vec<f64>,
// bias value cache // bias value cache
bias: Vec<f64>, bias: Vec<f64>,
// histogram weight // histogram weight
pub weights: Vec<f64>, pub weights: Vec<f64>,
} }
impl Dataset { impl Dataset {
pub fn new(num_bins: usize, dimens_lengths: Vec<usize>, bin_width: Vec<f64>, pub fn new(num_bins: usize, dimens_lengths: Vec<usize>, bin_width: Vec<f64>,
hist_min: Vec<f64>, hist_max: Vec<f64>, bias_pos: Vec<f64>, hist_min: Vec<f64>, hist_max: Vec<f64>, bias_pos: Vec<f64>,
bias_fc: Vec<f64>, kT: f64, histograms: Vec<Histogram>, cyclic: bool) -> Dataset { bias_fc: Vec<f64>, kT: f64, histograms: Vec<Histogram>, cyclic: bool) -> Dataset {
let num_windows = histograms.len(); let num_windows = histograms.len();
let bias: Vec<f64> = vec![0.0; num_bins*num_windows]; let bias: Vec<f64> = vec![0.0; num_bins*num_windows];
let weights = vec![1.0; num_windows]; let weights = vec![1.0; num_windows];
let mut ds = Dataset{ let mut ds = Dataset{
num_windows, num_windows,
num_bins, num_bins,
dimens_lengths, dimens_lengths,
bin_width, bin_width,
hist_min, hist_min,
hist_max, hist_max,
kT, kT,
histograms, histograms,
cyclic, cyclic,
bias_pos, bias_pos,
bias_fc, bias_fc,
bias, bias,
weights weights
}; };
for window in 0..num_windows { for window in 0..num_windows {
for bin in 0..num_bins { for bin in 0..num_bins {
let ndx = window * num_bins + bin; let ndx = window * num_bins + bin;
ds.bias[ndx] = ds.calc_bias(bin, window); ds.bias[ndx] = ds.calc_bias(bin, window);
} }
} }
ds ds
} }
pub fn new_weighted(ds: Dataset, weights: Vec<f64>) -> Dataset { pub fn new_weighted(ds: Dataset, weights: Vec<f64>) -> Dataset {
Dataset { Dataset {
weights, weights,
..ds ..ds
} }
} }
pub fn get_weighted_bin_count(&self, bin: usize) -> f64 { pub fn get_weighted_bin_count(&self, bin: usize) -> f64 {
self.histograms.iter().enumerate().map(|(idx,h)| self.weights[idx]*h.bins[bin]).sum() self.histograms.iter().enumerate().map(|(idx,h)| self.weights[idx]*h.bins[bin]).sum()
} }
fn expand_index(&self, bin: usize, lengths: &[usize]) -> Vec<usize> { fn expand_index(&self, bin: usize, lengths: &[usize]) -> Vec<usize> {
let mut tmp = bin; let mut tmp = bin;
let mut idx = vec![0; lengths.len()]; let mut idx = vec![0; lengths.len()];
for dimen in (1..lengths.len()).rev() { for dimen in (1..lengths.len()).rev() {
let denom: usize = lengths.iter().take(dimen).product(); let denom: usize = lengths.iter().take(dimen).product();
idx[dimen] = tmp / denom; idx[dimen] = tmp / denom;
tmp %= denom; tmp %= denom;
} }
idx[0] = tmp; idx[0] = tmp;
idx idx
} }
// get center x value for a bin // get center x value for a bin
pub fn get_coords_for_bin(&self, bin: usize) -> Vec<f64> { pub fn get_coords_for_bin(&self, bin: usize) -> Vec<f64> {
self.expand_index(bin, &self.dimens_lengths).iter().enumerate().map(|(i, dimen_bin)| { self.expand_index(bin, &self.dimens_lengths).iter().enumerate().map(|(i, dimen_bin)| {
self.hist_min[i] + self.bin_width[i]*(*dimen_bin as f64 + 0.5) self.hist_min[i] + self.bin_width[i]*(*dimen_bin as f64 + 0.5)
}).collect() }).collect()
} }
pub fn get_bias(&self, bin: usize, window: usize) -> f64 { pub fn get_bias(&self, bin: usize, window: usize) -> f64 {
let ndx = window * self.num_bins + bin; let ndx = window * self.num_bins + bin;
self.bias[ndx] self.bias[ndx]
} }
// Harmonic bias calculation: bias = 0.5*k(dx)^2 // Harmonic bias calculation: bias = 0.5*k(dx)^2
// if cyclic is true, lowest and highest bins are assumed to be // if cyclic is true, lowest and highest bins are assumed to be
// neighbors. This returns exp(U/kT) instead of U for better performance. // neighbors. This returns exp(U/kT) instead of U for better performance.
fn calc_bias(&self, bin: usize, window: usize) -> f64 { fn calc_bias(&self, bin: usize, window: usize) -> f64 {
let dimens = self.dimens_lengths.len(); let dimens = self.dimens_lengths.len();
// index of the bias value depends on the window und dimension // index of the bias value depends on the window und dimension
let bias_ndx: Vec<usize> = (0..dimens) let bias_ndx: Vec<usize> = (0..dimens)
.map(|dimen| { window * dimens + dimen }).collect(); .map(|dimen| { window * dimens + dimen }).collect();
// find the N coords, force constants and bias coords // find the N coords, force constants and bias coords
let coord = self.get_coords_for_bin(bin); let coord = self.get_coords_for_bin(bin);
let bias_fc: Vec<f64> = bias_ndx.iter().map(|ndx| { self.bias_fc[*ndx] }).collect(); let bias_fc: Vec<f64> = bias_ndx.iter().map(|ndx| { self.bias_fc[*ndx] }).collect();
let bias_pos: Vec<f64> = bias_ndx.iter().map(|ndx| { self.bias_pos[*ndx] }).collect(); let bias_pos: Vec<f64> = bias_ndx.iter().map(|ndx| { self.bias_pos[*ndx] }).collect();
let mut bias_sum = 0.0; let mut bias_sum = 0.0;
for i in 0..dimens { for i in 0..dimens {
let mut dist = (coord[i] - bias_pos[i]).abs(); let mut dist = (coord[i] - bias_pos[i]).abs();
if self.cyclic { // periodic conditions if self.cyclic { // periodic conditions
let hist_len = self.hist_max[i] - self.hist_min[i]; let hist_len = self.hist_max[i] - self.hist_min[i];
if dist > 0.5 * hist_len { if dist > 0.5 * hist_len {
dist -= hist_len; dist -= hist_len;
} }
} }
// store exp(U/kT) for better performance // store exp(U/kT) for better performance
bias_sum += 0.5 * bias_fc[i] * dist * dist bias_sum += 0.5 * bias_fc[i] * dist * dist
} }
(-bias_sum/self.kT).exp() (-bias_sum/self.kT).exp()
} }
} }
impl fmt::Display for Dataset { impl fmt::Display for Dataset {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
let mut datapoints: u32 = 0; let mut datapoints: u32 = 0;
for h in &self.histograms { for h in &self.histograms {
datapoints += h.num_points; datapoints += h.num_points;
} }
write!(f, "{} windows, {} datapoints", self.num_windows, datapoints) write!(f, "{} windows, {} datapoints", self.num_windows, datapoints)
} }
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::*; use super::*;
use super::super::k_B; use super::super::k_B;
macro_rules! assert_delta { macro_rules! assert_delta {
($x:expr, $y:expr, $d:expr) => { ($x:expr, $y:expr, $d:expr) => {
assert!(($x-$y).abs() < $d, "{} != {}", $x, $y) assert!(($x-$y).abs() < $d, "{} != {}", $x, $y)
} }
} }
fn build_hist() -> Histogram { fn build_hist() -> Histogram {
Histogram::new( Histogram::new(
22, // num_points 22, // num_points
vec![1.0, 1.0, 3.0, 5.0, 12.0] // bins vec![1.0, 1.0, 3.0, 5.0, 12.0] // bins
) )
} }
fn build_hist_set() -> Dataset { fn build_hist_set() -> Dataset {
let h = build_hist(); let h = build_hist();
Dataset::new( Dataset::new(
5, // num bins 5, // num bins
vec![1], vec![1],
vec![1.0], // bin width vec![1.0], // bin width
vec![0.0], // hist min vec![0.0], // hist min
vec![9.0], // hist max vec![9.0], // hist max
vec![4.5], // x0 vec![4.5], // x0
vec![10.0], // fc vec![10.0], // fc
300.0*k_B, // kT 300.0*k_B, // kT
vec![h], // hists vec![h], // hists
false // cyclic false // cyclic
) )
} }
#[test] #[test]
fn calc_bias() { fn calc_bias() {
let ds = build_hist_set(); // k = 10 let ds = build_hist_set(); // k = 10
// 3th element -> x=3.5, x0=3.5 // 3th element -> x=3.5, x0=3.5
assert_delta!(0.134_722_337_796, ds.calc_bias(3, 0), 0.000_000_01); assert_delta!(0.134_722_337_796, ds.calc_bias(3, 0), 0.000_000_01);
// 8th element -> x=8.5, x0=3.5 // 8th element -> x=8.5, x0=3.5
assert_delta!(1.0, ds.calc_bias(4,0), 0.000_000_01); assert_delta!(1.0, ds.calc_bias(4,0), 0.000_000_01);
// 1st element -> x=0.5, x0=3.5. non-cyclic! // 1st element -> x=0.5, x0=3.5. non-cyclic!
assert_delta!(0.0, ds.calc_bias(0,0), 0.000_000_1); assert_delta!(0.0, ds.calc_bias(0,0), 0.000_000_1);
} }
#[test] #[test]
fn calc_biascyclic() { fn calc_biascyclic() {
let mut ds = build_hist_set(); let mut ds = build_hist_set();
ds.cyclic = true; ds.cyclic = true;
// 7th element -> x=3.5, x0=3.5 // 7th element -> x=3.5, x0=3.5
assert_delta!(0.134_722_337_796, ds.calc_bias(3, 0), 0.000_000_01); assert_delta!(0.134_722_337_796, ds.calc_bias(3, 0), 0.000_000_01);
// 8th element -> x=4.5, x0=3.5 // 8th element -> x=4.5, x0=3.5
assert_delta!(1.0, ds.calc_bias(4, 0), 0.000_000_01); assert_delta!(1.0, ds.calc_bias(4, 0), 0.000_000_01);
// 1th element -> x=0.5, x0=3.5 // 1th element -> x=0.5, x0=3.5
// cyclic flag makes bin 0 neighboring bin 9, so the distance is actually 2 // cyclic flag makes bin 0 neighboring bin 9, so the distance is actually 2
assert_delta!(0.000_000_000_000_011_776_9, ds.calc_bias(0, 0), 0.000_000_01); assert_delta!(0.000_000_000_000_011_776_9, ds.calc_bias(0, 0), 0.000_000_01);
// 2nd element -> x=1.5, x0=3.5 // 2nd element -> x=1.5, x0=3.5
assert_delta!(0.000_000_01, ds.calc_bias(1, 0), 0.000_000_01); assert_delta!(0.000_000_01, ds.calc_bias(1, 0), 0.000_000_01);
} }
#[test] #[test]
fn get_x_for_bin() { fn get_x_for_bin() {
let ds = build_hist_set(); let ds = build_hist_set();
let expected: Vec<f64> = vec![0,1,2,3,4,5,6,7,8].iter() let expected: Vec<f64> = vec![0,1,2,3,4,5,6,7,8].iter()
.map(|x| *x as f64 + 0.5).collect(); .map(|x| *x as f64 + 0.5).collect();
expected.iter().enumerate().for_each(|(i, exp)| { expected.iter().enumerate().for_each(|(i, exp)| {
assert_approx_eq!(exp, &ds.get_coords_for_bin(i)[0]); assert_approx_eq!(exp, &ds.get_coords_for_bin(i)[0]);
}) })
} }
#[test] #[test]
fn get_bin_count() { fn get_bin_count() {
let ds = Dataset::new( let ds = Dataset::new(
5, // num bins 5, // num bins
vec![1], vec![1],
vec![1.0, 1.0], // bin width vec![1.0, 1.0], // bin width
vec![0.0, 0.0], // hist min vec![0.0, 0.0], // hist min
vec![5.0, 5.0], // hist max vec![5.0, 5.0], // hist max
vec![7.5, 7.5], // x0 vec![7.5, 7.5], // x0
vec![10.0, 10.0], // fc vec![10.0, 10.0], // fc
300.0*k_B, // kT 300.0*k_B, // kT
vec![build_hist(), build_hist()], // hists vec![build_hist(), build_hist()], // hists
false // cyclic false // cyclic
); );
assert_delta!(2.0, ds.get_weighted_bin_count(0), 0.000_000_000_1); assert_delta!(2.0, ds.get_weighted_bin_count(0), 0.000_000_000_1);
assert_delta!(2.0, ds.get_weighted_bin_count(1), 0.000_000_000_1); assert_delta!(2.0, ds.get_weighted_bin_count(1), 0.000_000_000_1);
assert_delta!(6.0, ds.get_weighted_bin_count(2), 0.000_000_000_1); assert_delta!(6.0, ds.get_weighted_bin_count(2), 0.000_000_000_1);
assert_delta!(10.0, ds.get_weighted_bin_count(3), 0.000_000_000_1); assert_delta!(10.0, ds.get_weighted_bin_count(3), 0.000_000_000_1);
assert_delta!(24.0, ds.get_weighted_bin_count(4), 0.000_000_000_1); assert_delta!(24.0, ds.get_weighted_bin_count(4), 0.000_000_000_1);
} }
} }

245
src/io.rs
View File

@@ -30,13 +30,20 @@ pub fn vprintln(s: String, verbose: bool) {
// given in the metadata file. This generates at least one Dataset, // given in the metadata file. This generates at least one Dataset,
// or multiple Datasets if convdt is set in the config // or multiple Datasets if convdt is set in the config
pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> { pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> {
let mut bias_pos: Vec<f64> = Vec::new(); let mut bias_pos: Vec<f64> = Vec::new();
let mut bias_fc: Vec<f64> = Vec::new(); let mut bias_fc: Vec<f64> = Vec::new();
let mut histograms: Vec<Vec<Histogram>> = Vec::new();
let mut timeseries_lengths: Vec<usize> = Vec::new(); let mut timeseries_lengths: Vec<usize> = Vec::new();
let mut paths = Vec::new(); let mut paths = Vec::new();
let kT = cfg.temperature * k_B; // Boundaries of individual histograms if convdt is set.
let dataset_boundaries: Vec<(f64, f64)> = get_convdt_boundaries(cfg.start, cfg.end, cfg.convdt);
let num_datasets = dataset_boundaries.len();
// for each timeseries, histograms are build for slices according to
// start..convdt, start..2*convdt, ...
let mut histograms = vec![Vec::new(); dataset_boundaries.len()];
let kT = cfg.temperature * k_B;
let bin_width: Vec<f64> = (0..cfg.dimens).map(|idx| { let bin_width: Vec<f64> = (0..cfg.dimens).map(|idx| {
(cfg.hist_max[idx] - cfg.hist_min[idx])/(cfg.num_bins[idx] as f64) (cfg.hist_max[idx] - cfg.hist_min[idx])/(cfg.num_bins[idx] as f64)
}).collect(); }).collect();
@@ -46,17 +53,16 @@ pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> {
let f = File::open(&cfg.metadata_file).chain_err(|| "Failed to open metadata file")?; let f = File::open(&cfg.metadata_file).chain_err(|| "Failed to open metadata file")?;
let buf = BufReader::new(&f); let buf = BufReader::new(&f);
// read each metadata file line and parse it // read each metadata file line and parse it
for (line_num,l) in buf.lines().enumerate() { for (line_num,l) in buf.lines().enumerate() {
let line = l.chain_err(|| "Failed to read line")?; let line = l.chain_err(|| "Failed to read line")?;
// skip comments and empty lines // skip comments and empty lines
if line.starts_with('#') || line.is_empty() { if line.starts_with('#') || line.is_empty() {
continue; continue;
} }
let split: Vec<&str> = line.split_whitespace().collect(); let split: Vec<&str> = line.split_whitespace().collect();
if split.len() < 1 + cfg.dimens * 2 { if split.len() < 1 + cfg.dimens * 2 {
bail!(format!("Wrong number of columns in line {} of metadata file. Empty Line?", line_num+1)); bail!(format!("Wrong number of columns in line {} of metadata file. Empty Line?", line_num+1));
} }
@@ -80,47 +86,39 @@ pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> {
.chain_err(|| format!("Failed to read time series from {}", &path))?; .chain_err(|| format!("Failed to read time series from {}", &path))?;
timeseries_lengths.push(timeseries_initial_lengths); timeseries_lengths.push(timeseries_initial_lengths);
for (idx, interval) in dataset_boundaries.iter().enumerate() {
// for each timeseries, histograms are build for slices according to
// start..convdt, start..2*convdt, ...
histograms.push(Vec::new());
let h_idx = histograms.len()-1;
let convdt_stops = get_convdt_boundaries(&timeseries[0], &cfg);
for (idx, interval) in convdt_stops.iter().enumerate() {
// build histogram for slice start.._stop // build histogram for slice start.._stop
let (start, stop) = interval; let (start, stop) = interval;
let timeseries_mask: Vec<bool> = (0..timeseries[0].len()).map(|i| { let timeseries_mask: Vec<bool> = (0..timeseries[0].len()).map(|i| {
is_in_time_boundaries(timeseries[0][i], *start, *stop) is_in_time_boundaries(timeseries[0][i], *start, *stop)
}).collect(); }).collect();
let hist = build_histogram_from_timeseries(&timeseries, &timeseries_mask, cfg); let hist = build_histogram_from_timeseries(&timeseries, &timeseries_mask, cfg);
histograms[h_idx].push(hist); histograms[idx].push(hist);
if (cfg.convdt == 0.00) || idx+1 == convdt_stops.len() { if (cfg.convdt == 0.00) || idx+1 == num_datasets {
vprintln(format!("{}, {} data points added.", &path, vprintln(format!("{}, {} data points added.",
histograms[h_idx].last().unwrap().num_points), cfg.verbose); &path, histograms[idx].last().unwrap().num_points), cfg.verbose);
break break
} }
} }
} }
// Datasets are created from histograms. // Datasets are created from histograms.
// Empty histograms result in an error when its the final dataset, // Empty histograms result in an error when its the final dataset, and a warning otherwise.
// and a warning otherwise.
let num_datasets: usize = histograms.iter().map(|h| h.len()).max().unwrap();
let dataset_boundaries: Vec<(f64, f64)> = (0..num_datasets).map(|idx| {
(cfg.start, cfg.start+(idx as f64 + 1.0)*cfg.convdt) }
).collect();
vprintln(format!("Generating {} datasets from histograms.", num_datasets), cfg.verbose); vprintln(format!("Generating {} datasets from histograms.", num_datasets), cfg.verbose);
let datasets: Vec<Dataset> = (0..num_datasets).map(|idx| { let datasets: Vec<Dataset> = histograms.into_iter().enumerate().map(|(dataset_idx, dataset_histograms)| {
let mut dataset_histograms: Vec<Histogram> = Vec::with_capacity(histograms.len()); for (hs, path) in dataset_histograms.iter().zip(&paths) {
for (hs, path) in histograms.iter().zip(&paths) { if hs.num_points == 0 {
if hs.len() > idx {
dataset_histograms.push(hs[idx].clone())
} else {
let warning = format!("No data points for interval {}-{} in histogram boundaries: {}.", let warning = format!("No data points for interval {}-{} in histogram boundaries: {}.",
dataset_boundaries[idx].0, dataset_boundaries[idx].1 ,&path); dataset_boundaries[dataset_idx].0, dataset_boundaries[dataset_idx].1 ,&path);
if !cfg.ignore_empty && idx+1 == num_datasets {
bail!(warning + " This is the final dataset."); if dataset_idx+1 == num_datasets {
let warning = warning + " This is the final dataset.";
if cfg.ignore_empty {
eprintln!("{}", warning);
} else {
bail!(warning);
}
} else { } else {
eprintln!("{}", warning); eprintln!("{}", warning);
} }
@@ -167,23 +165,20 @@ pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> {
} }
} }
// builds a time boundaries for datasets from convdt, timeseries start and end // builds a time boundaries for datasets from convdt, start and end
fn get_convdt_boundaries(timeseries: &[f64], cfg: &Config) -> Vec<(f64, f64)> { fn get_convdt_boundaries(start: f64, end: f64, convdt: f64) -> Vec<(f64, f64)> {
let mut last_timestep = *timeseries.last().unwrap(); if convdt == 0.0 {
if last_timestep > cfg.end { vec![(start, end)]
last_timestep = cfg.end;
}
let mut first_timestep = *timeseries.first().unwrap();
if first_timestep < cfg.start {
first_timestep = cfg.start;
}
if cfg.convdt == 0.0 {
vec![(0.0, last_timestep)]
} else { } else {
let intervals: usize = ((last_timestep - first_timestep) / cfg.convdt).ceil() as usize; let intervals: usize = ((end - start) / convdt).ceil() as usize;
(1..intervals+1).map(|i| { (1..intervals+1).map(|i| {
i as f64 * cfg.convdt + first_timestep let interval_end = i as f64 * convdt + start;
}).map(|end| { (first_timestep, end) }).collect() if interval_end > end {
end
} else {
interval_end
}
}).map(|interval_end| { (start, interval_end) }).collect()
} }
} }
@@ -273,7 +268,7 @@ fn read_window_file(window_file: &str, cfg: &Config) -> Result<(Vec<Vec<f64>>, u
timeseries = uncorrelate(timeseries, cfg); timeseries = uncorrelate(timeseries, cfg);
} }
if timeseries[0].is_empty() { if timeseries[0].is_empty() && !cfg.ignore_empty {
bail!("Time series is empty") bail!("Time series is empty")
} }
@@ -449,7 +444,7 @@ mod tests {
assert!(ts[0].len() == 5000); assert!(ts[0].len() == 5000);
println!("{:?}", ts); println!("{:?}", ts);
for (actual, expected) in ts[1].iter().zip(expected.iter()) { for (actual, expected) in ts[1].iter().zip(expected.iter()) {
assert!((actual-expected).abs() < 0.001, format!("{:?} != {:?}", actual, expected)); assert!((actual-expected).abs() < 0.001, "{:?} != {:?}", actual, expected);
} }
} }
@@ -465,6 +460,99 @@ mod tests {
assert_eq!(25, ds.histograms.len()) assert_eq!(25, ds.histograms.len())
} }
#[test]
fn read_data_empty() {
let mut cfg = cfg();
cfg.metadata_file = "tests/data/metadata_convdt.dat".to_string();
cfg.start = 2.5;
cfg.end = 9.0;
cfg.ignore_empty = false;
// should throw an error since one first timeseries ends at 2
let ds = super::read_data(&cfg);
if ds.is_ok() {
panic!()
}
// should not throw an error because ignore_empty is set
cfg.ignore_empty = true;
let ds = super::read_data(&cfg);
if ds.is_err() {
panic!()
}
}
// test if convdt results in correct parsing
// 6 timeseries are loaded ranging from:
// 1. 0-10, 500 datapoints
// 2. 0-2, 100 datapoints
// 3. 0-5, 250 datapoints
// 4. 5-10, 250 datapoints
// 5. 7-10, 150 datapoints
// 6 2-7, 250 datapoints
#[test]
fn read_data_convdt() {
let mut cfg = cfg();
cfg.metadata_file = "tests/data/metadata_convdt.dat".to_string();
cfg.convdt = 2.0;
cfg.start = 0.0;
cfg.end = 9.0;
let dss = super::read_data(&cfg).unwrap();
assert_eq!(5, dss.len());
for ds in &dss {
assert_eq!(6, ds.num_windows);
assert_eq!(6, ds.histograms.len());
}
let hist_points: Vec<u32> = dss.iter().map(|ds| {
ds.histograms.iter().map(|h| h.num_points).sum()
}).collect();
let expected_hist_points = vec![
300, // 0-2: 100+100+100+0+0
600, // 0-4: 200+100+200+0+0+100
900, // 0-6: 300+100+250+50+0+200
1200, // 0-8: 400+100+250+150+50+250
1350, // 0-9: 450+100+250+200+100+250
];
for (expected, actual) in expected_hist_points.iter().zip(hist_points.iter()) {
assert_eq!(expected, actual);
}
}
// test convdt with a single time series
#[test]
fn read_data_convdt_single() {
let mut cfg = cfg();
cfg.metadata_file = "tests/data/metadata_convdt_single.dat".to_string();
cfg.convdt = 2.0;
cfg.start = 0.0;
cfg.end = 9.0;
let dss = super::read_data(&cfg).unwrap();
assert_eq!(5, dss.len());
for ds in &dss {
assert_eq!(1, ds.num_windows);
assert_eq!(1, ds.histograms.len());
}
let hist_points: Vec<u32> = dss.iter().map(|ds| {
ds.histograms.iter().map(|h| h.num_points).sum()
}).collect();
let expected_hist_points = vec![
0, // 0-2
100, // 0-4
200, // 0-6
250, // 0-8
250, // 0-9
];
for (expected, actual) in expected_hist_points.iter().zip(hist_points.iter()) {
assert_eq!(expected, actual);
}
}
#[test] #[test]
fn get_relative_path() { fn get_relative_path() {
let path1 = "path/to/some_file.dat"; let path1 = "path/to/some_file.dat";
@@ -489,24 +577,13 @@ mod tests {
#[test] #[test]
fn get_convdt_boundaries() { fn get_convdt_boundaries() {
let mut cfg = cfg(); let test = super::get_convdt_boundaries(10.0, 20.0, 10.0);
let timeseries: Vec<f64> = (0..31).map(|i| i as f64).collect();
println!("{:?}", timeseries);
cfg.start = 10.0;
cfg.end = 20.0;
cfg.convdt = 10.0;
let test = super::get_convdt_boundaries(&timeseries, &cfg);
println!("{:?}", test); println!("{:?}", test);
assert!(test.len() == 1); assert!(test.len() == 1);
assert_approx_eq!(test[0].0, 10.0); assert_approx_eq!(test[0].0, 10.0);
assert_approx_eq!(test[0].1, 20.0); assert_approx_eq!(test[0].1, 20.0);
cfg.start = 10.0; let test = super::get_convdt_boundaries(10.0, 20.0, 5.0);
cfg.end = 20.0;
cfg.convdt = 5.0;
let test = super::get_convdt_boundaries(&timeseries, &cfg);
println!("{:?}", test); println!("{:?}", test);
assert!(test.len() == 2); assert!(test.len() == 2);
assert_approx_eq!(test[0].0, 10.0); assert_approx_eq!(test[0].0, 10.0);
@@ -514,34 +591,14 @@ mod tests {
assert_approx_eq!(test[1].0, 10.0); assert_approx_eq!(test[1].0, 10.0);
assert_approx_eq!(test[1].1, 20.0); assert_approx_eq!(test[1].1, 20.0);
let timeseries: Vec<f64> = (10..21).map(|i| i as f64).collect(); let test = super::get_convdt_boundaries(5.0, 30.0, 10.0);
println!("{:?}", timeseries);
cfg.start = 10.0;
cfg.end = 20.0;
cfg.convdt = 10.0;
let test = super::get_convdt_boundaries(&timeseries, &cfg);
println!("{:?}", test); println!("{:?}", test);
assert!(test.len() == 1); assert!(test.len() == 3);
assert_approx_eq!(test[0].0, 10.0); assert_approx_eq!(test[0].0, 5.0);
assert_approx_eq!(test[0].1, 20.0); assert_approx_eq!(test[0].1, 15.0);
assert_approx_eq!(test[1].0, 5.0);
cfg.start = 5.0; assert_approx_eq!(test[1].1, 25.0);
cfg.end = 20.0; assert_approx_eq!(test[2].0, 5.0);
cfg.convdt = 10.0; assert_approx_eq!(test[2].1, 30.0);
let test = super::get_convdt_boundaries(&timeseries, &cfg);
println!("{:?}", test);
assert!(test.len() == 1);
assert_approx_eq!(test[0].0, 10.0);
assert_approx_eq!(test[0].1, 20.0);
cfg.start = 5.0;
cfg.end = 30.0;
cfg.convdt = 10.0;
let test = super::get_convdt_boundaries(&timeseries, &cfg);
println!("{:?}", test);
assert!(test.len() == 1);
assert_approx_eq!(test[0].0, 10.0);
assert_approx_eq!(test[0].1, 20.0);
} }
} }

View File

@@ -31,18 +31,18 @@ static k_B: f64 = 0.008_314_462_1; // kJ/mol*K
// Application config // Application config
#[derive(Debug)] #[derive(Debug)]
pub struct Config { pub struct Config {
pub metadata_file: String, pub metadata_file: String,
pub hist_min: Vec<f64>, pub hist_min: Vec<f64>,
pub hist_max: Vec<f64>, pub hist_max: Vec<f64>,
pub num_bins: Vec<usize>, pub num_bins: Vec<usize>,
pub dimens: usize, pub dimens: usize,
pub verbose: bool, pub verbose: bool,
pub tolerance: f64, pub tolerance: f64,
pub max_iterations: usize, pub max_iterations: usize,
pub temperature: f64, pub temperature: f64,
pub cyclic: bool, pub cyclic: bool,
pub output: String, pub output: String,
pub bootstrap: usize, pub bootstrap: usize,
pub bootstrap_seed: u64, pub bootstrap_seed: u64,
pub start: f64, pub start: f64,
pub end: f64, pub end: f64,
@@ -52,7 +52,7 @@ pub struct Config {
} }
impl fmt::Display for Config { impl fmt::Display for Config {
fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result { fn fmt(&self, f: &mut fmt::Formatter) -> fmt::Result {
write!(f, "Metadata={}, hist_min={:?}, hist_max={:?}, bins={:?}, write!(f, "Metadata={}, hist_min={:?}, hist_max={:?}, bins={:?},
verbose={}, tolerance={}, iterations={}, temperature={}, verbose={}, tolerance={}, iterations={}, temperature={},
cyclic={:?}, uncorr={:?}, bootstrap={:?}, seed={:?}, cyclic={:?}, uncorr={:?}, bootstrap={:?}, seed={:?},
@@ -70,7 +70,7 @@ impl fmt::Display for Config {
fn is_converged(old_F: &[f64], new_F: &[f64], tolerance: f64) -> bool { fn is_converged(old_F: &[f64], new_F: &[f64], tolerance: f64) -> bool {
// calculates abs diff between every old and new F and checks if any // calculates abs diff between every old and new F and checks if any
// is larger than tolerance // is larger than tolerance
!new_F.iter() !new_F.iter()
.zip(old_F.iter()) .zip(old_F.iter())
.map(|x| { (x.0-x.1).abs() }) .map(|x| { (x.0-x.1).abs() })
.any(|diff| { diff > tolerance }) .any(|diff| { diff > tolerance })
@@ -81,13 +81,13 @@ fn is_converged(old_F: &[f64], new_F: &[f64], tolerance: f64) -> bool {
// P(x) = \frac {\sum_{i=1}^N{n_i(x)}} // P(x) = \frac {\sum_{i=1}^N{n_i(x)}}
// {\sum_{i=1}^N{ N_i exp(\beta [F_i - U_{bias,i}(x)])}} // {\sum_{i=1}^N{ N_i exp(\beta [F_i - U_{bias,i}(x)])}}
fn calc_bin_probability(bin: usize, dataset: &Dataset, F: &[f64]) -> f64 { fn calc_bin_probability(bin: usize, dataset: &Dataset, F: &[f64]) -> f64 {
let mut denom_sum: f64 = 0.0; let mut denom_sum: f64 = 0.0;
let bin_count: f64 = dataset.get_weighted_bin_count(bin); let bin_count: f64 = dataset.get_weighted_bin_count(bin);
for (window, h) in dataset.histograms.iter().enumerate() { for (window, h) in dataset.histograms.iter().enumerate() {
let bias = dataset.get_bias(bin, window); let bias = dataset.get_bias(bin, window);
denom_sum += (dataset.weights[window] * h.num_points as f64) denom_sum += (dataset.weights[window] * h.num_points as f64)
* bias * F[window]; * bias * F[window];
} }
bin_count / denom_sum bin_count / denom_sum
} }
@@ -109,26 +109,26 @@ fn calc_window_F(window: usize, dataset: &Dataset, P: &[f64]) -> f64 {
// offsets F based on previous bias offsets F_prev. This updates the values in // offsets F based on previous bias offsets F_prev. This updates the values in
// vectors F and P. // vectors F and P.
fn perform_wham_iteration(dataset: &Dataset, F_prev: &[f64], F: &mut Vec<f64>, P: &mut Vec<f64>) { fn perform_wham_iteration(dataset: &Dataset, F_prev: &[f64], F: &mut Vec<f64>, P: &mut Vec<f64>) {
// Update P // Update P
// evaluate first WHAM equation for each bin to // evaluate first WHAM equation for each bin to
// estimate probabilities based on previous offsets (F_prev)) // estimate probabilities based on previous offsets (F_prev))
(0..dataset.num_bins).into_par_iter() (0..dataset.num_bins).into_par_iter()
.map(|bin| { calc_bin_probability(bin, dataset, F_prev) }) .map(|bin| { calc_bin_probability(bin, dataset, F_prev) })
.collect_into_vec(P); .collect_into_vec(P);
// Update F // Update F
// evaluate second WHAM equation for each window to // evaluate second WHAM equation for each window to
// estimate new bias offsets from propabilities // estimate new bias offsets from propabilities
(0..dataset.num_windows).into_par_iter() (0..dataset.num_windows).into_par_iter()
.map(|window| {calc_window_F(window, dataset, P)} ) .map(|window| {calc_window_F(window, dataset, P)} )
.collect_into_vec(F); .collect_into_vec(F);
} }
// Full WHAM calculation. Calls `perform_wham_iteration` until convergence // Full WHAM calculation. Calls `perform_wham_iteration` until convergence
// criteria are met or max iterations reached. // criteria are met or max iterations reached.
pub fn perform_wham(cfg: &Config, dataset: &Dataset) pub fn perform_wham(cfg: &Config, dataset: &Dataset)
-> Result<(Vec<f64>, Vec<f64>, Vec<f64>)> { -> Result<(Vec<f64>, Vec<f64>, Vec<f64>)> {
// allocate required vectors. // allocate required vectors.
// bin probability // bin probability
let mut P: Vec<f64> = vec![f64::NAN; dataset.num_bins]; let mut P: Vec<f64> = vec![f64::NAN; dataset.num_bins];
@@ -177,10 +177,10 @@ pub fn perform_wham(cfg: &Config, dataset: &Dataset)
} }
if iteration == cfg.max_iterations { if iteration == cfg.max_iterations {
bail!("WHAM not converged! (max iterations reached)"); bail!("WHAM not converged! (max iterations reached)");
} }
Ok((P, F, F_prev)) Ok((P, F, F_prev))
} }
pub fn run(cfg: &Config) -> Result<()>{ pub fn run(cfg: &Config) -> Result<()>{
@@ -227,17 +227,17 @@ pub fn run(cfg: &Config) -> Result<()>{
// get average difference between two bias offset sets // get average difference between two bias offset sets
fn diff_avg(F: &[f64], F_prev: &[f64]) -> f64 { fn diff_avg(F: &[f64], F_prev: &[f64]) -> f64 {
let mut F_sum: f64 = 0.0; let mut F_sum: f64 = 0.0;
for i in 0..F.len() { for i in 0..F.len() {
F_sum += (F[i]-F_prev[i]).abs() F_sum += (F[i]-F_prev[i]).abs()
} }
F_sum / F.len() as f64 F_sum / F.len() as f64
} }
// calculate the normalized free energy from probability values // calculate the normalized free energy from probability values
fn calc_free_energy(dataset: &Dataset, P: &[f64]) -> Vec<f64> { fn calc_free_energy(dataset: &Dataset, P: &[f64]) -> Vec<f64> {
let mut minimum = f64::MAX; let mut minimum = f64::MAX;
let mut free_energy: Vec<f64> = P.iter() let mut free_energy: Vec<f64> = P.iter()
.map(|p| { .map(|p| {
-dataset.kT * p.ln() -dataset.kT * p.ln()
}) })
@@ -257,28 +257,28 @@ fn calc_free_energy(dataset: &Dataset, P: &[f64]) -> Vec<f64> {
// Print the current WHAM iteration state. Dumps the PMF and associated vectors // Print the current WHAM iteration state. Dumps the PMF and associated vectors
fn dump_state(dataset: &Dataset, F: &[f64], F_prev: &[f64], P: &[f64], fn dump_state(dataset: &Dataset, F: &[f64], F_prev: &[f64], P: &[f64],
P_std: &[f64], A: &[f64], A_std: &[f64]) { P_std: &[f64], A: &[f64], A_std: &[f64]) {
// TODO fix output of F/F_prev // TODO fix output of F/F_prev
let out = std::io::stdout(); let out = std::io::stdout();
let mut lock = out.lock(); let mut lock = out.lock();
writeln!(lock, "# PMF").unwrap(); writeln!(lock, "# PMF").unwrap();
writeln!(lock, "#bin\t\tFree Energy\t\t+/-\t\tP(x)\t\t+/-").unwrap(); writeln!(lock, "#bin\t\tFree Energy\t\t+/-\t\tP(x)\t\t+/-").unwrap();
for bin in 0..dataset.num_bins { for bin in 0..dataset.num_bins {
writeln!(lock, "{:9.5}\t{:9.5}\t{:9.5}\t{:9.5}\t{:9.5}", writeln!(lock, "{:9.5}\t{:9.5}\t{:9.5}\t{:9.5}\t{:9.5}",
bin, A[bin], A_std[bin], P[bin], P_std[bin]).unwrap(); bin, A[bin], A_std[bin], P[bin], P_std[bin]).unwrap();
} }
writeln!(lock, "# Bias offsets").unwrap(); writeln!(lock, "# Bias offsets").unwrap();
writeln!(lock, "#Window\t\tF\t\tF_prev").unwrap(); writeln!(lock, "#Window\t\tF\t\tF_prev").unwrap();
for window in 0..dataset.num_windows { for window in 0..dataset.num_windows {
writeln!(lock, "{}\t{:9.5}\t{:8.8}", writeln!(lock, "{}\t{:9.5}\t{:8.8}",
window, F[window], (F[window]-F_prev[window]).abs()).unwrap(); window, F[window], (F[window]-F_prev[window]).abs()).unwrap();
} }
} }
#[cfg(test)] #[cfg(test)]
mod tests { mod tests {
use super::histogram::{Dataset,Histogram}; use super::histogram::{Dataset,Histogram};
use std::f64; use std::f64;
use super::k_B; use super::k_B;
macro_rules! assert_delta { macro_rules! assert_delta {
@@ -288,65 +288,65 @@ mod tests {
} }
fn create_test_dataset() -> Dataset { fn create_test_dataset() -> Dataset {
let h1 = Histogram::new(10, vec![0.0, 1.0, 1.0, 8.0, 0.0]); let h1 = Histogram::new(10, vec![0.0, 1.0, 1.0, 8.0, 0.0]);
let h2 = Histogram::new(10, vec![0.0, 0.0, 8.0, 1.0, 1.0]); let h2 = Histogram::new(10, vec![0.0, 0.0, 8.0, 1.0, 1.0]);
Dataset::new(5, vec![5], vec![1.0], vec![0.0], vec![4.0], Dataset::new(5, vec![5], vec![1.0], vec![0.0], vec![4.0],
vec![1.0, 1.0], vec![10.0, 10.0], 300.0*k_B, vec![h1, h2], false) vec![1.0, 1.0], vec![10.0, 10.0], 300.0*k_B, vec![h1, h2], false)
} }
#[test]
fn is_converged() {
let new = vec![1.0,1.0];
let old = vec![0.95, 1.0];
let tolerance = 0.1;
let converged = super::is_converged(&old, &new, tolerance);
assert!(converged);
let old = vec![0.8, 1.0];
let converged = super::is_converged(&old, &new, tolerance);
assert!(!converged);
}
#[test] #[test]
fn calc_bin_probability() { fn is_converged() {
let dataset = create_test_dataset(); let new = vec![1.0,1.0];
let F = vec![1.0; dataset.num_bins] ; let old = vec![0.95, 1.0];
let tolerance = 0.1;
let converged = super::is_converged(&old, &new, tolerance);
assert!(converged);
let old = vec![0.8, 1.0];
let converged = super::is_converged(&old, &new, tolerance);
assert!(!converged);
}
#[test]
fn calc_bin_probability() {
let dataset = create_test_dataset();
let F = vec![1.0; dataset.num_bins] ;
let expected = vec!(0.0, 0.082_529_668_703_131_6, 40.923_558_470_974_93, let expected = vec!(0.0, 0.082_529_668_703_131_6, 40.923_558_470_974_93,
124_226.700_033_77, 2_308_526_035.528_374_7); 124_226.700_033_77, 2_308_526_035.528_374_7);
expected.iter().enumerate().for_each(|(i, exp)| { expected.iter().enumerate().for_each(|(i, exp)| {
let p = super::calc_bin_probability(i, &dataset, &F); let p = super::calc_bin_probability(i, &dataset, &F);
assert_delta!(exp, p, 0.000_000_1); assert_delta!(exp, p, 0.000_000_1);
}) })
} }
#[test] #[test]
fn calc_bias_offset() { fn calc_bias_offset() {
let dataset = create_test_dataset(); let dataset = create_test_dataset();
let probability = vec!(0.0, 0.1, 0.2, 0.3, 0.4); let probability = vec!(0.0, 0.1, 0.2, 0.3, 0.4);
let expected = vec!(15.927_477_169_990_633, 15.927_477_169_990_633); let expected = vec!(15.927_477_169_990_633, 15.927_477_169_990_633);
expected.iter().enumerate().for_each(|(i, exp)| { expected.iter().enumerate().for_each(|(i, exp)| {
let F = super::calc_window_F(i, &dataset, &probability); let F = super::calc_window_F(i, &dataset, &probability);
assert_delta!(exp, F, 0.000_000_1); assert_delta!(exp, F, 0.000_000_1);
}) })
} }
#[test] #[test]
fn perform_wham_iteration() { fn perform_wham_iteration() {
let dataset = create_test_dataset(); let dataset = create_test_dataset();
let prev_F = vec![1.0; dataset.num_windows]; let prev_F = vec![1.0; dataset.num_windows];
let mut F = vec![f64::NAN; dataset.num_windows]; let mut F = vec![f64::NAN; dataset.num_windows];
let mut P = vec![f64::NAN; dataset.num_bins]; let mut P = vec![f64::NAN; dataset.num_bins];
super::perform_wham_iteration(&dataset, &prev_F, &mut F, &mut P); super::perform_wham_iteration(&dataset, &prev_F, &mut F, &mut P);
let expected_F = vec!(1.0, 1.0); let expected_F = vec!(1.0, 1.0);
let expected_P = vec!(0.0, 0.082_529_668_703_131_6, 40.923_558_470_974_93, let expected_P = vec!(0.0, 0.082_529_668_703_131_6, 40.923_558_470_974_93,
124_226.700_033_77, 2_308_526_035.528_374_7); 124_226.700_033_77, 2_308_526_035.528_374_7);
for bin in 0..dataset.num_bins { for bin in 0..dataset.num_bins {
assert_delta!(expected_P[bin], P[bin], 0.01) assert_delta!(expected_P[bin], P[bin], 0.01)
} }
for window in 0..dataset.num_windows { for window in 0..dataset.num_windows {
assert_delta!(expected_F[window], F[window], 0.01) assert_delta!(expected_F[window], F[window], 0.01)
} }
} }
} }

View File

@@ -2,6 +2,8 @@ extern crate wham;
#[macro_use] #[macro_use]
extern crate clap; extern crate clap;
extern crate rand; extern crate rand;
#[macro_use]
extern crate error_chain;
use rand::prelude::*; use rand::prelude::*;
use clap::App; use clap::App;
@@ -11,20 +13,20 @@ use std::process;
// Parse command line arguments into a Config struct // Parse command line arguments into a Config struct
fn cli() -> Result<Config> { fn cli() -> Result<Config> {
let yaml = load_yaml!("cli.yml"); let yaml = load_yaml!("cli.yml");
let matches = App::from_yaml(yaml).get_matches(); let matches = App::from_yaml(yaml).get_matches();
let metadata_file = matches.value_of("metadata").unwrap().to_string(); let metadata_file = matches.value_of("metadata").unwrap().to_string();
let verbose: bool = matches.is_present("verbose"); let verbose: bool = matches.is_present("verbose");
let temperature: f64 = matches.value_of("temperature").unwrap().parse() let temperature: f64 = matches.value_of("temperature").unwrap().parse()
.chain_err(|| "Cannot read temperature.")?; .chain_err(|| "Cannot read temperature.")?;
let tolerance: f64 = matches.value_of("tolerance").unwrap_or("0.000001").parse() let tolerance: f64 = matches.value_of("tolerance").unwrap_or("0.000001").parse()
.chain_err(|| "Cannot read tolerance.")?; .chain_err(|| "Cannot read tolerance.")?;
let max_iterations: usize = matches.value_of("iterations").unwrap_or("100000").parse() let max_iterations: usize = matches.value_of("iterations").unwrap_or("100000").parse()
.chain_err(|| "Cannot parse iterations.")?; .chain_err(|| "Cannot parse iterations.")?;
let output = matches.value_of("output").unwrap_or("wham.out").to_string(); let output = matches.value_of("output").unwrap_or("wham.out").to_string();
let cyclic: bool = matches.is_present("cyclic"); let cyclic: bool = matches.is_present("cyclic");
let hist_min: Vec<f64> = matches.value_of("min_hist").unwrap() let hist_min: Vec<f64> = matches.value_of("min_hist").unwrap()
.split(',').map(|x| { .split(',').map(|x| {
if x.to_ascii_lowercase() == "pi" { if x.to_ascii_lowercase() == "pi" {
std::f64::consts::PI std::f64::consts::PI
@@ -34,7 +36,7 @@ fn cli() -> Result<Config> {
x.parse().unwrap() x.parse().unwrap()
} }
}).collect(); }).collect();
let hist_max: Vec<f64> = matches.value_of("max_hist").unwrap() let hist_max: Vec<f64> = matches.value_of("max_hist").unwrap()
.split(',').map(|x| { .split(',').map(|x| {
if x.to_ascii_lowercase() == "pi" { if x.to_ascii_lowercase() == "pi" {
std::f64::consts::PI std::f64::consts::PI
@@ -44,10 +46,10 @@ fn cli() -> Result<Config> {
x.parse().unwrap() x.parse().unwrap()
} }
}).collect(); }).collect();
let num_bins: Vec<usize> = matches.value_of("bins").unwrap() let num_bins: Vec<usize> = matches.value_of("bins").unwrap()
.split(',').map(|x| { x.parse().unwrap() }).collect(); .split(',').map(|x| { x.parse().unwrap() }).collect();
let bootstrap: usize = matches.value_of("bootstrap").unwrap_or("0").parse() let bootstrap: usize = matches.value_of("bootstrap").unwrap_or("0").parse()
.chain_err(|| "Cannot parse bootstrap iteration.")?; .chain_err(|| "Cannot parse bootstrap iteration.")?;
let bootstrap_seed: u64 = matches.value_of("bootstrap_seed") let bootstrap_seed: u64 = matches.value_of("bootstrap_seed")
.unwrap_or({ .unwrap_or({
let mut rng = rand::thread_rng(); let mut rng = rand::thread_rng();
@@ -68,25 +70,28 @@ fn cli() -> Result<Config> {
} }
let dimens = num_bins.len(); let dimens = num_bins.len();
if matches.is_present("convdt") && (!matches.is_present("start") || !matches.is_present("end")) {
bail!("--convdt requires --start and --end to be set.")
}
let convdt: f64 = matches.value_of("convdt").unwrap_or("0").parse() let convdt: f64 = matches.value_of("convdt").unwrap_or("0").parse()
.chain_err(|| "Cannot parse convdt.")?; .chain_err(|| "Cannot parse convdt.")?;
let ignore_empty: bool = matches.is_present("ignore_empty"); let ignore_empty: bool = matches.is_present("ignore_empty");
Ok(wham::Config{metadata_file, hist_min, hist_max, num_bins, dimens, Ok(wham::Config{metadata_file, hist_min, hist_max, num_bins, dimens,
verbose, tolerance, max_iterations, temperature, cyclic, output, verbose, tolerance, max_iterations, temperature, cyclic, output,
bootstrap, bootstrap_seed, start, end, uncorr, convdt, ignore_empty}) bootstrap, bootstrap_seed, start, end, uncorr, convdt, ignore_empty})
} }
fn main() { fn main() {
let cfg = cli().expect("Failed to parse CLI."); let cfg = cli().expect("Failed to parse CLI.");
if let Err(error) = wham::run(&cfg) { if let Err(error) = wham::run(&cfg) {
eprintln!("Error: {}", error); eprintln!("Error: {}", error);
for e in error.iter().skip(1) { for e in error.iter().skip(1) {
eprintln!("Reason: {}", e) eprintln!("Reason: {}", e)
} }
process::exit(1); process::exit(1);
} }
} }

View File

@@ -108,4 +108,20 @@ mod integration {
)); ));
} }
#[test]
fn convdt_needs_start_end() {
let output = get_command()
.args(&["--bins", "100", "--min", "-3.0", "--max", "3.0", "-T", "300"])
.args(&["-f", "tests/data/metadata_unparseable1.dat"])
.args(&["-o", "/dev/null"])
.args(&["--convdt", "100"])
.output()
.expect("failed to execute process");
let output = String::from_utf8_lossy(&output.stderr);
println!("{}", output);
assert!(output.to_string().contains(
"--convdt requires --start and --end to be set"
));
}
} }

File diff suppressed because it is too large Load Diff

500
tests/data/COLVAR_0-10.xvg Normal file
View File

@@ -0,0 +1,500 @@
0.020000 -0.377860
0.040000 0.010992
0.060000 0.123074
0.080000 0.108291
0.100000 0.261607
0.120000 0.185592
0.140000 0.398266
0.160000 0.461779
0.180000 0.105976
0.200000 0.214612
0.220000 0.239492
0.240000 0.320299
0.260000 0.344827
0.280000 0.223717
0.300000 0.445152
0.320000 0.487640
0.340000 0.568231
0.360000 0.264504
0.380000 0.156700
0.400000 0.339014
0.420000 0.007749
0.440000 -0.024582
0.460000 -0.103746
0.480000 -0.238796
0.500000 0.267790
0.520000 -0.172984
0.540000 -0.162007
0.560000 -0.022318
0.580000 -0.274371
0.600000 -0.170447
0.620000 -0.464711
0.640000 -0.770842
0.660000 -0.160143
0.680000 -0.475005
0.700000 -0.445097
0.720000 -0.251824
0.740000 -0.399393
0.760000 -0.009600
0.780000 0.036937
0.800000 -0.288376
0.820000 0.088705
0.840000 0.035215
0.860000 0.026541
0.880000 0.041992
0.900000 -0.221743
0.920000 0.340514
0.940000 0.290576
0.960000 0.425674
0.980000 0.417250
1.000000 0.511139
1.020000 0.754747
1.040000 0.559245
1.060000 0.278543
1.080000 0.290714
1.100000 0.350660
1.120000 0.265198
1.140000 0.136869
1.160000 0.122245
1.180000 0.298347
1.200000 0.442561
1.220000 0.318732
1.240000 -0.009101
1.260000 0.210199
1.280000 0.092197
1.300000 -0.218855
1.320000 -0.258758
1.340000 -0.547873
1.360000 -0.310370
1.380000 -0.162075
1.400000 -0.425929
1.420000 -0.138428
1.440000 -0.157315
1.460000 -0.141138
1.480000 -0.127917
1.500000 -0.245431
1.520000 -0.346983
1.540000 -0.165304
1.560000 -0.503931
1.580000 -0.515063
1.600000 -0.155765
1.620000 -0.054631
1.640000 0.208200
1.660000 0.237158
1.680000 0.227077
1.700000 0.358599
1.720000 0.361749
1.740000 0.170592
1.760000 0.248700
1.780000 0.256466
1.800000 0.342915
1.820000 0.169221
1.840000 0.339560
1.860000 0.205654
1.880000 0.537767
1.900000 0.402014
1.920000 0.391279
1.940000 0.315378
1.960000 0.149920
1.980000 0.280272
2.000000 0.127339
2.020000 -0.111932
2.040000 0.259792
2.060000 -0.041852
2.080000 0.153340
2.100000 0.166558
2.120000 -0.227151
2.140000 0.170747
2.160000 -0.168786
2.180000 -0.309401
2.200000 -0.207106
2.220000 -0.595975
2.240000 -0.380839
2.260000 -0.384326
2.280000 -0.595164
2.300000 -0.115474
2.320000 -0.194623
2.340000 -0.165108
2.360000 -0.079131
2.380000 -0.248973
2.400000 -0.141384
2.420000 0.067492
2.440000 -0.167260
2.460000 0.069070
2.480000 0.109517
2.500000 0.275638
2.520000 0.409559
2.540000 0.407971
2.560000 0.480279
2.580000 0.612092
2.600000 0.678006
2.620000 0.390398
2.640000 0.480483
2.660000 0.382538
2.680000 0.351606
2.700000 0.242267
2.720000 0.124043
2.740000 0.006109
2.760000 0.224920
2.780000 0.103645
2.800000 0.136471
2.820000 0.047265
2.840000 0.072428
2.860000 0.083309
2.880000 -0.272198
2.900000 -0.255573
2.920000 -0.152599
2.940000 -0.291048
2.960000 -0.198565
2.980000 -0.269126
3.000000 -0.476225
3.020000 -0.155645
3.040000 -0.280627
3.060000 -0.127538
3.080000 0.012533
3.100000 -0.179725
3.120000 -0.216130
3.140000 -0.207261
3.160000 -0.551407
3.180000 0.039334
3.200000 -0.009344
3.220000 0.013060
3.240000 0.273527
3.260000 0.109360
3.280000 0.421753
3.300000 0.241420
3.320000 0.201920
3.340000 0.357590
3.360000 0.289825
3.380000 0.040550
3.400000 0.345033
3.420000 0.109547
3.440000 0.557827
3.460000 0.495151
3.480000 0.382503
3.500000 0.311630
3.520000 0.402886
3.540000 0.145753
3.560000 0.053371
3.580000 -0.099518
3.600000 -0.217586
3.620000 -0.078479
3.640000 -0.215597
3.660000 -0.102704
3.680000 -0.318363
3.700000 -0.113242
3.720000 -0.076240
3.740000 -0.188385
3.760000 -0.237573
3.780000 -0.225944
3.800000 -0.366487
3.820000 -0.335452
3.840000 -0.318478
3.860000 -0.352154
3.880000 -0.235007
3.900000 0.120242
3.920000 -0.198549
3.940000 0.079292
3.960000 0.211743
3.980000 0.180080
4.000000 0.214707
4.020000 0.021381
4.040000 0.081417
4.060000 0.114621
4.080000 0.011734
4.100000 -0.003705
4.120000 0.051130
4.140000 0.121488
4.160000 0.340722
4.180000 0.252438
4.200000 0.439041
4.220000 0.405294
4.240000 0.475172
4.260000 0.211356
4.280000 0.320336
4.300000 0.245725
4.320000 0.200433
4.340000 0.127897
4.360000 0.164240
4.380000 0.030642
4.400000 0.204649
4.420000 -0.031684
4.440000 -0.136474
4.460000 0.166935
4.480000 -0.205537
4.500000 0.020623
4.520000 -0.141182
4.540000 -0.006324
4.560000 -0.120097
4.580000 -0.141139
4.600000 -0.023482
4.620000 -0.263421
4.640000 -0.309596
4.660000 -0.053286
4.680000 -0.311061
4.700000 -0.197194
4.720000 -0.004616
4.740000 -0.197131
4.760000 0.040260
4.780000 -0.147501
4.800000 -0.232280
4.820000 -0.080091
4.840000 -0.025872
4.860000 0.069618
4.880000 0.132024
4.900000 0.109382
4.920000 0.317044
4.940000 0.238353
4.960000 0.391818
4.980000 0.352735
5.000000 0.346928
5.020000 0.559155
5.040000 0.324917
5.060000 0.384628
5.080000 0.437213
5.100000 0.500261
5.120000 0.524957
5.140000 0.318692
5.160000 0.407006
5.180000 0.386429
5.200000 0.121732
5.220000 0.103876
5.240000 -0.007759
5.260000 -0.228426
5.280000 0.091557
5.300000 -0.141686
5.320000 -0.175769
5.340000 0.056234
5.360000 -0.139847
5.380000 -0.248525
5.400000 -0.405083
5.420000 -0.543086
5.440000 -0.605228
5.460000 -0.453772
5.480000 -0.632332
5.500000 -0.278857
5.520000 -0.125809
5.540000 -0.307619
5.560000 -0.156702
5.580000 -0.225417
5.600000 -0.103164
5.620000 -0.179194
5.640000 -0.127734
5.660000 -0.188341
5.680000 0.143537
5.700000 0.047410
5.720000 0.233912
5.740000 0.342515
5.760000 0.480074
5.780000 0.526478
5.800000 0.599988
5.820000 0.428251
5.840000 0.408720
5.860000 0.501119
5.880000 0.229850
5.900000 0.255165
5.920000 0.084974
5.940000 0.230521
5.960000 0.289550
5.980000 0.387046
6.000000 0.244289
6.020000 0.402885
6.040000 0.273234
6.060000 0.239922
6.080000 -0.061710
6.100000 -0.188653
6.120000 -0.176610
6.140000 -0.539426
6.160000 -0.292322
6.180000 -0.368200
6.200000 -0.442046
6.220000 -0.086956
6.240000 -0.237524
6.260000 -0.109149
6.280000 0.114621
6.300000 -0.321428
6.320000 -0.323525
6.340000 -0.451779
6.360000 -0.619271
6.380000 -0.210074
6.400000 -0.308296
6.420000 -0.096123
6.440000 0.200226
6.460000 0.195091
6.480000 0.438811
6.500000 0.317047
6.520000 0.432486
6.540000 0.375387
6.560000 0.302796
6.580000 0.173397
6.600000 0.314706
6.620000 0.329726
6.640000 0.499638
6.660000 0.390596
6.680000 0.531012
6.700000 0.648674
6.720000 0.504828
6.740000 0.506630
6.760000 0.264208
6.780000 0.171029
6.800000 -0.042753
6.820000 -0.232043
6.840000 -0.121052
6.860000 -0.080382
6.880000 -0.214688
6.900000 -0.029242
6.920000 -0.100849
6.940000 -0.254431
6.960000 -0.294761
6.980000 -0.387433
7.000000 -0.435287
7.020000 -0.392397
7.040000 -0.361231
7.060000 -0.314569
7.080000 -0.418825
7.100000 -0.446802
7.120000 -0.107055
7.140000 -0.062352
7.160000 0.048612
7.180000 0.090056
7.200000 0.026421
7.220000 0.133539
7.240000 0.015399
7.260000 0.169799
7.280000 0.188015
7.300000 0.186057
7.320000 0.267611
7.340000 0.346012
7.360000 0.462420
7.380000 0.600556
7.400000 0.557739
7.420000 0.432258
7.440000 0.377746
7.460000 0.193769
7.480000 0.222955
7.500000 0.090057
7.520000 0.147336
7.540000 0.166292
7.560000 0.100436
7.580000 -0.021099
7.600000 -0.068353
7.620000 0.019654
7.640000 -0.089638
7.660000 -0.043250
7.680000 -0.303386
7.700000 -0.370787
7.720000 -0.534350
7.740000 -0.506331
7.760000 -0.465337
7.780000 -0.299286
7.800000 -0.128983
7.820000 -0.155927
7.840000 -0.185521
7.860000 -0.254707
7.880000 -0.052327
7.900000 -0.195514
7.920000 -0.097241
7.940000 -0.173111
7.960000 -0.146022
7.980000 -0.002634
8.000000 0.090475
8.020000 0.224838
8.040000 0.338389
8.060000 0.324804
8.080000 0.315508
8.100000 0.285864
8.120000 0.089370
8.140000 0.378119
8.160000 0.093042
8.180000 0.326371
8.200000 0.214992
8.220000 0.272968
8.240000 0.466140
8.260000 0.441360
8.280000 0.463138
8.300000 0.476466
8.320000 0.264170
8.340000 0.169713
8.360000 -0.065215
8.380000 -0.075488
8.400000 0.042980
8.420000 -0.149045
8.440000 0.047137
8.460000 -0.214226
8.480000 -0.051177
8.500000 -0.084061
8.520000 -0.126147
8.540000 -0.199647
8.560000 -0.200450
8.580000 -0.342299
8.600000 -0.478008
8.620000 -0.394154
8.640000 -0.339514
8.660000 -0.084231
8.680000 -0.047599
8.700000 -0.043127
8.720000 -0.050035
8.740000 -0.000872
8.760000 0.042464
8.780000 0.050395
8.800000 0.046709
8.820000 0.210556
8.840000 0.194481
8.860000 0.211542
8.880000 0.241095
8.900000 0.318334
8.920000 0.492715
8.940000 0.420409
8.960000 0.422387
8.980000 0.259892
9.000000 0.266956
9.020000 0.244336
9.040000 0.175098
9.060000 0.211758
9.080000 0.213090
9.100000 0.118259
9.120000 0.131022
9.140000 0.061728
9.160000 0.036211
9.180000 -0.023149
9.200000 -0.126204
9.220000 -0.317746
9.240000 -0.504112
9.260000 -0.432455
9.280000 -0.499697
9.300000 -0.249082
9.320000 -0.307040
9.340000 -0.226435
9.360000 -0.417869
9.380000 -0.249587
9.400000 -0.240881
9.420000 -0.210606
9.440000 -0.167904
9.460000 -0.191761
9.480000 -0.153305
9.500000 -0.129567
9.520000 -0.129675
9.540000 0.212965
9.560000 0.403723
9.580000 0.391514
9.600000 0.367988
9.620000 0.335965
9.640000 0.511338
9.660000 0.267671
9.680000 0.260535
9.700000 0.240616
9.720000 0.292980
9.740000 0.365138
9.760000 0.289925
9.780000 0.329946
9.800000 0.448412
9.820000 0.470235
9.840000 0.311949
9.860000 0.052864
9.880000 0.122768
9.900000 0.012715
9.920000 -0.122779
9.940000 -0.172054
9.960000 -0.322282
9.980000 -0.102970
10.000000 -0.056880

100
tests/data/COLVAR_0-2.xvg Normal file
View File

@@ -0,0 +1,100 @@
0.020000 -0.377860
0.040000 0.010992
0.060000 0.123074
0.080000 0.108291
0.100000 0.261607
0.120000 0.185592
0.140000 0.398266
0.160000 0.461779
0.180000 0.105976
0.200000 0.214612
0.220000 0.239492
0.240000 0.320299
0.260000 0.344827
0.280000 0.223717
0.300000 0.445152
0.320000 0.487640
0.340000 0.568231
0.360000 0.264504
0.380000 0.156700
0.400000 0.339014
0.420000 0.007749
0.440000 -0.024582
0.460000 -0.103746
0.480000 -0.238796
0.500000 0.267790
0.520000 -0.172984
0.540000 -0.162007
0.560000 -0.022318
0.580000 -0.274371
0.600000 -0.170447
0.620000 -0.464711
0.640000 -0.770842
0.660000 -0.160143
0.680000 -0.475005
0.700000 -0.445097
0.720000 -0.251824
0.740000 -0.399393
0.760000 -0.009600
0.780000 0.036937
0.800000 -0.288376
0.820000 0.088705
0.840000 0.035215
0.860000 0.026541
0.880000 0.041992
0.900000 -0.221743
0.920000 0.340514
0.940000 0.290576
0.960000 0.425674
0.980000 0.417250
1.000000 0.511139
1.020000 0.754747
1.040000 0.559245
1.060000 0.278543
1.080000 0.290714
1.100000 0.350660
1.120000 0.265198
1.140000 0.136869
1.160000 0.122245
1.180000 0.298347
1.200000 0.442561
1.220000 0.318732
1.240000 -0.009101
1.260000 0.210199
1.280000 0.092197
1.300000 -0.218855
1.320000 -0.258758
1.340000 -0.547873
1.360000 -0.310370
1.380000 -0.162075
1.400000 -0.425929
1.420000 -0.138428
1.440000 -0.157315
1.460000 -0.141138
1.480000 -0.127917
1.500000 -0.245431
1.520000 -0.346983
1.540000 -0.165304
1.560000 -0.503931
1.580000 -0.515063
1.600000 -0.155765
1.620000 -0.054631
1.640000 0.208200
1.660000 0.237158
1.680000 0.227077
1.700000 0.358599
1.720000 0.361749
1.740000 0.170592
1.760000 0.248700
1.780000 0.256466
1.800000 0.342915
1.820000 0.169221
1.840000 0.339560
1.860000 0.205654
1.880000 0.537767
1.900000 0.402014
1.920000 0.391279
1.940000 0.315378
1.960000 0.149920
1.980000 0.280272
2.000000 0.127339

250
tests/data/COLVAR_0-5.xvg Normal file
View File

@@ -0,0 +1,250 @@
0.020000 -0.377860
0.040000 0.010992
0.060000 0.123074
0.080000 0.108291
0.100000 0.261607
0.120000 0.185592
0.140000 0.398266
0.160000 0.461779
0.180000 0.105976
0.200000 0.214612
0.220000 0.239492
0.240000 0.320299
0.260000 0.344827
0.280000 0.223717
0.300000 0.445152
0.320000 0.487640
0.340000 0.568231
0.360000 0.264504
0.380000 0.156700
0.400000 0.339014
0.420000 0.007749
0.440000 -0.024582
0.460000 -0.103746
0.480000 -0.238796
0.500000 0.267790
0.520000 -0.172984
0.540000 -0.162007
0.560000 -0.022318
0.580000 -0.274371
0.600000 -0.170447
0.620000 -0.464711
0.640000 -0.770842
0.660000 -0.160143
0.680000 -0.475005
0.700000 -0.445097
0.720000 -0.251824
0.740000 -0.399393
0.760000 -0.009600
0.780000 0.036937
0.800000 -0.288376
0.820000 0.088705
0.840000 0.035215
0.860000 0.026541
0.880000 0.041992
0.900000 -0.221743
0.920000 0.340514
0.940000 0.290576
0.960000 0.425674
0.980000 0.417250
1.000000 0.511139
1.020000 0.754747
1.040000 0.559245
1.060000 0.278543
1.080000 0.290714
1.100000 0.350660
1.120000 0.265198
1.140000 0.136869
1.160000 0.122245
1.180000 0.298347
1.200000 0.442561
1.220000 0.318732
1.240000 -0.009101
1.260000 0.210199
1.280000 0.092197
1.300000 -0.218855
1.320000 -0.258758
1.340000 -0.547873
1.360000 -0.310370
1.380000 -0.162075
1.400000 -0.425929
1.420000 -0.138428
1.440000 -0.157315
1.460000 -0.141138
1.480000 -0.127917
1.500000 -0.245431
1.520000 -0.346983
1.540000 -0.165304
1.560000 -0.503931
1.580000 -0.515063
1.600000 -0.155765
1.620000 -0.054631
1.640000 0.208200
1.660000 0.237158
1.680000 0.227077
1.700000 0.358599
1.720000 0.361749
1.740000 0.170592
1.760000 0.248700
1.780000 0.256466
1.800000 0.342915
1.820000 0.169221
1.840000 0.339560
1.860000 0.205654
1.880000 0.537767
1.900000 0.402014
1.920000 0.391279
1.940000 0.315378
1.960000 0.149920
1.980000 0.280272
2.000000 0.127339
2.020000 -0.111932
2.040000 0.259792
2.060000 -0.041852
2.080000 0.153340
2.100000 0.166558
2.120000 -0.227151
2.140000 0.170747
2.160000 -0.168786
2.180000 -0.309401
2.200000 -0.207106
2.220000 -0.595975
2.240000 -0.380839
2.260000 -0.384326
2.280000 -0.595164
2.300000 -0.115474
2.320000 -0.194623
2.340000 -0.165108
2.360000 -0.079131
2.380000 -0.248973
2.400000 -0.141384
2.420000 0.067492
2.440000 -0.167260
2.460000 0.069070
2.480000 0.109517
2.500000 0.275638
2.520000 0.409559
2.540000 0.407971
2.560000 0.480279
2.580000 0.612092
2.600000 0.678006
2.620000 0.390398
2.640000 0.480483
2.660000 0.382538
2.680000 0.351606
2.700000 0.242267
2.720000 0.124043
2.740000 0.006109
2.760000 0.224920
2.780000 0.103645
2.800000 0.136471
2.820000 0.047265
2.840000 0.072428
2.860000 0.083309
2.880000 -0.272198
2.900000 -0.255573
2.920000 -0.152599
2.940000 -0.291048
2.960000 -0.198565
2.980000 -0.269126
3.000000 -0.476225
3.020000 -0.155645
3.040000 -0.280627
3.060000 -0.127538
3.080000 0.012533
3.100000 -0.179725
3.120000 -0.216130
3.140000 -0.207261
3.160000 -0.551407
3.180000 0.039334
3.200000 -0.009344
3.220000 0.013060
3.240000 0.273527
3.260000 0.109360
3.280000 0.421753
3.300000 0.241420
3.320000 0.201920
3.340000 0.357590
3.360000 0.289825
3.380000 0.040550
3.400000 0.345033
3.420000 0.109547
3.440000 0.557827
3.460000 0.495151
3.480000 0.382503
3.500000 0.311630
3.520000 0.402886
3.540000 0.145753
3.560000 0.053371
3.580000 -0.099518
3.600000 -0.217586
3.620000 -0.078479
3.640000 -0.215597
3.660000 -0.102704
3.680000 -0.318363
3.700000 -0.113242
3.720000 -0.076240
3.740000 -0.188385
3.760000 -0.237573
3.780000 -0.225944
3.800000 -0.366487
3.820000 -0.335452
3.840000 -0.318478
3.860000 -0.352154
3.880000 -0.235007
3.900000 0.120242
3.920000 -0.198549
3.940000 0.079292
3.960000 0.211743
3.980000 0.180080
4.000000 0.214707
4.020000 0.021381
4.040000 0.081417
4.060000 0.114621
4.080000 0.011734
4.100000 -0.003705
4.120000 0.051130
4.140000 0.121488
4.160000 0.340722
4.180000 0.252438
4.200000 0.439041
4.220000 0.405294
4.240000 0.475172
4.260000 0.211356
4.280000 0.320336
4.300000 0.245725
4.320000 0.200433
4.340000 0.127897
4.360000 0.164240
4.380000 0.030642
4.400000 0.204649
4.420000 -0.031684
4.440000 -0.136474
4.460000 0.166935
4.480000 -0.205537
4.500000 0.020623
4.520000 -0.141182
4.540000 -0.006324
4.560000 -0.120097
4.580000 -0.141139
4.600000 -0.023482
4.620000 -0.263421
4.640000 -0.309596
4.660000 -0.053286
4.680000 -0.311061
4.700000 -0.197194
4.720000 -0.004616
4.740000 -0.197131
4.760000 0.040260
4.780000 -0.147501
4.800000 -0.232280
4.820000 -0.080091
4.840000 -0.025872
4.860000 0.069618
4.880000 0.132024
4.900000 0.109382
4.920000 0.317044
4.940000 0.238353
4.960000 0.391818
4.980000 0.352735
5.000000 0.346928

250
tests/data/COLVAR_2-7.xvg Normal file
View File

@@ -0,0 +1,250 @@
2.020000 -0.111932
2.040000 0.259792
2.060000 -0.041852
2.080000 0.153340
2.100000 0.166558
2.120000 -0.227151
2.140000 0.170747
2.160000 -0.168786
2.180000 -0.309401
2.200000 -0.207106
2.220000 -0.595975
2.240000 -0.380839
2.260000 -0.384326
2.280000 -0.595164
2.300000 -0.115474
2.320000 -0.194623
2.340000 -0.165108
2.360000 -0.079131
2.380000 -0.248973
2.400000 -0.141384
2.420000 0.067492
2.440000 -0.167260
2.460000 0.069070
2.480000 0.109517
2.500000 0.275638
2.520000 0.409559
2.540000 0.407971
2.560000 0.480279
2.580000 0.612092
2.600000 0.678006
2.620000 0.390398
2.640000 0.480483
2.660000 0.382538
2.680000 0.351606
2.700000 0.242267
2.720000 0.124043
2.740000 0.006109
2.760000 0.224920
2.780000 0.103645
2.800000 0.136471
2.820000 0.047265
2.840000 0.072428
2.860000 0.083309
2.880000 -0.272198
2.900000 -0.255573
2.920000 -0.152599
2.940000 -0.291048
2.960000 -0.198565
2.980000 -0.269126
3.000000 -0.476225
3.020000 -0.155645
3.040000 -0.280627
3.060000 -0.127538
3.080000 0.012533
3.100000 -0.179725
3.120000 -0.216130
3.140000 -0.207261
3.160000 -0.551407
3.180000 0.039334
3.200000 -0.009344
3.220000 0.013060
3.240000 0.273527
3.260000 0.109360
3.280000 0.421753
3.300000 0.241420
3.320000 0.201920
3.340000 0.357590
3.360000 0.289825
3.380000 0.040550
3.400000 0.345033
3.420000 0.109547
3.440000 0.557827
3.460000 0.495151
3.480000 0.382503
3.500000 0.311630
3.520000 0.402886
3.540000 0.145753
3.560000 0.053371
3.580000 -0.099518
3.600000 -0.217586
3.620000 -0.078479
3.640000 -0.215597
3.660000 -0.102704
3.680000 -0.318363
3.700000 -0.113242
3.720000 -0.076240
3.740000 -0.188385
3.760000 -0.237573
3.780000 -0.225944
3.800000 -0.366487
3.820000 -0.335452
3.840000 -0.318478
3.860000 -0.352154
3.880000 -0.235007
3.900000 0.120242
3.920000 -0.198549
3.940000 0.079292
3.960000 0.211743
3.980000 0.180080
4.000000 0.214707
4.020000 0.021381
4.040000 0.081417
4.060000 0.114621
4.080000 0.011734
4.100000 -0.003705
4.120000 0.051130
4.140000 0.121488
4.160000 0.340722
4.180000 0.252438
4.200000 0.439041
4.220000 0.405294
4.240000 0.475172
4.260000 0.211356
4.280000 0.320336
4.300000 0.245725
4.320000 0.200433
4.340000 0.127897
4.360000 0.164240
4.380000 0.030642
4.400000 0.204649
4.420000 -0.031684
4.440000 -0.136474
4.460000 0.166935
4.480000 -0.205537
4.500000 0.020623
4.520000 -0.141182
4.540000 -0.006324
4.560000 -0.120097
4.580000 -0.141139
4.600000 -0.023482
4.620000 -0.263421
4.640000 -0.309596
4.660000 -0.053286
4.680000 -0.311061
4.700000 -0.197194
4.720000 -0.004616
4.740000 -0.197131
4.760000 0.040260
4.780000 -0.147501
4.800000 -0.232280
4.820000 -0.080091
4.840000 -0.025872
4.860000 0.069618
4.880000 0.132024
4.900000 0.109382
4.920000 0.317044
4.940000 0.238353
4.960000 0.391818
4.980000 0.352735
5.000000 0.346928
5.020000 0.559155
5.040000 0.324917
5.060000 0.384628
5.080000 0.437213
5.100000 0.500261
5.120000 0.524957
5.140000 0.318692
5.160000 0.407006
5.180000 0.386429
5.200000 0.121732
5.220000 0.103876
5.240000 -0.007759
5.260000 -0.228426
5.280000 0.091557
5.300000 -0.141686
5.320000 -0.175769
5.340000 0.056234
5.360000 -0.139847
5.380000 -0.248525
5.400000 -0.405083
5.420000 -0.543086
5.440000 -0.605228
5.460000 -0.453772
5.480000 -0.632332
5.500000 -0.278857
5.520000 -0.125809
5.540000 -0.307619
5.560000 -0.156702
5.580000 -0.225417
5.600000 -0.103164
5.620000 -0.179194
5.640000 -0.127734
5.660000 -0.188341
5.680000 0.143537
5.700000 0.047410
5.720000 0.233912
5.740000 0.342515
5.760000 0.480074
5.780000 0.526478
5.800000 0.599988
5.820000 0.428251
5.840000 0.408720
5.860000 0.501119
5.880000 0.229850
5.900000 0.255165
5.920000 0.084974
5.940000 0.230521
5.960000 0.289550
5.980000 0.387046
6.000000 0.244289
6.020000 0.402885
6.040000 0.273234
6.060000 0.239922
6.080000 -0.061710
6.100000 -0.188653
6.120000 -0.176610
6.140000 -0.539426
6.160000 -0.292322
6.180000 -0.368200
6.200000 -0.442046
6.220000 -0.086956
6.240000 -0.237524
6.260000 -0.109149
6.280000 0.114621
6.300000 -0.321428
6.320000 -0.323525
6.340000 -0.451779
6.360000 -0.619271
6.380000 -0.210074
6.400000 -0.308296
6.420000 -0.096123
6.440000 0.200226
6.460000 0.195091
6.480000 0.438811
6.500000 0.317047
6.520000 0.432486
6.540000 0.375387
6.560000 0.302796
6.580000 0.173397
6.600000 0.314706
6.620000 0.329726
6.640000 0.499638
6.660000 0.390596
6.680000 0.531012
6.700000 0.648674
6.720000 0.504828
6.740000 0.506630
6.760000 0.264208
6.780000 0.171029
6.800000 -0.042753
6.820000 -0.232043
6.840000 -0.121052
6.860000 -0.080382
6.880000 -0.214688
6.900000 -0.029242
6.920000 -0.100849
6.940000 -0.254431
6.960000 -0.294761
6.980000 -0.387433
7.000000 -0.435287

250
tests/data/COLVAR_5-10.xvg Normal file
View File

@@ -0,0 +1,250 @@
5.020000 0.559155
5.040000 0.324917
5.060000 0.384628
5.080000 0.437213
5.100000 0.500261
5.120000 0.524957
5.140000 0.318692
5.160000 0.407006
5.180000 0.386429
5.200000 0.121732
5.220000 0.103876
5.240000 -0.007759
5.260000 -0.228426
5.280000 0.091557
5.300000 -0.141686
5.320000 -0.175769
5.340000 0.056234
5.360000 -0.139847
5.380000 -0.248525
5.400000 -0.405083
5.420000 -0.543086
5.440000 -0.605228
5.460000 -0.453772
5.480000 -0.632332
5.500000 -0.278857
5.520000 -0.125809
5.540000 -0.307619
5.560000 -0.156702
5.580000 -0.225417
5.600000 -0.103164
5.620000 -0.179194
5.640000 -0.127734
5.660000 -0.188341
5.680000 0.143537
5.700000 0.047410
5.720000 0.233912
5.740000 0.342515
5.760000 0.480074
5.780000 0.526478
5.800000 0.599988
5.820000 0.428251
5.840000 0.408720
5.860000 0.501119
5.880000 0.229850
5.900000 0.255165
5.920000 0.084974
5.940000 0.230521
5.960000 0.289550
5.980000 0.387046
6.000000 0.244289
6.020000 0.402885
6.040000 0.273234
6.060000 0.239922
6.080000 -0.061710
6.100000 -0.188653
6.120000 -0.176610
6.140000 -0.539426
6.160000 -0.292322
6.180000 -0.368200
6.200000 -0.442046
6.220000 -0.086956
6.240000 -0.237524
6.260000 -0.109149
6.280000 0.114621
6.300000 -0.321428
6.320000 -0.323525
6.340000 -0.451779
6.360000 -0.619271
6.380000 -0.210074
6.400000 -0.308296
6.420000 -0.096123
6.440000 0.200226
6.460000 0.195091
6.480000 0.438811
6.500000 0.317047
6.520000 0.432486
6.540000 0.375387
6.560000 0.302796
6.580000 0.173397
6.600000 0.314706
6.620000 0.329726
6.640000 0.499638
6.660000 0.390596
6.680000 0.531012
6.700000 0.648674
6.720000 0.504828
6.740000 0.506630
6.760000 0.264208
6.780000 0.171029
6.800000 -0.042753
6.820000 -0.232043
6.840000 -0.121052
6.860000 -0.080382
6.880000 -0.214688
6.900000 -0.029242
6.920000 -0.100849
6.940000 -0.254431
6.960000 -0.294761
6.980000 -0.387433
7.000000 -0.435287
7.020000 -0.392397
7.040000 -0.361231
7.060000 -0.314569
7.080000 -0.418825
7.100000 -0.446802
7.120000 -0.107055
7.140000 -0.062352
7.160000 0.048612
7.180000 0.090056
7.200000 0.026421
7.220000 0.133539
7.240000 0.015399
7.260000 0.169799
7.280000 0.188015
7.300000 0.186057
7.320000 0.267611
7.340000 0.346012
7.360000 0.462420
7.380000 0.600556
7.400000 0.557739
7.420000 0.432258
7.440000 0.377746
7.460000 0.193769
7.480000 0.222955
7.500000 0.090057
7.520000 0.147336
7.540000 0.166292
7.560000 0.100436
7.580000 -0.021099
7.600000 -0.068353
7.620000 0.019654
7.640000 -0.089638
7.660000 -0.043250
7.680000 -0.303386
7.700000 -0.370787
7.720000 -0.534350
7.740000 -0.506331
7.760000 -0.465337
7.780000 -0.299286
7.800000 -0.128983
7.820000 -0.155927
7.840000 -0.185521
7.860000 -0.254707
7.880000 -0.052327
7.900000 -0.195514
7.920000 -0.097241
7.940000 -0.173111
7.960000 -0.146022
7.980000 -0.002634
8.000000 0.090475
8.020000 0.224838
8.040000 0.338389
8.060000 0.324804
8.080000 0.315508
8.100000 0.285864
8.120000 0.089370
8.140000 0.378119
8.160000 0.093042
8.180000 0.326371
8.200000 0.214992
8.220000 0.272968
8.240000 0.466140
8.260000 0.441360
8.280000 0.463138
8.300000 0.476466
8.320000 0.264170
8.340000 0.169713
8.360000 -0.065215
8.380000 -0.075488
8.400000 0.042980
8.420000 -0.149045
8.440000 0.047137
8.460000 -0.214226
8.480000 -0.051177
8.500000 -0.084061
8.520000 -0.126147
8.540000 -0.199647
8.560000 -0.200450
8.580000 -0.342299
8.600000 -0.478008
8.620000 -0.394154
8.640000 -0.339514
8.660000 -0.084231
8.680000 -0.047599
8.700000 -0.043127
8.720000 -0.050035
8.740000 -0.000872
8.760000 0.042464
8.780000 0.050395
8.800000 0.046709
8.820000 0.210556
8.840000 0.194481
8.860000 0.211542
8.880000 0.241095
8.900000 0.318334
8.920000 0.492715
8.940000 0.420409
8.960000 0.422387
8.980000 0.259892
9.000000 0.266956
9.020000 0.244336
9.040000 0.175098
9.060000 0.211758
9.080000 0.213090
9.100000 0.118259
9.120000 0.131022
9.140000 0.061728
9.160000 0.036211
9.180000 -0.023149
9.200000 -0.126204
9.220000 -0.317746
9.240000 -0.504112
9.260000 -0.432455
9.280000 -0.499697
9.300000 -0.249082
9.320000 -0.307040
9.340000 -0.226435
9.360000 -0.417869
9.380000 -0.249587
9.400000 -0.240881
9.420000 -0.210606
9.440000 -0.167904
9.460000 -0.191761
9.480000 -0.153305
9.500000 -0.129567
9.520000 -0.129675
9.540000 0.212965
9.560000 0.403723
9.580000 0.391514
9.600000 0.367988
9.620000 0.335965
9.640000 0.511338
9.660000 0.267671
9.680000 0.260535
9.700000 0.240616
9.720000 0.292980
9.740000 0.365138
9.760000 0.289925
9.780000 0.329946
9.800000 0.448412
9.820000 0.470235
9.840000 0.311949
9.860000 0.052864
9.880000 0.122768
9.900000 0.012715
9.920000 -0.122779
9.940000 -0.172054
9.960000 -0.322282
9.980000 -0.102970
10.000000 -0.056880

150
tests/data/COLVAR_7-10.xvg Normal file
View File

@@ -0,0 +1,150 @@
7.020000 -0.392397
7.040000 -0.361231
7.060000 -0.314569
7.080000 -0.418825
7.100000 -0.446802
7.120000 -0.107055
7.140000 -0.062352
7.160000 0.048612
7.180000 0.090056
7.200000 0.026421
7.220000 0.133539
7.240000 0.015399
7.260000 0.169799
7.280000 0.188015
7.300000 0.186057
7.320000 0.267611
7.340000 0.346012
7.360000 0.462420
7.380000 0.600556
7.400000 0.557739
7.420000 0.432258
7.440000 0.377746
7.460000 0.193769
7.480000 0.222955
7.500000 0.090057
7.520000 0.147336
7.540000 0.166292
7.560000 0.100436
7.580000 -0.021099
7.600000 -0.068353
7.620000 0.019654
7.640000 -0.089638
7.660000 -0.043250
7.680000 -0.303386
7.700000 -0.370787
7.720000 -0.534350
7.740000 -0.506331
7.760000 -0.465337
7.780000 -0.299286
7.800000 -0.128983
7.820000 -0.155927
7.840000 -0.185521
7.860000 -0.254707
7.880000 -0.052327
7.900000 -0.195514
7.920000 -0.097241
7.940000 -0.173111
7.960000 -0.146022
7.980000 -0.002634
8.000000 0.090475
8.020000 0.224838
8.040000 0.338389
8.060000 0.324804
8.080000 0.315508
8.100000 0.285864
8.120000 0.089370
8.140000 0.378119
8.160000 0.093042
8.180000 0.326371
8.200000 0.214992
8.220000 0.272968
8.240000 0.466140
8.260000 0.441360
8.280000 0.463138
8.300000 0.476466
8.320000 0.264170
8.340000 0.169713
8.360000 -0.065215
8.380000 -0.075488
8.400000 0.042980
8.420000 -0.149045
8.440000 0.047137
8.460000 -0.214226
8.480000 -0.051177
8.500000 -0.084061
8.520000 -0.126147
8.540000 -0.199647
8.560000 -0.200450
8.580000 -0.342299
8.600000 -0.478008
8.620000 -0.394154
8.640000 -0.339514
8.660000 -0.084231
8.680000 -0.047599
8.700000 -0.043127
8.720000 -0.050035
8.740000 -0.000872
8.760000 0.042464
8.780000 0.050395
8.800000 0.046709
8.820000 0.210556
8.840000 0.194481
8.860000 0.211542
8.880000 0.241095
8.900000 0.318334
8.920000 0.492715
8.940000 0.420409
8.960000 0.422387
8.980000 0.259892
9.000000 0.266956
9.020000 0.244336
9.040000 0.175098
9.060000 0.211758
9.080000 0.213090
9.100000 0.118259
9.120000 0.131022
9.140000 0.061728
9.160000 0.036211
9.180000 -0.023149
9.200000 -0.126204
9.220000 -0.317746
9.240000 -0.504112
9.260000 -0.432455
9.280000 -0.499697
9.300000 -0.249082
9.320000 -0.307040
9.340000 -0.226435
9.360000 -0.417869
9.380000 -0.249587
9.400000 -0.240881
9.420000 -0.210606
9.440000 -0.167904
9.460000 -0.191761
9.480000 -0.153305
9.500000 -0.129567
9.520000 -0.129675
9.540000 0.212965
9.560000 0.403723
9.580000 0.391514
9.600000 0.367988
9.620000 0.335965
9.640000 0.511338
9.660000 0.267671
9.680000 0.260535
9.700000 0.240616
9.720000 0.292980
9.740000 0.365138
9.760000 0.289925
9.780000 0.329946
9.800000 0.448412
9.820000 0.470235
9.840000 0.311949
9.860000 0.052864
9.880000 0.122768
9.900000 0.012715
9.920000 -0.122779
9.940000 -0.172054
9.960000 -0.322282
9.980000 -0.102970
10.000000 -0.056880

View File

@@ -0,0 +1,418 @@
#file phi psi fc1 fc2
../../example/2d_cyclic/COLVAR-3.0-3.0.xvg -3.0 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-2.5.xvg -2.5 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-2.25.xvg -2.25 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-1.75.xvg -1.75 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-1.5.xvg -1.5 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-1.0.xvg -1.0 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-0.75.xvg -0.75 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0-0.25.xvg -0.25 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+0.0.xvg +0.0 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+0.5.xvg +0.5 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+0.75.xvg +0.75 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+1.25.xvg +1.25 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+1.5.xvg +1.5 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+2.0.xvg +2.0 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+2.25.xvg +2.25 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+2.75.xvg +2.75 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-3.0+3.0.xvg +3.0 -3.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-2.75.xvg -2.75 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-2.5.xvg -2.5 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-2.0.xvg -2.0 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-1.75.xvg -1.75 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-1.25.xvg -1.25 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-1.0.xvg -1.0 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-0.5.xvg -0.5 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75-0.25.xvg -0.25 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+0.25.xvg +0.25 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+0.5.xvg +0.5 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+1.0.xvg +1.0 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+1.25.xvg +1.25 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+1.75.xvg +1.75 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+2.0.xvg +2.0 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+2.5.xvg +2.5 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.75+2.75.xvg +2.75 -2.75 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-3.0.xvg -3.0 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-2.75.xvg -2.75 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-2.25.xvg -2.25 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-2.0.xvg -2.0 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-1.5.xvg -1.5 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-1.25.xvg -1.25 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-0.75.xvg -0.75 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5-0.5.xvg -0.5 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+0.0.xvg +0.0 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+0.25.xvg +0.25 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+0.75.xvg +0.75 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+1.0.xvg +1.0 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+1.5.xvg +1.5 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+1.75.xvg +1.75 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+2.25.xvg +2.25 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+2.5.xvg +2.5 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.5+3.0.xvg +3.0 -2.5 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-3.0.xvg -3.0 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-2.5.xvg -2.5 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-2.25.xvg -2.25 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-1.75.xvg -1.75 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-1.5.xvg -1.5 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-1.0.xvg -1.0 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-0.75.xvg -0.75 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25-0.25.xvg -0.25 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+0.0.xvg +0.0 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+0.5.xvg +0.5 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+0.75.xvg +0.75 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+1.25.xvg +1.25 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+1.5.xvg +1.5 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+2.0.xvg +2.0 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+2.25.xvg +2.25 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+2.75.xvg +2.75 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.25+3.0.xvg +3.0 -2.25 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-2.75.xvg -2.75 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-2.5.xvg -2.5 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-2.0.xvg -2.0 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-1.75.xvg -1.75 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-1.25.xvg -1.25 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-1.0.xvg -1.0 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-0.5.xvg -0.5 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0-0.25.xvg -0.25 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+0.25.xvg +0.25 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+0.5.xvg +0.5 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+1.0.xvg +1.0 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+1.25.xvg +1.25 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+1.75.xvg +1.75 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+2.0.xvg +2.0 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+2.5.xvg +2.5 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-2.0+2.75.xvg +2.75 -2.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-3.0.xvg -3.0 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-2.75.xvg -2.75 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-2.25.xvg -2.25 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-2.0.xvg -2.0 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-1.5.xvg -1.5 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-1.25.xvg -1.25 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-0.75.xvg -0.75 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75-0.5.xvg -0.5 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+0.0.xvg +0.0 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+0.25.xvg +0.25 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+0.75.xvg +0.75 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+1.0.xvg +1.0 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+1.5.xvg +1.5 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+1.75.xvg +1.75 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+2.25.xvg +2.25 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+2.5.xvg +2.5 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.75+3.0.xvg +3.0 -1.75 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-3.0.xvg -3.0 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-2.5.xvg -2.5 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-2.25.xvg -2.25 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-1.75.xvg -1.75 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-1.5.xvg -1.5 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-1.0.xvg -1.0 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-0.75.xvg -0.75 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5-0.25.xvg -0.25 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+0.0.xvg +0.0 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+0.5.xvg +0.5 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+0.75.xvg +0.75 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+1.25.xvg +1.25 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+1.5.xvg +1.5 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+2.0.xvg +2.0 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+2.25.xvg +2.25 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+2.75.xvg +2.75 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.5+3.0.xvg +3.0 -1.5 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-2.75.xvg -2.75 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-2.5.xvg -2.5 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-2.0.xvg -2.0 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-1.75.xvg -1.75 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-1.25.xvg -1.25 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-1.0.xvg -1.0 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-0.5.xvg -0.5 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25-0.25.xvg -0.25 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+0.25.xvg +0.25 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+0.5.xvg +0.5 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+1.0.xvg +1.0 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+1.25.xvg +1.25 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+1.75.xvg +1.75 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+2.0.xvg +2.0 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+2.5.xvg +2.5 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.25+2.75.xvg +2.75 -1.25 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-3.0.xvg -3.0 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-2.75.xvg -2.75 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-2.25.xvg -2.25 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-2.0.xvg -2.0 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-1.5.xvg -1.5 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-1.25.xvg -1.25 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-0.75.xvg -0.75 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0-0.5.xvg -0.5 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+0.0.xvg +0.0 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+0.25.xvg +0.25 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+0.75.xvg +0.75 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+1.0.xvg +1.0 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+1.5.xvg +1.5 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+1.75.xvg +1.75 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+2.25.xvg +2.25 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+2.5.xvg +2.5 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-1.0+3.0.xvg +3.0 -1.0 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-3.0.xvg -3.0 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-2.5.xvg -2.5 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-2.25.xvg -2.25 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-1.75.xvg -1.75 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-1.5.xvg -1.5 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-1.0.xvg -1.0 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-0.75.xvg -0.75 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75-0.25.xvg -0.25 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+0.0.xvg +0.0 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+0.5.xvg +0.5 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+0.75.xvg +0.75 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+1.25.xvg +1.25 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+1.5.xvg +1.5 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+2.0.xvg +2.0 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+2.25.xvg +2.25 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+2.75.xvg +2.75 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.75+3.0.xvg +3.0 -0.75 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-2.75.xvg -2.75 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-2.5.xvg -2.5 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-2.0.xvg -2.0 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-1.75.xvg -1.75 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-1.25.xvg -1.25 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-1.0.xvg -1.0 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-0.5.xvg -0.5 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5-0.25.xvg -0.25 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+0.25.xvg +0.25 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+0.5.xvg +0.5 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+1.0.xvg +1.0 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+1.25.xvg +1.25 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+1.75.xvg +1.75 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+2.0.xvg +2.0 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+2.5.xvg +2.5 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.5+2.75.xvg +2.75 -0.5 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-3.0.xvg -3.0 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-2.75.xvg -2.75 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-2.25.xvg -2.25 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-2.0.xvg -2.0 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-1.5.xvg -1.5 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-1.25.xvg -1.25 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-0.75.xvg -0.75 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25-0.5.xvg -0.5 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+0.0.xvg +0.0 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+0.25.xvg +0.25 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+0.75.xvg +0.75 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+1.0.xvg +1.0 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+1.5.xvg +1.5 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+1.75.xvg +1.75 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+2.25.xvg +2.25 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+2.5.xvg +2.5 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR-0.25+3.0.xvg +3.0 -0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-3.0.xvg -3.0 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-2.5.xvg -2.5 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-2.25.xvg -2.25 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-1.75.xvg -1.75 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-1.5.xvg -1.5 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-1.0.xvg -1.0 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-0.75.xvg -0.75 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0-0.25.xvg -0.25 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+0.0.xvg +0.0 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+0.5.xvg +0.5 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+0.75.xvg +0.75 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+1.25.xvg +1.25 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+1.5.xvg +1.5 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+2.0.xvg +2.0 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+2.25.xvg +2.25 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+2.75.xvg +2.75 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.0+3.0.xvg +3.0 +0.0 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-2.75.xvg -2.75 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-2.5.xvg -2.5 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-2.0.xvg -2.0 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-1.75.xvg -1.75 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-1.25.xvg -1.25 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-1.0.xvg -1.0 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-0.5.xvg -0.5 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25-0.25.xvg -0.25 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+0.25.xvg +0.25 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+0.5.xvg +0.5 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+1.0.xvg +1.0 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+1.25.xvg +1.25 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+1.75.xvg +1.75 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+2.0.xvg +2.0 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+2.5.xvg +2.5 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.25+2.75.xvg +2.75 +0.25 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-3.0.xvg -3.0 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-2.75.xvg -2.75 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-2.25.xvg -2.25 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-2.0.xvg -2.0 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-1.5.xvg -1.5 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-1.25.xvg -1.25 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-0.75.xvg -0.75 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5-0.5.xvg -0.5 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+0.0.xvg +0.0 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+0.25.xvg +0.25 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+0.75.xvg +0.75 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+1.0.xvg +1.0 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+1.5.xvg +1.5 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+1.75.xvg +1.75 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+2.25.xvg +2.25 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+2.5.xvg +2.5 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.5+3.0.xvg +3.0 +0.5 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-3.0.xvg -3.0 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-2.5.xvg -2.5 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-2.25.xvg -2.25 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-1.75.xvg -1.75 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-1.5.xvg -1.5 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-1.0.xvg -1.0 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-0.75.xvg -0.75 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75-0.25.xvg -0.25 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+0.0.xvg +0.0 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+0.5.xvg +0.5 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+0.75.xvg +0.75 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+1.25.xvg +1.25 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+1.5.xvg +1.5 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+2.0.xvg +2.0 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+2.25.xvg +2.25 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+2.75.xvg +2.75 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+0.75+3.0.xvg +3.0 +0.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-2.75.xvg -2.75 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-2.5.xvg -2.5 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-2.0.xvg -2.0 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-1.75.xvg -1.75 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-1.25.xvg -1.25 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-1.0.xvg -1.0 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-0.5.xvg -0.5 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0-0.25.xvg -0.25 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+0.25.xvg +0.25 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+0.5.xvg +0.5 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+1.0.xvg +1.0 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+1.25.xvg +1.25 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+1.75.xvg +1.75 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+2.0.xvg +2.0 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+2.5.xvg +2.5 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.0+2.75.xvg +2.75 +1.0 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-3.0.xvg -3.0 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-2.75.xvg -2.75 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-2.25.xvg -2.25 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-2.0.xvg -2.0 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-1.5.xvg -1.5 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-1.25.xvg -1.25 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-0.75.xvg -0.75 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25-0.5.xvg -0.5 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+0.0.xvg +0.0 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+0.25.xvg +0.25 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+0.75.xvg +0.75 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+1.0.xvg +1.0 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+1.5.xvg +1.5 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+1.75.xvg +1.75 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+2.25.xvg +2.25 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+2.5.xvg +2.5 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.25+3.0.xvg +3.0 +1.25 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-3.0.xvg -3.0 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-2.5.xvg -2.5 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-2.25.xvg -2.25 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-1.75.xvg -1.75 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-1.5.xvg -1.5 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-1.0.xvg -1.0 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-0.75.xvg -0.75 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5-0.25.xvg -0.25 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+0.0.xvg +0.0 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+0.5.xvg +0.5 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+0.75.xvg +0.75 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+1.25.xvg +1.25 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+1.5.xvg +1.5 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+2.0.xvg +2.0 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+2.25.xvg +2.25 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+2.75.xvg +2.75 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.5+3.0.xvg +3.0 +1.5 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-2.75.xvg -2.75 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-2.5.xvg -2.5 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-2.0.xvg -2.0 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-1.75.xvg -1.75 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-1.25.xvg -1.25 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-1.0.xvg -1.0 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-0.5.xvg -0.5 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75-0.25.xvg -0.25 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+0.25.xvg +0.25 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+0.5.xvg +0.5 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+1.0.xvg +1.0 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+1.25.xvg +1.25 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+1.75.xvg +1.75 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+2.0.xvg +2.0 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+2.5.xvg +2.5 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+1.75+2.75.xvg +2.75 +1.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-3.0.xvg -3.0 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-2.75.xvg -2.75 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-2.25.xvg -2.25 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-2.0.xvg -2.0 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-1.5.xvg -1.5 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-1.25.xvg -1.25 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-0.75.xvg -0.75 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0-0.5.xvg -0.5 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+0.0.xvg +0.0 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+0.25.xvg +0.25 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+0.75.xvg +0.75 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+1.0.xvg +1.0 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+1.5.xvg +1.5 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+1.75.xvg +1.75 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+2.25.xvg +2.25 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+2.5.xvg +2.5 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.0+3.0.xvg +3.0 +2.0 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-3.0.xvg -3.0 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-2.5.xvg -2.5 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-2.25.xvg -2.25 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-1.75.xvg -1.75 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-1.5.xvg -1.5 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-1.0.xvg -1.0 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-0.75.xvg -0.75 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25-0.25.xvg -0.25 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+0.0.xvg +0.0 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+0.5.xvg +0.5 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+0.75.xvg +0.75 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+1.25.xvg +1.25 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+1.5.xvg +1.5 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+2.0.xvg +2.0 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+2.25.xvg +2.25 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+2.75.xvg +2.75 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.25+3.0.xvg +3.0 +2.25 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-2.75.xvg -2.75 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-2.5.xvg -2.5 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-2.0.xvg -2.0 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-1.75.xvg -1.75 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-1.25.xvg -1.25 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-1.0.xvg -1.0 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-0.5.xvg -0.5 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5-0.25.xvg -0.25 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+0.25.xvg +0.25 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+0.5.xvg +0.5 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+1.0.xvg +1.0 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+1.25.xvg +1.25 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+1.75.xvg +1.75 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+2.0.xvg +2.0 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+2.5.xvg +2.5 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.5+2.75.xvg +2.75 +2.5 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-3.0.xvg -3.0 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-2.75.xvg -2.75 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-2.25.xvg -2.25 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-2.0.xvg -2.0 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-1.5.xvg -1.5 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-1.25.xvg -1.25 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-0.75.xvg -0.75 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75-0.5.xvg -0.5 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+0.0.xvg +0.0 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+0.25.xvg +0.25 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+0.75.xvg +0.75 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+1.0.xvg +1.0 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+1.5.xvg +1.5 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+1.75.xvg +1.75 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+2.25.xvg +2.25 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+2.5.xvg +2.5 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+2.75+3.0.xvg +3.0 +2.75 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-3.0.xvg -3.0 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-2.5.xvg -2.5 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-2.25.xvg -2.25 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-1.75.xvg -1.75 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-1.5.xvg -1.5 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-1.0.xvg -1.0 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-0.75.xvg -0.75 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0-0.25.xvg -0.25 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+0.0.xvg +0.0 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+0.5.xvg +0.5 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+0.75.xvg +0.75 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+1.25.xvg +1.25 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+1.5.xvg +1.5 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+2.0.xvg +2.0 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+2.25.xvg +2.25 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+2.75.xvg +2.75 +3.0 100.0 100.0
../../example/2d_cyclic/COLVAR+3.0+3.0.xvg +3.0 +3.0 100.0 100.0

View File

@@ -0,0 +1,12 @@
# 500 pts
COLVAR_0-10.xvg 0.0 100
# 100 pts
COLVAR_0-2.xvg 0.0 100
# 250 pts
COLVAR_0-5.xvg 0.0 100
# 250 pts
COLVAR_5-10.xvg 0.0 100
# 150 pts
COLVAR_7-10.xvg 0.0 100
# 250 pts
COLVAR_2-7.xvg 0.0 100

View File

@@ -0,0 +1 @@
COLVAR_2-7.xvg 0.0 100

View File

@@ -54,7 +54,6 @@ mod integration {
} }
#[test] #[test]
// Test if convdt runs have the same result as normal runs
fn wham_convdt() { fn wham_convdt() {
// run wham with convdt // run wham with convdt
let output_file = "/tmp/wham_test_convdt.out"; let output_file = "/tmp/wham_test_convdt.out";
@@ -113,7 +112,6 @@ mod integration {
} }
#[test] #[test]
#[ignore]
fn wham_1d_cyclic_bootstrap() { fn wham_1d_cyclic_bootstrap() {
let output_file = "/tmp/wham_test_1d_cyclic_bt.out"; let output_file = "/tmp/wham_test_1d_cyclic_bt.out";
get_command() get_command()
@@ -136,20 +134,21 @@ mod integration {
} }
#[test] #[test]
#[ignore] // expensive
fn wham_2d_cyclic() { fn wham_2d_cyclic() {
let output_file = "/tmp/wham_test_2d_cyclic.out"; let output_file = "/tmp/wham_test_2d_cyclic.out";
let out=
get_command() get_command()
.args(&["--bins", "100,100", "--max", "pi,pi", "--min", "-pi,-pi", "-T", "300", "--cyclic"]) .args(&["--bins", "50,50", "--max", "pi,pi", "--min", "-pi,-pi", "-T", "300", "--cyclic"])
.args(&["-f", "example/2d_cyclic/metadata.dat"]) .args(&["--tolerance", "0.001"])
.args(&["-f", "tests/data/metadata_2d_cyclic_reduced.dat"])
.args(&["-o", output_file]) .args(&["-o", output_file])
.output() .output()
.expect("failed to execute process"); .expect("failed to execute process");
println!("{:?}", out);
assert!(fs::metadata(output_file).is_ok()); assert!(fs::metadata(output_file).is_ok());
let output = Command::new("diff") let output = Command::new("diff")
.arg(output_file) .arg(output_file)
.arg("example/2d_cyclic/wham.out") .arg("tests/data/2d_cyclic_reduced.out")
.output() .output()
.expect("failed to run diff"); .expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len(); let output_len = String::from_utf8_lossy(&output.stdout).len();