From 665b22989f606961a056030d9d7a7691132df105 Mon Sep 17 00:00:00 2001 From: Eric Coissac Date: Thu, 12 Mar 2009 09:55:01 +0000 Subject: [PATCH] first version with preliminary print function git-svn-id: https://www.grenoble.prabi.fr/svn/LECASofts/ecoPrimers/branches/eric-test@186 60f365c0-8329-0410-b2a4-ec073aeeaa1d --- src/ecoPrimer | Bin 58176 -> 62632 bytes src/ecoprimer.c | 97 ++++++++++++++++++++++++++- src/libecoprimer/ecoprimer.h | 8 ++- src/libecoprimer/pairs.c | 126 +++++++---------------------------- src/libecoprimer/pairtree.c | 2 + src/libecoprimer/taxstats.c | 46 +++++++++++++ 6 files changed, 174 insertions(+), 105 deletions(-) create mode 100644 src/libecoprimer/taxstats.c diff --git a/src/ecoPrimer b/src/ecoPrimer index 96477a6a365c7c9b2a4801c5dda621252d32b3f3..2976f923f12a332d38b21cc689399e9b1dd26bf3 100755 GIT binary patch delta 20128 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 delta 18415 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 diff --git a/src/ecoprimer.c b/src/ecoprimer.c index fb6b9fb..36cb480 100644 --- a/src/ecoprimer.c +++ b/src/ecoprimer.c @@ -91,9 +91,99 @@ void printcurrenttimeinmilli() /*TR: Added*/ -#ifdef MASKEDCODE +void printapair(int32_t index,ppair_t pair, poptions_t options) +{ + printf("%6d\t",index); + if (pair->asdirect1) + printf("%s\t",ecoUnhashWord(pair->p1->word,options->primer_length)); + else + printf("%s\t",ecoUnhashWord(ecoComplementWord(pair->p1->word, + options->primer_length),options->primer_length)); + if (pair->asdirect2) + printf("%s",ecoUnhashWord(ecoComplementWord(pair->p2->word, + options->primer_length),options->primer_length)); + else + printf("%s",ecoUnhashWord(pair->p2->word,options->primer_length)); + + printf("\t%d", pair->inexample); + printf("\t%d", pair->outexample); + + printf("\t%d", pair->mind); + printf("\t%d", pair->maxd); + printf("\t%3.2f\t", (float)pair->sumd/pair->inexample); + printf("\t%4.3f\n", pair->yule); + +} + +uint32_t filterandsortpairs(ppair_t* sortedpairs,uint32_t count, poptions_t options) +{ + uint32_t i,j; + float q,qfp; + float y1,y2; + + for (i=0,j=0;i < count;i++) + { + if (options->insamples) + q = (float)sortedpairs[i]->inexample/options->insamples; + else q=1.0; + + if (options->outsamples) + qfp = (float)sortedpairs[i]->outexample/options->outsamples; + else qfp=0.0; + + sortedpairs[i]->quorumin = q; + sortedpairs[i]->quorumout = qfp; + sortedpairs[i]->yule = q -qfp; + + + sortedpairs[j]=sortedpairs[i]; + + + + if (q > options->sensitivity_quorum && + qfp < options->false_positive_quorum) + j++; + } + + return j; +} + +void printpairs (ppairtree_t pairs, poptions_t options) +{ + ppair_t* sortedpairs; + ppair_t* index; + ppairlist_t pl; + int32_t i,j; + int32_t count; + + fprintf(stderr,"Total pair count : %d\n",pairs->count); + + sortedpairs = ECOMALLOC(pairs->count*sizeof(ppair_t),"Cannot Allocate ordered pairs"); + index=sortedpairs; + pl=pairs->first; + j=0; + while(pl->next) + { + for (i=0;ipaircount;i++,j++) + sortedpairs[j]=pl->pairs+i; + pl=pl->next; + } + + for (i=0;ipaircount;i++,j++) + sortedpairs[j]=pl->pairs+i; + + count=filterandsortpairs(sortedpairs,pairs->count,options); + + for (i=0;i < count;i++) + printapair(i,sortedpairs[i],options); + +} + + +#ifdef MASKEDCODE void printpairs (pairscount_t pairs, poptions_t options, int32_t rankdbstats, uint32_t seqdbsize) + { uint32_t i; uint32_t wordsize = options->primer_length; @@ -417,6 +507,9 @@ int main(int argc, char **argv) fprintf(stderr,"Sequence read : %d\n",(int32_t)seqdbsize); updateseqparams(seqdb, seqdbsize, taxonomy, &options, &insamples , &outsamples); + options.dbsize=seqdbsize; + options.insamples=insamples; + options.outsamples=outsamples; rankdbstats = getrankdbstats(seqdb, seqdbsize, taxonomy, &options); @@ -473,7 +566,7 @@ int main(int argc, char **argv) // setoktaxforspecificity (&pairs); - // printpairs (pairs, &options, rankdbstats, seqdbsize); + printpairs (pairs, &options); diff --git a/src/libecoprimer/ecoprimer.h b/src/libecoprimer/ecoprimer.h index 0feb6cb..cfbdcc7 100644 --- a/src/libecoprimer/ecoprimer.h +++ b/src/libecoprimer/ecoprimer.h @@ -165,7 +165,9 @@ typedef struct { uint32_t mind; //< minimum distance between primers uint32_t maxd; //< maximum distance between primers uint32_t sumd; //< distance sum - + float yule; + float quorumin; + float quorumout; // // uint32_t ampsetcount; // uint32_t ampsetindex; @@ -192,6 +194,7 @@ typedef struct { ppairlist_t first; ppairlist_t last; void *tree; + int32_t count; } pairtree_t, *ppairtree_t; typedef struct { @@ -234,6 +237,9 @@ typedef struct { bool_t no_multi_match; char taxonrank[20]; //TR to count ranks against a pair int32_t taxonrankidx; //TR to count ranks against a pair + int32_t dbsize; + int32_t insamples; + int32_t outsamples; } options_t, *poptions_t; typedef ecoseq_t **pecodnadb_t; diff --git a/src/libecoprimer/pairs.c b/src/libecoprimer/pairs.c index 0af6825..838bbc7 100644 --- a/src/libecoprimer/pairs.c +++ b/src/libecoprimer/pairs.c @@ -174,87 +174,9 @@ ppairtree_t buildPrimerPairs(pecodnadb_t seqdb,uint32_t seqdbsize,pprimercount_t { buildPrimerPairsForOneSeq(i, seqdb, primers, primerpairs, options); } -// if (seqmatchcount.matchcount == 0) continue; -// -// for (j=0; j < seqmatchcount.matchcount; j++) -// { -// strt = 0; -// w1 = seqmatchcount.matches[j].word; -// /*first word should b on direct strand*/ -// if (!seqmatchcount.matches[j].strand) -// w1 = ecoComplementWord(w1, options->primer_length); -// else -// strt = options->primer_length; -// -// for (k=j+1; k < seqmatchcount.matchcount; k++) -// { -// end = 0; -// w2 = seqmatchcount.matches[k].word; -// /*second word should be on reverse strand*/ -// if (seqmatchcount.matches[k].strand) -// w2 = ecoComplementWord(w2, options->primer_length); -// else -// end = options->primer_length; -// -// if (!(seqmatchcount.matches[j].good || seqmatchcount.matches[k].good)) continue; -// if (w1 == w2) continue; -// -// d = seqmatchcount.matches[k].position - seqmatchcount.matches[j].position; -// if (d >= options->lmin && d <= options->lmax) -// { -// /*get amplified string*/ -// amplifia = getamplifia (seqdb[i], seqmatchcount.matches[j].position + strt, d - strt - end); -// -// foundindex = pairinlist(pairs, w1, w2, paircount); -// if (foundindex != -1) /*pair is found*/ -// { -// if (seqdb[i]->isexample) -// pairs[foundindex].inexample++; -// else -// pairs[foundindex].outexample++; -// -// if (pairs[foundindex].mind > d) pairs[foundindex].mind = d; -// else if (pairs[foundindex].maxd < d) pairs[foundindex].maxd = d; -// -// oldamp = addamplifiasetelem (&pairs[foundindex], amplifia, seqdb[i]->ranktaxonid); -// /*if exact same string is already in amplifia set then use that for taxon set, it will help for -// * calculating the fully identified taxons i.e specificity, we will compare pointrs instead of strings -// * because same string means same pointer*/ -// if (oldamp) -// { -// ECOFREE (amplifia, "free amplifia"); -// amplifia = oldamp; -// } -// addtaxampsetelem (&pairs[foundindex], seqdb[i]->ranktaxonid, amplifia); -// -// continue; -// } -// -// if (paircount == pairslots) -// { -// pairslots += 500; -// pairs = ECOREALLOC(pairs, pairslots * sizeof(pairs_t), "Cannot allocate pairs table"); -// } -// pairs[paircount].w1 = w1; -// pairs[paircount].w2 = w2; -// if (seqdb[i]->isexample) pairs[paircount].inexample = 1; -// else pairs[paircount].outexample = 1; -// pairs[paircount].mind = d; -// pairs[paircount].maxd = d; -// oldamp = addamplifiasetelem (&pairs[paircount], amplifia, seqdb[i]->ranktaxonid); -// addtaxampsetelem (&pairs[paircount], seqdb[i]->ranktaxonid, amplifia); -// -// paircount++; -// } -// else if (d > options->lmax) -// break; /*once if the distance is greater than lmax then it will keep on increasing*/ -// } -// } -// ECOFREE(seqmatchcount.matches, "Cannot free matches table"); -// } -// primerpairs.pairs = ECOREALLOC(pairs, paircount * sizeof(pairs_t), "Cannot allocate pairs table"); -// primerpairs.paircount = paircount; -// return primerpairs; + + return primerpairs; + } #define DMAX (2000000000) @@ -327,7 +249,7 @@ static void buildPrimerPairsForOneSeq(uint32_t seqid, if (matchcount>1) { - fprintf(stderr,"\n====================================\n"); +// fprintf(stderr,"\n====================================\n"); sortmatch(matches,matchcount); // sort in ascending order by position @@ -425,30 +347,30 @@ static void buildPrimerPairsForOneSeq(uint32_t seqid, pcurrent->pcr.ampcount++; - fprintf(stderr,"%c%c W1 : %s direct : %c", - "bG"[(int)pcurrent->p1->good], - "bG"[(int)pcurrent->p2->good], - ecoUnhashWord(pcurrent->p1->word, options->primer_length), - "><"[(int)pcurrent->asdirect1] - ); - - fprintf(stderr," W2 : %s direct : %c distance : %d (min/max/avg : %d/%d/%f) in/out: %d/%d %c (%d pairs)\n", - ecoUnhashWord(pcurrent->p2->word, options->primer_length), - "><"[(int)pcurrent->asdirect2], - distance, - pcurrent->mind,pcurrent->maxd, - (pcurrent->inexample) ? (float)pcurrent->sumd/pcurrent->inexample:0.0, - pcurrent->inexample,pcurrent->outexample, - " N"[(pcurrent->outexample+pcurrent->inexample)==1], - paircount - - ); - +// fprintf(stderr,"%c%c W1 : %s direct : %c", +// "bG"[(int)pcurrent->p1->good], +// "bG"[(int)pcurrent->p2->good], +// ecoUnhashWord(pcurrent->p1->word, options->primer_length), +// "><"[(int)pcurrent->asdirect1] +// ); +// +// fprintf(stderr," W2 : %s direct : %c distance : %d (min/max/avg : %d/%d/%f) in/out: %d/%d %c (%d pairs)\n", +// ecoUnhashWord(pcurrent->p2->word, options->primer_length), +// "><"[(int)pcurrent->asdirect2], +// distance, +// pcurrent->mind,pcurrent->maxd, +// (pcurrent->inexample) ? (float)pcurrent->sumd/pcurrent->inexample:0.0, +// pcurrent->inexample,pcurrent->outexample, +// " N"[(pcurrent->outexample+pcurrent->inexample)==1], +// paircount +// +// ); +// } } } - + pairs->count=paircount; } diff --git a/src/libecoprimer/pairtree.c b/src/libecoprimer/pairtree.c index d1c0895..7155104 100644 --- a/src/libecoprimer/pairtree.c +++ b/src/libecoprimer/pairtree.c @@ -130,5 +130,7 @@ ppairtree_t initpairtree(ppairtree_t tree) tree->last=tree->first; tree->tree=NULL; + tree->count=0; + return tree; } diff --git a/src/libecoprimer/taxstats.c b/src/libecoprimer/taxstats.c new file mode 100644 index 0000000..b08d783 --- /dev/null +++ b/src/libecoprimer/taxstats.c @@ -0,0 +1,46 @@ +/* + * taxstats.c + * + * Created on: 12 mars 2009 + * Author: coissac + */ + +#include + +static int cmptaxon(void *t1, void* t2); + + +static int cmptaxon(void *t1, void* t2) +{ + if (*t1 < *t2) + return -1; + if (*t1 > *t2) + return +1; + return 0; +} + +float taxonomycoverage(ppair_t pair, poptions_t options) +{ + int32_t seqcount; + int32_t *taxon; + int32_t i; + void **taxontree; + ppair_t *inserted; + int32_t taxoncount; + + + seqcount=pair->pcr.ampcount; + taxon = ECOMALLOC(seqcount * sizeof(int32_t)); + + taxoncount=0; + taxontree=NULL; + + for (i=0; i < seqcount; i++) + if (pair->pcr.amplifias[i].sequence->isexample) + { + inserted = tsearch(pair->pcr.amplifias[i].sequence->ranktaxonid, + taxontree, + cmptaxon); + } + +}