First working version of VariantContextBenchmark
This commit is contained in:
parent
ee40791776
commit
e216e85465
|
|
@ -0,0 +1,121 @@
|
||||||
|
/*
|
||||||
|
* Copyright (c) 2011, The Broad Institute
|
||||||
|
*
|
||||||
|
* Permission is hereby granted, free of charge, to any person
|
||||||
|
* obtaining a copy of this software and associated documentation
|
||||||
|
* files (the "Software"), to deal in the Software without
|
||||||
|
* restriction, including without limitation the rights to use,
|
||||||
|
* copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||||
|
* copies of the Software, and to permit persons to whom the
|
||||||
|
* Software is furnished to do so, subject to the following
|
||||||
|
* conditions:
|
||||||
|
*
|
||||||
|
* The above copyright notice and this permission notice shall be
|
||||||
|
* included in all copies or substantial portions of the Software.
|
||||||
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||||
|
* EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
|
||||||
|
* OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||||
|
* NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT
|
||||||
|
* HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||||
|
* WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||||
|
* FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
|
||||||
|
* OTHER DEALINGS IN THE SOFTWARE.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package org.broadinstitute.sting.utils.variantcontext;
|
||||||
|
|
||||||
|
import com.google.caliper.Param;
|
||||||
|
import com.google.caliper.SimpleBenchmark;
|
||||||
|
import com.google.caliper.runner.CaliperMain;
|
||||||
|
import org.broad.tribble.readers.AsciiLineReader;
|
||||||
|
import org.broadinstitute.sting.utils.codecs.vcf.VCFCodec;
|
||||||
|
|
||||||
|
import java.io.*;
|
||||||
|
import java.util.*;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Caliper microbenchmark of parsing a VCF file
|
||||||
|
*/
|
||||||
|
public class VariantContextBenchmark extends SimpleBenchmark {
|
||||||
|
@Param({"/Users/depristo/Desktop/broadLocal/localData/ALL.chr20.merged_beagle_mach.20101123.snps_indels_svs.genotypes.vcf"})
|
||||||
|
String vcfFile;
|
||||||
|
|
||||||
|
@Param({"1000"})
|
||||||
|
int linesToRead; // set automatically by framework
|
||||||
|
|
||||||
|
@Param({"100"})
|
||||||
|
int nSamplesToTake; // set automatically by framework
|
||||||
|
|
||||||
|
private String INPUT_STRING;
|
||||||
|
|
||||||
|
private enum Operation {
|
||||||
|
READ,
|
||||||
|
READ_SUBSET
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override protected void setUp() {
|
||||||
|
// read it into a String so that we don't try to benchmark IO issues
|
||||||
|
try {
|
||||||
|
FileInputStream s = new FileInputStream(new File(vcfFile));
|
||||||
|
AsciiLineReader lineReader = new AsciiLineReader(s);
|
||||||
|
int counter = 0;
|
||||||
|
StringBuffer sb = new StringBuffer();
|
||||||
|
while (counter++ < linesToRead ) {
|
||||||
|
String line = lineReader.readLine();
|
||||||
|
if ( line == null )
|
||||||
|
break;
|
||||||
|
sb.append(line + "\n");
|
||||||
|
}
|
||||||
|
s.close();
|
||||||
|
INPUT_STRING = sb.toString();
|
||||||
|
} catch (IOException e) {
|
||||||
|
throw new RuntimeException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void parseGenotypes(VCFCodec codec, Operation op) {
|
||||||
|
try {
|
||||||
|
InputStream is = new ByteArrayInputStream(INPUT_STRING.getBytes());
|
||||||
|
AsciiLineReader lineReader = new AsciiLineReader(is);
|
||||||
|
codec.readHeader(lineReader);
|
||||||
|
|
||||||
|
int counter = 0;
|
||||||
|
List<String> samples = null;
|
||||||
|
while (counter++ < linesToRead ) {
|
||||||
|
String line = lineReader.readLine();
|
||||||
|
if ( line == null )
|
||||||
|
break;
|
||||||
|
|
||||||
|
VariantContext vc = (VariantContext)codec.decode(line);
|
||||||
|
if ( samples == null ) {
|
||||||
|
samples = new ArrayList<String>(vc.getSampleNames()).subList(0, nSamplesToTake);
|
||||||
|
}
|
||||||
|
|
||||||
|
if ( op == Operation.READ_SUBSET)
|
||||||
|
processOneVC(vc, samples);
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
System.out.println("Benchmarking run failure because of " + e.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
public void timeOriginalRead(int rep) {
|
||||||
|
for ( int i = 0; i < rep; i++ )
|
||||||
|
parseGenotypes(new VCFCodec(), Operation.READ);
|
||||||
|
}
|
||||||
|
|
||||||
|
public void timeOriginalReadSubset(int rep) {
|
||||||
|
for ( int i = 0; i < rep; i++ )
|
||||||
|
parseGenotypes(new VCFCodec(), Operation.READ_SUBSET);
|
||||||
|
}
|
||||||
|
|
||||||
|
public static void main(String[] args) {
|
||||||
|
CaliperMain.main(VariantContextBenchmark.class, args);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static final void processOneVC(VariantContext vc, List<String> samples) {
|
||||||
|
VariantContext sub = vc.subContextFromGenotypes(vc.getGenotypes(samples).values(), vc.getAlleles());
|
||||||
|
sub.getNSamples();
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
Loading…
Reference in New Issue