SamValidation.h
00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef __SAM_VALIDATION_H__
00019 #define __SAM_VALIDATION_H__
00020
00021 #include "SamFile.h"
00022 #include <list>
00023
00024 class SamValidationError
00025 {
00026 public:
00027
00028
00029 enum Severity {WARNING, ERROR};
00030
00031 enum Type
00032 {
00033
00034 INVALID_QNAME,
00035 INVALID_REF_ID,
00036 INVALID_RNAME,
00037 INVALID_POS,
00038 INVALID_MAPQ,
00039 INVALID_CIGAR,
00040 INVALID_MRNM,
00041 INVALID_QUAL
00042 };
00043
00044 static const char* getTypeString(Type type);
00045
00046 SamValidationError(Type type, Severity severity, std::string Message);
00047
00048 Type getType() const;
00049 Severity getSeverity() const;
00050 const char* getMessage() const;
00051
00052 const char* getTypeString() const;
00053 const char* getSeverityString() const;
00054
00055 void getErrorString(std::string& errorString) const;
00056
00057 void printError() const;
00058
00059 private:
00060 SamValidationError();
00061
00062 static const char* enumTypeString[];
00063 static const char* enumSeverityString[];
00064
00065 Type myType;
00066 Severity mySeverity;
00067 std::string myMessage;
00068
00069 };
00070
00071
00072
00073
00074
00075 inline std::ostream &operator << (std::ostream &stream,
00076 const SamValidationError &error)
00077 {
00078 std::string errorMessage;
00079 error.getErrorString(errorMessage);
00080 stream << errorMessage;
00081 return stream;
00082 }
00083
00084
00085 class SamValidationErrors
00086 {
00087 public:
00088
00089 SamValidationErrors();
00090
00091 ~SamValidationErrors();
00092
00093
00094 void clear();
00095
00096
00097 void addError(SamValidationError::Type newType,
00098 SamValidationError::Severity newSeverity,
00099 const char* newMessage);
00100
00101
00102 unsigned int numErrors();
00103
00104
00105
00106
00107 const SamValidationError* getNextError();
00108
00109
00110 void resetErrorIter();
00111
00112
00113 void getErrorString(std::string& errorString) const;
00114
00115 private:
00116 std::list<const SamValidationError*> myValidationErrors;
00117 std::list<const SamValidationError*>::const_iterator myErrorIter;
00118 };
00119
00120
00121
00122
00123
00124 inline std::ostream& operator << (std::ostream& stream,
00125 const SamValidationErrors& errors)
00126 {
00127 std::string errorString = "";
00128 errors.getErrorString(errorString);
00129 stream << errorString;
00130 return stream;
00131 }
00132
00133
00134 class SamValidator
00135 {
00136 public:
00137
00138 static bool isValid(SamFileHeader& samHeader, SamRecord& samRecord,
00139 SamValidationErrors& validationErrors);
00140
00141 static bool isValidQname(const char* qname, uint8_t qnameLen,
00142 SamValidationErrors& validationErrors);
00143 static bool isValidFlag(uint16_t flag,
00144 SamValidationErrors& validationErrors);
00145
00146 static bool isValidRname(SamFileHeader& samHeader,
00147 const char* rname,
00148 SamValidationErrors& validationErrors);
00149
00150 static bool isValidRname(const char* rname,
00151 SamValidationErrors& validationErrors);
00152 static bool isValidRefID(int32_t refID, const SamReferenceInfo& refInfo,
00153 SamValidationErrors& validationErrors);
00154 static bool isValid1BasedPos(int32_t pos,
00155 SamValidationErrors& validationErrors);
00156 static bool isValidMapQuality(uint8_t mapQuality,
00157 SamValidationErrors& validationErrors);
00158
00159 static bool isValidCigar(const char* cigar, const char* sequence,
00160 SamValidationErrors& validationErrors);
00161 static bool isValidMrnm();
00162 static bool isValidMpos();
00163 static bool isValidIsize();
00164 static bool isValidSeq();
00165
00166 static bool isValidQuality(const char* quality, const char* sequence,
00167 SamValidationErrors& validationErrors);
00168 static bool isValidTag();
00169 static bool isValidVtype();
00170 static bool isValidValue();
00171 };
00172
00173
00174 #endif