if (previous.getFilter().getWorkList().length>1) {
if (previous.getFilter().isTwoStage()) {
    private int calculateRemaining()     {	//the number of times this filter fires in the initialization	//schedule	int initFire = initMult;	//for now assume it is a filter trace node	FilterTraceNode previous = (FilterTraceNode)traceNode.getPrevious();	//if this is not a twostage, fake it by adding to initFire,	//so we always think the preWork is called	//if (!(filter instanceof SIRTwoStageFilter))	if(filter.getWorkList().length>1)	    initFire++;		//the number of items produced by the upstream filter in	//initialization	int upStreamItems = 0;		if (previous != null) {	    //calculate upstream items received during init  SPLITTER?	    upStreamItems = previous.getFilter().getPushInt() * 		previous.getInitMult();	    //if (previous.getFilter() instanceof SIRTwoStageFilter) {	    if (previous.getFilter().getWorkList().length>1) {		/*upStreamItems -= ((SIRTwoStageFilter)previous.getFilter()).getPushInt();		  upStreamItems += ((SIRTwoStageFilter)previous.getFilter()).getInitPush();*/		upStreamItems -= previous.getFilter().getPushInt();		upStreamItems += previous.getFilter().getInitPush();	    }	}		//see my thesis for an explanation of this calculation	if (initFire  - 1 > 0) {	    bottomPeek = Math.max(0, 				  peek - (prePeek - prePop));	}	else	    bottomPeek = 0;		remaining = upStreamItems -	    (prePeek + 	     bottomPeek + 	     Math.max((initFire - 2), 0) * pop);		return remaining;    }