Exemplo n.º 1
0
    def testWriteMeta(self):
        directory_name = None
        try:
            meta = read_meta(META_PATH)
            directory_name = tempfile.mkdtemp()
            write_meta(directory_name, meta, 8)
            result = read_meta(os.path.join(directory_name, "meta.08"))

            for i, mline in enumerate(result[LINES_KEY]):
                self.assertTrue(mline[0].startswith("08"))
                self.assertEqual(mline[1:], meta[LINES_KEY][i][1:])

        finally:
            shutil.rmtree(directory_name)
Exemplo n.º 2
0
    def testWriteMeta(self):
        directory_name = None
        try:
            meta = read_meta(META_PATH)
            directory_name = tempfile.mkdtemp()
            write_meta(directory_name, meta, 8)
            result = read_meta(os.path.join(directory_name, "meta.08"))

            for i, mline in enumerate(result[LINES_KEY]):
                self.assertTrue(mline[0].startswith("08"))
                self.assertEqual(mline[1:], meta[LINES_KEY][i][1:])

        finally:
            shutil.rmtree(directory_name)
Exemplo n.º 3
0
def block_average(meta_file,
                  steps,
                  tpl_dir=DEF_TPL_DIR,
                  overwrite=False,
                  base_dir=None):
    """
    Reads the given meta file, fetches the RMSD files in the inventory, computes
    the average over the given number of cycles, and writes each computed RMSD
    and meta file for each cycle.

    @param meta_file: The initial meta file.
    @param tpl_dir:
    @param steps: The number of averaging steps to perform.
    @param overwrite: Whether to overwrite existing files.
    @param base_dir: The base directory to write to (defaults to the meta file's dir)
    """
    meta = read_meta(meta_file)
    rmsd = read_meta_rmsd(meta)
    sub_tpl_base = read_tpl(os.path.join(tpl_dir, DEF_BASE_SUBMIT_TPL))
    sub_tpl_line = read_tpl(os.path.join(tpl_dir, DEF_LINE_SUBMIT_TPL))

    if not base_dir:
        base_dir = meta[DIR_KEY]
    for step in range(1, steps + 1):
        rmsd_base_dir = os.path.join(base_dir, "{:02d}".format(step))
        rmsd = rmsd_avg(rmsd, pair_avg)
        first_vals = six.next(six.itervalues(rmsd))
        if not first_vals:
            logger.info("No more values at step {}; stopping".format(step))
            break
        os.makedirs(rmsd_base_dir)
        write_avg_rmsd(rmsd_base_dir, rmsd, overwrite)
        write_meta(base_dir, meta, step, overwrite)
        write_submit(base_dir, sub_tpl_base, sub_tpl_line, step, overwrite)
Exemplo n.º 4
0
def block_average(meta_file, steps, tpl_dir=DEF_TPL_DIR, overwrite=False, base_dir=None):
    """
    Reads the given meta file, fetches the RMSD files in the inventory, computes
    the average over the given number of cycles, and writes each computed RMSD
    and meta file for each cycle.

    @param meta_file: The initial meta file.
    @param tpl_dir:
    @param steps: The number of averaging steps to perform.
    @param overwrite: Whether to overwrite existing files.
    @param base_dir: The base directory to write to (defaults to the meta file's dir)
    """
    meta = read_meta(meta_file)
    rmsd = read_meta_rmsd(meta)
    sub_tpl_base = read_tpl(os.path.join(tpl_dir, DEF_BASE_SUBMIT_TPL))
    sub_tpl_line = read_tpl(os.path.join(tpl_dir, DEF_LINE_SUBMIT_TPL))

    if not base_dir:
        base_dir = meta[DIR_KEY]
    for step in range(1, steps + 1):
        rmsd_base_dir = os.path.join(base_dir, "{:02d}".format(step))
        rmsd = rmsd_avg(rmsd, pair_avg)
        first_vals = six.next(six.itervalues(rmsd))
        if not first_vals:
            logger.info("No more values at step {}; stopping".format(step))
            break
        os.makedirs(rmsd_base_dir)
        write_avg_rmsd(rmsd_base_dir, rmsd, overwrite)
        write_meta(base_dir, meta, step, overwrite)
        write_submit(base_dir, sub_tpl_base, sub_tpl_line, step, overwrite)
Exemplo n.º 5
0
 def testReadMeta(self):
     meta = read_meta(META_PATH)
     self.assertEqual(META_PATH, meta[LOC_KEY])
     self.assertEqual(os.path.abspath(DATA_DIR), meta[DIR_KEY])
     for line in meta[LINES_KEY]:
         self.assertEqual(4, len(line))
         self.assertTrue('RMSD' in line[0])
Exemplo n.º 6
0
 def testReadMeta(self):
     meta = read_meta(META_PATH)
     self.assertEqual(META_PATH, meta[LOC_KEY])
     self.assertEqual(os.path.abspath(DATA_DIR), meta[DIR_KEY])
     for line in meta[LINES_KEY]:
         self.assertEqual(4, len(line))
         self.assertTrue('RMSD' in line[0])
