Ejemplo n.º 1
0
    def test_can_save_multi_assembly_pdbs(self):
        pdb = atomium.open("tests/integration/files/1xda.pdb")

        pdb.save("tests/integration/files/1XDA2.pdb")
        self.check_files_the_same("1XDA2.pdb", "1xda_output.pdb")

        new = atomium.open("tests/integration/files/1XDA2.pdb")
Ejemplo n.º 2
0
    def test_can_save_alt_loc_pdbs(self):
        pdb = atomium.open("tests/integration/files/1cbn.pdb")

        pdb.save("tests/integration/files/1CBN2.pdb")
        self.check_files_the_same("1CBN2.pdb", "1cbn_output.pdb")

        new = atomium.open("tests/integration/files/1CBN2.pdb")
        chain = pdb.model.chain()
        residue1, residue2, residue3 = chain[:3]
        self.assertEqual(len(residue1.atoms()), 16)
        self.assertEqual(len(residue2.atoms()), 14)
        self.assertEqual(len(residue3.atoms()), 10)
Ejemplo n.º 3
0
    def test_can_save_xyz_file(self):
        # Open and save file
        xyz = atomium.open("tests/integration/files/glucose.xyz")
        xyz.save("tests/integration/files/glucose2.xyz")

        # The saved xyz is correct
        with open("tests/integration/files/glucose2.xyz") as f:
            new = [l.strip() for l in f.readlines()]
        with open("tests/integration/files/glucose.xyz") as f:
            old = [l.strip() for l in f.readlines()]
        self.assertEqual(old[:-12], new[:-12])
        self.assertEqual(set(old[-12:]), set(new[-12:]))
        new = atomium.open("tests/integration/files/glucose2.xyz")
        model = xyz.model
        self.assertAlmostEqual(model.mass, 168, delta=0.5)
Ejemplo n.º 4
0
def parse_xyz(path: Union[str, atomium.structures.Model],
              chain: Union[str, None] = None,
              get_pdb_ss: bool = False) -> (np.ndarray, List[str]):
    '''
    params:
        chain (str, None) default None if str read chain if None read all
    return:
        ca_xyz (torch.Tensor), sequence (list)
        
    '''
    if isinstance(path, str):
        if not os.path.isfile(path):
            raise KeyError(f'path: {path} doesn\'t exist')
        else:
            data = atomium.open(path).model
            chain = data.chain(chain) if chain is not None else data
    elif isinstance(path, atomium.structures.Model):
        chain = path.chain(chain) if chain is not None else path
    else:
        raise KeyError(f'invalid path arg type {path}')
    sequence = list(map(lambda x: x.code, chain.residues()))
    ca_xyz = list(map(get_CA_xyz, chain.residues()))
    ca_xyz = np.array(ca_xyz, dtype=np.float32)
    if get_pdb_ss:
        secondary = list(map(get_ss_label, chain.residues()))
        return ca_xyz, sequence, secondary
    else:
        return ca_xyz, sequence
Ejemplo n.º 5
0
    def atomium_parse(self,file):
        try:
            struc = atomium.open(str(file))
        except FileNotFoundError:
            struc = atomium.fetch(str(file))

        self.coord_dict = {}
        for chain in struc.model.chains():
            coords = []
            for res in chain:
                for atom in res.atoms():
                    if (atom.name == 'CA' and atom.het.code != 'X'):
                        coords.append(atom.location)
                        self.atoms.append({'res_id':res.id, 'res':toggle_code(res.code, '3to1'), 'atom_id':atom.id, 'coords':atom.location, 'chain':chain.id})
            self.coord_dict[chain.internal_id] = np.asarray(coords)

        self.er_dict = {}
        for chain_id, coords in self.coord_dict.items():
            self.er_dict[chain_id] = eigenrank(coords)

        # picking first chain
        first_chain = sorted(self.coord_dict.keys())[0]
        self.coordinates = self.coord_dict[first_chain]
        self.l = self.coordinates.shape[0]
        self.er = self.er_dict[first_chain]
Ejemplo n.º 6
0
 def check_file_saving(self, filename):
     f = atomium.open("tests/integration/files/" + filename)
     f.model.save("tests/integration/files/saved_" + filename)
     f2 = atomium.open("tests/integration/files/saved_" + filename)
     self.assertTrue(f.model.equivalent_to(f2.model))
     self.assertEqual(len(f.model.chains()), len(f2.model.chains()))
     for chain1, chain2 in zip(sorted(f.model.chains(), key=lambda c: c.id),
      sorted(f2.model.chains(), key=lambda c: c.id)):
         self.assertEqual(chain1.sequence, chain2.sequence)
         self.assertEqual(chain1.id, chain2.id)
         self.assertTrue(chain1.equivalent_to(chain2))
     for lig1, lig2 in zip(sorted(f.model.ligands(), key=lambda c: c.id),
      sorted(f2.model.ligands(), key=lambda c: c.id)):
         self.assertEqual(lig1.name, lig2.name)
         self.assertEqual(lig1.id, lig2.id)
         self.assertTrue(lig1.equivalent_to(lig2))
Ejemplo n.º 7
0
 def test_1ej6_mmcif(self):
     d = atomium.open("tests/integration/files/1ej6.cif", data_dict=True)
     self.assertEqual(len(d["geometry"]["assemblies"]), 6)
     self.assertEqual(
         d["geometry"]["assemblies"][1], {
             "id":
             2,
             "software":
             None,
             "delta_energy":
             None,
             "buried_surface_area":
             None,
             "surface_area":
             None,
             "transformations": [{
                 "chains": ["A", "B", "C", "D", "E", "F"],
                 "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [-0.0, 0.0, -0.0]
             }]
         })
     self.assertEqual(
         len(d["geometry"]["assemblies"][0]["transformations"]), 60)
     self.assertEqual(
         len(d["geometry"]["assemblies"][2]["transformations"]), 5)
     self.assertEqual(
         len(d["geometry"]["assemblies"][3]["transformations"]), 6)
     self.assertEqual(
         len(d["geometry"]["assemblies"][4]["transformations"]), 1)
     self.assertEqual(
         len(d["geometry"]["assemblies"][5]["transformations"]), 6)
Ejemplo n.º 8
0
 def test_1msh_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/1msh." + e, data_dict=True)
     self.assertEqual(len(d["models"]), 30)
     for m in d["models"][:-1]:
         self.assertEqual(len(m["polymer"]), 2)
     self.assertEqual(len(d["models"][-1]["polymer"]), 1)
Ejemplo n.º 9
0
 def test_5xme_pdb(self):
     pdb = atomium.open("tests/integration/files/5xme.pdb")
     self.assertEqual(pdb.resolution, None)
     self.assertEqual(pdb.assemblies, [{
         "id":
         1,
         "software":
         None,
         "delta_energy":
         None,
         "buried_surface_area":
         None,
         "surface_area":
         None,
         "transformations": [{
             "chains": ["A"],
             "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
             "vector": [0.0, 0.0, 0.0]
         }]
     }])
     models = pdb.models
     self.assertEqual(len(models), 10)
     self.assertIs(pdb.model, pdb.models[0])
     x_values = [
         33.969, 34.064, 37.369, 36.023, 35.245, 35.835, 37.525, 35.062,
         36.244, 37.677
     ]
     all_atoms = set()
     for x, model in zip(x_values, models):
         self.assertEqual(len(model.atoms()), 1827)
         all_atoms.update(model.atoms())
         atom = model.atom(1)
         self.assertEqual(atom.x, x)
         self.assertEqual(len(atom.bonded_atoms), 1)
     self.assertEqual(len(all_atoms), 18270)
