7 Commits

Author SHA1 Message Date
Daniel Bauer
b6f338058a faster tests 2021-07-21 23:25:10 +02:00
Daniel Bauer
e0d2c1375a test convdt 2021-07-21 23:10:09 +02:00
Daniel Bauer
8802979a8e delete test files 2021-07-21 22:43:32 +02:00
Daniel Bauer
2d32d795f5 fix unit tests 2021-07-21 22:43:25 +02:00
Daniel Bauer
35ca1b1317 version up 2021-07-21 16:47:32 +02:00
Daniel Bauer
d9a219a36a better verbose output during dataset generation and flag to ignore empty histograms 2021-07-21 16:45:58 +02:00
Daniel Bauer
2c565dee28 remove some debug statements 2021-07-19 08:32:57 +02:00
9 changed files with 327 additions and 124 deletions

2
Cargo.lock generated
View File

@@ -362,7 +362,7 @@ checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
[[package]]
name = "wham"
version = "1.1.0"
version = "1.1.2"
dependencies = [
"assert_approx_eq",
"clap",

View File

@@ -1,6 +1,6 @@
[package]
name = "wham"
version = "1.1.0"
version = "1.1.2"
authors = ["Daniel Bauer <bauer@cbs.tu-darmstadt.de>"]
description = "An implementation of the weighted histogram analysis method"
license = "GPL-3.0"

View File

@@ -1,101 +1,101 @@
#coord1 Free Energy +/- Probability +/-
-3.110177 7.158102 0.071438 0.003494 0.000068
-3.047345 5.365727 0.069449 0.007168 0.000135
-2.984513 3.873190 0.067495 0.013039 0.000232
-2.921681 2.953162 0.067589 0.018855 0.000343
-2.858849 1.949554 0.064640 0.028195 0.000480
-2.796017 1.391747 0.063570 0.035261 0.000584
-2.733186 1.128270 0.061710 0.039189 0.000620
-2.670354 0.839970 0.060445 0.043991 0.000667
-2.607522 0.624769 0.060762 0.047955 0.000739
-2.544690 0.663757 0.060786 0.047211 0.000731
-2.481858 1.051932 0.059774 0.040407 0.000617
-2.419026 1.463048 0.060422 0.034267 0.000527
-2.356194 1.990616 0.055242 0.027734 0.000360
-2.293363 2.190692 0.044458 0.025597 0.000210
-2.230531 2.553036 0.042144 0.022136 0.000159
-2.167699 2.572522 0.043313 0.021964 0.000165
-2.104867 2.472360 0.039799 0.022863 0.000157
-2.042035 2.517562 0.036792 0.022453 0.000203
-1.979203 2.469778 0.036324 0.022887 0.000237
-1.916372 2.223125 0.049496 0.025266 0.000565
-1.853540 2.080157 0.039205 0.026756 0.000453
-1.790708 1.793841 0.041488 0.030011 0.000558
-1.727876 1.458784 0.042362 0.034326 0.000565
-1.665044 0.914441 0.037561 0.042697 0.000682
-1.602212 0.303813 0.028701 0.054540 0.000761
-1.539380 0.268335 0.025765 0.055321 0.000771
-1.476549 0.000000 0.023371 0.061604 0.000866
-1.413717 0.537061 0.026370 0.049671 0.000715
-1.350885 1.439940 0.025620 0.034586 0.000547
-1.288053 2.391838 0.027653 0.023614 0.000393
-1.225221 3.779470 0.027093 0.013538 0.000229
-1.162389 5.685555 0.027762 0.006305 0.000111
-1.099557 7.661896 0.028996 0.002855 0.000051
-1.036726 9.946594 0.032118 0.001142 0.000021
-0.973894 12.359408 0.042801 0.000434 0.000009
-0.911062 14.954655 0.052443 0.000153 0.000004
-0.848230 17.742242 0.063261 0.000050 0.000002
-0.785398 20.555785 0.068133 0.000016 0.000001
-0.722566 22.811160 0.075518 0.000007 0.000000
-0.659734 25.178094 0.086226 0.000003 0.000000
-0.596903 26.442288 0.091783 0.000002 0.000000
-0.534071 27.897565 0.093175 0.000001 0.000000
-0.471239 29.062473 0.096027 0.000001 0.000000
-0.408407 30.384521 0.096855 0.000000 0.000000
-0.345575 31.638454 0.099956 0.000000 0.000000
-0.282743 32.817727 0.107689 0.000000 0.000000
-0.219911 33.770369 0.108946 0.000000 0.000000
-0.157080 34.505503 0.112902 0.000000 0.000000
-0.094248 35.431659 0.120856 0.000000 0.000000
-0.031416 35.615810 0.122046 0.000000 0.000000
0.031416 35.561946 0.118225 0.000000 0.000000
0.094248 35.382089 0.108652 0.000000 0.000000
0.157080 34.934827 0.118384 0.000000 0.000000
0.219911 33.673460 0.119195 0.000000 0.000000
0.282743 32.731563 0.121592 0.000000 0.000000
0.345575 31.261855 0.129698 0.000000 0.000000
0.408407 29.717377 0.139789 0.000000 0.000000
0.471239 28.076620 0.137289 0.000001 0.000000
0.534071 26.481097 0.135712 0.000002 0.000000
0.596903 24.487358 0.135156 0.000003 0.000000
0.659734 22.344251 0.131027 0.000008 0.000000
0.722566 20.241543 0.133145 0.000018 0.000001
0.785398 18.341869 0.131952 0.000039 0.000002
0.848230 16.261582 0.134676 0.000091 0.000006
0.911062 14.301801 0.134417 0.000199 0.000013
0.973894 12.603788 0.131018 0.000394 0.000024
1.036726 11.249601 0.131276 0.000678 0.000043
1.099557 10.087886 0.132498 0.001079 0.000070
1.162389 9.443303 0.132990 0.001398 0.000092
1.225221 9.152799 0.132250 0.001570 0.000104
1.288053 9.331937 0.133178 0.001462 0.000099
1.350885 9.905546 0.133357 0.001161 0.000078
1.413717 11.042050 0.133807 0.000736 0.000051
1.476549 12.598167 0.132722 0.000395 0.000027
1.539380 14.520167 0.131816 0.000183 0.000012
1.602212 16.569783 0.131773 0.000080 0.000005
1.665044 18.687390 0.132601 0.000034 0.000002
1.727876 20.775408 0.133867 0.000015 0.000001
1.790708 22.905200 0.129265 0.000006 0.000000
1.853540 24.643852 0.128894 0.000003 0.000000
1.916372 26.301740 0.130266 0.000002 0.000000
1.979203 27.372071 0.128620 0.000001 0.000000
2.042035 28.697726 0.133263 0.000001 0.000000
2.104867 29.417901 0.133513 0.000000 0.000000
2.167699 30.008351 0.130925 0.000000 0.000000
2.230531 30.406016 0.124398 0.000000 0.000000
2.293363 30.171275 0.122493 0.000000 0.000000
2.356194 29.884646 0.130278 0.000000 0.000000
2.419026 29.428153 0.130844 0.000000 0.000000
2.481858 28.546982 0.148114 0.000001 0.000000
2.544690 27.757520 0.133045 0.000001 0.000000
2.607522 26.505787 0.134364 0.000001 0.000000
2.670354 24.491866 0.115061 0.000003 0.000000
2.733186 22.320664 0.110036 0.000008 0.000000
2.796017 20.052723 0.107894 0.000020 0.000001
2.858849 17.655650 0.105964 0.000052 0.000002
2.921681 15.471590 0.107005 0.000125 0.000005
2.984513 13.138167 0.099378 0.000318 0.000012
3.047345 11.092386 0.087770 0.000722 0.000022
3.110177 9.065722 0.077092 0.001626 0.000038
-3.110177 7.158102 0.000000 0.003494 0.000000
-3.047345 5.365727 0.000000 0.007168 0.000000
-2.984513 3.873190 0.000000 0.013039 0.000000
-2.921681 2.953162 0.000000 0.018855 0.000000
-2.858849 1.949554 0.000000 0.028195 0.000000
-2.796017 1.391747 0.000000 0.035261 0.000000
-2.733186 1.128270 0.000000 0.039189 0.000000
-2.670354 0.839970 0.000000 0.043991 0.000000
-2.607522 0.624769 0.000000 0.047955 0.000000
-2.544690 0.663757 0.000000 0.047211 0.000000
-2.481858 1.051932 0.000000 0.040407 0.000000
-2.419026 1.463048 0.000000 0.034267 0.000000
-2.356194 1.990616 0.000000 0.027734 0.000000
-2.293363 2.190692 0.000000 0.025597 0.000000
-2.230531 2.553036 0.000000 0.022136 0.000000
-2.167699 2.572522 0.000000 0.021964 0.000000
-2.104867 2.472360 0.000000 0.022863 0.000000
-2.042035 2.517562 0.000000 0.022453 0.000000
-1.979203 2.469778 0.000000 0.022887 0.000000
-1.916372 2.223125 0.000000 0.025266 0.000000
-1.853540 2.080157 0.000000 0.026756 0.000000
-1.790708 1.793841 0.000000 0.030011 0.000000
-1.727876 1.458784 0.000000 0.034326 0.000000
-1.665044 0.914441 0.000000 0.042697 0.000000
-1.602212 0.303813 0.000000 0.054540 0.000000
-1.539380 0.268335 0.000000 0.055321 0.000000
-1.476549 0.000000 0.000000 0.061604 0.000000
-1.413717 0.537061 0.000000 0.049671 0.000000
-1.350885 1.439940 0.000000 0.034586 0.000000
-1.288053 2.391838 0.000000 0.023614 0.000000
-1.225221 3.779470 0.000000 0.013538 0.000000
-1.162389 5.685555 0.000000 0.006305 0.000000
-1.099557 7.661896 0.000000 0.002855 0.000000
-1.036726 9.946594 0.000000 0.001142 0.000000
-0.973894 12.359408 0.000000 0.000434 0.000000
-0.911062 14.954655 0.000000 0.000153 0.000000
-0.848230 17.742242 0.000000 0.000050 0.000000
-0.785398 20.555785 0.000000 0.000016 0.000000
-0.722566 22.811160 0.000000 0.000007 0.000000
-0.659734 25.178094 0.000000 0.000003 0.000000
-0.596903 26.442288 0.000000 0.000002 0.000000
-0.534071 27.897565 0.000000 0.000001 0.000000
-0.471239 29.062473 0.000000 0.000001 0.000000
-0.408407 30.384521 0.000000 0.000000 0.000000
-0.345575 31.638454 0.000000 0.000000 0.000000
-0.282743 32.817727 0.000000 0.000000 0.000000
-0.219911 33.770369 0.000000 0.000000 0.000000
-0.157080 34.505503 0.000000 0.000000 0.000000
-0.094248 35.431659 0.000000 0.000000 0.000000
-0.031416 35.615810 0.000000 0.000000 0.000000
0.031416 35.561946 0.000000 0.000000 0.000000
0.094248 35.382089 0.000000 0.000000 0.000000
0.157080 34.934827 0.000000 0.000000 0.000000
0.219911 33.673460 0.000000 0.000000 0.000000
0.282743 32.731563 0.000000 0.000000 0.000000
0.345575 31.261855 0.000000 0.000000 0.000000
0.408407 29.717377 0.000000 0.000000 0.000000
0.471239 28.076620 0.000000 0.000001 0.000000
0.534071 26.481097 0.000000 0.000002 0.000000
0.596903 24.487358 0.000000 0.000003 0.000000
0.659734 22.344251 0.000000 0.000008 0.000000
0.722566 20.241543 0.000000 0.000018 0.000000
0.785398 18.341869 0.000000 0.000039 0.000000
0.848230 16.261582 0.000000 0.000091 0.000000
0.911062 14.301801 0.000000 0.000199 0.000000
0.973894 12.603788 0.000000 0.000394 0.000000
1.036726 11.249601 0.000000 0.000678 0.000000
1.099557 10.087886 0.000000 0.001079 0.000000
1.162389 9.443303 0.000000 0.001398 0.000000
1.225221 9.152799 0.000000 0.001570 0.000000
1.288053 9.331937 0.000000 0.001462 0.000000
1.350885 9.905546 0.000000 0.001161 0.000000
1.413717 11.042050 0.000000 0.000736 0.000000
1.476549 12.598167 0.000000 0.000395 0.000000
1.539380 14.520167 0.000000 0.000183 0.000000
1.602212 16.569783 0.000000 0.000080 0.000000
1.665044 18.687390 0.000000 0.000034 0.000000
1.727876 20.775408 0.000000 0.000015 0.000000
1.790708 22.905200 0.000000 0.000006 0.000000
1.853540 24.643852 0.000000 0.000003 0.000000
1.916372 26.301740 0.000000 0.000002 0.000000
1.979203 27.372071 0.000000 0.000001 0.000000
2.042035 28.697726 0.000000 0.000001 0.000000
2.104867 29.417901 0.000000 0.000000 0.000000
2.167699 30.008351 0.000000 0.000000 0.000000
2.230531 30.406016 0.000000 0.000000 0.000000
2.293363 30.171275 0.000000 0.000000 0.000000
2.356194 29.884646 0.000000 0.000000 0.000000
2.419026 29.428153 0.000000 0.000000 0.000000
2.481858 28.546982 0.000000 0.000001 0.000000
2.544690 27.757520 0.000000 0.000001 0.000000
2.607522 26.505787 0.000000 0.000001 0.000000
2.670354 24.491866 0.000000 0.000003 0.000000
2.733186 22.320664 0.000000 0.000008 0.000000
2.796017 20.052723 0.000000 0.000020 0.000000
2.858849 17.655650 0.000000 0.000052 0.000000
2.921681 15.471590 0.000000 0.000125 0.000000
2.984513 13.138167 0.000000 0.000318 0.000000
3.047345 11.092386 0.000000 0.000722 0.000000
3.110177 9.065722 0.000000 0.001626 0.000000

View File

@@ -0,0 +1,101 @@
#coord1 Free Energy +/- Probability +/-
-3.110177 7.158102 0.071438 0.003494 0.000068
-3.047345 5.365727 0.069449 0.007168 0.000135
-2.984513 3.873190 0.067495 0.013039 0.000232
-2.921681 2.953162 0.067589 0.018855 0.000343
-2.858849 1.949554 0.064640 0.028195 0.000480
-2.796017 1.391747 0.063570 0.035261 0.000584
-2.733186 1.128270 0.061710 0.039189 0.000620
-2.670354 0.839970 0.060445 0.043991 0.000667
-2.607522 0.624769 0.060762 0.047955 0.000739
-2.544690 0.663757 0.060786 0.047211 0.000731
-2.481858 1.051932 0.059774 0.040407 0.000617
-2.419026 1.463048 0.060422 0.034267 0.000527
-2.356194 1.990616 0.055242 0.027734 0.000360
-2.293363 2.190692 0.044458 0.025597 0.000210
-2.230531 2.553036 0.042144 0.022136 0.000159
-2.167699 2.572522 0.043313 0.021964 0.000165
-2.104867 2.472360 0.039799 0.022863 0.000157
-2.042035 2.517562 0.036792 0.022453 0.000203
-1.979203 2.469778 0.036324 0.022887 0.000237
-1.916372 2.223125 0.049496 0.025266 0.000565
-1.853540 2.080157 0.039205 0.026756 0.000453
-1.790708 1.793841 0.041488 0.030011 0.000558
-1.727876 1.458784 0.042362 0.034326 0.000565
-1.665044 0.914441 0.037561 0.042697 0.000682
-1.602212 0.303813 0.028701 0.054540 0.000761
-1.539380 0.268335 0.025765 0.055321 0.000771
-1.476549 0.000000 0.023371 0.061604 0.000866
-1.413717 0.537061 0.026370 0.049671 0.000715
-1.350885 1.439940 0.025620 0.034586 0.000547
-1.288053 2.391838 0.027653 0.023614 0.000393
-1.225221 3.779470 0.027093 0.013538 0.000229
-1.162389 5.685555 0.027762 0.006305 0.000111
-1.099557 7.661896 0.028996 0.002855 0.000051
-1.036726 9.946594 0.032118 0.001142 0.000021
-0.973894 12.359408 0.042801 0.000434 0.000009
-0.911062 14.954655 0.052443 0.000153 0.000004
-0.848230 17.742242 0.063261 0.000050 0.000002
-0.785398 20.555785 0.068133 0.000016 0.000001
-0.722566 22.811160 0.075518 0.000007 0.000000
-0.659734 25.178094 0.086226 0.000003 0.000000
-0.596903 26.442288 0.091783 0.000002 0.000000
-0.534071 27.897565 0.093175 0.000001 0.000000
-0.471239 29.062473 0.096027 0.000001 0.000000
-0.408407 30.384521 0.096855 0.000000 0.000000
-0.345575 31.638454 0.099956 0.000000 0.000000
-0.282743 32.817727 0.107689 0.000000 0.000000
-0.219911 33.770369 0.108946 0.000000 0.000000
-0.157080 34.505503 0.112902 0.000000 0.000000
-0.094248 35.431659 0.120856 0.000000 0.000000
-0.031416 35.615810 0.122046 0.000000 0.000000
0.031416 35.561946 0.118225 0.000000 0.000000
0.094248 35.382089 0.108652 0.000000 0.000000
0.157080 34.934827 0.118384 0.000000 0.000000
0.219911 33.673460 0.119195 0.000000 0.000000
0.282743 32.731563 0.121592 0.000000 0.000000
0.345575 31.261855 0.129698 0.000000 0.000000
0.408407 29.717377 0.139789 0.000000 0.000000
0.471239 28.076620 0.137289 0.000001 0.000000
0.534071 26.481097 0.135712 0.000002 0.000000
0.596903 24.487358 0.135156 0.000003 0.000000
0.659734 22.344251 0.131027 0.000008 0.000000
0.722566 20.241543 0.133145 0.000018 0.000001
0.785398 18.341869 0.131952 0.000039 0.000002
0.848230 16.261582 0.134676 0.000091 0.000006
0.911062 14.301801 0.134417 0.000199 0.000013
0.973894 12.603788 0.131018 0.000394 0.000024
1.036726 11.249601 0.131276 0.000678 0.000043
1.099557 10.087886 0.132498 0.001079 0.000070
1.162389 9.443303 0.132990 0.001398 0.000092
1.225221 9.152799 0.132250 0.001570 0.000104
1.288053 9.331937 0.133178 0.001462 0.000099
1.350885 9.905546 0.133357 0.001161 0.000078
1.413717 11.042050 0.133807 0.000736 0.000051
1.476549 12.598167 0.132722 0.000395 0.000027
1.539380 14.520167 0.131816 0.000183 0.000012
1.602212 16.569783 0.131773 0.000080 0.000005
1.665044 18.687390 0.132601 0.000034 0.000002
1.727876 20.775408 0.133867 0.000015 0.000001
1.790708 22.905200 0.129265 0.000006 0.000000
1.853540 24.643852 0.128894 0.000003 0.000000
1.916372 26.301740 0.130266 0.000002 0.000000
1.979203 27.372071 0.128620 0.000001 0.000000
2.042035 28.697726 0.133263 0.000001 0.000000
2.104867 29.417901 0.133513 0.000000 0.000000
2.167699 30.008351 0.130925 0.000000 0.000000
2.230531 30.406016 0.124398 0.000000 0.000000
2.293363 30.171275 0.122493 0.000000 0.000000
2.356194 29.884646 0.130278 0.000000 0.000000
2.419026 29.428153 0.130844 0.000000 0.000000
2.481858 28.546982 0.148114 0.000001 0.000000
2.544690 27.757520 0.133045 0.000001 0.000000
2.607522 26.505787 0.134364 0.000001 0.000000
2.670354 24.491866 0.115061 0.000003 0.000000
2.733186 22.320664 0.110036 0.000008 0.000000
2.796017 20.052723 0.107894 0.000020 0.000001
2.858849 17.655650 0.105964 0.000052 0.000002
2.921681 15.471590 0.107005 0.000125 0.000005
2.984513 13.138167 0.099378 0.000318 0.000012
3.047345 11.092386 0.087770 0.000722 0.000022
3.110177 9.065722 0.077092 0.001626 0.000038

View File

@@ -1,5 +1,5 @@
name: wham
version: "1.1.0"
version: "1.1.2"
author: D. Bauer <bauer@cbs.tu-darmstadt.de>
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.
@@ -112,3 +112,8 @@ args:
help: "Performs WHAM for slices with the given delta in time and returns an output file for each slice. THis is useful to check the result for convergence. Example: with --convdt 100 and a timeseries ranging from 0-300, free energy surfaces for slices 0-100, 0-200 and 0-300 will be given returned."
takes_value: true
required: false
- ignore_empty:
long: ignore_empty
help: If this is set, do not fail if a histogram is empty.
takes_value: false
required: false

View File

@@ -103,19 +103,24 @@ pub fn read_data(cfg: &Config) -> Result<Vec<Dataset>> {
}
}
// Histograms are stored as timeseries x convdt right now,
// but we need convdt x timeseries to create Datasets
// this transposes the data
// Datasets are created from histograms.
// Empty histograms result in an error when its the final dataset,
// 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);
let datasets: Vec<Dataset> = (0..num_datasets).map(|idx| {
let mut dataset_histograms: Vec<Histogram> = Vec::with_capacity(histograms.len());
for (hs, path) in histograms.iter().zip(&paths) {
if hs.len() > idx {
dataset_histograms.push(hs[idx].clone())
} else {
let warning = format!("No data points in histogram boundaries: {}", &path);
if idx+1 == num_datasets {
bail!(warning);
let warning = format!("No data points for interval {}-{} in histogram boundaries: {}.",
dataset_boundaries[idx].0, dataset_boundaries[idx].1 ,&path);
if !cfg.ignore_empty && idx+1 == num_datasets {
bail!(warning + " This is the final dataset.");
} else {
eprintln!("{}", warning);
}
@@ -172,12 +177,10 @@ fn get_convdt_boundaries(timeseries: &[f64], cfg: &Config) -> Vec<(f64, f64)> {
if first_timestep < cfg.start {
first_timestep = cfg.start;
}
println!("{} to {} with dt={}", first_timestep, last_timestep, cfg.convdt);
if cfg.convdt == 0.0 {
vec![(0.0, last_timestep)]
} else {
let intervals: usize = ((last_timestep - first_timestep) / cfg.convdt).ceil() as usize;
println!("{:?}", intervals);
(1..intervals+1).map(|i| {
i as f64 * cfg.convdt + first_timestep
}).map(|end| { (first_timestep, end) }).collect()
@@ -407,6 +410,7 @@ mod tests {
end: 1e+20,
uncorr: false,
convdt: 0.0,
ignore_empty: false,
}
}

View File

@@ -48,6 +48,7 @@ pub struct Config {
pub end: f64,
pub uncorr: bool,
pub convdt: f64,
pub ignore_empty: bool
}
impl fmt::Display for Config {
@@ -55,11 +56,11 @@ impl fmt::Display for Config {
write!(f, "Metadata={}, hist_min={:?}, hist_max={:?}, bins={:?},
verbose={}, tolerance={}, iterations={}, temperature={},
cyclic={:?}, uncorr={:?}, bootstrap={:?}, seed={:?},
uncorr={:?}, start={:?}, end={:?}, convdt={:?}",
uncorr={:?}, start={:?}, end={:?}, convdt={:?}, ignore_empty={:?}",
self.metadata_file, self.hist_min, self.hist_max, self.num_bins,
self.verbose, self.tolerance, self.max_iterations, self.temperature,
self.cyclic, self.uncorr, self.bootstrap, self.bootstrap_seed,
self.uncorr, self.start, self.end, self.convdt)
self.uncorr, self.start, self.end, self.convdt, self.ignore_empty)
}
}

View File

@@ -71,9 +71,11 @@ fn cli() -> Result<Config> {
let convdt: f64 = matches.value_of("convdt").unwrap_or("0").parse()
.chain_err(|| "Cannot parse convdt.")?;
let ignore_empty: bool = matches.is_present("ignore_empty");
Ok(wham::Config{metadata_file, hist_min, hist_max, num_bins, dimens,
verbose, tolerance, max_iterations, temperature, cyclic, output,
bootstrap, bootstrap_seed, start, end, uncorr, convdt})
bootstrap, bootstrap_seed, start, end, uncorr, convdt, ignore_empty})
}
fn main() {

View File

@@ -6,64 +6,154 @@ mod integration {
use std::process::Command;
use std::fs;
use super::command::get_command;
use std::fs::OpenOptions;
use std::io::prelude::*;
#[test]
fn wham_1d_cyclic() {
let output_file = "/tmp/wham_test_1d_cyclic.out";
get_command()
.args(&["--bins", "100", "--max", "pi", "--min", "-pi", "-T", "300", "--cyclic"])
.args(&["--bt", "100", "--seed", "1234"])
.args(&["--seed", "1234"])
.args(&["-f", "example/1d_cyclic/metadata.dat"])
.args(&["-o", "/tmp/wham_test_1d_cyclic.out"])
.args(&["-o", output_file])
.output()
.expect("failed to execute process");
assert!(fs::metadata("/tmp/wham_test_1d_cyclic.out").is_ok());
assert!(fs::metadata(output_file).is_ok());
let output = Command::new("diff")
.arg("/tmp/wham_test_1d_cyclic.out")
.arg(output_file)
.arg("example/1d_cyclic/wham.out")
.output()
.expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len();
assert_eq!(output_len, 0);
std::fs::remove_file(output_file).unwrap();
}
#[test]
fn wham_1d_cyclic_uncorrelated() {
let output_file = "/tmp/wham_test_1d_cyclic.out";
get_command()
.args(&["--bins", "100", "--max", "pi", "--min", "-pi", "-T", "300", "--cyclic", "--uncorr"])
.args(&["--seed", "1234"])
.args(&["-f", "example/1d_cyclic/metadata.dat"])
.args(&["-o", "/tmp/wham_test_1d_cyclic.out"])
.args(&["-o", output_file])
.output()
.expect("failed to execute process");
assert!(fs::metadata("/tmp/wham_test_1d_cyclic.out").is_ok());
let output = Command::new("diff")
.arg("/tmp/wham_test_1d_cyclic.out")
.arg(output_file)
.arg("example/1d_cyclic/wham_uncorrelated.out")
.output()
.expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len();
assert_eq!(output_len, 0);
std::fs::remove_file(output_file).unwrap();
}
#[test]
// Test if convdt runs have the same result as normal runs
fn wham_convdt() {
// run wham with convdt
let output_file = "/tmp/wham_test_convdt.out";
get_command()
.args(&["--bins", "10", "--max", "pi", "--min", "-pi", "-T", "300", "--cyclic"])
.args(&["--seed", "1234", "--tolerance", "0.001"])
.args(&["--start", "0", "--end", "10"])
.args(&["--convdt", "1"])
.args(&["-f", "example/1d_cyclic/metadata.dat"])
.args(&["-o", output_file])
.output()
.expect("failed to execute process");
assert!(fs::metadata(output_file).is_ok());
// run wham for individual sets
for i in 1..11 {
let output_file_single = format!("/tmp/wham_test_convdt_{}.out", i);
get_command()
.args(&["--bins", "10", "--max", "pi", "--min", "-pi", "-T", "300", "--cyclic"])
.args(&["--seed", "1234", "--tolerance", "0.001"])
.args(&["--start", "0", "--end", &i.to_string()])
.args(&["-f", "example/1d_cyclic/metadata.dat"])
.args(&["-o", &output_file_single])
.output()
.expect("failed to execute process");
assert!(fs::metadata(output_file_single).is_ok());
}
// combine individual runs
let output_combined = "/tmp/wham_test_convdt_combined.out";
let mut file = OpenOptions::new()
.create(true)
.write(true)
.open(output_combined)
.unwrap();
for i in 1..11 {
let output_file_single = format!("/tmp/wham_test_convdt_{}.out", i);
println!("{}", output_file_single);
file.write_all(format!("#Dataset {}\n", i-1).as_bytes()).unwrap();
file.write_all(fs::read_to_string(output_file_single.clone()).unwrap().as_bytes()).unwrap();
std::fs::remove_file(output_file_single).unwrap();
}
// compare combined runs with single run
let output = Command::new("diff")
.arg(output_file)
.arg(output_combined)
.output()
.expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len();
assert_eq!(output_len, 0);
std::fs::remove_file(output_combined).unwrap();
std::fs::remove_file(output_file).unwrap();
}
#[test]
#[ignore]
fn wham_1d_cyclic_bootstrap() {
let output_file = "/tmp/wham_test_1d_cyclic_bt.out";
get_command()
.args(&["--bins", "100", "--max", "pi", "--min", "-pi", "-T", "300", "--cyclic"])
.args(&["--seed", "1234", "--bt", "100"])
.args(&["-f", "example/1d_cyclic/metadata.dat"])
.args(&["-o", output_file])
.output()
.expect("failed to execute process");
assert!(fs::metadata(output_file).is_ok());
let output = Command::new("diff")
.arg(output_file)
.arg("example/1d_cyclic/wham_bt.out")
.output()
.expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len();
assert_eq!(output_len, 0);
std::fs::remove_file(output_file).unwrap();
}
#[test]
#[ignore] // expensive
fn wham_2d_cyclic() {
let output_file = "/tmp/wham_test_2d_cyclic.out";
get_command()
.args(&["--bins", "100,100", "--max", "pi,pi", "--min", "-pi,-pi", "-T", "300", "--cyclic"])
.args(&["-f", "example/2d_cyclic/metadata.dat"])
.args(&["-o", "/tmp/wham_test_2d_cyclic.out"])
.args(&["-o", output_file])
.output()
.expect("failed to execute process");
assert!(fs::metadata("/tmp/wham_test_2d_cyclic.out").is_ok());
assert!(fs::metadata(output_file).is_ok());
let output = Command::new("diff")
.arg("/tmp/wham_test_2d_cyclic.out")
.arg(output_file)
.arg("example/2d_cyclic/wham.out")
.output()
.expect("failed to run diff");
let output_len = String::from_utf8_lossy(&output.stdout).len();
assert_eq!(output_len, 0);
std::fs::remove_file(output_file).unwrap();
}
}
}