Commit d2edfdea authored by Andreas Tille's avatar Andreas Tille
Browse files

New upstream version 0.38+dfsg

parent c39d405c
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
<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" />
+59 −34
Original line number Diff line number Diff line
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)+"%)";

	}
+2 −2
Original line number Diff line number Diff line
@@ -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);
+26 −10
Original line number Diff line number Diff line
@@ -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);
			}
	}
+24 −9
Original line number Diff line number Diff line
@@ -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);
			}
	}
Loading