UNPKG

pm4js

Version:

Process Mining for Javascript

69 lines (65 loc) 2.47 kB
class ETConformanceResult { constructor(activatedTransitions, escapingEdges, precision) { this.activatedTransitions = activatedTransitions; this.escapingEdges = escapingEdges; this.precision = precision; } } class ETConformance { static apply(eventLog, acceptingPetriNet, activityKey="concept:name") { let prefixes = EventLogPrefixes.apply(eventLog, activityKey); let prefixesKeys = Object.keys(prefixes); let ret = TokenBasedReplay.applyListListAct(prefixesKeys, acceptingPetriNet, false, true); let i = 0; let sum_at = 0; let sum_ee = 0; let logTransitions = Object.keys(GeneralLogStatistics.getStartActivities(eventLog, activityKey)); let activatedTransitions = PetriNetReachableVisibleTransitions.apply(acceptingPetriNet.net, acceptingPetriNet.im); let escapingEdges = []; for (let at of activatedTransitions) { if (!(logTransitions.includes(at))) { escapingEdges.push(at); } } sum_at += activatedTransitions.length * eventLog.traces.length; sum_ee += escapingEdges.length * eventLog.traces.length; i = 0; while (i < prefixesKeys.length) { if (ret[i].isFit) { let activatedTransitions = PetriNetReachableVisibleTransitions.apply(acceptingPetriNet.net, ret[i]); let prefix = prefixesKeys[i]; let logTransitions = Object.keys(prefixes[prefix]); let sumPrefix = 0; for (let transition of logTransitions) { sumPrefix += prefixes[prefix][transition]; } let escapingEdges = []; for (let at of activatedTransitions) { if (!(logTransitions.includes(at))) { escapingEdges.push(at); } } sum_at += activatedTransitions.length * sumPrefix; sum_ee += escapingEdges.length * sumPrefix; } i++; } let precision = 1.0; if (sum_at > 0) { precision = 1.0 - (sum_ee / (0.0 + sum_at)); } let finalResult = new ETConformanceResult(sum_at, sum_ee, precision); Pm4JS.registerObject(finalResult, "ETConformance Precision Results"); return finalResult; } } try { module.exports = {ETConformance: ETConformance, ETConformanceResult: ETConformanceResult}; global.ETConformance = ETConformance; global.ETConformanceResult = ETConformanceResult; } catch (err) { // not in Node //console.log(err); } Pm4JS.registerAlgorithm("ETConformance", "apply", ["EventLog", "AcceptingPetriNet"], "ETConformanceResult", "Calculate Precision (ETConformance based on TBR)", "Alessandro Berti");