//This function recursively labels all nodes as drawn that are within a //certain distance of this node. Whichever node called this will //definitely be drawn, so that one is excluded from the recursive call. void DeBruijnNode::labelNeighbouringNodesAsDrawn(int nodeDistance, DeBruijnNode * callingNode) { if (m_highestDistanceInNeighbourSearch > nodeDistance) return; m_highestDistanceInNeighbourSearch = nodeDistance; if (nodeDistance == 0) return; DeBruijnNode * otherNode; for (size_t i = 0; i < m_edges.size(); ++i) { otherNode = m_edges[i]->getOtherNode(this); if (otherNode == callingNode) continue; if (g_settings->doubleMode) otherNode->m_drawn = true; else //single mode { if (otherNode->isPositiveNode()) otherNode->m_drawn = true; else otherNode->getReverseComplement()->m_drawn = true; } otherNode->labelNeighbouringNodesAsDrawn(nodeDistance-1, this); } }
void AssemblyGraph::pointEachNodeToItsReverseComplement() { QMapIterator<QString, DeBruijnNode*> i(m_deBruijnGraphNodes); while (i.hasNext()) { i.next(); DeBruijnNode * positiveNode = i.value(); if (positiveNode->isPositiveNode()) { DeBruijnNode * negativeNode = m_deBruijnGraphNodes[getOppositeNodeName(positiveNode->getName())]; if (negativeNode != 0) { positiveNode->setReverseComplement(negativeNode); negativeNode->setReverseComplement(positiveNode); } } } }