private void populateView(DefaultMutableTreeNode root) {
		//root.removeAllChildren();
		//while (root.getChildCount() > 0) {
			//treeModel.removeNodeFromParent((MutableTreeNode)root.getChildAt(0));
		//}
		System.out.println("Computing selection range");
		SampleLog filter = SampleFilter.filter(log, selectionStart, selectionEnd);
		List<Sample> samples = filter.samples;
		System.out.println("Selecting samples: " + samples.size());
		selectedSamples = samples.size();
		for (Sample sample : samples) {
			
			List<Marker> markers = sample.getMarkers();
			for (int i = 0; i < markers.size() && i < 6; i++) {
				markerListModel.addElement(markers.get(i));
			}
			
			DefaultMutableTreeNode currNode = root;
			List<String> stack = sample.getStack();
			for (String stackName : stack) {
				StackNode currStackNode = null;
				// Find the stack in the current node, if its not there insert it
				Enumeration children = currNode.children();
				DefaultMutableTreeNode node;
				while (children.hasMoreElements()) {
					node = (DefaultMutableTreeNode) children.nextElement();
					StackNode childNode = (StackNode) node.getUserObject();
					if( childNode.getName().equals(stackName) ) {
						currStackNode = childNode;
						currNode = node;
						childNode.addCount();
						break;
					}
				}
				if( currStackNode == null ) {
					currStackNode = new StackNode(log, stack, stackName);
					node = new DefaultMutableTreeNode(currStackNode);
					currNode.add(node);
					currNode = node;
				}
			}
			
		}
		
		// Sort the tree
		System.out.println("Sorting...");
		boolean keepSorting = true;
		while( keepSorting ) {
			keepSorting = sort(root);
		}
	}