return SecondaryStructuresStatusArray[static_cast<std::size_t>(secondaryStructureTypeName)];
}
+bool secondaryStructures::secondaryStructuresData::isBreakPartnerWith(secondaryStructuresData *partner) const{
+ return breakPartners[0] == partner || breakPartners[1] == partner;
+}
+
HelixPositions secondaryStructures::secondaryStructuresData::getStatus(const turnsTypes turn) const{
return TurnsStatusArray[static_cast<std::size_t>(turn)];
}
return SSData;
}
+void secondaryStructures::secondaryStructuresData::setBreak(secondaryStructuresData *breakPartner){
+ if (breakPartners[0] == nullptr){
+ breakPartners[0] = breakPartner;
+ }
+ else{
+ breakPartners[1] = breakPartner;
+ }
+ setStatus(secondaryStructureTypes::Break);
+}
+
bool secondaryStructures::hasHBondBetween(std::size_t Donor, std::size_t Acceptor) const{ // prob should add resi name comparison ?
if( (*ResInfoMap)[Donor].acceptor[0] == nullptr ||
(*ResInfoMap)[Donor].acceptor[1] == nullptr ||
/*Write Data*/
- for(std::size_t i {0}; i < SecondaryStructuresStatusMap.size(); ++i){
- SecondaryStructuresStringLine[i] = secondaryStructureTypeNames[static_cast<secondaryStructureTypes>(SecondaryStructuresStatusMap[i].getStatus())] ;
+ for(std::size_t i {static_cast<std::size_t>(secondaryStructureTypes::Bend)}; i != static_cast<std::size_t>(secondaryStructureTypes::Turn); ++i){ // TODO
+ for(std::size_t j {0}; j < SecondaryStructuresStatusMap.size(); ++j){
+ if (SecondaryStructuresStatusMap[j].getStatus(static_cast<secondaryStructureTypes>(i))){
+ SecondaryStructuresStringLine[j] = secondaryStructureTypeNames[i] ;
+ }
+ }
}
/*Add breaks*/
- for(std::size_t i {0}, linefactor{1}; i + 1 < SecondaryStructuresStatusMap.size(); ++i, ++linefactor ){
- if( SecondaryStructuresStatusMap[i].getStatus(secondaryStructureTypes::Break) ){
- SecondaryStructuresStringLine.insert(SecondaryStructuresStringLine.begin() + i + linefactor, secondaryStructureTypeNames[secondaryStructureTypes::Break]);
+ if(SecondaryStructuresStatusMap.size() > 1){
+ for(std::size_t i {0}, linefactor{0}; i + 1 < SecondaryStructuresStatusMap.size(); ++i, ++linefactor ){
+ if( SecondaryStructuresStatusMap[i].getStatus(secondaryStructureTypes::Break) && SecondaryStructuresStatusMap[i + 1].getStatus(secondaryStructureTypes::Break) ){
+ if(SecondaryStructuresStatusMap[i].isBreakPartnerWith(&SecondaryStructuresStatusMap[i + 1]) && SecondaryStructuresStatusMap[i + 1].isBreakPartnerWith(&SecondaryStructuresStatusMap[i]) ){
+ SecondaryStructuresStringLine.insert(SecondaryStructuresStringLine.begin() + i + linefactor, secondaryStructureTypeNames[secondaryStructureTypes::Break]);
+ }
+ }
}
}
return SecondaryStructuresStringLine;
-
}
secondaryStructures::~secondaryStructures(){
pbc)
> maxdist)
{
- PatternSearch.SecondaryStructuresStatusMap[i].setStatus(secondaryStructureTypes::Break);
+ PatternSearch.SecondaryStructuresStatusMap[i].setBreak(&PatternSearch.SecondaryStructuresStatusMap[i + 1]);
+ PatternSearch.SecondaryStructuresStatusMap[i + 1].setBreak(&PatternSearch.SecondaryStructuresStatusMap[i]);
std::cout << "Break between " << i << " and " << i + 1 << std::endl;
}
// std::cout << " N = " << IndexMap[j].prevResi->getIndex(backboneAtomTypes::AtomN);
// std::cout << " H = " << IndexMap[j].prevResi->getIndex(backboneAtomTypes::AtomH) << std::endl;
}
+
+ nres = i;
}
void DsspTool::analyzeFrame(int frnr, const t_trxframe &fr, t_pbc *pbc)
Break, // =
Bend, // S
Turn, // T
- Helis_PPII, // ?
+ Helis_PPII, // TODO
Helix_5, // I
Helix_3, // G
Bulge, // B
Count
};
-class secondaryStructures{
+class secondaryStructures{ // PatterSearch Wrapper
public:
secondaryStructures();
void initiateSearch(const std::vector<ResInfo> &ResInfoMatrix, const bool PiHelicesPreferencez = true);
std::string patternSearch();
~secondaryStructures();
- class secondaryStructuresData{
+ class secondaryStructuresData{ // PatternSearch Tool
public:
void setStatus(const secondaryStructureTypes secondaryStructureTypeName);
void setStatus(const HelixPositions helixPosition, const turnsTypes turn);
- bool getStatus(const secondaryStructureTypes secondaryStructureTypeName) const;
+ bool getStatus(const secondaryStructureTypes secondaryStructureTypeName) const, isBreakPartnerWith(secondaryStructuresData *partner) const;
HelixPositions getStatus(const turnsTypes turn) const;
secondaryStructureTypes getStatus() const;
+ void setBreak(secondaryStructuresData *breakPartner);
private:
std::array<bool, static_cast<std::size_t>(secondaryStructureTypes::Count)> SecondaryStructuresStatusArray{ 0, 0, 0, 0, 0, 0, 0 };
+ secondaryStructuresData *breakPartners[2]{nullptr, nullptr};
secondaryStructureTypes SSData {secondaryStructureTypes::Loop};
std::array<HelixPositions, static_cast<std::size_t>(turnsTypes::Count)> TurnsStatusArray {HelixPositions::None, HelixPositions::None, HelixPositions::None};
std::array<bool, static_cast<std::size_t>(bridgeTypes::Count)> BridgesStatusArray{ 0, 0 };
void analyzeFrame(int frnr, const t_trxframe& fr, t_pbc* pbc);
+ int nres{};
+
std::vector<std::pair<int, std::string>> getData();
private:
initParameters initParams;