Skip to content

Commit ff0eb10

Browse files
committed
- Adding documentation and renaming from IWindowInfo.java to SlidingWindowInfo
- Adding added and removed elements compared to previous window - Removed subwindow and build for window without storage from previous window
1 parent 5cd4841 commit ff0eb10

File tree

13 files changed

+85
-87
lines changed

13 files changed

+85
-87
lines changed

src/org/processmining/eventlogs/window/EventLogWindowIterator.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
11
package org.processmining.eventlogs.window;
22

3-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
3+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
44
import org.processmining.placebasedlpmdiscovery.model.logs.EventLog;
55

66
import java.util.Iterator;
77

88
/**
99
* The classes of this type are used to traverse an event log using a sliding window.
1010
*/
11-
interface EventLogWindowIterator extends Iterator<IWindowInfo> {
11+
interface EventLogWindowIterator extends Iterator<SlidingWindowInfo> {
1212
/**
1313
* Returns a default window traversal instance.
1414
* @param eventLog - the event log that should be traversed

src/org/processmining/eventlogs/window/EventLogWindowIteratorImpl.java

Lines changed: 11 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package org.processmining.eventlogs.window;
22

3-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.WindowInfo;
3+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfoImpl;
44
import org.processmining.placebasedlpmdiscovery.model.logs.EventLog;
55
import org.processmining.placebasedlpmdiscovery.model.logs.activities.Activity;
66
import org.processmining.placebasedlpmdiscovery.model.logs.tracevariants.ActivityBasedTotallyOrderedEventLogTraceVariant;
@@ -44,7 +44,9 @@ public boolean hasNext() {
4444
|| !this.remainingTraceVariants.isEmpty();
4545
}
4646

47-
public WindowInfo next() {
47+
public SlidingWindowInfoImpl next() {
48+
ArrayList<Activity> addedActivities = new ArrayList<>();
49+
ArrayList<Activity> removedActivities = new ArrayList<>();
4850
boolean startNewVariant = traceVariant == null // hasn't started traversing
4951
|| position >= traceVariant.size() && window.size() == 1; // finishing a trace variant
5052
if (startNewVariant) {
@@ -53,15 +55,19 @@ public WindowInfo next() {
5355

5456
// remove first event if no space in the window or at the end of the trace
5557
if (window.size() >= maxWindowSize || position >= traceVariant.size()) {
56-
window.removeFirst();
58+
Activity first = window.removeFirst();
59+
removedActivities.add(first);
5760
}
5861

5962
// add next event
6063
if (position < traceVariant.size()) {
61-
window.add(traceVariant.get(position++));
64+
window.add(traceVariant.get(position));
65+
addedActivities.add(traceVariant.get(position));
66+
position++;
6267
}
6368

64-
return new WindowInfo(new ArrayList<>(window), windowCount, position - window.size(), position - 1, traceVariant);
69+
return new SlidingWindowInfoImpl(new ArrayList<>(window), windowCount,position - window.size(),position - 1
70+
, traceVariant, addedActivities, removedActivities);
6571
}
6672

6773
private void startTraversingNewTraceVariant() {

src/org/processmining/eventlogs/window/WindowBasedEventLog.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,21 @@
11
package org.processmining.eventlogs.window;
22

3-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
3+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
44
import org.processmining.placebasedlpmdiscovery.model.logs.EventLog;
55

66
import java.util.Iterator;
77

88
/**
99
* The window based event log iterates the event log using a sliding window. However, the iteration is made throughout
10-
* the trace variants and not the traces itself in order to avoid duplication. The {@link IWindowInfo} keeps
10+
* the trace variants and not the traces itself in order to avoid duplication. The {@link SlidingWindowInfo} keeps
1111
* information in how many traces of that variant the window occurs. Additionally, the sliding window assumes there
1212
* is a padding at the beginning and end of each trace variant so that each element is represented in equal number of
1313
* windows.
1414
* <p>
1515
* Example: Let us assume that the sliding window is of size 3 and the event log has one trace variant [a, b, c, b].
1616
* The sliding window used for iteration would generate 6 windows: [a], [a, b], [a, b, c], [b, c, b], [c, b], and [b].
1717
*/
18-
public class WindowBasedEventLog implements Iterable<IWindowInfo> {
18+
public class WindowBasedEventLog implements Iterable<SlidingWindowInfo> {
1919
private final EventLog eventLog;
2020
private final int windowSize;
2121

@@ -24,7 +24,7 @@ public WindowBasedEventLog(EventLog eventLog, int windowSize) {
2424
this.windowSize = windowSize;
2525
}
2626
@Override
27-
public Iterator<IWindowInfo> iterator() {
27+
public Iterator<SlidingWindowInfo> iterator() {
2828
return EventLogWindowIterator.getInstance(eventLog, windowSize);
2929
}
3030

src/org/processmining/lpms/discovery/builders/LADASingleWindowLPMBuilder.java

Lines changed: 2 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,12 @@
11
package org.processmining.lpms.discovery.builders;
22

33
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowLPMStorage;
4-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
4+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
55

66
public class LADASingleWindowLPMBuilder implements SingleWindowLPMBuilder {
77

88
@Override
9-
public WindowLPMStorage build(IWindowInfo windowInfo) {
10-
WindowLPMStorage windowStorage = WindowLPMStorage.lada();
11-
for (int i = 1; i < windowInfo.getWindow().size(); ++i) {
12-
windowStorage = build(windowInfo.subWindow(0, i), windowStorage);
13-
}
14-
return windowStorage;
15-
}
16-
17-
@Override
18-
public WindowLPMStorage build(IWindowInfo windowInfo, WindowLPMStorage prevWindowResult) {
9+
public WindowLPMStorage build(SlidingWindowInfo windowInfo, WindowLPMStorage prevWindowResult) {
1910
// Activity newAct = windowInfo.getWindow().get(windowInfo.getWindow().size()-1);
2011
// prevWindowResult.extend(newAct);
2112
return null;
Lines changed: 2 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package org.processmining.lpms.discovery.builders;
22

33
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowLPMStorage;
4-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
4+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
55

66
/**
77
* Builds LPMs for a single window.
@@ -12,18 +12,11 @@ static SingleWindowLPMBuilder getInstance() {
1212
return new LADASingleWindowLPMBuilder();
1313
}
1414

15-
/**
16-
* Builds LPMs for a single window independently of the rest.
17-
* @param windowInfo - the window info for which we want to build LPMs
18-
* @return a window storage that contains LPMs for the provided window
19-
*/
20-
WindowLPMStorage build(IWindowInfo windowInfo);
21-
2215
/**
2316
* Builds LPMs for a single window, but if possible, reuses overlapping LPMs from the result of the previous window.
2417
* @param windowInfo - the window info for which we want to build LPMs
2518
* @param prevWindowResult - the previous window result to reuse overlapping LPMs
2619
* @return a window storage that contains LPMs for the provided window
2720
*/
28-
WindowLPMStorage build(IWindowInfo windowInfo, WindowLPMStorage prevWindowResult);
21+
WindowLPMStorage build(SlidingWindowInfo windowInfo, WindowLPMStorage prevWindowResult);
2922
}

src/org/processmining/lpms/discovery/lada/LADA.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowLPMStorage;
88
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowToGlobalLPMStorageTransporter;
99
import org.processmining.placebasedlpmdiscovery.lpmdiscovery.LPMDiscovery;
10-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
10+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
1111
import org.processmining.placebasedlpmdiscovery.model.discovery.LPMDiscoveryResult;
1212
import org.processmining.placebasedlpmdiscovery.model.discovery.StandardLPMDiscoveryResult;
1313
import org.processmining.placebasedlpmdiscovery.model.logs.EventLog;
@@ -37,7 +37,7 @@ public LPMDiscoveryResult from(XLog log) {
3737
WindowBasedEventLog windowBasedEventLog = WindowBasedEventLog.getInstance(eventLog, this.proximity);
3838
WindowLPMStorage windowStorage = null;
3939
SingleWindowLPMBuilder singleWindowLPMBuilder = SingleWindowLPMBuilder.getInstance();
40-
for (IWindowInfo windowInfo : windowBasedEventLog) {
40+
for (SlidingWindowInfo windowInfo : windowBasedEventLog) {
4141
windowStorage = singleWindowLPMBuilder.build(windowInfo, windowStorage);
4242
storageTransporter.move(windowStorage, lpmStorage);
4343
}

src/org/processmining/placebasedlpmdiscovery/lpmbuilding/algorithms/fpgrowth/placecombination/FPGrowthForPlacesLPMBuildingAlg.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import org.processmining.placebasedlpmdiscovery.lpmbuilding.results.LPMBuildingResult;
1616
import org.processmining.placebasedlpmdiscovery.lpmdiscovery.combination.LPMCombinationParameters;
1717
import org.processmining.placebasedlpmdiscovery.lpmevaluation.LPMEvaluationController;
18-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
18+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
1919
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.enhanced.IntegerMappedLog;
2020
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.enhanced.extra.AbstractActivityMapping;
2121
import org.processmining.placebasedlpmdiscovery.lpmevaluation.results.helpers.WindowTotalCounter;
@@ -90,7 +90,7 @@ private MainFPGrowthLPMTree build(EventLog log, Set<Place> places, LPMCombinatio
9090
int maxWindowSize = parameters.getLpmProximity(); // max window size
9191
WindowBasedEventLog windowBasedEventLog = WindowBasedEventLog.getInstance(log, maxWindowSize);
9292
WindowLPMTree localTree = new WindowLPMTree(maxWindowSize); // window tree
93-
for (IWindowInfo windowInfo : windowBasedEventLog) {
93+
for (SlidingWindowInfo windowInfo : windowBasedEventLog) {
9494
windowTotalCounter.update(windowInfo.getIntWindow(), windowInfo.getWindowCount()); // update window counter
9595

9696
if (windowInfo.getStartPos() == 0 && windowInfo.getEndPos() == 0) { // new trace variant new WindowLPMTree

src/org/processmining/placebasedlpmdiscovery/lpmbuilding/algorithms/windowbased/WindowBasedLPMBuildingAlg.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
import org.processmining.placebasedlpmdiscovery.lpmbuilding.results.LPMBuildingResult;
1212
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowLPMStorage;
1313
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowToGlobalLPMStorageTransporter;
14-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
14+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
1515
import org.processmining.placebasedlpmdiscovery.model.lpmstorage.GlobalLPMStorage;
1616

1717
public class WindowBasedLPMBuildingAlg implements LPMBuildingAlg {
@@ -47,7 +47,7 @@ private LPMBuildingResult build(WindowBasedLPMBuildingInput input, WindowBasedLP
4747
WindowBasedEventLog windowBasedEventLog = WindowBasedEventLog
4848
.getInstance(input.getEventLog(), parameters.getWindowSize());
4949
WindowLPMStorage windowStorage = null;
50-
for (IWindowInfo windowInfo : windowBasedEventLog) {
50+
for (SlidingWindowInfo windowInfo : windowBasedEventLog) {
5151
windowStorage = singleWindowLPMBuilder.build(windowInfo, windowStorage);
5252
storageTransporter.move(windowStorage, lpmStorage);
5353
}

src/org/processmining/placebasedlpmdiscovery/lpmbuilding/algorithms/windowbased/singlewindowbuilders/PTSingleWindowLPMBuilder.java

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -2,17 +2,13 @@
22

33
import org.processmining.lpms.discovery.builders.SingleWindowLPMBuilder;
44
import org.processmining.placebasedlpmdiscovery.lpmbuilding.storage.WindowLPMStorage;
5-
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.IWindowInfo;
5+
import org.processmining.placebasedlpmdiscovery.lpmevaluation.logs.SlidingWindowInfo;
66
import org.processmining.placebasedlpmdiscovery.model.lpmmodels.processtree.ProcessTree;
77

88
public class PTSingleWindowLPMBuilder implements SingleWindowLPMBuilder {
9-
@Override
10-
public WindowLPMStorage build(IWindowInfo windowInfo) {
11-
return null;
12-
}
139

1410
@Override
15-
public WindowLPMStorage build(IWindowInfo windowInfo, WindowLPMStorage prevWindowResult) {
11+
public WindowLPMStorage build(SlidingWindowInfo windowInfo, WindowLPMStorage prevWindowResult) {
1612

1713
ProcessTree pt = new ProcessTree(windowInfo.getWindow().get(windowInfo.getEndPos()));
1814
return null;

src/org/processmining/placebasedlpmdiscovery/lpmevaluation/logs/IWindowInfo.java renamed to src/org/processmining/placebasedlpmdiscovery/lpmevaluation/logs/SlidingWindowInfo.java

Lines changed: 15 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,24 @@
55

66
import java.util.List;
77

8-
public interface IWindowInfo {
8+
/**
9+
* There are three different ways in which a current sliding window differs from the previous.
10+
* (1) Only adding an element: [a] -> [a b], [a b] -> [a b c]; This occurs when the sliding window capacity is not
11+
* completely filled, i.e., at the beginning of a sequence. To see which activities have been added use
12+
* {@link #getAddedActivities()}.
13+
* (2) Removing and adding an element: [a b c] -> [b c b]; This occurs when the sliding window capacity is filled, so
14+
* first an element has to be removed and then added.
15+
* (3) Only removing an element: [b c b] -> [c b], [c b] -> [b]; This occurs when the sliding window is at the end of
16+
* a sequence. To see which activities have been removed use {@link #getRemovedActivities()}.
17+
*/
18+
public interface SlidingWindowInfo {
919

1020
List<Activity> getWindow();
1121

22+
List<Activity> getAddedActivities();
23+
24+
List<Activity> getRemovedActivities();
25+
1226
/**
1327
* Returns the start position of the window in the trace (inclusive)
1428
* @return startPos - the start position of the window in the trace
@@ -34,14 +48,4 @@ public interface IWindowInfo {
3448
List<Integer> getIntWindow();
3549

3650
ActivityBasedTotallyOrderedEventLogTraceVariant getParentTraceVariant();
37-
38-
/**
39-
* Creates a new window that is a subwindow of the current one and returns it.
40-
* @param fromIndex low endpoint (inclusive) of the subwindow
41-
* @param toIndex high endpoint (exclusive) of the subwindow
42-
* @return a new instance of {@link IWindowInfo}
43-
* @throws IndexOutOfBoundsException for an illegal endpoint index value (fromIndex < 0 || toIndex > size)
44-
* @throws IllegalArgumentException for fromIndex > toIndex
45-
*/
46-
IWindowInfo subWindow(int fromIndex, int toIndex);
4751
}

0 commit comments

Comments
 (0)