Merge branch 'master' of https://github.com/danijoo/adaptiveumbrella
This commit is contained in:
@@ -3,4 +3,4 @@ from .runner import UmbrellaRunner
|
|||||||
from .wham2d import WHAM2DRunner
|
from .wham2d import WHAM2DRunner
|
||||||
|
|
||||||
__all__ = ['AdaptiveUmbrella']
|
__all__ = ['AdaptiveUmbrella']
|
||||||
__version__ = "0.3.5"
|
__version__ = "0.3.11"
|
||||||
|
|||||||
@@ -111,6 +111,12 @@ class UmbrellaRunner():
|
|||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
def is_valid_frame(self, frame):
|
||||||
|
""" Allows to filter out frames that should not be sampled depending
|
||||||
|
on some condition """
|
||||||
|
# do not allow frames that are not inside pmf boundaries
|
||||||
|
return self._is_in_pmf(frame)
|
||||||
|
|
||||||
def _get_new_frames(self, pmf, frames, root_frames):
|
def _get_new_frames(self, pmf, frames, root_frames):
|
||||||
""" returns a dict of all frames surrounding the root_frames
|
""" returns a dict of all frames surrounding the root_frames
|
||||||
that have not an assigned energy yet, as well as their corresponding root
|
that have not an assigned energy yet, as well as their corresponding root
|
||||||
@@ -121,8 +127,8 @@ class UmbrellaRunner():
|
|||||||
for frame in root_frames:
|
for frame in root_frames:
|
||||||
neighbors = self._generate_neighbor_list(frame)
|
neighbors = self._generate_neighbor_list(frame)
|
||||||
|
|
||||||
# remove neighbors that are not inside the pmf
|
# remove neighbors if they are not valid (i.e not part of the pmf)
|
||||||
neighbors = [n for n in neighbors if self._is_in_pmf(n)]
|
neighbors = [n for n in neighbors if self.is_valid_frame(n)]
|
||||||
|
|
||||||
# for each neighbor, check if its already in the list and compare root frame energy
|
# for each neighbor, check if its already in the list and compare root frame energy
|
||||||
for n in neighbors:
|
for n in neighbors:
|
||||||
|
|||||||
@@ -21,6 +21,7 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
|
|
||||||
def __init__(self):
|
def __init__(self):
|
||||||
UmbrellaRunner.__init__(self)
|
UmbrellaRunner.__init__(self)
|
||||||
|
self.verbose = False
|
||||||
self.WHAM_EXEC = 'wham-2d'
|
self.WHAM_EXEC = 'wham-2d'
|
||||||
self.tmp_folder = "tmp/WHAM"
|
self.tmp_folder = "tmp/WHAM"
|
||||||
self.simulation_folder = "tmp/simulations"
|
self.simulation_folder = "tmp/simulations"
|
||||||
@@ -34,7 +35,7 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
with open(path, 'w') as out:
|
with open(path, 'w') as out:
|
||||||
for file in os.listdir(self.simulation_folder):
|
for file in os.listdir(self.simulation_folder):
|
||||||
filepath = os.path.join(self.simulation_folder, file, "COLVAR")
|
filepath = os.path.join(self.simulation_folder, file, "COLVAR")
|
||||||
if not os.path.exists(filepath):
|
if not os.path.exists(filepath) and self.verbose:
|
||||||
print("Not found: {}".format(filepath))
|
print("Not found: {}".format(filepath))
|
||||||
continue
|
continue
|
||||||
prefix, x, y = file.split("_")
|
prefix, x, y = file.split("_")
|
||||||
@@ -59,9 +60,9 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
self._get_lambdas_for_index((nonzero[0].min(), nonzero[1].min())),
|
self._get_lambdas_for_index((nonzero[0].min(), nonzero[1].min())),
|
||||||
self._get_lambdas_for_index((nonzero[0].max(), nonzero[1].max()))
|
self._get_lambdas_for_index((nonzero[0].max(), nonzero[1].max()))
|
||||||
])
|
])
|
||||||
|
|
||||||
borders = borders.flatten()
|
borders = borders.flatten()
|
||||||
# increase borders by 1 lambda step from minimal dimensions
|
# increase borders by 1 lambda step from minimal dimensions
|
||||||
borders[0] -= self.cvs[0][2]
|
borders[0] -= self.cvs[0][2]
|
||||||
borders[1] -= self.cvs[1][2]
|
borders[1] -= self.cvs[1][2]
|
||||||
borders[2] += self.cvs[0][2]
|
borders[2] += self.cvs[0][2]
|
||||||
@@ -73,7 +74,7 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
|
|
||||||
|
|
||||||
borders = self.get_wham_borders()
|
borders = self.get_wham_borders()
|
||||||
cmd = "{exec} Px={px} {min_x} {max_x} {frames_x} Py={py} {min_y} {max_y} {frames_y} {tol} {temperature} 0 {metafile} {outfile} 0".format(
|
cmd = "{exec} Px={px} {min_x} {max_x} {frames_x} Py={py} {min_y} {max_y} {frames_y} {tol} {temperature} 0 {metafile} {outfile} {mask}".format(
|
||||||
exec=self.WHAM_EXEC,
|
exec=self.WHAM_EXEC,
|
||||||
px=self.whamconfig['Px'],
|
px=self.whamconfig['Px'],
|
||||||
min_x=borders[0],
|
min_x=borders[0],
|
||||||
@@ -84,12 +85,17 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
max_y=borders[3],
|
max_y=borders[3],
|
||||||
frames_y=self.whamconfig['num_bins_y'],
|
frames_y=self.whamconfig['num_bins_y'],
|
||||||
tol=self.whamconfig['tolerance'],
|
tol=self.whamconfig['tolerance'],
|
||||||
temperature=self.whamconfig['temperature']
|
temperature=self.whamconfig['temperature'],
|
||||||
metafile=metafile_path,
|
metafile=metafile_path,
|
||||||
outfile=output_path
|
outfile=output_path,
|
||||||
|
mask = self.whamconfig['mask']
|
||||||
)
|
)
|
||||||
print(cmd)
|
if self.verbose:
|
||||||
err_code = subprocess.call(cmd, shell=True)
|
print(cmd)
|
||||||
|
err_code = subprocess.call(cmd, shell=True)
|
||||||
|
else:
|
||||||
|
FNULL = open(os.devnull, 'w')
|
||||||
|
err_code = subprocess.call(cmd, shell=True, stdout=FNULL)
|
||||||
if err_code != 0:
|
if err_code != 0:
|
||||||
print("wham exited with error code {}".format(err_code))
|
print("wham exited with error code {}".format(err_code))
|
||||||
exit(1)
|
exit(1)
|
||||||
@@ -118,7 +124,6 @@ class WHAM2DRunner(UmbrellaRunner):
|
|||||||
|
|
||||||
|
|
||||||
def calculate_new_pmf(self):
|
def calculate_new_pmf(self):
|
||||||
print("Running wham-2d")
|
|
||||||
metafile_path = self.create_metadata_file()
|
metafile_path = self.create_metadata_file()
|
||||||
wham_pmf_file = self.get_wham_output_file()
|
wham_pmf_file = self.get_wham_output_file()
|
||||||
self.run_wham2d(metafile_path, wham_pmf_file)
|
self.run_wham2d(metafile_path, wham_pmf_file)
|
||||||
|
|||||||
Reference in New Issue
Block a user