Ejemplo n.º 10
0
 def test_1lol_pdb(self):
     d = atomium.open("tests/integration/files/1lol.pdb", file_dict=True)
     self.assertEqual(
         d["HEADER"],
         ["    LYASE                                   06-MAY-02   1LOL"])
     self.assertEqual(len(d["MODEL"][0]["ATOM"]), 3191)
     self.assertEqual(len(d["REMARK"].keys()), 16)
Ejemplo n.º 11
0
    def atomium_parse(self,file):
        try:
            struc = atomium.open(str(file))
        except FileNotFoundError:
            struc = atomium.fetch(str(file))

        self.coord_dict = {}
        for chain in struc.model.chains():
            coords = []
            for res in chain:
                for atom in res.atoms():
                    if (atom.name == 'CA' and atom.het.code != 'X'):
                        coords.append(atom.location)
                        self.atoms.append({'res_id':int(res.id.split('.')[-1]), 'res':toggle_code(res.code, '3to1'), 'atom_id':atom.id, 'coords':atom.location, 'chain':chain.id})
            self.coord_dict[chain.internal_id] = np.asarray(coords)

        self.er_dict = {}
        self.lr_dict = {}
        for chain_id, coords in self.coord_dict.items():
            self.er_dict[chain_id], self.lr_dict[chain_id] = eigenrank(coords)
            break # for only first chain is selected below

        # picking first chain
        first_chain = sorted(self.coord_dict.keys())[0]
        self.coordinates = self.coord_dict[first_chain]
        self.l = self.coordinates.shape[0]
        if self.l < 10:
            print('{} is too short for a sensible EigenRank ({})'.format(self.id, self.l))
        else:
            self.er = self.er_dict[first_chain]
            self.lr = self.lr_dict[first_chain]
Ejemplo n.º 12
0
 def test_1m4x_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/1m4x." + e, data_dict=True)
         self.assertEqual(len(d["geometry"]["assemblies"]), 1 if e == "pdb" else 7)
         self.assertEqual(len(d["geometry"]["assemblies"][0]["transformations"]), 1680)
         if e != "pdb":
             self.assertEqual(len(d["geometry"]["assemblies"][2]["transformations"]), 140)
             self.assertEqual(len(d["geometry"]["assemblies"][3]["transformations"]), 168)
             self.assertEqual(len(d["geometry"]["assemblies"][4]["transformations"]), 30)
             self.assertEqual(len(d["geometry"]["assemblies"][5]["transformations"]), 66)
         self.assertEqual(
          d["geometry"]["assemblies"][0]["transformations"][29]["chains"],
          ["A", "B", "C"]
         )
         self.assertAlmostEqual(
          d["geometry"]["assemblies"][0]["transformations"][29]["vector"][0],
          -18.95, delta=0.005
         )
         self.assertAlmostEqual(
          d["geometry"]["assemblies"][0]["transformations"][29]["matrix"][0][0],
          0.812, delta=0.005
         )
         self.assertAlmostEqual(
          d["geometry"]["assemblies"][0]["transformations"][29]["matrix"][-1][-1],
          0.286, delta=0.005
         )
Ejemplo n.º 13
0
 def test_glucose_xyz(self):
     d = atomium.open("tests/integration/files/glucose.xyz", data_dict=True)
     self.assertEqual(d["description"]["title"], "glucose from 2gbp")
     self.assertEqual(len(d["models"]), 1)
     model = d["models"][0]
     for key in ["residues", "ligands", "chains", "connections"]:
         self.assertEqual(model[key], [])
     self.assertEqual(len(model["atoms"]), 12)
     self.assertEqual(
         model["atoms"][0], {
             "id": 0,
             "element": "C",
             "name": None,
             "x": 38.553,
             "y": 30.4,
             "z": 50.259,
             "bfactor": None,
             "charge": 0,
             "residue_id": None,
             "residue_name": None,
             "residue_insert": "",
             "chain_id": None,
             "occupancy": 1,
             "alt_loc": None,
             "anisotropy": [],
             "polymer": False,
             "full_res_id": None
         })
