static void DoFastaFeat ( SeqFeatPtr sfp, Pointer userdata ) { CSpeedFlagPtr cfp; CharPtr str; if (sfp == NULL) return; cfp = (CSpeedFlagPtr) userdata; if (cfp == NULL) return; if (cfp->ofp != NULL) { str = SeqLocPrint (sfp->location); if (str != NULL) { fprintf (cfp->ofp, "> [%s]\n", str); MemFree (str); } SeqLocFastaStream (sfp->location, cfp->ofp, STREAM_EXPAND_GAPS, 70, 0, 0); } else { SeqPortStreamLoc (sfp->location, STREAM_EXPAND_GAPS, NULL, EmptyStreamProc); } }
/** Creates the header part of an XML report for a BLAST search. * @param program Program name [in] * @param database Database name [in] * @param query_loc Query Seq-loc [in] * @param flags Flag to indicate whether query sequence should be included in * the output. [in] * @param search_param Search parameters [in] */ static BlastOutput* s_CreateBlastOutputHead(const char* program, const char* database, SeqLoc* query_loc, Int4 flags, const Blast_SearchParams* search_param) { BlastOutput* boutp; Char buffer[1024]; char* program_to_use = NULL; if((boutp = BlastOutputNew()) == NULL) return FALSE; if (strcmp(program, "rpsblast") == 0) program_to_use = strdup("blastp"); else if (strcmp(program, "rpstblastn") == 0) program_to_use = strdup("blastx"); else program_to_use = strdup(program); /* For optimization BLOSUM62 may be loaded ones */ if (query_loc) { SeqId* sip = SeqLocId(query_loc); Bioseq* bsp; SeqIdWrite(sip, buffer, PRINTID_FASTA_LONG, sizeof(buffer)); boutp->query_ID = strdup(buffer); bsp = BioseqLockById(sip); if(bsp != NULL) { if (BioseqGetTitle(bsp) != NULL) boutp->query_def = strdup(BioseqGetTitle(bsp)); else boutp->query_def = strdup("No definition line found"); } BioseqUnlock(bsp); boutp->query_len = SeqLocLen(query_loc); if(flags & BXML_INCLUDE_QUERY) { boutp->query_seq = (char *) calloc(boutp->query_len+1, 1); SeqPortStreamLoc(query_loc, STREAM_EXPAND_GAPS | STREAM_CORRECT_INVAL, boutp->query_seq, NULL); } else { boutp->query_seq = NULL; /* Do we need sequence here??? */ } } /* Program name. Use the local version of the program. No need to copy it since it was locally allocated. */ boutp->program = program_to_use; /* Database name */ if (database) boutp->db = strdup(database); /* Version text */ sprintf(buffer, "%s %s [%s]", program_to_use, BlastGetVersionNumber(), BlastGetReleaseDate()); boutp->version = strdup(buffer); /* Reference */ boutp->reference = BlastGetReference(FALSE); /* Filling parameters */ boutp->param = ParametersNew(); boutp->param->expect = search_param->expect; boutp->param->gap_open = search_param->gap_open; boutp->param->gap_extend = search_param->gap_extension; if (search_param->matrix) boutp->param->matrix = strdup(search_param->matrix); boutp->param->sc_match = search_param->match; boutp->param->sc_mismatch = search_param->mismatch; boutp->param->include = search_param->ethresh; if (search_param->filter_string) boutp->param->filter = strdup(search_param->filter_string); return boutp; }