diff --git a/VOID/dockers/base.py b/VOID/dockers/base.py index 83a32df..8be2682 100644 --- a/VOID/dockers/base.py +++ b/VOID/dockers/base.py @@ -50,18 +50,20 @@ def new_guest(self, newcoords=None): if newcoords is None: return self.guest.copy() - return Molecule(species=self.guest.species, coords=newcoords,) + return Molecule( + species=self.guest.species, + coords=newcoords, + ) def create_new_complex(self, host_coords, guest_coords): return Complex( self.new_host(newcoords=host_coords), self.new_guest(newcoords=guest_coords), - add_transform=False + add_transform=False, ) def dock(self, attempts: int) -> List[Complex]: - """Docks the guest into the host. - """ + """Docks the guest into the host.""" complexes = [] for point in self.sampler.get_points(self.host): complexes += self.dock_at_point(point, attempts) diff --git a/VOID/dockers/success.py b/VOID/dockers/success.py index 9cbffcd..a4eff7b 100644 --- a/VOID/dockers/success.py +++ b/VOID/dockers/success.py @@ -1,5 +1,8 @@ import numpy as np +from pymatgen.core.sites import Site +from pymatgen.core import Lattice, Structure + from VOID.structure import Complex from VOID.dockers.serial import SerialDocker from VOID.dockers.mcdocker import MonteCarloDocker @@ -16,10 +19,7 @@ def dock_at_point(self, point, attempts): hcoords = self.translate_host(point) for trial in range(attempts): - cpx = self.create_new_complex( - host_coords=hcoords, - guest_coords=self.rotate_guest() - ) + cpx = self.create_new_complex(host_coords=hcoords, guest_coords=self.rotate_guest()) if self.fitness(cpx) >= 0: print(f"{trial + 1} attempts to success") @@ -40,6 +40,56 @@ def dock(self, attempts): if self.fitness(cpx) >= 0: print(f"{trial + 1} attempts to success") + cpx = self.rescale(cpx) return [cpx] return [] + + def rescale(self, cpx): + """Rescale the complex to the 0-1 range so results can be visualized in direct and xyz format. + + Args: + complex (Complex): The host-guest complex object containing the host and guest molecules. + + Returns: + Complex: The rescaled host-guest complex object. + """ + complex = cpx.copy() + lattice = complex.pose.lattice + frac_coords = [] + species_list = [] + site_labels = [] + + for site in complex.pose: + site_labels.append(site.label) + species_list.append(site.species) + coords = site.frac_coords if site.label == "host" else np.mod(site.frac_coords, 1.0) + frac_coords.append(coords) + + site_properties = {"label": site_labels} + + updated_structure = Structure(lattice, species_list, frac_coords, site_properties=site_properties) + + num_host_atoms = len(complex.host) + + species = updated_structure.species + cart_coords = updated_structure.cart_coords + + # Update the host and guest with the rescaled 0-1 species and coordinates + complex.host = Structure( + lattice=complex.host.lattice, + species=species[:num_host_atoms], + coords=cart_coords[:num_host_atoms], + coords_are_cartesian=True, + site_properties=complex.host.site_properties, + ) + + complex.guest = Structure( + lattice=complex.host.lattice, + species=species[num_host_atoms:], + coords=cart_coords[num_host_atoms:], + coords_are_cartesian=True, + site_properties=complex.guest.site_properties, + ) + + return complex diff --git a/VOID/fitness/__init__.py b/VOID/fitness/__init__.py index 29d18cf..b9f2645 100644 --- a/VOID/fitness/__init__.py +++ b/VOID/fitness/__init__.py @@ -1,10 +1,20 @@ from .base import Fitness -from .threshold import MinDistanceFitness, MeanDistanceFitness, SumInvDistanceFitness -from .target import MinDistanceGaussianTarget, MeanDistanceGaussianTarget, MaxDistanceGaussianTarget +from .threshold import ( + MinDistanceFitness, + MeanDistanceFitness, + SumInvDistanceFitness, + MinDistanceCationAnionFitness, +) +from .target import ( + MinDistanceGaussianTarget, + MeanDistanceGaussianTarget, + MaxDistanceGaussianTarget, +) from .union import MultipleFitness __all__ = [ MinDistanceFitness, + MinDistanceCationAnionFitness, MeanDistanceFitness, SumInvDistanceFitness, MinDistanceGaussianTarget, diff --git a/VOID/fitness/threshold.py b/VOID/fitness/threshold.py index 5d85f23..815acbd 100644 --- a/VOID/fitness/threshold.py +++ b/VOID/fitness/threshold.py @@ -1,16 +1,24 @@ import numpy as np - +import argparse from .base import Fitness - THRESHOLD = 1.5 +THRESHOLD_CATAN = 3.5 DEFAULT_STRUCTURE = "complex" STRUCTURE_CHOICES = ["complex", "guest", "host"] DEFAULT_STEP = False +CATION_INDEXES = None +ACID_SITES = None class ThresholdFitness(Fitness): - def __init__(self, threshold=THRESHOLD, structure="complex", step=False, **kwargs): + def __init__( + self, + threshold=THRESHOLD, + structure="complex", + step=False, + **kwargs, + ): """Fitness is positive if the minimum distance is above the given threshold. @@ -22,11 +30,10 @@ def __init__(self, threshold=THRESHOLD, structure="complex", step=False, **kwarg super().__init__() self.threshold = threshold self.step = step + self.extra_args = kwargs if structure not in STRUCTURE_CHOICES: - raise ValueError( - "structure has to be one of: {}".format(", ".join(STRUCTURE_CHOICES)) - ) + raise ValueError("structure has to be one of: {}".format(", ".join(STRUCTURE_CHOICES))) self.structure = structure @staticmethod @@ -60,6 +67,25 @@ def get_distances(self, complex): else: raise ValueError("structure type not supported") + def get_cation_anion_distances(self, acid_sites, cation_indexes, distance_matrices): + """Get the distances between the cation and the anion sites. + + Args: + acid_sites (list): List of lists of anion indexes. + cation_index (int): Index of the cation. + distance_matrices (list): List of distance matrices. + + Returns: + + list: List of lists of distances between the cation and the anion sites. + """ + + distances_cation_anion = [] + for cation in cation_indexes: + distances = [distance_matrices[cation][anion_index] for anion_list in acid_sites for anion_index in anion_list] + distances_cation_anion.append(distances) + return distances_cation_anion + def normalize(self, value): if self.step: return 0 if value > 0 else -np.inf @@ -74,14 +100,80 @@ def __call__(self, complex): return self.normalize(self.get_distances(complex).min() - self.threshold) +class MinDistanceCationAnionFitness(ThresholdFitness): + PARSER_NAME = "min_catan_distance" + HELP = "Complexes have positive score if the minimum distance between host anion and guest cation is below the given threshold plus Complexes have positive score if the minimum distance between host and guest is above the given threshold" + + def __init__( + self, + threshold=THRESHOLD, + threshold_catan=THRESHOLD_CATAN, + structure=DEFAULT_STRUCTURE, + cation_indexes=None, + acid_sites=None, + **kwargs, + ): + super().__init__(threshold, structure, **kwargs) + self.threshold_catan = threshold_catan + self.cation_indexes = cation_indexes + self.acid_sites = acid_sites + + @staticmethod + def add_arguments(parser): + ThresholdFitness.add_arguments(parser) + + parser.add_argument( + "--threshold_catan", + type=float, + help="threshold for cation-anion distance calculations (default: %(default)s)", + default=THRESHOLD_CATAN, + ) + parser.add_argument( + "--cation_indexes", + type=lambda x: [int(i) for i in x.split(",")], + help="indexes for the atoms holding a positive charge in the molecule (default: %(default)s)", + default=CATION_INDEXES, + ) + parser.add_argument( + "--acid_sites", + type=lambda x: [list(map(int, group.split(","))) for group in x.split(";")], + help="list of indexes for the O atoms that hold a negative charge (default: %(default)s)", + default=ACID_SITES, + ) + + def __call__(self, complex): + """Docks a guest cation into a host with anionic spots while ensuring a minimal distance between them. + + Args: + complex (structure): The host-guest complex object containing the host and guest molecules. + + Returns: + float: The score of the docking process. Returns normalized minimum distance if the optimal cation-anion distance is found, otherwise returns negative infinity. + """ + + cation_anion_distances = self.get_cation_anion_distances( + self.acid_sites, + self.cation_indexes, + complex.pose.distance_matrix, + ) + + if ( + any(distance < self.threshold_catan for distance_list in cation_anion_distances for distance in distance_list) + and self.normalize(self.get_distances(complex).min() - self.threshold) > 0 + ): + print("Optimal cation-anion distance found! Aborting the run") + return self.normalize(self.get_distances(complex).min()) + + else: + return -np.inf + + class MeanDistanceFitness(ThresholdFitness): PARSER_NAME = "mean_distance" HELP = "Complexes have positive score if the mean distance between host and guest is above the given threshold" def __call__(self, complex, axis=-1): - return self.normalize( - self.get_distances(complex).min(axis=axis).mean() - self.threshold - ) + return self.normalize(self.get_distances(complex).min(axis=axis).mean() - self.threshold) class SumInvDistanceFitness(ThresholdFitness): diff --git a/VOID/utils/setup.py b/VOID/utils/setup.py index dc5fcca..65ae601 100644 --- a/VOID/utils/setup.py +++ b/VOID/utils/setup.py @@ -13,11 +13,7 @@ def get_module_classes(self, module): def get_docker_kwargs(self, docker_class): if self.args["docker"] in ["mcdocker", "mcsuccess"]: - return { - k: self.args[k] - for k in ["temperature", "temperature_profile"] - if k in self.args - } + return {k: self.args[k] for k in ["temperature", "temperature_profile"] if k in self.args} return {} @@ -29,13 +25,7 @@ def get_docker(self): fitness = self.get_fitness() host, guest = self.get_structures() - docker = cls( - host=host, - guest=guest, - sampler=sampler, - fitness=fitness, - **self.get_docker_kwargs(cls) - ) + docker = cls(host=host, guest=guest, sampler=sampler, fitness=fitness, **self.get_docker_kwargs(cls)) return docker diff --git a/examples/Cation_Anion/.gitignore b/examples/Cation_Anion/.gitignore new file mode 100644 index 0000000..3f91e5b --- /dev/null +++ b/examples/Cation_Anion/.gitignore @@ -0,0 +1 @@ +mcdocked vdocked diff --git a/examples/Cation_Anion/DEB+.xyz b/examples/Cation_Anion/DEB+.xyz new file mode 100644 index 0000000..20ce3f4 --- /dev/null +++ b/examples/Cation_Anion/DEB+.xyz @@ -0,0 +1,25 @@ +23 + +C 2.8824 -0.9488 0.572 +C 1.4172 -0.9826 0.3101 +C 0.617 0.2149 0.0164 +C 1.1534 1.491 0.2607 +C 0.415 2.6507 0.0142 +C -0.8793 2.5564 -0.4785 +C -1.4323 1.3024 -0.7264 +C -0.6986 0.1219 -0.4908 +C -1.3828 -1.195 -0.7917 +C -2.1371 -1.7357 0.4145 +H 3.087 -0.5902 1.5851 +H 3.2955 -1.9588 0.4837 +H 3.4081 -0.3169 -0.1502 +H 0.9012 -1.9173 0.4953 +H 2.1576 1.6066 0.6605 +H 0.853 3.625 0.2135 +H -1.4591 3.4554 -0.6683 +H -2.4492 1.2451 -1.1101 +H -0.6596 -1.934 -1.154 +H -2.0863 -1.0578 -1.6232 +H -1.4677 -1.912 1.2627 +H -2.9137 -1.0361 0.742 +H -2.6216 -2.6843 0.1624 diff --git a/examples/Cation_Anion/job.sh b/examples/Cation_Anion/job.sh new file mode 100755 index 0000000..8c81749 --- /dev/null +++ b/examples/Cation_Anion/job.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# Runs until the first success is found Also with Monte Carlo docking +echo "" +echo "In this example we must supply the --cation_indexes (start counting after the framework, remember 0 indexing)" +echo "and the --acid_sites (oxygens bonded to the heteroatom)" +echo "" +echo "--acid_sites doesn't need all the acid sites present in the system, you can choose to sample for a preferred one if needed" +echo "" +echo "This example runs the docking of a DEB+ molecule into an Al-UTL zeolite framework" +echo "" +echo "If job fails to reach a final pose you can tune --threshold_catan, --threshold and --attempts parameters" +echo "" +echo "Running Monte Carlo docking" +echo "" +python3 ../../scripts/dock.py structure.cif DEB+.xyz -d mcsuccess -s random -f min_catan_distance -o mcdocked --threshold_catan 3.1 --threshold 1.5 --attempts 20000 --cation_indexes 225 --acid_sites 76,84,92,96 +echo "Final pose save to mcdocked folder" diff --git a/examples/Cation_Anion/structure.cif b/examples/Cation_Anion/structure.cif new file mode 100644 index 0000000..e2d4169 --- /dev/null +++ b/examples/Cation_Anion/structure.cif @@ -0,0 +1,249 @@ +data_image0 +_chemical_formula_structural O148AlSi75 +_chemical_formula_sum "O148 Al1 Si75" +_cell_length_a 28.996 +_cell_length_b 13.968 +_cell_length_c 12.449 +_cell_angle_alpha 90 +_cell_angle_beta 104.91 +_cell_angle_gamma 90 + +_space_group_name_H-M_alt "P 1" +_space_group_IT_number 1 + +loop_ + _space_group_symop_operation_xyz + 'x, y, z' + +loop_ + _atom_site_type_symbol + _atom_site_label + _atom_site_symmetry_multiplicity + _atom_site_fract_x + _atom_site_fract_y + _atom_site_fract_z + _atom_site_occupancy + O O1 1.0 0.41940 0.67970 0.74110 1.0000 + O O2 1.0 0.91940 0.17970 0.74110 1.0000 + O O3 1.0 0.58060 0.67970 0.25890 1.0000 + O O4 1.0 0.08060 0.17970 0.25890 1.0000 + O O5 1.0 0.58060 0.32030 0.25890 1.0000 + O O6 1.0 0.08060 0.82030 0.25890 1.0000 + O O7 1.0 0.41940 0.32030 0.74110 1.0000 + O O8 1.0 0.91940 0.82030 0.74110 1.0000 + O O9 1.0 0.50760 0.62900 0.84150 1.0000 + O O10 1.0 0.00760 0.12900 0.84150 1.0000 + O O11 1.0 0.49240 0.62900 0.15850 1.0000 + O O12 1.0 0.99240 0.12900 0.15850 1.0000 + O O13 1.0 0.49240 0.37100 0.15850 1.0000 + O O14 1.0 0.99240 0.87100 0.15850 1.0000 + O O15 1.0 0.50760 0.37100 0.84150 1.0000 + O O16 1.0 0.00760 0.87100 0.84150 1.0000 + O O17 1.0 0.43940 0.50000 0.79880 1.0000 + O O18 1.0 0.93940 0.00000 0.79880 1.0000 + O O19 1.0 0.56060 0.50000 0.20120 1.0000 + O O20 1.0 0.06060 0.00000 0.20120 1.0000 + O O21 1.0 0.44140 0.63100 0.95140 1.0000 + O O22 1.0 0.94140 0.13100 0.95140 1.0000 + O O23 1.0 0.55860 0.63100 0.04860 1.0000 + O O24 1.0 0.05860 0.13100 0.04860 1.0000 + O O25 1.0 0.55860 0.36900 0.04860 1.0000 + O O26 1.0 0.05860 0.86900 0.04860 1.0000 + O O27 1.0 0.44140 0.36900 0.95140 1.0000 + O O28 1.0 0.94140 0.86900 0.95140 1.0000 + O O29 1.0 0.40230 0.68090 0.11120 1.0000 + O O30 1.0 0.90230 0.18090 0.11120 1.0000 + O O31 1.0 0.59770 0.68090 0.88880 1.0000 + O O32 1.0 0.09770 0.18090 0.88880 1.0000 + O O33 1.0 0.59770 0.31910 0.88880 1.0000 + O O34 1.0 0.09770 0.81910 0.88880 1.0000 + O O35 1.0 0.40230 0.31910 0.11120 1.0000 + O O36 1.0 0.90230 0.81910 0.11120 1.0000 + O O37 1.0 0.42520 0.50000 0.08900 1.0000 + O O38 1.0 0.92520 0.00000 0.08900 1.0000 + O O39 1.0 0.57480 0.50000 0.91100 1.0000 + O O40 1.0 0.07480 1.00000 0.91100 1.0000 + O O41 1.0 0.71730 0.50000 0.82440 1.0000 + O O42 1.0 0.28270 0.50000 0.17560 1.0000 + O O43 1.0 0.29570 0.90600 0.83550 1.0000 + O O44 1.0 0.79570 0.40600 0.83550 1.0000 + O O45 1.0 0.70430 0.90600 0.16450 1.0000 + O O46 1.0 0.20430 0.40600 0.16450 1.0000 + O O47 1.0 0.70430 0.09400 0.16450 1.0000 + O O48 1.0 0.20430 0.59400 0.16450 1.0000 + O O49 1.0 0.29570 0.09400 0.83550 1.0000 + O O50 1.0 0.79570 0.59400 0.83550 1.0000 + O O51 1.0 0.75460 0.50000 0.65120 1.0000 + O O52 1.0 0.24540 0.50000 0.34880 1.0000 + O O53 1.0 0.19410 0.40480 0.78530 1.0000 + O O54 1.0 0.69410 0.90480 0.78530 1.0000 + O O55 1.0 0.80590 0.40480 0.21470 1.0000 + O O56 1.0 0.30590 0.90480 0.21470 1.0000 + O O57 1.0 0.80590 0.59520 0.21470 1.0000 + O O58 1.0 0.30590 0.09520 0.21470 1.0000 + O O59 1.0 0.19410 0.59520 0.78530 1.0000 + O O60 1.0 0.69410 0.09520 0.78530 1.0000 + O O61 1.0 0.27080 0.50000 0.77760 1.0000 + O O62 1.0 0.77080 0.00000 0.77760 1.0000 + O O63 1.0 0.72920 0.50000 0.22240 1.0000 + O O64 1.0 0.22920 0.00000 0.22240 1.0000 + O O65 1.0 0.24180 0.50000 0.96080 1.0000 + O O66 1.0 0.74180 0.00000 0.96080 1.0000 + O O67 1.0 0.75820 0.50000 0.03920 1.0000 + O O68 1.0 0.25820 1.00000 0.03920 1.0000 + O O69 1.0 0.27360 0.50000 0.56640 1.0000 + O O70 1.0 0.77360 0.00000 0.56640 1.0000 + O O71 1.0 0.72640 0.50000 0.43360 1.0000 + O O72 1.0 0.22640 1.00000 0.43360 1.0000 + O O73 1.0 0.33790 0.40620 0.71610 1.0000 + O O74 1.0 0.83790 0.90620 0.71610 1.0000 + O O75 1.0 0.66210 0.40620 0.28390 1.0000 + O O76 1.0 0.16210 0.90620 0.28390 1.0000 + O O77 1.0 0.66210 0.59380 0.28390 1.0000 + O O78 1.0 0.16210 0.09380 0.28390 1.0000 + O O79 1.0 0.33790 0.59380 0.71610 1.0000 + O O80 1.0 0.83790 0.09380 0.71610 1.0000 + O O81 1.0 0.19670 0.40550 0.46700 1.0000 + O O82 1.0 0.69670 0.90550 0.46700 1.0000 + O O83 1.0 0.80330 0.40550 0.53300 1.0000 + O O84 1.0 0.30330 0.90550 0.53300 1.0000 + O O85 1.0 0.80330 0.59450 0.53300 1.0000 + O O86 1.0 0.30330 0.09450 0.53300 1.0000 + O O87 1.0 0.19670 0.59450 0.46700 1.0000 + O O88 1.0 0.69670 0.09450 0.46700 1.0000 + O O89 1.0 0.32880 0.72540 0.19190 1.0000 + O O90 1.0 0.82880 0.22540 0.19190 1.0000 + O O91 1.0 0.67120 0.72540 0.80810 1.0000 + O O92 1.0 0.17120 0.22540 0.80810 1.0000 + O O93 1.0 0.67120 0.27460 0.80810 1.0000 + O O94 1.0 0.17120 0.77460 0.80810 1.0000 + O O95 1.0 0.32880 0.27460 0.19190 1.0000 + O O96 1.0 0.82880 0.77460 0.19190 1.0000 + O O97 1.0 0.24010 0.76930 0.19020 1.0000 + O O98 1.0 0.74010 0.26930 0.19020 1.0000 + O O99 1.0 0.75990 0.76930 0.80980 1.0000 + O O100 1.0 0.25990 0.26930 0.80980 1.0000 + O O101 1.0 0.75990 0.23070 0.80980 1.0000 + O O102 1.0 0.25990 0.73070 0.80980 1.0000 + O O103 1.0 0.24010 0.23070 0.19020 1.0000 + O O104 1.0 0.74010 0.73070 0.19020 1.0000 + O O105 1.0 0.30850 0.78300 0.37510 1.0000 + O O106 1.0 0.80850 0.28300 0.37510 1.0000 + O O107 1.0 0.69150 0.78300 0.62490 1.0000 + O O108 1.0 0.19150 0.28300 0.62490 1.0000 + O O109 1.0 0.69150 0.21700 0.62490 1.0000 + O O110 1.0 0.19150 0.71700 0.62490 1.0000 + O O111 1.0 0.30850 0.21700 0.37510 1.0000 + O O112 1.0 0.80850 0.71700 0.37510 1.0000 + O O113 1.0 0.34340 0.73760 0.58370 1.0000 + O O114 1.0 0.84340 0.23760 0.58370 1.0000 + O O115 1.0 0.65660 0.73760 0.41630 1.0000 + O O116 1.0 0.15660 0.23760 0.41630 1.0000 + O O117 1.0 0.65660 0.26240 0.41630 1.0000 + O O118 1.0 0.15660 0.76240 0.41630 1.0000 + O O119 1.0 0.34340 0.26240 0.58370 1.0000 + O O120 1.0 0.84340 0.76240 0.58370 1.0000 + O O121 1.0 0.25000 0.75000 0.50000 1.0000 + O O122 1.0 0.75000 0.25000 0.50000 1.0000 + O O123 1.0 0.75000 0.75000 0.50000 1.0000 + O O124 1.0 0.25000 0.25000 0.50000 1.0000 + O O125 1.0 0.34790 0.76700 0.79510 1.0000 + O O126 1.0 0.84790 0.26700 0.79510 1.0000 + O O127 1.0 0.65210 0.76700 0.20490 1.0000 + O O128 1.0 0.15210 0.26700 0.20490 1.0000 + O O129 1.0 0.65210 0.23300 0.20490 1.0000 + O O130 1.0 0.15210 0.73300 0.20490 1.0000 + O O131 1.0 0.34790 0.23300 0.79510 1.0000 + O O132 1.0 0.84790 0.73300 0.79510 1.0000 + O O133 1.0 0.32810 0.77530 0.98810 1.0000 + O O134 1.0 0.82810 0.27530 0.98810 1.0000 + O O135 1.0 0.67190 0.77530 0.01190 1.0000 + O O136 1.0 0.17190 0.27530 0.01190 1.0000 + O O137 1.0 0.67190 0.22470 0.01190 1.0000 + O O138 1.0 0.17190 0.72470 0.01190 1.0000 + O O139 1.0 0.32810 0.22470 0.98810 1.0000 + O O140 1.0 0.82810 0.72470 0.98810 1.0000 + O O141 1.0 0.32120 0.59430 0.03640 1.0000 + O O142 1.0 0.82120 0.09430 0.03640 1.0000 + O O143 1.0 0.67880 0.59430 0.96360 1.0000 + O O144 1.0 0.17880 0.09430 0.96360 1.0000 + O O145 1.0 0.67880 0.40570 0.96360 1.0000 + O O146 1.0 0.17880 0.90570 0.96360 1.0000 + O O147 1.0 0.32120 0.40570 0.03640 1.0000 + O O148 1.0 0.82120 0.90570 0.03640 1.0000 + Al Al1 1.0 0.45210 0.60990 0.83300 1.0000 + Si Si1 1.0 0.95210 0.10990 0.83300 1.0000 + Si Si2 1.0 0.54790 0.60990 0.16700 1.0000 + Si Si3 1.0 0.04790 0.10990 0.16700 1.0000 + Si Si4 1.0 0.54790 0.39010 0.16700 1.0000 + Si Si5 1.0 0.04790 0.89010 0.16700 1.0000 + Si Si6 1.0 0.45210 0.39010 0.83300 1.0000 + Si Si7 1.0 0.95210 0.89010 0.83300 1.0000 + Si Si8 1.0 0.44010 0.60990 0.07770 1.0000 + Si Si9 1.0 0.94010 0.10990 0.07770 1.0000 + Si Si10 1.0 0.55990 0.60990 0.92230 1.0000 + Si Si11 1.0 0.05990 0.10990 0.92230 1.0000 + Si Si12 1.0 0.55990 0.39010 0.92230 1.0000 + Si Si13 1.0 0.05990 0.89010 0.92230 1.0000 + Si Si14 1.0 0.44010 0.39010 0.07770 1.0000 + Si Si15 1.0 0.94010 0.89010 0.07770 1.0000 + Si Si16 1.0 0.29540 0.79540 0.24220 1.0000 + Si Si17 1.0 0.79540 0.29540 0.24220 1.0000 + Si Si18 1.0 0.70460 0.79540 0.75780 1.0000 + Si Si19 1.0 0.20460 0.29540 0.75780 1.0000 + Si Si20 1.0 0.70460 0.20460 0.75780 1.0000 + Si Si21 1.0 0.20460 0.70460 0.75780 1.0000 + Si Si22 1.0 0.29540 0.20460 0.24220 1.0000 + Si Si23 1.0 0.79540 0.70460 0.24220 1.0000 + Si Si24 1.0 0.30100 0.79410 0.49820 1.0000 + Si Si25 1.0 0.80100 0.29410 0.49820 1.0000 + Si Si26 1.0 0.69900 0.79410 0.50180 1.0000 + Si Si27 1.0 0.19900 0.29410 0.50180 1.0000 + Si Si28 1.0 0.69900 0.20590 0.50180 1.0000 + Si Si29 1.0 0.19900 0.70590 0.50180 1.0000 + Si Si30 1.0 0.30100 0.20590 0.49820 1.0000 + Si Si31 1.0 0.80100 0.70590 0.49820 1.0000 + Si Si32 1.0 0.30720 0.79380 0.85690 1.0000 + Si Si33 1.0 0.80720 0.29380 0.85690 1.0000 + Si Si34 1.0 0.69280 0.79380 0.14310 1.0000 + Si Si35 1.0 0.19280 0.29380 0.14310 1.0000 + Si Si36 1.0 0.69280 0.20620 0.14310 1.0000 + Si Si37 1.0 0.19280 0.70620 0.14310 1.0000 + Si Si38 1.0 0.30720 0.20620 0.85690 1.0000 + Si Si39 1.0 0.80720 0.70620 0.85690 1.0000 + Si Si40 1.0 0.34530 0.69500 0.08270 1.0000 + Si Si41 1.0 0.84530 0.19500 0.08270 1.0000 + Si Si42 1.0 0.65470 0.69500 0.91730 1.0000 + Si Si43 1.0 0.15470 0.19500 0.91730 1.0000 + Si Si44 1.0 0.65470 0.30500 0.91730 1.0000 + Si Si45 1.0 0.15470 0.80500 0.91730 1.0000 + Si Si46 1.0 0.34530 0.30500 0.08270 1.0000 + Si Si47 1.0 0.84530 0.80500 0.08270 1.0000 + Si Si48 1.0 0.36240 0.69570 0.70760 1.0000 + Si Si49 1.0 0.86240 0.19570 0.70760 1.0000 + Si Si50 1.0 0.63760 0.69570 0.29240 1.0000 + Si Si51 1.0 0.13760 0.19570 0.29240 1.0000 + Si Si52 1.0 0.63760 0.30430 0.29240 1.0000 + Si Si53 1.0 0.13760 0.80430 0.29240 1.0000 + Si Si54 1.0 0.36240 0.30430 0.70760 1.0000 + Si Si55 1.0 0.86240 0.80430 0.70760 1.0000 + Si Si56 1.0 0.26600 0.00000 0.78470 1.0000 + Si Si57 1.0 0.76600 0.50000 0.78470 1.0000 + Si Si58 1.0 0.73400 0.00000 0.21530 1.0000 + Si Si59 1.0 0.23400 0.50000 0.21530 1.0000 + Si Si60 1.0 0.22470 0.50000 0.82700 1.0000 + Si Si61 1.0 0.77530 0.50000 0.17300 1.0000 + Si Si62 1.0 0.27530 0.00000 0.17300 1.0000 + Si Si63 1.0 0.72470 0.00000 0.82700 1.0000 + Si Si64 1.0 0.30460 0.50000 0.69360 1.0000 + Si Si65 1.0 0.69540 0.50000 0.30640 1.0000 + Si Si66 1.0 0.19540 0.00000 0.30640 1.0000 + Si Si67 1.0 0.80460 0.00000 0.69360 1.0000 + Si Si68 1.0 0.22780 0.50000 0.46120 1.0000 + Si Si69 1.0 0.77220 0.50000 0.53880 1.0000 + Si Si70 1.0 0.27220 0.00000 0.53880 1.0000 + Si Si71 1.0 0.72780 0.00000 0.46120 1.0000 + Si Si72 1.0 0.29210 0.50000 0.05360 1.0000 + Si Si73 1.0 0.70790 0.50000 0.94640 1.0000 + Si Si74 1.0 0.20790 0.00000 0.94640 1.0000 + Si Si75 1.0 0.79210 0.00000 0.05360 1.0000 diff --git a/examples/README.md b/examples/README.md index f18ddf6..0f619dc 100644 --- a/examples/README.md +++ b/examples/README.md @@ -7,5 +7,6 @@ The following examples are currently available in this repository: 3. [Docking triethylamine to MOR zeolite](MOR_loading): several triethylamine molecules are docked to MOR zeolite with Voronoi batch docker. 4. [Docking benzene to MOF-5](MOF-5): several benzene molecules are docked to MOF-5 using the Voronoi batched docker. The MOF-5 structure was retrieved from the Cambridge Structural Database (ID [SAHYIK](https://www.ccdc.cam.ac.uk/structures/search?identifier=SAHYIK)) 5. [Docking water to a Ni(111) surface](Ni111): one water molecule is docked to a Ni(111) surface using the Gaussian target fitness function. The Ni(111) surface structure was retrieved from the [Materials Project](https://materialsproject.org) (ID [mp-23](https://materialsproject.org/materials/mp-23/surfaces/[1,%201,%201]/cif)) +6. [Docking Diethylbenzenium cation (DEB+) into an acid UTL zeolite](Cation_Anion): One DEB+ molecule is docked to a UTL framework containing one Al atom, hence 4 acid sites. The minimmum cation-anion fitness ensures a close positioning of the docked molecule with respect to the acid sites of the host. Each example has a `job.sh` script file showing how to run the docker.