if (!(isLinear == dest.isLinear()))
if (isLinear||dest.isLinear())
    private boolean continueTrace(UnflatFilter unflatFilter, boolean isLinear, 				  int bottleNeckWork, int newTotalFilters)     {	//if this is not connected to anything or 	//it is connected to more than one filter or one filter it is 	//connected to is joining multiple filters	if (unflatFilter.out != null && unflatFilter.out.length == 1 && 	    unflatFilter.out[0].length == 1 && unflatFilter.out[0][0].dest.in.length < 2) {	    //this is the only dest	    UnflatFilter dest = unflatFilter.out[0][0].dest;	    //put file readers and writers in there own trace, so only keep going for 	    //none-predefined nodes	    if (unflatFilter.filter instanceof SIRPredefinedFilter)		return false;	    //don't continue if the next filter is predefined	    if (dest.filter instanceof SIRPredefinedFilter)		return false;	    //start a new trace if we switch from linear to non-linear and vice-versa	    if (!(isLinear == dest.isLinear()))		return false;	    //check the size of the trace, the length must be less than number of tiles + 1 	    if (newTotalFilters > rawChip.getTotalTiles())		return false;	    //check the work estimation	    int destEst = getWorkEstimate(dest);	    double ratio = (bottleNeckWork > destEst) ? (double)destEst / (double)bottleNeckWork :		(double) bottleNeckWork / (double) destEst;	    ratio = Math.abs(ratio);	    //System.out.println("bottleNeckWork = " + bottleNeckWork + " / " + 	    //		       "next = " + destEst + " = " + ratio);	    if (ratio < TRASHOLD) 		return false;	    	    //everything passed 	    return true;	}		return false;    }