QVariant UserSearchModel::data(UserSearchResult* item, int role) { switch (role) { case Qt::DisplayRole: return QVariant(nameLine(item)); case DetailTextRole: return QVariant(detailLine(item)); default: return QVariant(); } }
void BlastParser::parseFile(string blastResultFileLocation) { string blastResultFile(blastResultFileLocation); blastResultFile += rootName; blastResultFile += "/query.blaPDB"; FILE* fptr = fopen((char*) blastResultFile.c_str(), "r"); if (fptr == NULL) { cout << "input file: " << blastResultFile << " can't open" << endl; } else { int lineLength = 5000; char line[lineLength]; BlastRecord blastRecord; char prevState = 'N'; char currentState = 'N'; while (fgets(line, lineLength, fptr) != NULL) { //cout << line << endl; if (strstr(line, ">") != NULL) { currentState = 'A'; } else if (strstr(line, "Score =") != NULL) { currentState = 'B'; } else if (strstr(line, "Query: ") != NULL && prevState == 'B') { currentState = 'C'; } else if ((strstr(line, "Query: ") != NULL && prevState == 'C') || (strstr(line, "Query: ") != NULL && prevState == 'D')) { currentState = 'D'; } else { continue; } /*cout << "prev: " << prevState << " current: " << currentState << endl;*/ if ((prevState == 'D' && currentState == 'B') || (prevState == 'C' && currentState == 'B') || (prevState == 'D' && currentState == 'A') || (prevState == 'C' && currentState == 'A')) { blastRecords.push_back(blastRecord); //blastRecord.displayRecordInfo(); string emptyString(""); blastRecord.setQueryPart(emptyString); blastRecord.setSubjectPart(emptyString); } if (currentState == 'A') { string nameLine(line); string hitName = nameLine.substr(1, 6); //cout << "hitName is " << hitName << endl; blastRecord.setHitName(hitName); } else if (currentState == 'B') { char* pch = strstr(line, "="); double score; sscanf(pch + 1, "%lf", &score); char* pch2 = strstr(pch + 1, "="); double expect; sscanf(pch2 + 1, "%lf", &expect); blastRecord.setScore(score); blastRecord.setExpect(expect); /*cout << "score: " << score << endl; cout << "expect: " << expect << endl;*/ } else if (currentState == 'C') { char info0[6], queryPart[200]; int queryStart, queryEnd; sscanf(line, "%s %d %s %d", info0, &queryStart, queryPart, &queryEnd); string _queryPart(queryPart); fgets(line, lineLength, fptr); //skip a line fgets(line, lineLength, fptr); //fetch subject line info char info1[6], subjectPart[200]; int subjectStart, subjectEnd; sscanf(line, "%s %d %s %d", info1, &subjectStart, subjectPart, &subjectEnd); string _subjectPart(subjectPart); blastRecord.setQueryStart(queryStart); blastRecord.setQueryPart(_queryPart); blastRecord.setQueryEnd(queryEnd); blastRecord.setSubjectStart(subjectStart); blastRecord.setSubjectPart(_subjectPart); blastRecord.setSubjectEnd(subjectEnd); /*cout << "query info: " << queryStart << queryPart << queryEnd << endl; cout << "subject info: " << subjectStart << subjectPart << subjectEnd << endl;*/ } else if (currentState == 'D') { char info0[6], queryPart[200]; int queryStart, queryEnd; sscanf(line, "%s %d %s %d", info0, &queryStart, queryPart, &queryEnd); string _queryPart(queryPart); fgets(line, lineLength, fptr); //skip a line fgets(line, lineLength, fptr); //fetch subject line info char info1[6], subjectPart[200]; int subjectStart, subjectEnd; sscanf(line, "%s %d %s %d", info1, &subjectStart, subjectPart, &subjectEnd); string _subjectPart(subjectPart); string oldQueryPart = blastRecord.getQueryPart(); oldQueryPart += _queryPart; blastRecord.setQueryPart(oldQueryPart); blastRecord.setQueryEnd(queryEnd); string oldSubjectPart = blastRecord.getSubjectPart(); oldSubjectPart += _subjectPart; blastRecord.setSubjectPart(oldSubjectPart); blastRecord.setSubjectEnd(subjectEnd); /*cout << "query info: " << blastRecord.getQueryStart() << blastRecord.getQueryPart() << blastRecord.getQueryEnd() << endl; cout << "subject info: " << blastRecord.getSubjectStart() << blastRecord.getSubjectPart() << blastRecord.getSubjectEnd() << endl; */ } prevState = currentState; } blastRecords.push_back(blastRecord); //don't forget the last hit //blastRecord.displayRecordInfo(); } }