Skip to content

Commit 9ed93e9

Browse files
author
mpschr
committed
scaleFunction, LogitFunction, Grouped Log functions, AbsoluteFunction
1 parent 4e19a97 commit 9ed93e9

File tree

17 files changed

+378
-132
lines changed

17 files changed

+378
-132
lines changed

org.gitools.matrix/src/main/java/org/gitools/matrix/transform/LogNFunction.java renamed to org.gitools.matrix/src/main/java/org/gitools/matrix/transform/AbsoluteFunction.java

Lines changed: 8 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -4,27 +4,28 @@
44
import org.gitools.api.matrix.ConfigurableTransformFunction;
55
import org.gitools.api.matrix.IMatrixPosition;
66

7-
public class LogNFunction extends ConfigurableTransformFunction {
7+
public class AbsoluteFunction extends ConfigurableTransformFunction {
88

9-
public LogNFunction() {
10-
super("LogN", "Returns natural Log of any given value");
9+
10+
public AbsoluteFunction() {
11+
super("Absolute value", "Returns positive absolute value");
1112
}
1213

1314
@Override
1415
public Double apply(Double value, IMatrixPosition position) {
1516
if (value != null) {
16-
return Math.log(value);
17+
return Math.abs(value);
1718
}
1819
return null;
1920
}
2021

2122
@Override
22-
public LogNFunction createNew() {
23-
return new LogNFunction();
23+
public AbsoluteFunction createNew() {
24+
return new AbsoluteFunction();
2425
}
2526

2627
@Override
2728
protected void createDefaultParameters() {
28-
2929
}
30+
3031
}

org.gitools.matrix/src/main/java/org/gitools/matrix/transform/FoldChangeFunction.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -29,15 +29,13 @@ public class FoldChangeFunction extends ConfigurableTransformFunction {
2929

3030
private IMatrixLayer aggLayer;
3131
private final static Key<HashMatrix> CACHEKEY = new Key<HashMatrix>() {};
32-
private IMatrix matrix;
3332
private IMatrixLayer newLayer;
3433
private IProgressMonitor monitor;
3534
private HashMatrix data;
3635

3736

38-
public FoldChangeFunction(IMatrix matrix, IMatrixLayer newLayer) {
37+
public FoldChangeFunction(IMatrixLayer newLayer) {
3938
super("Fold-Change");
40-
this.matrix = matrix;
4139
this.newLayer = newLayer;
4240
}
4341

@@ -60,6 +58,8 @@ public void onBeforeIterate(IMatrixIterable<Double> parentIterable) {
6058
super.onBeforeIterate(parentIterable);
6159
monitor = ApplicationContext.getProgressMonitor().subtask();
6260

61+
62+
IMatrix matrix = parentIterable.getPosition().getMatrix();
6363
IMatrixDimension transformDimension = matrix.getDimension(dimensionParameter.getParameterValue());
6464
IMatrixDimension aggDimension = matrix.getDimension(COLUMNS == dimensionParameter.getParameterValue() ? ROWS : COLUMNS);
6565
IAggregator aggregator = aggregatorParameter.getParameterValue();
@@ -98,7 +98,7 @@ private Double getMedian(String identifier) {
9898

9999
@Override
100100
public FoldChangeFunction createNew() {
101-
return new FoldChangeFunction(matrix, newLayer);
101+
return new FoldChangeFunction(newLayer);
102102
}
103103

104104
@Override

org.gitools.matrix/src/main/java/org/gitools/matrix/transform/Log10Function.java

Lines changed: 0 additions & 30 deletions
This file was deleted.
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
package org.gitools.matrix.transform;
2+
3+
4+
import org.gitools.api.matrix.ConfigurableTransformFunction;
5+
import org.gitools.api.matrix.IMatrixPosition;
6+
import org.gitools.matrix.transform.parameters.DoubleParameter;
7+
import org.gitools.matrix.transform.parameters.LogParameter;
8+
9+
public class LogFunction extends ConfigurableTransformFunction {
10+
11+
public static final String LOG_BASE = "Log base";
12+
public static final String CUSTOM_BASE = "Custom base";
13+
private LogParameter logParameter;
14+
private DoubleParameter customBaseParameter;
15+
16+
public LogFunction() {
17+
super("Log", "Returns Log of given value and chosen base");
18+
}
19+
20+
@Override
21+
public LogFunction createNew() {
22+
return new LogFunction();
23+
}
24+
25+
@Override
26+
public Double apply(Double value, IMatrixPosition position) {
27+
if (value != null) {
28+
LogParameter.LogEnum parameterValue = logParameter.getParameterValue();
29+
if (parameterValue.equals(LogParameter.LogEnum.baseN)) {
30+
return Math.log(value);
31+
} else if (parameterValue.equals(LogParameter.LogEnum.base10)) {
32+
return Math.log10(value);
33+
} else if (parameterValue.equals(LogParameter.LogEnum.base2)) {
34+
return Math.log(value) / Math.log(2.0);
35+
} else if (parameterValue.equals(LogParameter.LogEnum.custom)) {
36+
return Math.log(value) / Math.log(customBaseParameter.getParameterValue());
37+
} else {
38+
return null;
39+
}
40+
}
41+
return null;
42+
}
43+
44+
@Override
45+
protected void createDefaultParameters() {
46+
logParameter = new LogParameter();
47+
logParameter.setChoices(LogParameter.LogEnum.values());
48+
logParameter.setDescription("Choose base for the Log function");
49+
addParameter(LOG_BASE, logParameter);
50+
51+
customBaseParameter = new DoubleParameter();
52+
customBaseParameter.setParameterValue(5.0);
53+
customBaseParameter.setDescription("Define a custom base");
54+
addParameter(CUSTOM_BASE, customBaseParameter);
55+
}
56+
57+
@Override
58+
public String getName() {
59+
60+
if (logParameter.getParameterValue().equals(LogParameter.LogEnum.custom)) {
61+
return "Log" + customBaseParameter.getParameterValue();
62+
} else {
63+
return logParameter.getParameterValue().toString();
64+
}
65+
}
66+
}
Lines changed: 58 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,58 @@
1+
package org.gitools.matrix.transform;
2+
3+
4+
import org.apache.commons.math3.analysis.function.Logit;
5+
import org.gitools.api.matrix.ConfigurableTransformFunction;
6+
import org.gitools.api.matrix.IMatrixPosition;
7+
import org.gitools.matrix.transform.parameters.DoubleParameter;
8+
9+
public class LogitFunction extends ConfigurableTransformFunction {
10+
11+
public static final String LOW = "Low";
12+
private Logit logit;
13+
private DoubleParameter lowParameter;
14+
private DoubleParameter highParameter;
15+
16+
public LogitFunction() {
17+
super("Logit", "Returns the Logit transformation");
18+
}
19+
20+
@Override
21+
public Double apply(Double value, IMatrixPosition position) {
22+
if (value != null) {
23+
return getLogit().value(value);
24+
}
25+
return null;
26+
}
27+
28+
@Override
29+
public LogitFunction createNew() {
30+
return new LogitFunction();
31+
}
32+
33+
@Override
34+
protected void createDefaultParameters() {
35+
lowParameter = new DoubleParameter();
36+
lowParameter.setParameterValue(0.0);
37+
lowParameter.setDescription("Low threshold");
38+
addParameter("Low", lowParameter);
39+
40+
highParameter = new DoubleParameter();
41+
highParameter.setParameterValue(1.0);
42+
highParameter.setDescription("High threshold");
43+
addParameter("High", highParameter);
44+
45+
}
46+
47+
public Logit getLogit() {
48+
if (logit == null) {
49+
logit = new Logit(lowParameter.getParameterValue(), highParameter.getParameterValue());
50+
}
51+
return logit;
52+
}
53+
54+
@Override
55+
public String getName() {
56+
return super.getName() + " (" + lowParameter.getParameterValue() + ", " + highParameter.getParameterValue() + ")";
57+
}
58+
}
Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package org.gitools.matrix.transform;
2+
3+
4+
import org.gitools.api.matrix.ConfigurableTransformFunction;
5+
import org.gitools.api.matrix.IMatrixPosition;
6+
import org.gitools.matrix.transform.parameters.DoubleParameter;
7+
8+
public class MultiplyByConstantFunction extends ConfigurableTransformFunction {
9+
10+
public static final String CONSTANT = "Constant";
11+
DoubleParameter doubleParameter;
12+
13+
public MultiplyByConstantFunction() {
14+
super("Multiply", "Multiplies the value by the defined constant");
15+
}
16+
17+
@Override
18+
public Double apply(Double value, IMatrixPosition position) {
19+
if (value != null) {
20+
return value * doubleParameter.getParameterValue();
21+
}
22+
return null;
23+
}
24+
25+
@Override
26+
public MultiplyByConstantFunction createNew() {
27+
return new MultiplyByConstantFunction();
28+
}
29+
30+
@Override
31+
protected void createDefaultParameters() {
32+
doubleParameter = new DoubleParameter();
33+
doubleParameter.setDescription("Define a constant which will be summed to all values");
34+
doubleParameter.setParameterValue(2.0);
35+
addParameter(CONSTANT, doubleParameter);
36+
}
37+
38+
@Override
39+
public String getName() {
40+
return name + " by " + doubleParameter.getParameterValue();
41+
}
42+
}
Lines changed: 79 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,79 @@
1+
package org.gitools.matrix.transform;
2+
3+
4+
import org.apache.commons.math3.analysis.function.Logit;
5+
import org.gitools.api.matrix.*;
6+
import org.gitools.matrix.transform.parameters.DoubleParameter;
7+
import org.gitools.utils.aggregation.MaxAggregator;
8+
import org.gitools.utils.aggregation.MinAggregator;
9+
10+
public class ScaleFunction extends ConfigurableTransformFunction {
11+
12+
public static final String LOW = "Low";
13+
public static final String HIGH = "High";
14+
private Logit logit;
15+
private DoubleParameter lowParameter;
16+
private DoubleParameter highParameter;
17+
private double min;
18+
private double max;
19+
private IMatrixLayer<Double> resultLayer;
20+
21+
public ScaleFunction(IMatrixLayer<Double> resultLayer) {
22+
super("Scale", "Returns the Logit transformation");
23+
this.resultLayer = resultLayer;
24+
}
25+
26+
/*
27+
* (low-high)(x - min)
28+
* f(x) = ----------------------- + a
29+
* max - min
30+
*/
31+
@Override
32+
public Double apply(Double value, IMatrixPosition position) {
33+
Double low = lowParameter.getParameterValue();
34+
Double high = highParameter.getParameterValue();
35+
36+
if (value != null) {
37+
38+
return (high-low) * (value - min) / (max - min) + low;
39+
}
40+
return null;
41+
}
42+
43+
@Override
44+
public void onBeforeIterate(IMatrixIterable<Double> parentIterable) {
45+
IMatrix matrix = parentIterable.getPosition().getMatrix();
46+
47+
48+
IMatrixIterable<Double> matrixIterable = matrix.newPosition()
49+
.iterate(resultLayer, matrix.getRows(), matrix.getColumns());
50+
51+
max = MaxAggregator.INSTANCE.aggregate(matrixIterable);
52+
min = MinAggregator.INSTANCE.aggregate(matrixIterable);
53+
54+
}
55+
56+
@Override
57+
public ScaleFunction createNew() {
58+
return new ScaleFunction(resultLayer);
59+
}
60+
61+
@Override
62+
protected void createDefaultParameters() {
63+
lowParameter = new DoubleParameter();
64+
lowParameter.setParameterValue(0.0);
65+
lowParameter.setDescription("Low bound");
66+
addParameter(LOW, lowParameter);
67+
68+
highParameter = new DoubleParameter();
69+
highParameter.setParameterValue(1.0);
70+
highParameter.setDescription("High bound");
71+
addParameter(HIGH, highParameter);
72+
73+
}
74+
75+
@Override
76+
public String getName() {
77+
return super.getName() + " to [" + lowParameter.getParameterValue() + "," + highParameter.getParameterValue() + "]";
78+
}
79+
}

org.gitools.matrix/src/main/java/org/gitools/matrix/transform/TransformFunctionFactory.java

Lines changed: 9 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,30 +1,32 @@
11
package org.gitools.matrix.transform;
22

33
import org.gitools.api.matrix.ConfigurableTransformFunction;
4-
import org.gitools.api.matrix.IMatrix;
54
import org.gitools.api.matrix.IMatrixLayer;
65

76
import java.util.ArrayList;
87
import java.util.List;
98

109
public class TransformFunctionFactory {
1110

12-
public static List<ConfigurableTransformFunction> get(IMatrix matrix, IMatrixLayer<Double> resultLayer) {
11+
public static List<ConfigurableTransformFunction> get(IMatrixLayer<Double> resultLayer) {
1312
List<ConfigurableTransformFunction> funcs = new ArrayList<>();
13+
funcs.add(new AbsoluteFunction());
1414
funcs.add(new FillEmptyFunction());
15-
funcs.add(new FoldChangeFunction(matrix, resultLayer));
16-
funcs.add(new LogNFunction());
17-
funcs.add(new Log10Function());
15+
funcs.add(new FoldChangeFunction(resultLayer));
16+
funcs.add(new LogitFunction());
17+
funcs.add(new LogFunction());
18+
funcs.add(new MultiplyByConstantFunction());
1819
funcs.add(new ReplaceValueFunction());
20+
funcs.add(new ScaleFunction(resultLayer));
1921
funcs.add(new SumConstantFunction());
2022
return funcs;
2123
}
2224

2325
public static List<ConfigurableTransformFunction> get() {
2426
List<ConfigurableTransformFunction> funcs = new ArrayList<>();
2527
funcs.add(new FillEmptyFunction());
26-
funcs.add(new LogNFunction());
27-
funcs.add(new Log10Function());
28+
funcs.add(new LogitFunction());
29+
funcs.add(new LogFunction());
2830
funcs.add(new ReplaceValueFunction());
2931
funcs.add(new SumConstantFunction());
3032
return funcs;

0 commit comments

Comments
 (0)