include/tableGappedScoring.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

int4 tableGappedScoring_score (struct ungappedExtension *ungappedExtension, struct PSSMatrix PSSMatrix, int4 subjectSize, unsigned char *packedSubject, int4 dropoff)


Function Documentation

int4 tableGappedScoring_score ( struct ungappedExtension ungappedExtension,
struct PSSMatrix  PSSMatrix,
int4  subjectSize,
unsigned char *  packedSubject,
int4  dropoff 
)

Definition at line 34 of file tableGappedScoring.c.

References dpResults::best, dpResults::bestScore, blast_dloc, blast_numSemiGapped, ungappedExtension::end, int4, ungappedExtension::nominalScore, parameters_bytepackDropoffDecrease, parameters_verboseDloc, PSSMatrix_chop(), coordinate::queryOffset, ungappedExtension::seed, ungappedExtension::start, coordinate::subjectOffset, tableGappedScoring_buildTable(), tableGappedScoring_dpAfterSeed(), tableGappedScoring_dpBeforeSeed(), and tableGappedScoring_table.

Referenced by alignments_findGoodAlignments().

00036 {
00037     struct coordinate seed;
00038     unsigned char *choppedSubject;
00039     struct PSSMatrix choppedPSSMatrix;
00040     int4 choppedSubjectSize, score, packedSubjectSize;
00041     struct dpResults beforeDpResults, afterDpResults;
00042 
00043     // Increment counter number of HSP's semi-gapped
00044         blast_numSemiGapped++;
00045 
00046     dropoff -= parameters_bytepackDropoffDecrease;
00047 
00048     // Calculate packed subject size
00049     packedSubjectSize = (subjectSize + 3) / 4;
00050 
00051     seed = ungappedExtension->seed;
00052 
00053     // Adjust to point to start of byte
00054     seed.queryOffset -= 2;
00055     seed.subjectOffset -= 2;
00056 
00057     if (tableGappedScoring_table == NULL)
00058         tableGappedScoring_buildTable();
00059 
00060     // Update the seed to point to byte-packed sequences
00061         seed.subjectOffset /= 4;
00062 
00063 //    printf("Seed=%d,%d\n", seed.queryOffset, seed.subjectOffset); fflush(stdout);
00064 
00065     // Perform dynamic programming for pointsinitialTable before the seed
00066     beforeDpResults = tableGappedScoring_dpBeforeSeed(packedSubject, PSSMatrix, seed, dropoff);
00067 
00068 //    printf("Score=%d\n", beforeDpResults.bestScore);
00069 
00070         // Adjust starting position to point to non-bytepacked subject
00071         beforeDpResults.best.subjectOffset *= 4;
00072 
00073     // Chop the start off the query and subject so they begin at the seed
00074     choppedPSSMatrix = PSSMatrix_chop(PSSMatrix, seed.queryOffset - 1);
00075     choppedSubject = packedSubject + seed.subjectOffset;
00076     choppedSubjectSize = packedSubjectSize - seed.subjectOffset;
00077 
00078 //    printf("[[%d]]", PSSMatrix.queryCodes[0]);
00079 //    encoding_printLetters(PSSMatrix.xorCodes[0], 4);
00080 
00081     // Perform dynamic programming for points after the seed
00082     afterDpResults = tableGappedScoring_dpAfterSeed(choppedSubject, choppedPSSMatrix,
00083                                                     dropoff, choppedSubjectSize);
00084 
00085     // Re-adjust result change due to chopping subject/query and byte packing
00086     afterDpResults.best.queryOffset += seed.queryOffset - 1;
00087     afterDpResults.best.subjectOffset = (afterDpResults.best.subjectOffset + seed.subjectOffset) * 4;
00088 
00089     // Extend out ends slightly
00090         beforeDpResults.best.queryOffset -= 2;
00091         beforeDpResults.best.subjectOffset -= 2;
00092         afterDpResults.best.queryOffset += 6;
00093         afterDpResults.best.subjectOffset += 6;
00094 
00095     #ifdef VERBOSE
00096     if (parameters_verboseDloc == blast_dloc)
00097         printf("table[%d,%d](seed=%d,%d)\n", beforeDpResults.bestScore, afterDpResults.bestScore,
00098                                              seed.queryOffset, seed.subjectOffset * 4);
00099     #endif
00100 
00101     // Determine score by combining score from the two traces, and the match score at
00102     // the seed position
00103     score = beforeDpResults.bestScore + afterDpResults.bestScore;
00104 
00105 //      printf("Table score=%d/%d\n", score, ungappedExtension->nominalScore);
00106 
00107         // Use ungapped alignment score and endpoints if better
00108     if (ungappedExtension->nominalScore > score)
00109     {
00110         score = ungappedExtension->nominalScore;
00111         }
00112     else
00113     {
00114         // Associate best scoring start and end points with the ungapped extension
00115         ungappedExtension->start = beforeDpResults.best;
00116         ungappedExtension->end = afterDpResults.best;
00117     }
00118 
00119     return score;
00120 }

Here is the call graph for this function:

Here is the caller graph for this function:


Generated on Wed Dec 19 20:52:21 2007 for fsa-blast by  doxygen 1.5.2