Exemple #1
0
/* 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;
}
Exemple #2
0
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++;
}
Exemple #3
0
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++;
}