]> git.donarmstrong.com Git - biopieces.git/blobdiff - code_c/Maasha/src/bipartite_scan.c
tada
[biopieces.git] / code_c / Maasha / src / bipartite_scan.c
index 3646676d8abeac181ba5c41742d1f27ccbe08518..86f3b8a70ada2227855ea821bbaa7a9befe6d2dd 100644 (file)
@@ -33,7 +33,7 @@ uint     *count_array_new( size_t nmemb );
 void      scan_seq( char *seq, size_t seq_len, uint *count_array );
 void      rescan_seq( char *seq, size_t seq_len, uint *count_array, size_t cutoff );
 void      scan_list( list_sl *list, uint *count_array );
-void      rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff );
+void      rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff, uint *output_array );
 bitblock *bitblock_new();
 uint      blocks2motif( uchar bin1, uchar bin2, ushort dist );
 void      count_array_print( uint *count_array, size_t nmemb, size_t cutoff );
@@ -292,6 +292,9 @@ void rescan_seq( char *seq, size_t seq_len, uint *count_array, size_t cutoff )
     node_sl *new_node    = NULL;
     node_sl *old_node    = NULL;
     list_sl *list        = list_sl_new();
+    uint *output_array   = NULL;
+
+    output_array         = mem_get_zero( sizeof( uint ) * ( seq_len + 1 ) );
 
     for ( i = 0; seq[ i ]; i++ )
     {
@@ -336,7 +339,7 @@ void rescan_seq( char *seq, size_t seq_len, uint *count_array, size_t cutoff )
             {
                 // bitblock_list_print( list );   /* DEBUG */
 
-                rescan_list( list, count_array, i, cutoff );
+                rescan_list( list, count_array, i, cutoff, output_array );
 
                 mem_free( &list->first->val );
 
@@ -350,10 +353,16 @@ void rescan_seq( char *seq, size_t seq_len, uint *count_array, size_t cutoff )
     {
         // bitblock_list_print( list );  /* DEBUG */
 
-        rescan_list( list, count_array, i, cutoff );
+        rescan_list( list, count_array, i, cutoff, output_array );
     }
 
     list_sl_destroy( &list );
+
+    for ( i = 0; i < seq_len; i++ ) {
+        printf( "%zu\t%u\n", i, output_array[ i ] );
+    }
+
+    free( output_array );
 }
 
 
@@ -407,7 +416,7 @@ void scan_list( list_sl *list, uint *count_array )
 }
 
 
-void rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff )
+void rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff, uint *output_array )
 {
     /* Martin A. Hansen, September 2008 */
 
@@ -421,6 +430,7 @@ void rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff )
     bitblock *block1     = NULL;
     bitblock *block2     = NULL;
     int       i          = 0;
+    int       k          = 0;
     ushort    dist       = 0;
     uint      motif_bin  = 0;
     uint      j          = 0;
@@ -455,8 +465,15 @@ void rescan_list( list_sl *list, uint *count_array, size_t pos, size_t cutoff )
 
                 count = count_array[ motif_bin ];
 
-                if ( count > cutoff ) {
-                    printf( "%zu\t%u\t%u\n", pos + j, motif_bin, count );
+                if ( count > cutoff )
+                {
+                    // printf( "%zu\t%u\t%u\n", pos + j, motif_bin, count );
+
+                    for ( k = 0; k < BLOCK_SIZE_NT - 1; k++ )
+                    {
+                        output_array[ pos - j + k - BLOCK_SIZE_NT ]    += count;
+                        output_array[ pos + k - dist - BLOCK_SIZE_NT ] += count;
+                    }
                 }
             }