Exemplo n.º 7
0
 def testReadRmsd(self):
     meta = read_meta(META_PATH)
     rmsd_data = read_meta_rmsd(meta)
     pat = re.compile("RMSD.+\.txt")
     for rfile, data in rmsd_data.items():
         self.assertTrue(pat.match(rfile))
         self.assertEqual(2000, len(data))
         for dval in data:
             self.assertIsInstance(dval, float)
Exemplo n.º 8
0
 def testReadRmsd(self):
     meta = read_meta(META_PATH)
     rmsd_data = read_meta_rmsd(meta)
     pat = re.compile("RMSD.+\.txt")
     for rfile, data in rmsd_data.items():
         self.assertTrue(pat.match(rfile))
         self.assertEqual(2000, len(data))
         for dval in data:
             self.assertIsInstance(dval, float)
Exemplo n.º 9
0
def rmsd_split(meta_file,
               steps,
               tpl_dir=DEF_TPL_DIR,
               overwrite=False,
               base_dir=None):
    """
    Reads the given meta file, fetches the RMSD files in the inventory, and creates a succession
    of directories that split the original RMSD files into a larger number of chunks for each step
    such that step 1 will create a split of 2 in 01_01 and 01_02, etc.

    :param meta_file: The initial meta file.
    :param steps: The number of averaging steps to perform.
    :param tpl_dir: The directory that contains the submit templates.
    :param overwrite: Whether to overwrite existing files.
    :param base_dir: The base directory to write to (defaults to the meta file's dir)
    """
    meta = read_meta(meta_file)
    rmsd = read_meta_rmsd(meta)
    sub_tpl_base = read_tpl(os.path.join(tpl_dir, DEF_BASE_SUBMIT_TPL))
    sub_tpl_line = read_tpl(os.path.join(tpl_dir, DEF_PART_LINE_SUBMIT_TPL))

    if not base_dir:
        base_dir = meta[DIR_KEY]
    for step in range(1, steps + 1):
        for rmsd_fname, data in rmsd.items():
            data_len = len(data)
            chunk_num = step + 1
            chunk_size = math.floor(data_len / chunk_num)
            logger.debug(STEP_DBG_MSG, step, data_len, rmsd_fname, chunk_num,
                         chunk_size)

            rmsd_chunks = [ch for ch in chunk(data, chunk_size, list)]
            for step_part in range(1, chunk_num + 1):
                rmsd_tgt_dir = os.path.join(
                    base_dir, SPLIT_DIR_FMT.format(step, step_part))
                if not os.path.exists(rmsd_tgt_dir):
                    os.makedirs(rmsd_tgt_dir)
                f_name = os.path.join(rmsd_tgt_dir, rmsd_fname)
                if allow_write(f_name, overwrite=overwrite):
                    write_rmsd(rmsd_chunks[step_part - 1], f_name)

        write_meta(base_dir, meta, step, overwrite)
        write_submit(base_dir, sub_tpl_base, sub_tpl_line, step, overwrite)
Exemplo n.º 10
0
def rmsd_split(meta_file, steps, tpl_dir=DEF_TPL_DIR, overwrite=False, base_dir=None):
    """
    Reads the given meta file, fetches the RMSD files in the inventory, and creates a succession
    of directories that split the original RMSD files into a larger number of chunks for each step
    such that step 1 will create a split of 2 in 01_01 and 01_02, etc.

    :param meta_file: The initial meta file.
    :param steps: The number of averaging steps to perform.
    :param tpl_dir: The directory that contains the submit templates.
    :param overwrite: Whether to overwrite existing files.
    :param base_dir: The base directory to write to (defaults to the meta file's dir)
    """
    meta = read_meta(meta_file)
    rmsd = read_meta_rmsd(meta)
    sub_tpl_base = read_tpl(os.path.join(tpl_dir, DEF_BASE_SUBMIT_TPL))
    sub_tpl_line = read_tpl(os.path.join(tpl_dir, DEF_PART_LINE_SUBMIT_TPL))

    if not base_dir:
        base_dir = meta[DIR_KEY]
    for step in range(1, steps + 1):
        for rmsd_fname, data in rmsd.items():
            data_len = len(data)
            chunk_num = step + 1
            chunk_size = math.floor(data_len / chunk_num)
            logger.debug(STEP_DBG_MSG, step, data_len, rmsd_fname, chunk_num, chunk_size)

            rmsd_chunks = [ch for ch in chunk(data, chunk_size, list)]
            for step_part in range(1, chunk_num + 1):
                rmsd_tgt_dir = os.path.join(base_dir, SPLIT_DIR_FMT.
                                            format(step, step_part))
                if not os.path.exists(rmsd_tgt_dir):
                    os.makedirs(rmsd_tgt_dir)
                f_name = os.path.join(rmsd_tgt_dir, rmsd_fname)
                if allow_write(f_name, overwrite=overwrite):
                    write_rmsd(rmsd_chunks[step_part - 1], f_name)

        write_meta(base_dir, meta, step, overwrite)
        write_submit(base_dir, sub_tpl_base, sub_tpl_line, step, overwrite)