asdasdsad
[alexxy/gromacs-dssp.git] / src / dssptools.cpp
index 5a2e5ad17a5039ab8ab4f86458b70eabb56006c5..5efefe8bb54676a7cf9321c5ab9719592b11aabb 100644 (file)
@@ -97,7 +97,7 @@ void secondaryStructures::secondaryStructuresData::setStatus(const secondaryStru
 }
 
 void secondaryStructures::secondaryStructuresData::setStatus(const HelixPositions helixPosition, const turnsTypes turn){
-    TurnsStatusArray[static_cast<std::size_t>(turn) - 3] = helixPosition;
+    TurnsStatusArray[static_cast<std::size_t>(turn)] = helixPosition;
 }
 
 bool secondaryStructures::secondaryStructuresData::getStatus(const secondaryStructureTypes secondaryStructureTypeName) const{
@@ -260,10 +260,12 @@ void secondaryStructures::analyzeBridgesAndLaddersPatterns(){
 
 void secondaryStructures::analyzeTurnsAndHelicesPatterns(){
     for(const turnsTypes &i : { turnsTypes::Turn_4, turnsTypes::Turn_3, turnsTypes::Turn_5 }){
-        std::cout << "Testing Helix_" << &i << std::endl;
+        std::cout << "Testing Helix_" << static_cast<std::size_t>(i) << std::endl;
+        std::size_t stride {static_cast<std::size_t>(i) + 3};
         for(std::size_t j {0}; j + static_cast<std::size_t>(i) < SecondaryStructuresStatusMap.size(); ++j){
-            std::cout << "Testing " << j << " and " << j + static_cast<std::size_t>(i) << std::endl;
-            if ( hasHBondBetween(j, j + (static_cast<std::size_t>(i))) && NoChainBreaksBetween(j, j + static_cast<std::size_t>(i)) ){
+            std::cout << "Testing " << j << " and " << j + stride << std::endl;
+            if ( hasHBondBetween(j, j + (static_cast<std::size_t>(i))) && NoChainBreaksBetween(j, j + stride) ){
+                std::cout << j << " and " << j + stride << " has hbond!" << std::endl;
                 SecondaryStructuresStatusMap[j + static_cast<std::size_t>(i)].setStatus(HelixPositions::End, i);
 
                 for (std::size_t k {1}; k < (static_cast<std::size_t>(i)); ++k){
@@ -284,20 +286,21 @@ void secondaryStructures::analyzeTurnsAndHelicesPatterns(){
     }
 
     for(const turnsTypes &i : { turnsTypes::Turn_4, turnsTypes::Turn_3, turnsTypes::Turn_5 }){
-        for(std::size_t j {1}; j + (static_cast<std::size_t>(i)) < SecondaryStructuresStatusMap.size(); ++j){
+        std::size_t stride {static_cast<std::size_t>(i) + 3};
+        for(std::size_t j {1}; j + stride < SecondaryStructuresStatusMap.size(); ++j){
             if ( (SecondaryStructuresStatusMap[j - 1].getStatus(i) == HelixPositions::Start || SecondaryStructuresStatusMap[j - 1].getStatus(i) == HelixPositions::Start_AND_End ) &&
                  (SecondaryStructuresStatusMap[j].getStatus(i) == HelixPositions::Start || SecondaryStructuresStatusMap[j].getStatus(i) == HelixPositions::Start_AND_End ) ){
                 bool empty = true;
                 secondaryStructureTypes Helix;
                 switch(i){
                 case turnsTypes::Turn_3:
-                    for (std::size_t k {0}; empty && k < (static_cast<std::size_t>(i)); ++k){
+                    for (std::size_t k {0}; empty && k < stride; ++k){
                         empty = SecondaryStructuresStatusMap[j + k].getStatus(secondaryStructureTypes::Loop ) || SecondaryStructuresStatusMap[j + k].getStatus(secondaryStructureTypes::Helix_3);
                     }
                     Helix = secondaryStructureTypes::Helix_3;
                     break;
                 case turnsTypes::Turn_5:
-                    for (std::size_t k {0}; empty && k < (static_cast<std::size_t>(i)); ++k){
+                    for (std::size_t k {0}; empty && k < stride; ++k){
                         empty = SecondaryStructuresStatusMap[j + k].getStatus(secondaryStructureTypes::Loop ) || SecondaryStructuresStatusMap[j + k].getStatus(secondaryStructureTypes::Helix_5) || (PiHelixPreference && SecondaryStructuresStatusMap[j + k].getStatus(secondaryStructureTypes::Helix_5));
                     }
                     Helix = secondaryStructureTypes::Helix_4;
@@ -320,7 +323,8 @@ void secondaryStructures::analyzeTurnsAndHelicesPatterns(){
         if (SecondaryStructuresStatusMap[i].getStatus(secondaryStructureTypes::Loop)){
             bool isTurn = false;
             for(const turnsTypes &j : {turnsTypes::Turn_3, turnsTypes::Turn_4, turnsTypes::Turn_5}){
-                for(std::size_t k {1}; k < (static_cast<std::size_t>(j)); ++k){
+                std::size_t stride {static_cast<std::size_t>(i) + 3};
+                for(std::size_t k {1}; k < stride; ++k){
                     isTurn = (i >= k) && (SecondaryStructuresStatusMap[i - k].getStatus(j) == HelixPositions::Start || SecondaryStructuresStatusMap[i - k].getStatus(j) == HelixPositions::Start_AND_End) ;
                 }
             }