Skip to content

Commit c271dc3

Browse files
committed
Add support for Genrich
1 parent 800209e commit c271dc3

File tree

3 files changed

+176
-19
lines changed

3 files changed

+176
-19
lines changed

SequenceAnalysis/pipeline_code/sequence_tools_install.sh

Lines changed: 41 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -223,9 +223,7 @@ cd $LKSRC_DIR
223223
if [[ ! -e ${LKTOOLS_DIR}/flash || ! -z $FORCE_REINSTALL ]];
224224
then
225225
echo "Cleaning up previous installs"
226-
rm -Rf FLASH-1.2.11.tar.gz
227-
rm -Rf FLASH-1.2.11.tar
228-
rm -Rf FLASH-1.2.11
226+
rm -Rf FLASH-1.2.11*
229227
rm -Rf $LKTOOLS_DIR/flash
230228

231229
wget $WGET_OPTS http://ccb.jhu.edu/software/FLASH/FLASH-1.2.11-Linux-x86_64.tar.gz
@@ -540,7 +538,7 @@ cd $LKSRC_DIR
540538
if [[ ! -e ${LKTOOLS_DIR}/tabix || ! -z $FORCE_REINSTALL ]];
541539
then
542540
echo "Cleaning up previous installs"
543-
rm -Rf tabix-0.2.6*
541+
rm -Rf tabix-*
544542
rm -Rf $LKTOOLS_DIR/tabix
545543
rm -Rf $LKTOOLS_DIR/bgzip
546544

