2.17.2: 2011-06-17

net.sf.basedb.util.jep
Class ChannelFunction

java.lang.Object
  extended by net.sf.basedb.util.jep.ChannelFunction
All Implemented Interfaces:
JepExpressionFunction, JepFunction, org.nfunk.jep.function.PostfixMathCommandI

public class ChannelFunction
extends Object
implements JepExpressionFunction

A JEP function class that adds a ch(int) function to a JEP expression parser. The function will look up the intensity value for the given channel. For example: ch(1) / ch(2)

Note! If the current bioassay set has stored transformed intensity values, the values are un-transformed before returned by the this function. Use RawChannelFunction if you need the raw values exactly as they are stored in the database.

To be able to use this function it must be registered with the JEP parser and, before the expression is evaluated, a SqlResult object must be set. For example we can evaluate an expression for every position in a bioassay:

DbControl dc = ...
BioAssay assay = ...
String expression = "ch(1) / ch(2)";
ChannelFunction ch = new ChannelFunction({3, 4});
JEP jep = JepUtil.newJep(expression, ch);
DynamicResultIterator result = 
   assay.getSpotData().iterate(dc);
while (result.hasNext())
{
   ch.setSqlResult(result.next());
   double value = jep.getValue();
   // Do something with the value
}
result.close();

Version:
2.0
Author:
Nicklas
See Also:
Jep, BioAssaySetUtil.createJepExpression(DbControl, String, DynamicQuery)
Last modified
$Date: 2010-04-20 10:02:16 +0200 (Tue, 20 Apr 2010) $

Field Summary
private  int[] channelToIndex
           
private  int numParameters
           
private  SqlResult result
           
private  IntensityTransform transform
           
 
Constructor Summary
ChannelFunction()
          Create a new instance of this function.
ChannelFunction(int[] channelToIndex)
          Deprecated. In 2.12. Use ChannelFunction(int[], IntensityTransform) instead. Using this constructor will disable the untransformation of transformed values when JEP dynamic evalution is used.
ChannelFunction(int[] channelToIndex, IntensityTransform transform)
          Create a new instance of this function which can be used to dynamically evaluate expressions.
 
Method Summary
 Object channel(int channel)
          Get the value of the specified channel of the current sql result.
 boolean checkNumberOfParameters(int n)
           
 String getFunctionName()
          Get the name of this function.
 int getNumberOfParameters()
           
 void run(Stack stack)
           
 void setCurNumberOfParameters(int n)
           
 void setSqlResult(SqlResult result)
          Set a new SqlResult object that will be used the next time the JEP expression is evaluated.
 Expression toExpression(Node node)
          Use the Dynamic.column(VirtualColumn) method to create an expression referencing a channel intensity.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

channelToIndex

private int[] channelToIndex

transform

private IntensityTransform transform

result

private SqlResult result

numParameters

private int numParameters
Constructor Detail

ChannelFunction

public ChannelFunction()
Create a new instance of this function. The new instance cannot be used to dynamically evaluate expressions. It should only be used for converting JEP formulas to Expression:s.

See Also:
Jep.formulaToExpression(String, JepFunction[])

ChannelFunction

public ChannelFunction(int[] channelToIndex)
Deprecated. In 2.12. Use ChannelFunction(int[], IntensityTransform) instead. Using this constructor will disable the untransformation of transformed values when JEP dynamic evalution is used.


ChannelFunction

public ChannelFunction(int[] channelToIndex,
                       IntensityTransform transform)
Create a new instance of this function which can be used to dynamically evaluate expressions.

Parameters:
channelToIndex - An array that maps channel numbers to column indexes in the SqlResult, array position 0 maps the index of channel number 1, etc.
See Also:
setSqlResult(SqlResult)
Method Detail

getFunctionName

public String getFunctionName()
Description copied from interface: JepFunction
Get the name of this function. It is used when registering the function with a JEP parser.

Specified by:
getFunctionName in interface JepFunction
Returns:
The string "ch"
See Also:
JEP.addFunction(String, PostfixMathCommandI)

toExpression

public Expression toExpression(Node node)
Use the Dynamic.column(VirtualColumn) method to create an expression referencing a channel intensity.

Specified by:
toExpression in interface JepExpressionFunction
Parameters:
node - The node representing this function
Returns:
An Expression object

getNumberOfParameters

public int getNumberOfParameters()
Specified by:
getNumberOfParameters in interface org.nfunk.jep.function.PostfixMathCommandI
Returns:
Always 1

setCurNumberOfParameters

public void setCurNumberOfParameters(int n)
Specified by:
setCurNumberOfParameters in interface org.nfunk.jep.function.PostfixMathCommandI

checkNumberOfParameters

public boolean checkNumberOfParameters(int n)
Specified by:
checkNumberOfParameters in interface org.nfunk.jep.function.PostfixMathCommandI

run

public void run(Stack stack)
         throws ParseException
Specified by:
run in interface org.nfunk.jep.function.PostfixMathCommandI
Throws:
ParseException

setSqlResult

public void setSqlResult(SqlResult result)
Set a new SqlResult object that will be used the next time the JEP expression is evaluated.

Parameters:
result - The result object

channel

public Object channel(int channel)
               throws ParseException
Get the value of the specified channel of the current sql result.

Parameters:
channel - The channel number
Throws:
ParseException - Either if it's an invalid channel number or if no result object has been specified.

2.17.2: 2011-06-17