gatk-3.8/java/lib/edu/mit/broad/picard/illumina/BustardReadData.java

129 lines
4.6 KiB
Java

/*
* The Broad Institute
* SOFTWARE COPYRIGHT NOTICE AGREEMENT
* This software and its documentation are copyright 2009 by the
* Broad Institute/Massachusetts Institute of Technology. All rights are reserved.
*
* This software is supplied without any warranty or guaranteed support whatsoever. Neither
* the Broad Institute nor MIT can be responsible for its use, misuse, or functionality.
*/
package edu.mit.broad.picard.illumina;
/**
* Holds all the Bustard-level data we need (so far) about an individual read.
*
* @author Kathleen Tibbetts
*/
public class BustardReadData {
private static final String PADDING ="00000";
final private String machineName;
final private int runNumber;
final private int laneNumber;
final private int tileNumber;
final private String firstReadSequence;
final private String firstReadQualities;
final private String secondReadSequence;
final private String secondReadQualities;
final private boolean pf;
final private double intensities[][];
final private int xCoordinate;
final private int yCoordinate;
private final SolexaQualityConverter converter = new SolexaQualityConverter();
/**
* Constructor that takes everything to populate this object
*
* @param machineName
* @param runNumber
* @param laneNumber
* @param tileNumber
* @param firstReadSequence
* @param firstReadQualities
* @param secondReadSequence
* @param secondReadQualities
* @param pf
* @param intensities
* @param xCoordinate
* @param yCoordinate
*/
public BustardReadData(String machineName, int runNumber, int laneNumber, int tileNumber,
String firstReadSequence, String firstReadQualities,
String secondReadSequence, String secondReadQualities,
boolean pf, double[][] intensities, int xCoordinate, int yCoordinate ) {
this.machineName = machineName;
this.runNumber = runNumber;
this.laneNumber = laneNumber;
this.tileNumber = tileNumber;
this.firstReadSequence = firstReadSequence;
this.firstReadQualities = firstReadQualities;
this.secondReadSequence = secondReadSequence;
this.secondReadQualities = secondReadQualities;
this.pf = pf;
this.intensities = intensities;
this.xCoordinate = xCoordinate;
this.yCoordinate = yCoordinate;
}
// TODO: Finalize read name -- ask Tim
/**
* Composes a name for this read from its values
*
* @return the read name
*/
public String getReadName() {
return this.machineName + ":" + this.laneNumber + ":" + this.tileNumber +
":" + this.xCoordinate + ":" + this.yCoordinate;
}
/**
* Gets Phred-style qualitites for the first read
*
* @return the String of qualities
*/
public String getFirstReadPhredQualities() {
return decodeSolexaQualitiesToPhred(getFirstReadQualities());
}
/**
* Gets Phred-style qualitites for the second read
*
* @return the String of qualities
*/
public String getSecondReadPhredQualities() {
return decodeSolexaQualitiesToPhred(getSecondReadQualities());
}
/**
* Converts a string of Solexa qualities to a Phred-style quality String
*
* @param qualities the Solexa qualities to decode
* @return the String of Phred qualities
*/
private String decodeSolexaQualitiesToPhred(String qualities) {
StringBuilder sb = new StringBuilder();
for (char c : qualities.toCharArray()) {
// Quality char is phred score + 33
sb.append((char)(converter.solexaToPhred((byte)c)+33));
}
return sb.toString();
}
public String getMachineName() { return machineName; }
public int getRunNumber() { return runNumber; }
public int getLaneNumber() { return laneNumber; }
public int getTileNumber() { return tileNumber; }
public String getFirstReadSequence() { return firstReadSequence; }
public String getFirstReadQualities() { return firstReadQualities; }
public String getSecondReadSequence() { return secondReadSequence; }
public String getSecondReadQualities() { return secondReadQualities; }
public double[][] getIntensities() { return intensities; }
public boolean isPf() { return pf; }
public int getXCoordinate() { return xCoordinate; }
public int getYCoordinate() { return yCoordinate; }
}