Running a picard tool in the #KNIME workflow engine
http://www.knime.org/ is "a user-friendly graphical workbench for the entire analysis process: data access, data transformation, initial investigation, powerful predictive analytics, visualisation and reporting". In this post, I'll show how to invoke an external java program, and more precisely a tool from the picard library from with knime. The workflow: load a list of BAM filenames, invoke SortSam and display the names of the sorted files.
Construct the following workflow:

Edit the FileReader node and load a list of paths to the BAMs

Edit the properties of the java node, in the "Additional Libraries" tab, load the jar of SortSam.jar

Edit the java snippet node, create a new column SORTED_BAM for the output.

and copy the following code:
// Your custom imports:
import net.sf.picard.sam.SortSam;
import java.io.File;
----------------------------------------------------------
// Enter your code here:
File input=new File(c_BAM);
//build the output filename
out_SORTED = input.getName();
if(!(out_SORTED.endsWith(".sam") || out_SORTED.endsWith(".bam")))
{
throw new Abort("not a SAM/BAM :"+c_BAM);
}
int dot=out_SORTED.lastIndexOf('.');
out_SORTED=new File(input.getParentFile(),out_SORTED.substring(0, dot)+"_sorted.bam").getPath();
//create a new instance of SortSam
SortSam cmd=new SortSam();
//invoke the instance
int ret=cmd.instanceMain(new String[]{
"I="+input.getPath(),
"O="+out_SORTED,
"SO=coordinate",
"VALIDATION_STRINGENCY=LENIENT",
"CREATE_INDEX=true",
"MAX_RECORDS_IN_RAM=500000"
});
if(ret!=0)
{
throw new Abort("SortSam failed with: "+c_BAM+" "+out_SORTED);
}
Execute KNIME, picard runs the job, and get the names of the sorted BAMs:
Edit:

The workflow was uplodaded on MyExperiment at http://www.myexperiment.org/workflows/3654.html.
That's it,
Pierre
No comments:
Post a Comment