Ejemplo n.º 1
0
Archivo: pdb.py Proyecto: i386uk/ssbio
def parse_mmtf_header(infile):
    """Parse an MMTF file and return basic header-like information.

    Args:
        infile (str): Path to MMTF file

    Returns:
        dict: Dictionary of parsed header

    Todo:
        - Can this be sped up by not parsing the 3D coordinate info somehow?
        - OR just store the sequences when this happens since it is already being parsed.

    """
    infodict = {}

    mmtf_decoder = mmtf.parse(infile)
    infodict['date'] = mmtf_decoder.deposition_date
    infodict['release_date'] = mmtf_decoder.release_date
    infodict['experimental_method'] = mmtf_decoder.experimental_methods
    infodict['resolution'] = mmtf_decoder.resolution
    infodict['description'] = mmtf_decoder.title

    group_name_exclude = ['HOH']
    chem_comp_type_exclude = ['l-peptide linking', 'peptide linking']
    chemicals = list(
        set([
            mmtf_decoder.group_list[idx]['groupName']
            for idx in mmtf_decoder.group_type_list
            if mmtf_decoder.group_list[idx]['chemCompType'].lower() not in
            chem_comp_type_exclude and mmtf_decoder.group_list[idx]
            ['groupName'] not in group_name_exclude
        ]))
    infodict['chemicals'] = chemicals
    return infodict
Ejemplo n.º 2
0
 def test_multi_model_write(self):
     """Test multiple models are written out correctly to MMTF."""
     parser = PDBParser()
     struc = parser.get_structure("1SSU_mod", "PDB/1SSU_mod.pdb")
     io = MMTFIO()
     io.set_structure(struc)
     filenumber, filename = tempfile.mkstemp()
     os.close(filenumber)
     try:
         io.save(filename)
         struc_back = MMTFParser.get_structure(filename)
         dict_back = mmtf.parse(filename)
         self.assertEqual(dict_back.num_models, 2)
         self.assertEqual(dict_back.num_chains, 4)
         self.assertEqual(dict_back.num_groups, 4)
         self.assertEqual(dict_back.num_atoms, 4)
         self.assertEqual(list(dict_back.x_coord_list),
                          [-1.058, -0.025, 7.024, 6.259])
         self.assertEqual(dict_back.chain_id_list, ["A", "B", "A", "B"])
         self.assertEqual(dict_back.chain_name_list, ["A", "B", "A", "B"])
         self.assertEqual(dict_back.chains_per_model, [2, 2])
         self.assertEqual(len(dict_back.group_list), 1)
         self.assertEqual(len(dict_back.group_id_list), 4)
         self.assertEqual(len(dict_back.group_type_list), 4)
         self.assertEqual(dict_back.groups_per_chain, [1, 1, 1, 1])
         self.assertEqual(len(dict_back.entity_list), 4)
     finally:
         os.remove(filename)
Ejemplo n.º 3
0
    def get_structure(file_path):
        """Get a structrue from a file - given a file path.

        :param file_path: the input file path
        :return: the structure
        """
        decoder = parse(file_path)
        return get_from_decoded(decoder)
Ejemplo n.º 4
0
 def round_trip(self,pdb_id):
     if _internet_on(BASE_URL):
         data_in = fetch(pdb_id)
         write_mmtf(pdb_id+".mmtf", data_in, MMTFDecoder.pass_data_on)
         data_rt = parse(pdb_id+".mmtf")
         self.check_equal(data_in, data_rt)
     else:
         print("Warning - cannot connect to "+BASE_URL)
Ejemplo n.º 5
0
    def get_structure(file_path):
        """Get a structure from a file - given a file path.

        :param file_path: the input file path
        :return: the structure

        """
        try:
            decoder = parse(file_path)
        except Exception:
            decoder = parse_gzip(file_path)
        return get_from_decoded(decoder)
Ejemplo n.º 6
0
 def test_write(self):
     """Test a simple structure object is written out correctly to MMTF."""
     parser = MMCIFParser()
     struc = parser.get_structure("1A8O", "PDB/1A8O.cif")
     io = MMTFIO()
     io.set_structure(struc)
     filenumber, filename = tempfile.mkstemp()
     os.close(filenumber)
     try:
         io.save(filename)
         struc_back = MMTFParser.get_structure(filename)
         dict_back = mmtf.parse(filename)
         self.assertEqual(dict_back.structure_id, "1A8O")
         self.assertEqual(dict_back.num_models, 1)
         self.assertEqual(dict_back.num_chains, 2)
         self.assertEqual(dict_back.num_groups, 158)
         self.assertEqual(dict_back.num_atoms, 644)
         self.assertEqual(len(dict_back.x_coord_list), 644)
         self.assertEqual(len(dict_back.y_coord_list), 644)
         self.assertEqual(len(dict_back.z_coord_list), 644)
         self.assertEqual(len(dict_back.b_factor_list), 644)
         self.assertEqual(len(dict_back.occupancy_list), 644)
         self.assertEqual(dict_back.x_coord_list[5], 20.022)
         self.assertEqual(set(dict_back.ins_code_list), {"\x00"})
         self.assertEqual(set(dict_back.alt_loc_list), {"\x00"})
         self.assertEqual(list(dict_back.atom_id_list), list(range(1, 645)))
         self.assertEqual(list(dict_back.sequence_index_list),
                          list(range(70)) + [-1] * 88)
         self.assertEqual(dict_back.chain_id_list, ["A", "B"])
         self.assertEqual(dict_back.chain_name_list, ["A", "A"])
         self.assertEqual(dict_back.chains_per_model, [2])
         self.assertEqual(len(dict_back.group_list), 21)
         self.assertEqual(len(dict_back.group_id_list), 158)
         self.assertEqual(len(dict_back.group_type_list), 158)
         self.assertEqual(dict_back.groups_per_chain, [70, 88])
         self.assertEqual(len(dict_back.entity_list), 2)
         self.assertEqual(dict_back.entity_list[0]["type"], "polymer")
         self.assertEqual(dict_back.entity_list[0]["chainIndexList"], [0])
         self.assertEqual(
             dict_back.entity_list[0]["sequence"],
             "MDIRQGPKEPFRDYVDRFYKTLRAEQASQEVKNWMTETLLVQNANPDCKTILKALGPGATLEEMMTACQG",
         )
         self.assertEqual(dict_back.entity_list[1]["type"], "water")
         self.assertEqual(dict_back.entity_list[1]["chainIndexList"], [1])
         self.assertEqual(dict_back.entity_list[1]["sequence"], "")
     finally:
         os.remove(filename)
