]> git.donarmstrong.com Git - biopieces.git/blobdiff - code_c/Maasha/src/lib/seq.c
fixed rename bug
[biopieces.git] / code_c / Maasha / src / lib / seq.c
index c2a5e3e3e8e184426b380ccb7a618f3cf813d52e..37180e7bd1d3fcc55057f7d3d1aa84b17cb3a6b3 100644 (file)
@@ -1,8 +1,77 @@
+/* Martin Asser Hansen (mail@maasha.dk) Copyright (C) 2008 - All right reserved */
+
 #include "common.h"
+#include "mem.h"
 #include "seq.h"
 
+/* Byte array for fast convertion of binary blocks to DNA. */
+/* Binary blocks holds four nucleotides encoded in 2 bits: */
+/* A=00 T=11 C=01 G=10 */
+char *bin2dna[256] = {
+    "AAAA", "AAAC", "AAAG", "AAAT", "AACA", "AACC", "AACG", "AACT",
+    "AAGA", "AAGC", "AAGG", "AAGT", "AATA", "AATC", "AATG", "AATT",
+    "ACAA", "ACAC", "ACAG", "ACAT", "ACCA", "ACCC", "ACCG", "ACCT",
+    "ACGA", "ACGC", "ACGG", "ACGT", "ACTA", "ACTC", "ACTG", "ACTT",
+    "AGAA", "AGAC", "AGAG", "AGAT", "AGCA", "AGCC", "AGCG", "AGCT",
+    "AGGA", "AGGC", "AGGG", "AGGT", "AGTA", "AGTC", "AGTG", "AGTT",
+    "ATAA", "ATAC", "ATAG", "ATAT", "ATCA", "ATCC", "ATCG", "ATCT",
+    "ATGA", "ATGC", "ATGG", "ATGT", "ATTA", "ATTC", "ATTG", "ATTT",
+    "CAAA", "CAAC", "CAAG", "CAAT", "CACA", "CACC", "CACG", "CACT",
+    "CAGA", "CAGC", "CAGG", "CAGT", "CATA", "CATC", "CATG", "CATT",
+    "CCAA", "CCAC", "CCAG", "CCAT", "CCCA", "CCCC", "CCCG", "CCCT",
+    "CCGA", "CCGC", "CCGG", "CCGT", "CCTA", "CCTC", "CCTG", "CCTT",
+    "CGAA", "CGAC", "CGAG", "CGAT", "CGCA", "CGCC", "CGCG", "CGCT",
+    "CGGA", "CGGC", "CGGG", "CGGT", "CGTA", "CGTC", "CGTG", "CGTT",
+    "CTAA", "CTAC", "CTAG", "CTAT", "CTCA", "CTCC", "CTCG", "CTCT",
+    "CTGA", "CTGC", "CTGG", "CTGT", "CTTA", "CTTC", "CTTG", "CTTT",
+    "GAAA", "GAAC", "GAAG", "GAAT", "GACA", "GACC", "GACG", "GACT",
+    "GAGA", "GAGC", "GAGG", "GAGT", "GATA", "GATC", "GATG", "GATT",
+    "GCAA", "GCAC", "GCAG", "GCAT", "GCCA", "GCCC", "GCCG", "GCCT",
+    "GCGA", "GCGC", "GCGG", "GCGT", "GCTA", "GCTC", "GCTG", "GCTT",
+    "GGAA", "GGAC", "GGAG", "GGAT", "GGCA", "GGCC", "GGCG", "GGCT",
+    "GGGA", "GGGC", "GGGG", "GGGT", "GGTA", "GGTC", "GGTG", "GGTT",
+    "GTAA", "GTAC", "GTAG", "GTAT", "GTCA", "GTCC", "GTCG", "GTCT",
+    "GTGA", "GTGC", "GTGG", "GTGT", "GTTA", "GTTC", "GTTG", "GTTT",
+    "TAAA", "TAAC", "TAAG", "TAAT", "TACA", "TACC", "TACG", "TACT",
+    "TAGA", "TAGC", "TAGG", "TAGT", "TATA", "TATC", "TATG", "TATT",
+    "TCAA", "TCAC", "TCAG", "TCAT", "TCCA", "TCCC", "TCCG", "TCCT",
+    "TCGA", "TCGC", "TCGG", "TCGT", "TCTA", "TCTC", "TCTG", "TCTT",
+    "TGAA", "TGAC", "TGAG", "TGAT", "TGCA", "TGCC", "TGCG", "TGCT",
+    "TGGA", "TGGC", "TGGG", "TGGT", "TGTA", "TGTC", "TGTG", "TGTT",
+    "TTAA", "TTAC", "TTAG", "TTAT", "TTCA", "TTCC", "TTCG", "TTCT",
+    "TTGA", "TTGC", "TTGG", "TTGT", "TTTA", "TTTC", "TTTG", "TTTT"
+};
+
+
+seq_entry *seq_new( size_t max_seq_name, size_t max_seq )
+{
+    /* Martin A. Hansen, August 2008 */
+
+    /* Initialize a new sequence entry. */
+
+    seq_entry *entry = NULL;
+    entry            = mem_get( sizeof( seq_entry ) );
+    entry->seq_name  = mem_get( max_seq_name );
+    entry->seq       = mem_get( max_seq );
+    entry->seq_len   = 0;
+
+    return entry;
+}
+
+
+void seq_destroy( seq_entry *entry )
+{
+    /* Martin A. Hansen, August 2008 */
+
+    /* Destroy a sequence entry. */
+
+    mem_free( &entry->seq_name );
+    mem_free( &entry->seq );
+    mem_free( &entry );
+}
+
 
-void uppercase_seq( char *seq )
+void seq_uppercase( char *seq )
 {
     /* Martin A. Hansen, May 2008 */
 
@@ -75,7 +144,7 @@ void complement_nuc( char *seq )
     } else if ( is_rna( seq ) ) {
         complement_rna( seq );
     } else {
-        die( "Complement nuc failed.\n" );
+        abort();
     }
 }
 
@@ -437,7 +506,7 @@ char *seq_guess_type( char *seq )
     } else if ( is_protein( seq ) ) {
         type = "PROTEIN";
     } else {
-        die( "Could not guess sequence type.\n" );
+        abort();
     }
 
     return type;
@@ -475,7 +544,7 @@ int oligo2bin( char *oligo )
     int bin; 
     
     if ( strlen( oligo ) > 15 ) {
-        die( "Oligo will not fit in an integer." );
+        abort();
     }
 
     bin = 0;
@@ -492,7 +561,7 @@ int oligo2bin( char *oligo )
             case 'U': case 'u': bin |= 1; break;
             case 'C': case 'c': bin |= 2; break;
             case 'G': case 'g': bin |= 3; break;
-            default: die( "Unrecognized nucleotide." );
+            default: abort();
         }
     }