cav_function.cpp

来自「ncbi源码」· C++ 代码 · 共 472 行 · 第 1/2 页

CPP
472
字号
                        ERR_POST(Error << "slave should be unaligned at alnLoc " << alnLoc                            << " row " << (i+1));                        return false;                    }                } else {    // aligned master                    if (!IsAligned(slaveChar)) {                        ERR_POST(Error << "slave should be aligned at alnLoc " << alnLoc                            << " row " << (i+1));                        return false;                    }                    if (currentSlaveLoc != alignment->masterToSlave[currentMasterLoc]) {                        ERR_POST(Error << "wrong slave residue aligned to master at alnLoc " << alnLoc                            << " row " << (i+1));                        return false;                    }                }            }        }        // check seequence lengths        if (masterLoc != alignment->master->sequenceString.size() - 1 ||            slaveLoc != alignment->slave->sequenceString.size() - 1) {            ERR_POST(Error << "bad sequence lengths at row " << (i+1));            return false;        }    }    return true;}END_NCBI_SCOPE// leave the main function outside the NCBI namespace, just in case that might// cause any problems when linking it to C code...USING_NCBI_SCOPE;int CAV_DisplayMultiple(    const void *asnDataBlock,    unsigned int options,    unsigned int paragraphWidth,    double conservationThreshhold,    const char *title,    int nFeatures,    const AlignmentFeature *features){    return CAV_DisplayMultiple(asnDataBlock, options, paragraphWidth,        conservationThreshhold, title, nFeatures, features, NULL, NULL);}int CAV_DisplayMultiple(    const void *asnDataBlock,    unsigned int options,    unsigned int paragraphWidth,    double conservationThreshhold,    const char *title,    int nFeatures,    const AlignmentFeature *alnFeatures,    CNcbiOstream *outputStream,    CNcbiOstream *diagnosticStream){    // make sure C++ output streams are sync'ed with C's stdio    IOS_BASE::sync_with_stdio(true);    // set up output streams (send all diagnostic messages to a different stream)    CNcbiOstream *outStream;    if (outputStream)        outStream = outputStream;    else        outStream = &NcbiCout;    if (diagnosticStream)        SetDiagStream(diagnosticStream);    else        SetDiagStream(&NcbiCerr);    if (options & CAV_DEBUG)        SetDiagPostLevel(defaultDiagPostLevel = eDiag_Info);   // show all messages    else        SetDiagPostLevel(defaultDiagPostLevel = eDiag_Error);  // show only errors    // check option consistency    if (options & CAV_CONDENSED && !(options & CAV_TEXT || options & CAV_HTML)) {        ERR_POST(Error << "Cannot do condensed display except with text/HTML output");        return CAV_ERROR_BAD_PARAMS;    }    if (options & CAV_FASTA_LOWERCASE && !(options & CAV_FASTA)) {        ERR_POST(Error << "Cannot do fasta_lc option except with FASTA output");        return CAV_ERROR_BAD_PARAMS;    }    if (options & CAV_HTML_HEADER && !(options & CAV_HTML)) {        ERR_POST(Error << "Cannot do HTML header without HTML output");        return CAV_ERROR_BAD_PARAMS;    }    // load input data into an input stream    if (!asnDataBlock) {        ERR_POST(Critical << "NULL asnDataBlock parameter");        return CAV_ERROR_BAD_ASN;    }    CNcbiIstrstream asnIstrstream(static_cast<const char*>(asnDataBlock), kMax_Int);    // load asn data block    const SeqEntryList *seqs;    const SeqAnnotList *alns;    int retval = LoadASNFromIstream(asnIstrstream, &seqs, &alns);    if (retval != CAV_SUCCESS) {        ERR_POST(Critical << "Couldn't get sequence and alignment ASN data");        return retval;    }    auto_ptr<const SeqEntryList> sequencesASN(seqs);    auto_ptr<const SeqAnnotList> alignmentsASN(alns);    // process asn data, then free it    auto_ptr<SequenceSet> sequenceSet(new SequenceSet(*(sequencesASN.get())));    if (!sequenceSet.get() || sequenceSet->Status() != CAV_SUCCESS) {        ERR_POST(Critical << "Error processing sequence data");        return sequenceSet->Status();    }    auto_ptr<AlignmentSet> alignmentSet(new AlignmentSet(sequenceSet.get(), *(alignmentsASN.get())));    if (!alignmentSet.get() || alignmentSet->Status() != CAV_SUCCESS) {        ERR_POST(Critical << "Error processing alignment data");        return alignmentSet->Status();    }    sequencesASN.reset();    alignmentsASN.reset();    // create the alignment display structure    auto_ptr<AlignmentDisplay> display(new AlignmentDisplay(sequenceSet.get(), alignmentSet.get()));    if (!display.get() || display->Status() != CAV_SUCCESS) {        ERR_POST(Critical << "Error creating alignment display");        return display->Status();    }    // do verification    if (options & CAV_DEBUG) {        if (!VerifyAlignmentData(alignmentSet.get(), display.get())) {            ERR_POST(Critical << "AlignmentDisplay failed verification");            return CAV_ERROR_DISPLAY;        } else {            ERR_POST(Info << "AlignmentDisplay passed verification");        }    }    // display alignment with given parameters    ERR_POST(Info << "writing output...");    int        from = (options & CAV_LEFTTAILS) ? 0 : display->GetFirstAlignedLoc(),        to = (options & CAV_RIGHTTAILS) ? display->GetWidth()-1 : display->GetLastAlignedLoc();    if (options & CAV_SHOW_IDENTITY) conservationThreshhold = AlignmentDisplay::SHOW_IDENTITY;    if (options & CAV_TEXT || options & CAV_HTML) {        if (options & CAV_CONDENSED)            retval = display->DumpCondensed(*outStream, options,                from, to, paragraphWidth, conservationThreshhold, title, nFeatures, alnFeatures);        else            retval = display->DumpText(*outStream, options,                from, to, paragraphWidth, conservationThreshhold, title, nFeatures, alnFeatures);    } else if (options & CAV_FASTA) {        retval = display->DumpFASTA(from, to, paragraphWidth,            ((options & CAV_FASTA_LOWERCASE) > 0), *outStream);    }//    if (outStream != &NcbiCout) delete outStream;    if (retval != CAV_SUCCESS) {        ERR_POST(Error << "Error dumping display to output");        return retval;    }    return CAV_SUCCESS;}/** ---------------------------------------------------------------------------* $Log: cav_function.cpp,v $* Revision 1000.2  2004/06/01 19:41:19  gouriano* PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.4** Revision 1.4  2004/05/21 21:42:51  gorelenk* Added PCH ncbi_pch.hpp** Revision 1.3  2004/03/15 18:51:27  thiessen* prefer prefix vs. postfix ++/-- operators** Revision 1.2  2003/06/02 16:06:41  dicuccio* Rearranged src/objects/ subtree.  This includes the following shifts:*     - src/objects/asn2asn --> arc/app/asn2asn*     - src/objects/testmedline --> src/objects/ncbimime/test*     - src/objects/objmgr --> src/objmgr*     - src/objects/util --> src/objmgr/util*     - src/objects/alnmgr --> src/objtools/alnmgr*     - src/objects/flat --> src/objtools/flat*     - src/objects/validator --> src/objtools/validator*     - src/objects/cddalignview --> src/objtools/cddalignview* In addition, libseq now includes six of the objects/seq... libs, and libmmdb* replaces the three libmmdb? libs.** Revision 1.1  2003/03/19 19:04:12  thiessen* move again** Revision 1.2  2003/03/19 16:06:28  thiessen* add <memory>** Revision 1.1  2003/03/19 05:33:43  thiessen* move to src/app/cddalignview** Revision 1.11  2003/03/18 22:35:06  thiessen* add C++ version of function that takes streams for output** Revision 1.10  2003/02/03 17:52:03  thiessen* move CVS Log to end of file** Revision 1.9  2003/01/21 18:01:07  thiessen* add condensed alignment display** Revision 1.8  2002/11/08 19:38:11  thiessen* add option for lowercase unaligned in FASTA** Revision 1.7  2002/02/08 19:53:17  thiessen* add annotation to text/HTML displays** Revision 1.6  2001/05/17 15:01:41  lavr* Typos corrected** Revision 1.5  2001/03/02 01:19:24  thiessen* add FASTA output** Revision 1.4  2001/02/15 19:23:44  thiessen* add identity coloring** Revision 1.3  2001/02/14 16:06:10  thiessen* add block and conservation coloring to HTML display** Revision 1.2  2001/01/29 23:55:10  thiessen* add AlignmentDisplay verification** Revision 1.1  2001/01/29 18:13:34  thiessen* split into C-callable library + main**/

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?