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")) || ( strm ( A->type, "C3'")))
352 T->ca[A->res_num-1]=A;
357 T->peptide_chain=vcalloc (T->len+1, sizeof (Amino_acid*));
358 for ( a=0; a<=T->len; a++) T->peptide_chain[a]=vcalloc (1, sizeof (Amino_acid));
359 for ( a=0; a< T->n_atom; a++)
363 if ( strm (A->type, "CA"))(T->peptide_chain[A->res_num-1])->CA=A;
364 if ( strm (A->type, "C3'"))(T->peptide_chain[A->res_num-1])->CA=A;
365 if ( strm (A->type, "C"))(T->peptide_chain[A->res_num-1] )->C=A;
366 if ( strm (A->type, "CB"))(T->peptide_chain[A->res_num-1])->CB=A;
367 if ( strm (A->type, "N"))(T->peptide_chain[A->res_num-1] )->N=A;
375 Ca_trace * hasch_ca_trace ( Ca_trace *T)
378 T=hasch_ca_trace_nb (T);
379 T=hasch_ca_trace_bubble (T);
380 T=hasch_ca_trace_transversal (T);
383 Ca_trace * hasch_ca_trace_transversal ( Ca_trace *TRACE)
385 /*This function gets the Coordinates of a protein and computes the distance of each Ca to its
388 Compute the distance between, CA-x and CA+x with x=[1-N_ca]
389 T->nb[a][0]-->Number of distances.
390 T->nb[a][1... T->nb[a][0]]-->ngb index with respect to the Ca chain
391 T->d_nb[a][1... T->d_nb[a][0]]-->ngb index with respect to the Ca chain
402 TRACE->Transversal=vcalloc ( 1, sizeof (Struct_nb));
404 T=TRACE->Transversal;
407 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
408 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
410 for (d=0,a=0; a< TRACE->len; a++)
413 for ( b=1; b<=PP->N_ca; b++)
415 if ( (a-b)<0 || (a+b)>=TRACE->len)continue;
418 dist=get_atomic_distance ( A, B);
420 T->nb[a]=vrealloc ( T->nb[a], (++T->nb[a][0]+1)*sizeof (int));
421 T->nb[a][T->nb[a][0]]=b;
423 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
424 T->d_nb[a][T->nb[a][0]]=dist;
428 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
434 Ca_trace * hasch_ca_trace_nb ( Ca_trace *TRACE)
436 /*This function gets the Coordinates of a protein and computes the distance of each Ca to its
438 The first Ngb to the left and to the right are excluded
439 Ngd to the left get negative distances
440 Ngb to the right receive positive distances
441 T->nb[a][0]-->Number of ngb.
442 T->nb[a][1... T->nb[a][0]]-->ngb index with respect to the Ca chain
443 T->d_nb[a][1... T->d_nb[a][0]]-->ngb index with respect to the Ca chain
455 TRACE->Chain=vcalloc ( 1, sizeof (Struct_nb));
460 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
461 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
463 for (d=0,a=0; a< TRACE->len; a++)
465 for ( b=MAX(0,a-PP->N_ca); b< MIN( a+PP->N_ca, TRACE->len); b++)
467 if (FABS(a-b)<2)continue;
470 if ( !A || !B)continue;
471 dist=get_atomic_distance ( A, B);
475 T->nb[a]=vrealloc ( T->nb[a], (++T->nb[a][0]+1)*sizeof (int));
476 T->nb[a][T->nb[a][0]]=b;
478 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
479 T->d_nb[a][T->nb[a][0]]=dist;
483 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
488 Ca_trace * hasch_ca_trace_bubble ( Ca_trace *TRACE)
499 TRACE->Bubble=vcalloc ( 1, sizeof (Struct_nb));
504 if ( !T->nb)T->nb=declare_int (TRACE->len+1, 1);
505 if ( !T->d_nb)T->d_nb=declare_float (TRACE->len+1, 1);
506 list=declare_float ( TRACE->n_atom, 3);
509 for (a=0; a< TRACE->len; a++)
511 for ( b=0; b< TRACE->len; b++)
515 if ( !A || !B)continue;
516 dist=get_atomic_distance ( A, B);
518 if ( dist<PP->maximum_distance && FABS((A->res_num-B->res_num))>2)
521 T->nb[a]=vrealloc ( T->nb[a], (T->nb[a][0]+1)*sizeof (int));
522 T->nb[a][T->nb[a][0]]=(TRACE->ca[b])->num;
524 T->d_nb[a]=vrealloc ( T->d_nb[a], (T->nb[a][0]+1)*sizeof (float));
525 T->d_nb[a][T->nb[a][0]]= ((a<b)?dist:-dist);
528 T->max_nb=MAX (T->max_nb, T->nb[a][0]);
532 for ( a=0; a< TRACE->len; a++)
534 for ( b=0; b< T->nb[a][0]; b++)
536 list[b][0]=T->nb[a][b+1];
537 list[b][1]=T->d_nb[a][b+1];
538 list[b][2]=(TRACE->structure[T->nb[a][b+1]])->res_num;
541 sort_float ( list, 3,2, 0, T->nb[a][0]-1);
542 for ( b=0; b< T->nb[a][0]; b++)
544 T->nb[a][b+1]=list[b][0];
545 T->d_nb[a][b+1]=list[b][1];
549 free_float ( list, -1);
555 float ** measure_ca_distances(Ca_trace *T)
561 dist=declare_float ( T->len, T->len);
563 for (a=0; a< T->len-1; a++)
565 for ( b=a+1; b< T->len; b++)
570 dist[a][b]=dist[b][a]=get_atomic_distance ( A, B);
576 float get_atomic_distance ( Atom *A, Atom*B)
591 d=(float) sqrt ( (double) ( dx*dx +dy*dy +dz*dz));
595 char * map_contacts ( char *file1, char *file2, float T)
603 ST1=read_ca_trace (file1, "ATOM");
604 ST2=read_ca_trace (file2, "ATOM");
606 contact_list=identify_contacts (ST1, ST2, T);
607 for ( a=0; a<ST1->len; a++)
609 ST1->seq[a]=(contact_list[a]==1)?toupper(ST1->seq[a]):tolower(ST1->seq[a]);
615 float ** print_contacts ( char *file1, char *file2, float T)
623 int *list1=NULL, *list2=NULL;
624 int *cache1, *cache2;
628 if ((list=strstr (file1, "_R_"))!=NULL)
632 list1=string2num_list2(list, "_");
635 if ((list=strstr (file2, "_R_"))!=NULL)
639 list2=string2num_list2(list, "_");
642 fprintf ( stdout, "\n#%s (%s) struc2contacts_01", PROGRAM, VERSION);
643 fprintf ( stdout, "\nStructure %s vs %s", file1, file2);
644 ST1=read_ca_trace (file1, "SEQRES");
645 ST2=read_ca_trace (file2, "SEQRES");
648 cache1=vcalloc (ST1->len+1, sizeof (int));
649 cache2=vcalloc (ST2->len+1, sizeof (int));
651 if (list1)for ( a=1; a<list1[0]; a++)cache1[list1[a]]=1;
652 else for ( a=1; a<ST1->len; a++)cache1[a]=1;
654 if (list2)for ( a=1; a<list2[0]; a++)cache2[list2[a]]=1;
655 else for ( a=1; a<ST2->len; a++)cache2[a]=1;
658 dist=declare_float (ST1->len+1,ST2->len+1);
659 vfree (list1); vfree(list2);
661 for ( a=0; a< ST1->n_atom; a++)
664 if ( !cache1[A->res_num])continue;
665 for ( b=0; b<ST2->n_atom; b++)
669 if( !cache2[B->res_num])continue;
671 d=get_atomic_distance (A,B);
673 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;
677 for ( a=1; a<=ST1->len; a++)
680 if ( !A || !cache1[A->res_num])continue;
681 for ( b=1; b<= ST2->len; b++)
684 if( !B || !cache2[B->res_num])continue;
685 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]);
688 fprintf ( stdout, "\n");
689 vfree (cache1);vfree(cache2);
690 free_float (dist, -1);
695 int * identify_contacts (Ca_trace *ST1,Ca_trace *ST2, float T)
703 result=vcalloc ( ST1->len+1, sizeof (int));
706 for ( a=0; a< ST1->n_atom; a++)
707 for ( b=0; b<ST2->n_atom; b++)
711 d=get_atomic_distance (ST1->structure[a], ST2->structure[b]);
715 A=ST1->structure[a]; B=ST2->structure[b];
716 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); */
717 result[(ST1->structure[a])->res_num-1]=1;
723 Sequence *seq2contacts ( Sequence *S, float T)
730 NS=duplicate_sequence (S);
731 for ( a=0; a< S->nseq; a++)
733 NS->seq[a]=string2contacts ( S->seq[a], S->name[a], S->seq_comment[a], T);
739 char *string2contacts (char *seq,char *name, char *comment, float T)
746 static char *struc_file;
747 static char *ligand_file;
753 /*>seq__struc Ligand1 Chain1 Ligand 2 cahin2
754 Chain: index or ANY if unknown
755 Ligand: name of pdb file
760 struc_file=vtmpnam (NULL);
761 ligand_file=vtmpnam (NULL);
766 result=vcalloc ( strlen (seq)+1, sizeof (char));
767 for ( a=0; a< strlen (seq); a++)result[a]='0';
769 nlist=string2list (comment);
770 if ( !nlist)return result;
774 struc_name=strstr(name, "_S_");
775 if (!struc_name && !is_pdb_struc (name))
780 else if ( !struc_name && is_pdb_struc (name))
787 if ( check_file_exists (struc_name) && is_simple_pdb_file(struc_name))
789 sprintf (command, "cp %s %s", name, struc_file);
793 sprintf ( command, "extract_from_pdb -infile %s -atom ALL -mode simple -force >%s",name, struc_file);
800 for ( a=1, ln=1;a<n; ln++)
802 fprintf ( stderr, "\n\tProcess: Structure %s Against Ligand %s T=%.2f Angstrom",struc_name, nlist[a], T);
805 if (check_file_exists ( nlist[a]) && is_simple_pdb_file(nlist[a]))
807 sprintf (command, "cp %s %s", nlist[a], ligand_file);
810 else if ( check_file_exists ( nlist[a]))
812 sprintf (command, "extract_from_pdb -infile %s -ligand ALL -atom ALL -mode simple -force >%s", nlist[a], ligand_file);
817 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);
824 r=map_contacts (struc_file,ligand_file,T);
826 toggle_case_in_align_two_sequences (KEEP_CASE);
827 A=align_two_sequences (seq,r,"pam250mt", -10, -1, "myers_miller_pair_wise");
828 toggle_case_in_align_two_sequences (CHANGE_CASE);
831 for ( l=0,b=0; b< A->len_aln; b++)
833 r0=A->seq_al[0][b];r1=A->seq_al[1][b];
836 if (isupper(r1))result[l]=(result[l]!='0')?'9':'0'+ln;
842 fprintf ( stderr, " [DONE]");
846 print_contacts( struc_file,ligand_file,T);
850 fprintf ( stderr, "\n");
856 char **struclist2nb (char *name,char *seq, char *comment, float Threshold, char *atom, char *output)
864 list=strstr ( comment, "_P_")+3;
865 if ( !strstr (comment, "_P_"))return NULL;
868 pdb=string2list ( strstr ( comment, "_P_")+3);
871 for (a=1; a<atoi(pdb[0]); a++)
874 sprintf ( com, "_P_ %s", pdb[a]);
875 R=struc2nb (name, seq, com, Threshold, atom, tmpf);
877 if (output==NULL|| strstr (output, "fasta"))
879 for (a=0; a< strlen (seq); a++)
880 if (isupper (R[a][a]))fprintf (stdout, ">%s R=%d T=%.2f %s\n%s\n", name, a+1, Threshold, comment, R[a]);
887 fp=vfopen (tmpf, "r");
888 while ( (c=fgetc(fp))!=EOF)fprintf (stdout, "%c", c);
894 char **struc2nb (char *name,char *seq, char *comment, float Threshold, char *atom, char *output)
907 struc_file=vtmpnam (NULL);
908 declare_name (struc_name);
910 sscanf ( strstr(comment, "_P_"), "_P_ %s", struc_name);
911 //struc_name=strstr(name, "_S_");
917 R=declare_char (l+1, l+1);
920 sprintf ( R[a], "%s", seq);
924 if ( atom) atom=translate_string (atom, "_", " ");
925 if ( !struc_name) return NULL;
930 if ( check_file_exists (struc_name) && is_simple_pdb_file(struc_name))
932 sprintf (command, "cp %s %s", name, struc_file);
936 sprintf ( command, "extract_from_pdb -infile %s -atom %s -mode simple -force >%s",struc_name,(atom==NULL)?"ALL":atom, struc_file);
941 T=read_ca_trace (struc_file, "ATOM");
942 hasch=declare_short (T->len, T->len);
948 R=declare_char (l+1, l+1);
951 sprintf ( R[a], "%s", seq);
955 for ( a=0; a< T->n_atom; a++)
956 for ( b=0; b< T->n_atom; b++)
958 A1=T->structure[a];A2=T->structure[b];
959 d=get_atomic_distance (A1, A2);
963 hasch[A1->res_num-1][A2->res_num-1]=1;
966 fp=vfopen (output, "a");
967 fprintf ( fp, "#Distance_map_format_01\n#Sequence %s with T= %.2f", struc_name, Threshold);
968 for ( a=0; a<T->len; a++)
971 c=change_residue_coordinate ( T->seq,seq,a);
978 r1=tolower(r1);r2=tolower(r2);
979 if ( r1!=r2) continue;
980 R[c][c]=toupper (R[c][c]);
981 fprintf (fp, "\n%s Residue %d ",struc_name,c+1);
982 for ( b=0; b<T->len; b++)
986 r3=(T->seq)[a];r4=seq[c];
987 r3=tolower(r3);r4=tolower(r4);
988 if ( r3!=r4) continue;
990 d=change_residue_coordinate (T->seq,seq,b);
992 if ( hasch[a][b] && d!=-1)
994 fprintf (fp, "%d ",d+1);
995 R[c][d]=toupper (R[c][d]);
1001 free_short (hasch, -1);
1006 short **seq2nb (char *seq, char *pdb, float Threshold, char *atom)
1014 short **result; //Contains the result for every residue of seq
1016 char command[10000];
1018 // get a clean pdb file
1019 struc_file=vtmpnam (NULL);
1020 if ( check_file_exists (struc_file) && is_simple_pdb_file(struc_file))
1022 sprintf (command, "cp %s %s", pdb, struc_file);
1026 sprintf ( command, "extract_from_pdb -infile %s -atom %s -mode simple -force >%s",pdb,(atom==NULL)?"ALL":atom, struc_file);
1028 my_system (command);
1030 //Read and hasch the PDB file
1031 T=read_ca_trace (struc_file, "ATOM");
1032 hasch=declare_short (T->len, T->len);
1033 result=declare_short (strlen (seq)+1, strlen (seq)+1);
1034 for ( a=0; a< T->n_atom; a++)
1035 for ( b=0; b< T->n_atom; b++)
1037 A1=T->structure[a];A2=T->structure[b];
1038 d=get_atomic_distance (A1, A2);
1042 hasch[A1->res_num-1][A2->res_num-1]=1;
1046 for ( a=0; a<T->len; a++)
1049 c=change_residue_coordinate ( T->seq,seq,a);
1052 for ( b=0; b<T->len; b++)
1055 d=change_residue_coordinate (T->seq,seq,b);
1057 if ( hasch[a][b] && d!=-1)
1059 result[c][result[c][0]++]=d;
1064 free_short (hasch, -1);
1067 /******************************COPYRIGHT NOTICE*******************************/
1068 /*© Centro de Regulacio Genomica */
1070 /*Cedric Notredame */
1071 /*Fri Feb 18 08:27:45 CET 2011 - Revision 596. */
1072 /*All rights reserved.*/
1073 /*This file is part of T-COFFEE.*/
1075 /* T-COFFEE is free software; you can redistribute it and/or modify*/
1076 /* it under the terms of the GNU General Public License as published by*/
1077 /* the Free Software Foundation; either version 2 of the License, or*/
1078 /* (at your option) any later version.*/
1080 /* T-COFFEE is distributed in the hope that it will be useful,*/
1081 /* but WITHOUT ANY WARRANTY; without even the implied warranty of*/
1082 /* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the*/
1083 /* GNU General Public License for more details.*/
1085 /* You should have received a copy of the GNU General Public License*/
1086 /* along with Foobar; if not, write to the Free Software*/
1087 /* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA*/
1088 /*............................................... |*/
1089 /* If you need some more information*/
1090 /* cedric.notredame@europe.com*/
1091 /*............................................... |*/
1095 /******************************COPYRIGHT NOTICE*******************************/