8 #include "io_lib_header.h"
9 #include "util_lib_header.h"
10 #include "dp_lib_header.h"
11 #include "define_header.h"
15 #define FATAL "fatal:reformat_struc"
17 char * process_repeat (char *aln, char *seq, char *pdb)
19 char *tf, *file, *name;
22 int r1, r2, is_r1, is_r2, l1=0, l2=0, a;
26 A=main_read_aln (aln, NULL);
27 for (a=0; a<A->nseq; a++)ungap(A->seq_al[a]);
29 S=main_read_seq (seq);
30 P=get_pdb_sequence (pdb);
33 A2=align_two_sequences (S->seq[0], P->seq[0], "pam250mt", -10, -1, "myers_miller_pair_wise");
35 pos=vcalloc ( A2->len_aln+1, sizeof (int));
37 for (l1=0, l2=0,a=0; a< A2->len_aln; a++)
57 for (a=0; a<A->nseq; a++)
63 coor=string2num_list2 (name, "-");
65 //Check the compatibility between the guide sequence and the coordinates
66 for ( c=0,b=coor[1]-1; b<coor[2]; b++, c++)
69 if (tolower(A->seq_al[a][c])!=tolower(S->seq[0][b]))
70 printf_exit (EXIT_FAILURE, stderr, "Incompatibility between the repeat [%s] and the master Sequence [%s]\n%s",A->name[a], seq, A->seq_al[a]);
73 printf_system ( "extract_from_pdb %s -coor %d %d -seq_field SEQRES> %s", pdb,pos[coor[1]-1],pos[coor[2]-1], file);
74 fprintf (fp, ">%s _P_ %s\n", name, file);
83 char * normalize_pdb_file (char *name_in, char *seq, char *out_file)
89 int start, end, npdb, r1, r2;
93 if ( !name_in) return NULL;
96 sprintf ( name, "%s", name_in);
99 if ( !is_pdb_file(name))
101 fprintf(stdout, "\nERROR[normalize_pdb_file]: %s is not a pdb file[FATAL:%s]\n", name, PROGRAM);
102 myexit (EXIT_FAILURE);
105 S=get_pdb_sequence (name);
106 A=align_two_sequences (S->seq[0],seq,"idmat",-3,0, "fasta_pair_wise");
110 for (start=-1, end=-1,npdb=0,a=0; a< A->len_aln; a++)
112 r1=1-is_gap(A->seq_al[0][a]);
113 r2=1-is_gap(A->seq_al[1][a]);
117 if (r1 && r2 && start==-1)start=npdb;
118 if (r1 && r2)end=npdb;
122 free_sequence (S, -1);
124 sprintf ( command, "extract_from_pdb -infile %s -atom ALL -chain FIRST -coor %d %d -nodiagnostic > %s", check_file_exists(name), start, end, out_file);
125 my_system ( command);
129 Ca_trace * trim_ca_trace (Ca_trace *T, char *seq )
132 -removes from Ca trace all the residues that are not in the sequence
133 -add in the Ca trace residues unmatched in the structure (it gives them a NULL structure)
137 int a,l, s, r, is_r, is_s;
138 int *seq_cache, *struc_cache;
144 /* lower_string (T->seq);
149 sprintf (buf1, "%s", T->seq);
150 sprintf (buf2, "%s", seq);
155 if ( strm (buf1,buf2))return T;
158 ALN=align_two_sequences (T->seq,seq, "est_idmat",-1, 0,"fasta_pair_wise");
159 struc_cache=vcalloc (ALN->len_aln+1, sizeof (int));
160 seq_cache =vcalloc (ALN->len_aln+1, sizeof (int));
162 for ( r=0, s=0,a=0; a< ALN->len_aln; a++)
164 is_r=!is_gap(ALN->seq_al[0][a]);
165 is_s=!is_gap(ALN->seq_al[1][a]);
172 struc_cache[r-1]=s-1;
175 else if ( is_s && !is_r)
180 else if ( !is_s && is_r)
186 T->ca=vrealloc ( T->ca, sizeof (Atom*)*(ALN->len_aln+1));
187 T->peptide_chain=vrealloc ( T->peptide_chain, (sizeof (Amino_acid*))*(ALN->len_aln+1));
188 T->seq=vrealloc ( T->seq, ALN->len_aln+1);
190 for ( a=T->len; a< ALN->len_aln; a++)
192 T->peptide_chain[a]=vcalloc (1, sizeof (Amino_acid));
197 for ( a=0; a< T->n_atom; a++)
201 if ( struc_cache[A->res_num-1]==-1)continue;
204 /*set the struc residue to its sequence index*/
205 A->res_num=struc_cache[A->res_num-1]+1;
206 if (strm (A->type, "CA")) {T->ca[A->res_num-1]=A;tot_l++;}
207 if ( strm (A->type, "CA"))(T->peptide_chain[A->res_num-1])->CA=A;
208 if ( strm (A->type, "C"))(T->peptide_chain[A->res_num-1] )->C=A;
209 if ( strm (A->type, "CB"))(T->peptide_chain[A->res_num-1])->CB=A;
210 if ( strm (A->type, "N"))(T->peptide_chain[A->res_num-1] )->N=A;
218 if ( seq_cache[a]==-1)
223 if (!T->peptide_chain[a])T->peptide_chain[a]=vcalloc (1, sizeof (Amino_acid));
224 T->peptide_chain[a]->CA=NULL;
225 T->peptide_chain[a]->C =NULL;
226 T->peptide_chain[a]->CB=NULL;
227 T->peptide_chain[a]->N=NULL;
250 Ca_trace * read_ca_trace (char *name, char *seq_field )
256 if ( !is_simple_pdb_file (name))
258 tp_name=vtmpnam (NULL);
259 sprintf ( command, "extract_from_pdb -seq_field %s -infile %s -atom ALL -chain FIRST -mode simple> %s",seq_field, check_file_exists(name), tp_name);
260 if ( getenv4debug ("DEBUG_EXTRACT_FROM_PDB"))fprintf ( stderr, "\n[DEBUG_EXTRACT_FROM_PDB:read_ca_trace] %s\n", command);
261 my_system ( command);
266 return simple_read_ca_trace (tp_name);
269 Ca_trace * simple_read_ca_trace (char *tp_name )
271 /*This function reads a pdb file into a Ca_trace structure*/
281 int res_num=0, last_res_num=0;
284 buf=vcalloc ( VERY_LONG_STRING, sizeof (char));
285 n=count_n_line_in_file (tp_name );
289 T=vcalloc ( 1, sizeof ( Ca_trace));
290 declare_name (T->name);
293 /*1 Get the complete sequence: replace missing residues with Xs*/
294 for (a=0; a< VERY_LONG_STRING; a++)buf[a]='x';
297 fp=vfopen (tp_name, "r");
298 while ( (c=fgetc(fp))!='>');
299 fscanf ( fp, "%*s" );
300 while ( (c=fgetc(fp))!='\n');
301 fscanf ( fp, "%*s" );
302 while ( (c=fgetc(fp))!='\n');
303 while ((c=fgetc(fp))!=EOF)
307 fscanf (fp, "%*s %*s %c %*c %d %*f %*f %*f\n",&res,&res_num);
313 last_res_num=res_num;
317 buf[last_res_num]='\0';
323 T->seq=vcalloc ( T->len+1, sizeof (char));
324 buf=lower_string (buf);
325 sprintf ( T->seq, "%s", buf);
327 T->structure=vcalloc ( n, sizeof (Atom*));
328 for ( a=0; a< n; a++)T->structure[a]=vcalloc ( 1, sizeof (Atom));
329 T->ca=vcalloc ( T->len+1, sizeof ( Atom*));
332 fp=vfopen (tp_name, "r");
333 while ( (c=fgetc(fp))!='>');
334 fscanf ( fp, "%*s" );
335 while ( (c=fgetc(fp))!='\n');
336 fscanf ( fp, "%*s" );
337 while ( (c=fgetc(fp))!='\n');
339 while ((c=fgetc(fp))!=EOF)
344 fscanf (fp, "%*s %s %s %*c %d %f %f %f\n",A->type, A->res,&A->res_num, &A->x, &A->y, &A->z);
349 T->seq[A->res_num-1]=res;
351 if ( strm ( A->type, "CA")) T->ca[A->res_num-1]=A;
356 T->peptide_chain=vcalloc (T->len+1, sizeof (Amino_acid*));
357 for ( a=0; a<=T->len; a++) T->peptide_chain[a]=vcalloc (1, sizeof (Amino_acid));
358 for ( a=0; a< T->n_atom; a++)
362 if ( strm (A->type, "CA"))(T->peptide_chain[A->res_num-1])->CA=A;
363 if ( strm (A->type, "C"))(T->peptide_chain[A->res_num-1] )->C=A;
364 if ( strm (A->type, "CB"))(T->peptide_chain[A->res_num-1])->CB=A;
365 if ( strm (A->type, "N"))(T->peptide_chain[A->res_num-1] )->N=A;
373 Ca_trace * hasch_ca_trace ( Ca_trace *T)
376 T=hasch_ca_trace_nb (T);
377 T=hasch_ca_trace_bubble (T);
378 T=hasch_ca_trace_transversal (T);
381 Ca_trace * hasch_ca_trace_transversal ( Ca_trace *TRACE)
383 /*This function gets the Coordinates of a protein and computes the distance of each Ca to its
386 Compute the distance between, CA-x and CA+x with x=[1-N_ca]
387 T->nb[a][0]-->Number of distances.
388 T->nb[a][1... T->nb[a][0]]-->ngb index with respect to the Ca chain
389 T->d_nb[a][1... T->d_nb[a][0]]-->ngb index with respect to the Ca chain
400 TRACE->Transversal=vcalloc ( 1, sizeof (Struct_nb));
402 T=TRACE->Transversal;
405 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
406 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
408 for (d=0,a=0; a< TRACE->len; a++)
411 for ( b=1; b<=PP->N_ca; b++)
413 if ( (a-b)<0 || (a+b)>=TRACE->len)continue;
416 dist=get_atomic_distance ( A, B);
418 T->nb[a]=vrealloc ( T->nb[a], (++T->nb[a][0]+1)*sizeof (int));
419 T->nb[a][T->nb[a][0]]=b;
421 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
422 T->d_nb[a][T->nb[a][0]]=dist;
426 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
432 Ca_trace * hasch_ca_trace_nb ( Ca_trace *TRACE)
434 /*This function gets the Coordinates of a protein and computes the distance of each Ca to its
436 The first Ngb to the left and to the right are excluded
437 Ngd to the left get negative distances
438 Ngb to the right receive positive distances
439 T->nb[a][0]-->Number of ngb.
440 T->nb[a][1... T->nb[a][0]]-->ngb index with respect to the Ca chain
441 T->d_nb[a][1... T->d_nb[a][0]]-->ngb index with respect to the Ca chain
453 TRACE->Chain=vcalloc ( 1, sizeof (Struct_nb));
458 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
459 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
461 for (d=0,a=0; a< TRACE->len; a++)
463 for ( b=MAX(0,a-PP->N_ca); b< MIN( a+PP->N_ca, TRACE->len); b++)
465 if (FABS(a-b)<2)continue;
468 if ( !A || !B)continue;
469 dist=get_atomic_distance ( A, B);
473 T->nb[a]=vrealloc ( T->nb[a], (++T->nb[a][0]+1)*sizeof (int));
474 T->nb[a][T->nb[a][0]]=b;
476 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
477 T->d_nb[a][T->nb[a][0]]=dist;
481 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
486 Ca_trace * hasch_ca_trace_bubble ( Ca_trace *TRACE)
497 TRACE->Bubble=vcalloc ( 1, sizeof (Struct_nb));
502 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
503 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
504 list=declare_float ( TRACE->n_atom, 3);
507 for (a=0; a< TRACE->len; a++)
509 for ( b=0; b< TRACE->len; b++)
513 if ( !A || !B)continue;
514 dist=get_atomic_distance ( A, B);
516 if ( dist<PP->maximum_distance && FABS((A->res_num-B->res_num))>2)
519 T->nb[a]=vrealloc ( T->nb[a], (T->nb[a][0]+1)*sizeof (int));
520 T->nb[a][T->nb[a][0]]=(TRACE->ca[b])->num;
522 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
523 T->d_nb[a][T->nb[a][0]]= ((a<b)?dist:-dist);
526 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
530 for ( a=0; a< TRACE->len; a++)
532 for ( b=0; b< T->nb[a][0]; b++)
534 list[b][0]=T->nb[a][b+1];
535 list[b][1]=T->d_nb[a][b+1];
536 list[b][2]=(TRACE->structure[T->nb[a][b+1]])->res_num;
539 sort_float ( list, 3,2, 0, T->nb[a][0]-1);
540 for ( b=0; b< T->nb[a][0]; b++)
542 T->nb[a][b+1]=list[b][0];
543 T->d_nb[a][b+1]=list[b][1];
547 free_float ( list, -1);
553 float ** measure_ca_distances(Ca_trace *T)
559 dist=declare_float ( T->len, T->len);
561 for (a=0; a< T->len-1; a++)
563 for ( b=a+1; b< T->len; b++)
568 dist[a][b]=dist[b][a]=get_atomic_distance ( A, B);
574 float get_atomic_distance ( Atom *A, Atom*B)
589 d=(float) sqrt ( (double) ( dx*dx +dy*dy +dz*dz));
593 char * map_contacts ( char *file1, char *file2, float T)
601 ST1=read_ca_trace (file1, "ATOM");
602 ST2=read_ca_trace (file2, "ATOM");
604 contact_list=identify_contacts (ST1, ST2, T);
605 for ( a=0; a<ST1->len; a++)
607 ST1->seq[a]=(contact_list[a]==1)?toupper(ST1->seq[a]):tolower(ST1->seq[a]);
613 float ** print_contacts ( char *file1, char *file2, float T)
621 int *list1=NULL, *list2=NULL;
622 int *cache1, *cache2;
626 if ((list=strstr (file1, "_R_"))!=NULL)
630 list1=string2num_list2(list, "_");
633 if ((list=strstr (file2, "_R_"))!=NULL)
637 list2=string2num_list2(list, "_");
640 fprintf ( stdout, "\n#%s (%s) struc2contacts_01", PROGRAM, VERSION);
641 fprintf ( stdout, "\nStructure %s vs %s", file1, file2);
642 ST1=read_ca_trace (file1, "SEQRES");
643 ST2=read_ca_trace (file2, "SEQRES");
646 cache1=vcalloc (ST1->len+1, sizeof (int));
647 cache2=vcalloc (ST2->len+1, sizeof (int));
649 if (list1)for ( a=1; a<list1[0]; a++)cache1[list1[a]]=1;
650 else for ( a=1; a<ST1->len; a++)cache1[a]=1;
652 if (list2)for ( a=1; a<list2[0]; a++)cache2[list2[a]]=1;
653 else for ( a=1; a<ST2->len; a++)cache2[a]=1;
656 dist=declare_float (ST1->len+1,ST2->len+1);
657 vfree (list1); vfree(list2);
659 for ( a=0; a< ST1->n_atom; a++)
662 if ( !cache1[A->res_num])continue;
663 for ( b=0; b<ST2->n_atom; b++)
667 if( !cache2[B->res_num])continue;
669 d=get_atomic_distance (A,B);
671 if (dist[A->res_num][B->res_num]==0 || dist[A->res_num][B->res_num]>d)dist[A->res_num][B->res_num]=d;
675 for ( a=1; a<=ST1->len; a++)
678 if ( !A || !cache1[A->res_num])continue;
679 for ( b=1; b<= ST2->len; b++)
682 if( !B || !cache2[B->res_num])continue;
683 if(dist[a][b]!=0)fprintf ( stdout, "\nResidue %3d [%s] vs %3d [%s] %9.4f Angstrom",A->res_num,A->res,B->res_num,B->res,dist[a][b]);
686 fprintf ( stdout, "\n");
687 vfree (cache1);vfree(cache2);
688 free_float (dist, -1);
693 int * identify_contacts (Ca_trace *ST1,Ca_trace *ST2, float T)
701 result=vcalloc ( ST1->len+1, sizeof (int));
704 for ( a=0; a< ST1->n_atom; a++)
705 for ( b=0; b<ST2->n_atom; b++)
709 d=get_atomic_distance (ST1->structure[a], ST2->structure[b]);
713 A=ST1->structure[a]; B=ST2->structure[b];
714 fprintf ( stderr, "\n%d %s %s Vs %d %s %s: %f", A->res_num, A->res, A->type, B->res_num, B->res, B->type, d); */
715 result[(ST1->structure[a])->res_num-1]=1;
721 Sequence *seq2contacts ( Sequence *S, float T)
728 NS=duplicate_sequence (S);
729 for ( a=0; a< S->nseq; a++)
731 NS->seq[a]=string2contacts ( S->seq[a], S->name[a], S->seq_comment[a], T);
737 char *string2contacts (char *seq,char *name, char *comment, float T)
744 static char *struc_file;
745 static char *ligand_file;
751 /*>seq__struc Ligand1 Chain1 Ligand 2 cahin2
752 Chain: index or ANY if unknown
753 Ligand: name of pdb file
758 struc_file=vtmpnam (NULL);
759 ligand_file=vtmpnam (NULL);
764 result=vcalloc ( strlen (seq)+1, sizeof (char));
765 for ( a=0; a< strlen (seq); a++)result[a]='0';
767 nlist=string2list (comment);
768 if ( !nlist)return result;
772 struc_name=strstr(name, "_S_");
773 if (!struc_name && !is_pdb_struc (name))
778 else if ( !struc_name && is_pdb_struc (name))
785 if ( check_file_exists (struc_name) && is_simple_pdb_file(struc_name))
787 sprintf (command, "cp %s %s", name, struc_file);
791 sprintf ( command, "extract_from_pdb -infile %s -atom ALL -mode simple -force >%s",name, struc_file);
798 for ( a=1, ln=1;a<n; ln++)
800 fprintf ( stderr, "\n\tProcess: Structure %s Against Ligand %s T=%.2f Angstrom",struc_name, nlist[a], T);
803 if (check_file_exists ( nlist[a]) && is_simple_pdb_file(nlist[a]))
805 sprintf (command, "cp %s %s", nlist[a], ligand_file);
808 else if ( check_file_exists ( nlist[a]))
810 sprintf (command, "extract_from_pdb -infile %s -ligand ALL -atom ALL -mode simple -force >%s", nlist[a], ligand_file);
815 sprintf ( command, "extract_from_pdb -infile %s -chain %s -ligand %s -ligand_only -atom ALL -mode simple -force >%s",struc_name, nlist[a+1],nlist[a], ligand_file);
822 r=map_contacts (struc_file,ligand_file,T);
824 toggle_case_in_align_two_sequences (KEEP_CASE);
825 A=align_two_sequences (seq,r,"pam250mt", -10, -1, "myers_miller_pair_wise");
826 toggle_case_in_align_two_sequences (CHANGE_CASE);
829 for ( l=0,b=0; b< A->len_aln; b++)
831 r0=A->seq_al[0][b];r1=A->seq_al[1][b];
834 if (isupper(r1))result[l]=(result[l]!='0')?'9':'0'+ln;
840 fprintf ( stderr, " [DONE]");
844 print_contacts( struc_file,ligand_file,T);
848 fprintf ( stderr, "\n");
854 char **struclist2nb (char *name,char *seq, char *comment, float Threshold, char *atom, char *output)
862 list=strstr ( comment, "_P_")+3;
863 if ( !strstr (comment, "_P_"))return NULL;
866 pdb=string2list ( strstr ( comment, "_P_")+3);
869 for (a=1; a<atoi(pdb[0]); a++)
872 sprintf ( com, "_P_ %s", pdb[a]);
873 R=struc2nb (name, seq, com, Threshold, atom, tmpf);
875 if (output==NULL|| strstr (output, "fasta"))
877 for (a=0; a< strlen (seq); a++)
878 if (isupper (R[a][a]))fprintf (stdout, ">%s R=%d T=%.2f %s\n%s\n", name, a+1, Threshold, comment, R[a]);
885 fp=vfopen (tmpf, "r");
886 while ( (c=fgetc(fp))!=EOF)fprintf (stdout, "%c", c);
892 char **struc2nb (char *name,char *seq, char *comment, float Threshold, char *atom, char *output)
905 struc_file=vtmpnam (NULL);
906 declare_name (struc_name);
908 sscanf ( strstr(comment, "_P_"), "_P_ %s", struc_name);
909 //struc_name=strstr(name, "_S_");
915 R=declare_char (l+1, l+1);
918 sprintf ( R[a], "%s", seq);
922 if ( atom) atom=translate_string (atom, "_", " ");
923 if ( !struc_name) return NULL;
928 if ( check_file_exists (struc_name) && is_simple_pdb_file(struc_name))
930 sprintf (command, "cp %s %s", name, struc_file);
934 sprintf ( command, "extract_from_pdb -infile %s -atom %s -mode simple -force >%s",struc_name,(atom==NULL)?"ALL":atom, struc_file);
939 T=read_ca_trace (struc_file, "ATOM");
940 hasch=declare_short (T->len, T->len);
946 R=declare_char (l+1, l+1);
949 sprintf ( R[a], "%s", seq);
953 for ( a=0; a< T->n_atom; a++)
954 for ( b=0; b< T->n_atom; b++)
956 A1=T->structure[a];A2=T->structure[b];
957 d=get_atomic_distance (A1, A2);
961 hasch[A1->res_num-1][A2->res_num-1]=1;
964 fp=vfopen (output, "a");
965 fprintf ( fp, "#Distance_map_format_01\n#Sequence %s with T= %.2f", struc_name, Threshold);
966 for ( a=0; a<T->len; a++)
969 c=change_residue_coordinate ( T->seq,seq,a);
976 r1=tolower(r1);r2=tolower(r2);
977 if ( r1!=r2) continue;
978 R[c][c]=toupper (R[c][c]);
979 fprintf (fp, "\n%s Residue %d ",struc_name,c+1);
980 for ( b=0; b<T->len; b++)
984 r3=(T->seq)[a];r4=seq[c];
985 r3=tolower(r3);r4=tolower(r4);
986 if ( r3!=r4) continue;
988 d=change_residue_coordinate (T->seq,seq,b);
990 if ( hasch[a][b] && d!=-1)
992 fprintf (fp, "%d ",d+1);
993 R[c][d]=toupper (R[c][d]);
999 free_short (hasch, -1);
1004 short **seq2nb (char *seq, char *pdb, float Threshold, char *atom)
1012 short **result; //Contains the result for every residue of seq
1014 char command[10000];
1016 // get a clean pdb file
1017 struc_file=vtmpnam (NULL);
1018 if ( check_file_exists (struc_file) && is_simple_pdb_file(struc_name))
1020 sprintf (command, "cp %s %s", pdb, struc_file);
1024 sprintf ( command, "extract_from_pdb -infile %s -atom %s -mode simple -force >%s",pdb,(atom==NULL)?"ALL":atom, struc_file);
1026 my_system (command);
1028 //Read and hasch the PDB file
1029 T=read_ca_trace (struc_file, "ATOM");
1030 hasch=declare_short (T->len, T->len);
1031 result=declare_short (strlen (seq)+1, strlen (seq)+1);
1032 for ( a=0; a< T->n_atom; a++)
1033 for ( b=0; b< T->n_atom; b++)
1035 A1=T->structure[a];A2=T->structure[b];
1036 d=get_atomic_distance (A1, A2);
1040 hasch[A1->res_num-1][A2->res_num-1]=1;
1044 for ( a=0; a<T->len; a++)
1047 c=change_residue_coordinate ( T->seq,seq,a);
1050 for ( b=0; b<T->len; b++)
1053 d=change_residue_coordinate (T->seq,seq,b);
1055 if ( hasch[a][b] && d!=-1)
1057 result[c][result[c][0]++]=d;
1062 free_short (hasch, -1);
1065 /*********************************COPYRIGHT NOTICE**********************************/
1066 /*© Centro de Regulacio Genomica */
1068 /*Cedric Notredame */
1069 /*Tue Oct 27 10:12:26 WEST 2009. */
1070 /*All rights reserved.*/
1071 /*This file is part of T-COFFEE.*/
1073 /* T-COFFEE is free software; you can redistribute it and/or modify*/
1074 /* it under the terms of the GNU General Public License as published by*/
1075 /* the Free Software Foundation; either version 2 of the License, or*/
1076 /* (at your option) any later version.*/
1078 /* T-COFFEE is distributed in the hope that it will be useful,*/
1079 /* but WITHOUT ANY WARRANTY; without even the implied warranty of*/
1080 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the*/
1081 /* GNU General Public License for more details.*/
1083 /* You should have received a copy of the GNU General Public License*/
1084 /* along with Foobar; if not, write to the Free Software*/
1085 /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/
1086 /*............................................... |*/
1087 /* If you need some more information*/
1088 /* cedric.notredame@europe.com*/
1089 /*............................................... |*/
1093 /*********************************COPYRIGHT NOTICE**********************************/