예제 #1
0
    def __call__(self, read1: DnaSequence, read2: DnaSequence,
                 info1: ModificationInfo,
                 info2: ModificationInfo) -> Tuple[DnaSequence, DnaSequence]:

        id1, comment1 = Renamer.parse_name(read1.name)
        id2, comment2 = Renamer.parse_name(read2.name)
        if not record_names_match(read1.name, read2.name):
            raise ValueError(
                "Input read IDs not identical: '{}' != '{}'".format(id1, id2))
        name1, name2 = self.get_new_headers(
            id1=id1,
            id2=id2,
            comment1=comment1,
            comment2=comment2,
            header1=read1.name,
            header2=read2.name,
            info1=info1,
            info2=info2,
        )
        new_id1 = Renamer.parse_name(name1)[0]
        new_id2 = Renamer.parse_name(name2)[0]
        if not record_names_match(name1, name2):
            raise InvalidTemplate(
                "After renaming R1 and R2, their IDs are no longer identical: "
                "'{}' != '{}'. Original read ID: '{}'. ".format(
                    new_id1, new_id2, id1))
        read1.name = name1
        read2.name = name2
        return read1, read2
예제 #2
0
 def __call__(self, read: DnaSequence, info: ModificationInfo) -> DnaSequence:
     id_, comment = self.parse_name(read.name)
     read.name = self._template.format(
         header=read.name,
         id=id_,
         comment=comment,
         cut_prefix=info.cut_prefix if info.cut_prefix else "",
         cut_suffix=info.cut_suffix if info.cut_suffix else "",
         adapter_name=info.matches[-1].adapter.name if info.matches else "no_adapter",
         rc="rc" if info.is_rc else "",
     )
     return read