package bio.pih.genoogle.search;
import java.io.IOException;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import bio.pih.genoogle.io.IndexedSequenceDataBank;
import bio.pih.genoogle.io.proto.Io.StoredSequence;
public class RetrievedSequenceAreas {
private final ArrayList<RetrievedArea> LIST_EMPTY = new ArrayList<RetrievedArea>(0);
private final int sequenceId;
private final int biggestHspLength;
private final ArrayList<RetrievedArea>[] areas;
private final ArrayList<RetrievedArea>[] rcAreas;
private final int frames;
private final IndexedSequenceDataBank databank;
@SuppressWarnings("unchecked")
public RetrievedSequenceAreas(int sequenceId, IndexedSequenceDataBank databank, ArrayList<RetrievedArea> ... areas) {
this.sequenceId = sequenceId;
this.databank = databank;
this.frames = areas.length / 2;
this.areas = new ArrayList[frames];
this.rcAreas = new ArrayList[frames];
for (int i = 0; i < frames; i++) {
if (areas[i] != null && areas[i].size() > 0) {
this.areas[i] = areas[i];
} else {
this.areas[i] = LIST_EMPTY;
}
if (areas[i+frames] != null && areas[i+frames].size() > 0 ) {
this.rcAreas[i] = areas[i+frames];
} else {
this.rcAreas[i] = LIST_EMPTY;
}
}
this.biggestHspLength = Math.max(getBiggestHspLength(this.areas), getBiggestHspLength(this.rcAreas));
}
private int getBiggestHspLength(List<RetrievedArea>[] areas) {
int biggest = 0;
for (int i = 0; i < this.frames; i++) {
for (RetrievedArea area : areas[i]) {
if (area.length() > biggest) {
biggest = area.length();
}
}
}
return biggest;
}
public int getFrames() {
return frames;
}
public List<RetrievedArea>[] getAreas() {
return areas;
}
public StoredSequence getStoredSequence() throws IOException {
return databank.getSequenceFromId(sequenceId);
}
public List<RetrievedArea>[] getReverseComplementAreas() {
return rcAreas;
}
public int getBiggestLength() {
return biggestHspLength;
}
public int getSequenceId() {
return sequenceId;
}
@Override
public String toString() {
return sequenceId + " " + biggestHspLength + " " + Arrays.toString(areas) + " " + Arrays.toString(rcAreas);
}
}