MSA_MST.c
上传用户:szpanda
上传日期:2016-03-09
资源大小:9k
文件大小:3k
源码类别:

DNA

开发平台:

C/C++

  1. /* File: MSA_MST.c                         */ 
  2. /* Author:Qichan Ma, Student No.:250494898 */
  3. #include "globals.h"
  4. #include "readInput.h"
  5. #include "multiAlign.h"
  6. int main(int argc, char *argv[]) {
  7.     /* read the residues, substitution score matrix & gap penalty from the input file */
  8.     readScore();
  9.     printf("n");
  10.     /* read the sequences from the input file */
  11.     readSeq();
  12.     printf("n");
  13.     
  14.     /* the option for the output; 1 reprents output to the screen, 2 reprents output to the file */
  15. printf("Please choose the option for the output; 1 reprents output to the screen, 2 reprents output to the file: ");
  16. scanf("%d", &opt1);
  17. if(opt1 == 1)
  18.         out = stdout;
  19.      else if (opt1 == 2) {
  20.          char *outfile="MultlipleAlignment.txt";
  21.      if((out = fopen(outfile, "w")) == NULL) {
  22.      printf("cannot open the outfilen");
  23.      exit(0);
  24.      }
  25.       }
  26.      else {
  27.          printf("wrong inputn");
  28.          exit(0);
  29.      }
  30.     printf("n");
  31.     /* the option for the output result; 1 reprents output the final alignment, 
  32.        2 reprents output both the final alignment and intermediate result */
  33. printf("Please choose the option for the output result; 1 reprents output the final alignment, 2 reprents output both the final alignment and intermediate result: ");
  34. scanf("%d", &opt2);
  35.     if(opt2 != 1 && opt2 != 2) {
  36.          printf("wrong inputn");
  37.          exit(0);
  38.     }
  39.     printf("n"); 
  40.     
  41.     int i; 
  42.     /* the maximal pairwise alignment's length is no more than 2*maximal sequence length */
  43.     int maxPairAlignLen = 2*seqLen[0];
  44.     for(i=0; i<numOfSeq; i++) {
  45.         if(maxPairAlignLen < 2*seqLen[i])
  46.             maxPairAlignLen = 2*seqLen[i];
  47.     }
  48.     align1 = (char *)malloc(maxPairAlignLen*sizeof(char));
  49.     align2 = (char *)malloc(maxPairAlignLen*sizeof(char)); 
  50.     /* do the multiple sequence alignment using Kruskal's maximum spanning tree algorithm */
  51.     MST_Kruskal();
  52.     /* output the multiple alignment & SP score */
  53.     printMultiAlign();
  54.         
  55.     /* free score */
  56.     for(i=0; i<residuesLen; i++)
  57.         free(score[i]);
  58.     free(score);
  59.     /* free seqName */
  60.     for(i=0;i<numOfSeq;i++)
  61.         free(seqName[i]);
  62.     free(seqName);
  63.     /* free seq */
  64.     for(i=0;i<numOfSeq;i++)
  65.         free(seq[i]);
  66.     free(seq); 
  67.     /* free seqLen */
  68.     free(seqLen);     
  69.     /* free multiAlign */
  70.     for(i=0;i<numOfSeq;i++)
  71.         free(multiAlign[i]);
  72.     free(multiAlign); 
  73.     /* free the temporary pairwise alignment */   
  74.     free(align1);
  75.     free(align2);
  76.     
  77.     /* close the output file */
  78.     if(opt1 == 2)
  79.         fclose(out);          
  80.     return 0;