public IEnumerable<SubFingerprintData> ReadSubFingerprints(long[] hashes, int thresholdVotes, IEnumerable<string> assignedClusters)
{
int table = 0;
var hashTables = storage.HashTables;
var subFingeprintCount = new Dictionary<IModelReference, int>();
foreach (var hashBin in hashes)
{
if (hashTables[table].ContainsKey(hashBin))
{
foreach (var subFingerprintId in hashTables[table][hashBin])
{
if (!subFingeprintCount.ContainsKey(subFingerprintId))
{
subFingeprintCount[subFingerprintId] = 0;
}
subFingeprintCount[subFingerprintId]++;
}
}
table++;
}
var subFingerprints = subFingeprintCount.Where(pair => pair.Value >= thresholdVotes)
.Select(pair => storage.SubFingerprints[pair.Key]);
var clusters = assignedClusters as List<string> ?? assignedClusters.ToList();
if (clusters.Any())
{
return subFingerprints.Where(subFingerprint => subFingerprint.Clusters.Intersect(clusters).Any());
}
return subFingerprints;
}