Package obitools :: Package options :: Module bioseqcutter
[hide private]
[frames] | no frames]

Source Code for Module obitools.options.bioseqcutter

 1  import sys 
 2  from logging import debug 
 3   
4 -def _beginOptionCallback(options,opt,value,parser):
5 def beginCutPosition(seq): 6 debug("begin = %s" % value ) 7 return eval(value,{'sequence':seq},seq) - 1
8 9 parser.values.beginCutPosition=beginCutPosition 10
11 -def _endOptionCallback(options,opt,value,parser):
12 def endCutPosition(seq): 13 return eval(value,{'sequence':seq},seq)
14 15 parser.values.endCutPosition=endCutPosition 16 17 18 19
20 -def addSequenceCuttingOptions(optionManager):
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
43 -def cutterGenerator(options):
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
67 -def cutterIteratorGenerator(options):
68 _cutter = cutterGenerator(options) 69 70 def sequenceCutterIterator(seqIterator): 71 for seq in seqIterator: 72 yield _cutter(seq)
73 74 return sequenceCutterIterator 75