| 4275 | } |
| 4276 | |
| 4277 | double TMscore8_search(double **r1, double **r2, double **xtm, double **ytm, |
| 4278 | double **xt, int Lali, double t0[3], double u0[3][3], int simplify_step, |
| 4279 | int score_sum_method, double *Rcomm, double local_d0_search, double Lnorm, |
| 4280 | double score_d8, double d0) |
| 4281 | { |
| 4282 | int i, m; |
| 4283 | double score_max, score, rmsd; |
| 4284 | const int kmax=Lali; |
| 4285 | int k_ali[kmax], ka, k; |
| 4286 | double t[3]; |
| 4287 | double u[3][3]; |
| 4288 | double d; |
| 4289 | |
| 4290 | |
| 4291 | //iterative parameters |
| 4292 | int n_it=20; //maximum number of iterations |
| 4293 | int n_init_max=6; //maximum number of different fragment length |
| 4294 | int L_ini[n_init_max]; //fragment lengths, Lali, Lali/2, Lali/4 ... 4 |
| 4295 | int L_ini_min=4; |
| 4296 | if(Lali<L_ini_min) L_ini_min=Lali; |
| 4297 | |
| 4298 | int n_init=0, i_init; |
| 4299 | for(i=0; i<n_init_max-1; i++) |
| 4300 | { |
| 4301 | n_init++; |
| 4302 | L_ini[i]=(int) (Lali/pow(2.0, (double) i)); |
| 4303 | if(L_ini[i]<=L_ini_min) |
| 4304 | { |
| 4305 | L_ini[i]=L_ini_min; |
| 4306 | break; |
| 4307 | } |
| 4308 | } |
| 4309 | if(i==n_init_max-1) |
| 4310 | { |
| 4311 | n_init++; |
| 4312 | L_ini[i]=L_ini_min; |
| 4313 | } |
| 4314 | |
| 4315 | score_max=-1; |
| 4316 | //find the maximum score starting from local structures superposition |
| 4317 | int i_ali[kmax], n_cut; |
| 4318 | int L_frag; //fragment length |
| 4319 | int iL_max; //maximum starting position for the fragment |
| 4320 | |
| 4321 | for(i_init=0; i_init<n_init; i_init++) |
| 4322 | { |
| 4323 | L_frag=L_ini[i_init]; |
| 4324 | iL_max=Lali-L_frag; |
| 4325 | |
| 4326 | i=0; |
| 4327 | while(1) |
| 4328 | { |
| 4329 | //extract the fragment starting from position i |
| 4330 | ka=0; |
| 4331 | for(k=0; k<L_frag; k++) |
| 4332 | { |
| 4333 | int kk=k+i; |
| 4334 | r1[k][0]=xtm[kk][0]; |
no test coverage detected