else assert false : "Trace in io[] is not a file trace.";
    public void initialize() {               totalWork = 0;                //create the filter list        filterList = new LinkedList();        Iterator traceNodes =             Util.traceNodeTraversal(partitioner.getTraceGraph());        while (traceNodes.hasNext()) {            TraceNode node = (TraceNode)traceNodes.next();            //add filters to the list of things to assign to tiles,            //but don't add file readers/writers... they will            //"occupy" the tile of their neighbor stream...            if (node.isFilterTrace() &&                     !(node.getAsFilter().isPredefined()))  {                totalWork += partitioner.getFilterWorkSteadyMult(node.getAsFilter());                filterList.add(node);            }        }                fileReaders = new HashSet();        fileWriters = new HashSet();                //set up the file readers and file writers list        //these are filters the read directly from a file        //or write directly to a file (not the file readers and writers themselves).        for (int i = 0; i < partitioner.io.length; i++) {            Trace trace = partitioner.io[i];            if (trace.getHead().isFileOutput()) {                assert trace.getHead().getSourceSet().size() == 1 :                    "We don't support joined file writers yet.";                fileWriters.add(trace.getHead().getSingleEdge().getSrc().getPrevFilter());            }            else if (trace.getTail().isFileInput()) {                assert trace.getTail().getDestSet().size() == 1 :                    "We don't support split file readers right now.";                fileReaders.add(trace.getTail().getSingleEdge().getDest().getNextFilter());            }            else                 assert false : "Trace in io[] is not a file trace.";         }    }