validatorp.hpp
上传用户:yhdzpy8989
上传日期:2007-06-13
资源大小:13604k
文件大小:41k
源码类别:

生物技术

开发平台:

C/C++

  1. /*
  2.  * ===========================================================================
  3.  * PRODUCTION $Log: validatorp.hpp,v $
  4.  * PRODUCTION Revision 1000.3  2004/06/01 19:47:42  gouriano
  5.  * PRODUCTION PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.64
  6.  * PRODUCTION
  7.  * ===========================================================================
  8.  */
  9. /*  $Id: validatorp.hpp,v 1000.3 2004/06/01 19:47:42 gouriano Exp $
  10.  * ===========================================================================
  11.  *
  12.  *                            PUBLIC DOMAIN NOTICE
  13.  *               National Center for Biotechnology Information
  14.  *
  15.  *  This software/database is a "United States Government Work" under the
  16.  *  terms of the United States Copyright Act.  It was written as part of
  17.  *  the author's official duties as a United States Government employee and
  18.  *  thus cannot be copyrighted.  This software/database is freely available
  19.  *  to the public for use. The National Library of Medicine and the U.S.
  20.  *  Government have not placed any restriction on its use or reproduction.
  21.  *
  22.  *  Although all reasonable efforts have been taken to ensure the accuracy
  23.  *  and reliability of the software and data, the NLM and the U.S.
  24.  *  Government do not and cannot warrant the performance or results that
  25.  *  may be obtained by using this software or data. The NLM and the U.S.
  26.  *  Government disclaim all warranties, express or implied, including
  27.  *  warranties of performance, merchantability or fitness for any particular
  28.  *  purpose.
  29.  *
  30.  *  Please cite the author in any work or product based on this material.
  31.  *
  32.  * ===========================================================================
  33.  *
  34.  * Author:  Jonathan Kans, Clifford Clausen, Aaron Ucko......
  35.  *
  36.  * File Description:
  37.  *   Privae classes and definition for the validator
  38.  *   .......
  39.  *
  40.  */
  41. #ifndef VALIDATOR___VALIDATORP__HPP
  42. #define VALIDATOR___VALIDATORP__HPP
  43. #include <corelib/ncbistd.hpp>
  44. #include <objmgr/scope.hpp>
  45. #include <objmgr/feat_ci.hpp>  // for CMappedFeat
  46. #include <objects/seqset/Bioseq_set.hpp>
  47. #include <objects/seq/GIBB_mol.hpp>
  48. #include <util/strsearch.hpp>
  49. #include <objects/seqfeat/Seq_feat.hpp>
  50. #include <objects/seqalign/Seq_align.hpp>
  51. #include <objects/seqalign/Std_seg.hpp>
  52. #include <objects/seqalign/Packed_seg.hpp>
  53. #include <objtools/validator/validator.hpp>
  54. BEGIN_NCBI_SCOPE
  55. BEGIN_SCOPE(objects)
  56. class CSeq_entry;
  57. class CCit_sub;
  58. class CCit_art;
  59. class CCit_gen;
  60. class CSeq_feat;
  61. class CBioseq;
  62. class CSeqdesc;
  63. class CSeq_annot;
  64. class CTrna_ext;
  65. class CProt_ref;
  66. class CSeq_loc;
  67. class CFeat_CI;
  68. class CPub_set;
  69. class CAuthor;
  70. class CTitle;
  71. class CDesc_CI;
  72. class CMolInfo;
  73. class CUser_object;
  74. class CSeqdesc_CI;
  75. class CSeq_graph;
  76. class CMappedGraph;
  77. class CDense_diag;
  78. class CDense_seg;
  79. class CSeq_align_set;
  80. class CPubdesc;
  81. class CBioSource;
  82. class COrg_ref;
  83. class CByte_graph;
  84. class CDelta_seq;
  85. class CSeqFeatData;
  86. class CGene_ref;
  87. class CCdregion;
  88. class CRNA_ref;
  89. class CImp_feat;
  90. class CSeq_literal;
  91. class CBioseq_Handle;
  92. BEGIN_SCOPE(validator)
  93. // ===========================  Internal error types  ==========================
  94. enum EErrType {
  95.     eErr_ALL = 0,
  96.     eErr_SEQ_INST_ExtNotAllowed,
  97.     eErr_SEQ_INST_ExtBadOrMissing,
  98.     eErr_SEQ_INST_SeqDataNotFound,
  99.     eErr_SEQ_INST_SeqDataNotAllowed,
  100.     eErr_SEQ_INST_ReprInvalid,
  101.     eErr_SEQ_INST_CircularProtein,
  102.     eErr_SEQ_INST_DSProtein,
  103.     eErr_SEQ_INST_MolNotSet,
  104.     eErr_SEQ_INST_MolOther,
  105.     eErr_SEQ_INST_FuzzyLen,
  106.     eErr_SEQ_INST_InvalidLen,
  107.     eErr_SEQ_INST_InvalidAlphabet,
  108.     eErr_SEQ_INST_SeqDataLenWrong,
  109.     eErr_SEQ_INST_SeqPortFail,
  110.     eErr_SEQ_INST_InvalidResidue,
  111.     eErr_SEQ_INST_StopInProtein,
  112.     eErr_SEQ_INST_PartialInconsistent,
  113.     eErr_SEQ_INST_ShortSeq,
  114.     eErr_SEQ_INST_NoIdOnBioseq,
  115.     eErr_SEQ_INST_BadDeltaSeq,
  116.     eErr_SEQ_INST_LongHtgsSequence,
  117.     eErr_SEQ_INST_LongLiteralSequence,
  118.     eErr_SEQ_INST_SequenceExceeds350kbp,
  119.     eErr_SEQ_INST_ConflictingIdsOnBioseq,
  120.     eErr_SEQ_INST_MolNuclAcid,
  121.     eErr_SEQ_INST_ConflictingBiomolTech,
  122.     eErr_SEQ_INST_SeqIdNameHasSpace,
  123.     eErr_SEQ_INST_IdOnMultipleBioseqs,
  124.     eErr_SEQ_INST_DuplicateSegmentReferences,
  125.     eErr_SEQ_INST_TrailingX,
  126.     eErr_SEQ_INST_BadSeqIdFormat,
  127.     eErr_SEQ_INST_PartsOutOfOrder,
  128.     eErr_SEQ_INST_BadSecondaryAccn,
  129.     eErr_SEQ_INST_ZeroGiNumber,
  130.     eErr_SEQ_INST_RnaDnaConflict,
  131.     eErr_SEQ_INST_HistoryGiCollision,
  132.     eErr_SEQ_INST_GiWithoutAccession,
  133.     eErr_SEQ_INST_MultipleAccessions,
  134.     eErr_SEQ_INST_HistAssemblyMissing,
  135.     eErr_SEQ_INST_TerminalNs,
  136.     eErr_SEQ_INST_UnexpectedIdentifierChange,
  137.     eErr_SEQ_INST_InternalNsInSeqLit,
  138.     eErr_SEQ_INST_SeqLitGapLength0,
  139.     eErr_SEQ_INST_TpaAssmeblyProblem,
  140.     eErr_SEQ_INST_SeqLocLength,
  141.     eErr_SEQ_DESCR_BioSourceMissing,
  142.     eErr_SEQ_DESCR_InvalidForType,
  143.     eErr_SEQ_DESCR_FileOpenCollision,
  144.     eErr_SEQ_DESCR_Unknown,
  145.     eErr_SEQ_DESCR_NoPubFound,
  146.     eErr_SEQ_DESCR_NoOrgFound,
  147.     eErr_SEQ_DESCR_MultipleBioSources,
  148.     eErr_SEQ_DESCR_NoMolInfoFound,
  149.     eErr_SEQ_DESCR_BadCountryCode,
  150.     eErr_SEQ_DESCR_NoTaxonID,
  151.     eErr_SEQ_DESCR_InconsistentBioSources,
  152.     eErr_SEQ_DESCR_MissingLineage,
  153.     eErr_SEQ_DESCR_SerialInComment,
  154.     eErr_SEQ_DESCR_BioSourceNeedsFocus,
  155.     eErr_SEQ_DESCR_BadOrganelle,
  156.     eErr_SEQ_DESCR_MultipleChromosomes,
  157.     eErr_SEQ_DESCR_BadSubSource,
  158.     eErr_SEQ_DESCR_BadOrgMod,
  159.     eErr_SEQ_DESCR_InconsistentProteinTitle,
  160.     eErr_SEQ_DESCR_Inconsistent,
  161.     eErr_SEQ_DESCR_ObsoleteSourceLocation,
  162.     eErr_SEQ_DESCR_ObsoleteSourceQual,
  163.     eErr_SEQ_DESCR_StructuredSourceNote,
  164.     eErr_SEQ_DESCR_MultipleTitles,
  165.     eErr_SEQ_DESCR_Obsolete,
  166.     eErr_SEQ_DESCR_UnnecessaryBioSourceFocus,
  167.     eErr_SEQ_DESCR_RefGeneTrackingWithoutStatus,
  168.     eErr_SEQ_DESCR_UnwantedCompleteFlag,
  169.     eErr_GENERIC_NonAsciiAsn,
  170.     eErr_GENERIC_Spell,
  171.     eErr_GENERIC_AuthorListHasEtAl,
  172.     eErr_GENERIC_MissingPubInfo,
  173.     eErr_GENERIC_UnnecessaryPubEquiv,
  174.     eErr_GENERIC_BadPageNumbering,
  175.     eErr_SEQ_PKG_NoCdRegionPtr,
  176.     eErr_SEQ_PKG_NucProtProblem,
  177.     eErr_SEQ_PKG_SegSetProblem,
  178.     eErr_SEQ_PKG_EmptySet,
  179.     eErr_SEQ_PKG_NucProtNotSegSet,
  180.     eErr_SEQ_PKG_SegSetNotParts,
  181.     eErr_SEQ_PKG_SegSetMixedBioseqs,
  182.     eErr_SEQ_PKG_PartsSetMixedBioseqs,
  183.     eErr_SEQ_PKG_PartsSetHasSets,
  184.     eErr_SEQ_PKG_FeaturePackagingProblem,
  185.     eErr_SEQ_PKG_GenomicProductPackagingProblem,
  186.     eErr_SEQ_PKG_InconsistentMolInfoBiomols,
  187.     eErr_SEQ_PKG_GraphPackagingProblem,
  188.     eErr_SEQ_FEAT_InvalidForType,
  189.     eErr_SEQ_FEAT_PartialProblem,
  190.     eErr_SEQ_FEAT_PartialsInconsistent,
  191.     eErr_SEQ_FEAT_InvalidType,
  192.     eErr_SEQ_FEAT_Range,
  193.     eErr_SEQ_FEAT_MixedStrand,
  194.     eErr_SEQ_FEAT_SeqLocOrder,
  195.     eErr_SEQ_FEAT_CdTransFail,
  196.     eErr_SEQ_FEAT_StartCodon,
  197.     eErr_SEQ_FEAT_InternalStop,
  198.     eErr_SEQ_FEAT_NoProtein,
  199.     eErr_SEQ_FEAT_MisMatchAA,
  200.     eErr_SEQ_FEAT_TransLen,
  201.     eErr_SEQ_FEAT_NoStop,
  202.     eErr_SEQ_FEAT_TranslExcept,
  203.     eErr_SEQ_FEAT_NoProtRefFound,
  204.     eErr_SEQ_FEAT_NotSpliceConsensus,
  205.     eErr_SEQ_FEAT_OrfCdsHasProduct,
  206.     eErr_SEQ_FEAT_GeneRefHasNoData,
  207.     eErr_SEQ_FEAT_ExceptInconsistent,
  208.     eErr_SEQ_FEAT_ProtRefHasNoData,
  209.     eErr_SEQ_FEAT_GenCodeMismatch,
  210.     eErr_SEQ_FEAT_RNAtype0,
  211.     eErr_SEQ_FEAT_UnknownImpFeatKey,
  212.     eErr_SEQ_FEAT_UnknownImpFeatQual,
  213.     eErr_SEQ_FEAT_WrongQualOnImpFeat,
  214.     eErr_SEQ_FEAT_MissingQualOnImpFeat,
  215.     eErr_SEQ_FEAT_PsuedoCdsHasProduct,
  216.     eErr_SEQ_FEAT_IllegalDbXref,
  217.     eErr_SEQ_FEAT_FarLocation,
  218.     eErr_SEQ_FEAT_DuplicateFeat,
  219.     eErr_SEQ_FEAT_UnnecessaryGeneXref,
  220.     eErr_SEQ_FEAT_TranslExceptPhase,
  221.     eErr_SEQ_FEAT_TrnaCodonWrong,
  222.     eErr_SEQ_FEAT_BadTrnaAA,
  223.     eErr_SEQ_FEAT_BothStrands,
  224.     eErr_SEQ_FEAT_CDSgeneRange,
  225.     eErr_SEQ_FEAT_CDSmRNArange,
  226.     eErr_SEQ_FEAT_OverlappingPeptideFeat,
  227.     eErr_SEQ_FEAT_SerialInComment,
  228.     eErr_SEQ_FEAT_MultipleCDSproducts,
  229.     eErr_SEQ_FEAT_FocusOnBioSourceFeature,
  230.     eErr_SEQ_FEAT_PeptideFeatOutOfFrame,
  231.     eErr_SEQ_FEAT_InvalidQualifierValue,
  232.     eErr_SEQ_FEAT_MultipleMRNAproducts,
  233.     eErr_SEQ_FEAT_mRNAgeneRange,
  234.     eErr_SEQ_FEAT_TranscriptLen,
  235.     eErr_SEQ_FEAT_TranscriptMismatches,
  236.     eErr_SEQ_FEAT_CDSproductPackagingProblem,
  237.     eErr_SEQ_FEAT_DuplicateInterval,
  238.     eErr_SEQ_FEAT_PolyAsiteNotPoint,
  239.     eErr_SEQ_FEAT_ImpFeatBadLoc,
  240.     eErr_SEQ_FEAT_LocOnSegmentedBioseq,
  241.     eErr_SEQ_FEAT_UnnecessaryCitPubEquiv,
  242.     eErr_SEQ_FEAT_ImpCDShasTranslation,
  243.     eErr_SEQ_FEAT_ImpCDSnotPseudo,
  244.     eErr_SEQ_FEAT_MissingMRNAproduct,
  245.     eErr_SEQ_FEAT_AbuttingIntervals,
  246.     eErr_SEQ_FEAT_CollidingGeneNames,
  247.     eErr_SEQ_FEAT_CollidingLocusTags,
  248.     eErr_SEQ_FEAT_MultiIntervalGene,
  249.     eErr_SEQ_FEAT_FeatContentDup,
  250.     eErr_SEQ_FEAT_BadProductSeqId,
  251.     eErr_SEQ_FEAT_RnaProductMismatch,
  252.     eErr_SEQ_FEAT_DifferntIdTypesInSeqLoc,
  253.     eErr_SEQ_FEAT_MissingCDSproduct,
  254.     eErr_SEQ_FEAT_MissingLocation,
  255.     eErr_SEQ_FEAT_OnlyGeneXrefs,
  256.     eErr_SEQ_FEAT_UTRdoesNotAbutCDS,
  257.     eErr_SEQ_FEAT_MultipleCdsOnMrna,
  258.     eErr_SEQ_FEAT_BadConflictFlag,
  259.     eErr_SEQ_FEAT_ConflictFlagSet,
  260.     eErr_SEQ_FEAT_LocusTagProblem,
  261.     eErr_SEQ_FEAT_AltStartCodon,
  262.     eErr_SEQ_FEAT_GenesInconsistent,
  263.     eErr_SEQ_ALIGN_SeqIdProblem,
  264.     eErr_SEQ_ALIGN_StrandRev,
  265.     eErr_SEQ_ALIGN_DensegLenStart,
  266.     eErr_SEQ_ALIGN_StartMorethanBiolen,
  267.     eErr_SEQ_ALIGN_EndMorethanBiolen,
  268.     eErr_SEQ_ALIGN_LenMorethanBiolen,
  269.     eErr_SEQ_ALIGN_SumLenStart,
  270.     eErr_SEQ_ALIGN_SegsDimMismatch,
  271.     eErr_SEQ_ALIGN_SegsNumsegMismatch,
  272.     eErr_SEQ_ALIGN_SegsStartsMismatch,
  273.     eErr_SEQ_ALIGN_SegsPresentMismatch,
  274.     eErr_SEQ_ALIGN_SegsPresentStartsMismatch,
  275.     eErr_SEQ_ALIGN_SegsPresentStrandsMismatch,
  276.     eErr_SEQ_ALIGN_FastaLike,
  277.     eErr_SEQ_ALIGN_SegmentGap,
  278.     eErr_SEQ_ALIGN_SegsInvalidDim,
  279.     eErr_SEQ_ALIGN_Segtype,
  280.     eErr_SEQ_ALIGN_BlastAligns,
  281.     eErr_SEQ_GRAPH_GraphMin,
  282.     eErr_SEQ_GRAPH_GraphMax,
  283.     eErr_SEQ_GRAPH_GraphBelow,
  284.     eErr_SEQ_GRAPH_GraphAbove,
  285.     eErr_SEQ_GRAPH_GraphByteLen,
  286.     eErr_SEQ_GRAPH_GraphOutOfOrder,
  287.     eErr_SEQ_GRAPH_GraphBioseqLen,
  288.     eErr_SEQ_GRAPH_GraphSeqLitLen,
  289.     eErr_SEQ_GRAPH_GraphSeqLocLen,
  290.     eErr_SEQ_GRAPH_GraphStartPhase,
  291.     eErr_SEQ_GRAPH_GraphStopPhase,
  292.     eErr_SEQ_GRAPH_GraphDiffNumber,
  293.     eErr_SEQ_GRAPH_GraphACGTScore,
  294.     eErr_SEQ_GRAPH_GraphNScore,
  295.     eErr_SEQ_GRAPH_GraphGapScore,
  296.     eErr_SEQ_GRAPH_GraphOverlap,
  297.     eErr_Internal_Exception,
  298.     eErr_UNKNOWN
  299. };
  300. // =============================================================================
  301. //                            Validation classes                          
  302. // =============================================================================
  303. // ===========================  Central Validation  ==========================
  304. // CValidError_imp provides the entry point to the validation process.
  305. // It calls upon the various validation classes to perform validation of
  306. // each part.
  307. // The class holds all the data for the validation process. 
  308. class CValidError_imp
  309. {
  310. public:
  311.     // Interface to be used by the CValidError class
  312.     // Constructor & Destructor
  313.     CValidError_imp(CObjectManager& objmgr, CValidError* errors, 
  314.         Uint4 options = 0);
  315.     virtual ~CValidError_imp(void);
  316.     // Validation methods
  317.     bool Validate(const CSeq_entry& se, const CCit_sub* cs = 0,
  318.         CScope* scope = 0);
  319.     void Validate(const CSeq_submit& ss, CScope* scope = 0);
  320.     void Validate(const CSeq_annot& sa, CScope* scope = 0);
  321.     void SetProgressCallback(CValidator::TProgressCallback callback,
  322.         void* user_data);
  323. public:
  324.     // interface to be used by the various validation classes
  325.     // typedefs:
  326.     typedef const CSeq_feat& TFeat;
  327.     typedef const CBioseq& TBioseq;
  328.     typedef const CBioseq_set& TSet;
  329.     typedef const CSeqdesc& TDesc;
  330.     typedef const CSeq_annot& TAnnot;
  331.     typedef const CSeq_graph& TGraph;
  332.     typedef const CSeq_align& TAlign;
  333.     typedef const CSeq_entry& TEntry;
  334.     typedef const CSeq_feat::TDbxref TDbtags;
  335.     typedef map < const CSeq_feat*, const CSeq_annot* >& TFeatAnnotMap;
  336.     // Posts errors.
  337.     void PostErr(EDiagSev sv, EErrType et, const string& msg,
  338.         const CSerialObject& obj);
  339.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TDesc ds);
  340.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TFeat ft);
  341.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq);
  342.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq,
  343.         TDesc ds);
  344.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TSet set);
  345.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TSet set, 
  346.         TDesc ds);
  347.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TAnnot annot);
  348.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TGraph graph);
  349.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq,
  350.         TGraph graph);
  351.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TAlign align);
  352.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TEntry entry);
  353.     // General use validation methods
  354.     void ValidatePubdesc(const CPubdesc& pub, const CSerialObject& obj);
  355.     void ValidateBioSource(const CBioSource& bsrc, const CSerialObject& obj);
  356.     void ValidateSeqLoc(const CSeq_loc& loc, const CBioseq_Handle& seq,
  357.         const string& prefix, const CSerialObject& obj);
  358.     void ValidateSeqLocIds(const CSeq_loc& loc, const CSerialObject& obj);
  359.     void ValidateDbxref(const CDbtag& xref, const CSerialObject& obj,
  360.         bool biosource = false);
  361.     void ValidateDbxref(TDbtags& xref_list, const CSerialObject& obj,
  362.         bool biosource = false);
  363.     void ValidateCitSub(const CCit_sub& cs, const CSerialObject& obj);
  364.         
  365.     // getters
  366.     inline CScope* GetScope(void) { return m_Scope; }
  367.     // flags derived from options parameter
  368.     inline bool IsNonASCII(void) const { return m_NonASCII; }
  369.     inline bool IsSuppressContext(void) const { return m_SuppressContext; }
  370.     inline bool IsValidateAlignments(void) const { return m_ValidateAlignments; }
  371.     inline bool IsValidateExons(void) const { return m_ValidateExons; }
  372.     inline bool IsSpliceErr(void) const { return m_SpliceErr; }
  373.     inline bool IsOvlPepErr(void) const { return m_OvlPepErr; }
  374.     inline bool IsRequireTaxonID(void) const { return m_RequireTaxonID; }
  375.     inline bool IsRequireISOJTA(void) const { return m_RequireISOJTA; }
  376.     inline bool IsValidateIdSet(void) const { return m_ValidateIdSet; }
  377.     inline bool IsRemoteFetch(void) const { return m_RemoteFetch; }
  378.     // !!! DEBUG {
  379.     inline bool AvoidPerfBottlenecks() const { return m_PerfBottlenecks; }
  380.     // }
  381.     // flags calculated by examining data in record
  382.     inline bool IsStandaloneAnnot(void) const { return m_IsStandaloneAnnot; }
  383.     inline bool IsNoPubs(void) const { return m_NoPubs; }
  384.     inline bool IsNoBioSource(void) const { return m_NoBioSource; }
  385.     inline bool IsGPS(void) const { return m_IsGPS; }
  386.     inline bool IsGED(void) const { return m_IsGED; }
  387.     inline bool IsPDB(void) const { return m_IsPDB; }
  388.     inline bool IsTPA(void) const { return m_IsTPA; }
  389.     inline bool IsPatent(void) const { return m_IsPatent; }
  390.     inline bool IsRefSeq(void) const { return m_IsRefSeq; }
  391.     inline bool IsNC(void) const { return m_IsNC; }
  392.     inline bool IsNG(void) const { return m_IsNG; }
  393.     inline bool IsNM(void) const { return m_IsNM; }
  394.     inline bool IsNP(void) const { return m_IsNP; }
  395.     inline bool IsNR(void) const { return m_IsNR; }
  396.     inline bool IsNS(void) const { return m_IsNS; }
  397.     inline bool IsNT(void) const { return m_IsNT; }
  398.     inline bool IsNW(void) const { return m_IsNW; }
  399.     inline bool IsXR(void) const { return m_IsXR; }
  400.     inline bool IsGI(void) const { return m_IsGI; }
  401.     inline bool IsCuratedRefSeq(void) const;
  402.     
  403.     const CSeq_entry& GetTSE(void) { return *m_TSE; }
  404.     TFeatAnnotMap GetFeatAnnotMap(void);
  405.     void AddBioseqWithNoPub(const CBioseq& seq);
  406.     void AddBioseqWithNoBiosource(const CBioseq& seq);
  407.     void AddBioseqWithNoMolinfo(const CBioseq& seq);
  408.     void AddProtWithoutFullRef(const CBioseq_Handle& seq);
  409.     void ReportMissingPubs(const CSeq_entry& se, const CCit_sub* cs);
  410.     void ReportMissingBiosource(const CSeq_entry& se);
  411.     void ReportProtWithoutFullRef(void);
  412.     void ReportBioseqsWithNoMolinfo(void);
  413.     bool IsNucAcc(const string& acc);
  414.     bool IsFarLocation(const CSeq_loc& loc);
  415.     CConstRef<CSeq_feat> GetCDSGivenProduct(const CBioseq& seq);
  416.     const CSeq_entry* GetAncestor(const CBioseq& seq, CBioseq_set::EClass clss);
  417.     bool IsSerialNumberInComment(const string& comment);
  418.     bool CheckSeqVector(const CSeqVector& vec);
  419.     bool IsSequenceAvaliable(const CSeqVector& vec);
  420. private:
  421.     // Prohibit copy constructor & assignment operator
  422.     CValidError_imp(const CValidError_imp&);
  423.     CValidError_imp& operator= (const CValidError_imp&);
  424.     void Setup(const CSeq_entry& se, CScope* scope);
  425.     void Setup(const CSeq_annot& sa, CScope* scope);
  426.     void SetScope(const CSeq_entry& se);
  427.     void SetScope(const CSeq_annot& sa);
  428.     void InitializeSourceQualTags();
  429.     void ValidateSourceQualTags(const string& str, const CSerialObject& obj);
  430.     bool IsMixedStrands(const CSeq_loc& loc);
  431.     void ValidatePubGen(const CCit_gen& gen, const CSerialObject& obj);
  432.     void ValidatePubArticle(const CCit_art& art, int uid, const CSerialObject& obj);
  433.     void ValidateEtAl(const CPubdesc& pubdesc, const CSerialObject& obj);
  434.     
  435.     bool HasName(const list< CRef< CAuthor > >& authors);
  436.     bool HasTitle(const CTitle& title);
  437.     bool HasIsoJTA(const CTitle& title);
  438.     CRef<CObjectManager>    m_ObjMgr;
  439.     CRef<CScope>            m_Scope;
  440.     CConstRef<CSeq_entry>   m_TSE;
  441.     // error repoitory
  442.     CValidError*       m_ErrRepository;
  443.     // flags derived from options parameter
  444.     bool m_NonASCII;            // User sets if Non ASCII char found
  445.     bool m_SuppressContext;     // Include context in errors if true
  446.     bool m_ValidateAlignments;  // Validate Alignments if true
  447.     bool m_ValidateExons;       // Check exon feature splice sites
  448.     bool m_SpliceErr;           // Bad splice site error if true, else warn
  449.     bool m_OvlPepErr;           // Peptide overlap error if true, else warn
  450.     bool m_RequireTaxonID;      // BioSource requires taxonID dbxref
  451.     bool m_RequireISOJTA;       // Journal requires ISO JTA
  452.     bool m_ValidateIdSet;       // validate update against ID set in database
  453.     bool m_RemoteFetch;         // Remote fetch enabled?
  454.     // !!! DEBUG {
  455.     bool m_PerfBottlenecks;         // Skip suspected performance bottlenecks
  456.     // }
  457.     // flags calculated by examining data in record
  458.     bool m_IsStandaloneAnnot;
  459.     bool m_NoPubs;                  // Suppress no pub error if true
  460.     bool m_NoBioSource;             // Suppress no organism error if true
  461.     bool m_IsGPS;
  462.     bool m_IsGED;
  463.     bool m_IsPDB;
  464.     bool m_IsTPA;
  465.     bool m_IsPatent;
  466.     bool m_IsRefSeq;
  467.     bool m_IsNC;
  468.     bool m_IsNG;
  469.     bool m_IsNM;
  470.     bool m_IsNP;
  471.     bool m_IsNR;
  472.     bool m_IsNS;
  473.     bool m_IsNT;
  474.     bool m_IsNW;
  475.     bool m_IsXR;
  476.     bool m_IsGI;
  477.     
  478.     // seq ids contained within the orignal seq entry. 
  479.     // (used to check for far location)
  480.     vector< CConstRef<CSeq_id> >    m_InitialSeqIds;
  481.     // prot bioseqs without a full reference (reporting cds feature)
  482.     vector< CConstRef<CSeq_feat> >  m_ProtWithNoFullRef;
  483.     // Bioseqs without pubs (should be considered only if m_NoPubs is false)
  484.     vector< CConstRef<CBioseq> >    m_BioseqWithNoPubs;
  485.     // Bioseqs without source (should be considered only if m_NoSource is false)
  486.     vector< CConstRef<CBioseq> >    m_BioseqWithNoSource;
  487.     // Bioseqs without MolInfo
  488.     vector< CConstRef<CBioseq> >    m_BioseqWithNoMolinfo;
  489.     // legal dbxref database strings
  490.     static const string legalDbXrefs[];
  491.     static const string legalRefSeqDbXrefs[];
  492.     // source qulalifiers prefixes
  493.     static const string sm_SourceQualPrefixes[];
  494.     static auto_ptr<CTextFsa> m_SourceQualTags;
  495.     CValidator::TProgressCallback m_PrgCallback;
  496.     CValidator::CProgressInfo     m_PrgInfo;
  497.     SIZE_TYPE   m_NumAlign;
  498.     SIZE_TYPE   m_NumAnnot;
  499.     SIZE_TYPE   m_NumBioseq;
  500.     SIZE_TYPE   m_NumBioseq_set;
  501.     SIZE_TYPE   m_NumDesc;
  502.     SIZE_TYPE   m_NumDescr;
  503.     SIZE_TYPE   m_NumFeat;
  504.     SIZE_TYPE   m_NumGraph;
  505. };
  506. // =============================================================================
  507. //                         Specific validation classes
  508. // =============================================================================
  509. class CValidError_base
  510. {
  511. protected:
  512.     // typedefs:
  513.     typedef CValidError_imp::TFeat TFeat;
  514.     typedef CValidError_imp::TBioseq TBioseq;
  515.     typedef CValidError_imp::TSet TSet;
  516.     typedef CValidError_imp::TDesc TDesc;
  517.     typedef CValidError_imp::TAnnot TAnnot;
  518.     typedef CValidError_imp::TGraph TGraph;
  519.     typedef CValidError_imp::TAlign TAlign;
  520.     typedef CValidError_imp::TEntry TEntry;
  521.     typedef CValidError_imp::TDbtags TDbtags;
  522.     CValidError_base(CValidError_imp& imp);
  523.     virtual ~CValidError_base();
  524.     void PostErr(EDiagSev sv, EErrType et, const string& msg,
  525.         const CSerialObject& obj);
  526.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TDesc ds);
  527.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TFeat ft);
  528.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq);
  529.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq,
  530.         TDesc ds);
  531.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TSet set);
  532.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TSet set, 
  533.         TDesc ds);
  534.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TAnnot annot);
  535.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TGraph graph);
  536.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TBioseq sq,
  537.         TGraph graph);
  538.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TAlign align);
  539.     void PostErr(EDiagSev sv, EErrType et, const string& msg, TEntry entry);
  540.     CValidError_imp& m_Imp;
  541.     CScope* m_Scope;
  542. };
  543. // ===========================  Validate Bioseq_set  ===========================
  544. class CValidError_bioseqset : private CValidError_base
  545. {
  546. public:
  547.     CValidError_bioseqset(CValidError_imp& imp);
  548.     virtual ~CValidError_bioseqset(void);
  549.     void ValidateBioseqSet(const CBioseq_set& seqset);
  550. private:
  551.     void ValidateNucProtSet(const CBioseq_set& seqset, int nuccnt, int protcnt);
  552.     void ValidateSegSet(const CBioseq_set& seqset, int segcnt);
  553.     void ValidatePartsSet(const CBioseq_set& seqset);
  554.     void ValidatePopSet(const CBioseq_set& seqset);
  555.     void ValidateGenProdSet(const CBioseq_set& seqset);
  556.     bool IsMrnaProductInGPS(const CBioseq& seq); 
  557. };
  558. // =============================  Validate Bioseq  =============================
  559. class CValidError_bioseq : private CValidError_base
  560. {
  561. public:
  562.     CValidError_bioseq(CValidError_imp& imp);
  563.     virtual ~CValidError_bioseq(void);
  564.     void ValidateSeqIds(const CBioseq& seq);
  565.     void ValidateInst(const CBioseq& seq);
  566.     void ValidateBioseqContext(const CBioseq& seq);
  567.     void ValidateHistory(const CBioseq& seq);
  568.     size_t GetTpaWithHistory(void)    const { return m_TpaWithHistory;    }
  569.     size_t GetTpaWithoutHistory(void) const { return m_TpaWithoutHistory; }
  570. private:
  571.     typedef multimap<string, const CSeq_feat*, PNocase> TStrFeatMap;
  572.     typedef vector<CMappedFeat>                         TMappedFeatVec;
  573.     static const size_t scm_AdjacentNsThreshold; // = 80
  574.     
  575.     void ValidateSeqLen(const CBioseq& seq);
  576.     void ValidateSegRef(const CBioseq& seq);
  577.     void ValidateDelta(const CBioseq& seq);
  578.     bool ValidateRepr(const CSeq_inst& inst, const CBioseq& seq);
  579.     void ValidateSeqParts(const CBioseq& seq);
  580.     void ValidateProteinTitle(const CBioseq& seq);
  581.     void ValidateRawConst(const CBioseq& seq);
  582.     void ValidateNs(const CBioseq& seq);
  583.     
  584.     void ValidateMultiIntervalGene (const CBioseq& seq);
  585.     void ValidateSeqFeatContext(const CBioseq& seq);
  586.     void ValidateDupOrOverlapFeats(const CBioseq& seq);
  587.     void ValidateCollidingGenes(const CBioseq& seq);
  588.     void x_CompareStrings(const TStrFeatMap& str_feat_map, const string& type,
  589.         EErrType err, EDiagSev sev);
  590.     void x_ValidateCompletness(const CBioseq& seq, const CMolInfo& mi);
  591.     void x_ValidateAbuttingUTR(const CBioseq_Handle& seq);
  592.     void x_ValidateAbuttingCDSGroup(const TMappedFeatVec& cds_group, bool minus);
  593.     void ValidateSeqDescContext(const CBioseq& seq);
  594.     void ValidateMolInfoContext(const CMolInfo& minfo, int& seq_biomol,
  595.         const CBioseq& seq, const CSeqdesc& desc);
  596.     void ValidateMolTypeContext(const EGIBB_mol& gibb, EGIBB_mol& seq_biomol,
  597.         const CBioseq& seq, const CSeqdesc& desc);
  598.     void ValidateUpdateDateContext(const CDate& update,const CDate& create,
  599.         const CBioseq& seq, const CSeqdesc& desc);
  600.     void ValidateOrgContext(const CSeqdesc_CI& iter, const COrg_ref& this_org,
  601.         const COrg_ref& org, const CBioseq& seq, const CSeqdesc& desc);
  602.     void ValidateGraphsOnBioseq(const CBioseq& seq);
  603.     void ValidateByteGraphOnBioseq(const CSeq_graph& graph, const CBioseq& seq);
  604.     void ValidateGraphOnDeltaBioseq(const CBioseq& seq, bool& validate_values);
  605.     void ValidateGraphValues(const CSeq_graph& graph, const CBioseq& seq);
  606.     void ValidateMinValues(const CByte_graph& bg);
  607.     void ValidateMaxValues(const CByte_graph& bg);
  608.     void ValidatemRNABioseqContext(const CBioseq_Handle& seq);
  609.     bool GetLitLength(const CDelta_seq& delta, TSeqPos& len);
  610.     bool IsSuportedGraphType(const CSeq_graph& graph) const;
  611.     SIZE_TYPE GetSeqLen(const CBioseq& seq);
  612.     void ValidateSecondaryAccConflict(const string& primary_acc,
  613.         const CBioseq& seq, int choice);
  614.     void ValidateIDSetAgainstDb(const CBioseq& seq);
  615.     void CheckForPubOnBioseq(const CBioseq& seq);
  616.     void CheckForBiosourceOnBioseq(const CBioseq& seq);
  617.     void CheckForMolinfoOnBioseq(const CBioseq& seq);
  618.     void CheckTpaHistory(const CBioseq& seq);
  619.     TSeqPos GetDataLen(const CSeq_inst& inst);
  620.     bool CdError(const CBioseq_Handle& bsh);
  621.     bool IsMrna(const CBioseq_Handle& bsh);
  622.     bool IsPrerna(const CBioseq_Handle& bsh);
  623.     size_t NumOfIntervals(const CSeq_loc& loc);
  624.     bool LocOnSeg(const CBioseq& seq, const CSeq_loc& loc);
  625.     bool NotPeptideException(const CFeat_CI& curr, const CFeat_CI& prev);
  626.     bool IsSameSeqAnnot(const CFeat_CI& fi1, const CFeat_CI& fi2);
  627.     bool IsSameSeqAnnotDesc(const CFeat_CI& fi1, const CFeat_CI& fi2);
  628.     bool IsIdIn(const CSeq_id& id, const CBioseq& seq);
  629.     bool SuppressTrailingXMsg(const CBioseq& seq);
  630.     bool GetLocFromSeq(const CBioseq& seq, CSeq_loc* loc);
  631.     bool IsDifferentDbxrefs(const TDbtags& dbxref1,
  632.                             const TDbtags& dbxref2);
  633.     bool IsHistAssemblyMissing(const CBioseq& seq);
  634.     bool IsFlybaseDbxrefs(const TDbtags& dbxrefs);
  635.     bool GraphsOnBioseq(const CBioseq& seq) const;
  636.     bool IsOtherDNA(const CBioseq& seq) const;
  637.     bool IsSynthetic(const CBioseq& seq) const;
  638.     bool x_IsArtificial(const CBioseq& seq) const;
  639.     bool x_IsActiveFin(const CBioseq& seq) const;
  640.     bool x_IsMicroRNA(const CBioseq& seq) const;
  641.     bool x_IsDeltaLitOnly(const CSeq_inst& inst) const;
  642.     size_t x_CountAdjacentNs(const CSeq_literal& lit);
  643.     // data
  644.     size_t m_TpaWithHistory;
  645.     size_t m_TpaWithoutHistory;
  646. };
  647. // =============================  Validate SeqFeat  ============================
  648. class CValidError_feat : private CValidError_base
  649. {
  650. public:
  651.     CValidError_feat(CValidError_imp& imp);
  652.     virtual ~CValidError_feat(void);
  653.     void ValidateSeqFeat(const CSeq_feat& feat);
  654.     size_t GetNumGenes    (void) const { return m_NumGenes; }
  655.     size_t GetNumGeneXrefs(void) const { return m_NumGeneXrefs; }
  656. private:
  657.     void ValidateSeqFeatData(const CSeqFeatData& data, const CSeq_feat& feat);
  658.     void ValidateSeqFeatProduct(const CSeq_loc& prod, const CSeq_feat& feat);
  659.     void ValidateGene(const CGene_ref& gene, const CSeq_feat& feat);
  660.     void ValidateGeneXRef(const CSeq_feat& feat);
  661.     void ValidateOperon(const CSeq_feat& feat);
  662.     void ValidateCdregion(const CCdregion& cdregion, const CSeq_feat& obj);
  663.     void ValidateCdTrans(const CSeq_feat& feat);
  664.     void ValidateCdsProductId(const CSeq_feat& feat);
  665.     void ValidateCdConflict(const CCdregion& cdregion, const CSeq_feat& feat);
  666.     void ReportCdTransErrors(const CSeq_feat& feat,
  667.         bool show_stop, bool got_stop, bool no_end, int ragged);
  668.     void ValidateSplice(const CSeq_feat& feat, bool check_all);
  669.     void ValidateBothStrands(const CSeq_feat& feat);
  670.     void ValidateCommonCDSProduct(const CSeq_feat& feat);
  671.     void ValidateBadMRNAOverlap(const CSeq_feat& feat);
  672.     void ValidateBadGeneOverlap(const CSeq_feat& feat);
  673.     void ValidateCDSPartial(const CSeq_feat& feat);
  674.     void ValidateCodeBreakNotOnCodon(const CSeq_feat& feat,const CSeq_loc& loc,
  675.                                      const CCdregion& cdregion);
  676.     void ValidateProt(const CProt_ref& prot, const CSerialObject& obj);
  677.     void ValidateRna(const CRNA_ref& rna, const CSeq_feat& feat);
  678.     void ValidateTrnaCodons(const CTrna_ext& trna, const CSeq_feat& feat);
  679.     void ValidateMrnaTrans(const CSeq_feat& feat);
  680.     void ValidateCommonMRNAProduct(const CSeq_feat& feat);
  681.     void ValidateRnaProductType(const CRNA_ref& rna, const CSeq_feat& feat);
  682.     void ValidateImp(const CImp_feat& imp, const CSeq_feat& feat);
  683.     void ValidateImpGbquals(const CImp_feat& imp, const CSeq_feat& feat);
  684.     void ValidatePeptideOnCodonBoundry(const CSeq_feat& feat, 
  685.         const string& key);
  686.     void ValidateFeatPartialness(const CSeq_feat& feat);
  687.     void ValidateExcept(const CSeq_feat& feat);
  688.     void ValidateExceptText(const string& text, const CSeq_feat& feat);
  689.     void ValidateFeatCit(const CPub_set& cit, const CSeq_feat& feat);
  690.     void ValidateFeatComment(const string& comment, const CSeq_feat& feat);
  691.     void ValidateFeatBioSource(const CBioSource& bsrc, const CSeq_feat& feat);
  692.     bool IsPlastid(int genome);
  693.     bool IsOverlappingGenePseudo(const CSeq_feat& feat);
  694.     unsigned char Residue(unsigned char res);
  695.     int  CheckForRaggedEnd(const CSeq_loc&, const CCdregion& cdr);
  696.     bool SuppressCheck(const string& except_text);
  697.     string MapToNTCoords(const CSeq_feat& feat, const CSeq_loc& product,
  698.         TSeqPos pos);
  699.     bool IsPartialAtSpliceSite(const CSeq_loc& loc, unsigned int errtype);
  700.     bool IsTransgenic(const CBioSource& bsrc);
  701.     bool IsSameAsCDS(const CSeq_feat& feat);
  702.     bool IsCDDFeat(const CSeq_feat& feat) const;
  703.     // data
  704.     size_t m_NumGenes;
  705.     size_t m_NumGeneXrefs;
  706. };
  707. // =============================  Validate SeqDesc  ============================
  708. class CValidError_desc : private CValidError_base
  709. {
  710. public:
  711.     CValidError_desc(CValidError_imp& imp);
  712.     virtual ~CValidError_desc(void);
  713.     void ValidateSeqDesc(const CSeqdesc& desc);
  714. private:
  715.     void ValidateComment(const string& comment, const CSeqdesc& desc);
  716.     void ValidateUser(const CUser_object& usr, const CSeqdesc& desc);
  717.     void ValidateMolInfo(const CMolInfo& minfo, const CSeqdesc& desc);
  718. };
  719. // ============================  Validate SeqAlign  ============================
  720. class CValidError_align : private CValidError_base
  721. {
  722. public:
  723.     CValidError_align(CValidError_imp& imp);
  724.     virtual ~CValidError_align(void);
  725.     void ValidateSeqAlign(const CSeq_align& align);
  726. private:
  727.     typedef CSeq_align::C_Segs::TDendiag    TDendiag;
  728.     typedef CSeq_align::C_Segs::TDenseg     TDenseg;
  729.     typedef CSeq_align::C_Segs::TPacked     TPacked;
  730.     typedef CSeq_align::C_Segs::TStd        TStd;
  731.     typedef CSeq_align::C_Segs::TDisc       TDisc;
  732.     void x_ValidateDendiag(const TDendiag& dendiags, const CSeq_align& align);
  733.     void x_ValidateDenseg(const TDenseg& denseg, const CSeq_align& align);
  734.     void x_ValidateStd(const TStd& stdsegs, const CSeq_align& align);
  735.     void x_ValidatePacked(const TPacked& packed, const CSeq_align& align);
  736.     size_t x_CountBits(const CPacked_seg::TPresent& present);
  737.     // Check if dimension is valid
  738.     template <typename T>
  739.     bool x_ValidateDim(T& obj, const CSeq_align& align, size_t part = 0);
  740.     // Check if the  strand is consistent in SeqAlignment of global 
  741.     // or partial type
  742.     void x_ValidateStrand(const TDenseg& denseg, const CSeq_align& align);
  743.     void x_ValidateStrand(const TPacked& packed, const CSeq_align& align);
  744.     void x_ValidateStrand(const TStd& std_segs, const CSeq_align& align);
  745.     // Check if an alignment is FASTA-like. 
  746.     // Alignment is FASTA-like if all gaps are at the end with dimensions > 2.
  747.     void x_ValidateFastaLike(const TDenseg& denseg, const CSeq_align& align);
  748.     void x_ValidateFastaLike(const TPacked& packed, const CSeq_align& align);
  749.     void x_ValidateFastaLike(const TStd& std_segs, const CSeq_align& align);
  750.     // Check if there is a gap for all sequences in a segment.
  751.     void x_ValidateSegmentGap(const TDenseg& denseg, const CSeq_align& align);
  752.     void x_ValidateSegmentGap(const TPacked& packed, const CSeq_align& align);
  753.     void x_ValidateSegmentGap(const TStd& std_segs, const CSeq_align& align);
  754.     // Validate SeqId in sequence alignment.
  755.     void x_ValidateSeqId(const CSeq_align& align);
  756.     void x_GetIds(const CSeq_align& align, vector< CRef< CSeq_id > >& ids);
  757.     // Check segment length, start and end point in Dense_seg, Dense_diag 
  758.     // and Std_seg
  759.     void x_ValidateSeqLength(const TDenseg& denseg, const CSeq_align& align);
  760.     void x_ValidateSeqLength(const TPacked& packed, const CSeq_align& align);
  761.     void x_ValidateSeqLength(const TStd& std_segs, const CSeq_align& align);
  762.     void x_ValidateSeqLength(const CDense_diag& dendiag, size_t dendiag_num,
  763.         const CSeq_align& align);
  764. };
  765. // ============================  Validate SeqGraph  ============================
  766. class CValidError_graph : private CValidError_base
  767. {
  768. public:
  769.     CValidError_graph(CValidError_imp& imp);
  770.     virtual ~CValidError_graph(void);
  771.     void ValidateSeqGraph(const CSeq_graph& graph);
  772.     SIZE_TYPE GetNumMisplacedGraphs(void) const { return m_NumMisplaced; }
  773. private:
  774.     bool x_IsMisplaced(const CSeq_graph& graph);
  775.     SIZE_TYPE   m_NumMisplaced;
  776. };
  777. // ============================  Validate SeqAnnot  ============================
  778. class CValidError_annot : private CValidError_base
  779. {
  780. public:
  781.     CValidError_annot(CValidError_imp& imp);
  782.     virtual ~CValidError_annot(void);
  783.     void ValidateSeqAnnot(const CSeq_annot& annot);
  784. private:
  785. };
  786. // ============================  Validate SeqDescr  ============================
  787. class CValidError_descr : private CValidError_base
  788. {
  789. public:
  790.     CValidError_descr(CValidError_imp& imp);
  791.     virtual ~CValidError_descr(void);
  792.     void ValidateSeqDescr(const CSeq_descr& descr);
  793. private:
  794. };
  795. END_SCOPE(validator)
  796. END_SCOPE(objects)
  797. END_NCBI_SCOPE
  798. /*
  799. * ===========================================================================
  800. *
  801. * $Log: validatorp.hpp,v $
  802. * Revision 1000.3  2004/06/01 19:47:42  gouriano
  803. * PRODUCTION: UPGRADED [GCC34_MSVC7] Dev-tree R1.64
  804. *
  805. * Revision 1.64  2004/05/10 13:56:22  shomrat
  806. * Use CSeq_feat_Handle instead of FeatAnnotMap
  807. *
  808. * Revision 1.63  2004/05/10 13:20:11  shomrat
  809. * + methods for validation of abutting UTRs
  810. *
  811. * Revision 1.62  2004/04/27 18:40:50  shomrat
  812. * ProtWithoutFullRef report CDS feature instead of protein bioseq
  813. *
  814. * Revision 1.61  2004/04/23 16:26:35  shomrat
  815. * Use sequence::GetNucleotideParent() instead of GetNucGivenProt()
  816. *
  817. * Revision 1.60  2004/03/25 18:32:26  shomrat
  818. * + ValidatemRNABioseqContext()
  819. *
  820. * Revision 1.59  2004/03/19 14:48:14  shomrat
  821. * + SEQ_FEAT_PartialsInconsistent
  822. *
  823. * Revision 1.58  2004/03/10 21:23:09  shomrat
  824. * + SEQ_DESCR_UnwantedCompleteFlag
  825. *
  826. * Revision 1.57  2004/03/01 18:39:21  shomrat
  827. * Added alternative start codon error
  828. *
  829. * Revision 1.56  2004/02/25 15:52:51  shomrat
  830. * Added CollidingLocusTags error
  831. *
  832. * Revision 1.55  2004/01/16 20:08:14  shomrat
  833. * Added LocusTagProblem error
  834. *
  835. * Revision 1.54  2004/01/12 20:24:42  shomrat
  836. * Added ValidateCitSub
  837. *
  838. * Revision 1.53  2003/12/17 19:15:19  shomrat
  839. * declarations for graph packaging problem test
  840. *
  841. * Revision 1.52  2003/12/16 17:34:48  shomrat
  842. * Added SEQ_INST_SeqLocLength
  843. *
  844. * Revision 1.51  2003/12/16 16:18:40  shomrat
  845. * Added ValidateCdConflict
  846. *
  847. * Revision 1.50  2003/11/14 15:55:48  shomrat
  848. * added TPA history check
  849. *
  850. * Revision 1.49  2003/11/12 20:30:24  shomrat
  851. * added error code for multiple cds on mRNA bioseq
  852. *
  853. * Revision 1.48  2003/10/27 17:00:37  shomrat
  854. * changed signature of ValidatePubArticle
  855. *
  856. * Revision 1.47  2003/10/27 14:53:57  shomrat
  857. * added eErr_SEQ_FEAT_UTRdoesNotAbutCDS
  858. *
  859. * Revision 1.46  2003/10/27 14:14:11  shomrat
  860. * added eErr_SEQ_INST_SeqLitGapLength0
  861. *
  862. * Revision 1.45  2003/10/24 17:56:07  shomrat
  863. * added ValidateOperon
  864. *
  865. * Revision 1.44  2003/10/20 18:30:43  shomrat
  866. * added x_IsArtificial
  867. *
  868. * Revision 1.43  2003/10/20 16:08:55  shomrat
  869. * genes and gene xrefs counters
  870. *
  871. * Revision 1.42  2003/10/13 18:44:02  shomrat
  872. * Added error code for bad tRNA amino acid
  873. *
  874. * Revision 1.41  2003/10/01 22:42:45  ucko
  875. * Actually declare CValidError_feat::IsCDDFeat....
  876. *
  877. * Revision 1.40  2003/09/23 13:25:55  shomrat
  878. * Added IsDeltaSeqOnly test
  879. *
  880. * Revision 1.39  2003/09/22 20:23:33  shomrat
  881. * Added x_IsMicroRNA
  882. *
  883. * Revision 1.38  2003/09/03 18:25:09  shomrat
  884. * added SEQ_DESCR_RefGeneTrackingWithoutStatus
  885. *
  886. * Revision 1.37  2003/08/06 15:05:42  shomrat
  887. * Added test for adjacent Ns in Seq-literal
  888. *
  889. * Revision 1.36  2003/07/24 20:16:18  vasilche
  890. * Fixed typedefs for dbxref: list<CRef<CDbtag>> -> vector<CRef<CDbtag>>
  891. *
  892. * Revision 1.35  2003/07/21 21:18:19  shomrat
  893. * Added eErr_SEQ_FEAT_MissingLocation
  894. *
  895. * Revision 1.34  2003/07/15 18:26:43  shomrat
  896. * Added x_IsActiveFin
  897. *
  898. * Revision 1.33  2003/07/02 21:03:38  shomrat
  899. * Added ValidateCDSPartial
  900. *
  901. * Revision 1.32  2003/06/27 18:53:20  shomrat
  902. * Changed ValidateDbxref definition
  903. *
  904. * Revision 1.31  2003/06/19 15:34:09  shomrat
  905. * Added IsOtherDNA and IsSynthetic
  906. *
  907. * Revision 1.30  2003/06/02 16:06:43  dicuccio
  908. * Rearranged src/objects/ subtree.  This includes the following shifts:
  909. *     - src/objects/asn2asn --> arc/app/asn2asn
  910. *     - src/objects/testmedline --> src/objects/ncbimime/test
  911. *     - src/objects/objmgr --> src/objmgr
  912. *     - src/objects/util --> src/objmgr/util
  913. *     - src/objects/alnmgr --> src/objtools/alnmgr
  914. *     - src/objects/flat --> src/objtools/flat
  915. *     - src/objects/validator --> src/objtools/validator
  916. *     - src/objects/cddalignview --> src/objtools/cddalignview
  917. * In addition, libseq now includes six of the objects/seq... libs, and libmmdb
  918. * replaces the three libmmdb? libs.
  919. *
  920. * Revision 1.29  2003/05/28 16:23:45  shomrat
  921. * Minor corrections.
  922. *
  923. * Revision 1.28  2003/05/05 15:35:45  shomrat
  924. * Added ValidateCdsProductId
  925. *
  926. * Revision 1.27  2003/04/29 14:55:09  shomrat
  927. * Added SeqAlign validation
  928. *
  929. * Revision 1.26  2003/04/24 16:16:00  vasilche
  930. * Added missing includes and forward class declarations.
  931. *
  932. * Revision 1.25  2003/04/15 14:53:32  shomrat
  933. * Added a progress callback mechanism
  934. *
  935. * Revision 1.24  2003/04/10 19:25:07  shomrat
  936. * Added ValidateMolTypeContext
  937. *
  938. * Revision 1.23  2003/04/07 14:56:09  shomrat
  939. * Added Seq-loc ids validation
  940. *
  941. * Revision 1.22  2003/04/04 18:39:17  shomrat
  942. * Added Internal Exception error and tests for the availabilty of the sequence
  943. *
  944. * Revision 1.21  2003/03/31 14:41:21  shomrat
  945. * $id: -> $id$
  946. *
  947. * Revision 1.20  2003/03/28 16:28:53  shomrat
  948. * Added Seq-graph tests related methods
  949. *
  950. * Revision 1.19  2003/03/21 21:12:17  shomrat
  951. * Added eErr_SEQ_DESCR_UnnecessaryBioSourceFocus; Change to signature of ValidateOrgContext
  952. *
  953. * Revision 1.18  2003/03/21 19:37:04  shomrat
  954. * Added IsNucAcc and IsFlybaseDbxrefs
  955. *
  956. * Revision 1.17  2003/03/21 16:21:46  shomrat
  957. * Added ValidateIDSetAgainstDb
  958. *
  959. * Revision 1.16  2003/03/20 18:55:28  shomrat
  960. * Added validation of standalone Seq-annot objects
  961. *
  962. * Revision 1.15  2003/02/24 20:16:41  shomrat
  963. * Holds refernce to the CValidError object, and not the internal TErrs
  964. *
  965. * Revision 1.14  2003/02/14 21:46:20  shomrat
  966. * Added methods to check Bioseqs with no MolInfo
  967. *
  968. * Revision 1.13  2003/02/12 17:40:35  shomrat
  969. * Added function for SEQ_DESCR checks
  970. *
  971. * Revision 1.12  2003/02/07 21:09:43  shomrat
  972. * Added eErr_SEQ_INST_TerminalNs; Added helper methods
  973. *
  974. * Revision 1.11  2003/02/03 20:18:14  shomrat
  975. * Added flag to skip performance bottlenecks (for testing)
  976. *
  977. * Revision 1.10  2003/02/03 17:08:48  shomrat
  978. * Changed return value for GetCDSGivenProduct
  979. *
  980. * Revision 1.9  2003/01/29 21:55:19  shomrat
  981. * Added check for et al
  982. *
  983. * Revision 1.8  2003/01/24 20:39:40  shomrat
  984. * Added history validation for bioseq
  985. *
  986. * Revision 1.7  2003/01/21 20:20:43  shomrat
  987. * Added private methods to facilitate the PubDesc Validation
  988. *
  989. * Revision 1.6  2003/01/10 16:31:23  shomrat
  990. * Added private functions to CValidError_feat
  991. *
  992. * Revision 1.5  2003/01/08 18:35:31  shomrat
  993. * Added mapping features to their enclosing annotation
  994. *
  995. * Revision 1.4  2003/01/02 21:57:21  shomrat
  996. * Add eErr_SEQ_FEAT_BadProductSeqId error; Chenges in (mostly private) interfaces of validation classes
  997. *
  998. * Revision 1.3  2002/12/24 16:52:15  shomrat
  999. * Changes to include directives
  1000. *
  1001. * Revision 1.2  2002/12/23 20:09:02  shomrat
  1002. * Added static functions as private members; Added base class for specific validation classes
  1003. *
  1004. *
  1005. * ===========================================================================
  1006. */
  1007. #endif  /* VALIDATOR___VALIDATORP__HPP */