int main(int argc, char *argv[]) { Vector *pieces; char *str; char *reverse; int testResult = 0; initEnsC(argc, argv); pieces = CigarStrUtil_getPieces(cigar1); testResult += ok(1, Vector_getNumElement(pieces) == 6); str = Vector_getElementAt(pieces,0); testResult += ok(2, !strcmp(str,"6M")); Vector_free(pieces); StrUtil_copyString(&str,cigar1,0); testResult += ok(3, !strcmp(str,cigar1)); reverse = CigarStrUtil_reverse(str,strlen(str)); free(str); pieces = CigarStrUtil_getPieces(reverse); testResult += ok(4, Vector_getNumElement(pieces) == 6); str = Vector_getElementAt(pieces,0); testResult += ok(5, !strcmp(str,"M")); return testResult; }
Vector *GenomicAlignAdaptor_objectsFromStatementHandle(GenomicAlignAdaptor *gaa, StatementHandle *sth, int reverse) { Vector *results = Vector_new(); ResultRow *row; DNAFragAdaptor *dfa; IDType consensusDNAFragId; IDType queryDNAFragId; int consensusStart; int consensusEnd; int queryStart; int queryEnd; int queryStrand; IDType methodLinkId; double score; double percId; char *cigarString; dfa = ComparaDBAdaptor_getDNAFragAdaptor(gaa->dba); while ((row = sth->fetchRow(sth))) { GenomicAlign *genomicAlign; char *alignmentType; if (reverse) { queryDNAFragId = row->getLongLongAt(row,0); queryStart = row->getIntAt(row,1); queryEnd = row->getIntAt(row,2); consensusDNAFragId = row->getLongLongAt(row,3); consensusStart = row->getIntAt(row,4); consensusEnd = row->getIntAt(row,5); } else { consensusDNAFragId = row->getLongLongAt(row,0); consensusStart = row->getIntAt(row,1); consensusEnd = row->getIntAt(row,2); queryDNAFragId = row->getLongLongAt(row,3); queryStart = row->getIntAt(row,4); queryEnd = row->getIntAt(row,5); } queryStrand = row->getIntAt(row,6); methodLinkId = row->getLongLongAt(row,7); score = row->getDoubleAt(row,8); percId = row->getDoubleAt(row,9); cigarString = row->getStringAt(row,10); alignmentType = GenomicAlignAdaptor_alignmentTypeByMethodLinkId(gaa, methodLinkId); if (reverse) { StrUtil_strReplChrs(cigarString,"DI","ID"); // alignment of the opposite strand if (queryStrand == -1) { cigarString = CigarStrUtil_reverse(cigarString, strlen(cigarString)); } } genomicAlign = GenomicAlign_new(); GenomicAlign_setAdaptor(genomicAlign, (BaseAdaptor *)gaa); GenomicAlign_setConsensusDNAFrag(genomicAlign, DNAFragAdaptor_fetchByDbID(dfa,consensusDNAFragId)); GenomicAlign_setConsensusStart(genomicAlign, consensusStart); GenomicAlign_setConsensusEnd(genomicAlign, consensusEnd); GenomicAlign_setQueryDNAFrag(genomicAlign, DNAFragAdaptor_fetchByDbID(dfa,queryDNAFragId)); GenomicAlign_setQueryStart(genomicAlign, queryStart); GenomicAlign_setQueryEnd(genomicAlign, queryEnd); GenomicAlign_setQueryStrand(genomicAlign, queryStrand); GenomicAlign_setAlignmentType(genomicAlign, alignmentType); GenomicAlign_setScore(genomicAlign, score); GenomicAlign_setPercentId(genomicAlign, percId); GenomicAlign_setCigarString(genomicAlign, cigarString); Vector_addElement(results, genomicAlign); } return results; }