diff --git a/regtest/.gitignore b/regtest/.gitignore index 9bb59b56bf762ea30b1c0c1666d4194b80ae4f65..4add3ec0cecde432f6eb73e3c968707bebdb4ecd 100644 --- a/regtest/.gitignore +++ b/regtest/.gitignore @@ -9,6 +9,7 @@ !/basic !/crystallization !/eds +!/drr !/mapping !/multicolvar !/secondarystructure diff --git a/regtest/drr/Makefile b/regtest/drr/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..42480767ae852294cf2d7269ac5a1c16064d1849 --- /dev/null +++ b/regtest/drr/Makefile @@ -0,0 +1,2 @@ +include ../scripts/module.make + diff --git a/regtest/drr/rt-eabf/Makefile b/regtest/drr/rt-eabf/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3703b27cea227aa053fb6d1d73f861e4384dbcee --- /dev/null +++ b/regtest/drr/rt-eabf/Makefile @@ -0,0 +1 @@ +include ../../scripts/test.make diff --git a/regtest/drr/rt-eabf/ala12_trajectory.xyz b/regtest/drr/rt-eabf/ala12_trajectory.xyz new file mode 100644 index 0000000000000000000000000000000000000000..ddf508adda823167b0ab6b2a0e0bdd87cdbf3fa4 --- /dev/null +++ b/regtest/drr/rt-eabf/ala12_trajectory.xyz @@ -0,0 +1,1608 @@ +132 + 100. 100. 100. +HH31 -0.9105 -0.2402 2.1804 +CH3 -0.893 -0.3352 2.2308 +HH32 -0.9504 -0.3501 2.3223 +HH33 -0.9067 -0.4173 2.1604 +C -0.745 -0.3303 2.2659 +O -0.6909 -0.2213 2.2834 +N -0.6812 -0.4475 2.2683 +H -0.7324 -0.5304 2.2418 +CA -0.5397 -0.4597 2.2969 +HA -0.4882 -0.386 2.2353 +CB -0.5075 -0.4366 2.4443 +HB1 -0.401 -0.4351 2.4674 +HB2 -0.5438 -0.5144 2.5114 +HB3 -0.5561 -0.3425 2.4701 +C -0.4909 -0.5948 2.2466 +O -0.4728 -0.6129 2.1264 +N -0.4848 -0.6965 2.3328 +H -0.5121 -0.679 2.4285 +CA -0.4722 -0.8399 2.3159 +HA -0.3768 -0.8522 2.2645 +CB -0.4609 -0.909 2.4515 +HB1 -0.376 -0.8709 2.5082 +HB2 -0.451 -1.0142 2.4246 +HB3 -0.5489 -0.9125 2.5158 +C -0.5753 -0.906 2.2256 +O -0.5359 -0.9754 2.1321 +N -0.7036 -0.8865 2.2568 +H -0.704 -0.8063 2.3182 +CA -0.8201 -0.9234 2.1789 +HA -0.7869 -0.9845 2.0949 +CB -0.9165 -0.9957 2.2726 +HB1 -0.8633 -1.0787 2.319 +HB2 -1.0099 -1.0329 2.2305 +HB3 -0.94 -0.9257 2.3527 +C -0.8724 -0.7907 2.1258 +O -0.8269 -0.6846 2.1676 +N -0.9566 -0.7899 2.0221 +H -0.963 -0.8819 1.981 +CA -0.9923 -0.6793 1.9356 +HA -1.0138 -0.5948 2.0009 +CB -0.8791 -0.6404 1.8409 +HB1 -0.8531 -0.7143 1.7651 +HB2 -0.7859 -0.629 1.8963 +HB3 -0.8983 -0.5483 1.7859 +C -1.1178 -0.7047 1.8532 +O -1.1516 -0.8217 1.8366 +N -1.1927 -0.6054 1.8049 +H -1.1603 -0.5097 1.8052 +CA -1.324 -0.6259 1.7469 +HA -1.3121 -0.716 1.6866 +CB -1.4367 -0.6396 1.8489 +HB1 -1.5329 -0.6504 1.799 +HB2 -1.4356 -0.5552 1.9178 +HB3 -1.4135 -0.7227 1.9155 +C -1.3632 -0.5087 1.6582 +O -1.3364 -0.3936 1.6918 +N -1.4207 -0.5433 1.5428 +H -1.4289 -0.644 1.5399 +CA -1.4898 -0.458 1.4482 +HA -1.5364 -0.3792 1.5074 +CB -1.3891 -0.38 1.3642 +HB1 -1.4478 -0.3098 1.3049 +HB2 -1.3232 -0.4434 1.3048 +HB3 -1.3289 -0.3155 1.4282 +C -1.5946 -0.517 1.3549 +O -1.7154 -0.5054 1.3744 +N -1.5477 -0.6023 1.2635 +H -1.4472 -0.6108 1.2571 +CA -1.6137 -0.7083 1.1902 +HA -1.7209 -0.703 1.2095 +CB -1.5913 -0.6901 1.0403 +HB1 -1.6476 -0.6072 0.9975 +HB2 -1.6105 -0.7811 0.9835 +HB3 -1.4837 -0.6728 1.042 +C -1.5549 -0.8405 1.2374 +O -1.4368 -0.8711 1.2226 +N -1.6457 -0.9114 1.3049 +H -1.7362 -0.8674 1.3143 +CA -1.6134 -1.0157 1.4001 +HA -1.7002 -1.0541 1.4537 +CB -1.5583 -1.1305 1.316 +HB1 -1.4572 -1.0975 1.2918 +HB2 -1.6217 -1.1496 1.2294 +HB3 -1.5599 -1.2271 1.3664 +C -1.5269 -0.9591 1.5119 +O -1.5214 -0.8375 1.5293 +N -1.4681 -1.0478 1.5924 +H -1.4907 -1.1462 1.5897 +CA -1.3672 -1.0148 1.691 +HA -1.3288 -0.9136 1.678 +CB -1.4348 -1.0169 1.8278 +HB1 -1.4897 -0.9229 1.8335 +HB2 -1.3581 -1.0251 1.9048 +HB3 -1.4889 -1.1094 1.8478 +C -1.2514 -1.1131 1.681 +O -1.267 -1.2212 1.6247 +N -1.1304 -1.0734 1.7209 +H -1.13 -0.9774 1.7523 +CA -1.0028 -1.1384 1.6987 +HA -1.0121 -1.2468 1.693 +CB -0.9496 -1.1025 1.5603 +HB1 -0.8583 -1.1593 1.5421 +HB2 -0.938 -0.9942 1.5574 +HB3 -1.0131 -1.1309 1.4763 +C -0.9012 -1.1121 1.8089 +O -0.9298 -1.0314 1.8971 +N -0.7836 -1.175 1.8022 +H -0.7676 -1.243 1.7292 +CA -0.6626 -1.1294 1.8676 +HA -0.6953 -1.0965 1.9663 +CB -0.5678 -1.2473 1.8875 +HB1 -0.5215 -1.271 1.7917 +HB2 -0.6285 -1.3303 1.9237 +HB3 -0.4881 -1.2167 1.9553 +C -0.6012 -1.0138 1.7899 +O -0.6378 -0.9893 1.6752 +N -0.5091 -0.9417 1.8543 +H -0.5077 -0.9637 1.9529 +CA -0.4233 -0.8407 1.7956 +HA -0.398 -0.8732 1.6947 +CB -0.4967 -0.7073 1.7857 +HB1 -0.4295 -0.6295 1.7497 +HB2 -0.5447 -0.6756 1.8783 +HB3 -0.5784 -0.7235 1.7154 +C -0.2955 -0.8248 1.8767 +O -0.1984 -0.8964 1.8535 +N -0.2923 -0.7389 1.9788 +H -0.3729 -0.6821 2.0007 +CH3 -0.169 -0.7089 2.0487 +HH31 -0.1873 -0.6629 2.1459 +HH32 -0.1152 -0.6284 1.9986 +HH33 -0.1135 -0.802 2.0602 +132 + 100. 100. 100. +HH31 -0.0219 -1.191 1.5105 +CH3 -0.0864 -1.2406 1.5831 +HH32 -0.0847 -1.3469 1.5589 +HH33 -0.0406 -1.21 1.6772 +C -0.2344 -1.2065 1.5741 +O -0.2955 -1.2489 1.4762 +N -0.2853 -1.1282 1.6694 +H -0.2187 -1.0759 1.7245 +CA -0.4235 -1.0892 1.6896 +HA -0.4673 -1.0542 1.5962 +CB -0.5079 -1.2066 1.7384 +HB1 -0.4738 -1.2388 1.8369 +HB2 -0.4883 -1.2957 1.6788 +HB3 -0.6136 -1.1803 1.7378 +C -0.433 -0.9747 1.7893 +O -0.3304 -0.9303 1.8405 +N -0.5529 -0.9232 1.8176 +H -0.6411 -0.9565 1.7815 +CA -0.5793 -0.8156 1.9109 +HA -0.5312 -0.8252 2.0082 +CB -0.5207 -0.6916 1.8438 +HB1 -0.5529 -0.6865 1.7398 +HB2 -0.4118 -0.6902 1.8479 +HB3 -0.5481 -0.6027 1.9007 +C -0.7286 -0.8068 1.9388 +O -0.7905 -0.909 1.9103 +N -0.7802 -0.7033 2.0056 +H -0.7241 -0.6197 2.014 +CA -0.9235 -0.6867 2.0193 +HA -0.9689 -0.7394 1.9354 +CB -0.9845 -0.7387 2.1491 +HB1 -0.9858 -0.8473 2.1587 +HB2 -1.0895 -0.7125 2.1618 +HB3 -0.9282 -0.6993 2.2338 +C -0.96 -0.539 2.0148 +O -0.8776 -0.4495 2.0322 +N -1.0834 -0.5032 1.9784 +H -1.1516 -0.5766 1.9655 +CA -1.1361 -0.3683 1.9729 +HA -1.0903 -0.3028 2.0469 +CB -1.0931 -0.3114 1.838 +HB1 -0.9846 -0.3015 1.8342 +HB2 -1.1172 -0.2057 1.8269 +HB3 -1.1314 -0.3669 1.7523 +C -1.2865 -0.3555 1.992 +O -1.3626 -0.3572 1.8954 +N -1.3298 -0.3484 2.1181 +H -1.2545 -0.3521 2.1853 +CA -1.4663 -0.3482 2.1668 +HA -1.466 -0.3689 2.2738 +CB -1.5284 -0.2094 2.1544 +HB1 -1.5105 -0.171 2.0539 +HB2 -1.487 -0.1423 2.2296 +HB3 -1.6336 -0.2122 2.1828 +C -1.5362 -0.4668 2.102 +O -1.5108 -0.585 2.1244 +N -1.628 -0.4369 2.0098 +H -1.6216 -0.3431 1.9729 +CA -1.7198 -0.5246 1.9399 +HA -1.7865 -0.5741 2.0105 +CB -1.8031 -0.4365 1.8472 +HB1 -1.738 -0.3886 1.7741 +HB2 -1.8407 -0.3588 1.9137 +HB3 -1.8712 -0.5025 1.7934 +C -1.6484 -0.6223 1.8476 +O -1.6973 -0.7339 1.8316 +N -1.5334 -0.5824 1.7928 +H -1.5008 -0.4927 1.8256 +CA -1.43 -0.6787 1.7604 +HA -1.4709 -0.7646 1.7071 +CB -1.3322 -0.6076 1.6673 +HB1 -1.2867 -0.6819 1.6018 +HB2 -1.2574 -0.5477 1.7194 +HB3 -1.3897 -0.5357 1.6089 +C -1.3783 -0.744 1.8878 +O -1.2754 -0.7043 1.9419 +N -1.4516 -0.8392 1.946 +H -1.5375 -0.8589 1.8967 +CA -1.4193 -0.9027 2.0722 +HA -1.4203 -0.8331 2.1561 +CB -1.5313 -0.9937 2.1218 +HB1 -1.5108 -1.0104 2.2275 +HB2 -1.531 -1.0911 2.073 +HB3 -1.6301 -0.955 2.0969 +C -1.283 -0.9703 2.0719 +O -1.2277 -0.9848 2.1807 +N -1.2428 -1.0209 1.9551 +H -1.3033 -1.0053 1.8758 +CA -1.1153 -1.079 1.918 +HA -1.031 -1.0405 1.9754 +CB -1.1265 -1.2294 1.9413 +HB1 -1.2104 -1.2731 1.8872 +HB2 -1.1258 -1.2557 2.0471 +HB3 -1.0427 -1.2859 1.9005 +C -1.0996 -1.0657 1.7672 +O -1.203 -1.0841 1.7033 +N -0.9801 -1.044 1.7119 +H -0.8965 -1.014 1.7599 +CA -0.9585 -1.0268 1.5696 +HA -1.0294 -1.0911 1.5176 +CB -0.9854 -0.8843 1.5221 +HB1 -0.9327 -0.8123 1.5847 +HB2 -1.0876 -0.8467 1.5268 +HB3 -0.9545 -0.8782 1.4178 +C -0.8182 -1.0788 1.5417 +O -0.7196 -1.01 1.5668 +N -0.8095 -1.1918 1.4711 +H -0.8987 -1.2324 1.4469 +CA -0.6941 -1.2497 1.4053 +HA -0.6155 -1.2477 1.4807 +CB -0.7292 -1.3942 1.3713 +HB1 -0.756 -1.4447 1.4641 +HB2 -0.6355 -1.4467 1.3525 +HB3 -0.8097 -1.4054 1.2986 +C -0.6431 -1.158 1.295 +O -0.717 -1.0939 1.2205 +N -0.5104 -1.1443 1.2904 +H -0.4543 -1.1902 1.3608 +CA -0.445 -1.0527 1.1991 +HA -0.5102 -1.0237 1.1167 +CB -0.3881 -0.9292 1.2683 +HB1 -0.2911 -0.9489 1.3138 +HB2 -0.4622 -0.8818 1.3327 +HB3 -0.3719 -0.8605 1.1852 +C -0.3321 -1.1209 1.1231 +O -0.3217 -1.1107 1.0011 +N -0.2494 -1.1958 1.1963 +H -0.2773 -1.2133 1.2918 +CH3 -0.1332 -1.261 1.1392 +HH31 -0.1207 -1.2177 1.0399 +HH32 -0.1485 -1.3687 1.1463 +HH33 -0.0426 -1.2334 1.193 +132 + 100. 100. 100. +HH31 -1.6971 -0.7275 1.7143 +CH3 -1.7139 -0.8178 1.773 +HH32 -1.8053 -0.7888 1.8246 +HH33 -1.7367 -0.9079 1.716 +C -1.589 -0.8338 1.8585 +O -1.5456 -0.7458 1.9326 +N -1.5306 -0.9516 1.8355 +H -1.5613 -1.0011 1.753 +CA -1.4323 -1.0036 1.9285 +HA -1.4523 -0.9535 2.0232 +CB -1.4528 -1.1536 1.9475 +HB1 -1.4072 -1.1914 2.0389 +HB2 -1.4099 -1.2008 1.8591 +HB3 -1.5546 -1.1883 1.9654 +C -1.2943 -0.9511 1.8914 +O -1.2802 -0.8546 1.8167 +N -1.1921 -1.0212 1.9408 +H -1.2008 -1.1194 1.9629 +CA -1.0574 -0.9712 1.9595 +HA -1.0534 -0.8904 2.0326 +CB -0.9822 -1.0882 2.0223 +HB1 -0.974 -1.1813 1.9661 +HB2 -1.0313 -1.118 2.1149 +HB3 -0.8794 -1.0557 2.0384 +C -0.9952 -0.9177 1.8312 +O -0.9829 -0.9897 1.7324 +N -0.9499 -0.7931 1.8473 +H -0.9674 -0.7459 1.9349 +CA -0.8857 -0.7188 1.7408 +HA -0.8523 -0.7853 1.6611 +CB -0.9939 -0.6324 1.6765 +HB1 -1.0113 -0.5442 1.7382 +HB2 -1.0787 -0.6965 1.6526 +HB3 -0.9628 -0.587 1.5824 +C -0.7593 -0.6468 1.7854 +O -0.766 -0.5429 1.8507 +N -0.6453 -0.7113 1.7596 +H -0.6646 -0.7944 1.7056 +CA -0.5119 -0.6927 1.8131 +HA -0.467 -0.7915 1.8035 +CB -0.4362 -0.5878 1.732 +HB1 -0.4685 -0.4842 1.7425 +HB2 -0.4359 -0.6227 1.6288 +HB3 -0.3324 -0.5792 1.764 +C -0.5027 -0.6592 1.9613 +O -0.4531 -0.7414 2.038 +N -0.5453 -0.5399 2.0034 +H -0.5855 -0.4822 1.9309 +CA -0.5281 -0.4855 2.1366 +HA -0.5115 -0.5686 2.2052 +CB -0.4163 -0.3818 2.1419 +HB1 -0.3279 -0.4238 2.094 +HB2 -0.4036 -0.3417 2.2424 +HB3 -0.448 -0.2974 2.0807 +C -0.6608 -0.426 2.1816 +O -0.6714 -0.3774 2.294 +N -0.7685 -0.431 2.1028 +H -0.754 -0.4842 2.0182 +CA -0.9045 -0.4025 2.1438 +HA -0.9042 -0.4044 2.2528 +CB -0.9437 -0.2635 2.0944 +HB1 -0.8696 -0.1891 2.1236 +HB2 -1.0388 -0.2469 2.145 +HB3 -0.9441 -0.2668 1.9854 +C -0.9958 -0.5126 2.0917 +O -0.9507 -0.6247 2.0694 +N -1.1251 -0.4901 2.0672 +H -1.1656 -0.3977 2.0709 +CA -1.2236 -0.5864 2.0224 +HA -1.1619 -0.6659 1.9804 +CB -1.2928 -0.6434 2.146 +HB1 -1.3652 -0.7189 2.1153 +HB2 -1.3485 -0.5717 2.2062 +HB3 -1.2123 -0.688 2.2044 +C -1.3059 -0.5203 1.9128 +O -1.3462 -0.4054 1.9289 +N -1.3096 -0.5785 1.7927 +H -1.3009 -0.6786 1.8032 +CA -1.3674 -0.5239 1.6715 +HA -1.4483 -0.4578 1.7027 +CB -1.2678 -0.4304 1.6035 +HB1 -1.3028 -0.3692 1.5204 +HB2 -1.186 -0.4936 1.5687 +HB3 -1.2284 -0.3595 1.6763 +C -1.4309 -0.6228 1.5748 +O -1.5325 -0.5903 1.5137 +N -1.3812 -0.7462 1.5646 +H -1.3082 -0.771 1.6299 +CA -1.4167 -0.8492 1.469 +HA -1.5173 -0.8236 1.4357 +CB -1.3122 -0.8398 1.3582 +HB1 -1.2105 -0.8307 1.3963 +HB2 -1.3282 -0.7448 1.3072 +HB3 -1.312 -0.928 1.2941 +C -1.4251 -0.9857 1.5359 +O -1.5352 -1.0286 1.5694 +N -1.3168 -1.0637 1.5358 +H -1.2321 -1.0164 1.5076 +CA -1.3208 -1.2027 1.5765 +HA -1.3976 -1.217 1.6525 +CB -1.3443 -1.2888 1.4527 +HB1 -1.2606 -1.2752 1.3842 +HB2 -1.4395 -1.2688 1.4035 +HB3 -1.3432 -1.3963 1.4705 +C -1.1884 -1.2384 1.6427 +O -1.182 -1.2473 1.7651 +N -1.0852 -1.2852 1.5721 +H -1.102 -1.284 1.4725 +CA -0.9626 -1.3498 1.6142 +HA -0.9421 -1.3069 1.7123 +CB -0.979 -1.5004 1.6326 +HB1 -1.0787 -1.5056 1.6763 +HB2 -0.9037 -1.5315 1.7049 +HB3 -0.969 -1.5528 1.5375 +C -0.8413 -1.3123 1.5302 +O -0.7807 -1.3908 1.4576 +N -0.8114 -1.1825 1.5382 +H -0.8614 -1.1161 1.5955 +CA -0.6892 -1.1363 1.4755 +HA -0.6331 -1.2176 1.4293 +CB -0.7043 -1.0337 1.3636 +HB1 -0.6105 -1.006 1.3155 +HB2 -0.7571 -0.9465 1.4022 +HB3 -0.7592 -1.0899 1.288 +C -0.6075 -1.0703 1.5857 +O -0.6343 -0.9589 1.6301 +N -0.5012 -1.1368 1.6316 +H -0.4798 -1.229 1.5963 +CH3 -0.4047 -1.081 1.7241 +HH31 -0.3304 -1.1587 1.7419 +HH32 -0.4445 -1.0557 1.8224 +HH33 -0.3512 -0.9954 1.6829 +132 + 100. 100. 100. +HH31 -0.5592 -1.1429 2.5904 +CH3 -0.5419 -1.2326 2.531 +HH32 -0.4388 -1.2674 2.5251 +HH33 -0.5949 -1.3115 2.5844 +C -0.6114 -1.2009 2.3994 +O -0.5935 -1.2715 2.3004 +N -0.682 -1.0876 2.3966 +H -0.6628 -1.047 2.4871 +CA -0.7687 -1.0263 2.2979 +HA -0.7506 -1.0538 2.194 +CB -0.9142 -1.0534 2.3352 +HB1 -0.9275 -1.0746 2.4413 +HB2 -0.956 -1.1352 2.2765 +HB3 -0.9767 -0.9651 2.3219 +C -0.7532 -0.8757 2.3136 +O -0.6846 -0.8291 2.4043 +N -0.8119 -0.7992 2.2213 +H -0.8752 -0.8525 2.1634 +CA -0.8132 -0.6547 2.2318 +HA -0.8265 -0.6267 2.3363 +CB -0.6851 -0.5914 2.1781 +HB1 -0.6785 -0.5827 2.0697 +HB2 -0.5965 -0.6394 2.2197 +HB3 -0.6798 -0.4912 2.2206 +C -0.9341 -0.5931 2.1627 +O -0.9931 -0.6583 2.0768 +N -0.9657 -0.4689 2.1999 +H -0.8979 -0.4235 2.2593 +CA -1.0732 -0.389 2.1444 +HA -1.1691 -0.4227 2.1836 +CB -1.0529 -0.2462 2.1942 +HB1 -1.1405 -0.1813 2.1947 +HB2 -0.9764 -0.2078 2.1268 +HB3 -1.0146 -0.2502 2.2962 +C -1.0823 -0.3966 1.9926 +O -1.1702 -0.4584 1.9329 +N -0.9808 -0.342 1.9253 +H -0.9156 -0.2908 1.983 +CA -0.959 -0.3466 1.7821 +HA -1.0356 -0.2812 1.7403 +CB -0.8216 -0.2912 1.7454 +HB1 -0.809 -0.2708 1.6391 +HB2 -0.744 -0.3625 1.7732 +HB3 -0.8159 -0.1908 1.7875 +C -0.9673 -0.4845 1.7182 +O -1.0395 -0.5048 1.6208 +N -0.8938 -0.5806 1.7746 +H -0.8289 -0.572 1.8516 +CA -0.8919 -0.7076 1.7048 +HA -0.8734 -0.6998 1.5977 +CB -0.7819 -0.8002 1.7558 +HB1 -0.6806 -0.7632 1.7402 +HB2 -0.7906 -0.9018 1.7173 +HB3 -0.7975 -0.801 1.8637 +C -1.0239 -0.7834 1.7067 +O -1.0485 -0.8647 1.6179 +N -1.1043 -0.766 1.8119 +H -1.0814 -0.6931 1.878 +CA -1.239 -0.8175 1.8257 +HA -1.2443 -0.9218 1.7945 +CB -1.2723 -0.8194 1.9746 +HB1 -1.3018 -0.7234 2.0169 +HB2 -1.1817 -0.8431 2.0304 +HB3 -1.3585 -0.885 1.9866 +C -1.3337 -0.741 1.7344 +O -1.4179 -0.8028 1.6696 +N -1.3093 -0.6102 1.7228 +H -1.2381 -0.5659 1.7791 +CA -1.368 -0.5341 1.6143 +HA -1.4758 -0.5464 1.6253 +CB -1.3297 -0.3877 1.6337 +HB1 -1.3757 -0.3318 1.5522 +HB2 -1.2237 -0.3636 1.6261 +HB3 -1.3728 -0.3512 1.7269 +C -1.3461 -0.5952 1.4767 +O -1.4427 -0.6224 1.4058 +N -1.2237 -0.6299 1.436 +H -1.1504 -0.5995 1.4984 +CA -1.1788 -0.6889 1.3115 +HA -1.2413 -0.6585 1.2274 +CB -1.0424 -0.6259 1.2846 +HB1 -1.0129 -0.6367 1.1803 +HB2 -0.966 -0.6717 1.3475 +HB3 -1.0265 -0.5186 1.295 +C -1.1775 -0.8411 1.3112 +O -1.0996 -0.9066 1.2424 +N -1.2754 -0.8974 1.3824 +H -1.3323 -0.8375 1.4406 +CA -1.3116 -1.0374 1.3913 +HA -1.3866 -1.0325 1.4703 +CB -1.3849 -1.0819 1.265 +HB1 -1.4758 -1.1402 1.2797 +HB2 -1.3222 -1.1402 1.1976 +HB3 -1.4209 -0.9967 1.2073 +C -1.2114 -1.1341 1.4527 +O -1.2495 -1.2007 1.5486 +N -1.0829 -1.1379 1.4165 +H -1.0749 -1.0628 1.3495 +CA -0.9628 -1.2022 1.4659 +HA -0.9482 -1.2941 1.4092 +CB -0.8466 -1.114 1.421 +HB1 -0.845 -1.0224 1.48 +HB2 -0.853 -1.0861 1.3158 +HB3 -0.7469 -1.1521 1.4435 +C -0.9686 -1.2251 1.6163 +O -0.9338 -1.3299 1.6703 +N -1.0142 -1.1274 1.695 +H -1.0349 -1.0453 1.6399 +CA -1.0366 -1.1216 1.838 +HA -1.0781 -1.0228 1.8579 +CB -1.1332 -1.2282 1.889 +HB1 -1.0756 -1.3152 1.9207 +HB2 -1.1998 -1.2512 1.8058 +HB3 -1.1976 -1.1973 1.9713 +C -0.9086 -1.1185 1.9203 +O -0.8966 -1.0336 2.0084 +N -0.8131 -1.2072 1.8915 +H -0.8236 -1.2535 1.8024 +CA -0.6929 -1.2243 1.9706 +HA -0.7125 -1.2471 2.0754 +CB -0.6397 -1.3622 1.9327 +HB1 -0.5608 -1.3941 2.0009 +HB2 -0.5986 -1.3442 1.8334 +HB3 -0.7104 -1.4451 1.9307 +C -0.5917 -1.1111 1.9593 +O -0.5776 -1.0592 1.8488 +N -0.5241 -1.0743 2.0684 +H -0.509 -1.1369 2.1462 +CH3 -0.4385 -0.9574 2.0732 +HH31 -0.3708 -0.9639 1.988 +HH32 -0.3793 -0.945 2.1639 +HH33 -0.505 -0.8715 2.0646 +132 + 100. 100. 100. +HH31 -0.6449 -0.3264 2.5959 +CH3 -0.6716 -0.2939 2.4953 +HH32 -0.7456 -0.2145 2.506 +HH33 -0.5791 -0.2696 2.4431 +C -0.7392 -0.4071 2.4194 +O -0.7815 -0.3904 2.3052 +N -0.7538 -0.5208 2.4879 +H -0.6972 -0.516 2.5714 +CA -0.8043 -0.6521 2.4533 +HA -0.7293 -0.6956 2.3872 +CB -0.8009 -0.7386 2.579 +HB1 -0.8432 -0.6853 2.6642 +HB2 -0.6993 -0.7635 2.6094 +HB3 -0.8445 -0.8383 2.5723 +C -0.9369 -0.6421 2.3793 +O -0.9428 -0.6916 2.267 +N -1.0341 -0.5614 2.4226 +H -1.0261 -0.5349 2.5197 +CA -1.1588 -0.5343 2.354 +HA -1.2165 -0.6268 2.3511 +CB -1.2367 -0.4288 2.432 +HB1 -1.2557 -0.4767 2.528 +HB2 -1.3297 -0.3966 2.3851 +HB3 -1.1755 -0.3408 2.4516 +C -1.1348 -0.4939 2.2093 +O -1.2063 -0.5506 2.127 +N -1.0488 -0.3992 2.1709 +H -0.9828 -0.3616 2.2374 +CA -1.0442 -0.3481 2.0353 +HA -1.1468 -0.3408 1.9994 +CB -0.9858 -0.2071 2.0364 +HB1 -0.9909 -0.1755 1.9322 +HB2 -0.8784 -0.1975 2.0527 +HB3 -1.0486 -0.1498 2.1047 +C -0.9694 -0.4411 1.9409 +O -1.0018 -0.4625 1.8243 +N -0.8691 -0.5058 2.0006 +H -0.8683 -0.4884 2.1001 +CA -0.8028 -0.6254 1.9527 +HA -0.7498 -0.5842 1.8669 +CB -0.7011 -0.6673 2.0586 +HB1 -0.7281 -0.6427 2.1614 +HB2 -0.6058 -0.6154 2.0485 +HB3 -0.6785 -0.7738 2.0539 +C -0.8888 -0.7389 1.899 +O -0.892 -0.7601 1.778 +N -0.973 -0.7975 1.9844 +H -0.9579 -0.7661 2.0792 +CA -1.0856 -0.8854 1.9602 +HA -1.044 -0.9809 1.928 +CB -1.1663 -0.9057 2.0881 +HB1 -1.1033 -0.9396 2.1704 +HB2 -1.2355 -0.9873 2.0673 +HB3 -1.2125 -0.8096 2.1108 +C -1.1726 -0.8299 1.8482 +O -1.206 -0.9034 1.7556 +N -1.2142 -0.7032 1.8543 +H -1.1937 -0.651 1.9382 +CA -1.3115 -0.6502 1.7608 +HA -1.3962 -0.7171 1.7457 +CB -1.3599 -0.5199 1.8237 +HB1 -1.2787 -0.4472 1.8244 +HB2 -1.4003 -0.531 1.9243 +HB3 -1.4395 -0.4837 1.7585 +C -1.2606 -0.6192 1.6207 +O -1.3442 -0.585 1.5374 +N -1.1318 -0.6444 1.5966 +H -1.0849 -0.6589 1.6849 +CA -1.0569 -0.6152 1.4761 +HA -1.1301 -0.5804 1.4031 +CB -0.9693 -0.4929 1.5019 +HB1 -0.8944 -0.5191 1.5767 +HB2 -1.0314 -0.4078 1.5299 +HB3 -0.9208 -0.475 1.406 +C -0.9702 -0.7265 1.4188 +O -0.9858 -0.7538 1.3 +N -0.8761 -0.7812 1.496 +H -0.865 -0.761 1.5943 +CA -0.7712 -0.8566 1.4302 +HA -0.8124 -0.9088 1.3438 +CB -0.672 -0.7455 1.397 +HB1 -0.5754 -0.7805 1.3609 +HB2 -0.6499 -0.6773 1.4792 +HB3 -0.7105 -0.6865 1.3138 +C -0.7057 -0.9621 1.5181 +O -0.619 -1.0338 1.4684 +N -0.7459 -0.9768 1.6445 +H -0.8223 -0.9193 1.6772 +CA -0.6955 -1.0817 1.7307 +HA -0.5932 -1.1058 1.7017 +CB -0.6949 -1.0396 1.8774 +HB1 -0.6363 -0.9506 1.9004 +HB2 -0.665 -1.1201 1.9446 +HB3 -0.7954 -1.0048 1.9012 +C -0.7764 -1.209 1.7099 +O -0.8675 -1.235 1.7881 +N -0.7564 -1.27 1.5928 +H -0.6807 -1.2315 1.5382 +CA -0.8375 -1.3795 1.5435 +HA -0.7954 -1.4232 1.453 +CB -0.8438 -1.5017 1.6347 +HB1 -0.7427 -1.5381 1.6532 +HB2 -0.8946 -1.5871 1.59 +HB3 -0.8965 -1.4746 1.7262 +C -0.9764 -1.338 1.497 +O -1.0099 -1.3417 1.3788 +N -1.061 -1.2936 1.5903 +H -1.0159 -1.2567 1.6728 +CA -1.1962 -1.2429 1.5782 +HA -1.2476 -1.322 1.5237 +CB -1.2634 -1.2285 1.7145 +HB1 -1.2579 -1.3268 1.7613 +HB2 -1.3652 -1.1933 1.6979 +HB3 -1.2147 -1.1504 1.7728 +C -1.2047 -1.1164 1.494 +O -1.1053 -1.0448 1.4844 +N -1.3263 -1.081 1.4517 +H -1.4055 -1.1352 1.4829 +CA -1.3593 -0.9461 1.4103 +HA -1.3 -0.8745 1.4673 +CB -1.327 -0.9376 1.2614 +HB1 -1.3358 -0.8334 1.2307 +HB2 -1.4081 -0.9757 1.1993 +HB3 -1.2345 -0.9854 1.2291 +C -1.5074 -0.9215 1.4356 +O -1.5891 -1.0099 1.4108 +N -1.5497 -0.8035 1.4817 +H -1.4829 -0.7281 1.4887 +CH3 -1.6869 -0.7742 1.5179 +HH31 -1.7408 -0.8493 1.5756 +HH32 -1.7479 -0.7858 1.4283 +HH33 -1.6944 -0.6715 1.5538 +132 + 100. 100. 100. +HH31 -0.2653 -0.9421 2.3086 +CH3 -0.1905 -0.877 2.2632 +HH32 -0.0909 -0.8975 2.3026 +HH33 -0.1962 -0.8956 2.156 +C -0.22 -0.7287 2.2802 +O -0.3078 -0.6879 2.356 +N -0.1473 -0.6465 2.2042 +H -0.0709 -0.691 2.1554 +CA -0.1568 -0.5047 2.1762 +HA -0.1292 -0.4451 2.2633 +CB -0.0447 -0.4714 2.0782 +HB1 -0.0278 -0.3637 2.0798 +HB2 -0.068 -0.4942 1.9743 +HB3 0.0542 -0.5072 2.1069 +C -0.2963 -0.4584 2.1366 +O -0.3495 -0.3612 2.1898 +N -0.3622 -0.5341 2.0486 +H -0.3242 -0.6247 2.0251 +CA -0.493 -0.5026 1.9948 +HA -0.5461 -0.4258 2.051 +CB -0.4663 -0.4449 1.8561 +HB1 -0.4271 -0.3434 1.8616 +HB2 -0.5557 -0.4547 1.7944 +HB3 -0.3872 -0.4956 1.8009 +C -0.5745 -0.6312 1.9951 +O -0.5242 -0.7404 1.9695 +N -0.7051 -0.616 2.018 +H -0.7501 -0.5259 2.0093 +CA -0.8036 -0.7221 2.0112 +HA -0.7789 -0.7865 1.9268 +CB -0.7935 -0.8145 2.1321 +HB1 -0.8687 -0.8928 2.1215 +HB2 -0.8286 -0.7626 2.2213 +HB3 -0.6912 -0.8516 2.1376 +C -0.9454 -0.671 1.9903 +O -0.978 -0.5607 2.0338 +N -1.0361 -0.7539 1.9381 +H -1.0063 -0.8427 1.9004 +CA -1.1775 -0.7237 1.9279 +HA -1.2113 -0.6778 2.0208 +CB -1.2196 -0.6178 1.8263 +HB1 -1.1828 -0.5176 1.8485 +HB2 -1.3266 -0.5982 1.8196 +HB3 -1.1777 -0.6514 1.7315 +C -1.26 -0.8478 1.8971 +O -1.2037 -0.9351 1.8315 +N -1.3797 -0.8607 1.9548 +H -1.4218 -0.7775 1.9937 +CA -1.4729 -0.9681 1.9272 +HA -1.4508 -1.0055 1.8272 +CB -1.4509 -1.0869 2.0205 +HB1 -1.4671 -1.0678 2.1266 +HB2 -1.3486 -1.1193 2.0011 +HB3 -1.5167 -1.1708 1.9978 +C -1.6154 -0.9147 1.9286 +O -1.6481 -0.8165 1.995 +N -1.6977 -0.9804 1.8467 +H -1.6504 -1.0476 1.7879 +CA -1.8218 -0.9465 1.7799 +HA -1.8408 -1.0393 1.726 +CB -1.936 -0.9421 1.881 +HB1 -1.9165 -1.0118 1.9625 +HB2 -2.0277 -0.9721 1.8302 +HB3 -1.9479 -0.8426 1.9238 +C -1.8126 -0.8356 1.676 +O -1.8694 -0.8509 1.5681 +N -1.7461 -0.7243 1.7078 +H -1.7179 -0.717 1.8045 +CA -1.713 -0.6176 1.6155 +HA -1.7987 -0.5979 1.551 +CB -1.6872 -0.4861 1.6883 +HB1 -1.7691 -0.4558 1.7536 +HB2 -1.6658 -0.4073 1.6161 +HB3 -1.6046 -0.5036 1.7573 +C -1.5984 -0.6671 1.5283 +O -1.4831 -0.6361 1.5572 +N -1.6294 -0.7577 1.4353 +H -1.728 -0.7794 1.4353 +CA -1.5433 -0.86 1.3794 +HA -1.603 -0.9342 1.3263 +CB -1.4514 -0.8034 1.2715 +HB1 -1.3634 -0.7576 1.3166 +HB2 -1.5029 -0.7385 1.2007 +HB3 -1.4088 -0.8858 1.2143 +C -1.4821 -0.951 1.485 +O -1.537 -0.965 1.5941 +N -1.3667 -1.0123 1.4578 +H -1.3291 -1.0085 1.3641 +CA -1.2943 -1.1044 1.5431 +HA -1.3009 -1.0959 1.6516 +CB -1.3581 -1.239 1.5098 +HB1 -1.3494 -1.2527 1.402 +HB2 -1.465 -1.241 1.5312 +HB3 -1.3126 -1.3233 1.5616 +C -1.1468 -1.0948 1.507 +O -1.1064 -1.138 1.3993 +N -1.0673 -1.0367 1.5972 +H -1.1079 -1.0215 1.6884 +CA -0.9298 -0.9997 1.5704 +HA -0.8947 -1.0647 1.4902 +CB -0.9315 -0.8584 1.5126 +HB1 -0.8286 -0.8252 1.4989 +HB2 -0.9746 -0.7933 1.5886 +HB3 -0.9937 -0.8474 1.4238 +C -0.8419 -1.0082 1.6943 +O -0.891 -0.9925 1.8059 +N -0.7108 -1.0303 1.6814 +H -0.6714 -1.0518 1.5909 +CA -0.6163 -1.022 1.7909 +HA -0.6483 -0.9358 1.8495 +CB -0.6119 -1.1464 1.8791 +HB1 -0.6914 -1.1508 1.9536 +HB2 -0.5304 -1.1387 1.951 +HB3 -0.617 -1.237 1.8187 +C -0.4713 -1.0088 1.7467 +O -0.4382 -1.0734 1.6475 +N -0.3904 -0.9239 1.8105 +H -0.4214 -0.8583 1.8808 +CA -0.2622 -0.8872 1.7539 +HA -0.2148 -0.9759 1.7117 +CB -0.2879 -0.7752 1.6535 +HB1 -0.2987 -0.6737 1.6917 +HB2 -0.3746 -0.8021 1.5931 +HB3 -0.2039 -0.7718 1.5841 +C -0.1695 -0.8363 1.8634 +O -0.204 -0.76 1.9533 +N -0.0419 -0.8706 1.8442 +H -0.0262 -0.9322 1.7658 +CH3 0.0703 -0.8364 1.9293 +HH31 0.1379 -0.7762 1.8685 +HH32 0.1139 -0.9169 1.9884 +HH33 0.0418 -0.7708 2.0115 +132 + 100. 100. 100. +HH31 -1.2239 -0.7009 1.5699 +CH3 -1.2108 -0.7999 1.5262 +HH32 -1.288 -0.872 1.5531 +HH33 -1.2102 -0.7856 1.4182 +C -1.0763 -0.8566 1.5693 +O -1.0359 -0.96 1.5166 +N -0.9963 -0.794 1.656 +H -1.0477 -0.715 1.6923 +CA -0.8549 -0.8137 1.6806 +HA -0.8296 -0.9001 1.6192 +CB -0.7726 -0.6947 1.6322 +HB1 -0.8008 -0.6115 1.6968 +HB2 -0.803 -0.6695 1.5307 +HB3 -0.6666 -0.7198 1.6292 +C -0.839 -0.8503 1.8275 +O -0.7608 -0.7888 1.8996 +N -0.9084 -0.9556 1.8714 +H -0.9842 -0.9968 1.8188 +CA -0.9159 -0.9945 2.0107 +HA -0.9925 -1.0719 2.0167 +CB -0.7822 -1.0576 2.0485 +HB1 -0.7469 -1.14 1.9864 +HB2 -0.799 -1.1018 2.1467 +HB3 -0.7002 -0.9859 2.0461 +C -0.9705 -0.8934 2.1106 +O -1.074 -0.915 2.1732 +N -0.8791 -0.8014 2.1423 +H -0.8074 -0.7994 2.0711 +CA -0.8974 -0.6885 2.2313 +HA -0.9957 -0.6853 2.2781 +CB -0.8008 -0.7119 2.3471 +HB1 -0.7865 -0.6217 2.4066 +HB2 -0.702 -0.744 2.3141 +HB3 -0.8434 -0.7839 2.417 +C -0.8732 -0.553 2.1662 +O -0.9262 -0.4517 2.2111 +N -0.7962 -0.546 2.0573 +H -0.7921 -0.6314 2.0037 +CA -0.7219 -0.4283 2.0171 +HA -0.6582 -0.3971 2.0998 +CB -0.6171 -0.4829 1.9205 +HB1 -0.5449 -0.5382 1.9807 +HB2 -0.5633 -0.3969 1.8805 +HB3 -0.6484 -0.5463 1.8376 +C -0.814 -0.3233 1.9566 +O -0.8294 -0.3157 1.8349 +N -0.8858 -0.2427 2.0352 +H -0.8797 -0.2552 2.1353 +CA -0.9908 -0.1495 1.9994 +HA -1.021 -0.0972 2.0901 +CB -0.9492 -0.0438 1.8976 +HB1 -0.9209 -0.097 1.8067 +HB2 -0.8638 0.0079 1.9415 +HB3 -1.0367 0.0181 1.8778 +C -1.1148 -0.2228 1.9502 +O -1.2267 -0.1861 1.9855 +N -1.0998 -0.3333 1.8768 +H -1.0062 -0.3519 1.8438 +CA -1.2061 -0.4138 1.8201 +HA -1.304 -0.366 1.824 +CB -1.1611 -0.4269 1.6749 +HB1 -1.082 -0.4983 1.6517 +HB2 -1.1304 -0.3341 1.6267 +HB3 -1.2406 -0.4605 1.6083 +C -1.2125 -0.5487 1.8903 +O -1.135 -0.6355 1.8508 +N -1.2974 -0.5681 1.9915 +H -1.3575 -0.4893 2.0108 +CA -1.2946 -0.6711 2.0933 +HA -1.1968 -0.7191 2.0958 +CB -1.3129 -0.6032 2.2288 +HB1 -1.4174 -0.5722 2.2283 +HB2 -1.2465 -0.5168 2.2296 +HB3 -1.2824 -0.674 2.3059 +C -1.3939 -0.7794 2.0537 +O -1.5057 -0.7839 2.1046 +N -1.3487 -0.8608 1.958 +H -1.2591 -0.8373 1.9176 +CA -1.399 -0.9903 1.9169 +HA -1.414 -1.0504 2.0066 +CB -1.5363 -0.9721 1.8528 +HB1 -1.6074 -0.9372 1.9277 +HB2 -1.5738 -1.0707 1.8256 +HB3 -1.536 -0.9078 1.7648 +C -1.2897 -1.0583 1.8356 +O -1.1732 -1.0194 1.8313 +N -1.3337 -1.1636 1.7663 +H -1.4302 -1.1871 1.7481 +CA -1.243 -1.2461 1.689 +HA -1.1411 -1.2078 1.6951 +CB -1.2404 -1.3839 1.7545 +HB1 -1.1857 -1.3962 1.848 +HB2 -1.1909 -1.4523 1.6855 +HB3 -1.3392 -1.4273 1.7699 +C -1.2857 -1.2474 1.5429 +O -1.3941 -1.2972 1.5136 +N -1.1947 -1.1995 1.4578 +H -1.1201 -1.1429 1.4957 +CA -1.1939 -1.2281 1.3158 +HA -1.2232 -1.3326 1.3056 +CB -1.2899 -1.1352 1.2419 +HB1 -1.3924 -1.1663 1.2625 +HB2 -1.2639 -1.1322 1.1361 +HB3 -1.2805 -1.0318 1.275 +C -1.0494 -1.2147 1.27 +O -0.9972 -1.3178 1.2283 +N -0.9942 -1.0932 1.2667 +H -1.0512 -1.0256 1.3156 +CA -0.8559 -1.0635 1.2354 +HA -0.833 -1.082 1.1304 +CB -0.825 -0.9147 1.2495 +HB1 -0.8176 -0.8861 1.3544 +HB2 -0.8947 -0.846 1.2013 +HB3 -0.732 -0.8794 1.205 +C -0.7565 -1.1355 1.3254 +O -0.6523 -1.18 1.2777 +N -0.791 -1.1463 1.4539 +H -0.8788 -1.1063 1.4837 +CA -0.7053 -1.188 1.5631 +HA -0.7558 -1.1549 1.6538 +CB -0.7088 -1.3405 1.5673 +HB1 -0.6895 -1.3826 1.4687 +HB2 -0.8005 -1.3758 1.6146 +HB3 -0.6285 -1.3698 1.635 +C -0.5715 -1.1164 1.5513 +O -0.5633 -0.9941 1.5606 +N -0.4633 -1.1938 1.5401 +H -0.4859 -1.2913 1.5264 +CH3 -0.3305 -1.1365 1.5307 +HH31 -0.2957 -1.1212 1.4286 +HH32 -0.2625 -1.215 1.5637 +HH33 -0.3265 -1.0511 1.5983 +132 + 100. 100. 100. +HH31 -0.3261 -0.9209 2.604 +CH3 -0.4035 -0.8476 2.5812 +HH32 -0.4821 -0.8483 2.6568 +HH33 -0.3666 -0.745 2.5788 +C -0.4703 -0.8799 2.4483 +O -0.4088 -0.9335 2.3565 +N -0.603 -0.8656 2.4428 +H -0.638 -0.8295 2.5304 +CA -0.6786 -0.8683 2.3193 +HA -0.6515 -0.9513 2.2541 +CB -0.8269 -0.8911 2.3474 +HB1 -0.8814 -0.8421 2.2667 +HB2 -0.8619 -0.8535 2.4435 +HB3 -0.8508 -0.9971 2.3395 +C -0.6534 -0.7362 2.248 +O -0.6682 -0.6293 2.3068 +N -0.6399 -0.7401 2.1153 +H -0.6256 -0.8329 2.0779 +CA -0.6371 -0.6295 2.0217 +HA -0.5745 -0.5545 2.0701 +CB -0.5637 -0.672 1.8949 +HB1 -0.5957 -0.77 1.8594 +HB2 -0.4581 -0.6697 1.9217 +HB3 -0.5723 -0.6006 1.813 +C -0.7689 -0.559 1.9929 +O -0.8252 -0.563 1.8838 +N -0.8238 -0.4981 2.0983 +H -0.7853 -0.5286 2.1865 +CA -0.9306 -0.4002 2.0943 +HA -0.9666 -0.4077 2.1969 +CB -0.8667 -0.2626 2.0778 +HB1 -0.8175 -0.2653 1.9806 +HB2 -0.7899 -0.2485 2.1538 +HB3 -0.9351 -0.179 2.0924 +C -1.0507 -0.4402 2.0099 +O -1.1158 -0.5432 2.0262 +N -1.0849 -0.3506 1.917 +H -1.047 -0.2574 1.9258 +CA -1.2002 -0.3669 1.8308 +HA -1.292 -0.3721 1.8894 +CB -1.2065 -0.2349 1.7546 +HB1 -1.2202 -0.1627 1.8351 +HB2 -1.2916 -0.2377 1.6866 +HB3 -1.1148 -0.2141 1.6995 +C -1.1903 -0.4875 1.7385 +O -1.2856 -0.5623 1.7178 +N -1.0754 -0.4966 1.671 +H -1.0109 -0.4264 1.7043 +CA -1.0321 -0.6116 1.5942 +HA -1.0918 -0.61 1.503 +CB -0.8849 -0.593 1.5585 +HB1 -0.8598 -0.487 1.5575 +HB2 -0.876 -0.633 1.4575 +HB3 -0.8187 -0.6523 1.6216 +C -1.0466 -0.7491 1.6577 +O -1.0863 -0.8445 1.5911 +N -1.0096 -0.7531 1.7859 +H -0.9655 -0.6695 1.8216 +CA -1.0364 -0.8705 1.8665 +HA -1.0114 -0.9625 1.8137 +CB -0.938 -0.8632 1.9829 +HB1 -0.8378 -0.8576 1.9402 +HB2 -0.9398 -0.9463 2.0534 +HB3 -0.9572 -0.7704 2.0368 +C -1.1807 -0.8877 1.912 +O -1.2342 -0.9984 1.9107 +N -1.2404 -0.7796 1.9626 +H -1.1945 -0.6896 1.9644 +CA -1.3802 -0.7836 2.0003 +HA -1.3871 -0.8624 2.0753 +CB -1.4131 -0.6506 2.0675 +HB1 -1.3429 -0.624 2.1465 +HB2 -1.5109 -0.6512 2.1157 +HB3 -1.4119 -0.5722 1.9917 +C -1.4725 -0.8246 1.8864 +O -1.5774 -0.8822 1.9143 +N -1.4367 -0.7924 1.7619 +H -1.3697 -0.7179 1.749 +CA -1.5131 -0.8392 1.648 +HA -1.6159 -0.8533 1.6814 +CB -1.5166 -0.7208 1.5519 +HB1 -1.5685 -0.6462 1.6121 +HB2 -1.5726 -0.7551 1.4649 +HB3 -1.4112 -0.7043 1.5296 +C -1.4528 -0.9648 1.5868 +O -1.5065 -1.0256 1.4944 +N -1.3388 -1.0148 1.6352 +H -1.301 -0.9832 1.7234 +CA -1.2819 -1.141 1.5924 +HA -1.1927 -1.1435 1.655 +CB -1.3661 -1.2585 1.6412 +HB1 -1.454 -1.2464 1.5779 +HB2 -1.4021 -1.2484 1.7436 +HB3 -1.3131 -1.3522 1.6235 +C -1.2292 -1.1539 1.4502 +O -1.2395 -1.2542 1.3799 +N -1.1403 -1.059 1.4197 +H -1.1307 -0.991 1.4938 +CA -1.0533 -1.0616 1.3039 +HA -1.0911 -1.1347 1.2325 +CB -1.0498 -0.9207 1.2453 +HB1 -1.0085 -0.9324 1.1451 +HB2 -0.9864 -0.861 1.3109 +HB3 -1.1512 -0.8855 1.2263 +C -0.9109 -1.1019 1.3394 +O -0.8469 -1.1799 1.2692 +N -0.8551 -1.0443 1.4461 +H -0.9109 -0.9771 1.4967 +CA -0.7123 -1.0525 1.4694 +HA -0.6697 -1.1441 1.4282 +CB -0.6486 -0.9311 1.4023 +HB1 -0.5412 -0.9455 1.4138 +HB2 -0.6759 -0.8361 1.4482 +HB3 -0.6791 -0.9394 1.298 +C -0.7002 -1.0493 1.6211 +O -0.6918 -0.9428 1.6817 +N -0.722 -1.1631 1.6875 +H -0.7248 -1.2526 1.6409 +CA -0.7321 -1.1686 1.8319 +HA -0.8301 -1.1297 1.8597 +CB -0.7345 -1.3149 1.8753 +HB1 -0.6389 -1.3639 1.8566 +HB2 -0.8263 -1.366 1.8462 +HB3 -0.7422 -1.3204 1.9839 +C -0.631 -1.0955 1.9191 +O -0.6712 -1.0368 2.0193 +N -0.5013 -1.1065 1.8892 +H -0.4728 -1.155 1.8053 +CH3 -0.3883 -1.0506 1.9605 +HH31 -0.2998 -1.1048 1.927 +HH32 -0.4204 -1.0606 2.0642 +HH33 -0.3665 -0.9463 1.9372 +132 + 100. 100. 100. +HH31 -0.2637 -1.191 1.743 +CH3 -0.3635 -1.1482 1.7519 +HH32 -0.3546 -1.057 1.693 +HH33 -0.4262 -1.2246 1.7059 +C -0.4201 -1.1295 1.8919 +O -0.4586 -1.2241 1.9602 +N -0.4227 -1.0029 1.9343 +H -0.4181 -0.9332 1.8614 +CA -0.438 -0.9465 2.0669 +HA -0.4695 -1.0162 2.1445 +CB -0.2986 -0.8943 2.1008 +HB1 -0.2653 -0.824 2.0245 +HB2 -0.2259 -0.9754 2.0965 +HB3 -0.2968 -0.838 2.1941 +C -0.5398 -0.8336 2.0755 +O -0.6471 -0.8507 2.1329 +N -0.5097 -0.7196 2.0129 +H -0.4215 -0.712 1.9643 +CA -0.5984 -0.6051 2.0082 +HA -0.642 -0.5996 2.108 +CB -0.5265 -0.4755 1.9718 +HB1 -0.5971 -0.3925 1.9717 +HB2 -0.4895 -0.4935 1.8708 +HB3 -0.4388 -0.4555 2.0334 +C -0.7123 -0.6318 1.911 +O -0.7055 -0.594 1.7942 +N -0.8187 -0.682 1.9742 +H -0.8167 -0.7227 2.0666 +CA -0.9521 -0.6751 1.9182 +HA -0.9615 -0.7293 1.824 +CB -1.0504 -0.7354 2.0181 +HB1 -1.1534 -0.7336 1.9825 +HB2 -1.0653 -0.695 2.1182 +HB3 -1.0279 -0.842 2.023 +C -0.9955 -0.532 1.89 +O -1.0108 -0.4464 1.977 +N -1.0067 -0.5052 1.7597 +H -0.9631 -0.5624 1.6888 +CA -1.0814 -0.3923 1.708 +HA -1.0488 -0.3106 1.7724 +CB -1.0611 -0.3566 1.561 +HB1 -1.0679 -0.448 1.5019 +HB2 -0.9601 -0.3207 1.5413 +HB3 -1.1181 -0.2705 1.5264 +C -1.2309 -0.4053 1.7339 +O -1.3091 -0.4413 1.6461 +N -1.2709 -0.3939 1.8607 +H -1.1957 -0.3744 1.9253 +CA -1.3988 -0.4327 1.9166 +HA -1.3841 -0.4093 2.022 +CB -1.5088 -0.3402 1.8654 +HB1 -1.5338 -0.3638 1.7619 +HB2 -1.4835 -0.2342 1.8684 +HB3 -1.5985 -0.3465 1.9271 +C -1.4441 -0.5774 1.9033 +O -1.4503 -0.6482 2.0036 +N -1.4715 -0.6186 1.7793 +H -1.4626 -0.5372 1.7201 +CA -1.5071 -0.7513 1.7333 +HA -1.6151 -0.7619 1.7436 +CB -1.4759 -0.7411 1.5843 +HB1 -1.4939 -0.8247 1.5167 +HB2 -1.3747 -0.71 1.5582 +HB3 -1.5458 -0.6647 1.5504 +C -1.4497 -0.8668 1.8141 +O -1.3465 -0.9203 1.774 +N -1.5177 -0.9177 1.9171 +H -1.5989 -0.8637 1.9433 +CA -1.465 -0.9982 2.0255 +HA -1.397 -0.9276 2.0733 +CB -1.5768 -1.0336 2.1232 +HB1 -1.6022 -0.9401 2.1732 +HB2 -1.543 -1.094 2.2074 +HB3 -1.6595 -1.0806 2.07 +C -1.3934 -1.1253 1.9822 +O -1.4595 -1.2193 1.9385 +N -1.2601 -1.1288 1.9875 +H -1.2104 -1.0473 2.0205 +CA -1.1698 -1.2192 1.9191 +HA -1.0727 -1.1817 1.9515 +CB -1.1819 -1.3571 1.9835 +HB1 -1.1022 -1.4207 1.945 +HB2 -1.2806 -1.4028 1.9771 +HB3 -1.1731 -1.3605 2.0921 +C -1.171 -1.2239 1.767 +O -1.0654 -1.2244 1.7041 +N -1.2854 -1.1963 1.7039 +H -1.366 -1.2013 1.7645 +CA -1.3028 -1.1791 1.561 +HA -1.2884 -1.2749 1.511 +CB -1.4469 -1.1354 1.5358 +HB1 -1.4468 -1.0862 1.4385 +HB2 -1.4751 -1.0673 1.616 +HB3 -1.5196 -1.2162 1.5277 +C -1.2077 -1.0894 1.4832 +O -1.1786 -1.1077 1.3652 +N -1.1529 -0.9861 1.5476 +H -1.1715 -0.9727 1.646 +CA -1.0537 -0.8991 1.4876 +HA -1.0039 -0.9588 1.4112 +CB -1.1205 -0.7783 1.4226 +HB1 -1.216 -0.8125 1.3828 +HB2 -1.0611 -0.7277 1.3465 +HB3 -1.1309 -0.6985 1.4961 +C -0.9389 -0.8708 1.5834 +O -0.8899 -0.7582 1.5813 +N -0.8944 -0.9657 1.6662 +H -0.9364 -1.0561 1.65 +CA -0.7687 -0.97 1.7381 +HA -0.7754 -0.8936 1.8156 +CB -0.7537 -1.1028 1.8118 +HB1 -0.8511 -1.1364 1.8473 +HB2 -0.6935 -1.076 1.8987 +HB3 -0.7012 -1.1769 1.7514 +C -0.6498 -0.9403 1.6478 +O -0.6081 -1.0351 1.5816 +N -0.606 -0.8142 1.6465 +H -0.6529 -0.7435 1.7012 +CA -0.5186 -0.7611 1.5438 +HA -0.4936 -0.8404 1.4733 +CB -0.5865 -0.65 1.4641 +HB1 -0.6603 -0.6985 1.4002 +HB2 -0.518 -0.5912 1.4031 +HB3 -0.6215 -0.5891 1.5475 +C -0.3829 -0.7252 1.6026 +O -0.3638 -0.7477 1.7219 +N -0.2854 -0.6879 1.5193 +H -0.2984 -0.6733 1.4203 +CH3 -0.1566 -0.6516 1.575 +HH31 -0.1214 -0.7166 1.6551 +HH32 -0.1629 -0.5541 1.6234 +HH33 -0.0803 -0.6477 1.4973 +132 + 100. 100. 100. +HH31 -0.6273 -0.5386 2.1838 +CH3 -0.6973 -0.6222 2.1825 +HH32 -0.703 -0.6627 2.0815 +HH33 -0.6673 -0.7042 2.2477 +C -0.8385 -0.5779 2.218 +O -0.873 -0.4627 2.1925 +N -0.9174 -0.667 2.2784 +H -0.8874 -0.7633 2.2828 +CA -1.0496 -0.6326 2.3269 +HA -1.1041 -0.5873 2.2441 +CB -1.1275 -0.7572 2.3682 +HB1 -1.0867 -0.8416 2.3125 +HB2 -1.231 -0.7463 2.336 +HB3 -1.12 -0.7784 2.4748 +C -1.0443 -0.5283 2.4376 +O -1.1316 -0.4423 2.447 +N -0.9609 -0.5398 2.5412 +H -0.9109 -0.6273 2.5349 +CA -0.9534 -0.4466 2.6518 +HA -1.0489 -0.4026 2.6808 +CB -0.9081 -0.5272 2.7732 +HB1 -0.82 -0.5889 2.7552 +HB2 -0.9921 -0.5864 2.8095 +HB3 -0.8839 -0.4623 2.8573 +C -0.8648 -0.3285 2.6146 +O -0.7571 -0.3039 2.6685 +N -0.9098 -0.2681 2.5045 +H -0.9986 -0.3003 2.4687 +CA -0.8395 -0.1677 2.4272 +HA -0.8139 -0.0844 2.4927 +CB -0.7067 -0.2222 2.3754 +HB1 -0.7279 -0.3188 2.3295 +HB2 -0.6285 -0.2377 2.4498 +HB3 -0.6619 -0.1508 2.3063 +C -0.9372 -0.1133 2.3239 +O -0.9933 -0.0062 2.346 +N -0.9616 -0.1887 2.2165 +H -0.9302 -0.2846 2.2198 +CA -1.0352 -0.1497 2.0979 +HA -1.1016 -0.0693 2.1296 +CB -0.9289 -0.1017 1.9995 +HB1 -0.8834 -0.1892 1.953 +HB2 -0.8616 -0.0289 2.0449 +HB3 -0.9703 -0.0497 1.9131 +C -1.1344 -0.2572 2.0561 +O -1.2541 -0.2354 2.0736 +N -1.0892 -0.3756 2.0141 +H -0.991 -0.396 2.0019 +CA -1.1733 -0.4872 1.9757 +HA -1.2476 -0.5122 2.0515 +CB -1.2502 -0.4487 1.8496 +HB1 -1.3045 -0.3553 1.8641 +HB2 -1.3196 -0.5255 1.8152 +HB3 -1.1778 -0.4329 1.7697 +C -1.0856 -0.6055 1.9373 +O -0.9662 -0.5905 1.9123 +N -1.1481 -0.7235 1.9381 +H -1.2473 -0.7223 1.9565 +CA -1.0897 -0.8471 1.8899 +HA -0.9885 -0.8584 1.9286 +CB -1.1719 -0.9611 1.9494 +HB1 -1.2756 -0.944 1.9202 +HB2 -1.1707 -0.9564 2.0583 +HB3 -1.1446 -1.0634 1.9238 +C -1.0834 -0.8469 1.7378 +O -1.1354 -0.9399 1.6766 +N -1.0102 -0.7576 1.6707 +H -0.9737 -0.6845 1.73 +CA -1.0193 -0.7306 1.5286 +HA -1.1225 -0.7046 1.5048 +CB -0.9479 -0.5997 1.4962 +HB1 -0.842 -0.5957 1.5216 +HB2 -1.0067 -0.5281 1.5536 +HB3 -0.9622 -0.5826 1.3895 +C -0.9694 -0.8413 1.4368 +O -1.0441 -0.9133 1.371 +N -0.8379 -0.8633 1.4304 +H -0.7638 -0.8141 1.4783 +CA -0.7778 -0.9822 1.3734 +HA -0.7956 -0.9722 1.2663 +CB -0.6268 -0.969 1.3906 +HB1 -0.5655 -1.0524 1.3563 +HB2 -0.6007 -0.9561 1.4956 +HB3 -0.5859 -0.8874 1.3309 +C -0.8356 -1.1135 1.4243 +O -0.8497 -1.206 1.3446 +N -0.8677 -1.1272 1.5532 +H -0.848 -1.0541 1.62 +CA -0.9111 -1.2541 1.6079 +HA -0.8316 -1.3271 1.5925 +CB -0.9227 -1.2433 1.7597 +HB1 -0.9663 -1.3345 1.8004 +HB2 -1.0039 -1.1737 1.7809 +HB3 -0.8299 -1.2008 1.7978 +C -1.0426 -1.3057 1.5512 +O -1.0599 -1.4173 1.5026 +N -1.1411 -1.216 1.543 +H -1.1328 -1.1277 1.5914 +CA -1.2738 -1.2403 1.4902 +HA -1.3137 -1.3313 1.535 +CB -1.3597 -1.1237 1.5385 +HB1 -1.3433 -1.1114 1.6455 +HB2 -1.4618 -1.1565 1.5189 +HB3 -1.348 -1.0373 1.4731 +C -1.2747 -1.2495 1.3383 +O -1.3512 -1.3262 1.2802 +N -1.1922 -1.1707 1.269 +H -1.1237 -1.1077 1.3083 +CA -1.1513 -1.1982 1.1327 +HA -1.2372 -1.176 1.0693 +CB -1.0416 -1.1019 1.0881 +HB1 -1.034 -1.1113 0.9798 +HB2 -0.9443 -1.1358 1.1235 +HB3 -1.0724 -1.0009 1.1152 +C -1.0894 -1.3328 1.098 +O -1.1352 -1.3977 1.0042 +N -0.9896 -1.387 1.1682 +H -0.9408 -1.3202 1.226 +CA -0.9417 -1.5219 1.1456 +HA -0.9183 -1.533 1.0397 +CB -0.8119 -1.5322 1.2252 +HB1 -0.7397 -1.4552 1.1982 +HB2 -0.7645 -1.6289 1.2085 +HB3 -0.8257 -1.5162 1.3322 +C -1.0474 -1.6237 1.1859 +O -1.0773 -1.7205 1.1162 +N -1.0886 -1.6161 1.3126 +H -1.0569 -1.5344 1.3629 +CH3 -1.1572 -1.7212 1.385 +HH31 -1.195 -1.794 1.3133 +HH32 -1.2449 -1.6718 1.4269 +HH33 -1.087 -1.7662 1.4552 +132 + 100. 100. 100. +HH31 -0.2903 -0.4936 2.2511 +CH3 -0.3554 -0.4221 2.3013 +HH32 -0.3134 -0.3702 2.3875 +HH33 -0.3845 -0.3471 2.2278 +C -0.4693 -0.5062 2.3572 +O -0.4404 -0.6134 2.4099 +N -0.5902 -0.4497 2.3617 +H -0.606 -0.3656 2.3079 +CA -0.7023 -0.4967 2.4405 +HA -0.6978 -0.6055 2.4363 +CB -0.6758 -0.4641 2.5872 +HB1 -0.5739 -0.4911 2.6149 +HB2 -0.7353 -0.5343 2.6456 +HB3 -0.6909 -0.3588 2.611 +C -0.8361 -0.4435 2.3912 +O -0.8479 -0.4099 2.2736 +N -0.9318 -0.4365 2.484 +H -0.9173 -0.4698 2.5783 +CA -1.0652 -0.3821 2.4689 +HA -1.1217 -0.4317 2.5479 +CB -1.0601 -0.2317 2.494 +HB1 -1.1624 -0.1962 2.4817 +HB2 -0.9933 -0.1823 2.4235 +HB3 -1.0219 -0.2109 2.594 +C -1.1273 -0.4334 2.3397 +O -1.146 -0.5518 2.3125 +N -1.1584 -0.338 2.2517 +H -1.1465 -0.2436 2.2858 +CA -1.2114 -0.361 2.1188 +HA -1.2996 -0.4233 2.1335 +CB -1.2354 -0.2218 2.0611 +HB1 -1.2804 -0.2439 1.9642 +HB2 -1.1446 -0.1632 2.0471 +HB3 -1.2965 -0.1578 2.1247 +C -1.1097 -0.4227 2.0238 +O -1.145 -0.4982 1.9335 +N -0.983 -0.3817 2.0324 +H -0.9502 -0.3307 2.1133 +CA -0.8819 -0.4197 1.9358 +HA -0.9196 -0.3863 1.8391 +CB -0.7542 -0.337 1.9474 +HB1 -0.6826 -0.3634 1.8695 +HB2 -0.7092 -0.3472 2.0461 +HB3 -0.7687 -0.2325 1.92 +C -0.8642 -0.5708 1.9317 +O -0.8759 -0.627 1.8231 +N -0.8504 -0.6334 2.0489 +H -0.8457 -0.5752 2.1313 +CA -0.8501 -0.7758 2.0754 +HA -0.7596 -0.8264 2.0419 +CB -0.8502 -0.8017 2.2258 +HB1 -0.8422 -0.9104 2.2284 +HB2 -0.9411 -0.7669 2.2749 +HB3 -0.7644 -0.7542 2.2734 +C -0.9644 -0.8426 2.0003 +O -0.9443 -0.9298 1.9161 +N -1.088 -0.8017 2.0301 +H -1.0928 -0.7245 2.0951 +CA -1.2132 -0.8486 1.9741 +HA -1.2101 -0.9541 2.0013 +CB -1.3285 -0.7762 2.043 +HB1 -1.3551 -0.817 2.1405 +HB2 -1.4177 -0.7965 1.9837 +HB3 -1.3135 -0.6683 2.0477 +C -1.2179 -0.8401 1.8222 +O -1.2545 -0.938 1.7575 +N -1.1825 -0.7259 1.7628 +H -1.1632 -0.6471 1.823 +CA -1.1576 -0.7141 1.6206 +HA -1.252 -0.7467 1.5768 +CB -1.1186 -0.5684 1.5976 +HB1 -1.1223 -0.5491 1.4903 +HB2 -1.0201 -0.5462 1.6385 +HB3 -1.1878 -0.5004 1.6472 +C -1.0519 -0.8129 1.5735 +O -1.0699 -0.8821 1.4735 +N -0.9422 -0.8269 1.6483 +H -0.9334 -0.7637 1.7266 +CA -0.8342 -0.9176 1.615 +HA -0.797 -0.897 1.5146 +CB -0.7092 -0.9012 1.701 +HB1 -0.6274 -0.946 1.6446 +HB2 -0.7271 -0.9402 1.8012 +HB3 -0.688 -0.7949 1.7123 +C -0.8863 -1.0605 1.6093 +O -0.8634 -1.1312 1.5114 +N -0.9608 -1.1038 1.7113 +H -0.9734 -1.0496 1.7956 +CA -1.0241 -1.2339 1.7036 +HA -0.9468 -1.3089 1.6868 +CB -1.0865 -1.2775 1.8358 +HB1 -1.0134 -1.289 1.9159 +HB2 -1.1333 -1.3758 1.83 +HB3 -1.168 -1.2074 1.8536 +C -1.1252 -1.242 1.5902 +O -1.1313 -1.3381 1.5137 +N -1.2077 -1.1404 1.5641 +H -1.2028 -1.058 1.6224 +CA -1.324 -1.1571 1.4793 +HA -1.3825 -1.244 1.5092 +CB -1.4149 -1.0357 1.4962 +HB1 -1.4666 -1.0421 1.592 +HB2 -1.4958 -1.0505 1.4246 +HB3 -1.3665 -0.9383 1.4903 +C -1.2856 -1.171 1.3327 +O -1.3258 -1.2594 1.2572 +N -1.1988 -1.0808 1.2863 +H -1.1486 -1.0217 1.3509 +CA -1.1525 -1.0652 1.1498 +HA -1.2326 -1.086 1.079 +CB -1.1041 -0.9227 1.1245 +HB1 -1.0469 -0.9211 1.0317 +HB2 -1.0376 -0.8769 1.1977 +HB3 -1.1868 -0.8534 1.1089 +C -1.0402 -1.1612 1.1131 +O -1.0289 -1.1958 0.9957 +N -0.9564 -1.1942 1.2117 +H -0.98 -1.1503 1.2995 +CA -0.8413 -1.2797 1.191 +HA -0.8427 -1.3236 1.0913 +CB -0.7175 -1.1916 1.206 +HB1 -0.6353 -1.2626 1.2153 +HB2 -0.7221 -1.1471 1.3054 +HB3 -0.6859 -1.1207 1.1295 +C -0.8443 -1.4065 1.2751 +O -0.8599 -1.5134 1.2166 +N -0.8294 -1.4 1.4076 +H -0.8321 -1.3054 1.4429 +CH3 -0.8343 -1.5143 1.4966 +HH31 -0.9377 -1.534 1.5249 +HH32 -0.772 -1.496 1.5842 +HH33 -0.8059 -1.6078 1.4483 +132 + 100. 100. 100. +HH31 0.0719 -1.0155 1.8871 +CH3 0.0342 -0.9163 1.912 +HH32 0.0467 -0.8869 2.0162 +HH33 0.0759 -0.8309 1.8585 +C -0.1141 -0.9265 1.8792 +O -0.1527 -0.9711 1.7715 +N -0.207 -0.8868 1.9664 +H -0.1739 -0.8481 2.0537 +CA -0.3513 -0.8991 1.9619 +HA -0.3857 -0.9265 1.8622 +CB -0.4042 -0.9983 2.0651 +HB1 -0.5131 -0.9971 2.0713 +HB2 -0.3692 -0.9631 2.1621 +HB3 -0.3827 -1.1024 2.0408 +C -0.4146 -0.7633 1.989 +O -0.426 -0.7207 2.1038 +N -0.4567 -0.6923 1.8841 +H -0.4405 -0.7288 1.7914 +CA -0.5332 -0.5706 1.9021 +HA -0.4997 -0.5101 1.9864 +CB -0.5235 -0.4721 1.7859 +HB1 -0.4193 -0.4505 1.7626 +HB2 -0.5784 -0.3814 1.8111 +HB3 -0.5619 -0.5266 1.6997 +C -0.6786 -0.6104 1.9234 +O -0.7378 -0.6818 1.8428 +N -0.7386 -0.5626 2.0326 +H -0.6891 -0.5213 2.1103 +CA -0.8758 -0.5935 2.0677 +HA -0.869 -0.702 2.0753 +CB -0.9043 -0.5339 2.2052 +HB1 -0.8937 -0.4255 2.2001 +HB2 -0.8464 -0.5754 2.2878 +HB3 -1.0109 -0.5454 2.2246 +C -0.9806 -0.5565 1.9637 +O -0.9717 -0.4487 1.9055 +N -1.0786 -0.6443 1.9409 +H -1.0788 -0.7246 2.0021 +CA -1.1862 -0.6098 1.8502 +HA -1.1906 -0.5019 1.8354 +CB -1.1562 -0.6663 1.7116 +HB1 -1.1367 -0.7735 1.7121 +HB2 -1.0762 -0.6041 1.6713 +HB3 -1.2422 -0.65 1.6465 +C -1.3204 -0.6552 1.9057 +O -1.4251 -0.6002 1.8723 +N -1.3269 -0.7618 1.9858 +H -1.2354 -0.8025 1.9987 +CA -1.4369 -0.8189 2.0609 +HA -1.3936 -0.9179 2.075 +CB -1.4608 -0.7508 2.1953 +HB1 -1.5586 -0.7846 2.2295 +HB2 -1.4787 -0.6446 2.1785 +HB3 -1.38 -0.7852 2.26 +C -1.5681 -0.8331 1.985 +O -1.6073 -0.9436 1.9481 +N -1.6389 -0.722 1.9636 +H -1.5783 -0.6474 1.9949 +CA -1.7493 -0.7011 1.8721 +HA -1.8316 -0.7528 1.9214 +CB -1.7833 -0.5525 1.8657 +HB1 -1.6943 -0.4895 1.8649 +HB2 -1.8483 -0.5227 1.948 +HB3 -1.839 -0.5205 1.7776 +C -1.7285 -0.7617 1.734 +O -1.8055 -0.8434 1.684 +N -1.6168 -0.729 1.6686 +H -1.546 -0.681 1.7222 +CA -1.5961 -0.7596 1.5284 +HA -1.6882 -0.7901 1.4788 +CB -1.5475 -0.6349 1.455 +HB1 -1.6191 -0.5541 1.4704 +HB2 -1.5413 -0.6569 1.3485 +HB3 -1.4476 -0.6202 1.496 +C -1.5095 -0.8841 1.5152 +O -1.4058 -0.8883 1.4494 +N -1.5555 -0.9846 1.5901 +H -1.6492 -0.9732 1.6261 +CA -1.4801 -1.0903 1.6544 +HA -1.5514 -1.1318 1.7257 +CB -1.4528 -1.209 1.5625 +HB1 -1.418 -1.1685 1.4675 +HB2 -1.5439 -1.2671 1.5482 +HB3 -1.3694 -1.2653 1.6043 +C -1.362 -1.0423 1.7375 +O -1.3312 -0.9239 1.7488 +N -1.2996 -1.1343 1.8115 +H -1.3208 -1.2325 1.8012 +CA -1.2245 -1.1122 1.9334 +HA -1.2939 -1.0799 2.011 +CB -1.1615 -1.2439 1.978 +HB1 -1.0949 -1.282 1.9006 +HB2 -1.2379 -1.317 2.0044 +HB3 -1.1021 -1.2275 2.0679 +C -1.1102 -1.0129 1.9183 +O -1.1062 -0.9147 1.9921 +N -1.0125 -1.0363 1.8304 +H -1.0203 -1.1264 1.7855 +CA -0.8932 -0.9547 1.8205 +HA -0.9243 -0.8505 1.8286 +CB -0.7957 -0.9883 1.933 +HB1 -0.8397 -0.9534 2.0264 +HB2 -0.6989 -0.9381 1.9309 +HB3 -0.7885 -1.097 1.9337 +C -0.8255 -0.9767 1.6859 +O -0.8572 -1.0749 1.6193 +N -0.737 -0.8822 1.6536 +H -0.7309 -0.797 1.7076 +CA -0.6678 -0.8823 1.5262 +HA -0.6881 -0.9746 1.4719 +CB -0.7144 -0.77 1.434 +HB1 -0.8199 -0.7781 1.4078 +HB2 -0.6608 -0.7749 1.3392 +HB3 -0.7044 -0.6799 1.4945 +C -0.5176 -0.8814 1.5504 +O -0.467 -0.8196 1.6438 +N -0.4376 -0.9463 1.4654 +H -0.4807 -0.9842 1.3822 +CA -0.2927 -0.945 1.4648 +HA -0.2656 -0.9836 1.5631 +CB -0.2435 -1.0469 1.3624 +HB1 -0.2937 -1.0187 1.2698 +HB2 -0.2697 -1.1494 1.3885 +HB3 -0.135 -1.0426 1.3535 +C -0.2347 -0.8086 1.4304 +O -0.2774 -0.7438 1.3351 +N -0.1407 -0.7645 1.5143 +H -0.1028 -0.8276 1.5834 +CH3 -0.0782 -0.6355 1.4931 +HH31 0.0191 -0.6293 1.5417 +HH32 -0.1488 -0.5672 1.5404 +HH33 -0.0738 -0.6169 1.3857 diff --git a/regtest/drr/rt-eabf/colvar.reference b/regtest/drr/rt-eabf/colvar.reference new file mode 100644 index 0000000000000000000000000000000000000000..0402603882c8409406e9972c0dc4da77a741c42f --- /dev/null +++ b/regtest/drr/rt-eabf/colvar.reference @@ -0,0 +1,21 @@ +#! FIELDS time t1 t2 eabf.t1_fict eabf.t2_fict eabf.t1_biasforce eabf.t2_biasforce +#! SET min_t1 -pi +#! SET max_t1 pi +#! SET min_t2 -pi +#! SET max_t2 pi +#! SET min_eabf.t1_fict -pi +#! SET max_eabf.t1_fict pi +#! SET min_eabf.t2_fict -pi +#! SET max_eabf.t2_fict pi + 0.000000 -3.0750 -3.1082 -3.0750 -3.1082 -0.0000 -0.0000 + 0.005000 -3.0833 -3.0250 -3.1409 -2.9900 -0.0164 0.0100 + 0.010000 -3.0682 -2.8407 3.1111 -2.8975 -0.0000 -0.0000 + 0.015000 -3.0406 -3.0014 -3.0532 -2.7895 -0.0133 0.0468 + 0.020000 -3.0855 -3.0485 -2.8663 -2.7288 0.0212 0.0805 + 0.025000 -3.1023 3.0335 -2.6940 -2.6510 0.0634 0.1325 + 0.030000 3.0682 -2.9541 -2.5845 -2.5950 0.1126 0.1445 + 0.035000 2.9670 2.8332 -2.6473 -2.6636 0.1508 0.1877 + 0.040000 3.1264 -2.9302 -2.7108 -2.6555 0.1637 0.1838 + 0.045000 -3.1150 3.0851 -2.8386 -2.6018 0.1629 0.2010 + 0.050000 2.9720 -3.0383 -2.9569 -2.6114 0.1668 0.2052 + 0.055000 -3.1376 -3.0473 -3.0942 -2.6090 0.1539 0.2092 diff --git a/regtest/drr/rt-eabf/config b/regtest/drr/rt-eabf/config new file mode 100644 index 0000000000000000000000000000000000000000..9d401dbeeb7e08e90615e50b59941bf0fa83c10e --- /dev/null +++ b/regtest/drr/rt-eabf/config @@ -0,0 +1,4 @@ +type=driver +plumed_needs=boost_serialization +plumed_modules=drr +arg="--plumed plumed.dat --trajectory-stride 1 --timestep 0.005 --ixyz ala12_trajectory.xyz --dump-forces forces --dump-forces-fmt=%10.6f" diff --git a/regtest/drr/rt-eabf/forces.reference b/regtest/drr/rt-eabf/forces.reference new file mode 100644 index 0000000000000000000000000000000000000000..ea3eb1904e655c9265c6644fb40df9499bd22458 --- /dev/null +++ b/regtest/drr/rt-eabf/forces.reference @@ -0,0 +1,1608 @@ +132 + 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + 0.000893 -0.000565 -0.000328 +X 0.000000 0.000000 0.000000 +X -0.053948 -0.202149 0.121219 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.125602 0.438935 -0.268489 +X -0.036510 -0.139092 0.084382 +X -0.012917 0.019645 -0.011591 +X 0.000000 0.000000 0.000000 +X -0.022226 -0.117338 0.074479 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.003394 -0.000039 0.003433 +X 0.000000 0.000000 0.000000 +X -0.260258 -0.165676 0.349186 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 1.160564 0.852680 -1.692366 +X -0.486043 -0.361367 0.716998 +X -0.578810 -0.400058 0.758495 +X 0.000000 0.000000 0.000000 +X 0.164547 0.074421 -0.132313 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.007165 -0.003874 0.011039 +X 0.000000 0.000000 0.000000 +X -0.042246 -0.031393 0.014749 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X -1.491841 -0.911341 0.380169 +X 0.684693 0.407338 -0.152839 +X 1.516204 1.008871 -0.533755 +X 0.000000 0.000000 0.000000 +X -0.666810 -0.473475 0.291676 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.014614 0.013794 0.000819 +X 0.000000 0.000000 0.000000 +X -0.846827 0.269014 0.353006 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 5.554308 -2.047228 -2.356707 +X -2.281377 0.863746 0.983177 +X -3.615488 1.259508 1.447120 +X 0.000000 0.000000 0.000000 +X 1.189384 -0.345039 -0.426596 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + 0.010484 -0.026087 0.015603 +X 0.000000 0.000000 0.000000 +X -1.197668 -0.084424 -1.341831 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 7.893634 0.875819 8.671869 +X -3.281358 -0.321251 -3.591510 +X -4.995043 -0.930794 -5.535173 +X 0.000000 0.000000 0.000000 +X 1.580435 0.460650 1.796645 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + 0.015681 -0.000617 -0.015064 +X 0.000000 0.000000 0.000000 +X -1.222396 -1.449772 1.907430 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 4.994564 6.459917 -8.845826 +X -1.959612 -2.489773 3.422191 +X -2.124292 -3.375599 4.623181 +X 0.000000 0.000000 0.000000 +X 0.311737 0.855227 -1.106976 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.068244 0.165252 -0.097007 +X 0.000000 0.000000 0.000000 +X 0.767867 2.641653 -1.027983 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X -2.667561 -15.262600 7.124405 +X 1.077743 6.465997 -3.103396 +X 1.612199 9.112135 -3.541424 +X 0.000000 0.000000 0.000000 +X -0.790248 -2.957185 0.548398 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.024662 -0.001215 0.025877 +X 0.000000 0.000000 0.000000 +X -1.809338 0.189917 -0.756857 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 8.706070 -0.970674 3.563073 +X -3.504109 0.385960 -1.475484 +X -4.481403 0.549108 -1.521995 +X 0.000000 0.000000 0.000000 +X 1.088779 -0.154310 0.191263 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.010256 -0.000491 0.010747 +X 0.000000 0.000000 0.000000 +X 0.376558 0.348139 1.063308 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X -3.302599 -2.917010 -8.709801 +X 1.475613 1.309798 3.902283 +X 2.376551 1.921624 5.798680 +X 0.000000 0.000000 0.000000 +X -0.926123 -0.662550 -2.054469 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + -0.020167 0.006213 0.013954 +X 0.000000 0.000000 0.000000 +X -0.140595 -0.686395 -1.319134 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 2.024589 4.468889 7.980158 +X -0.862820 -1.878558 -3.368440 +X -1.577316 -2.803848 -4.620496 +X 0.000000 0.000000 0.000000 +X 0.556142 0.899911 1.327911 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +132 + 0.022092 -0.019436 -0.002656 +X 0.000000 0.000000 0.000000 +X 0.004327 0.174636 -0.073870 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X -0.115458 -4.034711 1.712208 +X 0.072381 1.840698 -0.775694 +X -0.074487 3.611298 -1.582745 +X 0.000000 0.000000 0.000000 +X 0.113237 -1.591920 0.720101 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 +X 0.000000 0.000000 0.000000 diff --git a/regtest/drr/rt-eabf/plumed.dat b/regtest/drr/rt-eabf/plumed.dat new file mode 100644 index 0000000000000000000000000000000000000000..470d5403b99ab008168592e488ca9ec1e847f4fc --- /dev/null +++ b/regtest/drr/rt-eabf/plumed.dat @@ -0,0 +1,4 @@ +TORSION ATOMS=2,5,6,7 LABEL=t1 +TORSION ATOMS=5,6,7,9 LABEL=t2 +eabf: DRR ARG=t1,t2 GRID_MIN=-pi,-pi GRID_MAX=pi,pi GRID_BIN=3,3 OUTPUTFREQ=10 FRICTION=2.0,2.0 TAU=0.1,0.1 FULLSAMPLES=2 TEMP=300 +PRINT ARG=t1,t2,eabf.t1_fict,eabf.t2_fict,eabf.t1_biasforce,eabf.t2_biasforce STRIDE=1 FILE=colvar FMT=%8.4f diff --git a/regtest/drr/rt-eabf/trajectory.xyz b/regtest/drr/rt-eabf/trajectory.xyz new file mode 100644 index 0000000000000000000000000000000000000000..fdd693013b1036c6e5efa6a2880c3065a3e9d410 --- /dev/null +++ b/regtest/drr/rt-eabf/trajectory.xyz @@ -0,0 +1,16 @@ +2 +0 0 0 +X 0 0 0 +X 0 0 1 +2 +0 0 0 +X 0 0 0 +X 0 0 2 +2 +0 0 0 +X 0 0 0 +X 0 0 3 +2 +0 0 0 +X 0 0 0 +X 0 0 4 diff --git a/regtest/drr/rt-extract/Makefile b/regtest/drr/rt-extract/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..3703b27cea227aa053fb6d1d73f861e4384dbcee --- /dev/null +++ b/regtest/drr/rt-extract/Makefile @@ -0,0 +1 @@ +include ../../scripts/test.make diff --git a/regtest/drr/rt-extract/config b/regtest/drr/rt-extract/config new file mode 100644 index 0000000000000000000000000000000000000000..61512b13312e44d9ee563b61a80761b6ee0d4013 --- /dev/null +++ b/regtest/drr/rt-extract/config @@ -0,0 +1,4 @@ +type=plumed +plumed_needs=boost_serialization +plumed_modules=drr +arg="drr_tool --extract test.drrstate" diff --git a/regtest/drr/rt-extract/test.abf.count.reference b/regtest/drr/rt-extract/test.abf.count.reference new file mode 100644 index 0000000000000000000000000000000000000000..6f3bdb0c48204c9b24874a4b314a84aa1dd5e632 --- /dev/null +++ b/regtest/drr/rt-extract/test.abf.count.reference @@ -0,0 +1,202 @@ +# 1 +# 1.19999999999999996 0.01000000000000000 200 0 + 1.205000000 205672 + 1.215000000 204701 + 1.225000000 201821 + 1.235000000 200285 + 1.245000000 200729 + 1.255000000 207607 + 1.265000000 206222 + 1.275000000 206732 + 1.285000000 203837 + 1.295000000 207551 + 1.305000000 215055 + 1.315000000 214225 + 1.325000000 221626 + 1.335000000 208735 + 1.345000000 210521 + 1.355000000 207742 + 1.365000000 208081 + 1.375000000 213729 + 1.385000000 213595 + 1.395000000 202623 + 1.405000000 196384 + 1.415000000 200911 + 1.425000000 195215 + 1.435000000 190734 + 1.445000000 178785 + 1.455000000 182769 + 1.465000000 183934 + 1.475000000 190054 + 1.485000000 186691 + 1.495000000 184471 + 1.505000000 186568 + 1.515000000 190696 + 1.525000000 188315 + 1.535000000 197080 + 1.545000000 199828 + 1.555000000 194490 + 1.565000000 199764 + 1.575000000 202509 + 1.585000000 205003 + 1.595000000 197743 + 1.605000000 200158 + 1.615000000 187566 + 1.625000000 192499 + 1.635000000 187451 + 1.645000000 194379 + 1.655000000 200584 + 1.665000000 204821 + 1.675000000 195449 + 1.685000000 209882 + 1.695000000 207934 + 1.705000000 202913 + 1.715000000 199224 + 1.725000000 205735 + 1.735000000 205393 + 1.745000000 207440 + 1.755000000 205603 + 1.765000000 219173 + 1.775000000 220144 + 1.785000000 225951 + 1.795000000 225467 + 1.805000000 219566 + 1.815000000 219167 + 1.825000000 223654 + 1.835000000 225101 + 1.845000000 217430 + 1.855000000 213222 + 1.865000000 213502 + 1.875000000 212069 + 1.885000000 220707 + 1.895000000 220517 + 1.905000000 215130 + 1.915000000 223267 + 1.925000000 213931 + 1.935000000 220871 + 1.945000000 226010 + 1.955000000 229403 + 1.965000000 227098 + 1.975000000 226505 + 1.985000000 227694 + 1.995000000 236626 + 2.005000000 241976 + 2.015000000 256156 + 2.025000000 251518 + 2.035000000 245973 + 2.045000000 259108 + 2.055000000 261259 + 2.065000000 267254 + 2.075000000 268686 + 2.085000000 289815 + 2.095000000 292129 + 2.105000000 293482 + 2.115000000 307400 + 2.125000000 327709 + 2.135000000 338075 + 2.145000000 328134 + 2.155000000 332435 + 2.165000000 323520 + 2.175000000 324176 + 2.185000000 319361 + 2.195000000 296815 + 2.205000000 281585 + 2.215000000 277824 + 2.225000000 273566 + 2.235000000 268806 + 2.245000000 277586 + 2.255000000 274821 + 2.265000000 265418 + 2.275000000 260938 + 2.285000000 265462 + 2.295000000 272207 + 2.305000000 265531 + 2.315000000 260967 + 2.325000000 246441 + 2.335000000 243477 + 2.345000000 240145 + 2.355000000 245324 + 2.365000000 240302 + 2.375000000 237491 + 2.385000000 229359 + 2.395000000 221382 + 2.405000000 218406 + 2.415000000 200148 + 2.425000000 190835 + 2.435000000 190231 + 2.445000000 185198 + 2.455000000 187599 + 2.465000000 182385 + 2.475000000 176408 + 2.485000000 167850 + 2.495000000 170406 + 2.505000000 173481 + 2.515000000 163856 + 2.525000000 167489 + 2.535000000 168851 + 2.545000000 165761 + 2.555000000 161464 + 2.565000000 160039 + 2.575000000 159572 + 2.585000000 149708 + 2.595000000 155044 + 2.605000000 146378 + 2.615000000 139021 + 2.625000000 141060 + 2.635000000 137697 + 2.645000000 135219 + 2.655000000 131498 + 2.665000000 136355 + 2.675000000 133750 + 2.685000000 127815 + 2.695000000 132091 + 2.705000000 130297 + 2.715000000 130189 + 2.725000000 126257 + 2.735000000 118180 + 2.745000000 123548 + 2.755000000 129823 + 2.765000000 133606 + 2.775000000 130861 + 2.785000000 135339 + 2.795000000 125133 + 2.805000000 119941 + 2.815000000 116021 + 2.825000000 115701 + 2.835000000 119766 + 2.845000000 121733 + 2.855000000 124110 + 2.865000000 128116 + 2.875000000 133998 + 2.885000000 136581 + 2.895000000 140771 + 2.905000000 140074 + 2.915000000 135994 + 2.925000000 136749 + 2.935000000 131254 + 2.945000000 132815 + 2.955000000 128496 + 2.965000000 135529 + 2.975000000 133308 + 2.985000000 133960 + 2.995000000 134441 + 3.005000000 127699 + 3.015000000 126513 + 3.025000000 128594 + 3.035000000 129769 + 3.045000000 131158 + 3.055000000 125620 + 3.065000000 114185 + 3.075000000 114155 + 3.085000000 118136 + 3.095000000 120890 + 3.105000000 122727 + 3.115000000 120089 + 3.125000000 116825 + 3.135000000 111313 + 3.145000000 114580 + 3.155000000 116795 + 3.165000000 121396 + 3.175000000 127159 + 3.185000000 124683 + 3.195000000 126190 diff --git a/regtest/drr/rt-extract/test.abf.grad.reference b/regtest/drr/rt-extract/test.abf.grad.reference new file mode 100644 index 0000000000000000000000000000000000000000..15e666fb92c8faebd4b8aee94af3598ef550a8cf --- /dev/null +++ b/regtest/drr/rt-extract/test.abf.grad.reference @@ -0,0 +1,202 @@ +# 1 +# 1.19999999999999996 0.01000000000000000 200 0 + 1.205000000 -146.326095358 + 1.215000000 -154.481626858 + 1.225000000 -156.174164372 + 1.235000000 -138.393784790 + 1.245000000 -121.003971760 + 1.255000000 -105.421954043 + 1.265000000 -92.084305614 + 1.275000000 -75.490403532 + 1.285000000 -52.054484913 + 1.295000000 -52.449289863 + 1.305000000 -47.880525574 + 1.315000000 -40.082611138 + 1.325000000 -39.764271328 + 1.335000000 -46.889819953 + 1.345000000 -58.402582207 + 1.355000000 -51.236223033 + 1.365000000 -48.477970965 + 1.375000000 -38.020732078 + 1.385000000 -29.996436818 + 1.395000000 -13.325340420 + 1.405000000 12.195542796 + 1.415000000 31.478927088 + 1.425000000 41.921876295 + 1.435000000 48.651286432 + 1.445000000 63.315928348 + 1.455000000 66.930705513 + 1.465000000 75.598325730 + 1.475000000 79.009754727 + 1.485000000 80.695983233 + 1.495000000 88.600530216 + 1.505000000 96.775012229 + 1.515000000 87.704888852 + 1.525000000 90.503259421 + 1.535000000 95.401134791 + 1.545000000 103.704222948 + 1.555000000 93.133226076 + 1.565000000 99.309134084 + 1.575000000 102.865203885 + 1.585000000 101.655604555 + 1.595000000 93.777100698 + 1.605000000 105.239457300 + 1.615000000 109.001399215 + 1.625000000 104.168079359 + 1.635000000 95.298311679 + 1.645000000 107.582408971 + 1.655000000 101.865786608 + 1.665000000 107.769867453 + 1.675000000 92.700751701 + 1.685000000 95.724476858 + 1.695000000 91.985792292 + 1.705000000 101.618366228 + 1.715000000 103.405079043 + 1.725000000 106.125688781 + 1.735000000 100.191246295 + 1.745000000 90.564314974 + 1.755000000 93.850287592 + 1.765000000 96.386651493 + 1.775000000 111.522796982 + 1.785000000 106.309115009 + 1.795000000 94.065006726 + 1.805000000 100.632335061 + 1.815000000 107.904241406 + 1.825000000 110.626166958 + 1.835000000 110.121426393 + 1.845000000 104.717821912 + 1.855000000 98.266095161 + 1.865000000 101.406992990 + 1.875000000 89.784428939 + 1.885000000 98.824582246 + 1.895000000 96.088321337 + 1.905000000 94.911573796 + 1.915000000 101.213875867 + 1.925000000 99.219967991 + 1.935000000 89.471314224 + 1.945000000 93.622875961 + 1.955000000 89.954277262 + 1.965000000 84.108706396 + 1.975000000 81.160601357 + 1.985000000 93.282562747 + 1.995000000 88.475331270 + 2.005000000 90.425330286 + 2.015000000 85.377809872 + 2.025000000 84.711496352 + 2.035000000 81.523761924 + 2.045000000 81.632749982 + 2.055000000 80.001914004 + 2.065000000 75.212060091 + 2.075000000 91.222012384 + 2.085000000 81.281384676 + 2.095000000 82.468339070 + 2.105000000 82.388394201 + 2.115000000 75.557590510 + 2.125000000 67.474641637 + 2.135000000 76.907726166 + 2.145000000 77.333092793 + 2.155000000 80.759114757 + 2.165000000 72.897023178 + 2.175000000 76.019337345 + 2.185000000 68.013710592 + 2.195000000 62.256680691 + 2.205000000 62.205043905 + 2.215000000 57.134963034 + 2.225000000 61.560437806 + 2.235000000 67.381708918 + 2.245000000 60.191424138 + 2.255000000 56.070192318 + 2.265000000 55.415451770 + 2.275000000 56.917643374 + 2.285000000 56.182589688 + 2.295000000 50.448750706 + 2.305000000 47.109191423 + 2.315000000 45.532641264 + 2.325000000 40.684798833 + 2.335000000 35.959795334 + 2.345000000 36.699148190 + 2.355000000 33.018914086 + 2.365000000 30.775016238 + 2.375000000 30.010963850 + 2.385000000 25.774393467 + 2.395000000 26.650136450 + 2.405000000 16.342320790 + 2.415000000 21.744870220 + 2.425000000 17.093436618 + 2.435000000 14.758562488 + 2.445000000 14.252769059 + 2.455000000 14.789158268 + 2.465000000 15.585933496 + 2.475000000 20.255187972 + 2.485000000 15.392761078 + 2.495000000 15.059131132 + 2.505000000 9.995394294 + 2.515000000 8.861308585 + 2.525000000 3.602618619 + 2.535000000 1.942346381 + 2.545000000 14.775589781 + 2.555000000 6.974530678 + 2.565000000 9.042687963 + 2.575000000 2.489133484 + 2.585000000 5.027565095 + 2.595000000 9.978900991 + 2.605000000 15.541584796 + 2.615000000 20.867273741 + 2.625000000 22.549295731 + 2.635000000 10.850624913 + 2.645000000 9.672650364 + 2.655000000 5.223887809 + 2.665000000 17.059450779 + 2.675000000 12.646960829 + 2.685000000 15.543614739 + 2.695000000 21.091142314 + 2.705000000 8.932662315 + 2.715000000 18.464428975 + 2.725000000 5.959066094 + 2.735000000 21.643196335 + 2.745000000 25.626999414 + 2.755000000 20.766843849 + 2.765000000 14.618478724 + 2.775000000 25.218776341 + 2.785000000 13.138939273 + 2.795000000 16.327759842 + 2.805000000 25.575923953 + 2.815000000 6.082564362 + 2.825000000 13.667518502 + 2.835000000 27.043165585 + 2.845000000 15.122559289 + 2.855000000 24.245504275 + 2.865000000 18.917039546 + 2.875000000 21.003827703 + 2.885000000 23.102078650 + 2.895000000 25.309046726 + 2.905000000 10.153915835 + 2.915000000 18.925285261 + 2.925000000 18.729529584 + 2.935000000 27.560976545 + 2.945000000 23.967583437 + 2.955000000 40.447253183 + 2.965000000 36.349369935 + 2.975000000 25.991334253 + 2.985000000 28.121449305 + 2.995000000 28.535450710 + 3.005000000 32.085078451 + 3.015000000 29.563288120 + 3.025000000 38.336593646 + 3.035000000 54.511455362 + 3.045000000 42.661664731 + 3.055000000 44.358598794 + 3.065000000 51.445437627 + 3.075000000 59.877653072 + 3.085000000 54.211929382 + 3.095000000 50.571410258 + 3.105000000 80.863541833 + 3.115000000 93.674853129 + 3.125000000 95.085478316 + 3.135000000 101.559888087 + 3.145000000 115.907855561 + 3.155000000 136.696893939 + 3.165000000 152.094474959 + 3.175000000 161.188391309 + 3.185000000 174.269612642 + 3.195000000 183.497232918 diff --git a/regtest/drr/rt-extract/test.abf.pmf.reference b/regtest/drr/rt-extract/test.abf.pmf.reference new file mode 100644 index 0000000000000000000000000000000000000000..1c7aea4448689ddd0ba562b8fa108aa9e26ac029 --- /dev/null +++ b/regtest/drr/rt-extract/test.abf.pmf.reference @@ -0,0 +1,201 @@ +1.200000000 0.000000000 +1.210000000 -1.463260954 +1.220000000 -3.008077222 +1.230000000 -4.569818866 +1.240000000 -5.953756714 +1.250000000 -7.163796431 +1.260000000 -8.218015972 +1.270000000 -9.138859028 +1.280000000 -9.893763063 +1.290000000 -10.414307912 +1.300000000 -10.938800811 +1.310000000 -11.417606067 +1.320000000 -11.818432178 +1.330000000 -12.216074891 +1.340000000 -12.684973091 +1.350000000 -13.268998913 +1.360000000 -13.781361143 +1.370000000 -14.266140853 +1.380000000 -14.646348174 +1.390000000 -14.946312542 +1.400000000 -15.079565946 +1.410000000 -14.957610518 +1.420000000 -14.642821247 +1.430000000 -14.223602484 +1.440000000 -13.737089620 +1.450000000 -13.103930337 +1.460000000 -12.434623281 +1.470000000 -11.678640024 +1.480000000 -10.888542477 +1.490000000 -10.081582645 +1.500000000 -9.195577342 +1.510000000 -8.227827220 +1.520000000 -7.350778332 +1.530000000 -6.445745737 +1.540000000 -5.491734389 +1.550000000 -4.454692160 +1.560000000 -3.523359899 +1.570000000 -2.530268558 +1.580000000 -1.501616520 +1.590000000 -0.485060474 +1.600000000 0.452710533 +1.610000000 1.505105106 +1.620000000 2.595119098 +1.630000000 3.636799892 +1.640000000 4.589783009 +1.650000000 5.665607098 +1.660000000 6.684264964 +1.670000000 7.761963639 +1.680000000 8.688971156 +1.690000000 9.646215924 +1.700000000 10.566073847 +1.710000000 11.582257510 +1.720000000 12.616308300 +1.730000000 13.677565188 +1.740000000 14.679477651 +1.750000000 15.585120801 +1.760000000 16.523623676 +1.770000000 17.487490191 +1.780000000 18.602718161 +1.790000000 19.665809311 +1.800000000 20.606459379 +1.810000000 21.612782729 +1.820000000 22.691825143 +1.830000000 23.798086813 +1.840000000 24.899301077 +1.850000000 25.946479296 +1.860000000 26.929140247 +1.870000000 27.943210177 +1.880000000 28.841054467 +1.890000000 29.829300289 +1.900000000 30.790183503 +1.910000000 31.739299241 +1.920000000 32.751437999 +1.930000000 33.743637679 +1.940000000 34.638350821 +1.950000000 35.574579581 +1.960000000 36.474122354 +1.970000000 37.315209418 +1.980000000 38.126815431 +1.990000000 39.059641059 +2.000000000 39.944394371 +2.010000000 40.848647674 +2.020000000 41.702425773 +2.030000000 42.549540736 +2.040000000 43.364778356 +2.050000000 44.181105855 +2.060000000 44.981124996 +2.070000000 45.733245596 +2.080000000 46.645465720 +2.090000000 47.458279567 +2.100000000 48.282962958 +2.110000000 49.106846900 +2.120000000 49.862422805 +2.130000000 50.537169221 +2.140000000 51.306246483 +2.150000000 52.079577411 +2.160000000 52.887168558 +2.170000000 53.616138790 +2.180000000 54.376332164 +2.190000000 55.056469270 +2.200000000 55.679036076 +2.210000000 56.301086515 +2.220000000 56.872436146 +2.230000000 57.488040524 +2.240000000 58.161857613 +2.250000000 58.763771854 +2.260000000 59.324473778 +2.270000000 59.878628295 +2.280000000 60.447804729 +2.290000000 61.009630626 +2.300000000 61.514118133 +2.310000000 61.985210047 +2.320000000 62.440536460 +2.330000000 62.847384448 +2.340000000 63.206982402 +2.350000000 63.573973883 +2.360000000 63.904163024 +2.370000000 64.211913187 +2.380000000 64.512022825 +2.390000000 64.769766760 +2.400000000 65.036268124 +2.410000000 65.199691332 +2.420000000 65.417140034 +2.430000000 65.588074401 +2.440000000 65.735660025 +2.450000000 65.878187716 +2.460000000 66.026079299 +2.470000000 66.181938634 +2.480000000 66.384490513 +2.490000000 66.538418124 +2.500000000 66.689009436 +2.510000000 66.788963378 +2.520000000 66.877576464 +2.530000000 66.913602651 +2.540000000 66.933026114 +2.550000000 67.080782012 +2.560000000 67.150527319 +2.570000000 67.240954199 +2.580000000 67.265845533 +2.590000000 67.316121184 +2.600000000 67.415910194 +2.610000000 67.571326042 +2.620000000 67.779998780 +2.630000000 68.005491737 +2.640000000 68.113997986 +2.650000000 68.210724490 +2.660000000 68.262963368 +2.670000000 68.433557876 +2.680000000 68.560027484 +2.690000000 68.715463631 +2.700000000 68.926375054 +2.710000000 69.015701678 +2.720000000 69.200345967 +2.730000000 69.259936628 +2.740000000 69.476368592 +2.750000000 69.732638586 +2.760000000 69.940307024 +2.770000000 70.086491811 +2.780000000 70.338679575 +2.790000000 70.470068968 +2.800000000 70.633346566 +2.810000000 70.889105806 +2.820000000 70.949931449 +2.830000000 71.086606634 +2.840000000 71.357038290 +2.850000000 71.508263883 +2.860000000 71.750718926 +2.870000000 71.939889321 +2.880000000 72.149927598 +2.890000000 72.380948385 +2.900000000 72.634038852 +2.910000000 72.735578010 +2.920000000 72.924830863 +2.930000000 73.112126159 +2.940000000 73.387735924 +2.950000000 73.627411759 +2.960000000 74.031884290 +2.970000000 74.395377990 +2.980000000 74.655291332 +2.990000000 74.936505825 +3.000000000 75.221860332 +3.010000000 75.542711117 +3.020000000 75.838343998 +3.030000000 76.221709935 +3.040000000 76.766824488 +3.050000000 77.193441136 +3.060000000 77.637027123 +3.070000000 78.151481500 +3.080000000 78.750258030 +3.090000000 79.292377324 +3.100000000 79.798091427 +3.110000000 80.606726845 +3.120000000 81.543475376 +3.130000000 82.494330160 +3.140000000 83.509929041 +3.150000000 84.669007596 +3.160000000 86.035976536 +3.170000000 87.556921285 +3.180000000 89.168805198 +3.190000000 90.911501325 +3.200000000 92.746473654 diff --git a/regtest/drr/rt-extract/test.czar.count.reference b/regtest/drr/rt-extract/test.czar.count.reference new file mode 100644 index 0000000000000000000000000000000000000000..7dcd23851a54ea614815837d92c7d7c4e6a89e9e --- /dev/null +++ b/regtest/drr/rt-extract/test.czar.count.reference @@ -0,0 +1,202 @@ +# 1 +# 1.19999999999999996 0.01000000000000000 200 0 + 1.205000000 159009 + 1.215000000 186446 + 1.225000000 202484 + 1.235000000 214013 + 1.245000000 219338 + 1.255000000 216928 + 1.265000000 217883 + 1.275000000 223809 + 1.285000000 217016 + 1.295000000 214078 + 1.305000000 211620 + 1.315000000 223088 + 1.325000000 217342 + 1.335000000 204179 + 1.345000000 200660 + 1.355000000 211343 + 1.365000000 220085 + 1.375000000 215894 + 1.385000000 221386 + 1.395000000 224152 + 1.405000000 218097 + 1.415000000 210390 + 1.425000000 204294 + 1.435000000 194397 + 1.445000000 187292 + 1.455000000 190011 + 1.465000000 188329 + 1.475000000 190111 + 1.485000000 190893 + 1.495000000 191369 + 1.505000000 184221 + 1.515000000 189969 + 1.525000000 195067 + 1.535000000 200030 + 1.545000000 196773 + 1.555000000 197687 + 1.565000000 204549 + 1.575000000 199406 + 1.585000000 203374 + 1.595000000 201867 + 1.605000000 197178 + 1.615000000 187123 + 1.625000000 188153 + 1.635000000 193515 + 1.645000000 198569 + 1.655000000 199592 + 1.665000000 196377 + 1.675000000 203008 + 1.685000000 201895 + 1.695000000 214780 + 1.705000000 203215 + 1.715000000 203232 + 1.725000000 204983 + 1.735000000 199964 + 1.745000000 205074 + 1.755000000 215776 + 1.765000000 225056 + 1.775000000 220591 + 1.785000000 221893 + 1.795000000 222841 + 1.805000000 225628 + 1.815000000 223027 + 1.825000000 224502 + 1.835000000 217368 + 1.845000000 212918 + 1.855000000 211540 + 1.865000000 211692 + 1.875000000 211523 + 1.885000000 220818 + 1.895000000 224676 + 1.905000000 218773 + 1.915000000 215817 + 1.925000000 213368 + 1.935000000 220793 + 1.945000000 232881 + 1.955000000 221099 + 1.965000000 222023 + 1.975000000 234396 + 1.985000000 231946 + 1.995000000 239540 + 2.005000000 242331 + 2.015000000 245603 + 2.025000000 255369 + 2.035000000 250386 + 2.045000000 252288 + 2.055000000 268431 + 2.065000000 272219 + 2.075000000 274588 + 2.085000000 287827 + 2.095000000 293826 + 2.105000000 294798 + 2.115000000 304842 + 2.125000000 328732 + 2.135000000 338872 + 2.145000000 329692 + 2.155000000 328990 + 2.165000000 321510 + 2.175000000 314635 + 2.185000000 303543 + 2.195000000 291106 + 2.205000000 278665 + 2.215000000 280512 + 2.225000000 276245 + 2.235000000 272154 + 2.245000000 271289 + 2.255000000 266319 + 2.265000000 265844 + 2.275000000 265668 + 2.285000000 264480 + 2.295000000 260620 + 2.305000000 262876 + 2.315000000 253760 + 2.325000000 240457 + 2.335000000 242545 + 2.345000000 240905 + 2.355000000 243564 + 2.365000000 238929 + 2.375000000 231701 + 2.385000000 223482 + 2.395000000 218350 + 2.405000000 214378 + 2.415000000 200203 + 2.425000000 190601 + 2.435000000 185430 + 2.445000000 191628 + 2.455000000 185298 + 2.465000000 182651 + 2.475000000 173616 + 2.485000000 170474 + 2.495000000 169117 + 2.505000000 166720 + 2.515000000 165713 + 2.525000000 167454 + 2.535000000 170183 + 2.545000000 164483 + 2.555000000 162742 + 2.565000000 158090 + 2.575000000 155236 + 2.585000000 152525 + 2.595000000 157353 + 2.605000000 149236 + 2.615000000 143994 + 2.625000000 138023 + 2.635000000 133078 + 2.645000000 134598 + 2.655000000 136184 + 2.665000000 134093 + 2.675000000 134843 + 2.685000000 130279 + 2.695000000 128936 + 2.705000000 131256 + 2.715000000 131040 + 2.725000000 122243 + 2.735000000 124188 + 2.745000000 126073 + 2.755000000 129653 + 2.765000000 129547 + 2.775000000 132863 + 2.785000000 129033 + 2.795000000 128848 + 2.805000000 117814 + 2.815000000 116121 + 2.825000000 120305 + 2.835000000 120424 + 2.845000000 120823 + 2.855000000 125437 + 2.865000000 130095 + 2.875000000 133457 + 2.885000000 137180 + 2.895000000 136834 + 2.905000000 138282 + 2.915000000 141026 + 2.925000000 136049 + 2.935000000 134005 + 2.945000000 132981 + 2.955000000 129489 + 2.965000000 135815 + 2.975000000 132622 + 2.985000000 134164 + 2.995000000 132769 + 3.005000000 128633 + 3.015000000 129709 + 3.025000000 134079 + 3.035000000 130357 + 3.045000000 127426 + 3.055000000 125414 + 3.065000000 119559 + 3.075000000 114078 + 3.085000000 119336 + 3.095000000 130108 + 3.105000000 127572 + 3.115000000 121245 + 3.125000000 118800 + 3.135000000 122223 + 3.145000000 123382 + 3.155000000 127105 + 3.165000000 131307 + 3.175000000 127619 + 3.185000000 124859 + 3.195000000 92315 diff --git a/regtest/drr/rt-extract/test.czar.grad.reference b/regtest/drr/rt-extract/test.czar.grad.reference new file mode 100644 index 0000000000000000000000000000000000000000..4ee024ac2661745df8671f45ee3ae64090371882 --- /dev/null +++ b/regtest/drr/rt-extract/test.czar.grad.reference @@ -0,0 +1,202 @@ +# 1 +# 1.19999999999999996 0.01000000000000000 200 0 + 1.205000000 -134.785570047 + 1.215000000 -163.340877345 + 1.225000000 -163.548404659 + 1.235000000 -155.952341084 + 1.245000000 -133.984068197 + 1.255000000 -107.062314168 + 1.265000000 -97.047718758 + 1.275000000 -77.360515105 + 1.285000000 -58.897061712 + 1.295000000 -47.676049481 + 1.305000000 -46.423515990 + 1.315000000 -47.689207689 + 1.325000000 -33.136528626 + 1.335000000 -34.545416657 + 1.345000000 -54.504783208 + 1.355000000 -68.983410687 + 1.365000000 -47.526523332 + 1.375000000 -43.889960220 + 1.385000000 -33.530821635 + 1.395000000 -16.672033890 + 1.405000000 11.275584633 + 1.415000000 34.541213141 + 1.425000000 49.235631521 + 1.435000000 58.339034797 + 1.445000000 67.956361599 + 1.455000000 66.751655625 + 1.465000000 77.275941423 + 1.475000000 82.512539376 + 1.485000000 86.863068207 + 1.495000000 88.420303577 + 1.505000000 97.084547523 + 1.515000000 89.326467072 + 1.525000000 88.976061821 + 1.535000000 93.862686320 + 1.545000000 99.957484499 + 1.555000000 96.029944083 + 1.565000000 98.054347436 + 1.575000000 98.739422903 + 1.585000000 97.050971373 + 1.595000000 104.930932753 + 1.605000000 108.857128971 + 1.615000000 106.053998291 + 1.625000000 102.257648482 + 1.635000000 97.703390896 + 1.645000000 102.010492329 + 1.655000000 109.185396906 + 1.665000000 95.380787509 + 1.675000000 96.094784750 + 1.685000000 95.772245173 + 1.695000000 94.211176748 + 1.705000000 106.179159184 + 1.715000000 101.072482720 + 1.725000000 103.802158720 + 1.735000000 104.528654936 + 1.745000000 90.237153247 + 1.755000000 97.884974195 + 1.765000000 96.265855480 + 1.775000000 103.663240406 + 1.785000000 101.523017705 + 1.795000000 102.081857901 + 1.805000000 105.948547194 + 1.815000000 103.100414565 + 1.825000000 111.393972815 + 1.835000000 108.742798979 + 1.845000000 104.276392510 + 1.855000000 103.892013316 + 1.865000000 99.940794380 + 1.875000000 97.693045011 + 1.885000000 82.675112031 + 1.895000000 98.510548944 + 1.905000000 102.332603607 + 1.915000000 97.059810516 + 1.925000000 95.201743706 + 1.935000000 87.226438281 + 1.945000000 93.768147688 + 1.955000000 99.371736481 + 1.965000000 85.571456693 + 1.975000000 84.312500480 + 1.985000000 89.349655890 + 1.995000000 91.119178218 + 2.005000000 89.544641166 + 2.015000000 78.144859855 + 2.025000000 83.161569958 + 2.035000000 89.768912039 + 2.045000000 73.627495453 + 2.055000000 78.295456333 + 2.065000000 85.626489449 + 2.075000000 81.091169711 + 2.085000000 81.935823848 + 2.095000000 83.082683971 + 2.105000000 80.981879796 + 2.115000000 76.499706878 + 2.125000000 67.455355781 + 2.135000000 72.986903850 + 2.145000000 76.556477008 + 2.155000000 75.682459542 + 2.165000000 77.622896948 + 2.175000000 75.395490744 + 2.185000000 70.269780139 + 2.195000000 65.763199584 + 2.205000000 57.405930281 + 2.215000000 58.231534786 + 2.225000000 60.018177683 + 2.235000000 62.694222329 + 2.245000000 65.257802374 + 2.255000000 54.356745526 + 2.265000000 54.977561793 + 2.275000000 52.981667944 + 2.285000000 58.760662160 + 2.295000000 50.421440611 + 2.305000000 46.879825601 + 2.315000000 45.880674293 + 2.325000000 37.867464502 + 2.335000000 35.670060722 + 2.345000000 29.493940839 + 2.355000000 34.341813026 + 2.365000000 35.226510450 + 2.375000000 31.590142880 + 2.385000000 27.989088387 + 2.395000000 16.693480537 + 2.405000000 22.318981470 + 2.415000000 22.798182412 + 2.425000000 14.493784709 + 2.435000000 13.827016621 + 2.445000000 12.672472993 + 2.455000000 17.807580436 + 2.465000000 20.575560427 + 2.475000000 18.756849383 + 2.485000000 14.134648654 + 2.495000000 11.415224097 + 2.505000000 13.038146701 + 2.515000000 -0.481228671 + 2.525000000 8.860074597 + 2.535000000 6.686233602 + 2.545000000 11.457072622 + 2.555000000 11.672195157 + 2.565000000 10.889947134 + 2.575000000 2.556511880 + 2.585000000 -0.295678424 + 2.595000000 3.603689540 + 2.605000000 14.188663105 + 2.615000000 23.172655795 + 2.625000000 21.640257576 + 2.635000000 14.923297928 + 2.645000000 8.773855345 + 2.655000000 11.604506796 + 2.665000000 8.987538787 + 2.675000000 22.584392833 + 2.685000000 16.914767069 + 2.695000000 12.696627282 + 2.705000000 11.656371528 + 2.715000000 21.328600871 + 2.725000000 19.083525135 + 2.735000000 10.289459237 + 2.745000000 12.629499493 + 2.755000000 22.903425628 + 2.765000000 19.303135271 + 2.775000000 15.206569307 + 2.785000000 19.892529435 + 2.795000000 18.981314521 + 2.805000000 23.658471835 + 2.815000000 13.107608012 + 2.825000000 17.596823402 + 2.835000000 23.063022875 + 2.845000000 16.949593450 + 2.855000000 14.084609192 + 2.865000000 19.864350754 + 2.875000000 20.429473602 + 2.885000000 16.551167578 + 2.895000000 24.571289335 + 2.905000000 13.478772521 + 2.915000000 23.785882885 + 2.925000000 30.957621996 + 2.935000000 30.831874058 + 2.945000000 27.168433256 + 2.955000000 28.198999115 + 2.965000000 22.611684170 + 2.975000000 37.461065093 + 2.985000000 31.452658609 + 2.995000000 33.671053421 + 3.005000000 28.734117550 + 3.015000000 33.039335506 + 3.025000000 39.542101249 + 3.035000000 40.536073611 + 3.045000000 46.221586757 + 3.055000000 47.668937603 + 3.065000000 60.703779164 + 3.075000000 50.785870320 + 3.085000000 49.518808641 + 3.095000000 66.210715107 + 3.105000000 78.602055143 + 3.115000000 84.504986826 + 3.125000000 100.784838242 + 3.135000000 105.949166323 + 3.145000000 123.485149656 + 3.155000000 140.403093573 + 3.165000000 161.213387244 + 3.175000000 168.934666039 + 3.185000000 193.407600944 + 3.195000000 207.692997028 diff --git a/regtest/drr/rt-extract/test.czar.pmf.reference b/regtest/drr/rt-extract/test.czar.pmf.reference new file mode 100644 index 0000000000000000000000000000000000000000..02bc001ed5b8bbe88e18572112980094289018f5 --- /dev/null +++ b/regtest/drr/rt-extract/test.czar.pmf.reference @@ -0,0 +1,201 @@ +1.200000000 0.000000000 +1.210000000 -1.347855700 +1.220000000 -2.981264474 +1.230000000 -4.616748520 +1.240000000 -6.176271931 +1.250000000 -7.516112613 +1.260000000 -8.586735755 +1.270000000 -9.557212943 +1.280000000 -10.330818094 +1.290000000 -10.919788711 +1.300000000 -11.396549206 +1.310000000 -11.860784365 +1.320000000 -12.337676442 +1.330000000 -12.669041729 +1.340000000 -13.014495895 +1.350000000 -13.559543727 +1.360000000 -14.249377834 +1.370000000 -14.724643067 +1.380000000 -15.163542670 +1.390000000 -15.498850886 +1.400000000 -15.665571225 +1.410000000 -15.552815379 +1.420000000 -15.207403247 +1.430000000 -14.715046932 +1.440000000 -14.131656584 +1.450000000 -13.452092968 +1.460000000 -12.784576412 +1.470000000 -12.011816997 +1.480000000 -11.186691604 +1.490000000 -10.318060922 +1.500000000 -9.433857886 +1.510000000 -8.463012411 +1.520000000 -7.569747740 +1.530000000 -6.679987122 +1.540000000 -5.741360259 +1.550000000 -4.741785414 +1.560000000 -3.781485973 +1.570000000 -2.800942498 +1.580000000 -1.813548269 +1.590000000 -0.843038556 +1.600000000 0.206270772 +1.610000000 1.294842062 +1.620000000 2.355382045 +1.630000000 3.377958529 +1.640000000 4.354992438 +1.650000000 5.375097362 +1.660000000 6.466951331 +1.670000000 7.420759206 +1.680000000 8.381707053 +1.690000000 9.339429505 +1.700000000 10.281541272 +1.710000000 11.343332864 +1.720000000 12.354057692 +1.730000000 13.392079279 +1.740000000 14.437365828 +1.750000000 15.339737361 +1.760000000 16.318587103 +1.770000000 17.281245657 +1.780000000 18.317878061 +1.790000000 19.333108238 +1.800000000 20.353926817 +1.810000000 21.413412289 +1.820000000 22.444416435 +1.830000000 23.558356163 +1.840000000 24.645784153 +1.850000000 25.688548078 +1.860000000 26.727468211 +1.870000000 27.726876155 +1.880000000 28.703806605 +1.890000000 29.530557725 +1.900000000 30.515663215 +1.910000000 31.538989251 +1.920000000 32.509587356 +1.930000000 33.461604793 +1.940000000 34.333869176 +1.950000000 35.271550653 +1.960000000 36.265268018 +1.970000000 37.120982585 +1.980000000 37.964107589 +1.990000000 38.857604148 +2.000000000 39.768795930 +2.010000000 40.664242342 +2.020000000 41.445690941 +2.030000000 42.277306640 +2.040000000 43.174995761 +2.050000000 43.911270715 +2.060000000 44.694225279 +2.070000000 45.550490173 +2.080000000 46.361401870 +2.090000000 47.180760109 +2.100000000 48.011586948 +2.110000000 48.821405746 +2.120000000 49.586402815 +2.130000000 50.260956373 +2.140000000 50.990825411 +2.150000000 51.756390181 +2.160000000 52.513214777 +2.170000000 53.289443746 +2.180000000 54.043398654 +2.190000000 54.746096455 +2.200000000 55.403728451 +2.210000000 55.977787754 +2.220000000 56.560103102 +2.230000000 57.160284879 +2.240000000 57.787227102 +2.250000000 58.439805126 +2.260000000 58.983372581 +2.270000000 59.533148199 +2.280000000 60.062964878 +2.290000000 60.650571500 +2.300000000 61.154785906 +2.310000000 61.623584162 +2.320000000 62.082390905 +2.330000000 62.461065550 +2.340000000 62.817766157 +2.350000000 63.112705565 +2.360000000 63.456123696 +2.370000000 63.808388800 +2.380000000 64.124290229 +2.390000000 64.404181113 +2.400000000 64.571115918 +2.410000000 64.794305733 +2.420000000 65.022287557 +2.430000000 65.167225404 +2.440000000 65.305495570 +2.450000000 65.432220300 +2.460000000 65.610296105 +2.470000000 65.816051709 +2.480000000 66.003620203 +2.490000000 66.144966689 +2.500000000 66.259118930 +2.510000000 66.389500397 +2.520000000 66.384688111 +2.530000000 66.473288857 +2.540000000 66.540151193 +2.550000000 66.654721919 +2.560000000 66.771443870 +2.570000000 66.880343342 +2.580000000 66.905908461 +2.590000000 66.902951676 +2.600000000 66.938988572 +2.610000000 67.080875203 +2.620000000 67.312601761 +2.630000000 67.529004336 +2.640000000 67.678237316 +2.650000000 67.765975869 +2.660000000 67.882020937 +2.670000000 67.971896325 +2.680000000 68.197740253 +2.690000000 68.366887924 +2.700000000 68.493854197 +2.710000000 68.610417912 +2.720000000 68.823703921 +2.730000000 69.014539172 +2.740000000 69.117433765 +2.750000000 69.243728759 +2.760000000 69.472763016 +2.770000000 69.665794368 +2.780000000 69.817860062 +2.790000000 70.016785356 +2.800000000 70.206598501 +2.810000000 70.443183219 +2.820000000 70.574259300 +2.830000000 70.750227534 +2.840000000 70.980857762 +2.850000000 71.150353697 +2.860000000 71.291199789 +2.870000000 71.489843296 +2.880000000 71.694138032 +2.890000000 71.859649708 +2.900000000 72.105362601 +2.910000000 72.240150327 +2.920000000 72.478009155 +2.930000000 72.787585375 +2.940000000 73.095904116 +2.950000000 73.367588449 +2.960000000 73.649578440 +2.970000000 73.875695281 +2.980000000 74.250305932 +2.990000000 74.564832518 +3.000000000 74.901543053 +3.010000000 75.188884228 +3.020000000 75.519277583 +3.030000000 75.914698596 +3.040000000 76.320059332 +3.050000000 76.782275199 +3.060000000 77.258964575 +3.070000000 77.866002367 +3.080000000 78.373861070 +3.090000000 78.869049157 +3.100000000 79.531156308 +3.110000000 80.317176859 +3.120000000 81.162226727 +3.130000000 82.170075110 +3.140000000 83.229566773 +3.150000000 84.464418270 +3.160000000 85.868449205 +3.170000000 87.480583078 +3.180000000 89.169929738 +3.190000000 91.104005748 +3.200000000 93.180935718 diff --git a/regtest/drr/rt-extract/test.drrstate b/regtest/drr/rt-extract/test.drrstate new file mode 100644 index 0000000000000000000000000000000000000000..2a0133fd2ef1d1be8c1c8fe295c8e88a7b7a6515 Binary files /dev/null and b/regtest/drr/rt-extract/test.drrstate differ diff --git a/src/.gitignore b/src/.gitignore index 4bbc58a6d50a6b37719fcaaf083595e62797eeed..39c04a0c97b001e496000bc57b53b60f5b34b664 100644 --- a/src/.gitignore +++ b/src/.gitignore @@ -12,6 +12,7 @@ !/config !/core !/crystallization +!/drr !/eds !/function !/generic diff --git a/src/drr/.gitignore b/src/drr/.gitignore new file mode 100644 index 0000000000000000000000000000000000000000..8a5c88d566810bd4435eb522e8ea0dd0ea4d2c92 --- /dev/null +++ b/src/drr/.gitignore @@ -0,0 +1,11 @@ +/* +# in this directory, only accept source, Makefile and README +!/.gitignore +!/*.c +!/*.cpp +!/*.h +!/Makefile +!/README +!/README.md +!/COPYRIGHT +!/module.type diff --git a/src/drr/COPYRIGHT b/src/drr/COPYRIGHT new file mode 100644 index 0000000000000000000000000000000000000000..aa269d78aa92f344b8fecfb26f8f22b0b9d8f6df --- /dev/null +++ b/src/drr/COPYRIGHT @@ -0,0 +1,15 @@ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. diff --git a/src/drr/DRR.cpp b/src/drr/DRR.cpp new file mode 100644 index 0000000000000000000000000000000000000000..f07fa08025e631fa736c2e7a87a10b6f9aa0ef7f --- /dev/null +++ b/src/drr/DRR.cpp @@ -0,0 +1,468 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifdef __PLUMED_HAS_BOOST_SERIALIZATION +#include "DRR.h" + +namespace PLMD { +namespace drr { + +bool DRRAxis::isInBoundary(double x) const { + if (x < min || x > max) + return false; + else + return true; +} + +DRRAxis DRRAxis::merge(const DRRAxis &d1, const DRRAxis &d2) { + const double newmin = std::min(d1.getMin(), d2.getMin()); + const double newmax = std::max(d1.getMax(), d2.getMax()); + const double newWidth = d1.getWidth(); + const size_t newbins = size_t(std::nearbyint((newmax - newmin) / newWidth)); + const bool newpbc = d1.isPeriodic(); + const double newdmin = std::min(d1.getDomainMin(), d2.getDomainMin()); + const double newdmax = std::max(d1.getDomainMax(), d2.getDomainMax()); + DRRAxis result(newmin, newmax, newbins, newpbc, newdmin, newdmax); + return result; +} + +std::vector<double> DRRAxis::getMiddlePoints() { + std::vector<double> result(nbins, 0); + const double width = getWidth(); + double temp = min - width / 2; + std::generate(std::begin(result), std::end(result), [&]() { + temp += width; + return temp; + }); + return result; +} + +size_t DRRForceGrid::index1D(const DRRAxis &c, double x) { +#ifdef DEBUG_DRR + if (x < c.min || x > c.max) { + std::cerr << "This is a bug!" << '\n'; + std::cerr << "CV should be larger than minimal value or smaller than the " + "maximum value of dimension." + << '\n'; + std::cerr << "min = " << c.min << '\n'; + std::cerr << "max = " << c.max << '\n'; + std::cerr << "x = " << x << std::endl; + std::abort(); + } +#endif + size_t idx = size_t(std::floor((x - c.min) / c.binWidth)); + idx = (idx == c.nbins) ? (c.nbins - 1) : idx; + return idx; +} + +void DRRForceGrid::fillTable(const std::vector<std::vector<double>> &in) { + table.resize(ndims, std::vector<double>(sampleSize, 0)); + for (size_t i = 0; i < ndims; ++i) { + size_t repeatAll = 1, repeatOne = 1; + for (size_t j = i + 1; j < ndims; ++j) + repeatOne *= in[j].size(); + for (size_t j = 0; j < i; ++j) + repeatAll *= in[j].size(); + size_t in_i_sz = in[i].size(); + for (size_t l = 0; l < in_i_sz; ++l) + std::fill_n(std::begin(table[i]) + l * repeatOne, repeatOne, in[i][l]); + for (size_t k = 0; k < repeatAll - 1; ++k) + std::copy_n(std::begin(table[i]), repeatOne * in_i_sz, + std::begin(table[i]) + repeatOne * in_i_sz * (k + 1)); + } +} + +DRRForceGrid::DRRForceGrid() + : suffix(""), ndims(0), dimensions(0), sampleSize(0), forceSize(0), + headers(""), table(0), forces(0), samples(0), endpoints(0), shifts(0) {} + +DRRForceGrid::DRRForceGrid(const std::vector<DRRAxis> &p_dimensions, + const std::string &p_suffix, bool initializeTable) + : suffix(p_suffix), ndims(p_dimensions.size()), dimensions(p_dimensions) { + sampleSize = 1; + std::vector<std::vector<double>> mp(ndims); + std::stringstream ss; + ss << "# " << ndims << '\n'; + shifts.resize(ndims, 0); + for (size_t i = 0; i < ndims; ++i) { + sampleSize = dimensions[i].nbins * sampleSize; + mp[i] = dimensions[i].getMiddlePoints(); + shifts[i] = std::accumulate( + std::begin(dimensions), std::begin(dimensions) + i, size_t(1), + [](size_t k, const DRRAxis &d) { return k * d.getBins(); }); + ss.precision(std::numeric_limits<double>::max_digits10); + ss << std::fixed << "# " << dimensions[i].min << ' ' + << dimensions[i].getWidth() << ' ' << dimensions[i].nbins; + if (dimensions[i].isPeriodic()) + ss << " 1" << '\n'; + else + ss << " 0" << '\n'; + } + headers = ss.str(); + if (initializeTable) + fillTable(mp); + forceSize = sampleSize * ndims; + forces.resize(forceSize, 0.0); + samples.resize(sampleSize, 0); + // For 1D pmf + if (ndims == 1) { + endpoints.resize(dimensions[0].nbins + 1, 0); + double ep = dimensions[0].min; + double stride = dimensions[0].getWidth(); + for (auto &i : endpoints) { + i = ep; + ep += stride; + } + } +} + +bool DRRForceGrid::isInBoundary(const std::vector<double> &pos) const { + bool result = true; + for (size_t i = 0; i < ndims; ++i) { + if (pos[i] < dimensions[i].min || pos[i] > dimensions[i].max) + return false; + } + return result; +} + +size_t DRRForceGrid::sampleAddress(const std::vector<double> &pos) const { + size_t saddr = 0; + for (size_t i = 0; i < ndims; ++i) { + saddr += shifts[i] * index1D(dimensions[i], pos[i]); + } + return saddr; +} + +bool DRRForceGrid::store(const std::vector<double> &pos, + const std::vector<double> &f, + unsigned long int nsamples) { + if (isInBoundary(pos)) { + if (nsamples == 0) + return true; + const size_t baseaddr = sampleAddress(pos) * ndims; + samples[baseaddr / ndims] += nsamples; + auto it_fa = std::begin(forces) + baseaddr; + std::transform(std::begin(f), std::end(f), it_fa, it_fa, + std::plus<double>()); + return true; + } else { + return false; + } +} + +std::vector<DRRAxis> DRRForceGrid::merge(const std::vector<DRRAxis> &dA, + const std::vector<DRRAxis> &dB) { + std::vector<DRRAxis> dR(dA.size()); + std::transform(std::begin(dA), std::end(dA), std::begin(dB), std::begin(dR), + DRRAxis::merge); + return dR; +} + +std::vector<double> +DRRForceGrid::getAccumulatedForces(const std::vector<double> &pos) const { + std::vector<double> result(ndims, 0); + if (!isInBoundary(pos)) + return result; + const size_t baseaddr = sampleAddress(pos) * ndims; + std::copy(std::begin(forces) + baseaddr, + std::begin(forces) + baseaddr + ndims, std::begin(result)); + return result; +} + +unsigned long int DRRForceGrid::getCount(const std::vector<double> &pos, + bool SkipCheck) const { + if (!SkipCheck) { + if (!isInBoundary(pos)) { + return 0; + } + } + return samples[sampleAddress(pos)]; +} + +std::vector<double> DRRForceGrid::getGradient(const std::vector<double> &pos, + bool SkipCheck) const { + std::vector<double> result(ndims, 0); + if (!SkipCheck) { + if (!isInBoundary(pos)) { + return result; + } + } + const size_t baseaddr = sampleAddress(pos) * ndims; + if (samples[baseaddr / ndims] == 0) + return result; + auto it_fa = std::begin(forces) + baseaddr; + std::transform(it_fa, it_fa + ndims, std::begin(result), [&](double fa) { + return (-1.0) * fa / samples[baseaddr / ndims]; + }); + return result; +} + +std::vector<double> +DRRForceGrid::getCountsLogDerivative(const std::vector<double> &pos) const { + const size_t addr = sampleAddress(pos); + const unsigned long int count_this = samples[addr]; + std::vector<double> result(ndims, 0); + for (size_t i = 0; i < ndims; ++i) { + const double binWidth = dimensions[i].getWidth(); + const size_t addr_first = + addr - shifts[i] * index1D(dimensions[i], pos[i]) + 0; + const size_t addr_last = addr_first + shifts[i] * (dimensions[i].nbins - 1); + if (addr == addr_first) { + if (dimensions[i].periodic == true) { + const unsigned long int &count_next = samples[addr + shifts[i]]; + const unsigned long int &count_prev = samples[addr_last]; + if (count_next != 0 && count_prev != 0) + result[i] = + (std::log(count_next) - std::log(count_prev)) / (2 * binWidth); + } else { + const unsigned long int &count_next = samples[addr + shifts[i]]; + const unsigned long int &count_next2 = samples[addr + shifts[i] * 2]; + if (count_next != 0 && count_this != 0 && count_next2 != 0) + result[i] = + (std::log(count_next2) * (-1.0) + std::log(count_next) * 4.0 - + std::log(count_this) * 3.0) / + (2.0 * binWidth); + } + } else if (addr == addr_last) { + if (dimensions[i].periodic == true) { + const unsigned long int &count_prev = samples[addr - shifts[i]]; + const unsigned long int &count_next = samples[addr_first]; + if (count_next != 0 && count_prev != 0) + result[i] = + (std::log(count_next) - std::log(count_prev)) / (2 * binWidth); + } else { + const unsigned long int &count_prev = samples[addr - shifts[i]]; + const unsigned long int &count_prev2 = samples[addr - shifts[i] * 2]; + if (count_prev != 0 && count_this != 0 && count_prev2 != 0) + result[i] = (std::log(count_this) * 3.0 - std::log(count_prev) * 4.0 + + std::log(count_prev2)) / + (2.0 * binWidth); + } + } else { + const unsigned long int &count_prev = samples[addr - shifts[i]]; + const unsigned long int &count_next = samples[addr + shifts[i]]; + if (count_next != 0 && count_prev != 0) + result[i] = + (std::log(count_next) - std::log(count_prev)) / (2 * binWidth); + } + } + return result; +} + +// Write the gradients to a .grad file. +void DRRForceGrid::writeGrad(std::string filename) const { + std::stringstream ssg; + std::fstream fsgrad; + filename += suffix + ".grad"; + ssg << headers; + ssg << std::left << std::fixed << std::setprecision(OUTPUTPRECISION); + for (size_t i = 0; i < sampleSize; ++i) { + std::vector<double> pos(ndims, 0); + for (size_t j = 0; j < ndims; ++j) { + pos[j] = table[j][i]; + ssg << ' ' << table[j][i]; + } + const std::vector<double> f = getGradient(pos, true); + for (const auto &i : f) + ssg << ' ' << i; + ssg << '\n'; + } + fsgrad.open(filename.c_str(), std::ios_base::out); + fsgrad.write(ssg.str().c_str(), ssg.str().length()); + fsgrad.close(); +} + +void DRRForceGrid::write1DPMF(std::string filename) const { + std::stringstream ssp; + std::fstream fspmf; + filename += suffix + ".pmf"; + const double w = dimensions[0].getWidth(); + double pmf = 0; + ssp << std::fixed << std::setprecision(OUTPUTPRECISION) << endpoints[0] << ' ' + << pmf << '\n'; + for (size_t i = 0; i < dimensions[0].nbins; ++i) { + std::vector<double> pos(1, 0); + pos[0] = table[0][i]; + const std::vector<double> f = getGradient(pos, true); + ssp << endpoints[i + 1]; + pmf += f[0] * w; + ssp << ' ' << pmf << '\n'; + } + fspmf.open(filename.c_str(), std::ios_base::out); + fspmf.write(ssp.str().c_str(), ssp.str().length()); + fspmf.close(); +} + +// Write the gradients to a .count file. +void DRRForceGrid::writeCount(std::string filename) const { + std::stringstream ssc; + std::fstream fscount; + filename += suffix + ".count"; + ssc << headers; + ssc << std::left << std::fixed << std::setprecision(OUTPUTPRECISION); + std::vector<double> pos(ndims, 0); + for (size_t i = 0; i < sampleSize; ++i) { + for (size_t j = 0; j < ndims; ++j) { + pos[j] = table[j][i]; + ssc << ' ' << table[j][i]; + } + ssc << ' ' << getCount(pos, true) << '\n'; + } + fscount.open(filename.c_str(), std::ios_base::out); + fscount.write(ssc.str().c_str(), ssc.str().length()); + fscount.close(); +} + +void DRRForceGrid::writeAll(const std::string &filename) const { + std::stringstream ssc, ssg; + std::fstream fscount, fsgrad; + std::string countname = filename + suffix + ".count"; + std::string gradname = filename + suffix + ".grad"; + ssc << headers << std::left << std::fixed + << std::setprecision(OUTPUTPRECISION); + ssg << headers << std::left << std::fixed + << std::setprecision(OUTPUTPRECISION); + std::vector<double> pos(ndims, 0); + for (size_t i = 0; i < sampleSize; ++i) { + for (size_t j = 0; j < ndims; ++j) { + pos[j] = table[j][i]; + ssc << ' ' << table[j][i]; + ssg << ' ' << table[j][i]; + } + ssc << ' ' << getCount(pos, true) << '\n'; + // ssc << ' ' << samples[i] << '\n'; + std::vector<double> f = getGradient(pos, true); + for (const auto &i : f) + ssg << ' ' << i; + ssg << '\n'; + } + fscount.open(countname.c_str(), std::ios_base::out); + fsgrad.open(gradname.c_str(), std::ios_base::out); + fscount.write(ssc.str().c_str(), ssc.str().length()); + fsgrad.write(ssg.str().c_str(), ssg.str().length()); + fscount.close(); + fsgrad.close(); + if (ndims == 1) { + write1DPMF(filename); + } +} + +bool ABF::store_getbias(const std::vector<double> &pos, + const std::vector<double> &f, + std::vector<double> &fbias, double fullsamples) { + if (!isInBoundary(pos)) { + std::fill(std::begin(fbias), std::end(fbias), 0.0); + return false; + } + const size_t baseaddr = sampleAddress(pos); + unsigned long int &count = samples[baseaddr]; + ++count; + double factor = 2 * (static_cast<double>(count)) / fullsamples - 1; + factor = factor < 0 ? 0 : factor > 1 ? 1 : factor; // Clamp to [0,1] + auto it_fa = std::begin(forces) + baseaddr * ndims; + auto it_fb = std::begin(fbias); + auto it_f = std::begin(f); + do { + (*it_fa) += (*it_f); // Accumulate instantaneous force + (*it_fb) = + factor * (*it_fa) * (-1.0) / static_cast<double>(count); // Calculate bias force + ++it_fa; + ++it_fb; + ++it_f; + } while (it_f != std::end(f)); + + return true; +} + +ABF ABF::mergewindow(const ABF &aWA, const ABF &aWB) { + const std::vector<DRRAxis> dA = aWA.getDimensions(); + const std::vector<DRRAxis> dB = aWB.getDimensions(); + const std::vector<DRRAxis> dR = merge(dA, dB); + const std::string suffix = ".abf"; + ABF result(dR, suffix); + const std::vector<std::vector<double>> table = result.getTable(); + const size_t nrows = result.getSampleSize(); + const size_t ncols = result.getNumberOfDimension(); + std::vector<double> pos(ncols, 0); + for (size_t i = 0; i < nrows; ++i) { + for (size_t j = 0; j < ncols; ++j) { + pos[j] = table[j][i]; + } + const unsigned long int countA = aWA.getCount(pos, false); + const unsigned long int countB = aWB.getCount(pos, false); + const std::vector<double> aForceA = aWA.getAccumulatedForces(pos); + const std::vector<double> aForceB = aWB.getAccumulatedForces(pos); + result.store(pos, aForceA, countA); + result.store(pos, aForceB, countB); + } + return result; +} + +std::vector<double> CZAR::getGradient(const std::vector<double> &pos, + bool SkipCheck) const { + std::vector<double> result(ndims, 0); + if (!SkipCheck) { + if (!isInBoundary(pos)) { + return result; + } + } + if (kbt <= std::numeric_limits<double>::epsilon()) { + std::cerr << "ERROR! The kbt shouldn't be zero when use CZAR estimator. " + << '\n'; + std::abort(); + } + const size_t baseaddr = sampleAddress(pos) * ndims; + const std::vector<double> log_deriv(getCountsLogDerivative(pos)); + if (samples[baseaddr / ndims] == 0) + return result; + auto it_fa = std::begin(forces) + baseaddr; + std::transform(it_fa, it_fa + ndims, std::begin(log_deriv), + std::begin(result), [&](double fa, double ld) { + return fa * (-1.0) / samples[baseaddr / ndims] - kbt * ld; + }); + return result; +} + +CZAR CZAR::mergewindow(const CZAR &cWA, const CZAR &cWB) { + const std::vector<DRRAxis> dA = cWA.getDimensions(); + const std::vector<DRRAxis> dB = cWB.getDimensions(); + const std::vector<DRRAxis> dR = merge(dA, dB); + const double newkbt = cWA.getkbt(); + const std::string suffix = ".czar"; + CZAR result(dR, suffix, newkbt); + const std::vector<std::vector<double>> table = result.getTable(); + const size_t nrows = result.getSampleSize(); + const size_t ncols = result.getNumberOfDimension(); + std::vector<double> pos(ncols, 0); + for (size_t i = 0; i < nrows; ++i) { + for (size_t j = 0; j < ncols; ++j) { + pos[j] = table[j][i]; + } + const unsigned long int countA = cWA.getCount(pos); + const unsigned long int countB = cWB.getCount(pos); + const std::vector<double> aForceA = cWA.getAccumulatedForces(pos); + const std::vector<double> aForceB = cWB.getAccumulatedForces(pos); + result.store(pos, aForceA, countA); + result.store(pos, aForceB, countB); + } + return result; +} + +} +} + +#endif diff --git a/src/drr/DRR.h b/src/drr/DRR.h new file mode 100644 index 0000000000000000000000000000000000000000..8081545b5c2a3f7a4a65d1e9d6205d91faa99004 --- /dev/null +++ b/src/drr/DRR.h @@ -0,0 +1,336 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifndef __PLUMED_drr_DRR_h +#define __PLUMED_drr_DRR_h +// Build requirement: boost, c++11 compatible compiler. +#ifdef __PLUMED_HAS_BOOST_SERIALIZATION + +#include <algorithm> +#include <cmath> +#include <cstddef> +#include <cstdlib> +#include <fstream> +#include <iomanip> +#include <iostream> +#include <iterator> +#include <limits> +#include <numeric> +#include <sstream> + +// boost headers for serialization +#include <boost/archive/binary_iarchive.hpp> +#include <boost/archive/binary_oarchive.hpp> +#include <boost/serialization/string.hpp> +#include <boost/serialization/vector.hpp> + +namespace PLMD { +namespace drr { + +/// This class can store the minimum, maximum and bins of a dimension(axis). +class DRRAxis { +public: + /// Default empty constructor + DRRAxis() { + min = max = 0.0; + nbins = 0; + periodic = false; + domainMax = domainMin = 0.0; + binWidth = 0.0; + } + /// Constructor using maximum value, minimum value and the number of bins(No + /// pbc) + DRRAxis(double l, double h, size_t n) + : min(l), max(h), nbins(n), periodic(false), domainMax(0), domainMin(0), + binWidth((max - min) / double(nbins)) {} + /// PBC-aware constructor + DRRAxis(double l, double h, size_t n, bool pbc, double dMax, double dMin) + : min(l), max(h), nbins(n), periodic(pbc), domainMax(dMax), + domainMin(dMin), binWidth((max - min) / double(nbins)) {} + /// Set values + void set(double l, double h, size_t n, bool pbc = false, double dmax = 0, + double dmin = 0) { + min = l; + max = h; + nbins = n; + periodic = pbc; + domainMax = dmax; + domainMin = dmin; + binWidth = (max - min) / nbins; + } + /// Set PBC data + void setPeriodicity(double dmax, double dmin) { + domainMax = dmax; + domainMin = dmin; + periodic = true; + } + /// Getters + double getMin() const { return this->min; } + double getMax() const { return this->max; } + double getWidth() const { return binWidth; } + double getDomainMax() const { return this->domainMax; } + double getDomainMin() const { return this->domainMin; } + size_t getBins() const { return this->nbins; } + + /// Check periodicity + bool isPeriodic() const { return this->periodic; } + + /// Check whether x is in this axis + bool isInBoundary(double x) const; + /// Get an array of middle points of each bins + std::vector<double> getMiddlePoints(); + + /// Combine two axes if they share the same bin width. + static DRRAxis merge(const DRRAxis &d1, const DRRAxis &d2); + + friend class DRRForceGrid; + +protected: + double min; // Minimum value + double max; // Maximum value + size_t nbins; // Number of bins + bool periodic; // Periodicity + double domainMax; // Maybe useless? + double domainMin; // Maybe useless? + friend class boost::serialization::access; + /// Use boost serialization + template <typename Archive> + void save(Archive &ar, const unsigned int version) const { + ar &min; + ar &max; + ar &nbins; + ar &periodic; + ar &domainMax; + ar &domainMin; + } + /// Split save and load. The bin width is calculated after initialization. + template <typename Archive> + void load(Archive &ar, const unsigned int version) { + ar &min; + ar &max; + ar &nbins; + ar &periodic; + ar &domainMax; + ar &domainMin; + binWidth = (max - min) / double(nbins); + } + template <typename Archive> + void serialize(Archive &ar, const unsigned int version) { + boost::serialization::split_member(ar, *this, version); + } + +private: + double binWidth; // bin width +}; + +/// A class for collecting instantaneous forces, calculating average forces and +/// build CV histogram. +class DRRForceGrid { +public: + /// Empty constructor + DRRForceGrid(); + /// "Real" constructor + /// The 2D table vector is mainly used for print grid points in grad and count + /// file. + /// So when use binary output we can set initializeTable to false to save + /// memory. + explicit DRRForceGrid(const std::vector<DRRAxis> &p_dimensions, + const std::string &p_suffix, + bool initializeTable = true); + /// Check whether a point is in this grid + bool isInBoundary(const std::vector<double> &pos) const; + // /// Get internal indices of a point + // std::vector<size_t> index(const std::vector<double> &pos) const; + /// Get internal counts address of a point + size_t sampleAddress(const std::vector<double> &pos) const; + /// Store instantaneous forces of a point + /// nsamples > 1 is useful for merging windows + bool store(const std::vector<double> &pos, const std::vector<double> &f, + unsigned long int nsamples = 1); + /// Get accumulated forces of a point + std::vector<double> + getAccumulatedForces(const std::vector<double> &pos) const; + /// Get counts of a point + unsigned long int getCount(const std::vector<double> &pos, + bool SkipCheck = false) const; + /// Virtual function! get gradients of a point + /// CZAR and naive(ABF) have different gradient formulae + virtual std::vector<double> getGradient(const std::vector<double> &pos, + bool SkipCheck = false) const; + /// Calculate dln(Ï)/dz, useful for CZAR + /// This function may be moved to CZAR class in the future + std::vector<double> + getCountsLogDerivative(const std::vector<double> &pos) const; + /// Write grad file + void writeGrad(std::string filename) const; + /// Write 1D pmf file on one dimensional occasion + void write1DPMF(std::string filename) const; + /// Write count file + void writeCount(std::string filename) const; + /// Write necessary output file in one function + void writeAll(const std::string &filename) const; + /// Miscellaneous getter functions, useful for merging windows + std::vector<DRRAxis> getDimensions() const { return this->dimensions; } + size_t getNumberOfDimension() const { return ndims; } + size_t getSampleSize() const { return sampleSize; } + std::vector<std::vector<double>> getTable() const { return table; } + /// merge windows + static std::vector<DRRAxis> merge(const std::vector<DRRAxis> &dA, + const std::vector<DRRAxis> &dB); + /// Get suffix + std::string getSuffix() const { return suffix; } + // Destructor + virtual ~DRRForceGrid() {} + +protected: + /// The output suffix appended before .grad(.czar.grad) and + /// .count(.czar.count) + std::string suffix; + /// Number of dimensions + size_t ndims; + /// Store each axes + std::vector<DRRAxis> dimensions; + /// Size of samples + size_t sampleSize; + /// Size of forces + size_t forceSize; + /// The header lines of .grad and .count files + std::string headers; + /// A table stores the middle points of all dimensions. + /// For output in .grad and .count files + std::vector<std::vector<double>> table; + /// Store the average force of each bins + std::vector<double> forces; + /// Store counts of each bins + std::vector<unsigned long int> samples; + /// Only for 1D pmf output + std::vector<double> endpoints; + /// For (possibly) faster indexing + std::vector<size_t> shifts; + /// Output precision + /// The abf_intergrate program has precision requirement. + /// I test 9 and it just works. + static const size_t OUTPUTPRECISION = 9; + + /// Miscellaneous helper functions + static size_t index1D(const DRRAxis &c, double x); + void fillTable(const std::vector<std::vector<double>> &in); + + /// Boost serialization functions + friend class boost::serialization::access; + template <class Archive> + void save(Archive &ar, const unsigned int version) const { + // Don't save all members. + ar << suffix; + ar << dimensions; + ar << forces; + ar << samples; + } + template <class Archive> void load(Archive &ar, const unsigned int version) { + ar >> suffix; + ar >> dimensions; + ar >> forces; + ar >> samples; + // Restore other members. + ndims = dimensions.size(); + sampleSize = samples.size(); + forceSize = forces.size(); + std::stringstream ss; + ss << "# " << ndims << '\n'; + std::vector<std::vector<double>> mp(ndims); + shifts.resize(ndims, 0); + for (size_t i = 0; i < ndims; ++i) { + mp[i] = dimensions[i].getMiddlePoints(); + shifts[i] = std::accumulate( + std::begin(dimensions), std::begin(dimensions) + i, size_t(1), + [](size_t k, const DRRAxis &d) { return k * d.getBins(); }); + ss.precision(std::numeric_limits<double>::max_digits10); + ss << std::fixed << "# " << dimensions[i].min << ' ' + << dimensions[i].getWidth() << ' ' << dimensions[i].nbins; + if (dimensions[i].isPeriodic()) + ss << " 1" << '\n'; + else + ss << " 0" << '\n'; + } + fillTable(mp); + headers = ss.str(); + // For 1D pmf + if (ndims == 1) { + endpoints.resize(dimensions[0].nbins + 1, 0); + double ep = dimensions[0].min; + double stride = dimensions[0].getWidth(); + for (auto it = std::begin(endpoints); it != std::end(endpoints); ++it) { + (*it) = ep; + ep += stride; + } + } + } + template <typename Archive> + void serialize(Archive &ar, const unsigned int version) { + boost::serialization::split_member(ar, *this, version); + } +}; + +class ABF : public DRRForceGrid { +public: + ABF() {} + ABF(const std::vector<DRRAxis> &p_dimensions, const std::string &p_suffix, + bool initializeTable = true) + : DRRForceGrid(p_dimensions, p_suffix, initializeTable) {} + // Store the "instantaneous" spring force of a point and get ABF bias forces. + bool store_getbias(const std::vector<double> &pos, + const std::vector<double> &f, std::vector<double> &fbias, + double fullsamples); + static ABF mergewindow(const ABF &aWA, const ABF &aWB); + ~ABF() {} + +private: + // Boost serialization + friend class boost::serialization::access; + template <typename Archive> + void serialize(Archive &ar, const unsigned int version) { + ar &boost::serialization::base_object<DRRForceGrid>(*this); + } +}; + +class CZAR : public DRRForceGrid { +public: + CZAR() : kbt(0) {} + CZAR(const std::vector<DRRAxis> &p_dimensions, const std::string &p_suffix, + double p_kbt, bool initializeTable = true) + : DRRForceGrid(p_dimensions, p_suffix, initializeTable), kbt(p_kbt) {} + std::vector<double> getGradient(const std::vector<double> &pos, + bool SkipCheck = false) const; + double getkbt() const { return kbt; } + void setkbt(double p_kbt) { kbt = p_kbt; } + static CZAR mergewindow(const CZAR &cWA, const CZAR &cWB); + ~CZAR() {} + +private: + double kbt; + friend class boost::serialization::access; + template <typename Archive> + void serialize(Archive &ar, const unsigned int version) { + ar &boost::serialization::base_object<DRRForceGrid>(*this); + ar &kbt; + } +}; +} +} + +#endif +#endif diff --git a/src/drr/DynamicReferenceRestraining.cpp b/src/drr/DynamicReferenceRestraining.cpp new file mode 100755 index 0000000000000000000000000000000000000000..bc6b887bf62b141635771ee34de0b4e91cb7b190 --- /dev/null +++ b/src/drr/DynamicReferenceRestraining.cpp @@ -0,0 +1,645 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifdef __PLUMED_HAS_BOOST_SERIALIZATION +#include "core/ActionRegister.h" +#include "bias/Bias.h" +#include "core/Atoms.h" +#include "core/PlumedMain.h" +#include "DRR.h" +#include "tools/Random.h" +#include "tools/Tools.h" +#include "colvar_UIestimator.h" + +#include <boost/archive/binary_iarchive.hpp> +#include <boost/archive/binary_oarchive.hpp> +#include <boost/serialization/vector.hpp> +#include <cmath> +#include <fstream> +#include <iomanip> +#include <iostream> +#include <limits> +#include <random> +#include <string> + +using namespace PLMD; +using namespace bias; +using namespace std; + +namespace PLMD { +namespace drr { + +//+PLUMEDOC BIAS DRR +/* +Used to performed extended-system adaptive biasing force(eABF) \cite Lelievre2007 +method on one or more collective variables. This method is also +called dynamic reference restraining(DRR) \cite Zheng2012 . + +For each collective variable \f$\xi_i\f$, a fictitious variable \f$\lambda_i\f$ +is attached through a spring. The fictitious variable \f$\lambda_i\f$ undergoes +overdamped langevin dynamics jusk like \ref EXTENDED_LAGRANGIAN. The ABF +algorithm applies bias force on \f$\lambda_i\f$. The bias force acts on +\f$\lambda_i\f$ is the negative average spring force on \f$\lambda_i\f$, which +enhances the sampling of \f$\lambda_i\f$. + +\f[ +F_{bias}(\lambda_i)=k(\lambda_i-\langle\xi_i\rangle_{\lambda_i}) +\f] + +If spring force constant k is large enough, then \f$\xi_i\f$ synchronizes with +\f$\lambda_i\f$. The naive(ABF) estimator is just the negative +average spring force of \f$\lambda_i\f$. + +The naive(ABF) estimator is biased. There are unbiased estimators such as +CZAR(Corrected z-averaged restraint) \cite Lesage2016 and UI(Umbrella +Integration). +The CZAR estimates the gradients as: + +\f[ +\frac{\partial{A}}{\partial{\xi_i}}\left({\xi}\right)=-\frac{1}{\beta}\frac{\partial\ln\tilde{\rho}\left(\xi\right)}{\partial{\xi_i}}+k\left(\langle\lambda_i\rangle_\xi-\xi_i\right) +\f] + +The UI estimates the gradients as: +\f[ +A'(\xi^*)=\frac{{\sum_\lambda}N\left(\xi^*,\lambda\right)\left[\frac{\xi^*-\langle\xi\rangle_\lambda}{\beta\sigma_\lambda^2}-k(\xi^*-\lambda)\right]}{{\sum_\lambda}N\left(\xi^*,\lambda\right)} +\f] + +The code performing UI(colvar_UIestimator.h) is contributed by Haohao Fu \cite Fu2016 . +It may be slow. I only change the boltzmann constant and output +precision in it. For new version and issues, please see: +https://github.com/fhh2626/colvars + +After running eABF/DRR, the \ref drrtool utility can be used to extract the gradients and counts files from .drrstate. Naive(ABF) estimator's result is in .abf.grad and .abf.count files and CZAR estimator's result is in .czar.grad and .czar.count files. To get PMF, the abf_integrate(https://github.com/Colvars/colvars/tree/master/colvartools) is useful. + +\par Examples + +The following input tells plumed to perform a eABF/DRR simulation on two +torsional angles. +\plumedfile +phi: TORSION ATOMS=5,7,9,15 +psi: TORSION ATOMS=7,9,15,17 + +DRR ... +LABEL=eabf +ARG=phi,psi +FULLSAMPLES=500 +GRID_MIN=-pi,-pi +GRID_MAX=pi,pi +GRID_BIN=180,180 +FRICTION=8.0,8.0 +TAU=0.5,0.5 +OUTPUTFREQ=50000 +HISTORYFREQ=500000 +... DRR + +# monitor the two variables, their fictitious variables and applied forces. +PRINT STRIDE=10 ARG=phi,psi,eabf.phi_fict,eabf.psi_fict,eabf.phi_biasforce,eabf.psi_biasforce FILE=COLVAR +\endplumedfile + +The following input tells plumed to perform a eABF/DRR simulation on the +distance of atom 10 and 92. The distance is restraint by \ref LOWER_WALLS and +\ref UPPER_WALLS. +\plumedfile +dist1: DISTANCE ATOMS=10,92 +eabf_winall: DRR ARG=dist1 FULLSAMPLES=2000 GRID_MIN=1.20 GRID_MAX=3.20 GRID_BIN=200 FRICTION=8.0 TAU=0.5 OUTPUTFREQ=5000 HISTORYFREQ=500000 +uwall: UPPER_WALLS ARG=eabf_winall.dist1_fict AT=3.2 KAPPA=418.4 +lwall: LOWER_WALLS ARG=eabf_winall.dist1_fict AT=1.2 KAPPA=418.4 +PRINT STRIDE=10 ARG=dist1,eabf_winall.dist1_fict,eabf_winall.dist1_biasforce FILE=COLVAR +\endplumedfile + + */ +//+ENDPLUMEDOC + +class DynamicReferenceRestraining : public Bias { +private: + bool firsttime; + bool nobias; + std::vector<double> fictNoPBC; + std::vector<double> real; + std::vector<double> springlength; // spring lengths + std::vector<double> fict; // coordinates of extended variables + std::vector<double> vfict; // velocities of extended variables + std::vector<double> vfict_laststep; + std::vector<double> ffict; // forces exerted on extended variables + std::vector<double> fbias; // bias forces from eABF + std::vector<double> kappa; + std::vector<double> tau; + std::vector<double> friction; + std::vector<double> etemp; + std::vector<double> ffict_measured; + std::vector<Value *> biasforceValue; + std::vector<Value *> fictValue; + std::vector<Value *> vfictValue; + std::vector<double> c1; + std::vector<double> c2; + std::vector<double> mass; + std::vector<DRRAxis> delim; + std::string outputname; + std::string cptname; + std::string outputprefix; + const size_t ndims; + double dt; + double kbt; + double outputfreq; + double historyfreq; + bool isRestart; + bool useUIestimator; + bool textoutput; + ABF ABFGrid; + CZAR CZARestimator; + double fullsamples; + UIestimator::UIestimator eabf_UI; + Random rand; + +public: + explicit DynamicReferenceRestraining(const ActionOptions &); + void calculate(); + void update(); + void save(const std::string &filename, long long int step); + void load(const std::string &filename); + void backupFile(const std::string &filename); + static void registerKeywords(Keywords &keys); + bool is_file_exist(const char *fileName); +}; + +PLUMED_REGISTER_ACTION(DynamicReferenceRestraining, "DRR") + +void DynamicReferenceRestraining::registerKeywords(Keywords &keys) { + Bias::registerKeywords(keys); + keys.use("ARG"); + keys.add("optional", "KAPPA", "specifies that the restraint is harmonic and " + "what the values of the force constants on " + "each of the variables are (default to " + "kbt/(GRID_SPACING)^2)"); + keys.add("compulsory", "TAU", "0.5", "specifies relaxation time on each of " + "variables are, similar to " + "extendedTimeConstant in Colvars"); + keys.add("compulsory", "FRICTION", "8.0", + "add a friction to the variable, similar to extendedLangevinDamping " + "in Colvars"); + keys.add("compulsory", "GRID_MIN", "the lower bounds for the grid (GRID_BIN " + "or GRID_SPACING should be specified)"); + keys.add("compulsory", "GRID_MAX", "the upper bounds for the grid (GRID_BIN " + "or GRID_SPACING should be specified)"); + keys.add("optional", "GRID_BIN", "the number of bins for the grid"); + keys.add("optional", "GRID_SPACING", "the approximate grid spacing (to be " + "used as an alternative or together " + "with GRID_BIN)"); + keys.add("compulsory", "FULLSAMPLES", "500", + "number of samples in a bin prior to application of the ABF"); + keys.add("compulsory", "OUTPUTFREQ", "write results to a file every N steps"); + keys.add("optional", "HISTORYFREQ", "save history to a file every N steps"); + keys.addFlag("UIESTIMATOR", false, + "enable the umbrella integration estimator"); + keys.add("optional", "UIRESTARTPREFIX", + "specify the restart files for umbrella integration"); + keys.add("optional", "OUTPUTPREFIX", + "specify the output prefix (default to the label name)"); + keys.add("optional", "TEMP", "the system temperature - needed when FRICTION " + "is present. If not provided will be taken from " + "MD code (if available)"); + keys.add( + "optional", "EXTTEMP", + "the temperature of extended variables (default to system temperature)"); + keys.add("optional", "DRR_RFILE", + "specifies the restart file (.drrstate file)"); + keys.addFlag("NOBIAS", false, "DO NOT apply bias forces."); + keys.addFlag("TEXTOUTPUT", false, "use text output for grad and count files " + "instead of boost::serialization binary " + "output"); + componentsAreNotOptional(keys); + keys.addOutputComponent( + "_fict", "default", + "one or multiple instances of this quantity will be refereceable " + "elsewhere in the input file. " + "These quantities will named with the arguments of the bias followed by " + "the character string _tilde. It is possible to add forces on these " + "variable."); + keys.addOutputComponent( + "_vfict", "default", + "one or multiple instances of this quantity will be refereceable " + "elsewhere in the input file. " + "These quantities will named with the arguments of the bias followed by " + "the character string _tilde. It is NOT possible to add forces on these " + "variable."); + keys.addOutputComponent( + "_biasforce", "default", + "The bias force from eABF/DRR of the fictitious particle."); +} + +DynamicReferenceRestraining::DynamicReferenceRestraining( + const ActionOptions &ao) + : PLUMED_BIAS_INIT(ao), firsttime(true), nobias(false), + fictNoPBC(getNumberOfArguments(), 0.0), real(getNumberOfArguments(), 0.0), + springlength(getNumberOfArguments(), 0.0), + fict(getNumberOfArguments(), 0.0), vfict(getNumberOfArguments(), 0.0), + vfict_laststep(getNumberOfArguments(), 0.0), + ffict(getNumberOfArguments(), 0.0), fbias(getNumberOfArguments(), 0.0), + kappa(getNumberOfArguments(), 0.0), tau(getNumberOfArguments(), 0.0), + friction(getNumberOfArguments(), 0.0), etemp(getNumberOfArguments(), 0.0), + ffict_measured(getNumberOfArguments(), 0.0), + biasforceValue(getNumberOfArguments(), NULL), + fictValue(getNumberOfArguments(), NULL), + vfictValue(getNumberOfArguments(), NULL), c1(getNumberOfArguments(), 0.0), + c2(getNumberOfArguments(), 0.0), mass(getNumberOfArguments(), 0.0), + delim(getNumberOfArguments()), outputname(""), cptname(""), + outputprefix(""), ndims(getNumberOfArguments()), dt(0.0), kbt(0.0), + outputfreq(0.0), historyfreq(-1.0), isRestart(false), + useUIestimator(false), textoutput(false) +{ + log << "eABF/DRR: You now are using the extended adaptive biasing " + "force(eABF) method." + << '\n'; + log << "eABF/DRR: Some people also refer to it as dynamic reference " + "restraining(DRR) method." + << '\n'; + log << "eABF/DRR: Currently the CZAR and naive(ABF on extended variables) " + "estimator is enabled by default." + << '\n'; + log << "eABF/DRR: For reasons of performance, the umbrella integration " + "estimator is not enabled by default." + << '\n'; + log << "eABF/DRR: This method is originally implemented in " + "colvars(https://github.com/colvars/colvars)." + << '\n'; + log << "eABF/DRR: This code in plumed is heavily modified from " + "ExtendedLagrangian.cpp and doesn't implemented all variants of " + "eABF/DRR." + << '\n'; + log << "eABF/DRR: The thermostat using here maybe different from colvars." + << '\n'; + log << "eABF/DRR: To integrate the gradients file, you can use abf_integrate " + "from https://github.com/colvars/colvars/tree/master/colvartools." + << '\n'; + log << "eABF/DRR: Please reading relevant articles and using this bias " + "method carefully!" + << '\n'; + parseFlag("NOBIAS", nobias); + parseFlag("UIESTIMATOR", useUIestimator); + parseFlag("TEXTOUTPUT", textoutput); + parseVector("TAU", tau); + parseVector("FRICTION", friction); + parseVector("EXTTEMP", etemp); + parseVector("KAPPA", kappa); + double temp = -1.0; + parse("TEMP", temp); + parse("FULLSAMPLES", fullsamples); + parse("OUTPUTFREQ", outputfreq); + parse("HISTORYFREQ", historyfreq); + parse("OUTPUTPREFIX", outputprefix); + std::string restartfilename; + parse("DRR_RFILE", restartfilename); + std::string uirprefix; + parse("UIRESTARTPREFIX", uirprefix); + if (temp >= 0.0) + kbt = plumed.getAtoms().getKBoltzmann() * temp; + else + kbt = plumed.getAtoms().getKbT(); + if (fullsamples < 0.5) { + fullsamples = 500.0; + log << "eABF/DRR: The fullsamples parametre is not set. Set it to " + "500(default)." + << '\n'; + } + if (getRestart()) { + if (restartfilename.length() != 0) { + isRestart = true; + firsttime = false; + load(restartfilename); + } else { + log << "eABF/DRR: You don't specify the file for restarting." << '\n'; + log << "eABF/DRR: So I assume you are splitting windows." << '\n'; + isRestart = false; + firsttime = true; + } + } + + std::vector<string> gmin(getNumberOfArguments()); + parseVector("GRID_MIN", gmin); + if (gmin.size() != getNumberOfArguments()) + error("eABF/DRR: not enough values for GRID_MIN"); + std::vector<string> gmax(getNumberOfArguments()); + parseVector("GRID_MAX", gmax); + if (gmax.size() != getNumberOfArguments()) + error("eABF/DRR: not enough values for GRID_MAX"); + std::vector<unsigned> gbin(getNumberOfArguments()); + std::vector<double> gspacing(getNumberOfArguments()); + parseVector("GRID_BIN", gbin); + parseVector("GRID_SPACING", gspacing); + if (gbin.size() != getNumberOfArguments()) { + log << "eABF/DRR: You didn't specify GRID_BIN. Trying to use GRID_SPACING " + "instead." + << '\n'; + if (gspacing.size() != getNumberOfArguments()) { + error("eABF/DRR: not enough values for GRID_BIN"); + } else { + gbin.resize(getNumberOfArguments()); + for (size_t i = 0; i < getNumberOfArguments(); ++i) { + double l, h; + PLMD::Tools::convert(gmin[i], l); + PLMD::Tools::convert(gmax[i], h); + gbin[i] = std::nearbyint((h - l) / gspacing[i]); + gspacing[i] = (h - l) / gbin[i]; + log << "GRID_BIN[" << i << "] is " << gbin[i] << '\n'; + } + } + } + checkRead(); + + // Set up kbt for extended system + std::vector<double> ekbt(ndims, 0.0); + if (etemp.size() != getNumberOfArguments()) { + etemp.resize(getNumberOfArguments(), 0.0); + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + etemp[i] = kbt / plumed.getAtoms().getKBoltzmann(); + } + } + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + ekbt[i] = etemp[i] * plumed.getAtoms().getKBoltzmann(); + log << "eABF/DRR: The kbt(extended system) of [" << i << "] is " << ekbt[i] + << '\n'; + } + + log << "eABF/DRR: The fullsamples is " << fullsamples << '\n'; + log << "eABF/DRR: The kbt(real system) is " << kbt << '\n'; + // Set up the force grid + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + log << "eABF/DRR: The " << i << " dimensional grid minimum is " << gmin[i] + << '\n'; + log << "eABF/DRR: The " << i << " dimensional grid maximum is " << gmax[i] + << '\n'; + log << "eABF/DRR: The " << i << " dimensional grid has " << gbin[i] + << " bins" << '\n'; + double l, h; + PLMD::Tools::convert(gmin[i], l); + PLMD::Tools::convert(gmax[i], h); + delim[i].set(l, h, gbin[i]); + } + if (kappa.size() != getNumberOfArguments()) { + kappa.resize(getNumberOfArguments(), 0.0); + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + if (kappa[i] <= 0) { + log << "eABF/DRR: The spring force constant kappa[" << i + << "] is not set." << '\n'; + kappa[i] = ekbt[i] / (delim[i].getWidth() * delim[i].getWidth()); + log << "eABF/DRR: set kappa[" << i + << "] according to bin width(ekbt/(binWidth^2))." << '\n'; + } + log << "eABF/DRR: The spring force constant kappa[" << i << "] is " + << std::fixed << std::setprecision(10) << kappa[i] << '\n'; + } + } else { + log << "eABF/DRR: The kappa have been set manually." << '\n'; + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + log << "eABF/DRR: The spring force constant kappa[" << i << "] is " + << std::fixed << std::setprecision(10) << kappa[i] << '\n'; + } + } + + if (tau.size() != getNumberOfArguments()) { + std::fill(std::begin(tau), std::end(tau), 0.5); + } + for (unsigned i = 0; i < tau.size(); i++) { + log << "eABF/DRR: relaxation time tau[" << i << "] is " << tau[i] << '\n'; + } + if (friction.size() != getNumberOfArguments()) { + std::fill(std::begin(friction), std::end(friction), 8.0); + } + for (unsigned i = 0; i < friction.size(); ++i) { + log << "eABF/DRR: Extended variable [" << i + << "] has friction: " << friction[i] << '\n'; + } + dt = getTimeStep(); + for (unsigned i = 0; i < getNumberOfArguments(); ++i) { + mass[i] = kappa[i] * tau[i] * tau[i] / (4 * pi * pi); + log << "eABF/DRR: Fictitious mass[" << i << "] is " << mass[i] << '\n'; + c1[i] = exp(-0.5 * friction[i] * dt); + c2[i] = sqrt(ekbt[i] * (1.0 - c1[i] * c1[i]) / mass[i]); + } + + for (unsigned i = 0; i < getNumberOfArguments(); i++) { + // Position output + std::string comp = getPntrToArgument(i)->getName() + "_fict"; + addComponentWithDerivatives(comp); + if (getPntrToArgument(i)->isPeriodic()) { + std::string a, b; + double c, d; + getPntrToArgument(i)->getDomain(a, b); + getPntrToArgument(i)->getDomain(c, d); + componentIsPeriodic(comp, a, b); + delim[i].setPeriodicity(c, d); + } else + componentIsNotPeriodic(comp); + fictValue[i] = getPntrToComponent(comp); + // Velocity output + comp = getPntrToArgument(i)->getName() + "_vfict"; + addComponent(comp); + componentIsNotPeriodic(comp); + vfictValue[i] = getPntrToComponent(comp); + // Bias force from eABF/DRR output + comp = getPntrToArgument(i)->getName() + "_biasforce"; + addComponent(comp); + componentIsNotPeriodic(comp); + biasforceValue[i] = getPntrToComponent(comp); + } + + if (outputprefix.length() == 0) + outputprefix = getLabel(); + outputname = outputprefix + ".drrstate"; + cptname = outputprefix + ".cpt.drrstate"; + + if (!isRestart) { + // If you want to use on-the-fly text output for CZAR and naive estimator, + // you should turn it to true first! + ABFGrid = ABF(delim, ".abf", textoutput); + CZARestimator = CZAR(delim, ".czar", kbt, textoutput); + log << "eABF/DRR: The init function of the grid is finished." << '\n'; + } + if (useUIestimator) { + log << "eABF/DRR: Using umbrella integration(Zheng and Yang's) estimator " + "of gradients." + << '\n'; + log << "eABF/DRR: The UI estimator code is contributed by Haohao Fu." + << '\n'; + std::vector<double> lowerboundary(delim.size(), 0); + std::vector<double> upperboundary(delim.size(), 0); + std::vector<double> width(delim.size(), 0); + for (size_t i = 0; i < delim.size(); ++i) { + lowerboundary[i] = delim[i].getMin(); + upperboundary[i] = delim[i].getMax(); + width[i] = delim[i].getWidth(); + } + std::vector<std::string> input_filename; + bool uirestart = false; + if (isRestart && (uirprefix.length() != 0)) { + input_filename.push_back(uirprefix); + uirestart = true; + } + if (isRestart && (uirprefix.length() == 0)) + input_filename.push_back(getLabel()); + eabf_UI = UIestimator::UIestimator( + lowerboundary, upperboundary, width, kappa, getLabel(), int(outputfreq), + uirestart, input_filename, kbt / plumed.getAtoms().getKBoltzmann()); + } + log << " Bibliography " << plumed.cite("Lesage, Lelièvre, Stoltz and Hénin, " + "J. Phys. Chem. B 3676, 121 (2017)"); + log << plumed.cite("Darve and Pohorille, J. Chem. Phys. 9169, 115 (2001)"); + if (useUIestimator) { + log << plumed.cite( + "Fu, Shao, Chipot and Cai, J. Chem. Theory Comput. 3506, 12 (2016)"); + log << plumed.cite("Zheng and Yang, J. Chem. Theory Comput. 810, 8 (2012)"); + } + log << "\n"; +} + +void DynamicReferenceRestraining::calculate() { + const unsigned long step_now = getStep(); + if (firsttime) { + for (unsigned i = 0; i < ndims; ++i) { + fict[i] = getArgument(i); + } + firsttime = false; + } + if (step_now != 0) { + if ((step_now % int(outputfreq)) == 0) { + if (!textoutput) { + save(outputname, step_now); + } else { + ABFGrid.writeAll(outputprefix); + CZARestimator.writeAll(outputprefix); + } + } + if (historyfreq > 0 && (step_now % int(historyfreq)) == 0) { + if (!textoutput) { + const std::string filename = + outputprefix + "." + std::to_string(step_now) + ".drrstate"; + save(filename, step_now); + } else { + const std::string filename = + outputprefix + "." + std::to_string(step_now); + ABFGrid.writeAll(filename); + CZARestimator.writeAll(filename); + } + } + if (getCPT()) { + log << "eABF/DRR: The MD engine is writing checkpoint so we also write a " + "DRR state file at step: " + << step_now << ".\n"; + save(cptname, step_now); + } + } + double ene = 0.0; + for (unsigned i = 0; i < ndims; ++i) { + real[i] = getArgument(i); + springlength[i] = difference(i, fict[i], real[i]); + fictNoPBC[i] = real[i] - springlength[i]; + double f = -kappa[i] * springlength[i]; + ffict_measured[i] = -f; + ene += 0.5 * kappa[i] * springlength[i] * springlength[i]; + setOutputForce(i, f); + ffict[i] = -f; + fict[i] = fictValue[i]->bringBackInPbc(fict[i]); + fictValue[i]->set(fict[i]); + vfictValue[i]->set(vfict_laststep[i]); + } + setBias(ene); + ABFGrid.store_getbias(fict, ffict_measured, fbias, fullsamples); + CZARestimator.store(real, ffict_measured); + if (useUIestimator) { + eabf_UI.update_output_filename(outputprefix); + eabf_UI.update(int(step_now), real, fictNoPBC); + } +} + +void DynamicReferenceRestraining::update() { + for (unsigned i = 0; i < ndims; ++i) { + // consider additional forces on the fictitious particle + // (e.g. MetaD stuff) + ffict[i] += fictValue[i]->getForce(); + if (!nobias) { + ffict[i] += fbias[i]; + } + biasforceValue[i]->set(fbias[i]); + // update velocity (half step) + vfict[i] += ffict[i] * 0.5 * dt / mass[i]; + // thermostat (half step) + vfict[i] = c1[i] * vfict[i] + c2[i] * rand.Gaussian(); + // save full step velocity to be dumped at next step + vfict_laststep[i] = vfict[i]; + // thermostat (half step) + vfict[i] = c1[i] * vfict[i] + c2[i] * rand.Gaussian(); + // update velocity (half step) + vfict[i] += ffict[i] * 0.5 * dt / mass[i]; + // update position (full step) + fict[i] += vfict[i] * dt; + // } + } +} + +void DynamicReferenceRestraining::save(const std::string &filename, + long long int step) { + std::ofstream out; + out.open(filename.c_str(), std::ios::binary); + boost::archive::binary_oarchive oa(out); + oa << step << fict << vfict << vfict_laststep << ffict << ABFGrid + << CZARestimator; + out.close(); +} + +void DynamicReferenceRestraining::load(const std::string &filename) { + std::ifstream in; + long long int step; + in.open(filename.c_str(), std::ios::binary); + log << "eABF/DRR: Read restart file: " << filename << '\n'; + boost::archive::binary_iarchive ia(in); + ia >> step >> fict >> vfict >> vfict_laststep >> ffict >> ABFGrid >> + CZARestimator; + in.close(); + log << "eABF/DRR: Restart at step: " << step << '\n'; + backupFile(filename); +} + +void DynamicReferenceRestraining::backupFile(const std::string &filename) { + bool isSuccess = false; + int i = 0; + while (!isSuccess) { + // If libstdc++ support C++17 we can simplify following code. + const std::string bckname = "bck." + filename + "." + std::to_string(i); + if (is_file_exist(bckname.c_str())) { + i++; + } else { + log << "eABF/DRR: Backup original restart file to " << bckname << '\n'; + std::ifstream src(filename.c_str(), std::ios::binary); + std::ofstream dst(bckname.c_str(), std::ios::binary); + dst << src.rdbuf(); + src.close(); + dst.close(); + isSuccess = true; + } + } +} + +// Copy from +// stackoverflow(https://stackoverflow.com/questions/12774207/fastest-way-to-check-if-a-file-exist-using-standard-c-c11-c) +bool DynamicReferenceRestraining::is_file_exist(const char *fileName) { + std::ifstream infile(fileName); + return infile.good(); +} +} +} + +#endif diff --git a/src/drr/Makefile b/src/drr/Makefile new file mode 100644 index 0000000000000000000000000000000000000000..8642089b201ec293a4649e9d365501758ee7bcc7 --- /dev/null +++ b/src/drr/Makefile @@ -0,0 +1,3 @@ +USE=core tools bias cltools config +# generic makefile +include ../maketools/make.module diff --git a/src/drr/README.md b/src/drr/README.md new file mode 100644 index 0000000000000000000000000000000000000000..d2c5a9ed2a0d280242874556a5d167c9d48a0560 --- /dev/null +++ b/src/drr/README.md @@ -0,0 +1,43 @@ +Welcome to the plumed2 wiki! + +This fork of PLUMED has eABF/DRR implementation. + +**Requirements** + +Boost::serialization and C++11 compiler + +**Compiling instruction:** + +After clone this repository, please cd to the plumed2 directory and run: + +1. `autoconf` +2. `./configure --enable-boost_serialization --enable-modules=drr` +3. Modify your Makefile.conf and add `-lboost_serialization` in `DYNAMIC_LIBS=` +4. `make` and `sudo make install` + +**Usage** + +Run `make doc` and the usage is in `user-doc/html/_d_r_r.html` + +**Authors** + +Chen Haochuan (All files in drr module except colvar_UIestimator.h) + +Fu Haohao (colvar_UIestimator.h) + +**COPYRIGHT** + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. + + diff --git a/src/drr/colvar_UIestimator.cpp b/src/drr/colvar_UIestimator.cpp new file mode 100644 index 0000000000000000000000000000000000000000..acfa444ddf5689496215113723f489d510e747f8 --- /dev/null +++ b/src/drr/colvar_UIestimator.cpp @@ -0,0 +1,19 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#include "colvar_UIestimator.h" + diff --git a/src/drr/colvar_UIestimator.h b/src/drr/colvar_UIestimator.h new file mode 100755 index 0000000000000000000000000000000000000000..825bf1f8a490222ca286155963845fa3db303912 --- /dev/null +++ b/src/drr/colvar_UIestimator.h @@ -0,0 +1,855 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifndef __PLUMED_drr_colvar_UIestimator_h +#define __PLUMED_drr_colvar_UIestimator_h +// The original code(https://github.com/fhh2626/colvars/blob/master/src/colvar_UIestimator.h) has been modified by Haochuan Chen. +// Modifications: +// 1. Disable colvars related code. +// 2. Change boltzmann constant. +// 3. Change output precision. +// I(Haochuan Chen) don't know how to maintain this code and how it runs. If you are interested in it, please contact Haohao Fu. + +#include <cmath> +#include <vector> +#include <fstream> +#include <string> +#include <iomanip> +#include <limits> + +#include <typeinfo> + +// only for colvar module! +// when integrated into other code, just remove this line and "...cvm::backup_file(...)" +// #include "colvarmodule.h" + +namespace PLMD { +namespace drr { + +namespace UIestimator +{ +const int Y_SIZE = 21; +const int HALF_Y_SIZE = 10; +const double BOLTZMANN = 0.0083144621; +const int EXTENDED_X_SIZE = HALF_Y_SIZE; + +class n_matrix // spare matrix, stores the distribution matrix of n(x,y) +{ +public: + n_matrix() {} + n_matrix(const std::vector<double> & lowerboundary_p, // lowerboundary of x + const std::vector<double> & upperboundary_p, // upperboundary of + const std::vector<double> & width_p, // width of x + const int y_size) // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + : lowerboundary(lowerboundary_p), upperboundary(upperboundary_p), width(width_p) + { + this->dimension = lowerboundary.size(); + this->y_size = y_size; // keep in mind the internal (spare) matrix is stored in diagonal form + this->y_total_size = int(pow(y_size, dimension) + 0.000001); + + // the range of the matrix is [lowerboundary, upperboundary] + x_total_size = 1; + for (int i = 0; i < dimension; i++) + { + x_size.push_back(int((upperboundary[i] - lowerboundary[i]) / width[i] + 0.000001)); + x_total_size *= x_size[i]; + } + + // initialize the internal matrix + matrix.reserve(x_total_size); + for (int i = 0; i < x_total_size; i++) + { + matrix.push_back(std::vector<int>(y_total_size, 0)); + } + + temp.resize(dimension); + } + + int inline get_value(const std::vector<double> & x, const std::vector<double> & y) + { + //if (matrix[convert_x(x)][convert_y(x, y)]!=0) + //{ + //std::cout<<convert_x(x)<<" "<<convert_y(x, y)<<" "<<x[0]<<" "<<x[1]<<" "<<y[0]<<" "<<y[1]<<" "; + //std::cout<<matrix[convert_x(x)][convert_y(x, y)]<<"sadasfdasaaaaaaaa"<<std::endl; + //} + return matrix[convert_x(x)][convert_y(x, y)]; + } + + void inline set_value(const std::vector<double> & x, const std::vector<double> & y, const int value) + { + matrix[convert_x(x)][convert_y(x,y)] = value; + } + + void inline increase_value(const std::vector<double> & x, const std::vector<double> & y, const int value) + { + matrix[convert_x(x)][convert_y(x,y)] += value; + } + +private: + std::vector<double> lowerboundary; + std::vector<double> upperboundary; + std::vector<double> width; + int dimension; + std::vector<int> x_size; // the size of x in each dimension + int x_total_size; // the size of x of the internal matrix + int y_size; // the size of y in each dimension + int y_total_size; // the size of y of the internal matrix + + std::vector<std::vector<int> > matrix; // the internal matrix + + std::vector<int> temp; // this vector is used in convert_x and convert_y to save computational resource + + int convert_x(const std::vector<double> & x) // convert real x value to its interal index + { + for (int i = 0; i < dimension; i++) + { + temp[i] = int((x[i] - lowerboundary[i]) / width[i] + 0.000001); + } + + int index = 0; + for (int i = 0; i < dimension; i++) + { + if (i + 1 < dimension) + { + int x_temp = 1; + for (int j = i + 1; j < dimension; j++) + x_temp *= x_size[j]; + index += temp[i] * x_temp; + } + else + index += temp[i]; + } + return index; + } + + int convert_y(const std::vector<double> & x, const std::vector<double> & y) // convert real y value to its interal index + { + for (int i = 0; i < dimension; i++) + { + temp[i] = round((round(y[i] / width[i] + 0.000001) - round(x[i] / width[i] + 0.000001)) + (y_size - 1) / 2 + 0.000001); + } + + int index = 0; + for (int i = 0; i < dimension; i++) + { + if (i + 1 < dimension) + index += temp[i] * int(pow(y_size, dimension - i - 1) + 0.000001); + else + index += temp[i]; + } + return index; + } + + double round(double r) + { + return (r > 0.0) ? floor(r + 0.5) : ceil(r - 0.5); + } +}; + +// vector, store the sum_x, sum_x_square, count_y +template <typename T> +class n_vector +{ +public: + n_vector() {} + n_vector(const std::vector<double> & lowerboundary, // lowerboundary of x + const std::vector<double> & upperboundary, // upperboundary of + const std::vector<double> & width_p, // width of x + const int y_size, // size of y, for example, ysize=7, then when x=1, the distribution of y in [-2,4] is considered + const T & default_value) // the default value of T + :width(width_p) + { + this->dimension = lowerboundary.size(); + + x_total_size = 1; + for (int i = 0; i < dimension; i++) + { + this->lowerboundary.push_back(lowerboundary[i] - (y_size - 1) / 2 * width[i] - 0.000001); + this->upperboundary.push_back(upperboundary[i] + (y_size - 1) / 2 * width[i] + 0.000001); + + x_size.push_back(int((this->upperboundary[i] - this->lowerboundary[i]) / this->width[i] + 0.000001)); + x_total_size *= x_size[i]; + } + + // initialize the internal vector + vector.resize(x_total_size, default_value); + + temp.resize(dimension); + } + + const T inline get_value(const std::vector<double> & x) + { + return vector[convert_x(x)]; + } + + void inline set_value(const std::vector<double> & x, const T value) + { + vector[convert_x(x)] = value; + } + + void inline increase_value(const std::vector<double> & x, const T value) + { + vector[convert_x(x)] += value; + } +private: + std::vector<double> lowerboundary; + std::vector<double> upperboundary; + std::vector<double> width; + int dimension; + std::vector<int> x_size; // the size of x in each dimension + int x_total_size; // the size of x of the internal matrix + + std::vector<T> vector; // the internal vector + + std::vector<int> temp; // this vector is used in convert_x and convert_y to save computational resource + + int convert_x(const std::vector<double> & x) // convert real x value to its interal index + { + for (int i = 0; i < dimension; i++) + { + temp[i] = int((x[i] - lowerboundary[i]) / width[i] + 0.000001); + } + + int index = 0; + for (int i = 0; i < dimension; i++) + { + if (i + 1 < dimension) + { + int x_temp = 1; + for (int j = i + 1; j < dimension; j++) + x_temp *= x_size[j]; + index += temp[i] * x_temp; + } + else + index += temp[i]; + } + return index; + } +}; + +class UIestimator // the implemension of UI estimator +{ +public: + UIestimator() {} + + //called when (re)start an eabf simulation + UIestimator(const std::vector<double>& lowerboundary_p, + const std::vector<double>& upperboundary_p, + const std::vector<double>& width_p, + const std::vector<double>& krestr_p, // force constant in eABF + const std::string& output_filename_p, // the prefix of output files + const int output_freq_p, + const bool restart_p, // whether restart from a .count and a .grad file + const std::vector<std::string>& input_filename_p, // the prefixes of input files + const double temperature_p) + : lowerboundary(lowerboundary_p), upperboundary(upperboundary_p), + width(width_p), krestr(krestr_p), + output_filename(output_filename_p), output_freq(output_freq_p), + restart(restart_p), input_filename(input_filename_p), + temperature(temperature_p) + { + + dimension = lowerboundary.size(); + + for (int i = 0; i < dimension; i++) + { + sum_x.push_back(n_vector<double>(lowerboundary, upperboundary, width, Y_SIZE, 0.0)); + sum_x_square.push_back(n_vector<double>(lowerboundary, upperboundary, width, Y_SIZE, 0.0)); + + x_av.push_back(n_vector<double>(lowerboundary, upperboundary, width, Y_SIZE, 0.0)); + sigma_square.push_back(n_vector<double>(lowerboundary, upperboundary, width, Y_SIZE, 0.0)); + } + + count_y = n_vector<int>(lowerboundary, upperboundary, width, Y_SIZE, 0); + distribution_x_y = n_matrix(lowerboundary, upperboundary, width, Y_SIZE); + + grad = n_vector<std::vector<double> >(lowerboundary, upperboundary, width, 1, std::vector<double>(dimension, 0.0)); + count = n_vector<int>(lowerboundary, upperboundary, width, 1, 0); + + written = false; + written_1D = false; + + if (dimension == 1) + { + std::vector<double> upperboundary_temp = upperboundary; + upperboundary_temp[0] = upperboundary[0] + width[0]; + oneD_pmf = n_vector<double>(lowerboundary, upperboundary_temp, width, 1, 0.0); + } + + if (restart == true) + { + input_grad = n_vector<std::vector<double> >(lowerboundary, upperboundary, width, 1, std::vector<double>(dimension, 0.0)); + input_count = n_vector<int>(lowerboundary, upperboundary, width, 1, 0); + + // initialize input_Grad and input_count + std::vector<double> loop_flag(dimension, 0); + for (int i = 0; i < dimension; i++) + { + loop_flag[i] = lowerboundary[i]; + } + while (true) + { + for (int i = 0; i < dimension; i++) + { + input_grad.set_value(loop_flag, std::vector<double>(dimension,0)); + } + input_count.set_value(loop_flag, 0); + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag[i] += width[i]; + if (loop_flag[i] > upperboundary[i] - width[i] + 0.00001) + { + loop_flag[i] = lowerboundary[i]; + i--; + if (i < 0) + goto INITIAL_LOOPEND; + } + else + break; + } + } +INITIAL_LOOPEND: + read_inputfiles(input_filename); + } + } + + ~UIestimator() {} + + // called from MD engine every step + bool update(const int step, std::vector<double> x, std::vector<double> y) + { + + //std::cout<<"weeeee: :"<<std::endl; + //for (int i = 0; i < dimension; i++) + //{ + // std::cout<<x[i]<<" "<<y[i]<<" "; + //} + //std::cout<<std::endl; + + if (step % output_freq == 0) + { + calc_pmf(); + write_files(); + //write_interal_data(); + } + + for (int i = 0; i < dimension; i++) + { + // for dihedral RC, it is possible that x = 179 and y = -179, should correct it + // may have problem, need to fix + if (x[i] > 150 && y[i] < -150) + { + //std::vector<double> x_temp(x); + //x_temp[i] -= 360; + //update(7, x_temp, y); + y[i] += 360; + } + if (x[i] < -150 && y[i] > 150) + { + //std::vector<double> x_temp(x); + //x_temp[i] += 360; + //update(7, x_temp, y); + y[i] -= 360; + } + + if (x[i] < lowerboundary[i] - EXTENDED_X_SIZE * width[i] + 0.00001 || x[i] > upperboundary[i] + EXTENDED_X_SIZE * width[i] - 0.00001 \ + || y[i] - x[i] < -HALF_Y_SIZE * width[i] + 0.00001 || y[i] - x[i] > HALF_Y_SIZE * width[i] - 0.00001 \ + || y[i] - lowerboundary[i] < -HALF_Y_SIZE * width[i] + 0.00001 || y[i] - upperboundary[i] > HALF_Y_SIZE * width[i] - 0.00001) + return false; + } + + //for (int i = 0; i < dimension; i++) + //{ + // std::cout<<x[i]<<" "<<y[i]<<" "; + //} + //std::cout<<std::endl; + + for (int i = 0; i < dimension; i++) + { + sum_x[i].increase_value(y, x[i]); + sum_x_square[i].increase_value(y, x[i] * x[i]); + } + count_y.increase_value(y, 1); + + for (int i = 0; i < dimension; i++) + { + //if (x[i] < lowerboundary[i] + 0.000001 || x[i] > upperboundary[i] - 0.000001) + // adapt colvars precision + if (x[i] < lowerboundary[i] + 0.00001 || x[i] > upperboundary[i] - 0.00001) + return false; + } + distribution_x_y.increase_value(x, y, 1); + + return true; + } + + // update the output_filename + void update_output_filename(const std::string& filename) + { + output_filename = filename; + } + +private: + std::vector<n_vector<double> > sum_x; // the sum of x in each y bin + std::vector<n_vector<double> > sum_x_square; // the sum of x in each y bin + n_vector<int> count_y; // the distribution of y + n_matrix distribution_x_y; // the distribution of <x, y> pair + + int dimension; + + std::vector<double> lowerboundary; + std::vector<double> upperboundary; + std::vector<double> width; + std::vector<double> krestr; + std::string output_filename; + int output_freq; + bool restart; + std::vector<std::string> input_filename; + double temperature; + + n_vector<std::vector<double> > grad; + n_vector<int> count; + + n_vector<double> oneD_pmf; + + n_vector<std::vector<double> > input_grad; + n_vector<int> input_count; + + // used in double integration + std::vector<n_vector<double> > x_av; + std::vector<n_vector<double> > sigma_square; + + bool written; + bool written_1D; + + // calculate gradients from the internal variables + void calc_pmf() + { + int norm; + + std::vector<double> loop_flag(dimension, 0); + for (int i = 0; i < dimension; i++) + { + loop_flag[i] = lowerboundary[i] - HALF_Y_SIZE * width[i]; + } + + while (true) + { + norm = count_y.get_value(loop_flag) > 0 ? count_y.get_value(loop_flag) : 1; + for (int i = 0; i < dimension; i++) + { + x_av[i].set_value(loop_flag, sum_x[i].get_value(loop_flag) / norm); + sigma_square[i].set_value(loop_flag, sum_x_square[i].get_value(loop_flag) / norm - x_av[i].get_value(loop_flag) * x_av[i].get_value(loop_flag)); + } + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag[i] += width[i]; + if (loop_flag[i] > upperboundary[i] + HALF_Y_SIZE * width[i] - width[i] + 0.00001) + { + loop_flag[i] = lowerboundary[i] - HALF_Y_SIZE * width[i]; + i--; + if (i < 0) + goto LOOPEND; + } + else + break; + } + } +LOOPEND: + + // double integration + std::vector<double> av(dimension, 0); + std::vector<double> diff_av(dimension, 0); + + std::vector<double> loop_flag_x(dimension, 0); + std::vector<double> loop_flag_y(dimension, 0); + for (int i = 0; i < dimension; i++) + { + loop_flag_x[i] = lowerboundary[i]; + loop_flag_y[i] = loop_flag_x[i] - HALF_Y_SIZE * width[i]; + } + + while (true) + { + norm = 0; + for (int i = 0; i < dimension; i++) + { + av[i] = 0; + diff_av[i] = 0; + loop_flag_y[i] = loop_flag_x[i] - HALF_Y_SIZE * width[i]; + } + + while (true) + { + //std::cout<<"pppppppppppppppppppppp "<<loop_flag_x[0]<<" "<<loop_flag_x[1]<<" "<<loop_flag_y[0]<<" "<<loop_flag_y[1]<<std::endl; + norm += distribution_x_y.get_value(loop_flag_x, loop_flag_y); + for (int i = 0; i < dimension; i++) + { + if (sigma_square[i].get_value(loop_flag_y) > 0.00001 || sigma_square[i].get_value(loop_flag_y) < -0.00001) + av[i] += distribution_x_y.get_value(loop_flag_x, loop_flag_y) * ( (loop_flag_x[i] + 0.5 * width[i]) - x_av[i].get_value(loop_flag_y)) / sigma_square[i].get_value(loop_flag_y); + + diff_av[i] += distribution_x_y.get_value(loop_flag_x, loop_flag_y) * (loop_flag_x[i] - loop_flag_y[i]); + } + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag_y[i] += width[i]; + if (loop_flag_y[i] > loop_flag_x[i] + HALF_Y_SIZE * width[i] - width[i] + 0.00001) + { + loop_flag_y[i] = loop_flag_x[i] - HALF_Y_SIZE * width[i]; + i--; + if (i < 0) + goto LOOPEND2; + } + else + break; + } + } +LOOPEND2: + + std::vector<double> grad_temp(dimension, 0); + for (int i = 0; i < dimension; i++) + { + diff_av[i] /= (norm > 0 ? norm : 1); + av[i] = BOLTZMANN * temperature * av[i] / (norm > 0 ? norm : 1); + grad_temp[i] = av[i] - krestr[i] * diff_av[i]; + } + grad.set_value(loop_flag_x, grad_temp); + count.set_value(loop_flag_x, norm); + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag_x[i] += width[i]; + if (loop_flag_x[i] > upperboundary[i] - width[i] + 0.00001) + { + loop_flag_x[i] = lowerboundary[i]; + i--; + if (i < 0) + goto LOOPEND3; + } + else + break; + } + } +LOOPEND3:; + } + + + // calculate 1D pmf + void calc_1D_pmf() + { + std::vector<double> last_position(1, 0); + std::vector<double> position(1, 0); + + double min = 0; + double dG = 0; + + oneD_pmf.set_value(lowerboundary, 0); + last_position = lowerboundary; + for (double i = lowerboundary[0] + width[0]; i < upperboundary[0] + 0.000001; i += width[0]) + { + position[0] = i + 0.000001; + if (restart == false || input_count.get_value(last_position) == 0) + { + dG = oneD_pmf.get_value(last_position) + grad.get_value(last_position)[0] * width[0]; + } + else + { + dG = oneD_pmf.get_value(last_position) + ((grad.get_value(last_position)[0] * count.get_value(last_position) + input_grad.get_value(last_position)[0] * input_count.get_value(last_position)) / (count.get_value(last_position) + input_count.get_value(last_position))) * width[0]; + } + if (dG < min) + min = dG; + oneD_pmf.set_value(position, dG); + last_position[0] = i + 0.000001; + } + + for (double i = lowerboundary[0]; i < upperboundary[0] + 0.000001; i += width[0]) + { + position[0] = i + 0.000001; + oneD_pmf.set_value(position, oneD_pmf.get_value(position) - min); + } + } + + // write 1D pmf + void write_1D_pmf() + { + std::string pmf_filename = output_filename + ".UI.pmf"; + + // only for colvars module! +// if (written_1D) cvm::backup_file(pmf_filename.c_str()); + + std::ofstream ofile_pmf(pmf_filename.c_str()); + + std::vector<double> position(1, 0); + for (double i = lowerboundary[0]; i < upperboundary[0] + 0.000001; i += width[0]) + { + ofile_pmf << i << " "; + position[0] = i + 0.000001; + ofile_pmf << oneD_pmf.get_value(position) << std::endl; + } + ofile_pmf.close(); + + written_1D = true; + } + + // write heads of the output files + void writehead(std::ofstream& os) const + { + os << "# " << dimension << std::endl; + for (int i = 0; i < dimension; i++) + { + os.precision(std::numeric_limits<double>::max_digits10); + os << "# " << std::fixed << lowerboundary[i] << " " << width[i] << " " << int((upperboundary[i] - lowerboundary[i]) / width[i] + 0.000001) << " " << 0 << std::endl; + } + os << std::endl; + } + + // write interal data, used for testing + void write_interal_data() + { + std::string internal_filaname = output_filename + ".UI.internal"; + + std::ofstream ofile_internal(internal_filaname.c_str()); + + std::vector<double> loop_flag(dimension, 0); + for (int i = 0; i < dimension; i++) + { + loop_flag[i] = lowerboundary[i]; + } + while (true) + { + for (int i = 0; i < dimension; i++) + { + ofile_internal << loop_flag[i] + 0.5 * width[i] << " "; + } + + for (int i = 0; i < dimension; i++) + { + ofile_internal << grad.get_value(loop_flag)[i] << " "; + } + + std::vector<double> ii(dimension,0); + for (double i = loop_flag[0] - 10; i < loop_flag[0] + 10 + 0.00001; i+= width[0]) + { + for (double j = loop_flag[1] - 10; j< loop_flag[1] + 10 +0.00001; j+=width[1]) + { + ii[0] = i; + ii[1] = j; + ofile_internal << i <<" "<<j<<" "<< distribution_x_y.get_value(loop_flag,ii)<< " "; + } + } + ofile_internal << std::endl; + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag[i] += width[i]; + if (loop_flag[i] > upperboundary[i] - width[i] + 0.00001) + { + loop_flag[i] = lowerboundary[i]; + i--; + if (i < 0) + goto LOOPEND5; + } + else + break; + } + } +LOOPEND5: + ofile_internal.close(); + } + + // write output files + void write_files() + { + std::string grad_filename = output_filename + ".UI.grad"; + std::string hist_filename = output_filename + ".UI.hist.grad"; + std::string count_filename = output_filename + ".UI.count"; + + // only for colvars module! +// if (written) cvm::backup_file(grad_filename.c_str()); + //if (written) cvm::backup_file(hist_filename.c_str()); +// if (written) cvm::backup_file(count_filename.c_str()); + + std::ofstream ofile(grad_filename.c_str()); + std::ofstream ofile_hist(hist_filename.c_str(), std::ios::app); + std::ofstream ofile_count(count_filename.c_str()); + + writehead(ofile); + writehead(ofile_hist); + writehead(ofile_count); + + if (dimension == 1) + { + calc_1D_pmf(); + write_1D_pmf(); + } + + std::vector<double> loop_flag(dimension, 0); + for (int i = 0; i < dimension; i++) + { + loop_flag[i] = lowerboundary[i]; + } + while (true) + { + for (int i = 0; i < dimension; i++) + { + ofile << std::fixed << std::setprecision(9) << loop_flag[i] + 0.5 * width[i] << " "; + ofile_hist << std::fixed << std::setprecision(9) << loop_flag[i] + 0.5 * width[i] << " "; + ofile_count << std::fixed << std::setprecision(9) << loop_flag[i] + 0.5 * width[i] << " "; + } + + if (restart == false) + { + for (int i = 0; i < dimension; i++) + { + ofile << std::fixed << std::setprecision(9) << grad.get_value(loop_flag)[i] << " "; + ofile_hist << std::fixed << std::setprecision(9) << grad.get_value(loop_flag)[i] << " "; + } + ofile << std::endl; + ofile_hist << std::endl; + ofile_count << count.get_value(loop_flag) << " " <<std::endl; + } + else + { + double final_grad = 0; + for (int i = 0; i < dimension; i++) + { + int total_count_temp = (count.get_value(loop_flag) + input_count.get_value(loop_flag)); + if (input_count.get_value(loop_flag) == 0) + final_grad = grad.get_value(loop_flag)[i]; + else + final_grad = ((grad.get_value(loop_flag)[i] * count.get_value(loop_flag) + input_grad.get_value(loop_flag)[i] * input_count.get_value(loop_flag)) / total_count_temp); + ofile << std::fixed << std::setprecision(9) << final_grad << " "; + ofile_hist << std::fixed << std::setprecision(9) << final_grad << " "; + } + ofile << std::endl; + ofile_hist << std::endl; + ofile_count << (count.get_value(loop_flag) + input_count.get_value(loop_flag)) << " " <<std::endl; + } + + // iterate over any dimensions + int i = dimension - 1; + while (true) + { + loop_flag[i] += width[i]; + if (loop_flag[i] > upperboundary[i] - width[i] + 0.00001) + { + loop_flag[i] = lowerboundary[i]; + i--; + ofile << std::endl; + ofile_hist << std::endl; + ofile_count << std::endl; + if (i < 0) + goto LOOPEND4; + } + else + break; + } + } +LOOPEND4: + ofile.close(); + ofile_count.close(); + ofile_hist.close(); + + written = true; + } + + // read input files + void read_inputfiles(const std::vector<std::string>& input_filename) + { + char sharp; + double nothing; + int dimension_temp; + + std::vector<double> loop_bin_size(dimension, 0); + std::vector<double> position_temp(dimension, 0); + std::vector<double> grad_temp(dimension, 0); + int count_temp = 0; + for (int i = 0; i < input_filename.size(); i++) + { + int size = 1, size_temp = 0; + + std::string count_filename = input_filename[i] + ".UI.count"; + std::string grad_filename = input_filename[i] + ".UI.grad"; + + std::ifstream count_file(count_filename.c_str(), std::ios::in); + std::ifstream grad_file(grad_filename.c_str(), std::ios::in); + + count_file >> sharp >> dimension_temp; + grad_file >> sharp >> dimension_temp; + + for (int j = 0; j < dimension; j++) + { + count_file >> sharp >> nothing >> nothing >> size_temp >> nothing; + grad_file >> sharp >> nothing >> nothing >> nothing >> nothing; + size *= size_temp; + } + + for (int j = 0; j < size; j++) + { + do + { + for (int k = 0; k < dimension; k++) + { + count_file >> position_temp[k]; + grad_file >> nothing; + } + + for (int l = 0; l < dimension; l++) + { + grad_file >> grad_temp[l]; + } + count_file >> count_temp; + } + while (position_temp[i] < lowerboundary[i] - 0.000001 || position_temp[i] > upperboundary[i] + 0.000001); + + if (count_temp == 0) + { + continue; + } + + for (int m = 0; m < dimension; m++) + { + grad_temp[m] = (grad_temp[m] * count_temp + input_grad.get_value(position_temp)[m] * input_count.get_value(position_temp)) / (count_temp + input_count.get_value(position_temp)); + } + input_grad.set_value(position_temp, grad_temp); + input_count.increase_value(position_temp, count_temp); + } + + count_file.close(); + grad_file.close(); + } + } +}; +} + +} +} + +#endif diff --git a/src/drr/drrtool.cpp b/src/drr/drrtool.cpp new file mode 100644 index 0000000000000000000000000000000000000000..41f23fff731d5de37db372c919a312a1a946442b --- /dev/null +++ b/src/drr/drrtool.cpp @@ -0,0 +1,193 @@ +/* +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ + Copyright (c) 2017 of Haochuan Chen (excluding colvar_UIestimator.h) + Copyright (c) 2017 of Haohao Fu (colvar_UIestimator.h) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as published + by the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Lesser General Public License for more details. + + You should have received a copy of the GNU Lesser General Public License + along with this program. If not, see <http://www.gnu.org/licenses/>. ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ */ +#ifdef __PLUMED_HAS_BOOST_SERIALIZATION +#include "cltools/CLTool.h" +#include "cltools/CLToolRegister.h" +#include "config/Config.h" +#include "core/ActionRegister.h" +#include "DRR.h" +#include "tools/Tools.h" +#include "tools/Units.h" +#include <boost/archive/binary_iarchive.hpp> +#include <boost/archive/binary_oarchive.hpp> +#include <boost/serialization/vector.hpp> +#include <cstdlib> +#include <fstream> +#include <iostream> +#include <string> + +using namespace PLMD; +using namespace cltools; + +namespace PLMD { +namespace drr { + +//+PLUMEDOC TOOLS drr_tool +/* + - Extract .grad and .count files from the binary output .drrstate + - Merge windows + +\par Examples + +The following command will extract .grad and .count files. +\verbatim +plumed drrtool --extract eabf.drrstate +\endverbatim + +The following command will merge windows of two .drrstate file, and output the +.grad and .count files. +\verbatim +plumed drrtool --merge win1.drrstate,win2.drrstate +\endverbatim + +After getting the .grad and .count file, you can do numerical integration by +using abf_integrate tool from +https://github.com/Colvars/colvars/tree/master/colvartools +\verbatim +abf_integrate eabf.czar.grad +\endverbatim + +*/ +//+ENDPLUMEDOC + +class drrtool : public CLTool { +public: + static void registerKeywords(Keywords &keys); + explicit drrtool(const CLToolOptions &co); + int main(FILE *in, FILE *out, Communicator &pc); + void extractdrr(const std::vector<std::string> &filename); + void mergewindows(const std::vector<std::string> &filename); + std::string description() const { return "Extract or merge the drrstate files."; } + +private: + bool verbosity; + const std::string suffix{".drrstate"}; +}; + +PLUMED_REGISTER_CLTOOL(drrtool, "drr_tool") + +void drrtool::registerKeywords(Keywords &keys) { + CLTool::registerKeywords(keys); + keys.add("optional", "--extract", "Extract drrstate file(s)"); + keys.add("optional", "--merge", "Merge eABF windows"); + keys.addFlag("-v", false, "Verbose output"); +} + +drrtool::drrtool(const CLToolOptions &co) : CLTool(co) { + inputdata = commandline; + verbosity = false; +} + +int drrtool::main(FILE *in, FILE *out, Communicator &pc) { + parseFlag("-v", verbosity); + std::vector<std::string> stateFilesToExtract; + bool doextract = parseVector("--extract", stateFilesToExtract); + if (doextract) { + extractdrr(stateFilesToExtract); + } + std::vector<std::string> stateFilesToMerge; + bool domerge = parseVector("--merge", stateFilesToMerge); + if (domerge) { + mergewindows(stateFilesToMerge); + } + return 0; +} + +void drrtool::extractdrr(const std::vector<std::string> &filename) { + #pragma omp parallel for + for (size_t j = 0; j < filename.size(); ++j) { + std::ifstream in; + in.open(filename[j]); + boost::archive::binary_iarchive ia(in); + long long int step; + std::vector<double> fict; + std::vector<double> vfict; + std::vector<double> vfict_laststep; + std::vector<double> ffict; + ABF abfgrid; + CZAR czarestimator; + ia >> step >> fict >> vfict >> vfict_laststep >> ffict >> abfgrid >> + czarestimator; + in.close(); + if (verbosity) { + std::cout << "Dumping information of extended variables..." << '\n'; + std::cout << "Step: " << step << '\n'; + for (size_t i = 0; i < fict.size(); ++i) { + std::cout << "Dimension[" << i + 1 << "]:\n" + << " Coordinate: " << fict[i] << '\n' + << " Velocity: " << vfict[i] << '\n' + << " Velocity(laststep): " << vfict_laststep[i] << '\n' + << " Force: " << ffict[i] << '\n'; + } + std::cout << "Dumping counts and gradients from grids..." << '\n'; + } + std::string outputname(filename[j]); + outputname = outputname.substr(0, outputname.length() - suffix.length()); + if (verbosity) + std::cout << "Writing ABF(naive) estimator files..." << '\n'; + abfgrid.writeAll(outputname); + if (verbosity) + std::cout << "Writing CZAR estimator files..." << '\n'; + czarestimator.writeAll(outputname); + } +} + +void drrtool::mergewindows(const std::vector<std::string> &filename) { + if (filename.size() < 2) { + std::cerr << "ERROR! You need at least two .drrstate file to merge windows!" << std::endl; + std::abort(); + } + // Read grid into abfs and czars; + std::vector<ABF> abfs; + std::vector<CZAR> czars; + for (auto it_fn = filename.begin(); it_fn != filename.end(); ++it_fn) { + std::ifstream in; + in.open((*it_fn)); + boost::archive::binary_iarchive ia(in); + long long int step; + std::vector<double> fict; + std::vector<double> vfict; + std::vector<double> vfict_laststep; + std::vector<double> ffict; + ABF abfgrid; + CZAR czarestimator; + ia >> step >> fict >> vfict >> vfict_laststep >> ffict >> abfgrid >> + czarestimator; + abfs.push_back(abfgrid); + czars.push_back(czarestimator); + in.close(); + } + CZAR cmerged = CZAR::mergewindow(czars[0], czars[1]); + ABF amerged = ABF::mergewindow(abfs[0], abfs[1]); + for (size_t i = 2; i < czars.size(); ++i) { + cmerged = CZAR::mergewindow(cmerged, czars[i]); + amerged = ABF::mergewindow(amerged, abfs[i]); + } + // Generate new file name for merged grad and count + std::vector<std::string> tmp_name = filename; + std::transform(std::begin(tmp_name), std::end(tmp_name), std::begin(tmp_name), [&](std::string s) {return s.substr(0, s.find(suffix));}); + std::string mergename = std::accumulate(std::begin(tmp_name), std::end(tmp_name), std::string(""), [](std::string a, std::string b) {return a + b + "+";}); + mergename = mergename.substr(0, mergename.size() - 1); + cmerged.writeAll(mergename); + amerged.writeAll(mergename); +} + +} // End of namespace +} + +#endif diff --git a/src/drr/module.type b/src/drr/module.type new file mode 100644 index 0000000000000000000000000000000000000000..de832730330473a1870bd368868640da677460ae --- /dev/null +++ b/src/drr/module.type @@ -0,0 +1 @@ +default-off diff --git a/user-doc/bibliography.bib b/user-doc/bibliography.bib index 165ff5095bfa5cf02eaa8b7cbb5ac8fa2930677d..eda2d69c592f61cbb48ebe227a655e426b5d2cfc 100644 --- a/user-doc/bibliography.bib +++ b/user-doc/bibliography.bib @@ -1,3 +1,4 @@ +% Encoding: UTF-8 %% This BibTeX bibliography file was created using BibDesk. %% http://bibdesk.sourceforge.net/ @@ -2551,3 +2552,57 @@ pages = {doi: 10.1101/113951}, doi = {10.1021/acs.jctc.6b00944}, publisher = {American Chemical Society ({ACS})}, } + +@Article{Lelievre2007, + author = {Tony Leli{\`{e}}vre and Mathias Rousset and Gabriel Stoltz}, + title = {Computation of free energy profiles with parallel adaptive dynamics}, + journal = {The Journal of Chemical Physics}, + year = {2007}, + volume = {126}, + number = {13}, + pages = {134111}, + month = {apr}, + doi = {10.1063/1.2711185}, + publisher = {{AIP} Publishing}, +} + +@Article{Zheng2012, + author = {Lianqing Zheng and Wei Yang}, + title = {Practically Efficient and Robust Free Energy Calculations: Double-Integration Orthogonal Space Tempering}, + journal = {Journal of Chemical Theory and Computation}, + year = {2012}, + volume = {8}, + number = {3}, + pages = {810--823}, + month = {mar}, + doi = {10.1021/ct200726v}, + publisher = {American Chemical Society ({ACS})}, +} + +@Article{Fu2016, + author = {Haohao Fu and Xueguang Shao and Christophe Chipot and Wensheng Cai}, + title = {Extended Adaptive Biasing Force Algorithm. An On-the-Fly Implementation for Accurate Free-Energy Calculations}, + journal = {Journal of Chemical Theory and Computation}, + year = {2016}, + volume = {12}, + number = {8}, + pages = {3506--3513}, + month = {aug}, + doi = {10.1021/acs.jctc.6b00447}, + publisher = {American Chemical Society ({ACS})}, +} + +@Article{Lesage2016, + author = {Adrien Lesage and Tony Leli{\`{e}}vre and Gabriel Stoltz and J{\'{e}}r{\^{o}}me H{\'{e}}nin}, + title = {Smoothed Biasing Forces Yield Unbiased Free Energies with the Extended-System Adaptive Biasing Force Method}, + journal = {The Journal of Physical Chemistry B}, + year = {2016}, + volume = {121}, + number = {15}, + pages = {3676--3685}, + month = {dec}, + doi = {10.1021/acs.jpcb.6b10055}, + publisher = {American Chemical Society ({ACS})}, +} + +@Comment{jabref-meta: databaseType:bibtex;}