public PatternEvaluationStats evaluatePatterns(List<PatternInfoRowObject> rows) {
		ArrayList<Pattern> patternList = getPatternList(rows);
		if (onlyPrePatterns) {
			Msg.showWarn(this, this, "Only Pre-Patterns",
				"Only Pre-Patterns in selection: no true/false positive information will be calculated.");
		}
		SequenceSearchState root = SequenceSearchState.buildStateMachine(patternList);
		indexToSize.clear();
		for (Pattern pattern : patternList) {
			indexToSize.put(pattern.getIndex(), pattern.getSize());
		}
		Program currentProgram = plugin.getCurrentProgram();
		MemoryBlock[] blocks = currentProgram.getMemory().getBlocks();
		PatternEvaluationStats matchStats = new PatternEvaluationStats();
		for (MemoryBlock block : blocks) {
			if (!block.isInitialized()) {
				continue;
			}
			//TODO: add toggle for searching non-executable blocks?
			if (!block.isExecute()) {
				continue;
			}
			searchBlock(root, block, matchStats, currentProgram, TaskMonitor.DUMMY);
		}
		return matchStats;
	}
Evaluate a set of patterns
@param rows patterns to evaluate
@return statistics about the pattern matches
Ghidra/Features/BytePatterns/src/main/java/ghidra/bitpatterns/gui/ClipboardPanel.java