processingData =
true;
65 boolinFirstBlock =
false;
69 while(iStr.
ReadLine(line, lineCount)) {
75 if(lineInBlock !=
mSeqIds.size()) {
77 "Missing data line. Expected sequence data for seqID \"%s\"",
78 mSeqIds[lineInBlock].mData.c_str());
84processingData =
false;
86inFirstBlock =
false;
97 "Missing data line. Expected sequence data, not sequence offsets");
103 if(processingData) {
107 "Missing data line. Expected sequence data, not termination line");
113 if(!processingData) {
114processingData =
true;
118inFirstBlock =
true;
121 stringseqId, seqData;
126 "Malformatted data line");
139 "Duplicate sequence ID \"%s\", first seen on line %d",
140seqId.c_str(), existingInfo.
mNumLine);
144 "Conflicting IDs: \"%s\" differs only in case from \"%s\" on line %d.",
145seqId.c_str(), existingInfo.
mData.c_str(), existingInfo.
mNumLine);
152 mSeqIds.push_back({seqId, lineCount});
156 if(lineInBlock >=
mSeqIds.size()) {
160 "Extraneous data line in interleaved data block");
164 "Unexpected sequence ID \"%s\"", seqId.c_str());
173 if(refSeqData.empty()) {
174refSeqData = seqData;
177 if(seqData.size() != refSeqData.size()) {
179 "Unexpected number of sequence symbols (expected %d but found %d)",
180refSeqData.size(), seqData.size());
186 for(
auto i= 0;
i< seqData.size(); ++
i) {
187 if(seqData[
i] ==
'.') {
188seqData[
i] = refSeqData[
i];
193 mSequences[lineInBlock].push_back({seqData, lineCount});
215vector<string> tokens;
217 if(tokens.size() > 5) {
220 for(
autotoken: tokens) {
234 return(line ==
"//");
245vector<string> tokens;
247 if(tokens.size() < 2) {
254 if(tokens[1] ==
">") {
255 if(tokens.size() < 5) {
259 for(
autocurBlock = 3; curBlock < tokens.size() - 1; ++curBlock) {
260seqData += tokens[curBlock];
264 for(
autocurBlock = 1; curBlock < tokens.size(); ++curBlock) {
265seqData += tokens[curBlock];
END_ENUM_INFO string ErrorPrintf(const char *format,...)
void xImportAlignmentData(CSequenceInfo &, CLineInput &) override
static bool xExtractSequinSequenceData(const string &line, string &seqId, string &seqData)
static bool xIsSequinOffsetsLine(const string &line)
static bool xIsSequinTerminationLine(const string &line)
void xAdjustSequenceInfo(CSequenceInfo &) override
bool xSeqIdIsEqualToInfoAt(const string &seqId, int index)
vector< TLineInfo > mSeqIds
vector< vector< TLineInfo > > mSequences
ESeqIdComparison xGetExistingSeqIdInfo(const string &seqId, TLineInfo &existingInfo)
virtual bool ReadLine(string &line, int &lineNum)=0
CSequenceInfo & SetBeginningGap(const string &c)
CSequenceInfo & SetEndGap(const string &c)
CSequenceInfo & SetMiddleGap(const string &c)
CSequenceInfo & SetMatch(const string &c)
The NCBI C++ standard methods for dealing with std::string.
#define END_NCBI_SCOPE
End previously defined NCBI scope.
#define END_SCOPE(ns)
End the previously defined scope.
#define BEGIN_NCBI_SCOPE
Define ncbi namespace.
#define BEGIN_SCOPE(ns)
Define a new scope.
static list< string > & Split(const CTempString str, const CTempString delim, list< string > &arr, TSplitFlags flags=0, vector< SIZE_TYPE > *token_pos=NULL)
Split a string using specified delimiters.
static bool EndsWith(const CTempString str, const CTempString end, ECase use_case=eCase)
Check if a string ends with a specified suffix value.
static void TruncateSpacesInPlace(string &str, ETrunc where=eTrunc_Both)
Truncate whitespace in a string (in-place)
@ fSplit_MergeDelimiters
Merge adjacent delimiters.
@ eAlnSubcode_IllegalDataLine
@ eAlnSubcode_BadDataCount
@ eAlnSubcode_MissingDataLine
@ eAlnSubcode_UnexpectedSeqId
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4