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

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

Fixed bug in needlemanwunsch traceback

File size: 3.5 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       
24        private double positiveThreshold;
25       
26        public ObjectDistanceSubstitionMatrix(
27                        SymbolMap<ITaskInstance, ITask> uniqueTasks,float positiveThreshold) {
28                this.uniqueTasks = uniqueTasks;
29                this.positiveThreshold = positiveThreshold;
30                idmapping = new HashMap<Integer, Integer>();
31                matrix = new TriangleMatrix(uniqueTasks.size()+1);
32                gapPenalty = -3;
33               
34        }
35
36
37        public double getGapPenalty() {
38                return gapPenalty;
39        }
40       
41        public void setGapPenalty(double gapPenalty) {
42                this.gapPenalty = gapPenalty;
43        }
44
45        public void generate() {
46       
47                int index = 0;
48               
49                float maxDistance =34;
50                for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
51                                .hasNext();) {
52                        Object obj1 = it.next();
53                        IEventTaskInstance eti1 = null;
54                        if (obj1 instanceof IEventTaskInstance) {
55                                eti1 = (IEventTaskInstance) obj1;
56                        }
57               
58                        for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
59                                        .iterator(); jt.hasNext();) {
60                                IEventTaskInstance eti2 = null;
61                                Object obj2 = jt.next();
62                                if (obj2 instanceof IEventTaskInstance) {
63                                        eti2 = (IEventTaskInstance) obj2;
64                                }
65                                IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
66                                IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
67                                int tempindex1 = -1;
68                                int tempindex2 = -1;
69                                if(!idmapping.containsKey(eti1.getTask().getId()))
70                                {
71                                        idmapping.put(eti1.getTask().getId(), index);
72                                        tempindex1 = index;
73                                        index++;
74                                }       
75                                else
76                                {
77                                        tempindex1 = idmapping.get(eti1.getTask().getId());
78                                }       
79                                if(!idmapping.containsKey(eti2.getTask().getId()))
80                                {
81                                        idmapping.put(eti2.getTask().getId(), index);
82                                        tempindex2 = index;
83                                        index++;
84                                }       
85                                else
86                                {
87                                        tempindex2 = idmapping.get(eti2.getTask().getId());
88                                }
89                                float distance = -1*AlignmentHelpers.distanceBetween(first, second);
90                       
91                       
92                                if(distance > maxDistance){
93                                        maxDistance = distance;
94                                }
95                               
96                                distance += positiveThreshold;
97                               
98
99                               
100                                matrix.set(tempindex1, tempindex2,distance);
101       
102                        }
103                }
104               
105                //System.out.println(meandistance/(uniqueTasks.size()*uniqueTasks.size()));
106                //System.out.println(idmapping.toString());
107                //System.out.println(matrix.toString());
108                //System.out.println("ObjectDistanceMatrix: MaxDistance: " + maxDistance);
109                //System.out.println(idmapping.keySet().toString());
110                //System.out.println(idmapping.values().toString());
111               
112        }
113       
114        public String toString(){
115                return matrix.toString();
116        }
117
118        public double getScore(int taskId1, int taskId2) {
119                if(taskId1 == Constants.GAP_SYMBOL || taskId1 == Constants.UNMATCHED_SYMBOL || taskId2 == Constants.GAP_SYMBOL || taskId2 == Constants.UNMATCHED_SYMBOL ) {
120                        return 0.0;
121                }
122                else {
123                        return matrix.get(idmapping.get(taskId1),idmapping.get(taskId2));       
124                }
125               
126        }
127
128}
129
Note: See TracBrowser for help on using the repository browser.