Beispiel #1
0
boolean element_is_key(Key key, Element e, short kmer_size)
{
	if (key == NULL) {
		printf("Do not call element_is_key wth a NULL pointer. Exiting\n");
		exit(1);
	}
    
	return binary_kmer_comparison_operator(*key, e.kmer);
}
Beispiel #2
0
Orientation db_node_get_orientation(BinaryKmer * k, Element * e, short kmer_size)
{
	if (binary_kmer_comparison_operator(e->kmer, *k) == true) {
		return forward;
	}

	BinaryKmer tmp_kmer;

	if (binary_kmer_comparison_operator(e->kmer,
					    *(binary_kmer_reverse_complement
					      (k, kmer_size,
					       &tmp_kmer))) == true) {
		return reverse;
	}

	printf("programming error - you have called  db_node_get_orientation with a kmer that is neither equal to the kmer in this node, nor its rev comp\n");
	char tmpseq1[kmer_size];
	char tmpseq2[kmer_size]; 
	printf("Arg 1 Kmer is %s and Arg 2 node kmer is %s\n",
	       binary_kmer_to_seq(k, kmer_size, tmpseq1),
	       binary_kmer_to_seq(&(e->kmer), kmer_size, tmpseq2));
	exit(1);

}
Beispiel #3
0
void test_hash_table_find_or_insert()
{

  short kmer_size;
  long long max_key_given_kmer_size;

      

  //adds binary kmers to a hash, then tries to find them
  //will go through all possible bin kmers given the kmer_size, stepping 
  // with granulatiry step. Since for kmer_size large (eg 21) it takes to long to try ALL
  // possible 21-mers, the last argument allows you to specify the largest one to test


  BinaryKmer tmp_kmer;
  BinaryKmer tmp_kmer2;
  
  void test(short kmer_size, int num_bits, int bucket, int max_tries, int step, long long max_kmer_to_test)
    {
      
      int number_of_bits      = num_bits;
      int bucket_size         = bucket;
      long long bad_reads     = 0; 
      int max_retries         = max_tries;
      boolean found           = false;
      
      HashTable* hash_table  = hash_table_new(number_of_bits,bucket_size,max_retries,kmer_size);
      
      
      long long i;
          

      for (i=0; i< max_kmer_to_test; i++)
	{

	  BinaryKmer b;
	  binary_kmer_initialise_to_zero(&b);
	  b[NUMBER_OF_BITFIELDS_IN_BINARY_KMER-1]=(bitfield_of_64bits) i;

	  hash_table_find_or_insert(element_get_key(&b, hash_table->kmer_size, &tmp_kmer),&found, hash_table);
	  if (found==false)
	    {
	      CU_ASSERT(binary_kmer_comparison_operator(b,*(element_get_key(&b, hash_table->kmer_size, &tmp_kmer)) ) ); 
	    }
	}
      
      Element* e=NULL;
      
      
      for (i=0; i< max_kmer_to_test; i=i+step)
	{

	  BinaryKmer b;
	  binary_kmer_initialise_to_zero(&b);
	  b[NUMBER_OF_BITFIELDS_IN_BINARY_KMER-1]=(bitfield_of_64bits) i;

	  e = hash_table_find(element_get_key(&b,hash_table->kmer_size,&tmp_kmer), hash_table);
	  CU_ASSERT(e!=NULL);
	  if (e !=NULL)
	    {
	      CU_ASSERT(binary_kmer_comparison_operator(e->kmer, *element_get_key(&b, hash_table->kmer_size, &tmp_kmer2)) );
	    }
	  else
	    {
        die("Error: e is NULL for i=%lld - unable to find\n",i);
	     }
	}
      
      hash_table_free(&hash_table);
      CU_ASSERT(hash_table == NULL);
      
    }