At Picard team's request, generate md5s for generated BAM files.

git-svn-id: file:///humgen/gsa-scr1/gsa-engineering/svn_contents/trunk@5954 348d0f76-0448-11de-a6fe-93d51630548a
This commit is contained in:
hanna 2011-06-07 04:25:40 +00:00
parent 311dfa0998
commit ca48ea78df
3 changed files with 70 additions and 15 deletions

View File

@ -60,16 +60,13 @@ public class SAMFileWriterStorage implements SAMFileWriter, Storage<SAMFileWrite
// Enable automatic index creation for pre-sorted BAMs.
if (stub.getFileHeader().getSortOrder().equals(SAMFileHeader.SortOrder.coordinate) && stub.getIndexOnTheFly())
factory.setCreateIndex(true);
if (stub.getGenerateMD5())
factory.setCreateMd5File(true);
// Adjust max records in RAM.
if(stub.getMaxRecordsInRam() != null)
factory.setMaxRecordsInRam(stub.getMaxRecordsInRam());
if(stub.getSAMFile() != null) {
// HACK: Turn setCreateIndex off if the SAM file is null. Picard has pledged to fix this
// during the week of 14 Sept 2010. Eliminate this check when they do.
if(stub.getSAMFile().getPath().equals("/dev/null"))
factory.setCreateIndex(false);
try {
this.writer = createBAMWriter(factory,stub.getFileHeader(),stub.isPresorted(),file,stub.getCompressionLevel());
}

View File

@ -52,6 +52,7 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
public static final String SIMPLIFY_BAM_SHORTNAME = SIMPLIFY_BAM_FULLNAME;
public static final String DISABLE_INDEXING_FULLNAME = "disable_bam_indexing";
public static final String ENABLE_MD5_FULLNAME = "generate_md5";
/**
* The engine into which output stubs should be fed.
@ -83,6 +84,7 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
return Arrays.asList( createBAMArgumentDefinition(source),
createBAMCompressionArgumentDefinition(source),
disableWriteIndexArgumentDefinition(source),
enableMD5GenerationArgumentDefinition(source),
createSimplifyBAMArgumentDefinition(source));
}
@ -102,23 +104,39 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
@Override
public Object parse( ParsingEngine parsingEngine, ArgumentSource source, Class type, ArgumentMatches matches ) {
// Extract all possible parameters that could be passed to a BAM file writer?
ArgumentDefinition bamArgumentDefinition = createBAMArgumentDefinition(source);
String writerFileName = getArgumentValue( bamArgumentDefinition, matches );
// This parser has been passed a null filename and the GATK is not responsible for creating a type default for the object;
// therefore, the user must have failed to specify a type default
if(writerFileName == null && !source.isRequired())
throw new MissingArgumentValueException(bamArgumentDefinition);
SAMFileWriterStub stub = new SAMFileWriterStub(engine, new File(writerFileName));
String compressionLevelText = getArgumentValue( createBAMCompressionArgumentDefinition(source), matches );
Integer compressionLevel = compressionLevelText != null ? Integer.valueOf(compressionLevelText) : null;
Boolean indexOnTheFly = !argumentIsPresent(disableWriteIndexArgumentDefinition(source),matches) ? true : null;
Boolean generateMD5 = argumentIsPresent(this.enableMD5GenerationArgumentDefinition(source),matches) ? true : null;
Boolean simplifyBAM = argumentIsPresent(createSimplifyBAMArgumentDefinition(source),matches);
// Validate the combination of parameters passed in.
// This parser has been passed a null filename and the GATK is not responsible for creating a type default for the object;
// therefore, the user must have failed to specify a type default
if(writerFileName == null) {
if(!source.isRequired())
throw new MissingArgumentValueException(bamArgumentDefinition);
if(generateMD5)
throw new ArgumentException("MD5 generation specified, but no output file specified. If md5 generation is desired, please specify a BAM output file and an md5 file will be written alongside.");
}
// Create the stub and set parameters.
SAMFileWriterStub stub = new SAMFileWriterStub(engine, new File(writerFileName));
if( compressionLevel != null )
stub.setCompressionLevel(compressionLevel);
stub.setIndexOnTheFly(!argumentIsPresent(disableWriteIndexArgumentDefinition(source),matches));
stub.setSimplifyBAM(argumentIsPresent(createSimplifyBAMArgumentDefinition(source),matches));
if(indexOnTheFly != null)
stub.setIndexOnTheFly(indexOnTheFly);
if(generateMD5 != null)
stub.setGenerateMD5(generateMD5);
if(simplifyBAM != null)
stub.setSimplifyBAM(simplifyBAM);
// WARNING: Side effects required by engine!
parsingEngine.addTags(stub,getArgumentTags(matches));
@ -187,6 +205,23 @@ public class SAMFileWriterArgumentTypeDescriptor extends ArgumentTypeDescriptor
null );
}
private ArgumentDefinition enableMD5GenerationArgumentDefinition(ArgumentSource source) {
return new ArgumentDefinition( ArgumentIOType.ARGUMENT,
boolean.class,
ENABLE_MD5_FULLNAME,
null,
"Enable on-the-fly creation of md5s for output BAM files.",
false,
true,
false,
source.isHidden(),
null,
null,
null,
null );
}
private ArgumentDefinition createSimplifyBAMArgumentDefinition(ArgumentSource source) {
return new ArgumentDefinition( ArgumentIOType.ARGUMENT,
boolean.class,

View File

@ -77,6 +77,11 @@ public class SAMFileWriterStub implements Stub<SAMFileWriter>, StingSAMFileWrite
*/
private boolean indexOnTheFly = false;
/**
* Should the GATK generate an md5 for the output BAM?
*/
private boolean generateMD5 = false;
/**
* Should this BAM be presorted?
*/
@ -198,6 +203,24 @@ public class SAMFileWriterStub implements Stub<SAMFileWriter>, StingSAMFileWrite
this.indexOnTheFly = indexOnTheFly;
}
/**
* Gets whether to generate an md5 on-the-fly for this BAM.
* @return True generates the md5. False means skip writing the file.
*/
public Boolean getGenerateMD5() {
return generateMD5;
}
/**
* Gets whether to generate an md5 on-the-fly for this BAM.
* @return True generates the md5. False means skip writing the file.
*/
public void setGenerateMD5(boolean generateMD5) {
if(writeStarted)
throw new UserException("Attempted to turn on md5 generation for BAM file with alignments already in it.");
this.generateMD5 = generateMD5;
}
/**
* Whether the BAM file to create is actually presorted.
* @return True if the BAM file is presorted. False otherwise.