예제 #1
0
 def add_to_record(self, record: Record) -> None:
     # track multi-CDS modules to avoid duplication
     added_modules = set()
     for cds, result in self.cds_results.items():
         for module in result.modules:
             if module in added_modules:
                 continue
             added_modules.add(module)
             domains: List[AntismashDomain] = []
             for component in module:
                 if component.locus == cds.get_name():
                     domain = result.domain_features[component.domain]
                 else:
                     other_cds_results = self.cds_results[
                         record.get_cds_by_name(component.locus)]
                     domain = other_cds_results.domain_features[
                         component.domain]
                 domains.append(domain)
             mod_type = ModuleFeature.types.UNKNOWN
             if module.is_nrps():
                 mod_type = ModuleFeature.types.NRPS
             elif module.is_pks():
                 mod_type = ModuleFeature.types.PKS
             feature = ModuleFeature(domains,
                                     mod_type,
                                     complete=module.is_complete(),
                                     starter=module.is_starter_module(),
                                     final=module.is_termination_module(),
                                     iterative=module.is_iterative())
             record.add_module(feature)
예제 #2
0
    def from_json(json: Dict[str, Any], record: Record) -> Optional["NRPSPKSDomains"]:
        if NRPSPKSDomains.schema_version != json.get("schema_version"):
            logging.warning("Schema version mismatch, discarding NRPS PKS domain results")
            return None
        if record.id != json.get("record_id"):
            logging.warning("Record identifier mismatch, discarding NRPS PKS domain results")
            return None

        cds_results = {}
        for cds_name, cds_result in json["cds_results"].items():
            cds = record.get_cds_by_name(cds_name)
            cds_result = CDSResult.from_json(cds_result)
            cds_result.annotate_domains(record, cds)
            cds_results[cds] = cds_result

        return NRPSPKSDomains(record.id, cds_results)