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

Source Code for Module obitools.options.taxonomyfilter

  1  import sys 
  2  from obitools.ecopcr.taxonomy import Taxonomy, EcoTaxonomyDB, TaxonomyDump 
  3   
  4   
5 -def addTaxonomyDBOptions(optionManager):
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
20 -def addTaxonomyFilterOptions(optionManager):
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
47 -def loadTaxonomyDatabase(options):
48 if options.taxonomy is not None or options.taxdump is not None: 49 if options.taxdump is not None: 50 taxonomy = TaxonomyDump(options.taxdump) 51 elif isinstance(options.taxonomy, Taxonomy): 52 taxonomy = options.taxonomy 53 elif isinstance(options.taxonomy, str): 54 taxonomy = EcoTaxonomyDB(options.taxonomy) 55 options.ecodb=options.taxonomy 56 options.taxonomy=taxonomy 57 return options.taxonomy
58
59 -def taxonomyFilterGenerator(options):
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 # print taxid, 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 # print >>sys.stderr, " Has rank : ",good, 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 # print " Required : ",good, 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 # print " Ignored : ",good, 84 # print " Global : ",good 85 86 return good
87 88 89 else: 90 def taxonomyFilter(seq): 91 return True 92 93 return taxonomyFilter 94
95 -def taxonomyFilterIteratorGenerator(options):
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