Index: /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDcalcCoverage.java
===================================================================
--- /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDcalcCoverage.java	(revision 126)
+++ /trunk/EventBenchConsole/src/de/ugoe/cs/eventbench/commands/CMDcalcCoverage.java	(revision 127)
@@ -5,4 +5,5 @@
 import java.util.List;
 
+import de.ugoe.cs.eventbench.coverage.CoverageCalculatorObserved;
 import de.ugoe.cs.eventbench.coverage.CoverageCalculatorProcess;
 import de.ugoe.cs.eventbench.data.Event;
@@ -17,8 +18,9 @@
 	@Override
 	public void run(List<Object> parameters) {
-		String modelname;
+		String modelname;		
 		String[] sequenceNames;
 		int minLength;
 		int maxLength;
+		String observedName = "sequences";
 		try {
 			modelname = (String) parameters.get(0);
@@ -26,4 +28,7 @@
 			minLength = Integer.parseInt((String) parameters.get(2));
 			maxLength = Integer.parseInt((String) parameters.get(3));
+			if( parameters.size()==5 ) {
+				observedName = (String) parameters.get(1);
+			}
 		}
 		catch (Exception e) {
@@ -32,40 +37,74 @@
 		
 		IStochasticProcess process = null; 
+		Collection<List<? extends Event<?>>> observedSequences = null;
 		Collection<List<? extends Event<?>>> sequences = null;
 		Object dataObjectProcess = GlobalDataContainer.getInstance().getData(modelname);
+		Object dataObjectObserved = GlobalDataContainer.getInstance().getData(observedName);
 		if( dataObjectProcess==null ) {
-			Console.println("Model " + modelname + " not found in storage.");
+			Console.printerrln("Model " + modelname + " not found in storage.");
+			return;
 		}
-		else if( !(dataObjectProcess instanceof IStochasticProcess) ) {
-			Console.println("Object " + modelname + " not of type MarkovModel!");
-		} else {
-			Console.print("seqName");
+		if( !(dataObjectProcess instanceof IStochasticProcess) ) {
+			Console.printerrln("Object " + modelname + " not of type MarkovModel!");
+			return;
+		}
+		if( dataObjectObserved==null ) {
+			Console.printerrln("Observed sequences not found in storage.");
+			return;
+		}
+		if( !(dataObjectObserved instanceof Collection<?>) ) {
+			// weak instance check!
+			Console.printerrln("Object " + observedName + " not a Collection!");
+			return;
+		}
+		process = (IStochasticProcess) dataObjectProcess;
+		observedSequences = (Collection<List<? extends Event<?>>>) dataObjectObserved;
+		
+		
+		Console.print("seqName");
+		for( int length=minLength ; length<=maxLength ; length++) {
+			Console.print(";numObs_" + length);
+			Console.print(";numCov_" + length);
+			Console.print(";numNew_" + length);
+			Console.print(";numPos_" + length);
+			Console.print(";all_" + length);
+			Console.print(";pos_" + length);
+			Console.print(";poswei_" + length);
+			Console.print(";obs_" + length);
+			Console.print(";obswei_" + length);
+			Console.print(";new_" + length);
+			Console.print(";newpos_" + length);
+			Console.print(";newposwei_" + length);
+		}
+		Console.println("");
+		for( String sequenceName : sequenceNames ) {
+			Object dataObjectSequences = GlobalDataContainer.getInstance().getData(sequenceName);
+			if( dataObjectSequences==null ) {
+				Console.println("Sequences " + sequenceName + " not found in storage.");
+			}
+			else if( !(dataObjectSequences instanceof Collection<?>) ) {
+				// cannot really perform type check at runtime! this is an approximative substitute
+				Console.printerrln("Object " + sequenceName + "not of type Collection<?>!");
+				return;
+			}
+			sequences = (Collection<List<? extends Event<?>>>) dataObjectSequences;
+			Console.print(sequenceName);
 			for( int length=minLength ; length<=maxLength ; length++) {
-				Console.print(";all_" + length);
-				Console.print(";pos_" + length);
-				Console.print(";wei_" + length);
+				CoverageCalculatorProcess covCalcProc = new CoverageCalculatorProcess(process, sequences, length);
+				CoverageCalculatorObserved covCalcObs = new CoverageCalculatorObserved(observedSequences, sequences, length);
+				Console.print(";" + covCalcObs.getNumObserved());
+				Console.print(";" + covCalcObs.getNumCovered());
+				Console.print(";" + covCalcObs.getNumNew());
+				Console.print(";" + covCalcProc.getNumPossible());
+				Console.print(";" + covCalcProc.getCoverageAllNoWeight());
+				Console.print(";" + covCalcProc.getCoveragePossibleNoWeight());
+				Console.print(";" + covCalcProc.getCoveragePossibleWeight());
+				Console.print(";" + covCalcObs.getCoverageObserved());
+				Console.print(";" + covCalcObs.getCoverageObservedWeigth(process));
+				Console.print(";" + covCalcObs.getNewPercentage());
+				Console.print(";" + covCalcObs.getCoveragePossibleNew(process));
+				Console.print(";" + covCalcObs.getCoveragePossibleNewWeight(process));
 			}
 			Console.println("");
-			for( String sequenceName : sequenceNames ) {
-				Object dataObjectSequences = GlobalDataContainer.getInstance().getData(sequenceName);
-				if( dataObjectSequences==null ) {
-					Console.println("Sequences " + sequenceName + " not found in storage.");
-				}
-				else if( !(dataObjectSequences instanceof Collection<?>) ) {
-					// cannot really perform type check at runtime! this is an approximative substitute
-					Console.println("Object " + sequenceName + "not of type Collection<?>!");				
-				}
-				
-				process = (IStochasticProcess) dataObjectProcess;
-				sequences = (Collection<List<? extends Event<?>>>) dataObjectSequences;
-				Console.print(sequenceName);
-				for( int length=minLength ; length<=maxLength ; length++) {
-					CoverageCalculatorProcess covCalc = new CoverageCalculatorProcess(process, sequences, length);
-					Console.print(";" + covCalc.getCoverageAllNoWeight());
-					Console.print(";" + covCalc.getCoveragePossibleNoWeight());
-					Console.print(";" + covCalc.getCoveragePossibleWeight());
-				}
-				Console.println("");
-			}
 		}
 	}
