/* * Genoogle: Similar DNA Sequences Searching Engine and Tools. (http://genoogle.pih.bio.br) * Copyright (C) 2008,2009 Felipe Fernandes Albrecht (felipe.albrecht@gmail.com) * * For further information check the LICENSE file. */ package bio.pih.genoogle.search; import java.util.List; import java.util.concurrent.CountDownLatch; import bio.pih.genoogle.alignment.GenoogleSequenceAlignment; import bio.pih.genoogle.encoder.SequenceEncoder; import bio.pih.genoogle.io.IndexedSequenceDataBank; import bio.pih.genoogle.search.results.HSP; import bio.pih.genoogle.seq.SymbolList; import bio.pih.genoogle.statistics.Statistics; public class IndexReverseSearcher extends IndexSearcher { public IndexReverseSearcher(long id, SearchParams sp, IndexedSequenceDataBank databank, SequenceEncoder encoder, int subSequenceLength, String sliceQuery, int offset, SymbolList query, int[] encodedQuery, List<RetrievedArea>[] rcRetrievedAreas, Statistics statistics, CountDownLatch countDown, List<Throwable> fails, int readFrame) { super(id, sp, databank, encoder, subSequenceLength, sliceQuery, offset, query, encodedQuery, rcRetrievedAreas, statistics, countDown, fails, readFrame); } public IndexReverseSearcher(long id, SearchParams sp, IndexedSequenceDataBank databank, String sliceQuery, int offset, SymbolList query, int[] encodedQuery, List<RetrievedArea>[] rcRetrievedAreas, Statistics statistics, CountDownLatch countDown, List<Throwable> fails, int readFrame) { super(id, sp, databank, sliceQuery, offset, query, encodedQuery, rcRetrievedAreas, statistics, countDown, fails, readFrame); } @Override public String toString() { StringBuilder sb = new StringBuilder(Long.toString(id)); sb.append(" (inverted) "); return sb.toString(); } @Override protected HSP createHSP(ExtendSequences extensionResult, GenoogleSequenceAlignment smithWaterman, double normalizedScore, double evalue, int queryLength, int targetLength) { return new HSP(smithWaterman, getQueryStart(extensionResult, smithWaterman), getQueryEnd( extensionResult, smithWaterman), getTargetStart(extensionResult, smithWaterman, targetLength), getTargetEnd(extensionResult, smithWaterman, targetLength), normalizedScore, evalue); } private int getQueryStart(ExtendSequences extensionResult, GenoogleSequenceAlignment smithWaterman) { return extensionResult.getBeginQuerySegment() + smithWaterman.getQueryStart(); } private int getQueryEnd(ExtendSequences extensionResult, GenoogleSequenceAlignment smithWaterman) { return extensionResult.getBeginQuerySegment() + smithWaterman.getQueryEnd(); } private int getTargetStart(ExtendSequences extensionResult, GenoogleSequenceAlignment smithWaterman, int targetLength) { return extensionResult.getBeginTargetSegment() + smithWaterman.getTargetEnd(); } private int getTargetEnd(ExtendSequences extensionResult, GenoogleSequenceAlignment smithWaterman, int targetLength) { return extensionResult.getBeginTargetSegment() + smithWaterman.getTargetStart(); } }