Skip to content

Instantly share code, notes, and snippets.

@audy
Created June 3, 2011 19:21
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save audy/1006983 to your computer and use it in GitHub Desktop.
Save audy/1006983 to your computer and use it in GitHub Desktop.
Split By Barcode

Split By Barcode

Austin G. Davis-Richardson

Usage:

change dr = in splitbybarcode.py to the BaseCalls directory for your Illumina run.

Invoke thusly,

python splitbybarcode.py

Script assumes barcodes are in the reverse-complement orientation.

Split reads are stored in the folder out/ which you have to create yourself.

config.yaml stores information about the barcodes in this format:

1: #lane
    1: AAGGTGG # barcode number: barcode sequence
    2: GGCCAAG
    ....
....
1:
1: AAGGTGG
2: CTTGTGG
3: TGAGTGG
4: CAATTGG
5: TTCTTGG
6: GGTATGG
7: GTGCTGG
8: GCTGAGG
9: ATCGAGG
10: GAGTAGG
11: TGTTAGG
12: AGGAAGG
13: TCGCAGG
14: AATCAGG
15: ACAGCGG
16: TACGCGG
17: ATGTCGG
18: GGATCGG
19: CAGACGG
20: GTCACGG
21: CGTCCGG
22: TTACCGG
23: CATGGTG
24: TAGTGTG
25: AGATGTG
26: CTCTGTG
27: ACTAGTG
28: TGCAGTG
29: ATGCGTG
30: GCACGTG
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
35: CGAGATG
36: ACGTATG
37: TTATATG
38: GTTAATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
73: CATCTCG
74: ATCCTCG
75: CTGTACG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
87: TAGTTGT
88: GCATTGT
89: AGCTTGT
90: CCGATGT
91: AATATGT
92: CTCCTGT
93: TAAGAGT
94: CACTAGT
95: GTGAAGT
96: TCCAAGT
97: CGGCAGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
106: AGGAGTT
107: CCTCGTT
108: TACCGTT
109: CTGGATT
110: GGCGATT
111: GCTTATT
112: TATAATT
113: AGTCATT
114: TAGGCTT
115: CGGTCTT
116: ATCTCTT
117: GCGACTT
118: CTTACTT
119: GTACCTT
120: GGTGGAT
121: AACGGAT
122: GAATGAT
123: CGCTGAT
124: TTGAGAT
125: ACAAGAT
126: GCGCGAT
127: CAAGTAT
128: GCCGTAT
129: CTGTTAT
130: TGATTAT
131: GAGATAT
132: GTTCTAT
133: AGCAGGA
134: TCGTAAT
135: GTCTAAT
136: CATCAAT
137: GGACAAT
138: CCGGCAT
2:
1: AAGGTGG
2: CTTGTGG
3: TGAGTGG
4: CAATTGG
5: TTCTTGG
6: GGTATGG
7: GTGCTGG
8: GCTGAGG
9: ATCGAGG
10: GAGTAGG
11: TGTTAGG
12: AGGAAGG
13: TCGCAGG
14: AATCAGG
15: ACAGCGG
16: TACGCGG
17: ATGTCGG
18: GGATCGG
19: CAGACGG
20: GTCACGG
21: CGTCCGG
22: TTACCGG
23: CATGGTG
24: TAGTGTG
25: AGATGTG
26: CTCTGTG
27: ACTAGTG
28: TGCAGTG
29: ATGCGTG
30: GCACGTG
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
35: CGAGATG
36: ACGTATG
37: TTATATG
38: GTTAATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
73: CATCTCG
74: ATCCTCG
75: CTGTACG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
87: TAGTTGT
88: GCATTGT
89: AGCTTGT
90: CCGATGT
91: AATATGT
92: CTCCTGT
93: TAAGAGT
94: CACTAGT
95: GTGAAGT
96: TCCAAGT
97: CGGCAGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
106: AGGAGTT
107: CCTCGTT
108: TACCGTT
109: CTGGATT
110: GGCGATT
111: GCTTATT
112: TATAATT
113: AGTCATT
114: TAGGCTT
115: CGGTCTT
116: ATCTCTT
117: GCGACTT
118: CTTACTT
119: GTACCTT
120: GGTGGAT
121: AACGGAT
122: GAATGAT
123: CGCTGAT
124: TTGAGAT
125: ACAAGAT
126: GCGCGAT
127: CAAGTAT
128: GCCGTAT
129: CTGTTAT
130: TGATTAT
131: GAGATAT
132: GTTCTAT
133: AGCAGGA
134: TCGTAAT
135: GTCTAAT
136: CATCAAT
137: GGACAAT
138: CCGGCAT
139: AGTACAT
140: TACACAT
141: TCTCCAT
142: AATTGCT
143: TTCTGCT
144: GCTAGCT
145: TGAAGCT
146: ACGGTCT
147: CGTGTCT
148: TCACTCT
149: GGCCTCT
3:
1: AAGGTGG
2: CTTGTGG
3: TGAGTGG
4: CAATTGG
5: TTCTTGG
6: GGTATGG
7: GTGCTGG
8: GCTGAGG
9: ATCGAGG
10: GAGTAGG
11: TGTTAGG
12: AGGAAGG
13: TCGCAGG
14: AATCAGG
15: ACAGCGG
16: TACGCGG
17: ATGTCGG
18: GGATCGG
19: CAGACGG
20: GTCACGG
21: CGTCCGG
22: TTACCGG
23: CATGGTG
24: TAGTGTG
25: AGATGTG
26: CTCTGTG
27: ACTAGTG
28: TGCAGTG
29: ATGCGTG
30: GCACGTG
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
35: CGAGATG
36: ACGTATG
37: TTATATG
38: GTTAATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
73: CATCTCG
74: ATCCTCG
75: CTGTACG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
87: TAGTTGT
88: GCATTGT
89: AGCTTGT
90: CCGATGT
91: AATATGT
92: CTCCTGT
93: TAAGAGT
94: CACTAGT
95: GTGAAGT
96: TCCAAGT
97: CGGCAGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
106: AGGAGTT
107: CCTCGTT
108: TACCGTT
109: CTGGATT
110: GGCGATT
111: GCTTATT
112: TATAATT
113: AGTCATT
114: TAGGCTT
115: CGGTCTT
116: ATCTCTT
117: GCGACTT
118: CTTACTT
119: GTACCTT
120: GGTGGAT
121: AACGGAT
122: GAATGAT
123: CGCTGAT
124: TTGAGAT
125: ACAAGAT
126: GCGCGAT
127: CAAGTAT
128: GCCGTAT
129: CTGTTAT
130: TGATTAT
131: GAGATAT
132: GTTCTAT
133: AGCAGGA
134: TCGTAAT
135: GTCTAAT
136: CATCAAT
137: GGACAAT
138: CCGGCAT
139: AGTACAT
140: TACACAT
5:
1: AAGGTGG
2: CTTGTGG
3: TGAGTGG
4: CAATTGG
5: TTCTTGG
6: GGTATGG
7: GTGCTGG
8: GCTGAGG
9: ATCGAGG
10: GAGTAGG
11: TGTTAGG
12: AGGAAGG
13: TCGCAGG
14: AATCAGG
15: ACAGCGG
16: TACGCGG
17: ATGTCGG
18: GGATCGG
19: CAGACGG
20: GTCACGG
21: CGTCCGG
22: TTACCGG
23: CATGGTG
24: TAGTGTG
25: AGATGTG
26: CTCTGTG
27: ACTAGTG
28: TGCAGTG
29: ATGCGTG
30: GCACGTG
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
36: ACGTATG
37: TTATATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
74: ATCCTCG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
7:
1: AAGGTGG
2: CTTGTGG
3: TGAGTGG
4: CAATTGG
5: TTCTTGG
6: GGTATGG
7: GTGCTGG
8: GCTGAGG
9: ATCGAGG
10: GAGTAGG
11: TGTTAGG
12: AGGAAGG
13: TCGCAGG
14: AATCAGG
15: ACAGCGG
16: TACGCGG
17: ATGTCGG
18: GGATCGG
19: CAGACGG
20: GTCACGG
21: CGTCCGG
22: TTACCGG
23: CATGGTG
24: TAGTGTG
25: AGATGTG
26: CTCTGTG
27: ACTAGTG
28: TGCAGTG
29: ATGCGTG
30: GCACGTG
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
35: CGAGATG
36: ACGTATG
37: TTATATG
38: GTTAATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
73: CATCTCG
74: ATCCTCG
75: CTGTACG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
87: TAGTTGT
88: GCATTGT
89: AGCTTGT
90: CCGATGT
91: AATATGT
92: CTCCTGT
93: TAAGAGT
94: CACTAGT
95: GTGAAGT
96: TCCAAGT
97: CGGCAGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
106: AGGAGTT
107: CCTCGTT
108: TACCGTT
109: CTGGATT
110: GGCGATT
111: GCTTATT
112: TATAATT
113: AGTCATT
114: TAGGCTT
115: CGGTCTT
116: ATCTCTT
117: GCGACTT
118: CTTACTT
119: GTACCTT
120: GGTGGAT
121: AACGGAT
122: GAATGAT
123: CGCTGAT
124: TTGAGAT
125: ACAAGAT
126: GCGCGAT
127: CAAGTAT
128: GCCGTAT
129: CTGTTAT
130: TGATTAT
131: GAGATAT
132: GTTCTAT
133: AGCAGGA
134: TCGTAAT
135: GTCTAAT
136: CATCAAT
137: GGACAAT
138: CCGGCAT
139: AGTACAT
140: TACACAT
141: TCTCCAT
142: AATTGCT
143: TTCTGCT
144: GCTAGCT
145: TGAAGCT
146: ACGGTCT
147: CGTGTCT
148: TCACTCT
149: GGCCTCT
8:
31: TCGGTTG
32: GTAGTTG
33: AGCGTTG
34: CTGATTG
35: CGAGATG
36: ACGTATG
37: TTATATG
38: GTTAATG
39: AACAATG
40: CAGCATG
41: TGTGCTG
42: GCCGCTG
43: AATTCTG
44: CCATCTG
45: CTAGGAG
46: CCTTGAG
47: GGAAGAG
48: CACAGAG
49: TGGCGAG
50: GATCGAG
51: TATGTAG
52: GCGTTAG
53: ATATTAG
54: TCCATAG
55: AGTCTAG
56: GTGGAAG
57: TGCGAAG
58: CTCCAAG
59: ATTGCAG
60: TAATCAG
61: AGCTCAG
62: GCTACAG
63: AAGCCAG
64: TCTGGCG
65: GTCGGCG
66: AAGAGCG
67: CTTAGCG
68: CCGCGCG
69: TAACGCG
70: CCAGTCG
71: TGGTTCG
72: AGAATCG
73: CATCTCG
74: ATCCTCG
75: CTGTACG
76: GCATACG
77: GGCAACG
78: GATGCCG
79: TCGACCG
80: ACGTGGT
81: CTATGGT
82: CGTAGGT
83: GACAGGT
84: AGACGGT
85: TCTGTGT
86: ATAGTGT
87: TAGTTGT
88: GCATTGT
89: AGCTTGT
90: CCGATGT
91: AATATGT
92: CTCCTGT
93: TAAGAGT
94: CACTAGT
95: GTGAAGT
96: TCCAAGT
97: CGGCAGT
98: GTTGCGT
99: CGAGCGT
100: CCTTCGT
101: TGGACGT
102: GAGCCGT
103: ATTGGTT
104: TCAGGTT
105: GTGTGTT
106: AGGAGTT
107: CCTCGTT
108: TACCGTT
109: CTGGATT
110: GGCGATT
111: GCTTATT
112: TATAATT
113: AGTCATT
114: TAGGCTT
115: CGGTCTT
116: ATCTCTT
117: GCGACTT
118: CTTACTT
119: GTACCTT
120: GGTGGAT
121: AACGGAT
122: GAATGAT
123: CGCTGAT
124: TTGAGAT
125: ACAAGAT
#!/usr/bin/env python
import yaml
import os
from fa import *
from collections import defaultdict
import string
_complement = string.maketrans('GATCRYgatcry','CTAGYRctagyr')
with open('config.yaml') as handle:
config = yaml.load(handle)
def rc(s):
''' Reverse-Complement! '''
return s[::-1].translate(_complement)
sp = 's_%s_%s_%.4i_qseq.txt'
dr = '/path/to/basecalls'
for l in config:
print 'Lane_%s' % l
print ' Loading barcodes from config.yaml'
# Load barcodes from config
# Open handles for each barcode
barcodes, bch = {}, {}
for i in config[l]:
barcodes[config[l][i]] = i
h = open('out/lane_%s_barcode_%.3i.txt' % \
(l, i), 'w')
bch[i] = h
print ' Loaded %s barcodes' % len(bch)
print ' Getting IDs from Illumina reads'
# Find barcodes in barcode lane
r, id_to_bc = range(1, 121), {}
for n in r:
with open('%s/%s' % (dr, sp % (l, 2, n))) as h:
for record in Oneline(h):
if rc(record.seq) in barcodes:
i = tuple( int(i) for i in record.nom.split(':')[4:6] )
id_to_bc[i] = barcodes[rc(record.seq)]
print ' Loaded %s IDs' % len(id_to_bc)
print ' Saving reads by barcode.'
# Separate by barcode
counts = defaultdict(int)
with open('data/lane_%s.txt' % l) as handle:
records = Oneline(handle)
for record in records:
i = tuple( int(i) for i in record.nom.split(':')[4:6] )
if i in id_to_bc:
bc = id_to_bc[i]
# Append barcode to header
record.nom += ':b_%.3i' % bc
# Print as fastq
print >> bch[id_to_bc[i]], record.fastq
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment