# include "FreqDist.h" void WriteResidueFreqs(VolumeLookupTable *V) { int i; for (i=0; i<21; i++) if (V->frac[i] != 0) printf("%6s\t%4.1f %%\t%3.0f\n",V->aa3[i],100*V->frac[i],V->vol[i]); } void WriteResidueFreq(VolumeLookupTable *V) { StringIndex * SIP ; printf("_BEG_FREQ_\n"); for (SIP = V->SI; SIP; SIP=SIP->ptr) { int i = SIP->n ; printf("%c\t%s\t%7.2f\n",V->aa[i],V->aa3[i],V->frac[i]); } printf("_END_FREQ_\n"); } void AddResidueFreq(char * filename, VolumeLookupTable * V) { int i; int k = 0; { StringIndex * SIP ; for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { V->frac[SIP->n] = 0; } } if (filename) { TokenizeData d = {0}; InitTokens(&d,filename); while (TokenizeLine(&d)) { if (OnBetwP(StrEq(d.T[1],"_BEG_FRAC_"), StrEq(d.T[1],"_END_FRAC_"),d.flag)) { i = SymbolTableIndexNoAdd(d.T[1], V->SI); assert(i != SYMBOL_NOT_IN_TABLE ); V->frac[i] = d.D[3] /100; } } } } void NAddResidueFreq(char * filename, VolumeLookupTable * V,char *select) { int i; int k = 0; { StringIndex * SIP ; for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { V->frac[SIP->n] = 0; } } if (filename) { char beg[BUFSIZ], end[BUFSIZ]; TokenizeData d = {0}; STJOIN(beg,"_BEG_FREQ",select); STJOIN(end,"_END_FREQ",select); InitTokens(&d,filename); while (TokenizeLine(&d)) { d.debug = 0; if (OnBetwP(StrEq(d.T[1],beg), StrEq(d.T[1],end),d.flag)) { d.debug = 0; i = SymbolTableIndexNoAdd(d.T[1], V->SI); assert(i != SYMBOL_NOT_IN_TABLE ); V->frac[i] = d.D[3]; } } } } void NormalizeResidueFreq(VolumeLookupTable * V) { int i ; StringIndex * SIP ; Statistic S = {0}; for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { IncrementStats(&S,V->frac[SIP->n]); } for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { V->frac[SIP->n] /= S.sum ; } } void ComputeResidueFrequency(Sequences * S, int * sel, VolumeLookupTable *V) { int ii,i, *p ; for (i=0; i<= S->nseq; i++) { for (p = sel ; *p != 0; p++) { char s[2] = {0} ; s[0] = S->seq[i]->aa[*p]; if (*s != '-') { ii = SymbolTableIndexNoAdd(s,V->SI); assert( ii != SYMBOL_NOT_IN_TABLE ); V->frac[ ii ] ++; } } } } void CompResFreqWWts(Sequences * S, int * sel, VolumeLookupTable *V) { int ii,i, *p ; for (i=0; i<= S->nseq; i++) { for (p = sel ; *p != 0; p++) { char s[2] = {0} ; s[0] = S->seq[i]->aa[*p]; if (*s != '-') { ii = SymbolTableIndexNoAdd(s,V->SI); assert( ii != SYMBOL_NOT_IN_TABLE ); V->frac[ ii ] += S->seq[i]->wt; } } } } double EntropyFromFreqDist(VolumeLookupTable *V) { int i ; StringIndex * SIP ; Statistic S = {0}; double E = 0; for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { IncrementStats(&S,V->frac[SIP->n]); } for (SIP = V->SI ; SIP ; SIP = SIP->ptr) { double p = V->frac[SIP->n] /= S.sum ; E += p * log(p) / log(2) ; } return E ; }