first pass cleanup of cistematic/genomes; change bamPreprocessing
[erange.git] / buildsnpdb.py
1 """
2 creates table snp {chrom varchar,
3                    start int,
4                    stop int,
5                    name varchar,
6                    observed varchar,
7                    strand varchar,
8                    ucscref varchar,
9                    ncbiref varchar,
10                    func varchar,
11                    moltype varchar,
12                    valid varchar,
13                    class varchar
14 }
15
16 sample line in dbsnp file
17 608   chr1    3093453 3093454 rs52602943      0       +       G       G        C/G   genomic single  unknown 0       0       unknown exact   1
18 """
19
20 try:
21     import psyco
22     psyco.full()
23 except:
24     pass
25 import sys
26 import sqlite3 as sqlite
27
28 def main(argv=None):
29     if not argv:
30         argv = sys.argv
31
32     print "buildsnpdb: version 2.1"
33     if len(argv) < 3:
34         print "usage: python %s snpfile snpdbname" % argv[0]
35         sys.exit(1)
36
37     snpfilename = argv[1]
38     snpdb = argv[2]
39
40     buildsnpdb(snpfilename, snpdb)
41
42
43 def buildsnpdb(snpfilename, snpdb):
44     db = sqlite.connect(snpdb)
45     sql = db.cursor()
46     sql.execute("create table snp (chrom varchar, start long, stop long, name varchar, observed varchar, strand varchar, ucscref varchar, ncbiref varchar, func varchar, moltype varchar, valid varchar, class varchar)")
47     sql.execute("PRAGMA temp_store = MEMORY")
48     sql.execute("PRAGMA DEFAULT_CACHE_SIZE = 500000")
49     db.commit()
50
51     insertSize = 100000
52     insertCounter = 0
53     valuesList = []
54     print snpfilename
55     infile = open(snpfilename)
56     for entry in infile:
57         try:
58             fields = entry.strip().split("\t")
59             chrom = fields[1][3:]
60             start = int(fields[2])
61             stop = int(fields[3])
62             name = fields[4]
63             strand = fields[6]
64             refNcbi = fields[7]
65             refUcsc = fields[8]
66             observed = fields[9]
67             molType = fields[10]
68             classes = fields[11]
69             valid = fields[12]
70             func = fields[15]
71
72             valuesList.append((chrom, start, stop, name, observed, strand, refUcsc, refNcbi, func, molType, valid, classes))
73             insertCounter += 1
74         except:
75             continue
76
77         if insertCounter % insertSize == 0:
78             print insertCounter
79             db.executemany("insert into snp values (?,?,?,?,?,?,?,?,?,?,?,?)", valuesList)
80             valuesList = []
81
82     if len(valuesList) > 0:
83         db.executemany("insert into snp values (?,?,?,?,?,?,?,?,?,?,?,?)", valuesList)
84
85     db.commit()
86
87     print "building index"
88     sql.execute("PRAGMA SYNCHRONOUS = OFF")
89     sql.execute("create index chromIndex on snp(chrom)")
90     sql.execute("create index mainIndex on snp(chrom,start,stop)")
91     db.commit()
92
93
94 if __name__ == "__main__":
95     main(sys.argv)