Пример #1
0
def main():

    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    try:
        sdj = setupPHDjob()

    except FileNotFoundError:
        sys.exit(1)

    except OSError:
        logger.exception(
            "OSError encountered, likely an issue with moving files around")
        logger.critical("If the issue persists, contact the developers")
        sys.exit(1)

    except ParameterError:
        logger.error("Please make sure your parameters are correct")
        sys.exit(1)

    except:
        logger.exception("Unknown exception encountered, quitting")
        sys.exit(1)
Пример #2
0
def main():
    # Begin the logger (__main__)
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root.")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    logger.debug("Parsing Arguments")
    parser = argparse.ArgumentParser(description="Setups a turbomole job")

    parser.add_argument("-t",
                        dest="timeout",
                        action='store_false',
                        default=True,
                        required=False,
                        help="Turns off timeout")

    args = parser.parse_args()

    timeout_time = 0
    if args.timeout:
        logger.debug("Timeout is turned on")
        timeout_time = 15

    # Start to do the dew
    try:
        tm = setupTMjob(timeout=timeout_time)

    except FileExistsError as e:
        if str(e) == 'control':
            logger.info(
                "Either delete control file, or perform define by hand!")

        else:
            logger.exception("Unknown FileExistsError encountered!")

    except FileNotFoundError as e:
        if str(e) == "definput.json":
            logger.error(
                "Please resubmit once you are done editing the parameters")

        elif str(e) == "coord":
            logger.info("Please provide a structure file for this job!")

        else:
            logger.exception("Unknown FileNotFoundError encountered!")

    except exceptions.DefineError:
        logger.info("Check define.out for the exact issue!")

    except exceptions.ParameterError as e:
        logger.info(e)

    except:
        logger.exception("Exception encountered in running setupjob.py")
Пример #3
0
def main():
    # Load the logger
    utilities.load_logger_config()
    logger = logging.getLogger(__name__)

    # Sets up the argument parser for the necessary vars
    logger.debug("Parsing arguments")
    parser = argparse.ArgumentParser(description="Runs a TURBOMOLE job")
    parser.add_argument('-n',
                        nargs=1,
                        dest="cores",
                        type=int,
                        required=True,
                        help='number of cores available to TURBOMOLE')
    parser.add_argument('-t',
                        nargs=1,
                        dest="time",
                        type=int,
                        default=[-1],
                        required=False,
                        help='time available to run job (hours)')
    parser.add_argument('-s',
                        nargs=1,
                        dest="scratch_directory",
                        default='./',
                        type=str,
                        required=False,
                        help='scratch directory to run the job in')

    args = parser.parse_args()

    logger.debug("Proper arguments passed")

    try:
        job = TMcalculation(cores=args.cores[0],
                            time=args.time[0],
                            run_dir=args.scratch_directory[0])

    except FileNotFoundError as e:
        if str(e) == "definput.json":
            logger.error("There were no parameters for this job!")

        elif str(e) == "coord":
            logger.error("You do not have a structure file!")

        else:
            logger.exception("Unknown FileNotFoundError encountered!")
            raise

    except exceptions.ParameterError:
        logger.error(
            "Parameters passed where invalid! Check to ensure that the value in definput are valid!"
        )

    except:
        logger.exception(
            "Unknown exception encountered while trying to run job")
        raise
