inputs.cpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:6k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: inputs.cpp,v $
  4.  * PRODUCTION Revision 1000.1  2004/06/01 18:10:09  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: inputs.cpp,v 1000.1 2004/06/01 18:10:09 gouriano Exp $
  10. * ===========================================================================
  11. *
  12. *                            PUBLIC DOMAIN NOTICE
  13. *               National Center for Biotechnology Information
  14. *
  15. *  This software/database is a "United States Government Work" under the
  16. *  terms of the United States Copyright Act.  It was written as part of
  17. *  the author's official duties as a United States Government employee and
  18. *  thus cannot be copyrighted.  This software/database is freely available
  19. *  to the public for use. The National Library of Medicine and the U.S.
  20. *  Government have not placed any restriction on its use or reproduction.
  21. *
  22. *  Although all reasonable efforts have been taken to ensure the accuracy
  23. *  and reliability of the software and data, the NLM and the U.S.
  24. *  Government do not and cannot warrant the performance or results that
  25. *  may be obtained by using this software or data. The NLM and the U.S.
  26. *  Government disclaim all warranties, express or implied, including
  27. *  warranties of performance, merchantability or fitness for any particular
  28. *  purpose.
  29. *
  30. *  Please cite the author in any work or product based on this material.
  31. *
  32. * ===========================================================================
  33. *
  34. * Author:  Richard Desper
  35. *
  36. * File Description:  inputs.cpp
  37. *
  38. *    A part of the Miminum Evolution algorithm
  39. *
  40. */
  41. #include <ncbi_pch.hpp>
  42. #include <stdio.h>
  43. #include <stdlib.h>
  44. #include <math.h>
  45. #include "fastme.h"
  46. #include "graph.h"
  47. BEGIN_NCBI_SCOPE
  48. BEGIN_SCOPE(fastme)
  49. boolean leaf(meNode *v);
  50. meEdge *depthFirstTraverse(meTree *T, meEdge *e);
  51. void compareSets(meTree *T, meSet *S, FILE *ofile)
  52. {
  53.   meEdge *e;
  54.   meNode *v,*w;
  55.   meSet *X;
  56.   e = depthFirstTraverse(T,NULL);
  57.   while (NULL != e)
  58.     {
  59.       v = e->head;
  60.       for(X = S; NULL != X; X = X->secondNode)
  61. {
  62.   w = X->firstNode;
  63.   if (0 == strcmp(v->label,w->label))
  64.     {
  65.       v->index2 = w->index2;
  66.     w->index2 = -1;
  67.     break;
  68.     }
  69. }
  70.       e = depthFirstTraverse(T,e);
  71.     }
  72.   v = T->root;
  73.   for(X = S; NULL != X; X = X->secondNode)
  74.     {
  75.       w = X->firstNode;
  76.       if (0 == strcmp(v->label,w->label))
  77. {
  78.   v->index2 = w->index2;
  79.   w->index2 = -1;
  80.   break;
  81. }
  82.     }
  83.   if (-1 == v->index2)
  84.     {
  85.       fprintf(stderr,"Error leaf %s in meTree not in distance matrix.n",v->label);
  86.       exit(EXIT_FAILURE);
  87. }
  88.   e = depthFirstTraverse(T,NULL);
  89.   while (NULL != e)
  90.     {
  91.       v = e->head;
  92.       if ((leaf(v)) && (-1 == v->index2))
  93. {
  94.   fprintf(stderr,"Error leaf %s in meTree not in distance matrix.n",v->label);
  95.   exit(EXIT_FAILURE);
  96. }
  97.       e = depthFirstTraverse(T,e);
  98.       }
  99.   for(X = S; NULL != X; X = X->secondNode)
  100.     if (X->firstNode->index2 > -1)
  101.       {
  102. fprintf(ofile,"(v1:0.0)v2;");
  103. fclose(ofile);
  104. fprintf(stderr,"Error meNode %s in matrix but not a leaf in tree.n",X->firstNode->label);
  105. exit(EXIT_FAILURE);
  106.       }
  107. }
  108. void freeMatrix(double **D, int size)
  109. {
  110.   int i;
  111.   for(i=0;i<size;i++)
  112.     free(D[i]);
  113.   free(D);
  114. }
  115. double **loadMatrix(double **table_in, char **labels, int *size_in, meSet *S)
  116. {
  117. /*   char nextString[MAX_EVENT_NAME]; */
  118.   meNode *v;
  119.   double **table;
  120.   int *size;
  121.   int i,j;
  122.   size = size_in;
  123.   if ((*size < 0) || (*size > MAXSIZE))
  124.     {
  125.       printf("Problem inputting size.n");
  126.       exit(EXIT_FAILURE);
  127.     }
  128.   table = (double **) malloc(*size*sizeof(double *));
  129.   for(i=0;i<*size;i++)
  130.     {
  131.       j = 0;
  132.       table[i] = (double *) malloc(*size*sizeof(double));
  133. /*       if (!(fscanf(ifile,"%s",nextString))) */
  134. /*       { */
  135. /*           fprintf(stderr,"Error loading label %d.n",i); */
  136. /*           exit(EXIT_FAILURE); */
  137. /*       } */
  138. /*       v = makeNewNode(nextString,-1); */
  139.       v = makeNewNode(labels[i],-1);
  140.       v->index2 = i;
  141.       S = addToSet(v,S);
  142.       while (j < *size)
  143.   {
  144. /*           if (!(fscanf(ifile,"%s",nextString))) */
  145. /*        { */
  146. /*               fprintf(stderr,"Error loading (%d,%d)-entry.n",i,j); */
  147. /*               exit(EXIT_FAILURE); */
  148. /*        } */
  149. /*           table[i][j++] = atof(nextString); */
  150.           table[i][j] = table_in[i][j];
  151.           j++;
  152.   }   
  153.     }
  154.     return(table);
  155. }
  156. double **loadMatrixOLD(FILE *ifile, int *size, meSet *S)
  157. {
  158.   char nextString[MAX_EVENT_NAME];
  159.   meNode *v;
  160.   double **table;
  161.   int i,j;
  162.   if (!(fscanf(ifile,"%s",nextString)))
  163.     {
  164.       fprintf(stderr,"Error loading input matrix.n");
  165.       exit(EXIT_FAILURE);
  166.     }
  167.   *size = atoi(nextString);
  168.   if ((*size < 0) || (*size > MAXSIZE))
  169.     {
  170.       printf("Problem inputting size.n");
  171.       exit(EXIT_FAILURE);
  172.     }
  173.   table = (double **) malloc(*size*sizeof(double *));
  174.   for(i=0;i<*size;i++)
  175.     {
  176.       j = 0;
  177.       table[i] = (double *) malloc(*size*sizeof(double));
  178.       if (!(fscanf(ifile,"%s",nextString)))
  179. {
  180.   fprintf(stderr,"Error loading label %d.n",i);
  181.   exit(EXIT_FAILURE);
  182. }
  183.       v = makeNewNode(nextString,-1);
  184.       v->index2 = i;
  185.       S = addToSet(v,S);
  186.       while (j < *size)
  187. {
  188.   if (!(fscanf(ifile,"%s",nextString)))
  189.     {
  190.       fprintf(stderr,"Error loading (%d,%d)-entry.n",i,j);
  191.       exit(EXIT_FAILURE);
  192.     }
  193.   table[i][j++] = atof(nextString);
  194. }
  195.     }
  196.   return(table);
  197. }
  198. void partitionSizes(meTree *T)
  199. {
  200.   meEdge *e;
  201.   e = depthFirstTraverse(T,NULL);
  202.   while (NULL != e)
  203.     {
  204.       if (leaf(e->head))
  205. e->bottomsize = 1;
  206.       else
  207. e->bottomsize = e->head->leftEdge->bottomsize 
  208.   + e->head->rightEdge->bottomsize;
  209.       e->topsize = (T->size + 2)/2 - e->bottomsize;
  210.       e = depthFirstTraverse(T,e);
  211.     }
  212. }
  213. END_SCOPE(fastme)
  214. END_NCBI_SCOPE
  215. /*
  216.  * ===========================================================================
  217.  * $Log: inputs.cpp,v $
  218.  * Revision 1000.1  2004/06/01 18:10:09  gouriano
  219.  * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.2
  220.  *
  221.  * Revision 1.2  2004/05/21 21:41:04  gorelenk
  222.  * Added PCH ncbi_pch.hpp
  223.  *
  224.  * Revision 1.1  2004/02/10 15:16:03  jcherry
  225.  * Initial version
  226.  *
  227.  * ===========================================================================
  228.  */