| 5675 | } |
| 5676 | |
| 5677 | double standard_TMscore(double **r1, double **r2, double **xtm, double **ytm, |
| 5678 | double **xt, double **x, double **y, int xlen, int ylen, int invmap[], |
| 5679 | int& L_ali, double& RMSD, double D0_MIN, double Lnorm, double d0, |
| 5680 | double d0_search, double score_d8, double t[3], double u[3][3], |
| 5681 | const int mol_type) |
| 5682 | { |
| 5683 | D0_MIN = 0.5; |
| 5684 | Lnorm = ylen; |
| 5685 | if (mol_type>0) // RNA |
| 5686 | { |
| 5687 | if (Lnorm<=11) d0=0.3; |
| 5688 | else if(Lnorm>11 && Lnorm<=15) d0=0.4; |
| 5689 | else if(Lnorm>15 && Lnorm<=19) d0=0.5; |
| 5690 | else if(Lnorm>19 && Lnorm<=23) d0=0.6; |
| 5691 | else if(Lnorm>23 && Lnorm<30) d0=0.7; |
| 5692 | else d0=(0.6*pow((Lnorm*1.0-0.5), 1.0/2)-2.5); |
| 5693 | } |
| 5694 | else |
| 5695 | { |
| 5696 | if (Lnorm > 21) d0=(1.24*pow((Lnorm*1.0-15), 1.0/3) -1.8); |
| 5697 | else d0 = D0_MIN; |
| 5698 | if (d0 < D0_MIN) d0 = D0_MIN; |
| 5699 | } |
| 5700 | double d0_input = d0;// Scaled by seq_min |
| 5701 | |
| 5702 | double tmscore;// collected alined residues from invmap |
| 5703 | int n_al = 0; |
| 5704 | int i; |
| 5705 | for (int j = 0; j<ylen; j++) |
| 5706 | { |
| 5707 | i = invmap[j]; |
| 5708 | if (i >= 0) |
| 5709 | { |
| 5710 | xtm[n_al][0] = x[i][0]; |
| 5711 | xtm[n_al][1] = x[i][1]; |
| 5712 | xtm[n_al][2] = x[i][2]; |
| 5713 | |
| 5714 | ytm[n_al][0] = y[j][0]; |
| 5715 | ytm[n_al][1] = y[j][1]; |
| 5716 | ytm[n_al][2] = y[j][2]; |
| 5717 | |
| 5718 | r1[n_al][0] = x[i][0]; |
| 5719 | r1[n_al][1] = x[i][1]; |
| 5720 | r1[n_al][2] = x[i][2]; |
| 5721 | |
| 5722 | r2[n_al][0] = y[j][0]; |
| 5723 | r2[n_al][1] = y[j][1]; |
| 5724 | r2[n_al][2] = y[j][2]; |
| 5725 | |
| 5726 | n_al++; |
| 5727 | } |
| 5728 | else if (i != -1) PrintErrorAndQuit("Wrong map!\n"); |
| 5729 | } |
| 5730 | L_ali = n_al; |
| 5731 | |
| 5732 | Kabsch(r1, r2, n_al, 0, &RMSD, t, u); |
| 5733 | RMSD = sqrt( RMSD/(1.0*n_al) ); |
| 5734 |
no test coverage detected