Mercurial > repos > yufei-luo > s_mart
comparison commons/pyRepetUnit/convCoord/ConvSetChr2Chunk.py @ 31:0ab839023fe4
Uploaded
author | m-zytnicki |
---|---|
date | Tue, 30 Apr 2013 14:33:21 -0400 |
parents | 94ab73e8a190 |
children |
comparison
equal
deleted
inserted
replaced
30:5677346472b5 | 31:0ab839023fe4 |
---|---|
1 from copy import deepcopy | |
2 from commons.core.sql.TableSetAdaptator import TableSetAdaptator | |
3 from commons.core.coord.Map import Map | |
4 from commons.core.coord.Set import Set | |
5 import os | |
6 | |
7 class ConvSetChr2Chunk(object): | |
8 | |
9 def __init__(self, db, table, chunk_table, outtable): | |
10 self._tablename = table | |
11 self._chunk_table = chunk_table | |
12 self._db = db | |
13 self._outtable = outtable | |
14 | |
15 def convert(self): | |
16 """ | |
17 Convert a 'set' table format. | |
18 """ | |
19 temp_file = str(os.getpid()) + ".on_chunk" | |
20 fout = open(temp_file,'w') | |
21 | |
22 str_mask = "SELECT * FROM "+\ | |
23 self._chunk_table + " WHERE chr='%s' AND ("+\ | |
24 "(%d BETWEEN LEAST(start,end) AND GREATEST(start,end))"+\ | |
25 " OR (%d BETWEEN LEAST(start,end) AND GREATEST(start,end))"+\ | |
26 " OR (%d <= LEAST(start,end) AND %d >= GREATEST(start,end)));" | |
27 | |
28 iTSA = TableSetAdaptator(self._db, self._tablename) | |
29 path_num_list = iTSA.getIdList() | |
30 | |
31 for path_num in path_num_list: | |
32 slist = iTSA.getSetListFromId(path_num) | |
33 for r in slist: | |
34 sql_cmd = str_mask%(r.seqname,r.getMin(),r.getMax(),r.getMin(),r.getMax()) | |
35 self._db.execute(sql_cmd) | |
36 res = self._db.fetchall() | |
37 for i in res: | |
38 chunk = Map(i[0],i[1],int(i[2]),int(i[3])) | |
39 | |
40 new_r = Set() | |
41 new_r = deepcopy(r) | |
42 new_r.seqname = chunk.name | |
43 | |
44 if (r.start > chunk.start and r.start < chunk.end): | |
45 new_r.start = r.start - chunk.start + 1 | |
46 if (r.end > chunk.start and r.end < chunk.end): | |
47 new_r.end = r.end - chunk.start + 1 | |
48 | |
49 if r.isOnDirectStrand(): | |
50 if r.start <= chunk.start: | |
51 new_r.start = 1 | |
52 if r.end >= chunk.end: | |
53 new_r.end = chunk.end - chunk.start + 1 | |
54 else: | |
55 if r.end <= chunk.start: | |
56 new_r.end = 1 | |
57 if r.start >= chunk.end: | |
58 new_r.start = chunk.end - chunk.start + 1 | |
59 | |
60 new_r.write(fout) | |
61 | |
62 fout.close() | |
63 | |
64 self._db.createTable(self._outtable, "set", temp_file) | |
65 | |
66 os.remove(temp_file) |