System.out.println("StartupCost: " + node + " " + myLag);
    public void calculateWorkStats() {        Trace[] traces = getTraceGraph();        for (int i = 0; i < traces.length; i++) {            int maxWork;            FilterTraceNode maxFilter;            //get the first filter            FilterTraceNode node = traces[i].getHead().getNextFilter();            filterStartupCost.put(node, new Integer(0));            int prevStartupCost = 0;            FilterTraceNode prevNode = node;            //init maxes            maxWork = getFilterWorkSteadyMult(node);            maxFilter = node;                        while (node.getNext().isFilterTrace()) {                node = node.getNext().getAsFilter();                                if (getFilterWorkSteadyMult(node) > maxWork) {                    maxWork = getFilterWorkSteadyMult(node);                    maxFilter = node;                }                                double prevPush =                     node.getPrevious().getAsFilter().getFilter().getPushInt();                double myPop = node.getFilter().getPopInt();                                //how long it will take me to fire the first time                 //after my upstream filter fires                int myLag =                     (int)Math.ceil( myPop / prevPush *                             (double) getWorkEstOneFiring(prevNode));                                                            //record the startup cost                System.out.println("StartupCost: " + node + " " + myLag);                filterStartupCost.put(node, new Integer(myLag));                                //reset the prev node and the prev startup cost...                prevNode = node;                            }            //remember the bottle neck filter            bottleNeckFilter.put(traces[i], maxFilter);            //on to the next trace        }    }