public void performScoring() throws LSHException, CancelledException {
		maxHitCount = 0;
		exceedCount = 0;
		scorer.populateExecutableIndex();
		if (singleMd5 != null) {
			scorer.setSingleExecutable(singleMd5);
		}
		pullVectorsForScoringSet();
		scorer.initializeScores();

		monitor.setMessage("Processing similar functions");
		int maxSize = baseIds.size();
		monitor.initialize(maxSize);
		if (scorer.simThreshold < 0.0) {
			throw new LSHException("No thresholds have been established");
		}
		while (!baseIds.isEmpty()) {
			List<VectorResult> vectors = new ArrayList<VectorResult>();
			int hitcount = buildCluster(vectors, scorer.simThreshold, scorer.sigThreshold);
			if (hitcount == 0) {	// Zero is possible, if all vectors in cluster are below sig threshold
				continue;
			}
			else if (hitcount > maxHitCount) {		// Keep track of biggest hitcount
				maxHitCount = hitcount;
			}
			if (!scorer.checkPreliminaryPairThreshold(hitcount, hitCountThreshold)) {		// Cluster is too big
				exceedCount += 1;					// Count the occurrence
				continue;							// Don't score with this cluster
			}
			List<DescriptionManager> vec2Functions = vectorToFunctions(vectors);
			if (!scorer.scoreCluster(vectorFactory, vec2Functions, vectors, hitcount,
				hitCountThreshold)) {
				exceedCount += 1;
				continue;
			}
			monitor.checkCancelled();
			monitor.setProgress(maxSize - baseIds.size());
		}
		baseIds = null;
		queriedIds = null;		// Release storage
	}
Perform scoring between all registered executables.
@throws LSHException for any connection issues during the process
@throws CancelledException if the monitor reports cancellation
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableComparison.java