Main Page   Class Hierarchy   Compound List   File List   Contact   Download   Symbolic Constraints   Examples  

multiseq.c

00001 #include"mwt.h"
00002 
00003 //#include<LEDA/graph.h>
00004 //#include<LEDA/node_array.h>
00005 //#include<LEDA/tuple.h>
00006 #include<ctype.h>
00007 #include<fstream.h>
00008 #include<iostream.h>
00009 
00010 int main(int argc, char* argv[]) {
00011 
00012   ifstream is(argv[1]);
00013 
00014   //  GRAPH<string, two_tuple<int, double> > H;
00015   //  H.read_gml(is);
00016 
00017   int sequences;
00018   int edges;
00019   is >> sequences >> edges;
00020 
00021   int length[sequences];
00022   char name[sequences][100];
00023   char stri[sequences][1000];
00024 
00025   for(int i=0; i<sequences; i++) {
00026     is >> length[i] >> name[i] >> stri[i];
00027     cout<<name[i]<<" "<<stri[i]<<endl;
00028   };
00029 
00030   int start_node[edges];
00031   int end_node[edges];
00032   int type[edges];
00033   double cost[edges];
00034   int sol[edges];
00035 
00036   for(int i=0; i<edges; i++) {
00037     is >> start_node[i] >> end_node[i] >> type[i] >> cost[i];
00038   }
00039 
00040   MWT(sequences, length, edges, start_node, end_node, type, cost, sol);
00041 
00042   int SI[sequences+1], si[sequences+1];
00043   SI[0]=0;
00044   for(int i=0; i<sequences; i++) {
00045     SI[i+1]=SI[i]+length[i];
00046     si[i]=SI[i];
00047   };
00048   si[sequences]=SI[sequences];
00049 
00050   int N[SI[sequences]][sequences];
00051   int S[SI[sequences]];
00052   int s=0;
00053   for(int i=0; i<SI[sequences]; i++) {
00054     if(i==SI[s+1]) s++;
00055     S[i]=s;
00056     for(int j=0; j<sequences; j++) N[i][j]=-1;
00057   };
00058 
00059   for(int i=0; i<edges; i++) {
00060     if((sol[i]==1) && (type[i]==-1)) {
00061       N[start_node[i]][S[end_node[i]]]=end_node[i];
00062       N[end_node[i]][S[start_node[i]]]=start_node[i];
00063     }
00064   }
00065 
00066   char os[sequences][1000];
00067 
00068   int PN[sequences];
00069   bool b, cont;
00070   int p=0;
00071 
00072   do {
00073     for(int i=0; i<sequences; i++) PN[i]=0;
00074     for(int i=0; i<sequences; i++) if(SI[i]<si[i+1]) {
00075       b=true;
00076       for(int j=0; j<sequences; j++) if(N[SI[i]][j]!=-1) {
00077         if (N[SI[i]][j]>SI[j])
00078           b=false;
00079       }
00080       if(b) PN[i]=1;
00081     }
00082 
00083     cont=false;
00084     for(int i=0; i<sequences; i++) if(PN[i]==1) {
00085       //cout<<p<<" phase write "<<i<<" "<<S[i]<<endl; 
00086       os[i][p]=(char) tolower(stri[i][SI[i]-si[i]]);
00087       SI[i]++;
00088       cont=true;
00089     } else os[i][p]='.';
00090      p++;
00091   } while(cont);
00092 
00093   for(int i=0; i<sequences; i++) os[i][p-1]='\0';
00094 
00095   for(int i=0; i<sequences; i++) cout<<os[i]<<endl;
00096 
00097   char* mfsname=argv[2];
00098   ofstream msf(mfsname);
00099 
00100   msf<<".PileUp\n\nMFS: 94 Type: P\n\n//\n";
00101 
00102   for(int i=0; i<sequences; i++) {
00103     msf<<"\n "<<name[i]<<" "<<os[i];
00104   }
00105   msf<<endl<<endl;
00106 
00107   return 0;
00108 }
00109 

Generated on Tue Nov 16 15:18:17 2004 for SCIL by doxygen1.2.16