else if (traceNode.isOutputTrace()) { if (KjcOptions.magicdram) createMagicDramOutput((OutputTraceNode)traceNode, trace, init, rawChip); } else {  if (KjcOptions.magicdram) createMagicDramInput((InputTraceNode)traceNode, trace, init, rawChip); }
    public static void run(ListIterator traces, RawChip rawChip,			   boolean init)     {	//iterate over the traces in the given order and generate the 	//switch code, the tile code, and the off chip stuff for 	//each TraceNode	Trace trace;		while (traces.hasNext()) {	    trace = (Trace)traces.next();	    //iterate over the TraceNodes	    TraceNode traceNode = trace.getHead();	    while (traceNode != null) {		//do the appropiate code generation		if (traceNode.isFilterTrace()) {		    RawTile tile = rawChip.getTile(((FilterTraceNode)traceNode).getX(), 						   ((FilterTraceNode)traceNode).getY());		    //create the filter info class		    FilterInfo filterInfo = FilterInfo.getFilterInfo((FilterTraceNode)traceNode);		    //switch code for the trace		    //generate switchcode based on the presence of buffering		    		    int mult = (init) ? filterInfo.initMult : filterInfo.steadyMult;		    		    if (filterInfo.isDirect())			createSwitchCode((FilterTraceNode)traceNode, 					 trace, filterInfo, init, false, tile, rawChip, mult);		    else			createSwitchCodeBuffered((FilterTraceNode)traceNode, 				     trace, filterInfo, init, tile, rawChip, mult);		    //generate the compute code for the trace and place it in		    //the tile		    if (init) {			//create the prime pump stage switch code 			//after the initialization switch code			createPrimePumpSwitchCode((FilterTraceNode)traceNode, 				     trace, filterInfo, init, tile, rawChip);			tile.getComputeCode().addTraceInit(filterInfo);		    }		    else			tile.getComputeCode().addTraceSteady(filterInfo);		}		else if (traceNode.isOutputTrace()) {                    if (KjcOptions.magicdram)                        createMagicDramOutput((OutputTraceNode)traceNode,                                              trace, init, rawChip);                }                else {                    //input trace                    if (KjcOptions.magicdram)                        createMagicDramInput((InputTraceNode)traceNode,                                             trace, init, rawChip);                }		//get the next tracenode		traceNode = traceNode.getNext();	    }	}		//generate code need in between init and steady	if (init) 	    EndInitialization(rawChip);	else 	    EndSteadyState(rawChip);    }