private JScrollPane getFuncAlignmentScrollPane() {
		Long modulus = (Long) modBox.getSelectedItem();
		int minSize = minimumSizeField.getIntValue();
		//initialize map
		Map<Long, Long> countMap =
			LongStream.range(0, modulus).boxed().collect(Collectors.toMap(i -> i, i -> 0l));
		FunctionIterator fIter = trainingSource.getFunctionManager().getFunctionsNoStubs(true);
		//needs some thought to determine how to display number of functions compatible
		//with context register restrictions
		for (Function f : fIter) {
			if ((f.getBody().getNumAddresses() >= minSize) &&
				(params == null || params.isContextCompatible(f.getEntryPoint()))) {
				countMap.merge(f.getEntryPoint().getOffset() % modulus, 1l, Long::sum);
			}
		}
		List<FunctionStartAlignmentRowObject> rows = countMap.entrySet()
				.stream()
				.map(e -> new FunctionStartAlignmentRowObject(e.getKey(), e.getValue()))
				.collect(Collectors.toList());
		FunctionStartAlignmentTableModel alignModel = new FunctionStartAlignmentTableModel(rows);
		GTable alignTable = new GTable(alignModel);
		return new JScrollPane(alignTable);
	}
Returns the program used to train the models
@return source program
Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/FunctionStartRFParamsDialog.java