Index: /trunk/autoquest-ui-core/src/main/java/de/ugoe/cs/autoquest/commands/usability/CMDtaskTreeStatistics.java
===================================================================
--- /trunk/autoquest-ui-core/src/main/java/de/ugoe/cs/autoquest/commands/usability/CMDtaskTreeStatistics.java	(revision 2031)
+++ /trunk/autoquest-ui-core/src/main/java/de/ugoe/cs/autoquest/commands/usability/CMDtaskTreeStatistics.java	(revision 2032)
@@ -15,7 +15,11 @@
 package de.ugoe.cs.autoquest.commands.usability;
 
+import java.text.DecimalFormat;
 import java.util.HashSet;
+import java.util.LinkedList;
 import java.util.List;
 import java.util.Set;
+
+import org.apache.commons.math3.stat.descriptive.DescriptiveStatistics;
 
 import de.ugoe.cs.autoquest.CommandHelpers;
@@ -30,5 +34,6 @@
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskInstance;
 import de.ugoe.cs.autoquest.tasktrees.treeifc.ITaskModel;
-import de.ugoe.cs.autoquest.tasktrees.treeifc.TaskMetric;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.IUserSession;
+import de.ugoe.cs.autoquest.tasktrees.treeifc.TaskTreeUtils;
 import de.ugoe.cs.util.console.Command;
 import de.ugoe.cs.util.console.Console;
@@ -82,7 +87,4 @@
         ITaskModel taskModel = (ITaskModel) dataObject;
 
-        int taskCount = 0;
-        int allTasks = taskModel.getTasks().size();
-        Set<IEventTaskInstance> coveredEvents = new HashSet<IEventTaskInstance>();
         int allEvents = 0;
         
@@ -92,14 +94,7 @@
         int noOfSelections = 0;
         int noOfOptionals = 0;
+        Set<IEventTaskInstance> coveredEvents = new HashSet<IEventTaskInstance>();
         
         for (ITask task : taskModel.getTasks()) {
-            int covQuant =
-                taskModel.getTaskInfo(task).getMeasureValue(TaskMetric.EVENT_COVERAGE_QUANTILE);
-            
-            if (covQuant >= 950) {
-                taskCount++;
-                getCoveredEvents(task, coveredEvents);
-            }
-            
             if (task instanceof IEventTask) {
                 noOfEventTasks++;
@@ -108,4 +103,5 @@
             else if (task instanceof ISequence) {
                 noOfSequences++;
+                getCoveredEvents(task, coveredEvents);
             }
             else if (task instanceof IIteration) {
@@ -120,10 +116,67 @@
         }
         
-        Console.println(noOfEventTasks + " eventTasks, " + noOfSequences + " sequences, " +
-                        noOfIterations + " iterations, " + noOfSelections + " selections, " +
-                        noOfOptionals + " optionals");
-        Console.println(taskCount + " of " + allTasks + " tasks (" + (taskCount * 100 / allTasks) +
-                        "%) covered " + coveredEvents.size() + " of " + allEvents +
-                        " recorded events (" + (coveredEvents.size() * 100 / allEvents) + "%)");
+        DescriptiveStatistics stats = new DescriptiveStatistics();
+        
+        for (IUserSession session : taskModel.getUserSessions()) {
+            if (session.size() > 0) {
+                final List<IEventTaskInstance> events = new LinkedList<>();
+                
+                for (ITaskInstance instance : session) {
+                    instance.accept(new DefaultTaskInstanceTraversingVisitor() {
+                        @Override
+                        public void visit(IEventTaskInstance eventTaskInstance) {
+                            events.add(eventTaskInstance);
+                        }
+                    });
+                }
+                
+                stats.addValue(events.size());
+            }
+        }
+        
+        Console.println(stats.getN() + " sessions");
+        Console.println("average session length " + stats.getMean() + " (std dev " +
+                        stats.getStandardDeviation() + ")");
+        Console.println(allEvents + " events");
+        
+        Console.println(noOfEventTasks + " eventTasks");
+        Console.println(noOfSequences + " sequences");
+        Console.println(noOfIterations + " iterations");
+        Console.println(noOfSelections + " selections");
+        Console.println(noOfOptionals + " optionals");
+        
+        Set<ISequence> mostProminent =
+            TaskTreeUtils.getMostProminentTasks(taskModel, taskModel.getTasks());
+        
+        Set<IEventTaskInstance> mpCoveredEvents = new HashSet<IEventTaskInstance>();
+       
+        for (ITask task : mostProminent) {
+            getCoveredEvents(task, mpCoveredEvents);
+        }
+        
+        Console.println(noOfSequences + " sequences cover " +
+                        coveredEvents.size() + " of " + allEvents + " recorded events (" +
+                        formatPercent(coveredEvents.size(), allEvents) + ")");
+        
+        Console.println(mostProminent.size() + " of " + noOfSequences + " sequences (" +
+                        formatPercent(mostProminent.size(), noOfSequences) + ") cover " +
+                        mpCoveredEvents.size() + " of " + allEvents + " recorded events (" +
+                        formatPercent(mpCoveredEvents.size(), allEvents) + ")");
+        
+        Console.println("CSV: " + tasktreeName + ";" + noOfEventTasks + ";" + noOfSequences + ";" +
+                        noOfIterations + ";" + noOfSelections + ";" + noOfOptionals + ";" +
+                        allEvents + ";" + coveredEvents.size() + ";" +
+                        formatPercent(coveredEvents.size(), allEvents) + ";" +
+                        mostProminent.size() + ";" +
+                        formatPercent(mostProminent.size(), noOfSequences) + ";" +
+                        mpCoveredEvents.size() + ";" +
+                        formatPercent(mpCoveredEvents.size(), allEvents));
+    }
+
+    /**
+     * convenience method to format a percentage
+     */
+    private String formatPercent(int ratio, int full) {
+        return new DecimalFormat("#,##0.0%").format(((double) ratio) / full);
     }
 
