1 import sys
2 from obitools.ecopcr.taxonomy import Taxonomy, EcoTaxonomyDB, TaxonomyDump
3
4
6 optionManager.add_option('-d','--database',
7 action="store", dest="taxonomy",
8 metavar="<FILENAME>",
9 type="string",
10 help="ecoPCR taxonomy Database "
11 "name")
12 optionManager.add_option('-t','--taxonomy-dump',
13 action="store", dest="taxdump",
14 metavar="<FILENAME>",
15 type="string",
16 help="NCBI Taxonomy dump repository "
17 "name")
18
19
21 addTaxonomyDBOptions(optionManager)
22 optionManager.add_option('--require-rank',
23 action="append",
24 dest='requiredRank',
25 metavar="<RANK_NAME>",
26 type="string",
27 default=[],
28 help="select sequence with taxid tag containing "
29 "a parent of rank <RANK_NAME>")
30
31 optionManager.add_option('-r','--required',
32 action="append",
33 dest='required',
34 metavar="<TAXID>",
35 type="int",
36 default=[],
37 help="required taxid")
38
39 optionManager.add_option('-i','--ignore',
40 action="append",
41 dest='ignored',
42 metavar="<TAXID>",
43 type="int",
44 default=[],
45 help="ignored taxid")
46
58
60 loadTaxonomyDatabase(options)
61 if options.taxonomy is not None:
62
63 def taxonomyFilter(seq):
64 good = True
65 if 'taxid' in seq:
66 taxid = seq['taxid']
67
68 if options.requiredRank:
69 taxonatrank = reduce(lambda x,y: x and y,
70 (taxonomy.getTaxonAtRank(taxid,rank) is not None
71 for rank in options.requiredRank),True)
72 good = good and taxonatrank
73
74 if options.required:
75 good = good and reduce(lambda x,y: x or y,
76 (taxonomy.isAncestor(r,taxid) for r in options.required),
77 False)
78
79 if options.ignored:
80 good = good and not reduce(lambda x,y: x or y,
81 (taxonomy.isAncestor(r,taxid) for r in options.ignored),
82 False)
83
84
85
86 return good
87
88
89 else:
90 def taxonomyFilter(seq):
91 return True
92
93 return taxonomyFilter
94
96 taxonomyFilter = taxonomyFilterGenerator(options)
97
98 def filterIterator(seqiterator):
99 for seq in seqiterator:
100 if taxonomyFilter(seq):
101 yield seq
102
103 return filterIterator
104