Slice Tools
  • Home
  • SourceForge Page


  • libSlice
  • Home
  • Modules
  • Files
  • Examples
  • Additional Information


  • SourceForge.net Logo
     

    libSliceExample.c

    Simple demonstration using libSlice.

    Demonstrates how to use the various functions provided by libSlice.

    /*
      $Id: libSliceExample.c,v 1.1 2005/07/29 02:55:17 mschatz Exp $
      
      Simple Example of how to use the C interface to libSlice
    */
    
    #include <stdio.h>
    #include <stdlib.h>
    #include "Slice.h"
    
    int main(int argc, char ** argv)
    {
      int dcov = 4;
      int len  = 3;
      int i;
    
      libSlice_Slice *s = libSlice_newmem(len, sizeof(libSlice_Slice));
    
      for (i = 0; i < len; i++)
      {
        s[i].bc = libSlice_newmem(dcov, sizeof(char));
        s[i].qv = libSlice_newmem(dcov, sizeof(char));
        s[i].rc = libSlice_newmem(dcov, sizeof(char));
        s[i].dcov = dcov;
      }
    
      s[0].c = 'A';
      s[0].bc[0] = 'A'; s[0].bc[1] = 'A'; s[0].bc[2] = 'T'; s[0].bc[3] = 'C';
      s[0].qv[0] = 30;  s[0].qv[1] = 25;  s[0].qv[2] = 20;  s[0].qv[3] = 15; 
      s[0].rc[0] = 1;   s[0].rc[1] = 1;   s[0].rc[2] = 0;   s[0].rc[3] = 0;
      
      s[1].c = 'T';
      s[1].bc[0] = 'T'; s[1].bc[1] = 'T'; s[1].bc[2] = 'T'; s[1].bc[3] = 'T';
      s[1].qv[0] = 30;  s[1].qv[1] = 30;  s[1].qv[2] = 20;  s[1].qv[3] = 15;
      s[1].rc[0] = 1;   s[1].rc[1] = 0;   s[1].rc[2] = 1;   s[1].rc[3] = 0;
    
      s[2].c = 'Y';
      s[2].bc[0] = 'C'; s[2].bc[1] = 'T'; s[2].bc[2] = 'C'; s[2].bc[3] = 'T';
      s[2].qv[0] = 30;  s[2].qv[1] = 30;  s[2].qv[2] = 30;  s[2].qv[3] = 30;
      s[2].rc[0] = 1;   s[2].rc[1] = 1;   s[2].rc[2] = 0;   s[2].rc[3] = 0;
    
      for (i = 0; i < len; i++)
      {
        int j;
        printf("\nslice i=%d, c=%c, dcov=%d\n", i, s[i].c, s[i].dcov);
    
        for (j = 0; j < s[i].dcov; j++)
        {
          printf("  j=%d bc=%c qv=%d rc=%d\n", j, s[i].bc[j], s[i].qv[j], s[i].rc[j]);
        }
      }
    
      // ================================= //
      //   testing getConsQC(),getCons()   //
      // ================================= //
      {
        libSlice_Consensus result;
        libSlice_getConsensus(&s[0], &result, NULL, 0);
    
        printf("\ntesting getConsQC(), getConsensus()\n");
        printf("slice i=0 c=%c qc=%d qv=%d\n", 
               result.consensus,
               libSlice_getConsQC(&s[0], 0), 
               result.qvConsensus);
    
        printf("[qvA=%d qvC=%d qvG=%d qvT=%d qvGap=%d]\n\n", 
               result.qvA, 
               result.qvC, 
               result.qvG, 
               result.qvT, 
               result.qvGap);
      }
    
      // =========================================== //
      //   testing getConsQCRange(),getConsRange()   //
      // =========================================== //
      {
        libSlice_Consensus results [len];
    
        char *qc = libSlice_getConsQCRange(s, len, 0);
        libSlice_getConsensusRangeWithAmbiguity(s, results, len, NULL, 0);
    
        printf("testing getConsQCRange(), getConsensusRange()\n");
        for (i = 0; i < len; i++)
        {
          printf("slice i=%d c=%c qc=%d qv=%d\n", 
                 i,
                 results[i].consensus,
                 qc[i], 
                 results[i].qvConsensus);
    
          printf("[qvA=%d qvC=%d qvG=%d qvT=%d qvGap=%d]\n\n", 
                 results[i].qvA, 
                 results[i].qvC, 
                 results[i].qvG, 
                 results[i].qvT, 
                 results[i].qvGap);
        }
    
        free(qc);
      }
    
      for (i = 0; i < len; i++)
      {
        free(s[i].bc);
        free(s[i].qv);
        free(s[i].rc);
      }
    
      free(s);
      return 0;
    }