package hep.aida.ref.tuple; import hep.aida.ITuple; /** * * @author The FreeHEP team @ SLAC */ public class Filter implements hep.aida.IFilter { private int rowToProcess; private int startingRow; private boolean useRows; private JELExpression jelExpression; private ITuple tuple; /** * Default contructor. * @param expression The expression to evaluate on the tuple. * */ public Filter( String expression ) { this.jelExpression = new JELExpression(expression); this.rowToProcess = -1; this.startingRow = -1; useRows = false; } public Filter( String expression, int rowToProcess) { this.jelExpression = new JELExpression(expression); if (rowToProcess<0) throw new IllegalArgumentException("Row parameter can not be negative: rowToProcess="+rowToProcess); this.rowToProcess = rowToProcess; this.startingRow = 0; useRows = false; } public Filter( String expression, int rowToProcess, int startingRow ) { this.jelExpression = new JELExpression(expression); if (rowToProcess<0 || startingRow<0) throw new IllegalArgumentException("Row parameters can not be negative: rowToProcess="+ rowToProcess+", startingRow="+startingRow); this.rowToProcess = rowToProcess; this.startingRow = startingRow; useRows = false; } public String expression() { return jelExpression.expression(); } public void initialize( ITuple tuple ) { this.tuple = tuple; if (tuple instanceof hep.aida.ref.tuple.Tuple) useRows = true; else useRows = false; if (rowToProcess<0 && startingRow<0) useRows = false; jelExpression.compile(Boolean.TYPE,tuple); } public boolean accept() { if (useRows && startingRow>((Tuple) tuple).getRow()) return false; if (useRows && (startingRow+rowToProcess)<=((Tuple) tuple).getRow()) return false; return jelExpression.evaluateBoolean(); } }