Ejemplo n.º 7
0
    def from_file(cls, filename):
        """
        Initialize structure from MMTF file

        Parameters
        ----------
        filename : str
            Path of MMTF file

        Returns
        -------
        PDB
            initialized PDB structure
        """
        try:
            return cls(parse(filename))
        except FileNotFoundError as e:
            raise ResourceError(
                "Could not find file {}".format(filename)
            ) from e
Ejemplo n.º 8
0
def to_mmtf_MMTFDecoder(item,
                        atom_indices='all',
                        structure_indices='all',
                        check=True):

    if check:

        digest_item(item, 'file:mmtf')
        atom_indices = digest_atom_indices(atom_indices)
        structure_indices = digest_structure_indices(structure_indices)

    from mmtf import parse
    from ..mmtf_MMTFDecoder import extract as extract_mmtf_MMTFDecoder

    tmp_item = parse(item)
    tmp_item = extract_mmtf_MMTFDecoder(tmp_item,
                                        atom_indices=atom_indices,
                                        structure_indices=structure_indices,
                                        copy_if_all=False,
                                        check=False)

    return tmp_item
Ejemplo n.º 9
0
    def test_selection_write(self):
        """Test the use of a Select subclass when writing MMTF files."""
        struc = MMTFParser.get_structure("PDB/4CUP.mmtf")
        io = MMTFIO()
        io.set_structure(struc)
        filenumber, filename = tempfile.mkstemp()
        os.close(filenumber)

        class CAonly(Select):
            """Accepts only CA residues."""
            def accept_atom(self, atom):
                if atom.name == "CA" and atom.element == "C":
                    return 1

        try:
            io.save(filename, CAonly())
            struc_back = MMTFParser.get_structure(filename)
            dict_back = mmtf.parse(filename)
            self.assertEqual(dict_back.num_atoms, 116)
            self.assertEqual(len(dict_back.x_coord_list), 116)
            self.assertEqual(set(dict_back.alt_loc_list), {"\x00", "A", "B"})
        finally:
            os.remove(filename)
Ejemplo n.º 10
0
 def test_round_trip(self):
     data_in = parse_gzip("mmtf/tests/testdatastore/4CUP.mmtf.gz")
     write_mmtf("test.mmtf", data_in, MMTFDecoder.pass_data_on)
     data_rt = parse("test.mmtf")
     self.check_equal(data_in, data_rt)
Ejemplo n.º 11
0
def _parse_mmtf(fn):
    if fn.endswith('gz'):
        return mmtf.parse_gzip(fn)
    else:
        return mmtf.parse(fn)
Ejemplo n.º 12
0
 def setUp(self, mock_fetch):
     top = mmtf.parse(MMTF)
     mock_fetch.return_value = top
     self.u = mda.fetch_mmtf('173D')  # string is irrelevant
Ejemplo n.º 13
0
 def setUp(self):
     top = mmtf.parse(MMTF)
     self.u = mda.Universe(top)
Ejemplo n.º 14
0
    def u(self):
        top = mmtf.parse(MMTF)
        with mock.patch('mmtf.fetch') as mock_fetch:
            mock_fetch.return_value = top

            return mda.fetch_mmtf('173D')  # string is irrelevant
Ejemplo n.º 15
0
 def test_encoder(self):
     decoded = parse("mmtf/tests/testdatastore/4CUP.mmtf")
     decoded.encode_data()
Ejemplo n.º 16
0
 def test_round_trip(self):
     decoded = parse("mmtf/tests/testdatastore/4CUP.mmtf")
     packed = decoded.get_msgpack()
     decoded.decode_data(msgpack.unpackb(packed))
Ejemplo n.º 17
0
 def test_decoder(self):
     decoded = parse("mmtf/tests/testdatastore/4CUP.mmtf")
Ejemplo n.º 18
0
    def u(self):
        top = mmtf.parse(MMTF)
        with mock.patch('mmtf.fetch') as mock_fetch:
            mock_fetch.return_value = top

            return mda.fetch_mmtf('173D')  # string is irrelevant
Ejemplo n.º 19
0
 def u(self):
     return mda.Universe(mmtf.parse(MMTF))
Ejemplo n.º 20
0
 def u(self):
     return mda.Universe(mmtf.parse(MMTF))
Ejemplo n.º 21
0
def _parse_mmtf(fn):
    if fn.endswith('gz'):
        return mmtf.parse_gzip(fn)
    else:
        return mmtf.parse(fn)
Ejemplo n.º 22
0
 def round_trip(self,pdb_id):
     data_in = fetch(pdb_id)
     write_mmtf(pdb_id+".mmtf", data_in, MMTFDecoder.pass_data_on)
     data_rt = parse(pdb_id+".mmtf")
     self.check_equal(data_in, data_rt)