From cf70ac55a98c000254cf734fc62a46355d95e852 Mon Sep 17 00:00:00 2001 From: =?utf8?q?=D0=93=D0=BE=D1=80=D0=B5=D0=BB=D0=BE=D0=B2=20=D0=A1=D0=B5?= =?utf8?q?=D1=80=D0=B3=D0=B5=D0=B9=20=D0=92=D0=B0=D1=81=D0=B8=D0=BB=D1=8C?= =?utf8?q?=D0=B5=D0=B2=D0=B8=D1=87?= Date: Mon, 3 Oct 2022 13:04:07 +0300 Subject: [PATCH] =?utf8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=BB=D1=8F?= =?utf8?q?=D1=8E=20=D0=BA=D0=BE=D1=81=D1=8F=D1=87=D0=BA=D0=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- src/dssptools.cpp | 18 ++++++++++++------ 1 file changed, 12 insertions(+), 6 deletions(-) diff --git a/src/dssptools.cpp b/src/dssptools.cpp index 301624b..737c1fa 100644 --- a/src/dssptools.cpp +++ b/src/dssptools.cpp @@ -740,10 +740,16 @@ 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{}, vBD{}, p{}, x{}, y{}; + 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[D], fr.x[B], vBD.as_vec()); + pbc_dx(pbc, fr.x[C], fr.x[B], vBC.as_vec()); + + for(auto &i : {vBA, vDC, vBC}){ + for(std::size_t j {XX}; j <= ZZ; ++j){ + i[j] *= gmx::c_nm2A; + } + } for(std::size_t i{XX}, j{j + 1}, k{i + 2}; i <= ZZ; ++i, ++j, ++k){ if (j > 2){ @@ -752,8 +758,8 @@ float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, if (k > 2){ k -= 3; } - p[i] = (vBD[j] * vBA[k]) - (vBD[k] * vBA[j]); - x[i] = (vBD[j] * vDC[k]) - (vBD[k] * vDC[j]); + p[i] = (vBC[j] * vBA[k]) - (vBC[k] * vBA[j]); + x[i] = (vBC[j] * vDC[k]) - (vBC[k] * vDC[j]); } for(std::size_t i{XX}, j{j + 1}, k{i + 2}; i <= ZZ; ++i, ++j, ++k){ @@ -763,12 +769,12 @@ float DsspTool::CalculateDihedralAngle(const int &A, const int &B, const int &C, if (k > 2){ k -= 3; } - y[i] = (vBD[j] * x[k]) - (vBD[k] * x[j]); + y[i] = (vBC[j] * x[k]) - (vBC[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 = " << vBD[0] << ", " << vBD[1] << ", " << vBD[2] << std::endl; + std::cout << "z = " << vBC[0] << ", " << vBC[1] << ", " << vBC[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; -- 2.22.0