def test_3DEC_UmiBarcodeDemuxMethod_matching_barcode(self): barcode_folder = pkg_resources.resource_filename('singlecellmultiomics','modularDemultiplexer/barcodes/') barcode_parser = BarcodeParser(barcode_folder) r1 = FastqRecord( '@Cluster_s_1_1101_1000', 'ATCACACACTATAGTCATTCAGGAGCAGGTTCTTCAGGTTCCCTGTAGTTGTGTGGTTTTGAGTGAGTTTTTTAAT', '+', 'AAAAA#EEEEEEEEEEEAEEEEEEEAEEEEEEEEEEEEEEEEEE/EEEEEEEEEEEE/EEEEEEEEEEEEEEEEEE' ) r2 = FastqRecord( '@Cluster_s_1_1101_1002', 'ACCCCAGATCAACGTTGGACNTCNNCNTTNTNCTCNGCACCNNNNCNNNCTTATNCNNNANNNNNNNNNNTNNGN', '+', '6AAAAEEAEE/AEEEEEEEE#EE##<#6E#A#EEE#EAEEA####A###EE6EE#E###E##########E##A#' ) demux = UmiBarcodeDemuxMethod(umiRead=0, umiStart=0, umiLength=3, barcodeRead=0, barcodeStart=3, barcodeLength=8, barcodeFileParser=barcode_parser, barcodeFileAlias='maya_384NLA', indexFileParser=None, indexFileAlias='illumina_merged_ThruPlex48S_RP', random_primer_read=None, random_primer_length=6) demultiplexed_record = demux.demultiplex([r1,r2]) # The barcode sequence is ACACACTA (first barcode) self.assertEqual( demultiplexed_record[0].tags['BC'], 'ACACACTA') self.assertEqual( demultiplexed_record[0].tags['bi'], 1)
def demultiplex(self, records, **kwargs): if kwargs.get('probe') and records[0].sequence[self.barcodeLength + self.umiLength] != 'T': raise NonMultiplexable # add first 2 bases as ligation tag: ligation_start = self.barcodeLength + self.umiLength ligation_end = ligation_start + 2 ligation_sequence = records[0].sequence[ligation_start:ligation_end] ligation_qualities = records[0].qual[ligation_start:ligation_end] taggedRecords = UmiBarcodeDemuxMethod.demultiplex( self, records, **kwargs) taggedRecords[0].addTagByTag('lh', ligation_sequence, isPhred=False, make_safe=False) taggedRecords[0].addTagByTag('lq', ligation_qualities, isPhred=True, make_safe=False) taggedRecords[1].addTagByTag('lh', ligation_sequence, isPhred=False, make_safe=False) taggedRecords[1].addTagByTag('lq', ligation_qualities, isPhred=True, make_safe=False) #taggedRecords[0].sequence = taggedRecords[0].sequence[1:] #taggedRecords[0].qualities = taggedRecords[0].qualities[1:] return taggedRecords
def demultiplex(self, records, **kwargs): if kwargs.get('probe') and records[0].sequence[self.barcodeLength + \ self.umiLength: self.barcodeLength + self.umiLength + 4] != 'CATG': raise NonMultiplexable taggedRecords = UmiBarcodeDemuxMethod.demultiplex( self, records, **kwargs) return taggedRecords
def demultiplex(self, records, **kwargs): if kwargs.get('probe') and not records[0].sequence[4:].startswith( 'CCTTGAACTTCTGGTTGTAG'): raise NonMultiplexable taggedRecords = UmiBarcodeDemuxMethod.demultiplex( self, records, **kwargs) return taggedRecords