steadySchedules = (new WorkBasedSimulator(top, false)).go(steadyExecutionCounts, counters, null);
steadySchedules = (new WorkBasedSimulator(top, estimates, false)). go(steadyExecutionCounts, counters, null);
    public void simulate(FlatNode top)     {	System.out.println("WorkBasedSimulator Running...");		initJoinerCode = new HashMap();        steadyJoinerCode = new HashMap();	//generate the joiner schedule	JoinerSimulator.createJoinerSchedules(top);		SimulationCounter counters = 	    new SimulationCounter(JoinerSimulator.schedules);			//create copies of the executionCounts	HashMap initExecutionCounts = (HashMap)RawBackend.initExecutionCounts.clone();	HashMap steadyExecutionCounts = (HashMap)RawBackend.steadyExecutionCounts.clone();	joinerCode = initJoinerCode;		//System.out.println("\n\nInit Execution Counts");	//RawBackend.printCounts(RawBackend.initExecutionCounts);		//the init simulation stays the same, based on a furthest downstream will fire	//one will notice all of the if (initSimulation) cases in the functions	initSchedules = (new WorkBasedSimulator(top, true)).goInit(initExecutionCounts, counters, null);	testExecutionCounts(initExecutionCounts);	System.out.println("End of init simulation");		//System.out.println("\n\nSteady Execution Counts");	//RawBackend.printCounts(RawBackend.steadyExecutionCounts);	//reset the necessary counters in the simulation, such as the 	//execution counts	counters.resetBuffers();	//now run the simulator based on the work estimation	joinerCode = steadyJoinerCode;	steadySchedules = (new WorkBasedSimulator(top, false)).go(steadyExecutionCounts, counters, null);	testExecutionCounts(steadyExecutionCounts);	System.out.println("End of steady-state simulation");    }