private static SuccessionType[,] CreateFootprintTable(PetriNet petriNet) { var transactions = petriNet.Transitions; var footprintTable = new SuccessionType[transactions.Count, transactions.Count]; for (int i = 0; i < transactions.Count; i++) { var transactionId = transactions[-(i + 1)].id; var childrenIds = petriNet.GetIdsOfChildTransactions(transactionId); var parentIds = petriNet.GetIdsOfParentTransactions(transactionId); for (int j = 0; j < transactions.Count; j++) { footprintTable[i, j] = DetermineSuccessionType(childrenIds, parentIds, -(j + 1)); } } return(footprintTable); }
private static SuccessionType[,] CreateFootprintTable(Dictionary <List <string>, int> trace_frequencies, Dictionary <string, int> transitionsNameToId) { var directSuccessions = AlphaMiner.GetDirectSuccessions(trace_frequencies); List <KeyValuePair <int, int> > directSucessionList = new List <KeyValuePair <int, int> >(); foreach (var directSuccession in directSuccessions) { var key = transitionsNameToId[directSuccession.Item1]; var value = transitionsNameToId[directSuccession.Item2]; directSucessionList.Add(new KeyValuePair <int, int>(key, value)); } var ids = directSucessionList.Select(x => x.Key).ToList(); ids.AddRange(directSucessionList.Select(x => x.Value).ToList()); ids = ids.Distinct().OrderByDescending(x => x).ToList(); var footprintTable = new SuccessionType[ids.Count, ids.Count]; for (int i = 0; i < ids.Count; i++) { var casualityChildIdList = directSucessionList.Where(kvp => kvp.Key == -(i + 1)).Select(kvp => kvp.Value).ToList(); var casualityParentIdList = directSucessionList.Where(kvp => kvp.Value == -(i + 1)).Select(kvp => kvp.Key).ToList(); var parallerIdList = casualityChildIdList.Intersect(casualityParentIdList).ToList(); for (int j = 0; j < ids.Count; j++) { var nodeId = -(j + 1); footprintTable[i, j] = DetermineSuccessionType(casualityChildIdList, casualityParentIdList, parallerIdList, nodeId); } } return(footprintTable); }