[med-svn] [Git][med-team/trimmomatic][upstream] New upstream version 0.38+dfsg

Andreas Tille gitlab at salsa.debian.org
Tue May 22 16:35:29 BST 2018


Andreas Tille pushed to branch upstream at Debian Med / trimmomatic


Commits:
d2edfdea by Andreas Tille at 2018-05-22T17:28:35+02:00
New upstream version 0.38+dfsg
- - - - -


8 changed files:

- build.xml
- src/org/usadellab/trimmomatic/TrimStats.java
- src/org/usadellab/trimmomatic/Trimmomatic.java
- src/org/usadellab/trimmomatic/TrimmomaticPE.java
- src/org/usadellab/trimmomatic/TrimmomaticSE.java
- + src/org/usadellab/trimmomatic/trim/BaseCountTrimmer.java
- src/org/usadellab/trimmomatic/trim/TailCropTrimmer.java
- src/org/usadellab/trimmomatic/trim/TrimmerFactory.java


Changes:

=====================================
build.xml
=====================================
--- a/build.xml
+++ b/build.xml
@@ -1,5 +1,5 @@
 <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" />


=====================================
src/org/usadellab/trimmomatic/TrimStats.java
=====================================
--- a/src/org/usadellab/trimmomatic/TrimStats.java
+++ b/src/org/usadellab/trimmomatic/TrimStats.java
@@ -1,5 +1,8 @@
 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;
 
-		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)+
+		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: "+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)+"%)";
 
 	}


=====================================
src/org/usadellab/trimmomatic/Trimmomatic.java
=====================================
--- a/src/org/usadellab/trimmomatic/Trimmomatic.java
+++ b/src/org/usadellab/trimmomatic/Trimmomatic.java
@@ -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);


=====================================
src/org/usadellab/trimmomatic/TrimmomaticPE.java
=====================================
--- a/src/org/usadellab/trimmomatic/TrimmomaticPE.java
+++ b/src/org/usadellab/trimmomatic/TrimmomaticPE.java
@@ -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);
 			}
 	}


=====================================
src/org/usadellab/trimmomatic/TrimmomaticSE.java
=====================================
--- a/src/org/usadellab/trimmomatic/TrimmomaticSE.java
+++ b/src/org/usadellab/trimmomatic/TrimmomaticSE.java
@@ -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);
 			}
 	}


=====================================
src/org/usadellab/trimmomatic/trim/BaseCountTrimmer.java
=====================================
--- /dev/null
+++ b/src/org/usadellab/trimmomatic/trim/BaseCountTrimmer.java
@@ -0,0 +1,58 @@
+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;
+	}
+
+}


=====================================
src/org/usadellab/trimmomatic/trim/TailCropTrimmer.java
=====================================
--- a/src/org/usadellab/trimmomatic/trim/TailCropTrimmer.java
+++ b/src/org/usadellab/trimmomatic/trim/TailCropTrimmer.java
@@ -12,7 +12,7 @@ public class TailCropTrimmer extends AbstractSingleRecordTrimmer
 		String arg[]=args.split(":");
 	
 		bases=Integer.parseInt(arg[0]);
-	
+		
 		if(arg.length>1)
 			maxLength=Integer.parseInt(arg[1]);
 	}


=====================================
src/org/usadellab/trimmomatic/trim/TrimmerFactory.java
=====================================
--- a/src/org/usadellab/trimmomatic/trim/TrimmerFactory.java
+++ b/src/org/usadellab/trimmomatic/trim/TrimmerFactory.java
@@ -60,6 +60,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);



View it on GitLab: https://salsa.debian.org/med-team/trimmomatic/commit/d2edfdeaf8ed8883aebb02a251b04521b5a70c00

---
View it on GitLab: https://salsa.debian.org/med-team/trimmomatic/commit/d2edfdeaf8ed8883aebb02a251b04521b5a70c00
You're receiving this email because of your account on salsa.debian.org.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://alioth-lists.debian.net/pipermail/debian-med-commit/attachments/20180522/33496e1f/attachment-0001.html>


More information about the debian-med-commit mailing list