Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWaterman.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWaterman.java	(revision 1554)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/algorithms/SmithWaterman.java	(revision 1555)
@@ -69,6 +69,6 @@
 		this.submat = submat;
 
-		System.out.println("Starting SmithWaterman algorithm with a "
-				+ submat.getClass() + " Substitution Matrix: " + submat.getClass().getCanonicalName());
+		//System.out.println("Starting SmithWaterman algorithm with a "
+		//		+ submat.getClass() + " Substitution Matrix: " + submat.getClass().getCanonicalName());
 		scoreThreshold = 20;
 		score = new double[length1 + 1][length2 + 1];
@@ -90,5 +90,5 @@
 	private double similarity(int i, int j) {
 		if (i == 0 || j == 0) {
-			// it's a gap (indel)
+			// it's a gap 
 			return submat.getGapPenalty();
 		}
@@ -97,5 +97,5 @@
 		// return (input1[i - 1] == input2[j - 1]) ? MATCH_SCORE :
 		// MISMATCH_SCORE;
-		return submat.getDistance(i - 1, j - 1);
+		return submat.getDistance(input1[i - 1], input2[j - 1]);
 	}
 
@@ -279,15 +279,16 @@
 	 */
 	public void printDPMatrix() {
-		System.out.print("   ");
+		System.out.print("          ");
 		for (int j = 1; j <= length2; j++)
-			System.out.print("   " + input2[j - 1]);
+			System.out.format("%5d", input2[j - 1]);
 		System.out.println();
 		for (int i = 0; i <= length1; i++) {
 			if (i > 0)
-				System.out.print(input1[i - 1] + " ");
-			else
-				System.out.print("  ");
+				System.out.format("%5d ",input1[i - 1]);
+			else{
+				System.out.print("      ");
+			}
 			for (int j = 0; j <= length2; j++) {
-				System.out.print(score[i][j] + " ");
+				System.out.format("%4.1f ",score[i][j]);
 			}
 			System.out.println();
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/ObjectDistanceSubstitionMatrix.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/ObjectDistanceSubstitionMatrix.java	(revision 1554)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/ObjectDistanceSubstitionMatrix.java	(revision 1555)
@@ -26,5 +26,7 @@
 	private TriangleMatrix matrix;
 	private SymbolMap<ITaskInstance, ITask> uniqueTasks;
-
+	private float gapPenalty; 
+	private float positiveThreshold;
+	
 	public ObjectDistanceSubstitionMatrix(
 			SymbolMap<ITaskInstance, ITask> uniqueTasks) {
@@ -32,15 +34,18 @@
 		idmapping = new HashMap<Integer, Integer>();
 		matrix = new TriangleMatrix(uniqueTasks.size()+1);
+		gapPenalty = -10;
+		//Todo: Calculate this value (the mean distance between every element) before
+		positiveThreshold =7;
 	}
 
 	@Override
 	public float getGapPenalty() {
-		// TODO Auto-generated method stub
-		return 0;
+		return gapPenalty;
 	}
 
 	@Override
 	public void generate() {
-		int i = 0;
+		int index = 0;
+		float meandistance = 0;
 		for (Iterator<ITaskInstance> it = uniqueTasks.getSymbols().iterator(); it
 				.hasNext();) {
@@ -50,5 +55,5 @@
 				eti1 = (IEventTaskInstance) obj1;
 			}
-			int j = 0;
+		
 			for (Iterator<ITaskInstance> jt = uniqueTasks.getSymbols()
 					.iterator(); jt.hasNext();) {
@@ -60,15 +65,48 @@
 				IGUIElement first = (IGUIElement) eti1.getEvent().getTarget();
 				IGUIElement second = (IGUIElement) eti2.getEvent().getTarget();
-				idmapping.put(eti1.getTask().getId(), i);
-				idmapping.put(eti2.getTask().getId(), j);
-				matrix.set(i, j, AlignmentHelpers.distanceBetween(first, second));
-				j++;
+				int tempindex1 = -1;
+				int tempindex2 = -1;
+				if(!idmapping.containsKey(eti1.getTask().getId()))
+				{
+					idmapping.put(eti1.getTask().getId(), index);
+					tempindex1 = index;
+					index++;
+				}	
+				else 
+				{
+					tempindex1 = idmapping.get(eti1.getTask().getId());
+				}	
+				if(!idmapping.containsKey(eti2.getTask().getId()))
+				{
+					idmapping.put(eti2.getTask().getId(), index);
+					tempindex2 = index;
+					index++;
+				}	
+				else 
+				{
+					tempindex2 = idmapping.get(eti2.getTask().getId());
+				}
+				float distance = AlignmentHelpers.distanceBetween(first, second);
+				meandistance += distance;
+			
+				if (distance > positiveThreshold) {
+					distance = -1*distance;
+				}
+				matrix.set(tempindex1, tempindex2,distance);
+				
 			}
-			i++;
 		}
+		System.out.println(meandistance/(uniqueTasks.size()*uniqueTasks.size()));
+		//System.out.println(idmapping.toString());
+		//System.out.println(matrix.toString());
+		//System.out.println(idmapping.keySet().toString());
+		//System.out.println(idmapping.values().toString());
+		
 	}
 
 	@Override
 	public float getDistance(int taskId1, int taskId2) {
+		//System.out.println("Taskid1: " + taskId1 + " Taskid2: " + taskId2 + " Idmapping1: " + idmapping.get(taskId1) + " Idmapping2: " + idmapping.get(taskId2));
+		
 		return matrix.get(idmapping.get(taskId1),idmapping.get(taskId2));
 	}
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/TriangleMatrix.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/TriangleMatrix.java	(revision 1554)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/alignment/substitution/TriangleMatrix.java	(revision 1555)
@@ -8,5 +8,5 @@
 	public TriangleMatrix(int size) {
 		this.size = size;
-		matrix = new float[size*(size+1)/2];
+		matrix = new float [size*(size+1)/2];
 	}
 	
@@ -24,4 +24,6 @@
 	}
 
