package structures; import java.util.Arrays; import dna.AminoAcid; import shared.KillSwitch; import shared.Tools; import stream.Read; /** * Tracks the number of homopolymers observed of given lengths. * Only the longest homopolymer for a given base is counted per sequence. * @author Brian Bushnell * @date August 27, 2018 * */ public class PolymerTracker { /*--------------------------------------------------------------*/ /*---------------- Initialization ----------------*/ /*--------------------------------------------------------------*/ public PolymerTracker(){ reset(); } public void reset(){ Arrays.fill(maxACGTN, 0); for(int i=0; i<5; i++){ countsACGTN[i]=new LongList(); } } /*--------------------------------------------------------------*/ /*---------------- Public Add Methods ----------------*/ /*--------------------------------------------------------------*/ public void addPair(Read r){ if(r==null){return;} add(r.bases); add(r.mate); } public void add(Read r){ if(r==null){return;} add(r.bases); } public void add(PolymerTracker pt){ for(int i=0; i<5; i++){ LongList list=countsACGTN[i]; LongList ptList=pt.countsACGTN[i]; for(int len=0; len=0; len--){ sumList.set(len, sumList.get(len+1)+list.get(len)); } sums[i]=sumList; } cumulativeACGTN=sums; return sums; } //Non-cumulative public String toHistogram(){ StringBuilder sb=new StringBuilder(); sb.append("#Length\tA\tC\tG\tT\tN\n"); final int maxIndex=longest(); for(int len=0; len