Exemplo n.º 1
0
def finish_initialization(experiment):
    """Finish an initialization"""
    # Sharing is already started and the structures and energies have already
    # been loaded into the Experiment
    # Make the initial experiment summary
    experiment["Summary"] = "Initial Calculations\n"
    # Determine when they started
    f = open(experiment["Folder"]+"initialize/Group1/Group1_Summary.txt","r")
    for line in f:
        if line.startswith("Started"):
            experiment["Summary"] += line
            break
    f.close()
    # Include the energies of each Design Group
    for group in experiment:
        experiment["Summary"] += SHARING.format_energies(\
                   experiment["Energies"][group.number], group.number, False)
    # Create the initial folder in results
    SHARING.output_best(experiment, 0, None)
    # Figure out the name of the output file
    if experiment["Type"] == "Mutator":
        folder = experiment["Folder"] + "results/wildtype/"
    else:
        folder = experiment["Folder"] + "results/initial/"
    # List the energies of each Target Molecule, too
    if experiment["Energy Calculation"] == "Binding":
        for molecule in experiment[0]:
            if not molecule.design:
                name = experiment["Folder"] + "initialize/Current/Molecule"
                name += molecule.name + "_Energy.txt"
                f = open(name, "r")
                energy = f.readline().split()[2]
                f.close()
                experiment["Summary"] += "The energy of Target Molecule "
                experiment["Summary"] += molecule.name + " is " + energy
                experiment["Summary"] += " kcal / mol\n"
                # Copy the file to the output folder
                os.system("cp " + name + " " + folder)
    # Move to the Experiment's folder
    os.chdir(experiment["Folder"])
    # Try to make the current folder
    try:
        os.mkdir("Current")
    except OSError:
        pass
    # Write the Structures to the Current folder
    SHARING.output_Current(experiment, "./Current/", None, 0)
    experiment["Last Update"] = 0
    # Start a refinment
    REFINEMENT.Start(experiment, 0, None)
    # Create the initial summary file
    experiment["Summary"] += "Ended" + SHARING.time_stamp()
    name = SHARING.summary_name(experiment["Folder"])
    f = open(name, "w")
    f.write(experiment["Summary"])
    f.close()
    # Remove the initialization folder
    os.system("rm -rf initialize")
    # End the sharing that was started elsewhere
    SHARING.End(experiment)
Exemplo n.º 2
0
def Calculate_Energy(experiment, gn = None):
    """Calculate the energies of an IPRO iteration"""
    # Do the standard introductory checks
    if not isinstance(experiment, EXPERIMENT.Experiment):
        text = "The Calculate Energy function requires an Experiment class "
        text += "object as its input."
        raise IPRO_Error(text)
    refinement = refinement_check(experiment, gn)
    if refinement:
        return {}, refinement
    # Start timing
    startTime = time.time()
    # Store the energies here
    energies = {}
    # Loop through the Design Groups
    for group in experiment:
        if gn not in [None, group.number]:
            continue
        # Time the group
        groupTime = time.time()
        # initialize the dictionary
        energies[group.number] = {}
        # If there are no Target Molecules, it is impossible to calculate an
        # interaction energy
        do = False
        for molecule in group:
            if not molecule.design:
                do = True
                break
        # Calculate the energies
        if experiment["Force Field"] == "CHARMM":
            complex = CHARMM.Energy(group, experiment, "all")
            energies[group.number]["Complex"] = complex
            if do:
                design = CHARMM.Energy(group, experiment, True)
                target = CHARMM.Energy(group, experiment, False)
                energies[group.number]["Interaction"] = complex-design-target
        else:
            text = "The Calculate Energy function does not support the "
            text += str(experiment["Force Field"]) + " force field."
            raise IPRO_Error(text)
        # update the summary
        if gn == None:
            experiment["Summary"] += SHARING.summary_update(groupTime, \
            "Energy Calculation for Design Group " + str(group.number))
        experiment["Summary"] +=SHARING.format_energies(energies[group.number],\
                                group.number, False)
    experiment["Summary"] += SHARING.summary_update(startTime, \
                             "The Calculate Energy function")
    return energies, refinement
