From: Горелов Сергей Васильевич Date: Mon, 3 Oct 2022 10:16:12 +0000 (+0300) Subject: Полипролинывые хеликсы исправлены X-Git-Url: http://biod.pnpi.spb.ru/gitweb/?a=commitdiff_plain;h=de006b68d1882d45ad8b56a57a339b12f7fb5331;p=alexxy%2Fgromacs-dssp.git Полипролинывые хеликсы исправлены --- diff --git a/src/dssptools.cpp b/src/dssptools.cpp index 1dfa6d0..d50c630 100644 --- a/src/dssptools.cpp +++ b/src/dssptools.cpp @@ -740,15 +740,15 @@ void DsspTool::calculateBends(const t_trxframe &fr, const t_pbc *pbc) float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, const int &D, const t_trxframe &fr, const t_pbc *pbc){ float result{360}, u{}, v{}; - gmx::RVec vBA{}, vDC{}, vBC{}, p{}, x{}, y{}; - pbc_dx(pbc, fr.x[A], fr.x[B], vBA.as_vec()); - pbc_dx(pbc, fr.x[C], fr.x[D], vDC.as_vec()); - pbc_dx(pbc, fr.x[C], fr.x[B], vBC.as_vec()); + gmx::RVec v12{}, v43{}, z{}, p{}, x{}, y{}; + pbc_dx(pbc, fr.x[A], fr.x[B], v12.as_vec()); + pbc_dx(pbc, fr.x[D], fr.x[C], v43.as_vec()); + pbc_dx(pbc, fr.x[B], fr.x[C], z.as_vec()); for(std::size_t j {XX}; j <= ZZ; ++j){ - vBA[j] *= gmx::c_nm2A; - vDC[j] *= gmx::c_nm2A; - vBC[j] *= gmx::c_nm2A; + v12[j] *= gmx::c_nm2A; + v43[j] *= gmx::c_nm2A; + z[j] *= gmx::c_nm2A; } for(std::size_t i{XX}, j{j + 1}, k{i + 2}; i <= ZZ; ++i, ++j, ++k){ if (j > 2){ @@ -757,8 +757,8 @@ float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, if (k > 2){ k -= 3; } - p[i] = (vBC[j] * vBA[k]) - (vBC[k] * vBA[j]); - x[i] = (vBC[j] * vDC[k]) - (vBC[k] * vDC[j]); + p[i] = (z[j] * v12[k]) - (z[k] * v12[j]); + x[i] = (z[j] * v43[k]) - (z[k] * v43[j]); } for(std::size_t i{XX}, j{j + 1}, k{i + 2}; i <= ZZ; ++i, ++j, ++k){ @@ -768,12 +768,12 @@ float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, if (k > 2){ k -= 3; } - y[i] = (vBC[j] * x[k]) - (vBC[k] * x[j]); + y[i] = (z[j] * x[k]) - (z[k] * x[j]); } - std::cout << "v12 = " << vBA[0] << ", " << vBA[1] << ", " << vBA[2] << std::endl; - std::cout << "v43 = " << vDC[0] << ", " << vDC[1] << ", " << vDC[2] << std::endl; - std::cout << "z = " << vBC[0] << ", " << vBC[1] << ", " << vBC[2] << std::endl; + std::cout << "v12 = " << v12[0] << ", " << v12[1] << ", " << v12[2] << std::endl; + std::cout << "v43 = " << v43[0] << ", " << v43[1] << ", " << v43[2] << std::endl; + std::cout << "z = " << z[0] << ", " << z[1] << ", " << z[2] << std::endl; std::cout << "p = " << p[0] << ", " << p[1] << ", " << p[2] << std::endl; std::cout << "x = " << x[0] << ", " << x[1] << ", " << x[2] << std::endl; std::cout << "y = " << y[0] << ", " << y[1] << ", " << y[2] << std::endl; @@ -791,6 +791,7 @@ float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, std::cout << "new v = " << v << std::endl; if (u != 0 or v != 0){ result = std::atan2(v, u) * gmx::c_rad2Deg; + std::cout << "result = " << result << std::endl; } } return result;