public class ChannelFunction extends Object implements JepExpressionFunction
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();
Jep
,
BioAssaySetUtil.createJepExpression(DbControl, String, DynamicQuery)
Modifier and Type | Field and Description |
---|---|
private int[] |
channelToIndex |
private int |
numParameters |
private SqlResult |
result |
private IntensityTransform |
transform |
Constructor and Description |
---|
ChannelFunction()
Create a new instance of this function.
|
ChannelFunction(int[] channelToIndex,
IntensityTransform transform)
Create a new instance of this function which can be used
to dynamically evaluate expressions.
|
Modifier and Type | Method and Description |
---|---|
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. |
private int[] channelToIndex
private IntensityTransform transform
private SqlResult result
private int numParameters
public ChannelFunction()
Expression
:s.public ChannelFunction(int[] channelToIndex, IntensityTransform transform)
channelToIndex
- An array that maps channel numbers to column indexes in
the SqlResult, array position 0 maps the index of channel number 1, etc.setSqlResult(SqlResult)
public String getFunctionName()
JepFunction
JEP
parser.getFunctionName
in interface JepFunction
JEP.addFunction(String, PostfixMathCommandI)
public Expression toExpression(Node node)
Dynamic.column(VirtualColumn)
method to create an
expression referencing a channel intensity.toExpression
in interface JepExpressionFunction
node
- The node representing this functionExpression
objectpublic int getNumberOfParameters()
getNumberOfParameters
in interface org.nfunk.jep.function.PostfixMathCommandI
public void setCurNumberOfParameters(int n)
setCurNumberOfParameters
in interface org.nfunk.jep.function.PostfixMathCommandI
public boolean checkNumberOfParameters(int n)
checkNumberOfParameters
in interface org.nfunk.jep.function.PostfixMathCommandI
public void run(Stack stack) throws ParseException
run
in interface org.nfunk.jep.function.PostfixMathCommandI
ParseException
public void setSqlResult(SqlResult result)
SqlResult
object that will be used the next time the
JEP expression is evaluated.result
- The result objectpublic Object channel(int channel) throws ParseException
channel
- The channel numberParseException
- Either if it's an invalid channel number or
if no result object has been specified.