Ejemplo n.º 14
0
 def test_1xda_mmcif(self):
     d = atomium.open("tests/integration/files/1xda.cif", data_dict=True)
     self.assertEqual(len(d["geometry"]["assemblies"]), 12)
     self.assertEqual(
         d["geometry"]["assemblies"][0], {
             "id":
             1,
             "software":
             "PISA",
             "delta_energy":
             -7.0,
             "buried_surface_area":
             1720.0,
             "surface_area":
             3980.0,
             "transformations": [{
                 "chains": ["A", "B", "I", "J", "K", "L", "Y", "Z"],
                 "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }]
         })
     self.assertEqual(
         d["geometry"]["assemblies"][4], {
             "id":
             5,
             "software":
             "PISA",
             "delta_energy":
             -332.0,
             "buried_surface_area":
             21680.0,
             "surface_area":
             12240.0,
             "transformations": [{
                 "chains": [
                     "E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W",
                     "X", "CA", "DA", "EA", "FA"
                 ],
                 "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }, {
                 "chains": [
                     "E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W",
                     "X", "CA", "DA", "EA", "FA"
                 ],
                 "matrix": [[-0.5, -0.8660254038, 0.0],
                            [0.8660254038, -0.5, 0.0], [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }, {
                 "chains": [
                     "E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W",
                     "X", "CA", "DA", "EA", "FA"
                 ],
                 "matrix": [[-0.5, 0.8660254038, 0.0],
                            [-0.8660254038, -0.5, 0.0], [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }]
         })
Ejemplo n.º 15
0
 def test_1cbn_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/1cbn.cif", data_dict=True)
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.1"]["atoms"][1], {
          "element": "N", "name": "N", "x": 16.864, "y": 14.059, "z": 3.442,
          "bvalue": 6.22, "charge": 0.0, "occupancy": 0.8, "alt_loc": "A",
          "anisotropy": [0, 0, 0, 0, 0, 0],
         })
Ejemplo n.º 16
0
 def check_file_saving(self, filename):
     f = atomium.open("tests/integration/files/" + filename)
     f.model.save("tests/integration/files/saved_" + filename)
     f2 = atomium.open("tests/integration/files/saved_" + filename)
     self.assertEqual(f.model, f2.model)
     self.assertEqual(len(f.model.chains()), len(f2.model.chains()))
     for chain1, chain2 in zip(
             sorted(f.model.chains(), key=lambda c: c.id),
             sorted(f2.model.chains(), key=lambda c: c.id)):
         self.assertEqual(chain1.sequence, chain2.sequence)
         self.assertEqual(chain1.id, chain2.id)
         self.assertEqual(chain1, chain2)
     for lig1, lig2 in zip(sorted(f.model.ligands(), key=lambda c: c.id),
                           sorted(f2.model.ligands(), key=lambda c: c.id)):
         self.assertEqual(lig1.name, lig2.name)
         self.assertEqual(lig1.id, lig2.id)
         self.assertEqual(lig1, lig2)
Ejemplo n.º 17
0
 def test_1xda_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/1xda." + e, data_dict=True)
         self.assertEqual(len(d["geometry"]["assemblies"]), 12)
         self.assertEqual(d["geometry"]["assemblies"][0], {
          "id": 1,
          "software": None if e == "mmtf" else "PISA",
          "delta_energy": None if e == "mmtf" else -7.0,
          "buried_surface_area": None if e == "mmtf" else 1720.0,
          "surface_area": None if e == "mmtf" else 3980.0,
          "transformations": [{
           "chains": ["A", "B"] if e == "pdb" else ["A", "B", "I", "J", "K", "L", "Y", "Z"],
           "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
           "vector": [0.0, 0.0, 0.0]
          }]
         })
         if e == "pdb":
             self.assertEqual(d["geometry"]["assemblies"][4], {
              "id": 5,
              "software": "PISA",
              "delta_energy": -332.0,
              "buried_surface_area": 21680.0,
              "surface_area": 12240.0,
              "transformations": [{
               "chains": ["E", "F", "G", "H"],
               "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }, {
               "chains": ["E", "F", "G", "H"],
               "matrix": [[-0.5, -0.866025, 0.0], [0.866025, -0.5, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }, {
               "chains": ["E", "F", "G", "H"],
               "matrix": [[-0.5, 0.866025, 0.0], [-0.866025, -0.5, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }]
             })
         else:
             self.assertEqual(d["geometry"]["assemblies"][4], {
              "id": 5,
              "software": None if e == "mmtf" else "PISA",
              "delta_energy": None if e == "mmtf" else -332.0,
              "buried_surface_area": None if e == "mmtf" else 21680.0,
              "surface_area": None if e == "mmtf" else 12240.0,
              "transformations": [{
               "chains": ["E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W", "X", "CA", "DA", "EA", "FA"],
               "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }, {
               "chains": ["E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W", "X", "CA", "DA", "EA", "FA"],
               "matrix": [[-0.5, -0.8660254038, 0.0], [0.8660254038, -0.5, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }, {
               "chains": ["E", "F", "G", "H", "Q", "R", "S", "T", "U", "V", "W", "X", "CA", "DA", "EA", "FA"],
               "matrix": [[-0.5, 0.8660254038, 0.0], [-0.8660254038, -0.5, 0.0], [0.0, 0.0, 1.0]],
               "vector": [0.0, 0.0, 0.0]
              }]
             })
Ejemplo n.º 18
0
    def test_can_save_multi_model_pdb(self):
        pdb = atomium.open("tests/integration/files/5xme.pdb")
        while pdb.keywords:
            pdb.keywords.pop()
        for k in ["INTEGRAL"] * 10:
            pdb.keywords.append(k)

        pdb.save("tests/integration/files/5XME2.pdb")
        self.check_files_the_same("5XME2.pdb", "5xme_output.pdb")
        new = atomium.open("tests/integration/files/5XME2.pdb")
        models = new.models
        self.assertEqual(len(models), 10)
        x_values = [
            33.969, 34.064, 37.369, 36.023, 35.245, 35.835, 37.525, 35.062,
            36.244, 37.677
        ]
        for x, model in zip(x_values, models):
            self.assertEqual(len(model.atoms()), 1827)
Ejemplo n.º 19
0
    def test_can_save_structures_to_pdb(self):
        pdb = atomium.open("tests/integration/files/1lol.pdb")

        # Save chains
        for chain in pdb.model.chains():
            chain.save("tests/integration/files/chain{}.pdb".format(chain.id))

        self.check_files_the_same("chainA.pdb", "chaina_output.pdb")
        self.check_files_the_same("chainB.pdb", "chainb_output.pdb")
        new = atomium.open("tests/integration/files/chainA.pdb")
        model = new.model
        self.assertEqual(len(model.chains()), 1)

        # Save molecules
        pdb.model.ligand("A:5001").save("tests/integration/files/5001.pdb")
        self.check_files_the_same("5001.pdb", "5001_output.pdb")
        new = atomium.open("tests/integration/files/5001.pdb")
        model = new.model
        self.assertEqual(len(model.atoms()), 6)
Ejemplo n.º 20
0
 def test_1cbn_mmcif(self):
     pdb = atomium.open("tests/integration/files/1cbn.cif")
     chain = pdb.model.chain()
     residue1, residue2, residue3 = chain[:3]
     self.assertEqual(len(residue1.atoms()), 16)
     self.assertEqual(len(residue2.atoms()), 14)
     self.assertEqual(len(residue3.atoms()), 10)
     for residue in chain[:3]:
         for name in ["N", "C", "CA", "CB"]:
             self.assertEqual(len(residue.atoms(name=name)), 1)
Ejemplo n.º 21
0
 def test_4y60_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/4y60.cif", data_dict=True)
         self.assertEqual(d["models"][0]["polymer"]["A"]["sequence"][:2], "CA")
         if e != "mmtf":
             self.assertEqual(d["models"][0]["polymer"]["C"]["residues"]["C.0"]["atoms"][1], {
              "element": "N", "name": "N", "x": 43.447, "y": -56.622, "z": -20.561,
              "bvalue": 56.53, "charge": 0.0, "occupancy": 1.0, "alt_loc": None,
              "anisotropy": [0.9838, 0.7489, 0.4152, -0.1159, -0.0115, -0.2655],
             })
Ejemplo n.º 22
0
 def test_5xme_mmcif(self):
     pdb = atomium.open("tests/integration/files/5xme.cif")
     models = pdb.models
     self.assertEqual(len(models), 10)
     self.assertIs(pdb.model, pdb.models[0])
     all_atoms = set()
     for model in models:
         self.assertEqual(len(model.atoms()), 1827)
         all_atoms.update(model.atoms())
     self.assertEqual(len(all_atoms), 18270)
Ejemplo n.º 23
0
 def test_can_save_1grm(self):
     self.check_file_saving("1grm.pdb")
     f = atomium.open("tests/integration/files/1grm.pdb")
     f.model.save("tests/integration/files/saved_1grm.pdb")
     with open("tests/integration/files/1grm.pdb") as f:
         old_text = f.read()
         old_text = old_text[:old_text.find("ENDMDL")]
         old_remark_count = old_text.count("HETATM")
     with open("tests/integration/files/saved_1grm.pdb") as f:
         new_remark_count = f.read().count("HETATM")
     self.assertEqual(old_remark_count, new_remark_count)
Ejemplo n.º 24
0
 def test_5xme_file_dict(self):
     d = atomium.open("tests/integration/files/5xme.pdb", file_dict=True)
     self.assertEqual(d["HEADER"], [
      "HEADER    APOPTOSIS                               15-MAY-17   5XME"
     ])
     self.assertEqual(len(d["MODEL"]), 10)
     self.assertEqual(len(d["MODEL"][0]), 1828)
     self.assertEqual(
      d["MODEL"][1][4],
      "ATOM      5  CB  ALA A 199      36.093  -8.556  -1.452  1.00  0.00           C"
     )
Ejemplo n.º 25
0
 def test_1cbn(self):
     for e in ["cif", "mmtf", "pdb"]:
         f = atomium.open("tests/integration/files/1cbn." + e)
         chain = f.model.chain()
         residue1, residue2, residue3 = chain[:3]
         self.assertEqual(len(residue1.atoms()), 16)
         self.assertEqual(len(residue2.atoms()), 14)
         self.assertEqual(len(residue3.atoms()), 10)
         for residue in chain[:3]:
             for name in ["N", "C", "CA", "CB"]:
                 self.assertEqual(len(residue.atoms(name=name)), 1)
Ejemplo n.º 26
0
 def test_5xme_file_dict(self):
     d = atomium.open("tests/integration/files/5xme.pdb", file_dict=True)
     self.assertEqual(d["HEADER"], [
         "HEADER    APOPTOSIS                               15-MAY-17   5XME"
     ])
     self.assertEqual(len(d["MODEL"]), 10)
     self.assertEqual(len(d["MODEL"][0]), 1828)
     self.assertEqual(
         d["MODEL"][1][4],
         "ATOM      5  CB  ALA A 199      36.093  -8.556  -1.452  1.00  0.00           C"
     )
 def test_1cbn(self):
     for e in ["cif", "mmtf", "pdb"]:
         f = atomium.open("tests/integration/files/1cbn." + e)
         chain = f.model.chain()
         residue1, residue2, residue3 = chain[:3]
         self.assertEqual(len(residue1.atoms()), 16)
         self.assertEqual(len(residue2.atoms()), 14)
         self.assertEqual(len(residue3.atoms()), 10)
         for residue in chain[:3]:
             for name in ["N", "C", "CA", "CB"]:
                 self.assertEqual(len(residue.atoms(name=name)), 1)
Ejemplo n.º 28
0
 def test_1xda_pdb(self):
     d = atomium.open("tests/integration/files/1xda.pdb", data_dict=True)
     self.assertEqual(len(d["geometry"]["assemblies"]), 12)
     self.assertEqual(
         d["geometry"]["assemblies"][0], {
             "id":
             1,
             "software":
             "PISA",
             "delta_energy":
             -7.0,
             "buried_surface_area":
             1720.0,
             "surface_area":
             3980.0,
             "transformations": [{
                 "chains": ["A", "B"],
                 "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }]
         })
     self.assertEqual(
         d["geometry"]["assemblies"][4], {
             "id":
             5,
             "software":
             "PISA",
             "delta_energy":
             -332.0,
             "buried_surface_area":
             21680.0,
             "surface_area":
             12240.0,
             "transformations": [{
                 "chains": ["E", "F", "G", "H"],
                 "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }, {
                 "chains": ["E", "F", "G", "H"],
                 "matrix": [[-0.5, -0.866025, 0.0], [0.866025, -0.5, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }, {
                 "chains": ["E", "F", "G", "H"],
                 "matrix": [[-0.5, 0.866025, 0.0], [-0.866025, -0.5, 0.0],
                            [0.0, 0.0, 1.0]],
                 "vector": [0.0, 0.0, 0.0]
             }]
         })
Ejemplo n.º 29
0
    def test_1lol_pdb(self):
        pdb = atomium.open("tests/integration/files/1lol.pdb")

        # Can be saved
        pdb.code = "9SAM"
        pdb.deposition_date = datetime(1990, 9, 1).date()
        pdb.title = (
            "FOR IN THAT SLEEP OF DEATH, WHAT DREAMS MAY COME, WHEN WE HAVE " +
            "SHUFFLED OFF THIS MORTAL COIL MUST GIVE US PAUSE")
        pdb.source_organism = "H**O SAPIENS"
        pdb.expression_system = "COOL NEW ORGANISM"
        pdb.technique = "MEME DIFFRACTION"
        pdb.model.chain("B").rep_sequence = ""
        while pdb.keywords:
            pdb.keywords.pop()
        for k in ["AMAZING", "SUPERB", "WOW"]:
            pdb.keywords.append(k)
        pdb.save("tests/integration/files/1LOL2.pdb")
        self.check_files_the_same("1LOL2.pdb", "1lol_output.pdb")

        new = atomium.open("tests/integration/files/1LOL2.pdb")
        model = new.model
        self.assertAlmostEqual(model.mass, 46018.5, delta=0.005)
Ejemplo n.º 30
0
 def test_5xme_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/5xme." + e, data_dict=True)
         self.assertEqual(d["experiment"]["technique"], "SOLUTION NMR")
         self.assertEqual(d["quality"], {
          "resolution": None, "rvalue": None, "rfree": None
         })
         self.assertEqual(len(d["models"]), 10)
         for model in d["models"][1:]:
             self.assertEqual(len(model["polymer"]), len(d["models"][0]["polymer"]))
             self.assertEqual(len(model["non-polymer"]), len(d["models"][0]["non-polymer"]))
             self.assertEqual(len(model["water"]), len(d["models"][0]["water"]))
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.199"]["atoms"][1]["x"], 33.969)
         self.assertEqual(d["models"][1]["polymer"]["A"]["residues"]["A.199"]["atoms"][1 if e == "pdb" else 1828]["x"], 34.064)
 def test_4opj(self):
     for e in ["cif", "mmtf", "pdb"]:
         f = atomium.open("tests/integration/files/4opj." + e)
         if e == "cif":
             self.assertEqual(
              f.model.residue("B.6").full_name,
              "(2R,3aS,4aR,5aR,5bS)-2-(6-amino-9H-purin-9-yl)-3a-hydroxyhexahydrocyclopropa[4,5]cyclopenta[1,2-b]furan-5a(4H)-yl dihydrogen phosphate"
             )
         elif e =="mmtf":
             self.assertEqual(f.model.residue("B.6").full_name, "TCY")
         else:
             self.assertEqual(
              f.model.residue("B.6").full_name,
              "(2R,3AS,4AR,5AR,5BS)-2-(6-AMINO-9H-PURIN-9-YL)-3A-HYDROXYHEXAHYDROCYCLOPROPA[4,5]CYCLOPENTA[1,2-B]FURAN-5A(4H)-YL DIHYDROGEN PHOSPHATE"
             )
Ejemplo n.º 32
0
    def test_1xda(self):
        for e in ["cif", "mmtf", "pdb"]:
            f = atomium.open("tests/integration/files/1xda." + e)
            self.assertEqual(len(f.model.atoms()), 1842)
            self.assertEqual(len(f.model.atoms(is_metal=True)), 4)
            self.assertEqual(len(f.model.atoms(is_metal=False)), 1838)

            model = f.model
            self.assertEqual(len(model.atoms()), 1842)
            self.assertEqual(len(model.chains()), 8)
            self.assertEqual(len(model.ligands()), 16)

            model = f.generate_assembly(1)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"A", "B"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(2)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"C", "D"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(3)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"E", "F"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(4)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"G", "H"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(7)
            self.assertEqual(len(model.chains()), 6)
            self.assertEqual(set([c.id for c in model.chains()]), {"A", "B"})
            self.assertEqual(len(model.ligands()), 12)
            zn = model.atom(element="ZN")
            liganding_residues = zn.nearby_hets(3,
                                                is_metal=False,
                                                element__ne="CL")
            self.assertEqual(len(liganding_residues), 3)
            self.assertEqual(set([r.id for r in liganding_residues]), {"B.10"})
            self.assertEqual(set([r.name for r in liganding_residues]),
                             {"HIS"})
            res1, res2, res3 = liganding_residues

            self.assertGreater(
                res1.atom(name="N").distance_to(res2.atom(name="N")), 10)
Ejemplo n.º 33
0
 def test_5xme_mmcif(self):
     d = atomium.open("tests/integration/files/5xme.cif", data_dict=True)
     self.assertEqual(d["experiment"]["technique"], "SOLUTION NMR")
     self.assertEqual(d["quality"], {
         "resolution": None,
         "rvalue": None,
         "rfree": None
     })
     self.assertEqual(len(d["models"]), 10)
     for model in d["models"][1:]:
         self.assertEqual(model["chains"], d["models"][0]["chains"])
         self.assertEqual(model["residues"], d["models"][0]["residues"])
         self.assertEqual(model["ligands"], d["models"][0]["ligands"])
         self.assertEqual(len(model["atoms"]), len(d["models"][0]["atoms"]))
         self.assertNotEqual(model["atoms"], d["models"][0]["atoms"])
         self.assertEqual(model["connections"],
                          d["models"][0]["connections"])
Ejemplo n.º 34
0
 def test_1lol_mmcif(self):
     d = atomium.open("tests/integration/files/1lol.cif", file_dict=True)
     self.assertEqual(d["entry"], [{"id": "1LOL"}])
     self.assertEqual(d["audit_author"], [{
         "name": "Wu, N.",
         "pdbx_ordinal": "1"
     }, {
         "name": "Pai, E.F.",
         "pdbx_ordinal": "2"
     }])
     entity = d["entity"]
     self.assertEqual(len(entity), 4)
     self.assertEqual(entity[0]["pdbx_description"],
                      "orotidine 5'-monophosphate decarboxylase")
     self.assertEqual(entity[1]["type"], "non-polymer")
     self.assertTrue(d["citation"][0]["title"].startswith("Crystal"))
     self.assertTrue(d["citation"][0]["title"].endswith("decarboxylase."))
Ejemplo n.º 35
0
 def test_1lol_file_dict(self):
     d = atomium.open("tests/integration/files/1lol.pdb", file_dict=True)
     self.assertEqual(d["HEADER"], [
      "HEADER    LYASE                                   06-MAY-02   1LOL"
     ])
     self.assertEqual(d["HETNAM"], [
      "HETNAM     BU2 1,3-BUTANEDIOL", "HETNAM     XMP XANTHOSINE-5'-MONOPHOSPHATE"
     ])
     self.assertEqual(d["CONECT"][0], "CONECT 3194 3195 3196")
     self.assertEqual(len(d["REMARK"].keys()), 16)
     self.assertEqual(d["REMARK"]["2"][1], "REMARK   2 RESOLUTION.    1.90 ANGSTROMS.")
     self.assertEqual(len(d["MODEL"]), 1)
     self.assertEqual(len(d["MODEL"][0]), 3433)
     self.assertEqual(
      d["MODEL"][0][0],
      "ATOM      1  N   VAL A  11       3.696  33.898  63.219  1.00 21.50           N"
     )
 def test_5xme(self):
     for e in ["cif", "mmtf", "pdb"]:
         f = atomium.open("tests/integration/files/5xme." + e)
         self.assertEqual(f.resolution, None)
         models = f.models
         self.assertEqual(len(models), 10)
         self.assertIs(f.model, f.models[0])
         x_values = [
          33.969, 34.064, 37.369, 36.023, 35.245,
          35.835, 37.525, 35.062, 36.244, 37.677
         ]
         all_atoms = set()
         for x, model in zip(x_values, models):
             self.assertEqual(len(model.atoms()), 1827)
             all_atoms.update(model.atoms())
             atom = model.chain()[0].atom(name="N")
             self.assertEqual(atom.location[0], x)
         self.assertEqual(len(all_atoms), 18270)
Ejemplo n.º 37
0
 def test_5xme(self):
     for e in ["cif", "mmtf", "pdb"]:
         f = atomium.open("tests/integration/files/5xme." + e)
         self.assertEqual(f.resolution, None)
         models = f.models
         self.assertEqual(len(models), 10)
         self.assertIs(f.model, f.models[0])
         x_values = [
          33.969, 34.064, 37.369, 36.023, 35.245,
          35.835, 37.525, 35.062, 36.244, 37.677
         ]
         all_atoms = set()
         for x, model in zip(x_values, models):
             self.assertEqual(len(model.atoms()), 1827)
             all_atoms.update(model.atoms())
             atom = model.chain()[0].atom(name="N")
             self.assertEqual(atom.x, x)
         self.assertEqual(len(all_atoms), 18270)
Ejemplo n.º 38
0
    def test_1xda(self):
        for e in ["cif"]:#, "mmtf", "pdb"]:
            f = atomium.open("tests/integration/files/1xda." + e)
            self.assertEqual(len(f.model.atoms()), 1842)
            self.assertEqual(len(f.model.atoms(is_metal=True)), 4)
            self.assertEqual(len(f.model.atoms(is_metal=False)), 1838)

            model = f.model
            self.assertEqual(len(model.atoms()), 1842)
            self.assertEqual(len(model.chains()), 8)
            self.assertEqual(len(model.ligands()), 16)

            model = f.generate_assembly(1)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"A", "B"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(2)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"C", "D"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(3)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"E", "F"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(4)
            self.assertEqual(len(model.chains()), 2)
            self.assertEqual(set([c.id for c in model.chains()]), {"G", "H"})
            self.assertEqual(len(model.ligands()), 4)

            model = f.generate_assembly(7)
            self.assertEqual(len(model.chains()), 6)
            self.assertEqual(set([c.id for c in model.chains()]), {"A", "B"})
            self.assertEqual(len(model.ligands()), 12)
            zn = model.atom(element="ZN")
            liganding_residues = zn.nearby_structures(3, is_metal=False, element__ne="CL")
            self.assertEqual(len(liganding_residues), 3)
            self.assertEqual(set([r.id for r in liganding_residues]), {"B.10"})
            self.assertEqual(set([r.name for r in liganding_residues]), {"HIS"})
            res1, res2, res3 = liganding_residues

            self.assertGreater(res1.atom(name="N").distance_to(res2.atom(name="N")), 10)
Ejemplo n.º 39
0
 def test_1lol_file_dict(self):
     d = atomium.open("tests/integration/files/1lol.mmtf", file_dict=True)
     self.assertEqual(d["mmtfVersion"], "1.0.0")
     self.assertEqual(len(d["unitCell"]), 6)
     self.assertAlmostEqual(d["unitCell"][0], 57.57, delta=0.00005)
     self.assertAlmostEqual(d["resolution"], 1.9, delta=0.00005)
     self.assertEqual(d["numAtoms"], 3431)
     self.assertEqual(len(d["secStructList"]), 602)
     self.assertEqual(d["secStructList"][:5], (7, 4, 4, 4, 3))
     self.assertEqual(len(d["bondAtomList"]), 828)
     self.assertEqual(d["bondAtomList"][:6], (7, 2, 15, 9, 23, 17))
     self.assertEqual(d["chainIdList"], list("ABCDEFGH"))
     self.assertEqual(d["insCodeList"], [""] * 602)
     self.assertEqual(d["sequenceIndexList"][:6], [10, 11, 12, 13, 14, 15])
     self.assertEqual(d["occupancyList"], [1.0] * 3431)
     self.assertEqual(d["xCoordList"][:3], [3.696, 3.198, 3.914])
     self.assertEqual(d["bFactorList"][:3], [21.5, 19.76, 19.29])
     self.assertEqual(d["groupList"][0]["groupName"], "ASN")
     self.assertEqual(d["groupList"][0]["atomNameList"][:3], ["N", "CA", "C"])
Ejemplo n.º 40
0
 def test_1lol_file_dict(self):
     d = atomium.open("tests/integration/files/1lol.pdb", file_dict=True)
     self.assertEqual(d["HEADER"], [
         "HEADER    LYASE                                   06-MAY-02   1LOL"
     ])
     self.assertEqual(d["HETNAM"], [
         "HETNAM     BU2 1,3-BUTANEDIOL",
         "HETNAM     XMP XANTHOSINE-5'-MONOPHOSPHATE"
     ])
     self.assertEqual(d["CONECT"][0], "CONECT 3194 3195 3196")
     self.assertEqual(len(d["REMARK"].keys()), 16)
     self.assertEqual(d["REMARK"]["2"][1],
                      "REMARK   2 RESOLUTION.    1.90 ANGSTROMS.")
     self.assertEqual(len(d["MODEL"]), 1)
     self.assertEqual(len(d["MODEL"][0]), 3433)
     self.assertEqual(
         d["MODEL"][0][0],
         "ATOM      1  N   VAL A  11       3.696  33.898  63.219  1.00 21.50           N"
     )
Ejemplo n.º 41
0
 def test_glucose_xyz(self):
     xyz = atomium.open("tests/integration/files/glucose.xyz")
     self.assertEqual(xyz.title, "glucose from 2gbp")
     model = xyz.model
     self.assertEqual(len(model.atoms()), 12)
     self.assertEqual(len(model.atoms(element="C")), 6)
     self.assertEqual(len(model.atoms(element="O")), 6)
     self.assertEqual(len(model.atoms(element_regex="[CO]")), 12)
     self.assertAlmostEqual(model.mass, 168, delta=0.5)
     for atom in model.atoms():
         self.assertAlmostEqual(atom.mass, {
             "C": 12,
             "O": 16
         }[atom.element],
                                delta=0.2)
         self.assertIs(atom.model, model)
     self.assertFalse(model.chains())
     self.assertFalse(model.ligands())
     self.assertFalse(model.residues())
Ejemplo n.º 42
0
 def test_1lol_file_dict(self):
     d = atomium.open("tests/integration/files/1lol.mmtf", file_dict=True)
     self.assertEqual(d["mmtfVersion"], "1.0.0")
     self.assertEqual(len(d["unitCell"]), 6)
     self.assertAlmostEqual(d["unitCell"][0], 57.57, delta=0.00005)
     self.assertAlmostEqual(d["resolution"], 1.9, delta=0.00005)
     self.assertEqual(d["numAtoms"], 3431)
     self.assertEqual(len(d["secStructList"]), 602)
     self.assertEqual(d["secStructList"][:5], (7, 4, 4, 4, 3))
     self.assertEqual(len(d["bondAtomList"]), 828)
     self.assertEqual(d["bondAtomList"][:6], (7, 2, 15, 9, 23, 17))
     self.assertEqual(d["chainIdList"], list("ABCDEFGH"))
     self.assertEqual(d["insCodeList"], [""] * 602)
     self.assertEqual(d["sequenceIndexList"][:6], [10, 11, 12, 13, 14, 15])
     self.assertEqual(d["occupancyList"], [1.0] * 3431)
     self.assertEqual(d["xCoordList"][:3], [3.696, 3.198, 3.914])
     self.assertEqual(d["bFactorList"][:3], [21.5, 19.76, 19.29])
     self.assertEqual(d["groupList"][0]["groupName"], "ASN")
     self.assertEqual(d["groupList"][0]["atomNameList"][:3],
                      ["N", "CA", "C"])
Ejemplo n.º 43
0
def structure(file):
    ''' atomium structure class with the coordinates of the chains (only one chain in SCOPe, COPS and CATH files)
    and it's EigenRank Profile '''
    try:
        structure = atomium.open(str(file))
    except FileNotFoundError:
        structure = atomium.fetch(str(file))
    if structure.code == None:
        structure.id = os.path.basename(file).split('.')[0]
    else:
        structure.id = structure.code
    coord_dict = {}
    for chain in structure.model.chains():
        coords = []
        for res in chain:
            for atom in res.atoms():
                if (atom.name == 'CA' and atom.het.code != 'X'):
                    coords.append(atom.location)
        coord_dict[chain.internal_id] = np.asarray(coords)
    structure.coordinates = coord_dict
    return erpscpy.er.add_eigenrank(structure)
Ejemplo n.º 44
0
 def test_1lol_file_dict(self):
     d = atomium.open("tests/integration/files/1lol.cif", file_dict=True)
     self.assertEqual(d["entry"], [{"id": "1LOL"}])
     self.assertEqual(d["audit_author"], [
      {"name": "Wu, N.", "pdbx_ordinal": "1"},
      {"name": "Pai, E.F.", "pdbx_ordinal": "2"}
     ])
     self.assertEqual(d["struct"][0]["title"][:7], "Crystal")
     entity = d["entity"]
     self.assertEqual(len(entity), 4)
     self.assertEqual(
      entity[0]["pdbx_description"], "orotidine 5'-monophosphate decarboxylase"
     )
     self.assertTrue(
      d["entity_poly"][0]["pdbx_seq_one_letter_code"].startswith("LRSRRVDVM")
     )
     self.assertTrue(
      d["entity_poly"][0]["pdbx_seq_one_letter_code"].endswith("IESIKDLLIPE")
     )
     self.assertEqual(entity[1]["type"], "non-polymer")
     self.assertTrue(d["citation"][0]["title"].startswith("Crystal"))
     self.assertTrue(d["citation"][0]["title"].endswith("decarboxylase."))
Ejemplo n.º 45
0
 def test_1lol_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/1lol." + e, data_dict=True)
         self.assertEqual(set(d.keys()), {
          "description", "experiment", "quality", "geometry", "models"
         })
         if e == "pdb":
             self.assertEqual(d["description"], {
              "code": "1LOL",
              "title": "CRYSTAL STRUCTURE OF OROTIDINE MONOPHOSPHATE DECARBOXYLASE COMPLEX WITH XMP",
              "deposition_date": date(2002, 5, 6),
              "classification": "LYASE",
              "keywords": ["TIM BARREL", "LYASE"],
              "authors": ["N.WU", "E.F.PAI"]
             })
         else:
             self.assertEqual(d["description"], {
              "code": "1LOL",
              "title": "Crystal structure of orotidine monophosphate decarboxylase complex with XMP",
              "deposition_date": date(2002, 5, 6),
              "classification": None if e == "mmtf" else "LYASE",
              "keywords": [] if e == "mmtf" else ["TIM barrel", "LYASE"],
              "authors": [] if e == "mmtf" else ["Wu, N.", "Pai, E.F."]
             })
         if e == "pdb":
             self.assertEqual(d["experiment"], {
              "technique": "X-RAY DIFFRACTION",
              "source_organism": "METHANOTHERMOBACTER THERMAUTOTROPHICUS STR. DELTA H",
              "expression_system": "ESCHERICHIA COLI"
             })
         else:
             self.assertEqual(d["experiment"], {
              "technique": "X-RAY DIFFRACTION",
              "source_organism": None if e == "mmtf" else "Methanothermobacter thermautotrophicus str. Delta H",
              "expression_system": None if e == "mmtf" else "Escherichia coli"
             })
         self.assertEqual(d["quality"], {
          "resolution": 1.9, "rvalue": 0.193, "rfree": 0.229
         })
         self.assertEqual(d["geometry"], {"assemblies": [{
          "id": 1,
          "software": None if e == "mmtf" else "PISA",
          "delta_energy": None if e == "mmtf" else -31.0,
          "buried_surface_area": None if e == "mmtf" else 5230,
          "surface_area": None if e == "mmtf" else 16550,
          "transformations": [{
           "chains": ["A", "B"] if e == "pdb" else ["A", "B", "C", "D", "E", "F", "G", "H"],
           "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
           "vector": [0.0, 0.0, 0.0]
          }]
         }]})
         self.assertEqual(len(d["models"]), 1)
         self.assertEqual(len(d["models"][0]["polymer"]), 2)
         self.assertEqual(len(d["models"][0]["polymer"]["A"]["sequence"]), 229)
         self.assertEqual(len(d["models"][0]["polymer"]["A"]["residues"]), 204)
         self.assertEqual(d["models"][0]["polymer"]["A"]["sequence"][:2], "LR")
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.11"]['number'], 1)
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.13"]['number'], 3)
         self.assertEqual(d["models"][0]["polymer"]["B"]["residues"]["B.1011"]['number'], 1)
         self.assertEqual(d["models"][0]["polymer"]["B"]["residues"]["B.1013"]['number'], 3)
         self.assertEqual(len(d["models"][0]["polymer"]["A"]["residues"]["A.11"]["atoms"]), 7)
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.11"]["atoms"][1], {
          "element": "N", "name": "N", "x": 3.696, "y": 33.898, "z": 63.219,
          "bvalue": 21.5, "charge": 0.0, "occupancy": 1.0, "alt_loc": None,
          "anisotropy": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
         })
         self.assertEqual(d["models"][0]["polymer"]["A"]["residues"]["A.11"]["name"], "VAL")
         self.assertEqual(d["models"][0]["polymer"]["B"]["residues"]["B.1011"]["atoms"][1558 + (e == "pdb")], {
          "element": "N", "name": "N", "x": -26.384, "y": 61.433, "z": 36.898,
          "bvalue": 39.3, "charge": 0.0, "occupancy": 1.0, "alt_loc": None,
          "anisotropy": [0.0, 0.0, 0.0, 0.0, 0.0, 0.0]
         })
         self.assertEqual(len(d["models"][0]["non-polymer"]), 4)
         self.assertEqual(d["models"][0]["non-polymer"]["A.5001"]["name"], "BU2")
         self.assertEqual(d["models"][0]["non-polymer"]["A.5001"]["internal_id"], "A" if e == "pdb" else "C")
         self.assertEqual(len(d["models"][0]["non-polymer"]["A.5001"]["atoms"]), 6)
         self.assertEqual(d["models"][0]["non-polymer"]["A.5001"]["polymer"], "A")
         self.assertEqual(d["models"][0]["non-polymer"]["B.2002"]["name"], "XMP")
         self.assertEqual(d["models"][0]["non-polymer"]["B.2002"]["internal_id"], "B" if e == "pdb" else "F")
         self.assertEqual(len(d["models"][0]["non-polymer"]["B.2002"]["atoms"]), 24)
         self.assertEqual(d["models"][0]["non-polymer"]["B.2002"]["polymer"], "B")
         self.assertEqual(len(d["models"][0]["water"]), 180)
         self.assertEqual(d["models"][0]["water"]["A.3005"]["name"], "HOH")
         self.assertEqual(d["models"][0]["water"]["A.3005"]["internal_id"], "A" if e == "pdb" else "G")
         self.assertEqual(d["models"][0]["water"]["A.3005"]["polymer"], "A")
         self.assertEqual(d["models"][0]["water"]["B.3180"]["name"], "HOH")
         self.assertEqual(d["models"][0]["water"]["B.3180"]["internal_id"], "B" if e == "pdb" else "H")
         self.assertEqual(d["models"][0]["water"]["B.3180"]["polymer"], "B")
Ejemplo n.º 46
0
 def test_chain(self):
     f = atomium.open("tests/integration/files/1lol.mmtf")
     f.model.chain("A").save("tests/integration/files/chaina.mmtf")
     chain = atomium.open("tests/integration/files/chaina.mmtf").model
     self.assertTrue(f.model.chain("A").equivalent_to(chain))
Ejemplo n.º 47
0
 def test_1igt_file_dict(self):
     d = atomium.open("tests/integration/files/1igt.mmtf", file_dict=True)
     self.assertEqual(d["mmtfVersion"], "1.0.0")
     self.assertEqual(d["insCodeList"][266], "A")
Ejemplo n.º 48
0
    def test_1lol(self):
        for e in ["cif", "mmtf", "pdb"]:
            f = atomium.open("tests/integration/files/1lol." + e)
            self.assertEqual(f.filetype, e)
            self.assertEqual(f.code, "1LOL")
            if e == "pdb":
                self.assertEqual(
                 f.title, "CRYSTAL STRUCTURE OF OROTIDINE MONOPHOSPHATE DECARBOXYLASE COMPLEX WITH XMP"
                )
            else:
                self.assertEqual(
                 f.title, "Crystal structure of orotidine monophosphate decarboxylase complex with XMP"
                )
            self.assertEqual(f.deposition_date, date(2002, 5, 6))
            self.assertEqual(f.classification, None if e == "mmtf" else "LYASE")
            self.assertEqual(f.keywords, [] if e == "mmtf" else ["TIM BARREL", "LYASE"] if e == "pdb" else ["TIM barrel", "LYASE"])
            self.assertEqual(f.authors, [] if e == "mmtf" else ["N.WU", "E.F.PAI"] if e == "pdb" else ["Wu, N.", "Pai, E.F."])
            self.assertEqual(f.technique, "X-RAY DIFFRACTION")
            if e == "pdb":
                self.assertEqual(f.source_organism, "METHANOTHERMOBACTER THERMAUTOTROPHICUS STR. DELTA H")
                self.assertEqual(f.expression_system, "ESCHERICHIA COLI")
            else:
                self.assertEqual(
                 f.source_organism,
                 None if e == "mmtf" else "Methanothermobacter thermautotrophicus str. Delta H"
                )
                self.assertEqual(
                 f.expression_system, None if e == "mmtf" else "Escherichia coli"
                )
            self.assertEqual(f.resolution, 1.9)
            self.assertEqual(f.rvalue, 0.193)
            self.assertEqual(f.rfree, 0.229)
            self.assertEqual(f.assemblies, [{
             "id": 1,
             "software": None if e == "mmtf" else "PISA",
             "delta_energy": None if e == "mmtf" else -31.0,
             "buried_surface_area": None if e == "mmtf" else 5230,
             "surface_area": None if e == "mmtf" else 16550,
             "transformations": [{
              "chains": ["A", "B"] if e == "pdb" else ["A", "B", "C", "D", "E", "F", "G", "H"],
              "matrix": [[1.0, 0.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 1.0]],
              "vector": [0.0, 0.0, 0.0]
             }]
            }])

            self.assertEqual(len(f.models), 1)
            model = f.model
            self.assertEqual(len(model.chains()), 2)
            self.assertIsInstance(model.chains(), set)
            self.assertEqual(len(model.ligands()), 4)
            self.assertIsInstance(model.ligands(), set)
            self.assertEqual(len(model.waters()), 180)
            self.assertIsInstance(model.waters(), set)
            self.assertEqual(len(model.molecules()), 186)
            self.assertIsInstance(model.molecules(), set)
            self.assertEqual(len(model.residues()), 418)
            self.assertIsInstance(model.residues(), set)
            self.assertEqual(len(model.atoms()), 3431)
            self.assertIsInstance(model.atoms(), set)
            self.assertEqual(len(model.chains(length__gt=200)), 2)
            self.assertEqual(len(model.chains(length__gt=210)), 1)
            self.assertEqual(len(model.ligands(name="XMP")), 2)
            self.assertEqual(len(model.residues(name="VAL")), 28)
            self.assertEqual(len(model.residues(name="CYS")), 6)
            self.assertEqual(len(model.residues(name__regex="CYS|VAL")), 34)
            self.assertAlmostEqual(
             model.mass, 46018.5, delta=0.005
            )

            chaina = model.chain("A")
            chainb = model.chain(id="B")
            self.assertIs(chaina.model, model)
            self.assertIs(chainb.model, model)
            self.assertEqual(chaina.id, "A")
            self.assertEqual(chaina.length, 204)
            self.assertEqual(chainb.length, 214)
            self.assertTrue(chaina.sequence.startswith("LRSRRVDVMDVMNRLILAMDL"))
            self.assertTrue(chaina.sequence.endswith("LADNPAAAAAGIIESIKDLLIPE"))
            self.assertTrue(chainb.sequence.startswith("LRSRRVDVMDVMNRLILAMDL"))
            self.assertTrue(chainb.sequence.endswith("LADNPAAAAAGIIESIKDLLIPE"))
            for res in chaina: self.assertIn(res, chaina)
            self.assertEqual(len(chaina.residues()), 204)
            self.assertIsInstance(chaina.residues(), tuple)
            self.assertEqual(len(chaina.ligands()), 2)
            self.assertIsInstance(chaina.ligands(), set)
            self.assertEqual(len(chaina.atoms()), 1557)
            self.assertIsInstance(chaina.atoms(), set)
            self.assertEqual(len(chainb.atoms()), 1634)
            self.assertIsInstance(chainb.atoms(), set)
            res = chaina.residue("A.15")
            self.assertIs(res.chain, chaina)
            self.assertIs(res.model, model)
            self.assertEqual(res.name, "LEU")
            self.assertEqual(res.code, "L")
            self.assertEqual(res.full_name, "leucine")
            self.assertEqual(len(res.atoms()), 8)
            self.assertIsInstance(chaina.atoms(), set)
            self.assertEqual(len(res.atoms(element="C")), 6)
            self.assertEqual(len(res.atoms(element__regex="C|O")), 7)
            self.assertEqual(len(res.atoms(name__regex="^CD")), 2)
            self.assertIs(chaina[0], chaina.residue("A.11"))
            self.assertIs(res.next, chaina[5])
            self.assertIn(chaina.residue(name="GLN"), [chaina.residue("A.136"), chaina.residue("A.173")])

            lig = model.ligand(name="XMP")
            self.assertIs(lig.model, model)
            self.assertEqual(len(lig.atoms()), 24)
            self.assertEqual(lig.formula, {"C": 10, "O": 9, "N": 4, "P": 1})
            lig = model.ligand("A.5001")
            self.assertIs(lig.model, model)
            self.assertIs(lig.chain, chaina)
            self.assertEqual(len(lig.atoms()), 6)
            self.assertEqual(lig.mass, 80.0416)
            pairs = list(lig.pairwise_atoms())
            self.assertEqual(len(pairs), 15)
            for pair in pairs:
                pair = list(pair)
                self.assertTrue(0 < pair[0].distance_to(pair[1]), 5)
            hoh = model.water("A.3005")
            self.assertEqual(hoh.name, "HOH")
            self.assertIs(lig.model, model)
            self.assertIs(lig.chain, chaina)
            lig1, lig2 = model.ligands(name="XMP")
            self.assertAlmostEqual(lig1.rmsd_with(lig2), 0.133, delta=0.001)
            self.assertAlmostEqual(lig2.rmsd_with(lig1), 0.133, delta=0.001)

            atom = model.atom(934)
            self.assertEqual(atom.anisotropy, [0, 0, 0, 0, 0, 0])
            self.assertEqual(atom.element, "C")
            self.assertEqual(atom.name, "CA")
            self.assertEqual(atom.location, (4.534, 53.864, 43.326))
            self.assertEqual(atom.bvalue, 17.14)
            self.assertEqual(atom.charge, 0)
            self.assertAlmostEqual(atom.mass, 12, delta=0.1)
            self.assertIs(atom.chain, chaina)
            self.assertIs(atom.model, model)
            self.assertIs(atom.structure, model.residue("A.131"))

            self.assertEqual(model.molecule("A"), chaina)
            self.assertEqual(model.molecule("A.5001"), lig)
            self.assertEqual(model.molecule("A.3005"), hoh)
            self.assertEqual(len(model.molecules(mass__gt=18)), 6)
            self.assertEqual(len(model.molecules(mass__gt=90)), 4)
            self.assertEqual(len(model.molecules(mass__gt=1000)), 2)
            self.assertEqual(len(model.molecules(mass__gt=90, mass__lt=1000)), 2)

            atom = model.atom(1587 if e == "pdb" else 1586)
            four_angstrom = atom.nearby_atoms(cutoff=4)
            self.assertEqual(len(four_angstrom), 10)
            self.assertEqual(
             sorted([atom.id for atom in four_angstrom]),
             [n - (e != "pdb") for n in [1576, 1582, 1583, 1584, 1586, 1588, 1589, 1590, 1591, 2957]]
            )
            self.assertEqual(len(atom.nearby_atoms(cutoff=4, element="O")), 1)
            four_angstrom = model.atoms_in_sphere(atom.location, 4)
            self.assertEqual(len(four_angstrom), 11)
            self.assertEqual(
             sorted([atom.id for atom in four_angstrom]),
             [n - (e != "pdb") for n in [1576, 1582, 1583, 1584, 1586, 1587, 1588, 1589, 1590, 1591, 2957]]
            )
            self.assertEqual(len(model.atoms_in_sphere(atom.location, 4, element="O")), 1)

            atom = model.atom(905)
            self.assertEqual(len(atom.nearby_structures(5)), 8)
            self.assertEqual(len(atom.nearby_structures(5, ligands=False)), 7)
            self.assertEqual(len(atom.nearby_structures(5, waters=True)), 9)
            self.assertEqual(len(atom.nearby_structures(5, residues=False)), 1)
            self.assertEqual(len(atom.nearby_structures(5, element="O")), 3)

            model.dehydrate()
            self.assertEqual(model.waters(), set())
Ejemplo n.º 49
0
import sys
sys.path.insert(0, ".")
import atomium

atomium.open("tests/integration/files/{}")
Ejemplo n.º 50
0
 def test_4opj_data_dict(self):
     for e in ["cif", "mmtf", "pdb"]:
         d = atomium.open("tests/integration/files/4opj." + e, data_dict=True)
         self.assertEqual(len(d["geometry"]["assemblies"]), 2)
         self.assertEqual(d["geometry"]["assemblies"][0]["transformations"][0]["vector"], [42.387, 0, 0])