Пример #4
0
def main():
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    logger.debug("Parsing Arguments")

    parser = argparse.ArgumentParser(
        description="Converts a piDMD movie file to a pdb")

    parser.add_argument("pdbfile",
                        type=str,
                        nargs=1,
                        help="initial pdb file (typically initial.pdb)")
    parser.add_argument("moviefile",
                        type=str,
                        nargs=1,
                        help="Movie file from piDMD")
    parser.add_argument("-o",
                        dest="outputFile",
                        default=["movie.pdb"],
                        type=str,
                        nargs=1,
                        required=False,
                        help="Output for movie file")
    #    parser.add_argument("--p", dest="protonate", nargs='*', default=[], required=False, help="Protonates the movie file")

    args = parser.parse_args()

    if not os.path.isfile(args.pdbfile[0]):
        logger.error(f"pdb file provided does not exist: {args.pdbfile[0]}")
        sys.exit(1)

    if not os.path.isfile(args.moviefile[0]):
        logger.error(
            f"movie file provided does not exist: {args.moviefile[0]}")
        sys.exit(1)

    logger.debug("Passing parameters...")
    try:
        logger.debug("Passing args to the function in utilities")
        utilities.make_movie(args.pdbfile[0], args.moviefile[0],
                             args.outputFile[0])
        #utilities.make_movie(args.pdbfile[0], args.moviefile[0], args.outputFile[0], protonate=args.protonate)

    except OSError:
        logger.error("Error creating movie file")
        sys.exit(1)

    #TODO check for the output file actually...
    logger.info("Successfully converted movie file!")
    logger.debug("Finished")
Пример #5
0
def main():

    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root.")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    # This is the logger for the free_energy script. We now need to remove all of the handlers and append the typical sys.std to it as this is a command line script

    # Now we have switched out the logger for the sys.stoud so that everything at info or above is output to the console
    logger.debug("Logger is setup!")

    logger.debug("Creating argparser")
    parser = argparse.ArgumentParser(
        description=
        "Calculates the free energy correction following a Vibrational Frequency calculation"
    )
    parser.add_argument(
        "-T",
        dest="temp",
        type=float,
        required=False,
        default=298.15,
        help="The temperature at which to calculate the free energy correction"
    )

    args = parser.parse_args()

    if args.temp < 0:
        logger.error("Cannot have a negative temperature!")
        sys.exit(1)

    try:
        gcorr = free_energy.free_energy_correction(args.temp)

    except:
        #TODO Make this except clause better...not as general
        logger.exception("Error while calculating free energy")
        sys.exit(1)

    logger.info(f"[Free energy correction] ==>> {gcorr} (Hart)")

    logger.debug("Finished with Calculation")
Пример #6
0
def main():
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    proteins = utilities.load_movie("movie.pdb")
    rmsd = []
    for protein in proteins:
        rmsd.append(proteins[0].aa_rmsd(protein))

    print(rmsd)

    logger.info("[Finished]")
Пример #7
0
def main():
    # Load the logger
    utilities.load_logger_config()
    logger = logging.getLogger(__name__)

    # Sets up the argument parser for the necessary vars
    logger.debug("Parsing arguments")
    parser = argparse.ArgumentParser(description="Runs a QM/DMD job")
    parser.add_argument('-n',
                        nargs=1,
                        dest="cores",
                        type=int,
                        required=True,
                        help='number of cores available')
    parser.add_argument('-t',
                        nargs=1,
                        dest="time",
                        type=int,
                        default=[-1],
                        required=False,
                        help='time available to run job (hours)')
    parser.add_argument('-s',
                        nargs=1,
                        dest="scratch_directory",
                        default='./',
                        type=str,
                        required=False,
                        help='scratch directory to run the job in')

    args = parser.parse_args()

    logger.debug("Proper arguments passed")

    try:
        utilities.print_header()
        job = controller(cores=args.cores[0],
                         time=args.time[0],
                         scratch=args.scratch_directory[0])

    except:
        logger.exception(
            "Unknown exception encountered while trying to run job")
        raise
Пример #8
0
def main():
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    parser = argparse.ArgumentParser(
        description="Converts pdb -> coord, or reinstalls coord in pdb")

    parser.add_argument("--reinstall",
                        dest="install",
                        required=False,
                        action="store_true",
                        help="Reinstall coord into pdb")

    args = parser.parse_args()

    if not os.path.isfile("phdinput.json"):
        logger.error("No phdinput.json file")
        sys.exit(1)

    with open("phdinput.json", 'r') as optionFile:
        parameters = json.load(optionFile)

    protein = utilities.load_pdb(parameters["pdb file"])

    if not args.install:
        logger.info("[Cutting]...")
        dmd_to_qm.protein_to_coord(protein, parameters["QM Chop"])

    else:
        logger.info("Reinstalling...")
        protein = dmd_to_qm.coord_to_protein(protein, parameters["QM Chop"])
        protein.write_pdb("reinstalled.pdb")

    logger.info("[Finished]")
