Example #1
0
void p3dp_print_atom_quartet_info
(int iw, int l, int k, int j, int i, int lrank, int krank, int jrank, int irank)
{
    double dxkj[4], dxij[4], angle, normal[4], dxlk[4], dxjk[4], dihedral;
    double sl[3], sk[3], sj[3], si[3];
    p3dp_s(sl, l, lrank);
    p3dp_s(sk, k, krank);
    p3dp_s(sj, j, jrank);
    p3dp_s(si, i, irank);
    angle = p3dp_atom_triplet_s(sk, sj, si, dxkj, dxij);
    print_atom_pair_info_s(iw, i, j, irank, jrank, si, sj);
    if (IS_MANAGER)
        printf ("bond angle = %g degrees.\n", RADIAN_TO_DEGREE(angle));
    print_atom_pair_info_s(iw, k, j, krank, jrank, sk, sj);
    V3CROSS (dxkj, dxij, normal);
    normal[3] = V3LENGTH2 (normal);
    angle = p3dp_atom_triplet_s(sl, sk, sj, dxlk, dxjk);
    if (IS_MANAGER)
        printf ("bond angle = %g degrees.\n", RADIAN_TO_DEGREE(angle));
    print_atom_pair_info_s(iw, l, k, lrank, krank, sl, sk);
    /* right-handed helix gives positive dihedral angle */
    if ( (normal[3]>0) && (dxlk[3]>0) )
        dihedral = acos( V3DOT(normal,dxlk)/sqrt(normal[3])/sqrt(dxlk[3]) ) -
            PI / 2;
    else dihedral = 0;
    if (IS_MANAGER)
        printf ("dihedral angle = %g degrees.\n", RADIAN_TO_DEGREE(dihedral));
    return;
}
Example #2
0
/* use pointer device to rotate (via magic sphere) */
bool pointer_rotate (int iw, int to_x, int to_y)
{
    double a[3], b[3], c[3], R[3][3];
    mgs ( n[iw].lx - AX_size[iw].width/2.,
          n[iw].ly - AX_size[iw].height/2., n[iw].mgs_radius, a );
    mgs ( to_x - AX_size[iw].width/2.,
          to_y - AX_size[iw].height/2., n[iw].mgs_radius, b );
    V3CROSS (a, b, c);
    if (V3LENGTH2(c) < MIN_RADIAN*MIN_RADIAN) return (FALSE);
    M3geodesic (b, a, R);
    rotate (iw, R);
    n[iw].lx = to_x;
    n[iw].ly = to_y;
    return (TRUE);
} /* end pointer_rotate() */
Example #3
0
void print_atom_quartet_info (int iw, int l, int k, int j, int i)
{
    double dxkj[4], dxij[4], angle, normal[4], dxlk[4], dxjk[4], dihedral;
    angle = atom_triplet (k, j, i, dxkj, dxij);
    print_atom_pair_info (iw, i, j);
    printf ("bond angle = %g degrees.\n", RADIAN_TO_DEGREE(angle));
    print_atom_pair_info (iw, k, j);
    V3CROSS (dxkj, dxij, normal);
    normal[3] = V3LENGTH2 (normal);
    angle = atom_triplet (l, k, j, dxlk, dxjk);
    printf ("bond angle = %g degrees.\n", RADIAN_TO_DEGREE(angle));
    print_atom_pair_info (iw, l, k);
    /* right-handed helix gives positive dihedral angle */
    if ( (normal[3]>0) && (dxlk[3]>0) )
        dihedral = acos( V3DOT(normal,dxlk)/sqrt(normal[3])/sqrt(dxlk[3]) ) -
            PI / 2;
    else dihedral = 0;
    printf ("dihedral angle = %g degrees.\n", RADIAN_TO_DEGREE(dihedral));
    return;
} /* end print_atom_quartet_info() */