TryCalculateGraphMetrics
(
IGraph graph,
BackgroundWorker backgroundWorker,
out OverallMetrics graphMetrics
)
{
Debug.Assert(graph != null);
graphMetrics = null;
if (!ReportProgressAndCheckCancellationPending(
1, 3, backgroundWorker))
{
return (false);
}
DuplicateEdgeDetector oDuplicateEdgeDetector =
new DuplicateEdgeDetector(graph);
Int32 iVertices = graph.Vertices.Count;
Int32 iEdges = graph.Edges.Count;
Int32 iSelfLoops = CountSelfLoops(graph);
Int32 iConnectedComponents, iSingleVertexConnectedComponents,
iMaximumConnectedComponentVertices,
iMaximumConnectedComponentEdges;
CalculateConnectedComponentMetrics(graph, out iConnectedComponents,
out iSingleVertexConnectedComponents,
out iMaximumConnectedComponentVertices,
out iMaximumConnectedComponentEdges);
Nullable<Int32> iMaximumGeodesicDistance;
Nullable<Double> dAverageGeodesicDistance;
Nullable<Double> dModularity;
if (!ReportProgressAndCheckCancellationPending(
2, 3, backgroundWorker))
{
return (false);
}
// CalculateSnapOverallMetrics(graph, out iMaximumGeodesicDistance, out dAverageGeodesicDistance, out dModularity);
Nullable<Double> dReciprocatedVertexPairRatio, dReciprocatedEdgeRatio;
if (!(new OverallReciprocationCalculator())
.TryCalculateGraphMetrics(graph, backgroundWorker,
out dReciprocatedVertexPairRatio, out dReciprocatedEdgeRatio))
{
return (false);
}
OverallMetrics oOverallMetrics = new OverallMetrics(
graph.Directedness,
oDuplicateEdgeDetector.UniqueEdges,
oDuplicateEdgeDetector.EdgesWithDuplicates,
iSelfLoops,
iVertices,
CalculateGraphDensity(graph, iVertices,
oDuplicateEdgeDetector.
TotalEdgesAfterMergingDuplicatesNoSelfLoops),
0, //dModularity
iConnectedComponents,
iSingleVertexConnectedComponents,
iMaximumConnectedComponentVertices,
iMaximumConnectedComponentEdges,
0, //iMaximumGeodesicDistance
0, //dAverageGeodesicDistance
dReciprocatedVertexPairRatio,
dReciprocatedEdgeRatio
);
graphMetrics = oOverallMetrics;
return (true);
}