6037 |
02 Nov 20 |
nicklas |
1 |
package net.sf.basedb.reggie.script; |
6037 |
02 Nov 20 |
nicklas |
2 |
|
6037 |
02 Nov 20 |
nicklas |
3 |
import java.io.IOException; |
6037 |
02 Nov 20 |
nicklas |
4 |
import java.util.ArrayList; |
6037 |
02 Nov 20 |
nicklas |
5 |
import java.util.Arrays; |
6037 |
02 Nov 20 |
nicklas |
6 |
import java.util.Collections; |
6037 |
02 Nov 20 |
nicklas |
7 |
import java.util.List; |
6037 |
02 Nov 20 |
nicklas |
8 |
import java.util.Map; |
6037 |
02 Nov 20 |
nicklas |
9 |
|
6037 |
02 Nov 20 |
nicklas |
10 |
import net.sf.basedb.core.DbControl; |
6075 |
23 Nov 20 |
nicklas |
11 |
import net.sf.basedb.core.Extract; |
6075 |
23 Nov 20 |
nicklas |
12 |
import net.sf.basedb.core.Protocol; |
6037 |
02 Nov 20 |
nicklas |
13 |
import net.sf.basedb.reggie.Reggie; |
6037 |
02 Nov 20 |
nicklas |
14 |
import net.sf.basedb.reggie.XmlConfig; |
6075 |
23 Nov 20 |
nicklas |
15 |
import net.sf.basedb.reggie.dao.Annotationtype; |
6037 |
02 Nov 20 |
nicklas |
16 |
import net.sf.basedb.reggie.dao.Rawbioassay; |
6075 |
23 Nov 20 |
nicklas |
17 |
import net.sf.basedb.reggie.dao.Subtype; |
6075 |
23 Nov 20 |
nicklas |
18 |
import net.sf.basedb.reggie.ssp.SspModel; |
6037 |
02 Nov 20 |
nicklas |
19 |
import net.sf.basedb.util.Values; |
6037 |
02 Nov 20 |
nicklas |
20 |
|
6037 |
02 Nov 20 |
nicklas |
21 |
|
6037 |
02 Nov 20 |
nicklas |
22 |
/** |
6075 |
23 Nov 20 |
nicklas |
Helper class for running the 'ShowcaseReport' R script. |
6037 |
02 Nov 20 |
nicklas |
24 |
|
6037 |
02 Nov 20 |
nicklas |
@author nicklas |
6037 |
02 Nov 20 |
nicklas |
@since 4.28 |
6037 |
02 Nov 20 |
nicklas |
27 |
*/ |
6037 |
02 Nov 20 |
nicklas |
28 |
public class ScanBReport |
6037 |
02 Nov 20 |
nicklas |
29 |
extends RScriptDefinition |
6037 |
02 Nov 20 |
nicklas |
30 |
{ |
6037 |
02 Nov 20 |
nicklas |
31 |
|
6037 |
02 Nov 20 |
nicklas |
32 |
private final List<String> genes; |
6037 |
02 Nov 20 |
nicklas |
33 |
|
6037 |
02 Nov 20 |
nicklas |
34 |
private RFunction scanB; |
6037 |
02 Nov 20 |
nicklas |
35 |
|
6037 |
02 Nov 20 |
nicklas |
36 |
/** |
6037 |
02 Nov 20 |
nicklas |
Create a new GeneReport instance. It will be initialized with default |
6037 |
02 Nov 20 |
nicklas |
parameters. Path to R script must be in configuration file at |
6037 |
02 Nov 20 |
nicklas |
<cfg>/path. Directory with reference data can optionally be |
6037 |
02 Nov 20 |
nicklas |
specified by <cfg>/ref-dir-scanb and <cfg>/ref-dir-validation |
6037 |
02 Nov 20 |
nicklas |
or it will be assumed that it is found in the same directory |
6037 |
02 Nov 20 |
nicklas |
as the R script. |
6037 |
02 Nov 20 |
nicklas |
43 |
*/ |
6075 |
23 Nov 20 |
nicklas |
44 |
public ScanBReport(String cfg, String parameterSet, String... genes) |
6037 |
02 Nov 20 |
nicklas |
45 |
throws IOException |
6037 |
02 Nov 20 |
nicklas |
46 |
{ |
6037 |
02 Nov 20 |
nicklas |
47 |
this.genes = Collections.unmodifiableList(Arrays.asList(genes)); |
6037 |
02 Nov 20 |
nicklas |
48 |
|
6037 |
02 Nov 20 |
nicklas |
49 |
XmlConfig config = Reggie.getConfig(); |
6037 |
02 Nov 20 |
nicklas |
// Get and check path to script file |
6037 |
02 Nov 20 |
nicklas |
51 |
String script_path = config.getRequiredConfig(cfg+"/path", parameterSet); |
6037 |
02 Nov 20 |
nicklas |
52 |
Reggie.checkFile(script_path, false); |
6037 |
02 Nov 20 |
nicklas |
53 |
setScript(script_path); |
6075 |
23 Nov 20 |
nicklas |
54 |
String ref_dir = config.getConfig(cfg+"/ref-dir", parameterSet, getScriptDir() + "/referenceData"); |
6075 |
23 Nov 20 |
nicklas |
55 |
String source_dir = config.getConfig(cfg+"/source-dir", parameterSet, getScriptDir() + "/source"); |
6037 |
02 Nov 20 |
nicklas |
56 |
|
6037 |
02 Nov 20 |
nicklas |
// Check that files and directories exists |
6075 |
23 Nov 20 |
nicklas |
58 |
Reggie.checkFile(ref_dir, true); |
6075 |
23 Nov 20 |
nicklas |
59 |
Reggie.checkFile(source_dir, true); |
6037 |
02 Nov 20 |
nicklas |
60 |
|
6075 |
23 Nov 20 |
nicklas |
61 |
scanB = addFunction("showcaseReport"); |
6037 |
02 Nov 20 |
nicklas |
62 |
setDefaultGeneReportParameters(scanB); |
6075 |
23 Nov 20 |
nicklas |
63 |
scanB.setParameter("datadir", "'" + ref_dir + "'"); |
6075 |
23 Nov 20 |
nicklas |
64 |
scanB.setParameter("sourcedir", "'" + source_dir + "'"); |
6037 |
02 Nov 20 |
nicklas |
65 |
} |
6037 |
02 Nov 20 |
nicklas |
66 |
|
6037 |
02 Nov 20 |
nicklas |
67 |
private void setDefaultGeneReportParameters(RFunction f) |
6075 |
23 Nov 20 |
nicklas |
68 |
{} |
6037 |
02 Nov 20 |
nicklas |
69 |
|
6037 |
02 Nov 20 |
nicklas |
70 |
/** |
6037 |
02 Nov 20 |
nicklas |
Get the list of genes to get a report for. |
6037 |
02 Nov 20 |
nicklas |
72 |
*/ |
6037 |
02 Nov 20 |
nicklas |
73 |
public List<String> getGenes() |
6037 |
02 Nov 20 |
nicklas |
74 |
{ |
6037 |
02 Nov 20 |
nicklas |
75 |
return genes; |
6037 |
02 Nov 20 |
nicklas |
76 |
} |
6037 |
02 Nov 20 |
nicklas |
77 |
|
6037 |
02 Nov 20 |
nicklas |
78 |
/** |
6037 |
02 Nov 20 |
nicklas |
Run the gene report script for the given raw bioassay. It will calculate |
6037 |
02 Nov 20 |
nicklas |
the sum of fpkm for the specified genes and then submit those values to |
6037 |
02 Nov 20 |
nicklas |
the R script. |
6037 |
02 Nov 20 |
nicklas |
@see Rawbioassay#getFpkmSum(DbControl, java.util.Collection) |
6037 |
02 Nov 20 |
nicklas |
83 |
*/ |
6037 |
02 Nov 20 |
nicklas |
84 |
public Result run(DbControl dc, Rawbioassay raw) |
6037 |
02 Nov 20 |
nicklas |
85 |
{ |
6037 |
02 Nov 20 |
nicklas |
86 |
|
6037 |
02 Nov 20 |
nicklas |
// Calculate sum(fpkm) for given genes |
6037 |
02 Nov 20 |
nicklas |
88 |
Map<String, Float> sums = raw.getFpkmSum(dc, genes); |
6037 |
02 Nov 20 |
nicklas |
89 |
List<Float> v = new ArrayList<Float>(); |
6037 |
02 Nov 20 |
nicklas |
90 |
for (String gene : genes) |
6037 |
02 Nov 20 |
nicklas |
91 |
{ |
6037 |
02 Nov 20 |
nicklas |
92 |
Float s = sums.get(gene); |
6037 |
02 Nov 20 |
nicklas |
93 |
v.add(s == null ? 0 : s); |
6037 |
02 Nov 20 |
nicklas |
94 |
} |
6076 |
24 Nov 20 |
nicklas |
95 |
String values = Values.getString(v, ",", true); |
6076 |
24 Nov 20 |
nicklas |
96 |
scanB.setParameter("value", "c(" + values + ")"); |
6037 |
02 Nov 20 |
nicklas |
97 |
|
6075 |
23 Nov 20 |
nicklas |
98 |
Annotationtype ror = Annotationtype.sspResultAnnotation(SspModel.getModelByName("ROR asT0")); |
6075 |
23 Nov 20 |
nicklas |
99 |
String rorAsTo = ScriptDefinition.checkValidScriptParameter((String)ror.getAnnotationValue(dc, raw.getItem())); |
6076 |
24 Nov 20 |
nicklas |
100 |
scanB.setParameter("ROR", "'" + (rorAsTo == null ? "c005" : rorAsTo) + "'"); |
6075 |
23 Nov 20 |
nicklas |
101 |
|
6076 |
24 Nov 20 |
nicklas |
102 |
String protocolName = "unknown"; |
6075 |
23 Nov 20 |
nicklas |
103 |
Extract lib = (Extract)raw.findSingleParent(dc, Subtype.LIBRARY); |
6075 |
23 Nov 20 |
nicklas |
104 |
if (lib != null) |
6075 |
23 Nov 20 |
nicklas |
105 |
{ |
6075 |
23 Nov 20 |
nicklas |
106 |
Protocol libProtocol = lib.getProtocol(); |
6075 |
23 Nov 20 |
nicklas |
107 |
if (libProtocol != null) |
6075 |
23 Nov 20 |
nicklas |
108 |
{ |
6076 |
24 Nov 20 |
nicklas |
109 |
protocolName = ScriptDefinition.checkValidScriptParameter(libProtocol.getName()); |
6075 |
23 Nov 20 |
nicklas |
110 |
} |
6075 |
23 Nov 20 |
nicklas |
111 |
} |
6076 |
24 Nov 20 |
nicklas |
112 |
scanB.setParameter("protocol", "'" + protocolName + "'"); |
6075 |
23 Nov 20 |
nicklas |
113 |
|
6037 |
02 Nov 20 |
nicklas |
114 |
Result result = run(new Result(raw, genes)); |
6037 |
02 Nov 20 |
nicklas |
115 |
return result; |
6037 |
02 Nov 20 |
nicklas |
116 |
} |
6037 |
02 Nov 20 |
nicklas |
117 |
|
6037 |
02 Nov 20 |
nicklas |
118 |
/** |
6037 |
02 Nov 20 |
nicklas |
The results keep track of the raw bioassay and genes that |
6037 |
02 Nov 20 |
nicklas |
was used. |
6037 |
02 Nov 20 |
nicklas |
121 |
*/ |
6037 |
02 Nov 20 |
nicklas |
122 |
public class Result |
6037 |
02 Nov 20 |
nicklas |
123 |
extends ScriptResult |
6037 |
02 Nov 20 |
nicklas |
124 |
{ |
6037 |
02 Nov 20 |
nicklas |
125 |
public final Rawbioassay raw; |
6037 |
02 Nov 20 |
nicklas |
126 |
public final List<String> genes; |
6037 |
02 Nov 20 |
nicklas |
127 |
|
6037 |
02 Nov 20 |
nicklas |
128 |
/** |
6037 |
02 Nov 20 |
nicklas |
Creates a new result object for the given raw bioassay. |
6037 |
02 Nov 20 |
nicklas |
130 |
*/ |
6037 |
02 Nov 20 |
nicklas |
131 |
public Result(Rawbioassay raw, List<String> genes) |
6037 |
02 Nov 20 |
nicklas |
132 |
{ |
6037 |
02 Nov 20 |
nicklas |
133 |
super(); |
6037 |
02 Nov 20 |
nicklas |
134 |
this.raw = raw; |
6037 |
02 Nov 20 |
nicklas |
135 |
this.genes = genes; |
6037 |
02 Nov 20 |
nicklas |
136 |
} |
6075 |
23 Nov 20 |
nicklas |
137 |
|
6037 |
02 Nov 20 |
nicklas |
138 |
} |
6037 |
02 Nov 20 |
nicklas |
139 |
} |