Skip to content
Commits on Source (8)
MANIFEST.MF
*~
.pc
debian/*stamp
debian/*log
dist
debian/trimmomatic
debian/trimmomatic.substvars
debian/files
<project name="Trimmomatic" default="dist" basedir=".">
<property name="version" value="0.36"/>
<property name="version" value="0.38"/>
<property name="src" location="src" />
<property name="lib" location="lib" />
......
trimmomatic (0.38+dfsg-1) unstable; urgency=medium
* New upstream version
* debhelper 11
* Point Vcs fields to salsa.debian.org
* Standards-Version: 4.1.4
-- Andreas Tille <tille@debian.org> Tue, 22 May 2018 17:29:59 +0200
trimmomatic (0.36+dfsg-3) unstable; urgency=medium
* Team upload.
......
......@@ -4,14 +4,14 @@ Uploaders: Andreas Tille <tille@debian.org>,
Steffen Moeller <moeller@debian.org>
Section: science
Priority: optional
Build-Depends: debhelper (>= 10),
Build-Depends: debhelper (>= 11~),
default-jdk | openjdk-7-jdk,
javahelper,
ant,
libjbzip2-java
Standards-Version: 4.0.0
Vcs-Browser: https://anonscm.debian.org/cgit/debian-med/trimmomatic.git
Vcs-Git: https://anonscm.debian.org/git/debian-med/trimmomatic.git
Standards-Version: 4.1.4
Vcs-Browser: https://salsa.debian.org/med-team/trimmomatic
Vcs-Git: https://salsa.debian.org/med-team/trimmomatic.git
Homepage: http://www.usadellab.org/cms/index.php?page=trimmomatic
Package: trimmomatic
......
......@@ -4,7 +4,7 @@ Description: Use Debian packaged bzip2 library
--- a/build.xml
+++ b/build.xml
@@ -2,7 +2,7 @@
<property name="version" value="0.36"/>
<property name="version" value="0.38"/>
<property name="src" location="src" />
- <property name="lib" location="lib" />
......
package org.usadellab.trimmomatic;
import java.io.File;
import java.io.IOException;
import java.io.PrintStream;
import java.text.DecimalFormat;
import org.usadellab.trimmomatic.fastq.FastqRecord;
......@@ -8,25 +11,25 @@ public class TrimStats
{
private static DecimalFormat formatter=new DecimalFormat("0.00");
private int input;
private int survivingBoth;
private int survivingForward;
private int survivingReverse;
private long readsInput;
private long readsSurvivingBoth;
private long readsSurvivingForward;
private long readsSurvivingReverse;
public TrimStats()
{
input=0;
survivingBoth=0;
survivingForward=0;
survivingReverse=0;
readsInput=0;
readsSurvivingBoth=0;
readsSurvivingForward=0;
readsSurvivingReverse=0;
}
public void merge(TrimStats other)
{
input+=other.input;
survivingBoth+=other.survivingBoth;
survivingForward+=other.survivingForward;
survivingReverse+=other.survivingReverse;
readsInput+=other.readsInput;
readsSurvivingBoth+=other.readsSurvivingBoth;
readsSurvivingForward+=other.readsSurvivingForward;
readsSurvivingReverse+=other.readsSurvivingReverse;
}
......@@ -36,57 +39,79 @@ public class TrimStats
{
if(originalRecs[0]!=null)
{
input++;
readsInput++;
if(recs[0]!=null)
survivingForward++;
readsSurvivingForward++;
}
}
else
{
if(originalRecs[0]!=null && originalRecs[1]!=null)
{
input++;
readsInput++;
if(recs[0]!=null)
{
if(recs[1]!=null)
survivingBoth++;
readsSurvivingBoth++;
else
survivingForward++;
readsSurvivingForward++;
}
else if(recs[1]!=null)
survivingReverse++;
readsSurvivingReverse++;
}
}
}
public String getStatsSE()
public String processStatsSE(PrintStream statsSummaryStream)
{
int dropped=input-survivingForward;
long dropped=readsInput-readsSurvivingForward;
double survivingForwardPercent=(100.0*survivingForward)/input;
double droppedPercent=(100.0*dropped)/input;
double survivingForwardPercent=(100.0*readsSurvivingForward)/readsInput;
double droppedPercent=(100.0*dropped)/readsInput;
return "Input Reads: "+input+
" Surviving: "+survivingForward+" ("+formatter.format(survivingForwardPercent)+
if(statsSummaryStream!=null)
{
statsSummaryStream.println("Input Reads: "+readsInput);
statsSummaryStream.println("Surviving Reads: "+readsSurvivingForward);
statsSummaryStream.println("Surviving Read Percent: "+formatter.format(survivingForwardPercent));
statsSummaryStream.println("Dropped Reads: "+dropped);
statsSummaryStream.println("Dropped Read Percent: "+formatter.format(droppedPercent));
}
return "Input Reads: "+readsInput+
" Surviving: "+readsSurvivingForward+" ("+formatter.format(survivingForwardPercent)+
"%) Dropped: "+dropped+" ("+formatter.format(droppedPercent)+"%)";
}
public String getStatsPE()
public String processStatsPE(PrintStream statsSummaryStream)
{
int dropped=input-survivingBoth-survivingForward-survivingReverse;
long dropped=readsInput-readsSurvivingBoth-readsSurvivingForward-readsSurvivingReverse;
double survivingBothPercent=(100.0*survivingBoth)/input;
double survivingForwardPercent=(100.0*survivingForward)/input;
double survivingReversePercent=(100.0*survivingReverse)/input;
double droppedPercent=(100.0*dropped)/input;
double survivingBothPercent=(100.0*readsSurvivingBoth)/readsInput;
double survivingForwardPercent=(100.0*readsSurvivingForward)/readsInput;
double survivingReversePercent=(100.0*readsSurvivingReverse)/readsInput;
double droppedPercent=(100.0*dropped)/readsInput;
if(statsSummaryStream!=null)
{
statsSummaryStream.println("Input Read Pairs: "+readsInput);
statsSummaryStream.println("Both Surviving Reads: "+readsSurvivingBoth);
statsSummaryStream.println("Both Surviving Read Percent: "+formatter.format(survivingBothPercent));
statsSummaryStream.println("Forward Only Surviving Reads: "+readsSurvivingForward);
statsSummaryStream.println("Forward Only Surviving Read Percent: "+formatter.format(survivingForwardPercent));
statsSummaryStream.println("Reverse Only Surviving Reads: "+readsSurvivingReverse);
statsSummaryStream.println("Reverse Only Surviving Read Percent: "+formatter.format(survivingReversePercent));
statsSummaryStream.println("Dropped Reads: "+dropped);
statsSummaryStream.println("Dropped Read Percent: "+formatter.format(droppedPercent));
}
return "Input Read Pairs: "+input+
" Both Surviving: "+survivingBoth+" ("+formatter.format(survivingBothPercent)+
"%) Forward Only Surviving: "+survivingForward+" ("+formatter.format(survivingForwardPercent)+
"%) Reverse Only Surviving: "+survivingReverse+" ("+formatter.format(survivingReversePercent)+
return "Input Read Pairs: "+readsInput+
" Both Surviving: "+readsSurvivingBoth+" ("+formatter.format(survivingBothPercent)+
"%) Forward Only Surviving: "+readsSurvivingForward+" ("+formatter.format(survivingForwardPercent)+
"%) Reverse Only Surviving: "+readsSurvivingReverse+" ("+formatter.format(survivingReversePercent)+
"%) Dropped: "+dropped+" ("+formatter.format(droppedPercent)+"%)";
}
......
......@@ -95,9 +95,9 @@ public class Trimmomatic
if(showUsage)
{
System.err.println("Usage: ");
System.err.println(" PE [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-quiet] [-validatePairs] [-basein <inputBase> | <inputFile1> <inputFile2>] [-baseout <outputBase> | <outputFile1P> <outputFile1U> <outputFile2P> <outputFile2U>] <trimmer1>...");
System.err.println(" PE [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-summary <statsSummaryFile>] [-quiet] [-validatePairs] [-basein <inputBase> | <inputFile1> <inputFile2>] [-baseout <outputBase> | <outputFile1P> <outputFile1U> <outputFile2P> <outputFile2U>] <trimmer1>...");
System.err.println(" or: ");
System.err.println(" SE [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-quiet] <inputFile> <outputFile> <trimmer1>...");
System.err.println(" SE [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-summary <statsSummaryFile>] [-quiet] <inputFile> <outputFile> <trimmer1>...");
System.err.println(" or: ");
System.err.println(" -version");
System.exit(1);
......
......@@ -50,7 +50,7 @@ public class TrimmomaticPE extends Trimmomatic
public void processSingleThreaded(FastqParser parser1, FastqParser parser2, FastqSerializer serializer1P,
FastqSerializer serializer1U, FastqSerializer serializer2P, FastqSerializer serializer2U,
Trimmer trimmers[], PrintStream trimLogStream, PairingValidator pairingValidator) throws IOException
Trimmer trimmers[], PrintStream trimLogStream, PrintStream statsSummaryStream, PairingValidator pairingValidator) throws IOException
{
TrimStats stats = new TrimStats();
......@@ -115,12 +115,13 @@ public class TrimmomaticPE extends Trimmomatic
}
}
logger.infoln(stats.getStatsPE());
logger.infoln(stats.processStatsPE(statsSummaryStream));
}
public void processMultiThreaded(FastqParser parser1, FastqParser parser2, FastqSerializer serializer1P,
FastqSerializer serializer1U, FastqSerializer serializer2P, FastqSerializer serializer2U,
Trimmer trimmers[], PrintStream trimLogStream, PairingValidator pairingValidator, int threads) throws IOException
Trimmer trimmers[], PrintStream trimLogStream, PrintStream statsSummaryStream,
PairingValidator pairingValidator, int threads) throws IOException
{
ArrayBlockingQueue<List<FastqRecord>> parser1Queue = new ArrayBlockingQueue<List<FastqRecord>>(threads);
ArrayBlockingQueue<List<FastqRecord>> parser2Queue = new ArrayBlockingQueue<List<FastqRecord>>(threads);
......@@ -249,7 +250,7 @@ public class TrimmomaticPE extends Trimmomatic
trimLogThread.join();
statsThread.join();
logger.infoln(statsWorker.getStats().getStatsPE());
logger.infoln(statsWorker.getStats().processStatsPE(statsSummaryStream));
}
catch (InterruptedException e)
{
......@@ -258,7 +259,7 @@ public class TrimmomaticPE extends Trimmomatic
}
public void process(File input1, File input2, File output1P, File output1U, File output2P, File output2U,
Trimmer trimmers[], int phredOffset, File trimLog, boolean validatePairing, int threads) throws IOException
Trimmer trimmers[], int phredOffset, File trimLog, File statsSummaryFile, boolean validatePairing, int threads) throws IOException
{
FastqParser parser1 = new FastqParser(phredOffset);
parser1.parse(input1);
......@@ -302,6 +303,10 @@ public class TrimmomaticPE extends Trimmomatic
// FileOutputStream(trimLog),1000000),false);
trimLogStream = new PrintStream(trimLog);
PrintStream statsSummaryStream = null;
if(statsSummaryFile!=null)
statsSummaryStream = new PrintStream(statsSummaryFile);
PairingValidator pairingValidator=null;
if(validatePairing)
......@@ -309,10 +314,10 @@ public class TrimmomaticPE extends Trimmomatic
if (threads == 1)
processSingleThreaded(parser1, parser2, serializer1P, serializer1U, serializer2P, serializer2U, trimmers,
trimLogStream, pairingValidator);
trimLogStream, statsSummaryStream, pairingValidator);
else
processMultiThreaded(parser1, parser2, serializer1P, serializer1U, serializer2P, serializer2U, trimmers,
trimLogStream, pairingValidator, threads);
trimLogStream, statsSummaryStream, pairingValidator, threads);
serializer1P.close();
serializer1U.close();
......@@ -321,6 +326,9 @@ public class TrimmomaticPE extends Trimmomatic
if (trimLogStream != null)
trimLogStream.close();
if(statsSummaryStream != null)
statsSummaryStream.close();
}
private static int getFileExtensionIndex(String str)
......@@ -414,6 +422,7 @@ public class TrimmomaticPE extends Trimmomatic
boolean showVersion=false;
File trimLog = null;
File statsSummary = null;
List<String> nonOptionArgs=new ArrayList<String>();
......@@ -436,6 +445,13 @@ public class TrimmomaticPE extends Trimmomatic
else
badOption = true;
}
else if (arg.equals("-summary"))
{
if (argIndex < args.length)
statsSummary = new File(args[argIndex++]);
else
badOption = true;
}
else if (arg.equals("-basein"))
{
if (argIndex < args.length)
......@@ -536,7 +552,8 @@ public class TrimmomaticPE extends Trimmomatic
Trimmer trimmers[]=createTrimmers(logger, nonOptionArgsIter);
TrimmomaticPE tm = new TrimmomaticPE(logger);
tm.process(inputs[0], inputs[1], outputs[0], outputs[1], outputs[2], outputs[3], trimmers, phredOffset, trimLog, validatePairs, threads);
tm.process(inputs[0], inputs[1], outputs[0], outputs[1], outputs[2], outputs[3],
trimmers, phredOffset, trimLog, statsSummary, validatePairs, threads);
logger.infoln("TrimmomaticPE: Completed successfully");
return true;
......@@ -546,8 +563,7 @@ public class TrimmomaticPE extends Trimmomatic
{
if (!run(args))
{
System.err
.println("Usage: TrimmomaticPE [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-quiet] [-validatePairs] [-basein <inputBase> | <inputFile1> <inputFile2>] [-baseout <outputBase> | <outputFile1P> <outputFile1U> <outputFile2P> <outputFile2U>] <trimmer1>...");
System.err.println("Usage: [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-summary <statsSummaryFile>] [-quiet] [-validatePairs] [-basein <inputBase> | <inputFile1> <inputFile2>] [-baseout <outputBase> | <outputFile1P> <outputFile1U> <outputFile2P> <outputFile2U>] <trimmer1>...");
System.exit(1);
}
}
......
......@@ -48,7 +48,7 @@ public class TrimmomaticSE extends Trimmomatic
}
public void processSingleThreaded(FastqParser parser, FastqSerializer serializer, Trimmer trimmers[],
PrintStream trimLogStream) throws IOException
PrintStream trimLogStream, PrintStream statsSummaryStream) throws IOException
{
TrimStats stats = new TrimStats();
......@@ -102,11 +102,11 @@ public class TrimmomaticSE extends Trimmomatic
}
}
logger.infoln(stats.getStatsSE());
logger.infoln(stats.processStatsSE(statsSummaryStream));
}
public void processMultiThreaded(FastqParser parser, FastqSerializer serializer, Trimmer trimmers[],
PrintStream trimLogStream, int threads) throws IOException
PrintStream trimLogStream, PrintStream statsSummaryStream, int threads) throws IOException
{
ArrayBlockingQueue<List<FastqRecord>> parserQueue = new ArrayBlockingQueue<List<FastqRecord>>(threads);
ArrayBlockingQueue<Runnable> taskQueue = new ArrayBlockingQueue<Runnable>(threads * 2);
......@@ -181,7 +181,7 @@ public class TrimmomaticSE extends Trimmomatic
trimLogThread.join();
statsThread.join();
logger.infoln(statsWorker.getStats().getStatsSE());
logger.infoln(statsWorker.getStats().processStatsSE(statsSummaryStream));
}
catch (InterruptedException e)
{
......@@ -190,7 +190,7 @@ public class TrimmomaticSE extends Trimmomatic
}
public void process(File input, File output, Trimmer trimmers[], int phredOffset, File trimLog, int threads)
public void process(File input, File output, Trimmer trimmers[], int phredOffset, File trimLog, File statsSummaryFile, int threads)
throws IOException
{
FastqParser parser = new FastqParser(phredOffset);
......@@ -218,15 +218,22 @@ public class TrimmomaticSE extends Trimmomatic
if (trimLog != null)
trimLogStream = new PrintStream(trimLog);
PrintStream statsSummaryStream = null;
if(statsSummaryFile!=null)
statsSummaryStream = new PrintStream(statsSummaryFile);
if (threads == 1)
processSingleThreaded(parser, serializer, trimmers, trimLogStream);
processSingleThreaded(parser, serializer, trimmers, trimLogStream, statsSummaryStream);
else
processMultiThreaded(parser, serializer, trimmers, trimLogStream, threads);
processMultiThreaded(parser, serializer, trimmers, trimLogStream, statsSummaryStream, threads);
serializer.close();
if (trimLogStream != null)
trimLogStream.close();
if(statsSummaryStream != null)
statsSummaryStream.close();
}
public static boolean run(String[] args) throws IOException
......@@ -238,6 +245,7 @@ public class TrimmomaticSE extends Trimmomatic
boolean badOption = false;
File trimLog = null;
File statsSummary = null;
boolean quiet=false;
boolean showVersion=false;
......@@ -262,6 +270,13 @@ public class TrimmomaticSE extends Trimmomatic
else
badOption = true;
}
else if (arg.equals("-summary"))
{
if (argIndex < args.length)
statsSummary = new File(args[argIndex++]);
else
badOption = true;
}
else if (arg.equals("-quiet"))
quiet=true;
else if (arg.equals("-version"))
......@@ -303,7 +318,7 @@ public class TrimmomaticSE extends Trimmomatic
Trimmer trimmers[]=createTrimmers(logger, nonOptionArgsIter);
TrimmomaticSE tm = new TrimmomaticSE(logger);
tm.process(input, output, trimmers, phredOffset, trimLog, threads);
tm.process(input, output, trimmers, phredOffset, trimLog, statsSummary, threads);
logger.infoln("TrimmomaticSE: Completed successfully");
return true;
......@@ -314,7 +329,7 @@ public class TrimmomaticSE extends Trimmomatic
if(!run(args))
{
System.err
.println("Usage: TrimmomaticSE [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-quiet] <inputFile> <outputFile> <trimmer1>...");
.println("Usage: TrimmomaticSE [-version] [-threads <threads>] [-phred33|-phred64] [-trimlog <trimLogFile>] [-summary <statsSummaryFile>] [-quiet] <inputFile> <outputFile> <trimmer1>...");
System.exit(1);
}
}
......
package org.usadellab.trimmomatic.trim;
import java.util.BitSet;
import org.usadellab.trimmomatic.fastq.FastqRecord;
public class BaseCountTrimmer extends AbstractSingleRecordTrimmer
{
private int minCount=0;
private Integer maxCount=null;
private BitSet baseSet;
public BaseCountTrimmer(String args)
{
String split[]=args.split(":");
baseSet=new BitSet();
String bases=split[0];
for(int i=0;i<bases.length();i++)
{
char c=bases.charAt(i);
baseSet.set(c);
}
if(split.length>1)
{
minCount=Integer.parseInt(split[1]);
if(split.length>2)
maxCount=new Integer(split[2]);
}
}
@Override
public FastqRecord processRecord(FastqRecord in)
{
int count=0;
String seq=in.getSequence();
for(int i=0;i<seq.length();i++)
{
char c=seq.charAt(i);
if(baseSet.get(c))
count++;
}
if(count<minCount)
return null;
if(maxCount!=null && count>maxCount)
return null;
return in;
}
}
......@@ -61,6 +61,9 @@ public class TrimmerFactory
if(trimmerName.equals("AVGQUAL"))
return new AvgQualTrimmer(args);
if(trimmerName.equals("BASECOUNT"))
return new BaseCountTrimmer(args);
if(trimmerName.equals("TOPHRED33"))
return new ToPhred33Trimmer(args);
......