Exemplo n.º 1
0
def strip_record(record: Record) -> None:
    """ Discard antismash specific features and feature qualifiers """
    logging.debug(
        "Stripping antiSMASH features and annotations from record: %s",
        record.id)
    record.clear_clusters()
    record.clear_cluster_borders()
    record.clear_cds_motifs()
    record.clear_antismash_domains()
    record.clear_pfam_domains()

    # clean up antiSMASH annotations in CDS features
    for feature in record.get_cds_features():
        feature.sec_met = None
        feature.gene_functions.clear()
Exemplo n.º 2
0
def strip_record(record: Record) -> None:
    """ Discard antismash specific features and feature qualifiers """
    logging.debug(
        "Stripping antiSMASH features and annotations from record: %s",
        record.id)
    record.clear_clusters()
    record.clear_superclusters()
    record.clear_subregions()
    record.clear_regions()
    record.clear_antismash_domains()
    record.clear_pfam_domains()

    # clean up antiSMASH-created CDSMotifs, but leave the rest
    motifs = list(record.get_cds_motifs())
    record.clear_cds_motifs()
    for motif in motifs:
        if not motif.created_by_antismash:
            record.add_cds_motif(motif)

    # clean up antiSMASH annotations in CDS features
    for feature in record.get_cds_features():
        feature.sec_met = SecMetQualifier()
        feature.gene_functions.clear()
Exemplo n.º 3
0
class TestSuperCluster(unittest.TestCase):
    def setUp(self):
        self.record = Record(Seq("A" * 100))
        clusters = [create_cluster(0, 0, 10, 10)]
        for cluster in clusters:
            self.record.add_cluster(cluster)

    def test_kinds_attachment(self):
        assert SuperCluster.kinds == SuperClusterKind

    def test_record_linkage(self):
        cluster = SuperCluster(SuperCluster.kinds.INTERLEAVED,
                               self.record.get_clusters())
        with self.assertRaisesRegex(ValueError,
                                    "SuperCluster not contained in record"):
            cluster.get_supercluster_number()
        self.record.add_supercluster(cluster)
        assert cluster.get_supercluster_number() == 1

    def test_bad_kind(self):
        with self.assertRaisesRegex(TypeError, "should be SuperClusterKind"):
            SuperCluster("berf", self.record.get_clusters())

    def test_no_clusters(self):
        with self.assertRaisesRegex(ValueError,
                                    "cannot exist without at least one"):
            SuperCluster(SuperCluster.kinds.INTERLEAVED, [])

    def test_rules(self):
        cluster = SuperCluster(SuperCluster.kinds.INTERLEAVED,
                               self.record.get_clusters())
        assert cluster.detection_rules == [
            cluster.detection_rule for cluster in self.record.get_clusters()
        ]

    def test_smiles_and_polymer(self):
        cluster = SuperCluster(SuperCluster.kinds.INTERLEAVED,
                               self.record.get_clusters())
        assert cluster.smiles_structure is None
        assert cluster.polymer is None

    def test_conversion(self):
        kind = SuperClusterKind.INTERLEAVED
        original = SuperCluster(kind,
                                self.record.get_clusters(),
                                smiles="dummy smiles",
                                polymer="dummy polymer")
        self.record.add_supercluster(original)
        assert original.products == ["a"]
        assert len(original.clusters) == 1
        bios = original.to_biopython()
        assert len(bios) == 1
        bio = bios[0]
        assert bio.qualifiers["product"] == ["a"]
        assert bio.qualifiers["kind"] == [str(kind)]
        assert bio.qualifiers["candidate_cluster_number"] == [
            str(original.get_supercluster_number())
        ]
        assert bio.qualifiers["SMILES"] == ["dummy smiles"]
        assert bio.qualifiers["polymer"] == ["dummy polymer"]
        assert bio.qualifiers["contig_edge"] == ["True"]
        regenerated = SuperCluster.from_biopython(bio)
        assert isinstance(regenerated, TemporarySuperCluster)
        assert regenerated.products == original.products
        assert regenerated.location == original.location
        assert regenerated.smiles_structure == original.smiles_structure
        assert regenerated.polymer == original.polymer
        assert regenerated.clusters == [
            cluster.get_cluster_number()
            for cluster in self.record.get_clusters()
        ]
        assert regenerated.kind == original.kind

        real = regenerated.convert_to_real_feature(self.record)
        assert isinstance(real, SuperCluster)
        assert len(real.clusters) == len(self.record.get_clusters())
        for reference, record_cluster in zip(real.clusters,
                                             self.record.get_clusters()):
            assert reference is record_cluster

        # attempt a conversion with a record missing the cluster
        self.record.clear_clusters()
        with self.assertRaisesRegex(ValueError,
                                    "Not all referenced clusters are present"):
            regenerated.convert_to_real_feature(self.record)