a b/singlecellmultiomics/modularDemultiplexer/demultiplexModules/scartrace.py
1
from singlecellmultiomics.modularDemultiplexer.baseDemultiplexMethods import UmiBarcodeDemuxMethod, NonMultiplexable
2
3
# ScarTrace
4
5
6
class ScartraceR1(UmiBarcodeDemuxMethod):
7
    def __init__(self, barcodeFileParser, **kwargs):
8
        self.barcodeFileAlias = 'scartrace'
9
        UmiBarcodeDemuxMethod.__init__(
10
            self,
11
            umiRead=0,
12
            umiStart=0,
13
            umiLength=0,
14
            barcodeRead=0,
15
            barcodeStart=0,
16
            barcodeLength=8,
17
            barcodeFileAlias=self.barcodeFileAlias,
18
            barcodeFileParser=barcodeFileParser,
19
            **kwargs)
20
        self.shortName = 'SCARC8R1'
21
        self.longName = 'Scartrace, CB: 8bp'
22
        self.description = '384 well format. Scar amplicon demultiplexing, cell barcode in read 1'
23
        self.autoDetectable = True
24
25
26
27
28
class ScartraceR2(UmiBarcodeDemuxMethod):
29
    def __init__(self, barcodeFileParser, **kwargs):
30
        self.barcodeFileAlias = 'scartrace'
31
        UmiBarcodeDemuxMethod.__init__(
32
            self,
33
            umiRead=0,
34
            umiStart=0,
35
            umiLength=0,
36
            barcodeRead=1,
37
            barcodeStart=0,
38
            barcodeLength=8,
39
            barcodeFileAlias=self.barcodeFileAlias,
40
            barcodeFileParser=barcodeFileParser,
41
            **kwargs)
42
        self.shortName = 'SCARC8R2'
43
        self.longName = 'Scartrace, CB: 8bp'
44
        self.description = '384 well format. Scar amplicon demultiplexing, cell barcode in read 2'
45
        self.autoDetectable = True
46
47
    def demultiplex(self, records, **kwargs):
48
49
        if kwargs.get(
50
                'probe') and not records[0].sequence.startswith('CCTTGAACTTCTGGTTGTAG'):
51
            raise NonMultiplexable
52
53
        taggedRecords = UmiBarcodeDemuxMethod.demultiplex(
54
                self, records, **kwargs)
55
        return taggedRecords
56
57
58
59
class ScartraceR2RP4(UmiBarcodeDemuxMethod):
60
    def __init__(self, barcodeFileParser, **kwargs):
61
        self.barcodeFileAlias = 'scartrace'
62
        UmiBarcodeDemuxMethod.__init__(
63
            self,
64
            umiRead=0,
65
            umiStart=0,
66
            umiLength=0,
67
            barcodeRead=1,
68
            barcodeStart=0,
69
            barcodeLength=8,
70
            barcodeFileAlias=self.barcodeFileAlias,
71
            barcodeFileParser=barcodeFileParser,
72
73
            random_primer_end=False,
74
            random_primer_read=0,
75
            random_primer_length=4,
76
77
            **kwargs)
78
        self.shortName = 'SCARC8R2R4'
79
        self.longName = 'Scartrace, CB: 8bp, with 4bp random sequence in read 1'
80
        self.description = '384 well format. Scar amplicon demultiplexing, cell barcode in read , 4bp random sequence in R1'
81
        self.autoDetectable = True
82
83
    def demultiplex(self, records, **kwargs):
84
85
        if kwargs.get(
86
                'probe') and not records[0].sequence[4:].startswith('CCTTGAACTTCTGGTTGTAG'):
87
            raise NonMultiplexable
88
89
        taggedRecords = UmiBarcodeDemuxMethod.demultiplex(
90
                self, records, **kwargs)
91
        return taggedRecords