question: public void apply ( final double [ ] src , int srcPos , double [ ] target , int targetPos , int off , int len ) { if ( len < 0 || off < 0 || off + len > window . length ) throw new IllegalArgumentException ( "Requested offset " + off + " or length " + len + " does not fit into window length " + window . length ) ; if ( target . length < targetPos + len ) throw new IllegalArgumentException ( "Target array cannot hold enough data" ) ; int start , end ; start = srcPos ; if ( start < 0 ) { start = 0 ; Arrays . fill ( target , targetPos , targetPos + ( start - srcPos ) , 0 ) ; } end = srcPos + len ; if ( end > src . length ) { end = src . length ; Arrays . fill ( target , targetPos + end - srcPos , targetPos + len , 0 ) ; } for ( int i = start ; i < end ; i ++ ) { target [ targetPos + i - srcPos ] = src [ i ] * window [ off + i - srcPos ] ; } }
target:  Apply a part of this window on the given source data array, at the given position. For example, by setting off to getLength()/2 and len to getLength()/2, only the right half of the window will be applied. This method returns the resulting data in the given target array, at the target position given by targetPos. If src has less than len data points left at srcPos, zeros are added at the end.