Пример #9
0
def main():
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .dmdpy in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    logger.debug("Logger initialized")


    logger.debug("Parsing arguments")
    parser = argparse.ArgumentParser(description="Runs a DMD simulation")
    parser.add_argument('-n', nargs=1, dest="cores", type=int, required=True,
                        help='number of cores available')
    parser.add_argument('-t', nargs=1, dest="time", type=int, default=[-1], required=False,
                        help='time available to run job (hours)')
    parser.add_argument('-s', nargs=1, dest="scratch_directory", default='./', type=str, required=False,
                        help='scratch directory to run the job in')

    args = parser.parse_args()

    logger.debug("Proper arguments passed")

    # TODO have it receive argument for the number of cores, time to run, and a scratch directory

    try:
        logger.debug("Attempting to begin the calculation")
        c = phd3.dmd_simulation(cores=args.cores[0], time=args.time[0], run_dir=args.scratch_directory[0])

    except:
        logger.exception("Check the error")
        logger.error("Error on the calculation")
        sys.exit(1)
Пример #10
0
def main(_cores: int = None,
         _time: int = None,
         _nodes: int = 1,
         _sub: bool = True):
    # Load in the logger
    utilities.load_logger_config()
    logger = logging.getLogger(__name__)

    # Load in the configuration for this user
    logger.debug("Calling load_phd_config")
    config = utilities.load_phd_config()

    # Parse the configuration!
    logger.debug("Assigning variables for users queueing")
    max_nodes = config['QUEUING']['max_nodes']
    node_types = config['QUEUING']['node_types']
    max_time = config['QUEUING']['max_time']
    high_priority_nodes = config['QUEUING']['high_priority_nodes']

    # Creates a list of (num_cores, max_time)
    avail_nodes = list(zip(node_types, max_time))

    # Assign the vars passed
    logger.debug("Checking for any passed args")
    cores = _cores
    time = _time
    nodes = _nodes
    sub = _sub

    # If no args passed, check for command line args
    if cores is None or time is None:
        # Arg Parser Here
        logger.debug("Parsing args")
        parser = argparse.ArgumentParser(
            description="Submits a DMD simulation to a queuing system")
        parser.add_argument(
            "-N",
            dest="nodes",
            type=int,
            required=False,
            default=1,
            help=f"The number of nodes to run the DMD simulation on.")
        parser.add_argument(
            "-n",
            dest="cores",
            type=int,
            required=True,
            help=f"The number of cores per node to run the DMD simulation with."
        )
        parser.add_argument(
            "-t",
            dest="time",
            type=int,
            required=True,
            help="The amount of time to submit the job for (hours).")
        parser.add_argument("-sub",
                            dest="sub",
                            action='store_true',
                            help="Submit the job to the queueing system.")
        args = parser.parse_args()

        if args.nodes > max_nodes or args.cores > max(
                node_types) or args.time > max(max_time):
            logger.error(
                "Invalid args parsed based off of what user has specified in config file"
            )
            parser.print_help()
            sys.exit(1)

        cores = args.cores
        time = args.time
        nodes = args.nodes
        sub = args.sub

    # Finds the appropriate node to use
    logger.debug("Checking to ensure user has enough resources")
    big_enough_nodes = list(filter(lambda i: i[0] >= cores, avail_nodes))
    enough_time_nodes = list(filter(lambda i: i[1] >= time, big_enough_nodes))

    possible_nodes = sorted(enough_time_nodes, key=lambda x: x[0])
    if not possible_nodes:
        logger.error("User does not have access to resources")
        raise ValueError

    # Grab the minimum processing node
    node_type = min(possible_nodes)[0]
    logger.debug(f"Using node type: {node_type}")

    high_priority = True if node_type in high_priority_nodes else False

    # Create the jinja2 dictionary
    job_params = {
        "date": datetime.datetime.now(),
        "submit_dir": os.path.realpath(os.getcwd()),
        "node_type": node_type,
        "cores": cores,
        "nodes": nodes,
        "high_priority": ",highp" if high_priority else "",
        "user": os.environ["USER"],
        "job_name": os.path.basename(os.getcwd()),
        "run_script": os.path.join(os.path.dirname(__file__), "rundmd.py"),
        "time": time
    }

    # Make the submit script for the queuing system
    home = os.path.expanduser("~")
    path_to_template = os.path.join(home, ".config/phd3")

    if not os.path.isdir(path_to_template):
        path_to_template = os.path.join(home, ".phd3")

    logger.debug(f"Finding file in: {path_to_template} ")
    templateLoader = jinja2.FileSystemLoader(searchpath=path_to_template)
    templateEnv = jinja2.Environment(loader=templateLoader)
    TEMPLATE_FILE = "submit.j2"
    try:
        template = templateEnv.get_template(TEMPLATE_FILE)

    except jinja2.exceptions.TemplateNotFound:
        logger.error(f"Template file not found in {path_to_template}")
        raise

    logger.debug("Found template file!")

    # Now we dump text to a file
    outputText = template.render(job_params)
    try:
        logger.debug(f"Writing out submit file: {constants.SUBMIT_FILE_NAME}")
        with open(constants.SUBMIT_FILE_NAME, "w+") as submit_file:
            submit_file.write(outputText)

    except IOError:
        logger.exception("Could not write out submit file!")
        sys.exit(1)

    if not os.path.isfile("dmdinput.json"):
        logger.warn("[WARNING] ==>> No dmdinput.json file found")

    # Submit the Job!!
    if sub:
        logger.info("Submitting job to queue")
        with Popen(
                f"{config['QUEUING']['submit']} {constants.SUBMIT_FILE_NAME}",
                shell=True,
                universal_newlines=True,
                stdin=PIPE,
                stdout=PIPE,
                stderr=PIPE,
                bufsize=1,
                env=os.environ) as shell:
            while shell.poll() is None:
                logger.info(shell.stdout.readline().strip())
                logger.info(shell.stderr.readline().strip())
