double AssemblyGraph::getMeanDeBruijnGraphReadDepth(bool drawnNodesOnly) { int nodeCount = 0; long double readDepthSum = 0.0; long long totalLength = 0; QMapIterator<QString, DeBruijnNode*> i(m_deBruijnGraphNodes); while (i.hasNext()) { i.next(); DeBruijnNode * node = i.value(); if (drawnNodesOnly && node->isNotDrawn()) continue; ++nodeCount; totalLength += node->getLength(); readDepthSum += node->getLength() * node->getReadDepth(); } if (totalLength == 0) return 0.0; else return readDepthSum / totalLength; }
void AssemblyGraph::addGraphicsItemsToScene(MyGraphicsScene * scene) { scene->clear(); double meanDrawnReadDepth = getMeanDeBruijnGraphReadDepth(true); //First make the GraphicsItemNode objects QMapIterator<QString, DeBruijnNode*> i(m_deBruijnGraphNodes); while (i.hasNext()) { i.next(); DeBruijnNode * node = i.value(); if (node->isDrawn()) { if (meanDrawnReadDepth == 0) node->setReadDepthRelativeToMeanDrawnReadDepth(1.0); else node->setReadDepthRelativeToMeanDrawnReadDepth(node->getReadDepth() / meanDrawnReadDepth); GraphicsItemNode * graphicsItemNode = new GraphicsItemNode(node, m_graphAttributes); node->setGraphicsItemNode(graphicsItemNode); graphicsItemNode->setFlag(QGraphicsItem::ItemIsSelectable); graphicsItemNode->setFlag(QGraphicsItem::ItemIsMovable); } } resetAllNodeColours(); //Then make the GraphicsItemEdge objects and add them to the scene first //so they are drawn underneath for (size_t i = 0; i < m_deBruijnGraphEdges.size(); ++i) { if (m_deBruijnGraphEdges[i]->isDrawn()) { GraphicsItemEdge * graphicsItemEdge = new GraphicsItemEdge(m_deBruijnGraphEdges[i]); m_deBruijnGraphEdges[i]->setGraphicsItemEdge(graphicsItemEdge); graphicsItemEdge->setFlag(QGraphicsItem::ItemIsSelectable); scene->addItem(graphicsItemEdge); } } //Now add the GraphicsItemNode objects to the scene so they are drawn //on top QMapIterator<QString, DeBruijnNode*> j(m_deBruijnGraphNodes); while (j.hasNext()) { j.next(); DeBruijnNode * node = j.value(); if (node->hasGraphicsItem()) scene->addItem(node->getGraphicsItemNode()); } }