Исправляю косячки
authorГорелов Сергей Васильевич <gorelov_sv@pnpi.nrcki.ru>
Mon, 3 Oct 2022 10:04:07 +0000 (13:04 +0300)
committerГорелов Сергей Васильевич <gorelov_sv@pnpi.nrcki.ru>
Mon, 3 Oct 2022 10:04:07 +0000 (13:04 +0300)
src/dssptools.cpp

index 301624b4f80cf566833568378e06efdf0832a413..737c1faf017b45c78f9e3717d5cacfa9fec82358 100644 (file)
@@ -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;