]> git.donarmstrong.com Git - biopieces.git/blob - code_python/Cjung/lowercase_seq
added bed2tag_contigs as backend to assemble_tag_contigs
[biopieces.git] / code_python / Cjung / lowercase_seq
1 #!/usr/bin/python
2
3 import os, string, sys, getopt, Args
4
5 record_delimiter = "\n---\n"
6
7 class Lowercase_seq:
8         in_stream = None
9         out_stream = None
10         eo_buffer = False
11         buffer = ''
12         rec_dic = {}
13         rec_num = 0
14
15         ###########################################
16         def __init__(self):
17                 pass
18         ###########################################
19
20         ###########################################
21         def open_streams(self, input_file, output_file):
22                 #print input_file, output_file
23                 if input_file == '':
24                         self.in_stream = sys.stdin
25                         #print "in_stream = <STDIN>"
26                 else:
27                         try:
28                                 self.in_stream = open(input_file, 'r')
29                                 #print "in_stream = %s" % (input_file)
30                         except:
31                                 raise IOError
32
33                 if output_file == '':
34                         self.out_stream = sys.stdout
35                         #print "out_stream = <STDOUT>"
36                 else:
37                         try:
38                                 self.out_stream = open(output_file, 'w')
39                                 #print "out_stream = %s" % (output_file)
40                         except:
41                                 raise IOError
42         ###########################################
43
44         ###########################################
45         def close_streams(self):
46                 if self.in_stream:
47                         self.in_stream.close()
48                 if self.out_stream:
49                         self.out_stream.close()
50         ###########################################
51
52         ###########################################
53         def get_record(self):
54                 rec = ''
55                 eof_flag = False
56                 while not self.eo_buffer:
57                         if eof_flag:
58                                 if self.buffer == '':
59                                         self.eo_buffer = True
60                                         break
61                         else:
62                                 tmp = self.in_stream.read(1000)
63                         if not tmp:
64                                 eof_flag = True
65
66                         self.buffer = self.buffer + tmp
67                         delim_index = self.buffer.find(record_delimiter)
68                         if delim_index >= 0:
69                                 rec = self.buffer[:delim_index]
70                                 self.buffer = self.buffer[delim_index + len(record_delimiter):]
71                                 break
72                 return rec
73         ###########################################
74
75         ###########################################
76         def process_record(self, rec):
77                 #print "PARSE_RECORD"
78                 #print rec
79                 #print "==="
80                 lines = rec.split("\n")
81                 self.rec_num += 1
82                 self.rec_dic[self.rec_num] = {}
83                 for l in lines:
84                         toks = l.split(": ")
85                         if toks[0]=="SEQ":
86                                 self.rec_dic[self.rec_num][toks[0]] = toks[1].lower()
87                         else:
88                                 self.rec_dic[self.rec_num][toks[0]] = toks[1]
89                         #self.rec_dic[self.rec_num][toks[0]] = toks[1]
90                 #print self.rec_dic[self.rec_num]
91                 return self.rec_num
92         ###########################################
93
94         ###########################################
95         def put_record(self, r_num):
96                 rec = self.rec_dic[r_num]
97                 for k in rec.keys():
98                         #print "%s: %s" % (k, rec[k])
99                         self.out_stream.write("%s: %s\n" % (k, rec[k]))
100                 #print "---"
101                 self.out_stream.write("---\n")
102         ###########################################
103
104         ###########################################
105         def print_usage(self, opt):
106                 bp_dir = os.environ['BP_DIR']
107                 usage_path = bp_dir + os.path.sep + "bp_usage" + os.path.sep + "lowercase_seq.wiki"
108                 os.system("print_usage -i %s %s" % (usage_path, opt))
109         ###########################################
110
111
112 # main
113
114 """
115 print "############"
116 print len(sys.argv)
117 print sys.argv
118 print "############"
119 """
120
121
122 lc_seq = Lowercase_seq()
123
124 a = Args.Args('Usage: %(progname)s [-a value] [-b value] [-c] word [file...]')
125
126 a.opt['-I'] = ''    # input file
127 a.opt['-O'] = ''    # output file
128 a.getopt('I:O:?:v')                     # get user supplied option values
129
130 #print >> sys.stderr, a.opt
131
132 word = a.shift()                        # get the first of the remaining arguments
133                                                         # use a.pop() to get the last instead
134 if not word == None:
135         sys.stderr.write("Unknown argument %s\n" % (word))
136         sys.exit(1)
137
138 if sys.stdin.isatty():
139         lc_seq.print_usage('')
140         sys.exit(1)
141
142 #for line in a:              # iterate over the contents of all remaining arguments (file names)
143 #       if a.lineno == 1:
144 #               print 'starting new file:', a.infile
145 #       a.warning(line.rstrip())
146
147 #print 'Options:', a.opt
148 #print 'Word:', word
149 #print 'Total number of lines:', a.linesum
150
151
152 if a.opt.has_key('-?'):
153         lc_seq.print_usage('-?')
154         sys.exit(1)
155 else:
156         try:
157                 lc_seq.open_streams(a.opt['-I'], a.opt['-O'])
158         except:
159                 sys.stderr.write("%s\n" % ("IOError"))
160                 sys.exit(1)
161
162
163 while True:
164         rec = lc_seq.get_record()
165         if rec=='':
166                 break
167         rec_num = lc_seq.process_record(rec)
168         lc_seq.put_record(rec_num)
169
170 lc_seq.close_streams()
171
172 #source = "Dmel_tRNAs_key_record_tuples.txt"
173 #lc_seq.open_stream(source)
174
175 #lc_seq.get_record()
176 #lc_seq.put_record()
177
178
179