Exemplo n.º 3
0
def initialize_molecule(experiment, mn):
    """Initialize a Molecule"""
    # Create the folder's name
    folder = "Molecule" + mn
    do = SHARING.claim_calculations(folder)
    # If this processor is doing the calculations
    if do:
        # Make a summary
        experiment["Summary"] = "Started" + SHARING.time_stamp()
        # Move into the folder
        os.chdir(folder)
        SHARING.copy_standard_files(experiment)
        # Get a unique copy of the Molecule
        molecule = experiment[0][mn].duplicate()
        for residue in molecule:
            residue.freedom = "FREE"
        # Store the calculated energies here
        energies = {}
        # Do a relaxation and energy calculation
        if experiment["Force Field"] == "CHARMM":
            CHARMM.Relaxation(molecule, experiment)
            energies["Complex"] = CHARMM.Energy(molecule, experiment)
        else:
            text = "The initialize molecule function does not support the "
            text += str(experiment["Force Field"]) + " force field."
            raise IPRO_Error(text)
        # Format the energy
        text = SHARING.format_energies(energies)
        experiment["Summary"] += text
        # Create the summary file for the Molecule
        experiment["Summary"] += "Ended" + SHARING.time_stamp()
        name = SHARING.summary_name(SHARING.get_current())
        f = open(name, "w")
        f.write(experiment["Summary"])
        f.close()
        # Leave this folder, then start sharing
        os.chdir('../')
        SHARING.Start(experiment)
        # Output the Molecule's structure
        name = "./Current/" + molecule.generate_name()
        molecule.output(name, molecule.fileFormat, experiment["User"])
        # Output the Complex energy
        f = open("./Current/Molecule" + mn + "_Energy.txt", "w")
        f.write(text)
        f.close()
        # End sharing
        SHARING.End(experiment)
Exemplo n.º 4
0
def Finish(experiment, mn):
    """Finish the initial creation of a mutant"""
    # Sharing was started in check finish
    # Load the structures and energies
    SHARING.update_Current(experiment, "./Current/")
    SHARING.update_Energies(experiment, "./Current/")
    # Create a brief summary of the information
    experiment["Summary"] = '\nMutant ' + str(mn) + " Creation\n"
    f = open("Group1/Group1_Summary.txt", "r")
    for line in f:
        if line.startswith("Started"):
            experiment["Summary"] += line
            break
    f.close()
    # Include information about the energies
    for group in experiment:
        experiment["Summary"] += \
            SHARING.format_energies(experiment["Energies"][group.number], \
                                    group.number, False)
    # Put this in the overall summary
    os.chdir(experiment["Folder"])
    name = SHARING.summary_name(SHARING.get_current())
    f = open(name, "a")
    f.write(experiment["Summary"])
    f.close()
    # Make a folder to do the structure refinements in
    folder = "mutant" + str(mn)
    os.mkdir(folder)
    folder += "/Current/"
    os.mkdir(folder)
    SHARING.output_Current(experiment, folder)
    SHARING.output_Energies(experiment, folder)
    f = open(folder + "iteration.txt", "w")
    f.write(str(mn))
    f.close()
    # Delete the current folder
    name = "initial_mutant" + str(mn)
    os.system("rm -rf " + name)
    # End sharing
    SHARING.End(experiment)
Exemplo n.º 5
0
def Finish(experiment, mn):
    """Finish the initial creation of a mutant"""
    # Sharing was started in check finish
    # Load the structures and energies
    SHARING.update_Current(experiment, "./Current/")
    SHARING.update_Energies(experiment, "./Current/")
    # Create a brief summary of the information
    experiment["Summary"] = '\nMutant ' + str(mn) + " Creation\n"
    f = open("Group1/Group1_Summary.txt", "r")
    for line in f:
        if line.startswith("Started"):
            experiment["Summary"] += line
            break
    f.close()
    # Include information about the energies
    for group in experiment:
        experiment["Summary"] += \
            SHARING.format_energies(experiment["Energies"][group.number], \
                                    group.number, False)
    # Put this in the overall summary
    os.chdir(experiment["Folder"])
    name = SHARING.summary_name(SHARING.get_current())
    f = open(name, "a")
    f.write(experiment["Summary"])
    f.close()
    # Make a folder to do the structure refinements in
    folder = "mutant" + str(mn)
    os.mkdir(folder)
    folder += "/Current/"
    os.mkdir(folder)
    SHARING.output_Current(experiment, folder)
    SHARING.output_Energies(experiment, folder)
    f = open(folder + "iteration.txt", "w")
    f.write(str(mn))
    f.close()
    # Delete the current folder
    name = "initial_mutant" + str(mn)
    os.system("rm -rf " + name)
    # End sharing
    SHARING.End(experiment)
