29 #include <basic/Tracer.hh>
32 #include <numeric/xyz.functions.hh>
36 static basic::Tracer
TR(
"core.pose.carbohydrates.util");
41 namespace carbohydrates {
64 using namespace numeric;
65 using namespace conformation;
67 if (sequence_position == 1) {
68 bool is_1st_residue_of_branch =
false;
69 if (is_1st_residue_of_branch) {
73 TR.Warning <<
"Phi is undefined for polysaccharide residue 1 unless part of a branch; "
74 "returning 0.0." << endl;
85 if (res_n->carbohydrate_info()->is_aldose()) {
88 cyclic_O_num = res_n->carbohydrate_info()->ring_size();
90 uint anomeric_C_num = res_n->carbohydrate_info()->anomeric_carbon();
91 uint x = res_n_minus_1->carbohydrate_info()->mainchain_glycosidic_bond_acceptor();
94 string O_cyclic =
"O" +
string(1, cyclic_O_num +
'0');
95 string C_anomeric =
"C" +
string(1, anomeric_C_num +
'0');
96 string OX =
"O" +
string(1, x +
'0');
97 string CX =
"C" +
string(1, x +
'0');
100 Vector a = res_n->xyz(O_cyclic);
101 Vector b = res_n->xyz(C_anomeric);
102 Vector c = res_n_minus_1->xyz(OX);
103 Vector d = res_n_minus_1->xyz(CX);
105 return dihedral_degrees(a,
b,
c, d);
121 Angle bb_torsion = pose.
torsion(TorsionID(sequence_position - 1,
BB, x + 1));
124 return actual_phi - bb_torsion;