void Mesh::sortEdges(void) { vector<Edge*> edgeIndex (edges->begin(),edges->end()); int i,j; for(i=0;i<edgeIndex.size();i++) { for(j=i+1;j<edgeIndex.size();j++) { if(edgeIndex[i]->equal(edgeIndex[j])) { //edgeIndex[j]=edgeIndex[edgeIndex.size()-1]; edgeIndex.at(j)=edgeIndex.back(); edgeIndex.pop_back(); //size--; break; } } //sortedEdges->push_back(edgeIndex[i]); } edges->assign(edgeIndex.begin(),edgeIndex.end()); list<Edge*>::iterator ie; for (ie = edges->begin();ie!=edges->end();ie++){ (*ie)->vertices[0]->addEdge((*ie)); (*ie)->vertices[1]->addEdge((*ie)); } }
void Mesh::sortEdges(list<Edge*>* edges) { vector<Edge*> edgeIndex (edges->begin(),edges->end()); int i,j; for(i=0;i<edgeIndex.size();i++) { for(j=i+1;j<edgeIndex.size();j++) { if(edgeIndex[i]->equal(edgeIndex[j])) { //edgeIndex[j]=edgeIndex[edgeIndex.size()-1]; edgeIndex.at(j)=edgeIndex.back(); edgeIndex.pop_back(); //size--; break; } } //sortedEdges->push_back(edgeIndex[i]); } edges->assign(edgeIndex.begin(),edgeIndex.end()); }
void mitk::ConnectomicsStatisticsCalculator::CalculateBetweennessCentrality() { // std::map used for convenient initialization EdgeIndexStdMapType stdEdgeIndex; // associative property map needed for iterator property map-wrapper EdgeIndexMapType edgeIndex(stdEdgeIndex); EdgeIteratorType iterator, end; // sets iterator to start end end to end boost::tie(iterator, end) = boost::edges( *(m_Network->GetBoostGraph()) ); int i(0); for ( ; iterator != end; ++iterator, ++i) { stdEdgeIndex.insert(std::pair< EdgeDescriptorType, int >( *iterator, i)); } // Define EdgeCentralityMap m_VectorOfEdgeBetweennessCentralities.resize( m_NumberOfEdges, 0.0); // Create the external property map m_PropertyMapOfEdgeBetweennessCentralities = EdgeIteratorPropertyMapType(m_VectorOfEdgeBetweennessCentralities.begin(), edgeIndex); // Define VertexCentralityMap VertexIndexMapType vertexIndex = get(boost::vertex_index, *(m_Network->GetBoostGraph()) ); m_VectorOfVertexBetweennessCentralities.resize( m_NumberOfVertices, 0.0); // Create the external property map m_PropertyMapOfVertexBetweennessCentralities = VertexIteratorPropertyMapType(m_VectorOfVertexBetweennessCentralities.begin(), vertexIndex); boost::brandes_betweenness_centrality( *(m_Network->GetBoostGraph()), m_PropertyMapOfVertexBetweennessCentralities, m_PropertyMapOfEdgeBetweennessCentralities ); m_AverageVertexBetweennessCentrality = std::accumulate(m_VectorOfVertexBetweennessCentralities.begin(), m_VectorOfVertexBetweennessCentralities.end(), 0.0) / (double) m_NumberOfVertices; m_AverageEdgeBetweennessCentrality = std::accumulate(m_VectorOfEdgeBetweennessCentralities.begin(), m_VectorOfEdgeBetweennessCentralities.end(), 0.0) / (double) m_NumberOfEdges; }
std::vector< double > mitk::ConnectomicsNetwork::GetEdgeBetweennessVector() const { // std::map used for convenient initialization typedef std::map<EdgeDescriptorType, int> EdgeIndexStdMap; EdgeIndexStdMap stdEdgeIndex; // associative property map needed for iterator property map-wrapper typedef boost::associative_property_map< EdgeIndexStdMap > EdgeIndexMap; EdgeIndexMap edgeIndex(stdEdgeIndex); boost::graph_traits<NetworkType>::edge_iterator iterator, end; // sets iterator to start end end to end boost::tie(iterator, end) = boost::edges( m_Network ); int i(0); for ( ; iterator != end; ++iterator, ++i) { stdEdgeIndex.insert(std::pair< EdgeDescriptorType, int >( *iterator, i)); } // Define EdgeCentralityMap std::vector< double > edgeBetweennessVector(boost::num_edges( m_Network ), 0.0); // Create the external property map boost::iterator_property_map< std::vector< double >::iterator, EdgeIndexMap > e_centrality_map(edgeBetweennessVector.begin(), edgeIndex); // Define VertexCentralityMap typedef boost::property_map< NetworkType, boost::vertex_index_t>::type VertexIndexMap; VertexIndexMap vertexIndex = get(boost::vertex_index, m_Network ); std::vector< double > betweennessVector(boost::num_vertices( m_Network ), 0.0); // Create the external property map boost::iterator_property_map< std::vector< double >::iterator, VertexIndexMap > v_centrality_map(betweennessVector.begin(), vertexIndex); boost::brandes_betweenness_centrality( m_Network, v_centrality_map, e_centrality_map ); return edgeBetweennessVector; }