Exemplo n.º 6
0
def make_extra_group(experiment):
    """Create an extra Design Group with no Target Molecules"""
    # Only do this if Binding energy calculations are being done
    if experiment["Energy Calculation"] == "Binding":
        # Get all of the Design Molecules from Design Group 1
        molecules = []
        for molecule in experiment[1]:
            if molecule.design:
                molecules.append(molecule)
        # Make and store a new Design Group (which duplicates these Molecules
        # for run independence reasons)
        N = len(experiment) + 1
        group = MOLECULES.DesignGroup(N, molecules, experiment["Force Field"], \
                                      experiment["File Format"])
        experiment._groupOrder.append(N)
        experiment._groups[N] = group
        n = len(experiment)
        # Update the Current dictionary, too
        experiment["Current"][n] = {}
        for molecule in experiment[n]:
            new = molecule.duplicate()
            experiment["Current"][n][new.name] = new
        # Those structures are essentially place holders at this point. However,
        # we do need to run an energy minimization and calculate an initial
        # energy for that group
        name = "Group" + str(n) + "_Energies.txt"
        SHARING.Start(experiment)
        # If another processor already did the calculation, we're fine
        if name not in os.listdir("./Current/"):
            # Try to make a temp directory to do the calculations in
            if "temp" not in os.listdir("./"):
                # Make the directory and move into it
                os.mkdir("temp")
                os.chdir("temp")
                # Stop sharing
                SHARING.End(experiment)
                # Copy in the relevant files
                SHARING.copy_standard_files(experiment, False)
                # Relax the Design Group
                refinement = IPRO_FUNCTIONS.Relaxation(experiment, n, True)
                # And calculate the energies
                energies, refinement = \
                          IPRO_FUNCTIONS.Calculate_Energy(experiment, n)
                # Move back up a folder
                os.chdir("../")
                # Start sharing
                SHARING.Start(experiment)
                # Store the energy
                text = SHARING.format_energies(energies[n])
                f = open("./Current/" + name, "w")
                f.write(text)
                f.close()
                SHARING.output_Current(experiment, "./Current/", n)
                # Delete the temp folder
                os.system("rm -rf temp")
            # Otherwise, just wait
            else:
                SHARING.End(experiment)
                SHARING.Wait("temp", "./")
                SHARING.Start(experiment)
        # Store that complex energy
        f = open("./Current/" + name, "r")
        experiment["Energies"][n] = {"Complex": float(f.readline().split()[2])}
        f.close()
        SHARING.End(experiment)
Exemplo n.º 7
0
def make_extra_group(experiment):
    """Create an extra Design Group with no Target Molecules"""
    # Only do this if Binding energy calculations are being done
    if experiment["Energy Calculation"] == "Binding":
        # Get all of the Design Molecules from Design Group 1
        molecules = []
        for molecule in experiment[1]:
            if molecule.design:
                molecules.append(molecule)
        # Make and store a new Design Group (which duplicates these Molecules
        # for run independence reasons)
        N = len(experiment) + 1
        group = MOLECULES.DesignGroup(N, molecules, experiment["Force Field"], \
                                      experiment["File Format"])
        experiment._groupOrder.append(N)
        experiment._groups[N] = group
        n = len(experiment)
        # Update the Current dictionary, too
        experiment["Current"][n] = {}
        for molecule in experiment[n]:
            new = molecule.duplicate()
            experiment["Current"][n][new.name] = new
        # Those structures are essentially place holders at this point. However,
        # we do need to run an energy minimization and calculate an initial
        # energy for that group
        name = "Group" + str(n) + "_Energies.txt"
        SHARING.Start(experiment)
        # If another processor already did the calculation, we're fine
        if name not in os.listdir("./Current/"):
            # Try to make a temp directory to do the calculations in
            if "temp" not in os.listdir("./"):
                # Make the directory and move into it
                os.mkdir("temp")
                os.chdir("temp")
                # Stop sharing
                SHARING.End(experiment)
                # Copy in the relevant files
                SHARING.copy_standard_files(experiment, False)
                # Relax the Design Group
                refinement = IPRO_FUNCTIONS.Relaxation(experiment, n, True)
                # And calculate the energies
                energies, refinement = \
                          IPRO_FUNCTIONS.Calculate_Energy(experiment, n)
                # Move back up a folder
                os.chdir("../")
                # Start sharing
                SHARING.Start(experiment)
                # Store the energy
                text = SHARING.format_energies(energies[n])
                f = open("./Current/" + name, "w")
                f.write(text)
                f.close()
                SHARING.output_Current(experiment, "./Current/", n)
                # Delete the temp folder
                os.system("rm -rf temp")
            # Otherwise, just wait
            else:
                SHARING.End(experiment)
                SHARING.Wait("temp", "./")
                SHARING.Start(experiment)
        # Store that complex energy
        f = open("./Current/" + name, "r")
        experiment["Energies"][n] = {"Complex":float(f.readline().split()[2])}
        f.close()
        SHARING.End(experiment)