Skip to content

Commit 690904f

Browse files
committed
Switch funcotator to use field config from DB
1 parent a44d4d3 commit 690904f

File tree

2 files changed

+48
-12
lines changed

2 files changed

+48
-12
lines changed

mGAP/src/org/labkey/mgap/pipeline/AnnotationStep.java

Lines changed: 46 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@
1010
import org.labkey.api.data.Container;
1111
import org.labkey.api.data.DbSchema;
1212
import org.labkey.api.data.DbSchemaType;
13+
import org.labkey.api.data.Results;
1314
import org.labkey.api.data.SimpleFilter;
1415
import org.labkey.api.data.Sort;
1516
import org.labkey.api.data.TableSelector;
@@ -43,6 +44,7 @@
4344
import java.io.File;
4445
import java.io.IOException;
4546
import java.io.PrintWriter;
47+
import java.sql.SQLException;
4648
import java.util.ArrayList;
4749
import java.util.Arrays;
4850
import java.util.HashMap;
@@ -148,21 +150,47 @@ public void init(PipelineJob job, SequenceAnalysisJobSupport support, List<Seque
148150
Container targetContainer = getPipelineCtx().getJob().getContainer().isWorkbook() ? getPipelineCtx().getJob().getContainer().getParent() : getPipelineCtx().getJob().getContainer();
149151
final HashMap<String, List<String>> sourceFieldMap = new HashMap<>();
150152
final HashMap<String, List<String>> targetFieldMap = new HashMap<>();
151-
new TableSelector(QueryService.get().getUserSchema(getPipelineCtx().getJob().getUser(), targetContainer, mGAPSchema.NAME).getTable(mGAPSchema.TABLE_VARIANT_ANNOTATIONS), PageFlowUtil.set("toolName", "sourceField", "infoKey")).forEachResults(rs -> {
152-
if (!sourceFieldMap.containsKey(rs.getString(FieldKey.fromString("toolName"))))
153-
{
154-
sourceFieldMap.put(rs.getString(FieldKey.fromString("toolName")), new ArrayList<>());
155-
targetFieldMap.put(rs.getString(FieldKey.fromString("toolName")), new ArrayList<>());
156-
}
153+
try (PrintWriter writer = PrintWriters.getPrintWriter(getFieldConfigFile()))
154+
{
155+
writer.println(StringUtils.join(Arrays.asList("DataSource", "SourceField", "ID", "Number", "Type", "Description"), "\t"));
156+
157+
new TableSelector(QueryService.get().getUserSchema(getPipelineCtx().getJob().getUser(), targetContainer, mGAPSchema.NAME).getTable(mGAPSchema.TABLE_VARIANT_ANNOTATIONS), PageFlowUtil.set("toolName", "sourceField", "infoKey")).forEachResults(rs -> {
158+
if (!sourceFieldMap.containsKey(rs.getString(FieldKey.fromString("toolName"))))
159+
{
160+
sourceFieldMap.put(rs.getString(FieldKey.fromString("toolName")), new ArrayList<>());
161+
targetFieldMap.put(rs.getString(FieldKey.fromString("toolName")), new ArrayList<>());
162+
}
157163

158-
sourceFieldMap.get(rs.getString(FieldKey.fromString("toolName"))).add(rs.getString(FieldKey.fromString("sourceField")));
159-
targetFieldMap.get(rs.getString(FieldKey.fromString("toolName"))).add(rs.getString(FieldKey.fromString("infoKey")));
160-
});
164+
sourceFieldMap.get(rs.getString(FieldKey.fromString("toolName"))).add(rs.getString(FieldKey.fromString("sourceField")));
165+
targetFieldMap.get(rs.getString(FieldKey.fromString("toolName"))).add(rs.getString(FieldKey.fromString("infoKey")));
166+
167+
if ("Funcotator".equals(rs.getString(FieldKey.fromString("toolName"))))
168+
{
169+
writer.println(StringUtils.join(Arrays.asList(
170+
getFieldValue(rs, "dataSource"),
171+
getFieldValue(rs, "sourceField"),
172+
getFieldValue(rs, "infoKey"),
173+
getFieldValue(rs, "dataNumber"),
174+
getFieldValue(rs, "dataType"),
175+
getFieldValue(rs, "description")
176+
), "\t"));
177+
}
178+
});
179+
}
180+
catch (IOException e)
181+
{
182+
throw new PipelineJobException(e);
183+
}
161184

162185
getPipelineCtx().getSequenceSupport().cacheObject(SOURCE_FIELDS, sourceFieldMap);
163186
getPipelineCtx().getSequenceSupport().cacheObject(TARGET_FIELDS, targetFieldMap);
164187
}
165188

189+
private String getFieldValue(Results rs, String fieldName) throws SQLException
190+
{
191+
return rs.getObject(FieldKey.fromString(fieldName)) == null ? "" : rs.getString(FieldKey.fromString(fieldName));
192+
}
193+
166194
private static final String SOURCE_FIELDS = "sourceFields";
167195
private static final String TARGET_FIELDS = "targetFields";
168196

@@ -452,7 +480,10 @@ public Output processVariants(File inputVCF, File outputDirectory, ReferenceGeno
452480
extraArgs.add("-pmf");
453481
}
454482

455-
fr.runFuncotator(funcotatorSourceDir, liftedToGRCh37, funcotatorAnnotated, grch37Genome, extraArgs);
483+
File configFile = getFieldConfigFile();
484+
output.addIntermediateFile(configFile);
485+
486+
fr.runFuncotator(funcotatorSourceDir, liftedToGRCh37, funcotatorAnnotated, grch37Genome, configFile, extraArgs);
456487
}
457488
else
458489
{
@@ -528,6 +559,11 @@ public Output processVariants(File inputVCF, File outputDirectory, ReferenceGeno
528559
return output;
529560
}
530561

562+
private File getFieldConfigFile()
563+
{
564+
return new File(getPipelineCtx().getSourceDirectory(), "funcotatorFields.txt");
565+
}
566+
531567
private void addToolFieldNames(String toolName, String argName, List<String> options, File outDir, VariantProcessingStepOutputImpl output, @Nullable List<String> extraFields) throws PipelineJobException
532568
{
533569
List<String> fields = getCachedFields(TARGET_FIELDS, toolName);

mGAP/src/org/labkey/mgap/pipeline/FuncotatorWrapper.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ public FuncotatorWrapper(Logger log)
2222
super(log);
2323
}
2424

25-
public void runFuncotator(File dataDir, File input, File output, ReferenceGenome genome, @Nullable List<String> extraArgs) throws PipelineJobException
25+
public void runFuncotator(File dataDir, File input, File output, ReferenceGenome genome, File configFile, @Nullable List<String> extraArgs) throws PipelineJobException
2626
{
2727
getLogger().info("Annotating VCF with Funcotator");
2828

@@ -41,7 +41,7 @@ public void runFuncotator(File dataDir, File input, File output, ReferenceGenome
4141
params.add("VCF");
4242

4343
params.add("-cf");
44-
params.add(new File(dataDir, "fieldConfig.txt").getPath());
44+
params.add(configFile.getPath());
4545

4646
params.add("-V");
4747
params.add(input.getPath());

0 commit comments

Comments
 (0)