public void fillinSelfScores() throws LSHException, CancelledException {
		if (!(scorer instanceof ExecutableScorerSingle)) {
			return;
		}
		ExecutableScorerSingle singleScorer = (ExecutableScorerSingle) scorer;
		List<ExecutableRecord> missing = new ArrayList<ExecutableRecord>();
		singleScorer.prefetchSelfScores(missing);
		int size = missing.size();
		if (size == 0) {
			return;
		}
		if (size == 1) {
			if (missing.get(0).getMd5().equals(singleMd5)) {
				return;
			}
		}

		double sigThreshold = singleScorer.getSigThreshold();
		monitor.setMessage("Generating self-significance scores");
		monitor.initialize(size);
		Iterator<ExecutableRecord> iter = missing.iterator();
		ExeSpecifier exeSpec = new ExeSpecifier();
		while (iter.hasNext()) {
			ExecutableRecord exeRec = iter.next();
			if (exeRec.getMd5().equals(singleMd5)) {			// Don't need to prefetch the singular executable
				continue;
			}
			TreeMap<Long, Count> histogram = new TreeMap<Long, Count>();
			exeSpec.exemd5 = exeRec.getMd5();
			pullVectorsForExe(exeSpec, histogram);
			double score = 0.0;
			Iterator<Entry<Long, Count>> histIter = histogram.entrySet().iterator();
			while (histIter.hasNext()) {
				Entry<Long, Count> entry = histIter.next();
				VectorResult vecResult = buildSeedVector(entry.getKey());
				double significance = vectorFactory.getSelfSignificance(vecResult.vec);
				if (significance < sigThreshold) {
					continue;
				}
				score += significance * entry.getValue().value;
			}
			scorer.commitSelfScore(exeRec.getMd5(), (float) score);
			monitor.checkCancelled();
			monitor.incrementProgress(1);
		}
	}
Generate any missing self-scores within the list of registered executables.
@throws LSHException for problems retrieving vectors
@throws CancelledException if the user clicks "cancel"
Ghidra/Features/BSim/src/main/java/ghidra/features/bsim/query/client/ExecutableComparison.java