/* int loadSeqs(FILE*) * Loads the primers from the given file. */ int loadSeqs(FILE* prim) { Primer* prev = NULL; int count = 0; while (fgets(line, MAX_SIZE, prim) != NULL) { if (line[0] == '#') continue; // load name and sequence char* name = strtok(line, CSV); char* seq = strtok(NULL, CSV); char* rev = strtok(NULL, DEL); if (name == NULL || seq == NULL || rev == NULL) { error("", ERRPRIM); continue; } // check for duplicate for (Primer* pc = primo; pc != NULL; pc = pc->next) if (!strcmp(pc->name, name)) exit(error(name, ERRPREP)); // create primer Primer* p = (Primer*) memalloc(sizeof(Primer)); p->name = (char*) memalloc(1 + strlen(name)); p->fwd = (char*) memalloc(1 + strlen(seq)); p->rev = (char*) memalloc(1 + strlen(rev)); strcpy(p->name, name); strcpy(p->fwd, seq); strcpy(p->rev, rev); // save sequence rc's p->frc = revComp(p->fwd); p->rrc = revComp(p->rev); p->fcount = p->rcount = p->fcountr = p->rcountr = 0; p->next = NULL; if (primo == NULL) primo = p; else prev->next = p; prev = p; p->len = 0; p->fpos = -1; count++; } return count; }
void SimpleAligner::align(dagcon::Alignment& aln) { // This alignment type defined in blasr code base blasr::Alignment initialAln, refinedAln; FASTQSequence query; query.seq = (Nucleotide*)aln.qstr.c_str(); query.length = aln.qstr.length(); DNASequence target; target.seq = (Nucleotide*)aln.tstr.c_str(); target.length = aln.tstr.length(); SDPAlign(query, target, distScoreFn_, tupleMetrics_.tupleSize, config_.sdpIndel, config_.sdpIndel, config_.indelRate*2, initialAln, Local); GuidedAlign(query, target, initialAln, distScoreFn_, config_.bandSize, refinedAln); std::string queryStr, alignStr, targetStr; //StickPrintAlignment(initialAln, query, target, std::cout); //StickPrintAlignment(refinedAln, query, target, std::cout); CreateAlignmentStrings(refinedAln, query.seq, target.seq, targetStr, alignStr, queryStr, query.length, target.length); // alignment coordinates may change, update alignment object aln.start += refinedAln.GenomicTBegin(); aln.end = aln.start + refinedAln.GenomicTEnd(); if (aln.strand == '-') { aln.start = aln.tlen - aln.end; aln.qstr = revComp(queryStr); aln.tstr = revComp(targetStr); } else { aln.qstr = queryStr; aln.tstr = targetStr; } aln.start++; }
void SimpleAligner::align(dagcon::Alignment& aln) { // This alignment type defined in blasr code base blasr::Alignment initialAln, refinedAln; FASTQSequence query; query.seq = (Nucleotide*)aln.qstr.c_str(); query.length = aln.qstr.length(); query.AllocateRichQualityValues(query.length); query.qual.Allocate(query.length); DNASequence target; target.seq = (Nucleotide*)aln.tstr.c_str(); target.length = aln.tstr.length(); SDPAlign(query, target, distScoreFn_, tupleMetrics_.tupleSize, config_.sdpIndel, config_.sdpIndel, config_.indelRate*2, initialAln, Local); GuidedAlign(query, target, initialAln, distScoreFn_, config_.bandSize, refinedAln); //StickPrintAlignment(initialAln, query, target, std::cout); //StickPrintAlignment(refinedAln, query, target, std::cout); std::string queryStr, alignStr, targetStr; CreateAlignmentStrings(refinedAln, query.seq, target.seq, targetStr, alignStr, queryStr, query.length, target.length); if (aln.strand == '-') { aln.start = aln.len - (aln.end + refinedAln.tPos); aln.qstr = revComp(queryStr); aln.tstr = revComp(targetStr); } else { aln.start += refinedAln.tPos; aln.qstr = queryStr; aln.tstr = targetStr; } aln.start++; }