Example #1
0
def set_water_control_file(env):
    if env.waters or env.n_waters:
        env.water_arg = hp.retrieve_all_waters(
            env.system
        ) if env.waters == "all_waters" else env.waters  # IDs of waters to perturb
        env.parameters = env.parameters.rstrip("]\n") + pp.WATER_PARAMS

        all_waters = ""
        water_string = []

        env.water_radius = env.water_radius if env.water_radius else 6
        water_inputs = [
            input.strip().strip('"') for input in env.adap_ex_input.split(",")
        ]
        water_inputs = [
            os.path.join(env.pele_dir, elem) for elem in water_inputs
        ]

        for inp in water_inputs:
            com = ligand_com(inp, env.residue)
            com_format = ['{:.10f}'.format(elem) for elem in com[0]]
            env.water_center = ", ".join(com_format)

            template = '{{"watersToPerturb": {{"links": {{"ids": [{index}] }}}}, "Box": {{"radius": {radius}, "fixedCenter": [{com}], "type": "sphericalBox"}}}}'

            waters = hp.retrieve_all_waters(inp)
            waters = ", ".join(['"{}"'.format(water) for water in waters])
            all_waters = all_waters + waters + ", "
            water_string.append(
                template.format(index=waters,
                                radius=env.water_radius,
                                com=env.water_center))

        env.waters = [w.strip("'") for w in water_string]
        all_waters = all_waters.rstrip(", ")
        env.water = cs.WATER.format(all_waters, env.allow_empty_selectors,
                                    env.water_temp, env.water_trials,
                                    env.water_overlap, env.water_constr,
                                    env.waters).replace("'", "")
        env.water_energy = None  # TEMPORARY FIX
    # self.water_energy = "\n".join([ cs.WATER_ENERGY.format(water.split(":")[0]) for water in water_arg ])

    else:
        env.water_energy = None
        env.water = None
        env.water_radius = None
        env.water_center = None
        env.water = ""
    def water_params(self, args):
        self.water_temp = (
            args.water_temp
            if args.water_temp
            else self.simulation_params.get("water_temp", 5000)
        )
        self.water_overlap = (
            args.water_overlap
            if args.water_overlap
            else self.simulation_params.get("water_overlap", 0.78)
        )
        self.water_constr = (
            args.water_constr
            if args.water_constr
            else self.simulation_params.get("water_constr", 0)
        )
        self.water_trials = (
            args.water_trials
            if args.water_trials
            else self.simulation_params.get("water_trials", 10000)
        )

        self.allow_empty_selectors = (
            '"allowEmptyWaterSelectors": true,' if args.water_empty_selector else ""
        )
        self.water_arg = (
            hp.retrieve_all_waters(self.system)
            if args.waters == "all_waters"
            else args.waters
        )  # IDs of waters
        self.n_waters = (
            args.n_waters
            if args.n_waters
            else self.simulation_params.get("n_waters", 0)
        )
        self.waters = (
            args.waters if args.waters else self.simulation_params.get("waters", [])
        )
        self.water_radius = args.water_radius if args.water_radius else 6
        self.water_center = None
        self.water = ""
        self.water_energy = None
    def set_water_input(self, inp):
        """
        Sets water sites JSON (box, radius, water IDs) by formatting the TEMPLATE.
        """
        try:
            self.set_box_center(inp)
        except TypeError:
            raise ce.NotCenterOfWaterBox(
                'Center of water box not found. Set it with "water_center" flag or ensure '
                "you specified the residue name, so it can be retrieved automatically."
            )
        self.set_box_radius()

        waters = sorted(
            hp.retrieve_all_waters(inp, exclude=self.water_to_exclude))
        self.water_ids_to_track = self.retrieve_indices_to_track(waters)
        waters = ", ".join(['"{}"'.format(water) for water in waters])
        self.all_waters += waters + ", "
        return TEMPLATE.format(index=waters,
                               radius=self.water_radius,
                               com=self.water_center)
 def set_user_waters(self):
     """
     If the user set waters: "all_waters", it extracts them from the pdb.
     """
     if self.user_waters == "all_waters":
         self.user_waters = hp.retrieve_all_waters(self.input_pdbs[0])