1 import sys
2 from logging import debug
3
5 def beginCutPosition(seq):
6 debug("begin = %s" % value )
7 return eval(value,{'sequence':seq},seq) - 1
8
9 parser.values.beginCutPosition=beginCutPosition
10
12 def endCutPosition(seq):
13 return eval(value,{'sequence':seq},seq)
14
15 parser.values.endCutPosition=endCutPosition
16
17
18
19
21
22 optionManager.add_option('-b','--begin',
23 action="callback", callback=_beginOptionCallback,
24 metavar="<PYTHON_EXPRESSION>",
25 type="string",
26 help="python expression to be evaluated in the "
27 "sequence context. The attribute name can be "
28 "used in the expression as variable name. "
29 "An extra variable named 'sequence' refers "
30 "to the sequence object itself. ")
31
32 optionManager.add_option('-e','--end',
33 action="callback", callback=_endOptionCallback,
34 metavar="<PYTHON_EXPRESSION>",
35 type="string",
36 help="python expression to be evaluated in the "
37 "sequence context. The attribute name can be "
38 "used in the expression as variable name ."
39 "An extra variable named 'sequence' refers"
40 "to the sequence object itself. ")
41
42
44
45 def sequenceCutter(seq):
46
47 lseq = len(seq)
48
49 if hasattr(options, 'beginCutPosition'):
50 begin = int(options.beginCutPosition(seq))
51 else:
52 begin = 0
53
54 if hasattr(options, 'endCutPosition'):
55 end = int(options.endCutPosition(seq))
56 else:
57 end = lseq
58
59 if begin > 0 or end < lseq:
60 seq = seq[begin:end]
61 seq['subsequence']="%d..%d" % (begin+1,end)
62
63 return seq
64
65 return sequenceCutter
66
68 _cutter = cutterGenerator(options)
69
70 def sequenceCutterIterator(seqIterator):
71 for seq in seqIterator:
72 yield _cutter(seq)
73
74 return sequenceCutterIterator
75