private void searchBlock(Program program, MemoryBlock block, TaskMonitor taskMonitor)
			throws IOException {
		taskMonitor.setMessage("Byte Search");
		taskMonitor.setMaximum((int) block.getSize());
		taskMonitor.setProgress(0);
		ArrayList<Match> mymatches = new ArrayList<>();
		long streamoffset = block.getStart().getOffset();
		root.apply(block.getData(), mymatches, taskMonitor);
		if (taskMonitor.isCancelled()) {
			return;
		}
		Address start = block.getStart();
		for (int i = 0; i < mymatches.size(); ++i) {
			Match match = mymatches.get(i);
			Address addr = start.add(match.getMarkOffset());
			if (!match.checkPostRules(streamoffset)) {
				continue;
			}
			PatternAccumulate accum = accumList.get(match.getSequenceIndex());
			MatchAction[] matchActions = match.getMatchActions();
			for (MatchAction matchAction : matchActions) {
				boolean isFalse = collectStats(accum, (MatchActionMarker) matchAction, addr);
				if (isFalse) {
					displayFalse(accum, addr);
					accum.addExample(addr);
				}
			}
		}
	}
Run patterns over all memory blocks, accumulate stats for
   1) hits for each pattern
   2) false positives for each pattern

 Produce an xml file output of stats for each pattern
Ghidra/Features/BytePatterns/ghidra_scripts/PatternStats.java