if (!Layout.joiners.contains(node)) return false;
    private boolean canFire(FlatNode node, HashMap executionCounts, 			    SimulationCounter counters)     {	//the only thing that can fire is a filter	if (node.contents instanceof SIRFilter) {	    //check if this node has fired the number of times given by	    //the schedule	    	    //System.out.println("Checking execution count: " + 	    //Namer.getName(node.contents));	    	    Integer count = (Integer)executionCounts.get(node);	    if (count == null)		return false;	    if (count.intValue() == 0)		return false;	    	    //on the first execution we must consume peek items	    //counters.fired tells us if we have fired already	    int requirement;	    if (!counters.hasFired(node))		requirement = ((SIRFilter)node.contents).getPeekInt();	    else		requirement = ((SIRFilter)node.contents).getPopInt();	    	    //System.out.println("canFire: " + Namer.getName(node.contents) +	    //		       " req: " + requirement + " buf: " + 	    //		       counters.getBufferCount(node));	    	    if (counters.getBufferCount(node) >= requirement) {		return true;	    }	    else		return false;	}	else if (node.contents instanceof SIRJoiner) {	    //determine if a joiner can fire	    //if the buffer associated with its current 	    //input has an item in it	    if (counters.getJoinerBufferCount(node, counters.					      getJoinerBuffer(node)) > 0)		return true;	    else		return false;	}	else 	    return false;    }