diff options
Diffstat (limited to 'biostruc/cdd/cddutil.c')
-rw-r--r-- | biostruc/cdd/cddutil.c | 95 |
1 files changed, 84 insertions, 11 deletions
diff --git a/biostruc/cdd/cddutil.c b/biostruc/cdd/cddutil.c index 9f0e00f1..6970757d 100644 --- a/biostruc/cdd/cddutil.c +++ b/biostruc/cdd/cddutil.c @@ -1,4 +1,4 @@ -/* $Id: cddutil.c,v 1.89 2003/10/07 21:19:39 bauer Exp $ +/* $Id: cddutil.c,v 1.91 2003/12/09 22:21:35 bauer Exp $ *=========================================================================== * * PUBLIC DOMAIN NOTICE @@ -29,13 +29,19 @@ * * Initial Version Creation Date: 10/18/1999 * -* $Revision: 1.89 $ +* $Revision: 1.91 $ * * File Description: CDD utility routines * * Modifications: * -------------------------------------------------------------------------- * $Log: cddutil.c,v $ +* Revision 1.91 2003/12/09 22:21:35 bauer +* added CddCountResTypes +* +* Revision 1.90 2003/12/09 18:48:05 bauer +* commented out deprecated fields in BlastKarlinBlkCopy +* * Revision 1.89 2003/10/07 21:19:39 bauer * made CddMasterIs3D more general * @@ -2016,6 +2022,73 @@ Nlm_FloatHiPtr LIBCALL SeqAlignInform(SeqAlignPtr salp, BioseqPtr bsp_master, /* Calculate per column information content for a CDD from the seqalign */ /*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/ +Int4 ** LIBCALL CddCountResTypes(CddPtr pcdd, Int4 *ncols) +{ + BioseqSetPtr bssp; + Boolean bHasConsensus = CddHasConsensus(pcdd); + Int4 offset, qlength, i, j, c; + Int4 **ResFreqTable; + SeqAlignPtr salp; + DenseDiagPtr ddp; + SeqIdPtr sip; + BioseqPtr bsp; + Uint1 *buffer; + SeqPortPtr spp; + + if (!pcdd) return(NULL); + if (!pcdd->trunc_master) return(NULL); + bssp = pcdd->sequences->data.ptrvalue; + offset = pcdd->profile_range->from; + qlength = pcdd->trunc_master->length; + *ncols = qlength; + ResFreqTable = MemNew(qlength*sizeof(Int4 *)); + for (i=0;i<qlength;i++) { + ResFreqTable[i] = MemNew(26*sizeof(Int4)); + for (j=0;j<26;j++) ResFreqTable[i][j] = 0; + } + salp = pcdd->seqannot->data; + if (!bHasConsensus) { /* count residues in the master/representative too */ + ddp = salp->segs; + sip = ddp->id; + bsp = CddRetrieveBioseqById(sip,bssp->seq_set); + buffer = MemNew((bsp->length)*sizeof(Uint1)); + spp = SeqPortNew(bsp, 0, bsp->length-1, Seq_strand_unknown, Seq_code_ncbistdaa); + for (i=0; i<bsp->length;i++) buffer[i] = SeqPortGetResidue(spp); + spp = SeqPortFree(spp); + while (ddp) { + for (c=ddp->starts[0];c<ddp->starts[0]+ddp->len;c++) { + ResFreqTable[c-offset][buffer[c]]++; + } + ddp = ddp->next; + } + MemFree(buffer); + } + while (salp) { + ddp = salp->segs; + sip = ddp->id->next; + bsp = CddRetrieveBioseqById(sip,bssp->seq_set); + buffer = MemNew((bsp->length)*sizeof(Uint1)); + spp = SeqPortNew(bsp, 0, bsp->length-1, Seq_strand_unknown, Seq_code_ncbistdaa); + for (i=0; i<bsp->length;i++) buffer[i] = SeqPortGetResidue(spp); + spp = SeqPortFree(spp); + while (ddp) { + for (c=ddp->starts[1];c<ddp->starts[1]+ddp->len;c++) { + i = ddp->starts[0]-offset+c-ddp->starts[1]; + ResFreqTable[i][buffer[c]]++; + } + ddp = ddp->next; + } + MemFree(buffer); + salp = salp->next; + } + return(ResFreqTable); +} + +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ +/* Calculate per column information content for a CDD from the seqalign */ +/*---------------------------------------------------------------------------*/ +/*---------------------------------------------------------------------------*/ Nlm_FloatHiPtr LIBCALL CddAlignInform(CddPtr pcdd, Nlm_FloatHi * Niobs) { Int4 offset; @@ -4603,12 +4676,12 @@ static void BlastKarlinBlkCopy(BLAST_KarlinBlkPtr kbp_in,BLAST_KarlinBlkPtr kbp_ kbp_out->K = kbp_in->K; kbp_out->logK = kbp_in->logK; kbp_out->H = kbp_in->H; - kbp_out->Lambda_real = kbp_in->Lambda_real; +/* kbp_out->Lambda_real = kbp_in->Lambda_real; kbp_out->K_real = kbp_in->K_real; kbp_out->logK_real = kbp_in->logK_real; kbp_out->H_real = kbp_in->H_real; kbp_out->q_frame = kbp_in->q_frame; - kbp_out->s_frame = kbp_in->s_frame; + kbp_out->s_frame = kbp_in->s_frame; */ kbp_out->paramC = kbp_in->paramC; } @@ -4671,13 +4744,13 @@ Seq_Mtf * LIBCALL CddDenDiagCposComp2KBP(BioseqPtr bspFake, Int4 iPseudo, if (iPseudo <= 0) { /* need to determine first */ AInf = SeqAlignInform(salp, bspFake, bHasConsensus, 0); for (i=0;i<bspFake->length;i++) SumAInf += AInf[i]; - if (SumAInf > 84) iPseudo = 10; /* purely empirical */ - else if (SumAInf > 55) iPseudo = 7; - else if (SumAInf > 43) iPseudo = 5; - else if (SumAInf > 41.5) iPseudo = 4; - else if (SumAInf > 40) iPseudo = 3; - else if (SumAInf > 39) iPseudo = 2; - else iPseudo = 1; + if (SumAInf > 84 ) iPseudo = 10; /* purely empirical */ + else if (SumAInf > 55 ) iPseudo = 7; + else if (SumAInf > 43 ) iPseudo = 5; + else if (SumAInf > 41.5) iPseudo = 4; + else if (SumAInf > 40 ) iPseudo = 3; + else if (SumAInf > 39 ) iPseudo = 2; + else iPseudo = 1; MemFree(AInf); if (pcdd && bWriteOut) printf("%s AInf:%6.1f PseudoCt: %d\n",cAccession,SumAInf, iPseudo); } |