source: branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/ObjectDistanceSubstitionMatrix.java @ 1568

Last change on this file since 1568 was 1568, checked in by rkrimmel, 10 years ago

Building distance matrix between sequences

File size: 3.9 KB
RevLine 
[1553]1package de.ugoe.cs.autoquest.tasktrees.alignment.substitution;
[1324]2
[1331]3import java.util.ArrayList;
[1324]4import java.util.Collection;
[1554]5import java.util.HashMap;
[1331]6import java.util.Iterator;
7
8import de.ugoe.cs.autoquest.eventcore.guimodel.GUIModel;
9import de.ugoe.cs.autoquest.eventcore.guimodel.IGUIElement;
10
[1324]11import java.util.List;
12
13import de.ugoe.cs.autoquest.eventcore.Event;
[1553]14import de.ugoe.cs.autoquest.tasktrees.alignment.algorithms.AlignmentHelpers;
15import de.ugoe.cs.autoquest.tasktrees.treeifc.IEventTaskInstance;
[1554]16import de.ugoe.cs.autoquest.tasktrees.treeifc.ITask;
17import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
[1553]18import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession;
[1554]19import de.ugoe.cs.autoquest.usageprofiles.SymbolMap;
[1331]20import de.ugoe.cs.util.console.GlobalDataContainer;
[1324]21
22public class ObjectDistanceSubstitionMatrix implements SubstitutionMatrix {
23
[1554]24        // private ArrayList<int[][]> matrix;
25        HashMap<Integer, Integer> idmapping;
26        private TriangleMatrix matrix;
27        private SymbolMap<ITaskInstance, ITask> uniqueTasks;
[1568]28        private double gapPenalty;
29        private double positiveThreshold;
[1555]30       
[1554]31        public ObjectDistanceSubstitionMatrix(
[1558]32                        SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold) {
[1554]33                this.uniqueTasks = uniqueTasks;
[1558]34                this.positiveThreshold = positiveThreshold;
[1554]35                idmapping = new HashMap<Integer, Integer>();
36                matrix = new TriangleMatrix(uniqueTasks.size()+1);
[1559]37                gapPenalty = -5;
[1558]38               
[1324]39        }
40
41        @Override
[1568]42        public double getGapPenalty() {
[1555]43                return gapPenalty;
[1324]44        }
45
46        @Override
[1554]47        public void generate() {
[1555]48                int index = 0;
[1558]49                //TODO We need to determine this parameter before generating the matrix..
[1568]50                //float meandistance = 18;
[1558]51                //TODO We need to determine this parameter before generating the matrix..
52                float maxDistance =34;
[1554]53                for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
54                                .hasNext();) {
55                        Object obj1 = it.next();
56                        IEventTaskInstance eti1 = null;
57                        if (obj1 instanceof IEventTaskInstance) {
58                                eti1 = (IEventTaskInstance) obj1;
59                        }
[1568]60                        //System.out.println(eti1.getTask().toString());
[1555]61               
[1554]62                        for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
63                                        .iterator(); jt.hasNext();) {
64                                IEventTaskInstance eti2 = null;
65                                Object obj2 = jt.next();
66                                if (obj2 instanceof IEventTaskInstance) {
67                                        eti2 = (IEventTaskInstance) obj2;
[1331]68                                }
[1554]69                                IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
70                                IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
[1555]71                                int tempindex1 = -1;
72                                int tempindex2 = -1;
73                                if(!idmapping.containsKey(eti1.getTask().getId()))
74                                {
75                                        idmapping.put(eti1.getTask().getId(), index);
76                                        tempindex1 = index;
77                                        index++;
78                                }       
79                                else
80                                {
81                                        tempindex1 = idmapping.get(eti1.getTask().getId());
82                                }       
83                                if(!idmapping.containsKey(eti2.getTask().getId()))
84                                {
85                                        idmapping.put(eti2.getTask().getId(), index);
86                                        tempindex2 = index;
87                                        index++;
88                                }       
89                                else
90                                {
91                                        tempindex2 = idmapping.get(eti2.getTask().getId());
92                                }
[1558]93                                float distance = -1*AlignmentHelpers.distanceBetween(first, second);
94                                //meandistance += distance;
[1555]95                       
[1558]96                                if(distance > maxDistance){
97                                        maxDistance = distance;
[1555]98                                }
[1558]99                               
100                                distance += 5;
101                               
102                                //if (distance < positiveThreshold) {
103                                //      distance = -1*distance;
104                                //}
105                               
[1555]106                                matrix.set(tempindex1, tempindex2,distance);
107                               
[1554]108                        }
[1331]109                }
[1558]110                //System.out.println("ObjectDistanceMatrix: MaxDistance: " + maxDistance);
111                //System.out.println(meandistance/(uniqueTasks.size()*uniqueTasks.size()));
[1555]112                //System.out.println(idmapping.toString());
113                //System.out.println(matrix.toString());
114                //System.out.println(idmapping.keySet().toString());
115                //System.out.println(idmapping.values().toString());
116               
[1324]117        }
[1558]118       
119        public String toString(){
120                return matrix.toString();
121        }
[1554]122
123        @Override
[1568]124        public double getDistance(int taskId1, int taskId2) {
[1555]125                //System.out.println("Taskid1: " + taskId1 + " Taskid2: " + taskId2 + " Idmapping1: " + idmapping.get(taskId1) + " Idmapping2: " + idmapping.get(taskId2));
[1554]126                return matrix.get(idmapping.get(taskId1),idmapping.get(taskId2));
127        }
128
[1324]129}
[1554]130
Note: See TracBrowser for help on using the repository browser.