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

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

Adding needleman wunsch

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