4
Released under GPL - see the 'COPYING' file
6
Copyright (C) 2006 Timo Lassmann <timolassmann@gmail.com>
8
This program is free software; you can redistribute it and/or modify
9
it under the terms of the GNU General Public License as published by
10
the Free Software Foundation; either version 2 of the License, or
13
This program is distributed in the hope that it will be useful,
14
but WITHOUT ANY WARRANTY; without even the implied warranty of
15
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16
GNU General Public License for more details.
18
You should have received a copy of the GNU General Public License
19
along with this program; if not, write to the Free Software
20
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
22
Please send bug reports, comments etc. to:
23
timolassmann@gmail.com
31
unsigned int numseq = 0;
32
unsigned int numprofiles = 0;
37
int main(int argc,char **argv)
43
struct alignment* aln = 0;
44
struct parameters* param = 0;
45
struct aln_tree_node* tree2 = 0;
47
param = malloc(sizeof(struct parameters));
49
param = interface(param,argc,argv);
51
aln = detect_and_read_sequences(aln,param);
53
if(param->ntree > numseq){
54
param->ntree = numseq;
59
for (i = 0; i < numseq;i++){
60
param->dna = byg_detect(aln->s[i],aln->sl[i]);
67
//fprintf(stderr,"DNA:%d\n",param->dna);
71
//brief sanity check...
72
for (i = 0; i < numseq;i++){
74
fprintf(stderr,"Dna/Rna alignments are only supported for sequences longer than 6.");
86
for (i = 0 ;i < numseq;i++){
88
for (j = 0; j < aln->sl[i];j++){
92
param->format = "fasta";//param->reformat;
99
//fast distance calculation;
100
float** submatrix = 0;
101
submatrix = read_matrix(submatrix,param); // sets gap penalties as well.....
104
parameter_message(param);
107
if(byg_start(param->alignment_type,"profPROFprofilePROFILE") != -1){
108
profile_alignment_main(aln,param,submatrix);
112
if(param->ntree > 1){
113
if(byg_start(param->distance,"pairclustalPAIRCLUSTAL") != -1){
114
if(byg_start(param->tree,"njNJ") != -1){
115
dm = protein_pairwise_alignment_distance(aln,dm,param,submatrix,1);
117
dm = protein_pairwise_alignment_distance(aln,dm,param,submatrix,0);
119
}else if(byg_start("wu",param->alignment_type) != -1){
120
dm = protein_wu_distance2(aln,dm,param);
121
// param->feature_type = "wumanber";
122
}else if(param->dna == 1){
123
if(byg_start(param->tree,"njNJ") != -1){
124
dm = dna_distance(aln,dm,param,1);
126
dm = dna_distance(aln,dm,param,0);
129
if(byg_start(param->tree,"njNJ") != -1){
130
dm = protein_wu_distance(aln,dm,param,1);
132
dm = protein_wu_distance(aln,dm,param,0);
136
for (i = 0; i< numseq;i++){
137
for (j = 0; j< numseq;j++){
138
fprintf(stderr,"%f ",dm[i][j]);
140
fprintf(stderr,"\n");
143
if(byg_start(param->tree,"njNJ") != -1){
144
tree2 = real_nj(dm,param->ntree);
146
tree2 = real_upgma(dm,param->ntree);
148
if(param->print_tree){
149
print_tree(tree2,aln,param->print_tree);
153
tree = malloc(sizeof(int)*(numseq*3+1));
154
for ( i = 1; i < (numseq*3)+1;i++){
159
if(param->ntree < 2){
166
for ( i = 3; i < (numseq-1)*3;i+=3){
173
}else if(param->ntree > 2){
174
ntreeify(tree2,param->ntree);
176
tree = readtree(tree2,tree);
177
for (i = 0; i < (numseq*3);i++){
181
free(tree2->internal_lables);
189
struct feature_matrix* fm = 0;
191
struct ntree_data* ntree_data = 0;
194
if(param->ntree > 2){
195
ntree_data = malloc(sizeof(struct ntree_data));
196
ntree_data->realtree = tree2;
197
ntree_data->aln = aln;
198
ntree_data->profile = 0;
200
ntree_data->ntree = param->ntree;
201
ntree_data->submatrix = submatrix;
202
ntree_data->tree = tree;
204
ntree_data = ntree_alignment(ntree_data);
205
map = ntree_data->map;
206
tree = ntree_data->tree;
207
for (i = 0; i < (numseq*3);i++){
211
}else if (param->feature_type){
212
fm = get_feature_matrix(fm,aln,param->feature_type);
224
map = feature_hirschberg_alignment(aln,tree,submatrix,map,fm);
226
//map = feature_alignment(aln,tree,submatrix, map,fm);
228
}else if (byg_start("fast",param->alignment_type) != -1){
229
map = default_alignment(aln,tree,submatrix, map);
230
}else if(param->dna == 1){
231
map = dna_alignment(aln,tree,submatrix, map);
232
/*}else if (byg_start("test",param->alignment_type) != -1){
233
map = test_alignment(aln,tree,submatrix, map,param->internal_gap_weight,param->smooth_window,param->smooth_strength);
234
}else if (param->aa){
235
map = aa_alignment(aln,tree,submatrix, map,param->aa);
236
}else if (param->alter_gaps){
237
map = alter_gaps_alignment(aln,tree,submatrix,map,param->alter_gaps,param->alter_range,param->alter_weight);
238
}else if (byg_start("altergaps",param->alignment_type) != -1){
239
map = alter_gaps_alignment(aln,tree,submatrix,map,param->alter_gaps,param->alter_range,param->alter_weight);
240
}else if(byg_start("simple",param->alignment_type) != -1){
241
map = simple_hirschberg_alignment(aln,tree,submatrix, map);*/
242
}else if(byg_start("advanced",param->alignment_type) != -1){
243
map = advanced_hirschberg_alignment(aln,tree,submatrix, map,param->smooth_window,param->smooth_strength,param->internal_gap_weight);
245
map = hirschberg_alignment(aln,tree,submatrix, map,param->smooth_window,param->smooth_strength);
249
//clear up sequence array to be reused as gap array....
251
for (i = 0; i < numseq;i++){
253
for (a = 0; a < aln->sl[i];a++){
259
for (i = 0; i < (numseq-1)*3;i +=3){
262
aln = make_seq(aln,a,b,map[tree[i+2]]);
265
//for (i = 0; i < numseq;i++){
266
// fprintf(stderr,"%s %d\n",aln->sn[i],aln->nsip[i]);
270
for (i = 0; i < numseq;i++){
276
aln = sort_sequences(aln,tree,param->sort);
278
//for (i = 0; i < numseq;i++){
279
// fprintf(stderr,"%d %d %d\n",i,aln->nsip[i],aln->sip[i][0]);
284
/* if(!param->format){
285
fasta_output(aln,param->outfile);
287
if (byg_start("msf",param->format) != -1){
288
msf_output(aln,param->outfile);
289
}else if (byg_start("clustal",param->format) != -1){
290
clustal_output(aln,param->outfile);
291
}else if (byg_start("macsim",param->format) != -1){
292
macsim_output(aln,param->outfile,param->infile[0]);