+	
+	
 	
 	//Note: String just looks good for small. testing matrices 
Index: /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java
===================================================================
--- /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1554)
+++ /branches/ralph/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1555)
@@ -123,4 +123,5 @@
         this.preparationTaskHandlingStrategy = new TaskHandlingStrategy(minimalTaskEquality);
         this.identityTaskHandlingStrategy = new TaskHandlingStrategy(TaskEquality.IDENTICAL);
+        numberseqs = new ArrayList<NumberSequence>();
         
     }
@@ -140,15 +141,14 @@
     public RuleApplicationResult apply(List<IUserSession> sessions) {
         RuleApplicationData appData = new RuleApplicationData(sessions);
-        numberseqs = new ArrayList<NumberSequence>();
+        
         
         
         
         // this is the real rule application. Loop while something is replaced.
-        SymbolMap<ITaskInstance, ITask> uniqueTasks = harmonizeEventTaskInstancesModel(appData,numberseqs);
+        SymbolMap<ITaskInstance, ITask> uniqueTasks = harmonizeEventTaskInstancesModel(appData);
         ObjectDistanceSubstitionMatrix submat = new ObjectDistanceSubstitionMatrix(uniqueTasks);  
         submat.generate();
         
-        
-        SmithWaterman sm = new SmithWaterman(numberseqs.get(0).getSequence(), numberseqs.get(0).getSequence(), submat);
+        SmithWaterman sm = new SmithWaterman(numberseqs.get(1).getSequence(), numberseqs.get(1).getSequence(), submat);
         sm.printDPMatrix();
       
@@ -201,5 +201,5 @@
      * @return Returns the unique tasks symbol map
      */
-    private SymbolMap<ITaskInstance, ITask> harmonizeEventTaskInstancesModel(RuleApplicationData appData, ArrayList<NumberSequence> numberseqs) {
+    private SymbolMap<ITaskInstance, ITask> harmonizeEventTaskInstancesModel(RuleApplicationData appData) {
         Console.traceln(Level.INFO, "harmonizing task model of event task instances");
         appData.getStopWatch().start("harmonizing event tasks");
