Index: /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java
===================================================================
--- /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1717)
+++ /branches/autoquest-core-tasktrees-alignment/src/main/java/de/ugoe/cs/autoquest/tasktrees/temporalrelation/SequenceForTaskDetectionRuleAlignment.java	(revision 1718)
@@ -15,4 +15,5 @@
 package de.ugoe.cs.autoquest.tasktrees.temporalrelation;
 
+import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileOutputStream;
@@ -77,8 +78,4 @@
 	
 	
-	public static int nThreads;
-	public static boolean harmonizeSequences;
-	public static boolean loadSubstutionMatrix;
-	
 
 	private int iteration = 0;
@@ -193,5 +190,10 @@
 	public RuleApplicationResult apply(List<IUserSession> sessions) {
 		RuleApplicationData appData = new RuleApplicationData(sessions);
-		if(SequenceForTaskDetectionRuleAlignment.harmonizeSequences) {
+		File harmonized = new File("harmonized.dat");
+		if(harmonized.exists() && !harmonized.isDirectory()) { 
+			Console.traceln(Level.INFO,"loading harmonized sessions from file");
+			appData = loadAppData("harmonized");
+		}
+		else {
 			//appData.getStopWatch().start("harmonization");
 			harmonizeEventTaskInstancesModel(appData);
@@ -202,10 +204,7 @@
 			saveAppData("harmonized");
 		}
-		else {
-			Console.traceln(Level.INFO,"loading harmonized sessions from file");
-			appData = loadAppData("harmonized");
-		}
-		System.out.println(SequenceForTaskDetectionRuleAlignment.loadSubstutionMatrix);
-		if(!SequenceForTaskDetectionRuleAlignment.loadSubstutionMatrix) {	
+		
+		File substitution = new File("substitution.dat");
+		if(!(substitution.exists() && !substitution.isDirectory())) { 
 			Console.traceln(Level.INFO, "generating substitution matrix from " + appData.getUniqueTasks().size() + " unique tasks");
 			appData.getStopWatch().start("substitution matrix");
@@ -651,33 +650,50 @@
 		// Generate pairwise alignments
 		int size = appData.getNumberSequences().size();
-		Console.traceln(Level.INFO, "generating pairwise alignments");
-		LinkedList<Match> matchseqs = new LinkedList<Match>();
+		Console.traceln(Level.INFO, "generating pairwise alignments from " + size + " sessions");
 		int count = 0;
 		
-		for (int i = 0; i < appData.getNumberSequences().size(); i++) {
-			NumberSequence ns1 = appData.getNumberSequences().get(i);
-			count++;
-	//		if((count%(size/100)==0)) {
-	//			Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%");
-	//		}
-			for (int j = 0; j < appData.getNumberSequences().size(); j++) {
-				NumberSequence ns2 = appData.getNumberSequences().get(j);
-				if (i != j) {
-					//Console.traceln(Level.FINEST,"Aligning sequence " + i + " with sequence " + j);
-					AlignmentAlgorithm aa = AlignmentAlgorithmFactory.create();
-					aa.align(ns1, ns2, appData.getSubmat(),9);
-					matchseqs.addAll(aa.getMatches());
-				}
-			}
-		}
-		GlobalDataContainer.getInstance().addData("aligned", matchseqs);
-		saveAppData("aligned");
+		//Checking if i have an already calculated file result of this action in the working directory 
+		File aligned = new File("aligned" + iteration + ".dat");
+		if(!(aligned.exists() && !aligned.isDirectory())) {
+			appData.matchseqs = new LinkedList<Match>();
+			System.out.println(appData.matchseqs);
+			for (int i = 0; i < appData.getNumberSequences().size(); i++) {
+				NumberSequence ns1 = appData.getNumberSequences().get(i);
+				count++;
+				
+				//Print out the progress
+				if(size>100) {
+					if((count%(size/100)==0)) {	
+						Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%");
+					}
+				}
+				else {
+					Console.traceln(Level.INFO,(Math.round((float) count/size*100))+ "%");
+				}
+				for (int j = 0; j < appData.getNumberSequences().size(); j++) {
+					NumberSequence ns2 = appData.getNumberSequences().get(j);
+					if (i != j) {
+						//Console.traceln(Level.FINEST,"Aligning sequence " + i + " with sequence " + j);
+						AlignmentAlgorithm aa = AlignmentAlgorithmFactory.create();
+						aa.align(ns1, ns2, appData.getSubmat(),9);
+						appData.getMatchseqs().addAll(aa.getMatches());
+					}
+				}
+			}
+			GlobalDataContainer.getInstance().addData("aligned" + iteration, appData);
+			saveAppData("aligned" + iteration);
+		}
+		else {
+			Console.traceln(Level.INFO,"loading matches from file");
+			appData = loadAppData("aligned"+iteration);
+		}
+
 
 		Console.traceln(Level.INFO, "searching for patterns occuring most");
 
 		// search each match in every other sequence
-		for (Iterator<Match> it = matchseqs.iterator(); it.hasNext();) {
+		for (Iterator<Match> it = appData.getMatchseqs().iterator(); it.hasNext();) {
 			Match pattern = it.next();
-
+			
 			// Skip sequences with more 0 events (scrolls) than other events.
 			// Both of the pattern sequences are equally long, so the zero
@@ -711,5 +727,5 @@
 			}
 		};
-		Collections.sort(matchseqs, comparator);
+		Collections.sort(appData.getMatchseqs(), comparator);
 		appData.getStopWatch().stop("detecting tasks");
 
@@ -717,23 +733,23 @@
 		HashMap<Integer, List<MatchOccurence>> replacedOccurences = new HashMap<Integer, List<MatchOccurence>>();
 		// Replace matches in the sessions
-		for (int i = 0; i < matchseqs.size(); i++) {
+		for (int i = 0; i < appData.getMatchseqs().size(); i++) {
+		
 			// Every pattern consists of 2 sequences, therefore the minimum
 			// occurrences here is 2.
 			// We just need the sequences also occurring in other sequences as
 			// well
-			if (matchseqs.get(i).occurenceCount() > 2) {
-
+			if (appData.getMatchseqs().get(i).occurenceCount() > 2) {
 				appData.detectedAndReplacedTasks = true;
-				ISequence task = matchAsSequence(appData, matchseqs.get(i));
-				invalidOccurence: for (Iterator<MatchOccurence> it = matchseqs
+				ISequence task = matchAsSequence(appData, appData.getMatchseqs().get(i));
+				invalidOccurence: for (Iterator<MatchOccurence> it = appData.getMatchseqs()
 						.get(i).getOccurences().iterator(); it.hasNext();) {
 					MatchOccurence oc = it.next();
 					
 					/*
-					if (iteration > 1) {
+					if (iteration > 0) {
 					 
 					System.out.println("Trying to replace sequence: ");
-					matchseqs.get(i).getFirstSequence().printSequence();
-					matchseqs.get(i).getSecondSequence().printSequence();
+					appData.getMatchseqs().get(i).getFirstSequence().printSequence();
+					appData.getMatchseqs().get(i).getSecondSequence().printSequence();
 					System.out.println(" in session number: "
 							+ (oc.getSequenceId() + 1) + " at position "
@@ -808,5 +824,5 @@
 			}
 		}
-		matchseqs = null;
+		appData.setMatchseqs(null);
 		appData.getStopWatch().stop("replacing tasks");
 	}
@@ -828,6 +844,7 @@
 		
 		ObjectDistanceSubstitionMatrix submat; 
-
-	
+		
+		LinkedList<Match> matchseqs;
+		
 		private ArrayList<NumberSequence> numberseqs;
 
@@ -868,4 +885,12 @@
 		}
 
+		public LinkedList<Match> getMatchseqs() {
+			return matchseqs;
+		}
+
+		public void setMatchseqs(LinkedList<Match> matchseqs) {
+			this.matchseqs = matchseqs;
+		}
+
 		private ObjectDistanceSubstitionMatrix getSubmat() {
 			return submat;
@@ -907,4 +932,5 @@
 
 		
+		
 		/**
          *
