private boolean collectStats(PatternAccumulate accum, MatchActionMarker marker, Address addr) {
		boolean isFalse = false;
		accum.totalHits += 1;
		if (marker.getType() == MatchActionMarker.FUNCTION_START ||
			marker.getType() == MatchActionMarker.POSSIBLE_FUNCTION_START) {
			Function func = functionManager.getFunctionContaining(addr);
			if (func != null) {
				if (!func.getEntryPoint().equals(addr)) {	// In a function but not function start
					isFalse = true;
					accum.falsePosWithCode += 1;			// worse kind of false positive
				}
			}
			else {
				isFalse = true;
				accum.falsePosNoCode += 1;					// Either not an instruction, or not marked as function
			}
		}
		else if (marker.getType() == MatchActionMarker.CODE_BOUNDARY) {
			CodeUnit codeUnit = listing.getCodeUnitAt(addr);
			if (!(codeUnit instanceof Instruction)) {
				isFalse = true;
				accum.falsePosNoCode += 1;
			}
		}
		return isFalse;
	}
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