Go to the source code of this file.
Defines | |
#define | pi 3.141592653589793238462643383279502884197e0 |
---------------------------------------------------------------------------- | |
#define | two_pi 2.0e0*pi |
#define | deg2rad pi/180.0e0 |
#define | rad2deg 180.0e0/pi |
#define | max(a, b) ((a) > (b))? (a) : (b) |
#define | min(a, b) ((a) < (b))? (a) : (b) |
Functions | |
double | dot_product (double va[], double vb[]) |
void | matmul (double ma[3][3], double mb[3], double mc[3]) |
double | sign (double a, double b) |
void | solve_3pep_poly (double r_n1[3], double r_a1[3], double r_a3[3], double r_c3[3], double r_soln_n[16][3][3], double r_soln_a[16][3][3], double r_soln_c[16][3][3], int *n_soln) |
----------------------------------------------------------------------- | |
void | initialize_loop_closure (double b_len[], double b_ang[], double t_ang[]) |
void | get_input_angles (int *n_soln, double r_n1[], double r_a1[], double r_a3[], double r_c3[]) |
void | test_two_cone_existence_soln (double tt, double kx, double et, double ap, int *n_soln, char cone_type[]) |
void | get_poly_coeff (double poly_coeff[]) |
void | poly_mul_sub2 (double u1[5][5], double u2[5][5], double u3[5][5], double u4[5][5], int p1[2], int p2[2], int p3[2], int p4[2], double u5[5][5], int p5[2]) |
---------------------------------------------------------------------------- | |
void | poly_mul2 (double u1[5][5], double u2[5][5], int p1[2], int p2[2], double u3[5][5], int p3[2]) |
---------------------------------------------------------------------------- | |
void | poly_sub2 (double u1[5][5], double u2[5][5], int p1[2], int p2[2], double u3[5][5], int p3[2]) |
---------------------------------------------------------------------------- | |
void | poly_mul_sub1 (double u1[17], double u2[17], double u3[17], double u4[17], int p1, int p2, int p3, int p4, double u5[17], int *p5) |
---------------------------------------------------------------------------- | |
void | poly_mul1 (double u1[], double u2[], int p1, int p2, double u3[], int *p3) |
void | poly_sub1 (double u1[], double u2[], int p1, int p2, double u3[], int *p3) |
void | coord_from_poly_roots (int *n_soln, double roots[16], double r_n1[3], double r_a1[3], double r_a3[3], double r_c3[3], double r_soln_n[16][3][3], double r_soln_a[16][3][3], double r_soln_c[16][3][3]) |
---------------------------------------------------------------------------- | |
double | calc_t2 (double t0) |
----------------------------------------------------------------------- | |
double | calc_t1 (double t0, double t2) |
----------------------------------------------------------------------- | |
void | calc_dih_ang (double r1[], double r2[], double r3[], double *angle) |
void | calc_bnd_ang (double r1[], double r2[], double *angle) |
void | cross (double p[], double q[], double s[]) |
void | quaternion (double axis[], double quarter_ang, double p[]) |
void | rotation_matrix (double q[4], double U[3][3]) |
----------------------------------------------------------------------- | |
double | dot_product (double va[3], double vb[3]) |
void | initialize_loop_closure (double b_len[6], double b_ang[7], double t_ang[2]) |
----------------------------------------------------------------------- | |
void | get_input_angles (int *n_soln, double r_n1[3], double r_a1[3], double r_a3[3], double r_c3[3]) |
----------------------------------------------------------------------- | |
void | test_two_cone_existence_soln (double tt, double kx, double et, double ap, int *n_soln, char cone_type[2]) |
----------------------------------------------------------------------- | |
void | get_poly_coeff (double poly_coeff[16+1]) |
----------------------------------------------------------------------- | |
void | poly_mul1 (double u1[17], double u2[17], int p1, int p2, double u3[17], int *p3) |
---------------------------------------------------------------------------- | |
void | poly_sub1 (double u1[17], double u2[17], int p1, int p2, double u3[17], int *p3) |
---------------------------------------------------------------------------- | |
void | calc_dih_ang (double r1[3], double r2[3], double r3[3], double *angle) |
----------------------------------------------------------------------- | |
void | calc_bnd_ang (double r1[3], double r2[3], double *angle) |
----------------------------------------------------------------------- | |
void | cross (double p[3], double q[3], double s[3]) |
----------------------------------------------------------------------- | |
void | quaternion (double axis[3], double quarter_ang, double p[4]) |
----------------------------------------------------------------------- | |
Variables | |
int | max_soln = 16 |
int | deg_pol = 16 |
int | print_level = 1 |
double | len0 [6] |
double | b_ang0 [7] |
double | t_ang0 [2] |
double | aa13_min_sqr |
double | aa13_max_sqr |
double | delta [4] |
double | xi [3] |
double | eta [3] |
double | alpha [3] |
double | theta [3] |
double | cos_alpha [3] |
double | sin_alpha [3] |
double | cos_theta [3] |
double | sin_theta [3] |
double | cos_delta [4] |
double | sin_delta [4] |
double | cos_xi [3] |
double | cos_eta [3] |
double | sin_xi [3] |
double | sin_eta [3] |
double | r_a1a3 [3] |
double | r_a1n1 [3] |
double | r_a3c3 [3] |
double | b_a1a3 [3] |
double | b_a1n1 [3] |
double | b_a3c3 [3] |
double | len_na [3] |
double | len_ac [3] |
double | len_aa [3] |
double | C0 [3][3] |
double | C1 [3][3] |
double | C2 [3][3] |
double | Q [5][17] |
double | R [3][17] |
#define deg2rad pi/180.0e0 |
#define max | ( | a, | |||
b | ) | ((a) > (b))? (a) : (b) |
#define min | ( | a, | |||
b | ) | ((a) < (b))? (a) : (b) |
#define pi 3.141592653589793238462643383279502884197e0 |
----------------------------------------------------------------------------
* b_ang(1:7): bond angles (N1-A1-C1, A1-C1-N2, ..., N3-A3-C3) t_ang(1:2): torsion angles (A1-C1-N2-A2, A2-C2-N3-A3)
subroutine solv_3pep_poly(r_n1, r_a1, r_a3, r_c3, & r_soln_n, r_soln_a, r_soln_c, n_soln)
input: r_n1(3), r_a1(3), r_a3(3), r_c3(3): Cartesian coordinates of N and CA atoms of the first residue and CA and C atoms of the last (third) residue. output: n_soln: number of alternative loop closure solutions. r_soln_n(3,3,8), r_soln_a(3,3,8), r_soln_c(3,3,8): Cartesian coordinates of loop closure solutions. first dimension: x, y, z component second dim: residue number third dim: solution number
----------------------------------------------------------------------------
#define rad2deg 180.0e0/pi |
#define two_pi 2.0e0*pi |
void calc_bnd_ang | ( | double | r1[3], | |
double | r2[3], | |||
double * | angle | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- assume that each vector is normalized r1=Rba, r2=Rbc: angle between r1 and r2 -----------------------------------------------------------------------
void calc_bnd_ang | ( | double | r1[], | |
double | r2[], | |||
double * | angle | |||
) |
void calc_dih_ang | ( | double | r1[3], | |
double | r2[3], | |||
double | r3[3], | |||
double * | angle | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- r1=Rab, r2=Rbc, r3=Rcd : angle between planes abc and bcd -----------------------------------------------------------------------
void calc_dih_ang | ( | double | r1[], | |
double | r2[], | |||
double | r3[], | |||
double * | angle | |||
) |
double calc_t1 | ( | double | t0, | |
double | t2 | |||
) |
-----------------------------------------------------------------------
double calc_t2 | ( | double | t0 | ) |
-----------------------------------------------------------------------
void coord_from_poly_roots | ( | int * | n_soln, | |
double | roots[16], | |||
double | r_n1[3], | |||
double | r_a1[3], | |||
double | r_a3[3], | |||
double | r_c3[3], | |||
double | r_soln_n[16][3][3], | |||
double | r_soln_a[16][3][3], | |||
double | r_soln_c[16][3][3] | |||
) |
----------------------------------------------------------------------------
void cross | ( | double | p[3], | |
double | q[3], | |||
double | s[3] | |||
) |
-----------------------------------------------------------------------
-----------------------------------------------------------------------
void cross | ( | double | p[], | |
double | q[], | |||
double | s[] | |||
) |
double dot_product | ( | double | va[3], | |
double | vb[3] | |||
) |
double dot_product | ( | double | va[], | |
double | vb[] | |||
) |
void get_input_angles | ( | int * | n_soln, | |
double | r_n1[3], | |||
double | r_a1[3], | |||
double | r_a3[3], | |||
double | r_c3[3] | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- Input angles and vectors (later used in coordinates) -----------------------------------------------------------------------
-----------------------------------------------------------------------
print*, 'return 0' print*, sqrt(dr_sqr), sqrt(aa13_min_sqr), sqrt(aa13_max_sqr)
void get_input_angles | ( | int * | n_soln, | |
double | r_n1[], | |||
double | r_a1[], | |||
double | r_a3[], | |||
double | r_c3[] | |||
) |
void get_poly_coeff | ( | double | poly_coeff[16+1] | ) |
-----------------------------------------------------------------------
void get_poly_coeff | ( | double | poly_coeff[] | ) |
void initialize_loop_closure | ( | double | b_len[6], | |
double | b_ang[7], | |||
double | t_ang[2] | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- Input angles for the given bond lengths and angles -----------------------------------------------------------------------
print*, 'len1, len3=', len_aa(2:3)
print*, 'a_min, a_max=', a_min*rad2deg, a_max*rad2deg
print*, 'aa13_min_sqr,aa13_max_sqr', aa13_min_sqr,aa13_max_sqr
void initialize_loop_closure | ( | double | b_len[], | |
double | b_ang[], | |||
double | t_ang[] | |||
) |
void matmul | ( | double | ma[3][3], | |
double | mb[3], | |||
double | mc[3] | |||
) |
void poly_mul1 | ( | double | u1[17], | |
double | u2[17], | |||
int | p1, | |||
int | p2, | |||
double | u3[17], | |||
int * | p3 | |||
) |
----------------------------------------------------------------------------
void poly_mul1 | ( | double | u1[], | |
double | u2[], | |||
int | p1, | |||
int | p2, | |||
double | u3[], | |||
int * | p3 | |||
) |
void poly_mul2 | ( | double | u1[5][5], | |
double | u2[5][5], | |||
int | p1[2], | |||
int | p2[2], | |||
double | u3[5][5], | |||
int | p3[2] | |||
) |
----------------------------------------------------------------------------
void poly_mul_sub1 | ( | double | u1[17], | |
double | u2[17], | |||
double | u3[17], | |||
double | u4[17], | |||
int | p1, | |||
int | p2, | |||
int | p3, | |||
int | p4, | |||
double | u5[17], | |||
int * | p5 | |||
) |
----------------------------------------------------------------------------
void poly_mul_sub2 | ( | double | u1[5][5], | |
double | u2[5][5], | |||
double | u3[5][5], | |||
double | u4[5][5], | |||
int | p1[2], | |||
int | p2[2], | |||
int | p3[2], | |||
int | p4[2], | |||
double | u5[5][5], | |||
int | p5[2] | |||
) |
----------------------------------------------------------------------------
void poly_sub1 | ( | double | u1[17], | |
double | u2[17], | |||
int | p1, | |||
int | p2, | |||
double | u3[17], | |||
int * | p3 | |||
) |
----------------------------------------------------------------------------
void poly_sub1 | ( | double | u1[], | |
double | u2[], | |||
int | p1, | |||
int | p2, | |||
double | u3[], | |||
int * | p3 | |||
) |
void poly_sub2 | ( | double | u1[5][5], | |
double | u2[5][5], | |||
int | p1[2], | |||
int | p2[2], | |||
double | u3[5][5], | |||
int | p3[2] | |||
) |
----------------------------------------------------------------------------
void quaternion | ( | double | axis[3], | |
double | quarter_ang, | |||
double | p[4] | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- calculate quaternion, given rotation axis and angle. -----------------------------------------------------------------------
void quaternion | ( | double | axis[], | |
double | quarter_ang, | |||
double | p[] | |||
) |
void rotation_matrix | ( | double | q[4], | |
double | U[3][3] | |||
) |
-----------------------------------------------------------------------
----------------------------------------------------------------------- constructs rotation matrix U from quaternion q. -----------------------------------------------------------------------
double sign | ( | double | a, | |
double | b | |||
) |
void solve_3pep_poly | ( | double | r_n1[3], | |
double | r_a1[3], | |||
double | r_a3[3], | |||
double | r_c3[3], | |||
double | r_soln_n[16][3][3], | |||
double | r_soln_a[16][3][3], | |||
double | r_soln_c[16][3][3], | |||
int * | n_soln | |||
) |
-----------------------------------------------------------------------
print*, 'return 2'
void test_two_cone_existence_soln | ( | double | tt, | |
double | kx, | |||
double | et, | |||
double | ap, | |||
int * | n_soln, | |||
char | cone_type[2] | |||
) |
-----------------------------------------------------------------------
void test_two_cone_existence_soln | ( | double | tt, | |
double | kx, | |||
double | et, | |||
double | ap, | |||
int * | n_soln, | |||
char | cone_type[] | |||
) |
double aa13_max_sqr |
double aa13_min_sqr |
double alpha[3] |
double b_a1a3[3] |
double b_a1n1[3] |
double b_a3c3[3] |
double b_ang0[7] |
double C0[3][3] |
double C1[3][3] |
double C2[3][3] |
double cos_alpha[3] |
double cos_delta[4] |
double cos_eta[3] |
double cos_theta[3] |
double cos_xi[3] |
int deg_pol = 16 |
double delta[4] |
double eta[3] |
double len0[6] |
double len_aa[3] |
double len_ac[3] |
double len_na[3] |
int max_soln = 16 |
int print_level = 1 |
double Q[5][17] |
double R[3][17] |
double r_a1a3[3] |
double r_a1n1[3] |
double r_a3c3[3] |
double sin_alpha[3] |
double sin_delta[4] |
double sin_eta[3] |
double sin_theta[3] |
double sin_xi[3] |
double t_ang0[2] |
double theta[3] |
double xi[3] |