inc/crudeali.h File Reference

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

Go to the source code of this file.

Data Structures

struct  crudeAli

Functions

crudeAlicrudeAliFind (DNA *probe, int probeSize, struct nt4Seq **chrome, int chromeCount, int tileSize, int minScore)


Function Documentation

struct crudeAli* crudeAliFind ( DNA probe,
int  probeSize,
struct nt4Seq **  chrome,
int  chromeCount,
int  tileSize,
int  minScore 
) [read]

Definition at line 794 of file crudeali.c.

References AllocVar, caIsCdna, caTileSize, chromIx(), cmpGenesByScore(), countGenesBetter(), countPrettyGood(), filterPoorGenes(), findCrudeGenes(), freeFastProber(), freeMem(), initWormDnaMatchScores(), makeFastProber(), maxHitsAtOnce, needMem(), reverseComplement(), scoreNoninsertingExtensions(), slAddHead, and slReverse().

Referenced by xenAlignBig(), and xenAlignWorm().

00797 {
00798 int oneGeneCount;
00799 int i;
00800 int chromeIx;
00801 int geneCount = 0;
00802 int maxGeneCount = 2*maxHitsAtOnce;
00803 int isRc;
00804 struct nt4Seq *target;
00805 struct crudeGene *crudeGenes = needMem(maxGeneCount*sizeof(*crudeGenes));
00806 struct fastProber *fps[2];
00807 struct crudeAli *aliList = NULL, *ali;
00808 int goodGeneCount;
00809 
00810 initWormDnaMatchScores();
00811 caTileSize = tileSize;
00812 caIsCdna = (tileSize >= 14);
00813 fps[0] = makeFastProber(probe, probeSize);
00814 reverseComplement(probe, probeSize);
00815 fps[1] = makeFastProber(probe, probeSize);
00816 reverseComplement(probe, probeSize);
00817 for (chromeIx = 0; chromeIx < chromeCount; ++chromeIx)
00818     {
00819     target = chrome[chromeIx];
00820     for (isRc = 0; isRc <= 1; ++isRc)
00821         {
00822         /* Get crude idea of genes on one strand. */
00823         oneGeneCount = findCrudeGenes(fps[isRc], target, 
00824             crudeGenes+geneCount, maxGeneCount-geneCount, isRc);
00825             
00826         /* Increment gene count and if necessary compact list. */
00827         geneCount += oneGeneCount;
00828         if (maxGeneCount - geneCount < maxHitsAtOnce)
00829             geneCount = filterPoorGenes(crudeGenes, geneCount);
00830         }
00831     if (maxGeneCount - geneCount < maxHitsAtOnce)
00832         break;
00833     }
00834 
00835 /* Sort genes by initial promise and get rid of some trash. */
00836     {
00837     int bestScore, worstScore;
00838     qsort(crudeGenes, geneCount, sizeof(crudeGenes[0]), cmpGenesByScore);
00839     bestScore = crudeGenes[0].score;
00840     worstScore = crudeGenes[geneCount-1].score;
00841     if (bestScore > worstScore)
00842         {
00843         int cutOff = bestScore/10;
00844         goodGeneCount = geneCount = countGenesBetter(crudeGenes, geneCount, cutOff);
00845         }
00846     else if (bestScore >= minScore)
00847         goodGeneCount = geneCount;
00848     else
00849         goodGeneCount = 0;
00850     }
00851 
00852 if (tileSize == 8)
00853     {
00854     goodGeneCount = countPrettyGood(crudeGenes, geneCount, 4, 4);
00855     geneCount = goodGeneCount;
00856     for (i=0; i<geneCount; ++i)
00857         scoreNoninsertingExtensions(crudeGenes+i, probe, probeSize);
00858     qsort(crudeGenes, geneCount, sizeof(crudeGenes[0]), cmpGenesByScore);
00859     goodGeneCount = countPrettyGood(crudeGenes, geneCount, 4, minScore);
00860     }
00861 for (i=0; i<goodGeneCount; ++i)
00862     {
00863     AllocVar(ali);
00864     ali->chromIx = chromIx(crudeGenes[i].target, chrome, chromeCount);
00865     ali->start = crudeGenes[i].targetStart;
00866     ali->end = crudeGenes[i].targetEnd;
00867     ali->score = crudeGenes[i].score;
00868     ali->strand = (crudeGenes[i].isRc ? '-' : '+');
00869     slAddHead(&aliList, ali);
00870     }
00871 slReverse(&aliList);
00872 freeFastProber(&fps[0]);
00873 freeFastProber(&fps[1]);
00874 freeMem(crudeGenes);
00875 
00876 return aliList;
00877 }

Here is the call graph for this function:

Here is the caller graph for this function:


Generated on Tue Dec 25 18:50:15 2007 for blat by  doxygen 1.5.2