private static  HashSet<String> getTaxaToInclude(OtuWrapper rdpWrapper, OtuWrapper krakenWrapper,
				OtuWrapper kraken16SWrapper,HashSet<String> samples)
		throws Exception
	{

		HashSet<String> taxa = new HashSet<String>();
		taxa.addAll(rdpWrapper.getOtuNames());
		taxa.addAll(krakenWrapper.getOtuNames());
		taxa.addAll(kraken16SWrapper.getOtuNames());
		
		HashSet<String> taxaToRemove = new HashSet<String>();
		
		for(String otu: taxa)
		{
			boolean removeTaxa = true;
			int rdpOTUKey = rdpWrapper.getIndexForOtuName(otu);
			int krakenOTUKey = krakenWrapper.getIndexForOtuName(otu);
			int kraken16SOTUKey = kraken16SWrapper.getIndexForOtuName(otu);
			
			for(String s : samples)
			{
				if( rdpOTUKey != -1 )
				{
					int rdpSampleKey = rdpWrapper.getIndexForSampleName(s);
					
					if( rdpWrapper.getDataPointsUnnormalized().get(rdpSampleKey).get(rdpOTUKey) >0)
						removeTaxa =false;
				}
				
				if( krakenOTUKey != -1)
				{
					int krakenSampleKey = krakenWrapper.getIndexForSampleName(s);
					
					if( krakenWrapper.getDataPointsUnnormalized().get(krakenSampleKey).get(krakenOTUKey) > 0)
						removeTaxa = false;
				}
				

				if( kraken16SOTUKey!= -1)
				{
					int kraken16SSampleKey = kraken16SWrapper.getIndexForSampleName(s);
					
					if( kraken16SWrapper.getDataPointsUnnormalized().get(kraken16SSampleKey).get(kraken16SOTUKey) > 0)
						removeTaxa = false;
				}
			}
			
			if( removeTaxa)
				taxaToRemove.add(otu);
		}
		
		taxa.removeAll(taxaToRemove);
		return taxa;
	}