Пример #11
0
def main():
    # Load in the logger
    try:
        utilities.load_logger_config()

    except ValueError:
        print("CRITICAL: Created .phd3 in the root")
        sys.exit(1)

    logger = logging.getLogger(__name__)

    logger.debug("Parsing Arguments")

    parser = argparse.ArgumentParser(
        description="Relabels a pdb to a new atom labeling scheme")
    parser.add_argument("pdbfile", type=str, nargs=1, help="PDB file to edit")
    parser.add_argument("scheme",
                        type=str,
                        nargs=1,
                        help="Scheme to convert to")
    parser.add_argument("-o",
                        dest="outputFile",
                        default="",
                        type=str,
                        nargs=1,
                        required=False,
                        help="PDB file to write to")

    args = parser.parse_args()

    if not os.path.isfile(args.pdbfile[0]):
        logger.error(f"Could not find pdb: {args.pdbfile[0]}")
        sys.exit(1)

    logger.debug("Proper Arguments Passed")

    try:
        protein = utilities.load_pdb(args.pdbfile[0])

    except IOError:
        logger.error("Error in loading in the PDB file provided")
        sys.exit(1)

    protein.reformat_protein(relabel_protein=False)

    logger.debug("Relabeling")
    try:
        protein.relabel(args.scheme[0])

    except ValueError:
        logger.error("Error in relabeling the protein")
        raise

    if args.outputFile != "":
        logger.debug(f"Changing protein name to {args.outputFile[0]}")
        protein.name = args.outputFile[0]

    try:
        protein.write_pdb()

    except IOError:
        logger.error("Error writing the protein to pdb file")
        sys.exit(1)

    logger.debug("Finished")