private FunctionStartRFParams getMachineLearningParams() {
		FunctionStartRFParams rfParams = new FunctionStartRFParams(trainingSource);
		List<Integer> preBytes = FunctionStartRFParams.parseIntegerCSV(preBytesField.getText());
		rfParams.setPreBytes(preBytes);
		List<Integer> initialBytes =
			FunctionStartRFParams.parseIntegerCSV(initialBytesField.getText());
		rfParams.setInitialBytes(initialBytes);
		List<Integer> factors = FunctionStartRFParams.parseIntegerCSV(factorField.getText());
		rfParams.setFactors(factors);
		int minSize = minimumSizeField.getIntValue();
		if (minSize <= 0) {
			Msg.showWarn(this, null, "Invalid Minimum Size", "Minimum size must be positive!");
			return null;
		}
		rfParams.setMinFuncSize(minSize);

		int maxStarts = maxStartsField.getIntValue();
		if (maxStarts <= 0) {
			Msg.showWarn(this, null, "Invalid Max Starts", "Max Starts must be positive!");
			return null;
		}
		rfParams.setMaxStarts(maxStarts);

		String csv = contextRegistersField.getText();
		if (!StringUtils.isBlank(csv)) {
			try {
				rfParams.setRegistersAndValues(csv);
			}
			catch (IllegalArgumentException e) {
				Msg.showError(factors, null, "Context Register/Value Error", e);
				return null;
			}
		}
		rfParams.setIncludePrecedingAndFollowing(includeBeforeAndAfterBox.isSelected());
		rfParams.setIncludeBitFeatures(includeBitFeaturesBox.isSelected());
		setProperties();
		return rfParams;
	}
Returns the program used to train the models
@return source program
Ghidra/Extensions/MachineLearning/src/main/java/ghidra/machinelearning/functionfinding/FunctionStartRFParamsDialog.java