@@ -688,8 +686,7 @@ cd $LKSRC_DIR
688686
if [[ ! -e $LKTOOLS_DIR/picard.jar || ! -z $FORCE_REINSTALL ]];
689687
then
690688
echo "Cleaning up previous installs"
691-
rm -Rf picard-tools-*
692-
rm -Rf snappy-java-1.0.3-rc3.jar
689+
rm -Rf picard*
693690
rm -Rf $LKTOOLS_DIR/picard-tools
694691
rm -Rf $LKTOOLS_DIR/picard*
695692
rm -Rf $LKTOOLS_DIR/htsjdk-*
@@ -716,9 +713,7 @@ if [[ ! -e ${LKTOOLS_DIR}/bowtie || ! -e ${LKTOOLS_DIR}/bowtie-build || ! -z $FO
716713
then
717714
echo "Cleaning up previous installs"
718715

719-
#old version
720-
rm -Rf bowtie-0.12.8*
721-
rm -Rf bowtie-1.0.1*
716+
rm -Rf bowtie-*
722717
rm -Rf $LKTOOLS_DIR/bowtie
723718
rm -Rf $LKTOOLS_DIR/bowtie-build
724719

@@ -747,7 +742,7 @@ then
747742
echo "Cleaning up previous installs"
748743

749744
#old version
750-
rm -Rf bowtie2-*
745+
rm -Rf bowtie2*
751746
rm -Rf $LKTOOLS_DIR/bowtie2
752747
rm -Rf $LKTOOLS_DIR/bowtie2-*
753748

@@ -860,7 +855,7 @@ then
860855
PIP_VERSION=`$PIP_EXE -V | cut -d '(' -f 2 | sed 's/python //' | cut -c 1 2>1`
861856
if [[ $PIP_VERSION == '2' ]];then
862857
echo 'Using python 2 compatible cutadapt'
863-
wget https://pypi.python.org/packages/source/c/cutadapt/cutadapt-1.8.1.tar.gz
858+
wget $WGET_OPTS https://pypi.python.org/packages/source/c/cutadapt/cutadapt-1.8.1.tar.gz
864859
gunzip cutadapt-1.8.1.tar.gz
865860
tar -xf cutadapt-1.8.1.tar
866861
gzip cutadapt-1.8.1.tar
@@ -1029,9 +1024,7 @@ cd $LKSRC_DIR
10291024

10301025
if [[ ! -e ${LKTOOLS_DIR}/clustalw2 || ! -z $FORCE_REINSTALL ]];
10311026
then
1032-
rm -Rf clustalw-2.1.tar.gz
1033-
rm -Rf clustalw-2.1.tar
1034-
rm -Rf clustalw-2.1
1027+
rm -Rf clustalw-*
10351028
rm -Rf $LKTOOLS_DIR/clustalw2
10361029

10371030
wget $WGET_OPTS http://www.clustal.org/download/current/clustalw-2.1.tar.gz
@@ -1062,9 +1055,7 @@ cd $LKSRC_DIR
10621055

10631056
if [[ ! -e ${LKTOOLS_DIR}/muscle || ! -z $FORCE_REINSTALL ]];
10641057
then
1065-
rm -Rf muscle3.8.31_i86linux64.tar.gz
1066-
rm -Rf muscle3.8.31_i86linux64.tar
1067-
rm -Rf muscle3.8.31_i86linux64
1058+
rm -Rf muscle3*
10681059
rm -Rf $LKTOOLS_DIR/muscle
10691060

10701061
wget $WGET_OPTS https://www.drive5.com/muscle/downloads3.8.31/muscle3.8.31_i86linux64.tar.gz
@@ -1121,11 +1112,38 @@ then
11211112
rm -Rf lofreq_star*
11221113
rm -Rf $LKTOOLS_DIR/lofreq_star*
11231114

1124-
wget https://github.com/CSB5/lofreq/raw/master/dist/lofreq_star-2.1.4_linux-x86-64.tgz
1115+
wget $WGET_OPTS https://github.com/CSB5/lofreq/raw/master/dist/lofreq_star-2.1.4_linux-x86-64.tgz
11251116
tar -xf lofreq_star-2.1.4_linux-x86-64.tgz
11261117

11271118
install ./lofreq_star-2.1.4_linux-x86-64/bin/lofreq* $LKTOOLS_DIR/
1119+
else
1120+
echo "Already installed"
1121+
fi
1122+
1123+
1124+
#
1125+
#Genrich
1126+
#
1127+
1128+
echo ""
1129+
echo ""
1130+
echo "%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%"
1131+
echo "Installing Genrich"
1132+
echo ""
1133+
cd $LKSRC_DIR
1134+
1135+
if [[ ! -e ${LKTOOLS_DIR}/Genrich || ! -z $FORCE_REINSTALL ]];
1136+
then
1137+
rm -Rf Genrich*
1138+
rm -Rf v0.6.1*
1139+
rm -Rf $LKTOOLS_DIR/Genrich*
1140+
1141+
wget $WGET_OPTS https://github.com/jsh58/Genrich/archive/refs/tags/v0.6.1.tar.gz
1142+
tar -xf v0.6.1.tar.gz
1143+
cd Genrich-0.6.1
1144+
make
11281145

1146+
install ./Genrich $LKTOOLS_DIR/
11291147
else
11301148
echo "Already installed"
11311149
fi
@@ -1138,9 +1156,13 @@ then
11381156
chown -R ${LK_USER} $LKSRC_DIR
11391157
fi
11401158

1141-
if [ ! -z $CLEAN_SRC ]; then
1159+
if [ ! -z $CLEAN_SRC ];
1160+
then
11421161
echo "Cleaning up tool_src"
11431162
rm -Rf $LKSRC_DIR
1163+
else
1164+
echo "Contents of tool_src:"
1165+
ls $LKSRC_DIR
11441166
fi
11451167

11461168
echo ""

SequenceAnalysis/src/org/labkey/sequenceanalysis/SequenceAnalysisModule.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -79,6 +79,7 @@
7979
import org.labkey.sequenceanalysis.run.alignment.VulcanWrapper;
8080
import org.labkey.sequenceanalysis.run.analysis.BamIterator;
8181
import org.labkey.sequenceanalysis.run.analysis.ExportOverlappingReadsAnalysis;
82+
import org.labkey.sequenceanalysis.run.analysis.GenrichStep;
8283
import org.labkey.sequenceanalysis.run.analysis.HaplotypeCallerAnalysis;
8384
import org.labkey.sequenceanalysis.run.analysis.ImmunoGenotypingAnalysis;
8485
import org.labkey.sequenceanalysis.run.analysis.LofreqAnalysis;
@@ -283,6 +284,7 @@ public static void registerPipelineSteps()
283284
SequencePipelineService.get().registerPipelineStep(new LofreqAnalysis.Provider());
284285
SequencePipelineService.get().registerPipelineStep(new PindelAnalysis.Provider());
285286
SequencePipelineService.get().registerPipelineStep(new PbsvAnalysis.Provider());
287+
SequencePipelineService.get().registerPipelineStep(new GenrichStep.Provider());
286288

287289
//SequencePipelineService.get().registerPipelineStep(new BlastUnmappedReadAnalysis.Provider());
288290
SequencePipelineService.get().registerPipelineStep(new PARalyzerAnalysis.Provider());
Lines changed: 133 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,133 @@
1+
package org.labkey.sequenceanalysis.run.analysis;
2+
3+
import htsjdk.samtools.SAMFileHeader;
4+
import org.apache.logging.log4j.Logger;
5+
import org.json.JSONObject;
6+
import org.labkey.api.pipeline.PipelineJobException;
7+
import org.labkey.api.sequenceanalysis.model.AnalysisModel;
8+
import org.labkey.api.sequenceanalysis.model.Readset;
9+
import org.labkey.api.sequenceanalysis.pipeline.AbstractAnalysisStepProvider;
10+
import org.labkey.api.sequenceanalysis.pipeline.AnalysisOutputImpl;
11+
import org.labkey.api.sequenceanalysis.pipeline.AnalysisStep;
12+
import org.labkey.api.sequenceanalysis.pipeline.CommandLineParam;
13+
import org.labkey.api.sequenceanalysis.pipeline.PipelineContext;
14+
import org.labkey.api.sequenceanalysis.pipeline.PipelineStepProvider;
15+
import org.labkey.api.sequenceanalysis.pipeline.ReferenceGenome;
16+
import org.labkey.api.sequenceanalysis.pipeline.SamSorter;
17+
import org.labkey.api.sequenceanalysis.pipeline.SequencePipelineService;
18+
import org.labkey.api.sequenceanalysis.pipeline.ToolParameterDescriptor;
19+
import org.labkey.api.sequenceanalysis.run.AbstractCommandPipelineStep;
20+
import org.labkey.api.sequenceanalysis.run.AbstractCommandWrapper;
21+
import org.labkey.api.util.FileUtil;
22+
23+
import java.io.File;
24+
import java.io.IOException;
25+
import java.util.ArrayList;
26+
import java.util.Arrays;
27+
import java.util.List;
28+
29+
public class GenrichStep extends AbstractCommandPipelineStep<GenrichStep.GenrichWrapper> implements AnalysisStep
30+
{
31+
public GenrichStep(PipelineStepProvider<?> provider, PipelineContext ctx)
32+
{
33+
super(provider, ctx, new GenrichWrapper(ctx.getLogger()));
34+
}
35+
36+
public static class Provider extends AbstractAnalysisStepProvider<GenrichStep>
37+
{
38+
public Provider()
39+
{
40+
super("GenrichStep", "Genrich", null, "This will run Genrich to calculate ATAC-seq peaks.", Arrays.asList(
41+
ToolParameterDescriptor.createCommandLineParam(CommandLineParam.createSwitch("-r"), "removeDuplicates", "Remove PCR Duplicates", "If checked, PCR duplicates will be removed", "checkbox", new JSONObject(){{
42+
put("checked", true);
43+
}}, true),
44+
ToolParameterDescriptor.createCommandLineParam(CommandLineParam.create("-m"), "minMAPQ", "Min MAPQ", "Minimum MAPQ to keep an alignment", "ldk-integerfield", new JSONObject(){{
45+
46+
}}, 0)
47+
), null, null);
48+
}
49+
50+
@Override
51+
public GenrichStep create(PipelineContext ctx)
52+
{
53+
return new GenrichStep(this, ctx);
54+
}
55+
}
56+
57+
@Override
58+
public Output performAnalysisPerSampleRemote(Readset rs, File inputBam, ReferenceGenome referenceGenome, File outputDir) throws PipelineJobException
59+
{
60+
AnalysisOutputImpl output = new AnalysisOutputImpl();
61+
62+
File queryNameSortBam;
63+
try
64+
{
65+
if (SequencePipelineService.get().getBamSortOrder(inputBam) != SAMFileHeader.SortOrder.queryname)
66+
{
67+
queryNameSortBam = new SamSorter(getPipelineCtx().getLogger()).execute(inputBam, new File(outputDir, FileUtil.getBaseName(inputBam) + ".querySort.bam"), SAMFileHeader.SortOrder.queryname);
68+
output.addIntermediateFile(queryNameSortBam);
69+
}
70+
else
71+
{
72+
queryNameSortBam = inputBam;
73+
}
74+
}
75+
catch (IOException e)
76+
{
77+
throw new PipelineJobException(e);
78+
}
79+
80+
File outputPeaks = new File(outputDir, FileUtil.getBaseName(inputBam) + ".narrowPeak");
81+
82+
List<String> extraArgs = getClientCommandArgs();
83+
getWrapper().run(queryNameSortBam, outputPeaks, extraArgs);
84+
85+
if (!outputPeaks.exists())
86+
{
87+
throw new PipelineJobException("Unable to find file: " + outputPeaks.getPath());
88+
}
89+
90+
output.addSequenceOutput(outputPeaks, FileUtil.getBaseName(inputBam) + ": ATAC-seq Peaks", "ATAC-seq Peaks", rs.getReadsetId(), null, referenceGenome.getGenomeId(), null);
91+
92+
return output;
93+
}
94+
95+
@Override
96+
public Output performAnalysisPerSampleLocal(AnalysisModel model, File inputBam, File referenceFasta, File outDir) throws PipelineJobException
97+
{
98+
return null;
99+
}
100+
101+
public static class GenrichWrapper extends AbstractCommandWrapper
102+
{
103+
public GenrichWrapper(Logger log)
104+
{
105+
super(log);
106+
}
107+
108+
public void run(File inputBam, File output, List<String> extraArgs) throws PipelineJobException
109+
{
110+
List<String> args = new ArrayList<>();
111+
args.add(getExe().getPath());
112+
args.add("-t");
113+
args.add(inputBam.getPath());
114+
115+
args.add("-o");
116+
args.add(output.getPath());
117+
118+
args.add("-j");
119+
120+
if (extraArgs != null)
121+
{
122+
args.addAll(extraArgs);
123+
}
124+
125+
execute(args);
126+
}
127+
128+
private File getExe()
129+
{
130+
return resolveFileInPath("Genrich", "GENRICHPATH", true);
131+
}
132+
}
133+
}

0 commit comments

Comments
 (0)