include/print.h File Reference

This graph shows which files directly or indirectly include this file:

Go to the source code of this file.

Functions

char * print_formatDescription (char *description, int4 firstLineIndent, int4 remainingLinesIndent, int4 maxLineLength)
void print_gappedAlignmentsFull (char *query, struct PSSMatrix PSSMatrix)
void print_gappedAlignmentsBrief ()
void print_singleSequence (unsigned char *sequence, int4 length)
char * print_eValue2String (double evalue)
void print_XMLheader (char *query, struct PSSMatrix PSSMatrix)
void print_XMLfooter ()


Function Documentation

char* print_eValue2String ( double  evalue  ) 

Definition at line 817 of file print.c.

References print_eValueBuf.

Referenced by print_gappedAlignmentsBrief(), print_gappedExtension(), and print_tabularGappedExtension().

00818 {
00819         char* eValueBuffer = print_eValueBuf;
00820 
00821         if (evalue < 1.0e-180) {
00822         sprintf(print_eValueBuf, "0.0");
00823     } else if (evalue < 1.0e-99) {
00824         sprintf(print_eValueBuf, "%2.0le", evalue);
00825         eValueBuffer++; /* Knock off digit. */
00826     } else if (evalue < 0.0009) {
00827         sprintf(print_eValueBuf, "%3.0le", evalue);
00828     } else if (evalue < 0.1) {
00829         sprintf(print_eValueBuf, "%4.3lf", evalue);
00830     } else if (evalue < 1.0) {
00831         sprintf(print_eValueBuf, "%3.2lf", evalue);
00832     } else if (evalue < 10.0) {
00833         sprintf(print_eValueBuf, "%2.1lf", evalue);
00834     } else {
00835         sprintf(print_eValueBuf, "%5.0lf", evalue);
00836     }
00837 
00838         return eValueBuffer;
00839 }

Here is the caller graph for this function:

char* print_formatDescription ( char *  description,
int4  firstLineIndent,
int4  remainingLinesIndent,
int4  maxLineLength 
)

Definition at line 192 of file print.c.

References global_malloc(), and int4.

Referenced by main(), and print_gappedAlignmentsFull().

00194 {
00195         int4 length, startWord = 0, endWord = 0, startLine = 0, newDescriptionPos = 0;
00196     int4 maxLengthAfterIndent, count;
00197     char* newDescription;
00198 
00199     length = strlen(description);
00200 
00201     // Declare memory for formatted description, which will be at most double its length
00202     newDescription = (char*)global_malloc(sizeof(char) * length * 2);
00203 
00204     startLine = startWord = endWord = 0;
00205 
00206     while (endWord < length)
00207         {
00208         // Find the end of the current word
00209         while (endWord < length && description[endWord] != ' ' &&
00210                description[endWord] != '\n' && description[endWord] != '\t')
00211         {
00212             endWord++;
00213         }
00214 
00215         if (startLine == 0)
00216                 maxLengthAfterIndent = maxLineLength - firstLineIndent;
00217                 else
00218                 maxLengthAfterIndent = maxLineLength - remainingLinesIndent;
00219 
00220         // If it is too far along
00221         if (endWord - startLine > maxLengthAfterIndent)
00222         {
00223             // If this is the first word of this line, we need to cut the word in half
00224             if (startLine == startWord)
00225             {
00226                 // Copy portion of the word
00227                 memcpy(newDescription + newDescriptionPos, description + startLine,
00228                        sizeof(char) * maxLineLength);
00229                 newDescriptionPos += maxLineLength;
00230 
00231                 // Add carriage return
00232                 newDescription[newDescriptionPos] = '\n';
00233                 newDescriptionPos++;
00234 
00235                 // Add indent
00236                 count = 0;
00237                 while (count < remainingLinesIndent)
00238                 {
00239                     newDescription[newDescriptionPos] = ' ';
00240                     newDescriptionPos++;
00241                     count++;
00242                 }
00243 
00244                 // Set pointers for next line
00245                 startLine += maxLineLength;
00246                 endWord = startWord = startLine;
00247             }
00248             // Else exclude this last word and copy the rest of the line over
00249             else
00250             {
00251                 // Copy line over
00252                                 memcpy(newDescription + newDescriptionPos, description + startLine,
00253                        sizeof(char) * (startWord - startLine));
00254                 newDescriptionPos += (startWord - startLine);
00255 
00256                 // Add carriage return
00257                 newDescription[newDescriptionPos] = '\n';
00258                 newDescriptionPos++;
00259 
00260                 // Add indent
00261                 count = 0;
00262                 while (count < remainingLinesIndent)
00263                 {
00264                     newDescription[newDescriptionPos] = ' ';
00265                     newDescriptionPos++;
00266                     count++;
00267                 }
00268 
00269                 // Set pointers for next line
00270                 startLine = endWord = startWord;
00271             }
00272         }
00273         else
00274         {
00275                 // Advance past current whitespace
00276             endWord++;
00277 
00278             // This is the start of the next word
00279             startWord = endWord;
00280         }
00281         }
00282 
00283     // Copy the last bit over
00284     memcpy(newDescription + newDescriptionPos, description + startLine,
00285            sizeof(char) * (length - startLine));
00286     newDescriptionPos += (length - startLine);
00287 
00288     // Null terminate
00289     newDescription[newDescriptionPos] = '\0';
00290 
00291     // Free the unformatted description
00292     free(description);
00293 
00294     return newDescription;
00295 }

Here is the call graph for this function:

Here is the caller graph for this function:

void print_gappedAlignmentsBrief (  ) 

Definition at line 515 of file print.c.

References finalAlignment::alignment, alignments_finalAlignments, finalAlignment::description, alignment::descriptionLocation, gappedExtension::eValue, alignment::gappedExtensions, global_malloc(), global_realloc(), finalAlignment::highestNominalScore, int4, memSingleBlock_getEntry(), gappedExtension::normalizedScore, parameters_getDescriptions, parameters_numDisplayAlignments, print_cafeDescription(), print_eValue2String(), statistics_gappedCalculateEvalue(), and statistics_gappedNominal2normalized().

Referenced by blast_search().

00516 {
00517         char* line;
00518         int4 descriptionLength;
00519         struct alignment* currentAlignment;
00520     struct finalAlignment* finalAlignment;
00521         struct gappedExtension* currentExtension;
00522         int4 count = 0;
00523         char* description;
00524     double normalizedScore, eValue;
00525 
00526         printf("                                                                 Score    E\n");
00527         printf("Sequences producing significant alignments:                      (bits) Value\n\n");
00528 
00529         // For each alignment
00530         while (count < alignments_finalAlignments->numEntries
00531         && count < parameters_numDisplayAlignments)
00532         {
00533         finalAlignment = memSingleBlock_getEntry(alignments_finalAlignments, count);
00534                 currentAlignment = finalAlignment->alignment;
00535                 currentExtension = currentAlignment->gappedExtensions;
00536 
00537         // Get description of subject
00538                 if (parameters_getDescriptions)
00539         {
00540             #ifdef CAFEMODE
00541             description = print_cafeDescription(currentAlignment->descriptionLocation, 1);
00542             descriptionLength = strlen(description);
00543             #else
00544             descriptionLength = strlen(finalAlignment->description);
00545                 description = (char*)global_malloc(sizeof(char) * (descriptionLength + 1));
00546             strcpy(description, finalAlignment->description);
00547                         #endif
00548         }
00549         else
00550         {
00551                 description = (char*)global_malloc(sizeof(char)); strcpy(description, "");
00552             descriptionLength = 0;
00553                 }
00554 
00555         // Realloc description string to length displayed
00556         description = (char*)global_realloc(description, sizeof(char) * 67);
00557 
00558         // Construct line with description, normalized score and eValue
00559         line = (char*)global_malloc(sizeof(char) * 90);
00560 
00561         // If description is more than 63 chars long
00562         if (descriptionLength > 63)
00563         {
00564             // Cut off end and add ...
00565             description[63] = '\0';
00566             strcat(description, "...");
00567         }
00568         else
00569         {
00570             // Otherwise pad out remaining with spaces
00571             while (descriptionLength < 66)
00572             {
00573                 description[descriptionLength] = ' ';
00574                 descriptionLength++;
00575             }
00576             description[descriptionLength] = '\0';
00577         }
00578 
00579         // If no gapped extensions have been performed and scored, use the alignment's
00580         // highest nominal score to calculate normalized score and e-value
00581                 if (currentExtension == NULL)
00582                 {
00583                 normalizedScore = statistics_gappedNominal2normalized(
00584                               finalAlignment->highestNominalScore);
00585             eValue = statistics_gappedCalculateEvalue(normalizedScore);
00586 
00587             sprintf(line, "%s  %4.0f  %s\n", description, normalizedScore,
00588                                 print_eValue2String(eValue));
00589         }
00590         else
00591         {
00592                         sprintf(line, "%s  %4.0f  %s\n", description, currentExtension->normalizedScore,
00593                                 print_eValue2String(currentExtension->eValue));
00594                 }
00595 
00596         printf("%s", line);
00597 
00598         // Free memory used constructing line
00599         free(line);
00600         free(description);
00601 
00602                 count++;
00603         }
00604         printf("\n");
00605 }

Here is the call graph for this function:

Here is the caller graph for this function:

void print_gappedAlignmentsFull ( char *  query,
struct PSSMatrix  PSSMatrix 
)

Definition at line 363 of file print.c.

References finalAlignment::alignment, alignments_finalAlignments, alignments_numClusters, blast_queryDescription, alignment::cluster, finalAlignment::description, alignment::descriptionLocation, alignment::gappedExtensions, global_malloc(), int4, memSingleBlock_getEntry(), alignment::numUnpackRegions, parameters_allClusterMembers, parameters_getDescriptions, parameters_numDisplayTracebacks, parameters_outputType, parameters_ssearch, parameters_tabular, parameters_xml, print_cafeDescription(), print_encodeGreaterLessThan(), print_formatDescription(), print_gappedExtension(), print_tabularGappedExtension(), print_untilWhitespace(), print_XMLgappedExtension(), alignment::subject, gappedExtension::subjectEnd, alignment::subjectLength, uint4, unpack_selectRegion(), unpackRegion::unpackedSubject, and alignment::unpackRegions.

Referenced by blast_search().

00364 {
00365         struct alignment* alignment;
00366     struct finalAlignment* finalAlignment;
00367         struct gappedExtension* currentExtension;
00368         char* description, *queryDescription;
00369     unsigned char* subject;
00370         int4 count = 0, descriptionLength, hspNum;
00371     uint4 clusterSizes[alignments_numClusters];
00372     uint4 queryDescriptionLength;
00373 
00374     queryDescriptionLength = strlen(blast_queryDescription);
00375     queryDescription = (char*)global_malloc(queryDescriptionLength + 1);
00376     strcpy(queryDescription, blast_queryDescription);
00377     queryDescription = print_untilWhitespace(queryDescription);
00378 
00379     // Clear array of cluster sizes
00380     count = 0;
00381     while (count < alignments_numClusters)
00382     {
00383         clusterSizes[count] = 0;
00384         count++;
00385     }
00386 
00387         // For each alignment we are to print the traceback
00388     count = 0;
00389         while ((count < parameters_numDisplayTracebacks || parameters_numDisplayTracebacks == 0)
00390          && count < alignments_finalAlignments->numEntries)
00391         {
00392         finalAlignment = memSingleBlock_getEntry(alignments_finalAlignments, count);
00393                 alignment = finalAlignment->alignment;
00394                 if (alignment->cluster > 0)
00395         {
00396                         clusterSizes[alignment->cluster]++;
00397         }
00398         count++;
00399         }
00400 
00401     // For each alignment we are to print the traceback
00402     count = 0;
00403         while ((count < parameters_numDisplayTracebacks || parameters_numDisplayTracebacks == 0)
00404          && count < alignments_finalAlignments->numEntries)
00405         {
00406         finalAlignment = memSingleBlock_getEntry(alignments_finalAlignments, count);
00407                 alignment = finalAlignment->alignment;
00408 
00409         // If this alignment is to be displayed
00410         if (parameters_allClusterMembers || alignment->cluster == 0 ||
00411             clusterSizes[alignment->cluster] > 0)
00412                 {
00413             // Print description
00414             if (parameters_getDescriptions)
00415             {
00416                 // If we are in cafe mode, use cafe function to get the description
00417                 #ifdef CAFEMODE
00418                 description = print_cafeDescription(alignment->descriptionLocation, 0);
00419                 #else
00420                 descriptionLength = strlen(finalAlignment->description);
00421                 description = (char*)global_malloc(sizeof(char) * (descriptionLength + 1));
00422                 strcpy(description, finalAlignment->description);
00423                 #endif
00424 
00425                 if (parameters_outputType == parameters_xml)
00426                 {
00427                                         description = print_encodeGreaterLessThan(description);
00428                                 }
00429                 else if (parameters_outputType == parameters_tabular)
00430                 {
00431                         description = print_untilWhitespace(description);
00432                 }
00433                 else
00434                 {
00435                         description = print_formatDescription(description, 0, 11, 68);
00436                 }
00437             }
00438             else
00439             {
00440                 description = (char*)global_malloc(sizeof(char));
00441                 strcpy(description, "");
00442             }
00443 
00444             if (parameters_outputType == parameters_xml)
00445             {
00446                 printf("        <Hit>\n");
00447                 printf("          <Hit_num>%d</Hit_num>\n", count + 1);
00448                 printf("          <Hit_id>gnl|BL_ORD_ID|%d</Hit_id>\n", alignment->descriptionLocation);
00449                 printf("          <Hit_def>%s</Hit_def>\n", description);
00450                 printf("          <Hit_accession>%d</Hit_accession>\n", alignment->descriptionLocation);
00451                 printf("          <Hit_len>%d</Hit_len>\n", alignment->subjectLength);
00452                 printf("          <Hit_hsps>\n");
00453             }
00454             else if (parameters_outputType == parameters_tabular)
00455             {
00456             }
00457                         else
00458             {
00459                 printf(">%s\n", description);
00460                 if (!parameters_allClusterMembers && clusterSizes[alignment->cluster] > 1)
00461                 {
00462                     printf("          [%d near-identical alignment(s) not displayed]\n",
00463                            clusterSizes[alignment->cluster] - 1);
00464                     clusterSizes[alignment->cluster] = 0;
00465                 }
00466 //                printf("          Length = %d DescriptionLocation = %d\n\n",
00467 //                       alignment->subjectLength, alignment->descriptionLocation);
00468                         printf("          Length = %d\n\n", alignment->subjectLength);
00469                         }
00470 
00471             // Get list of gapped extensions
00472             currentExtension = alignment->gappedExtensions;
00473                         hspNum = 0;
00474 
00475             // For each gapped extension
00476             while (currentExtension != NULL)
00477             {
00478                 hspNum++;
00479 
00480                 if (parameters_ssearch)
00481                     subject = alignment->subject;
00482                 else
00483                     // Get the unpacked subject
00484                     subject = unpack_selectRegion(alignment->unpackRegions, alignment->numUnpackRegions,
00485                                                   currentExtension->subjectEnd)->unpackedSubject;
00486 
00487                 // Print the gapped extension
00488                 if (parameters_outputType == parameters_xml)
00489                     print_XMLgappedExtension(currentExtension, PSSMatrix, query, subject, hspNum);
00490                 else if (parameters_outputType == parameters_tabular)
00491                     print_tabularGappedExtension(currentExtension, PSSMatrix, query, subject,
00492                                                  queryDescription, description);
00493                 else if (parameters_outputType != parameters_tabular)
00494                         print_gappedExtension(currentExtension, PSSMatrix, query, subject);
00495 
00496                 currentExtension = currentExtension->next;
00497             }
00498 
00499             if (parameters_outputType == parameters_xml)
00500             {
00501                 printf("          </Hit_hsps>\n");
00502                 printf("        </Hit>\n");
00503                         }
00504 
00505             free(description);
00506         }
00507 
00508                 count++;
00509         }
00510 
00511     free(queryDescription);
00512 }

Here is the call graph for this function:

Here is the caller graph for this function:

void print_singleSequence ( unsigned char *  sequence,
int4  length 
)

Definition at line 842 of file print.c.

References encoding_getLetter(), and int4.

Referenced by cluster_printCluster(), cluster_printSequence(), main(), rsdb_printCluster(), and rsdb_printSequence().

00843 {
00844         int4 count = 0;
00845     while (count < length)
00846     {
00847                 printf("%c", encoding_getLetter(sequence[count]));
00848         count++;
00849     }
00850 }

Here is the call graph for this function:

Here is the caller graph for this function:

void print_XMLfooter (  ) 

Definition at line 892 of file print.c.

References statisticalParameters::H, statisticalParameters::K, statisticalParameters::lambda, readdb_numberOfSequences, statistics_databaseSize, statistics_gappedParams, statistics_lengthAdjust, and statistics_searchSpaceSize.

Referenced by blast_search().

00893 {
00894     printf("      </Iteration_hits>\n");
00895     printf("      <Iteration_stat>\n");
00896     printf("        <Statistics>\n");
00897     printf("          <Statistics_db-num>%d</Statistics_db-num>\n", readdb_numberOfSequences);
00898     printf("          <Statistics_db-len>%llu</Statistics_db-len>\n", statistics_databaseSize);
00899     printf("          <Statistics_hsp-len>%d</Statistics_hsp-len>\n", statistics_lengthAdjust);
00900     printf("          <Statistics_eff-space>%llu</Statistics_eff-space>\n", statistics_searchSpaceSize);
00901     printf("          <Statistics_kappa>%.3f</Statistics_kappa>\n", statistics_gappedParams.K);
00902     printf("          <Statistics_lambda>%.3f</Statistics_lambda>\n", statistics_gappedParams.lambda);
00903     printf("          <Statistics_entropy>%.3f</Statistics_entropy>\n", statistics_gappedParams.H);
00904     printf("        </Statistics>\n");
00905     printf("      </Iteration_stat>\n");
00906     printf("    </Iteration>\n");
00907     printf("  </BlastOutput_iterations>\n");
00908     printf("</BlastOutput>\n");
00909 }

Here is the caller graph for this function:

void print_XMLheader ( char *  query,
struct PSSMatrix  PSSMatrix 
)

Definition at line 853 of file print.c.

References blast_queryDescription, encoding_alphabetType, encoding_protein, PSSMatrix::length, parameters_cutoff, parameters_extendGap, parameters_filterEnabled, parameters_scoringMatrix, parameters_startGap, and parameters_subjectDatabaseFile.

Referenced by blast_search().

00854 {
00855         printf("<?xml version=\"1.0\"?>\n");
00856     printf("<!DOCTYPE BlastOutput PUBLIC \"-//NCBI//NCBI BlastOutput/EN\" \"NCBI_BlastOutput.dtd\">\n");
00857     printf("<BlastOutput>\n");
00858     if (encoding_alphabetType == encoding_protein)
00859                 printf("  <BlastOutput_program>blastp</BlastOutput_program>\n");
00860         else
00861                 printf("  <BlastOutput_program>blastn</BlastOutput_program>\n");
00862         printf("  <BlastOutput_version>FSA-BLAST 1.03</BlastOutput_version>\n");
00863     printf("  <BlastOutput_reference>~Reference: Altschul, Stephen F., Thomas L. Madden, Alejandro A. Schaffer, ~Jinghui Zhang, Zheng Zhang, Webb Miller, and David J. Lipman (1997), ~&quot;Gapped BLAST and PSI-BLAST: a new generation of protein database search~programs&quot;,  Nucleic Acids Res. 25:3389-3402.</BlastOutput_reference>\n");
00864         printf("  <BlastOutput_db>%s</BlastOutput_db>\n", parameters_subjectDatabaseFile);
00865     printf("  <BlastOutput_query-ID>lcl|QUERY</BlastOutput_query-ID>\n");
00866     printf("  <BlastOutput_query-def>%s</BlastOutput_query-def>\n", blast_queryDescription);
00867     printf("  <BlastOutput_query-len>%d</BlastOutput_query-len>\n", PSSMatrix.length);
00868     printf("  <BlastOutput_param>\n");
00869     printf("    <Parameters>\n");
00870     printf("      <Parameters_matrix>%s</Parameters_matrix>\n", parameters_scoringMatrix);
00871     printf("      <Parameters_expect>%g</Parameters_expect>\n", parameters_cutoff);
00872     printf("      <Parameters_gap-open>%d</Parameters_gap-open>\n", parameters_startGap);
00873     printf("      <Parameters_gap-extend>%d</Parameters_gap-extend>\n", parameters_extendGap);
00874         if (parameters_filterEnabled)
00875     {
00876         if (encoding_alphabetType == encoding_protein)
00877                 printf("      <Parameters_filter>S</Parameters_filter>\n");
00878                 else
00879                 printf("      <Parameters_filter>D</Parameters_filter>\n");
00880     }
00881     else
00882     printf("      <Parameters_filter>F</Parameters_filter>\n");
00883     printf("    </Parameters>\n");
00884     printf("  </BlastOutput_param>\n");
00885     printf("  <BlastOutput_iterations>\n");
00886     printf("    <Iteration>\n");
00887     printf("      <Iteration_iter-num>1</Iteration_iter-num>\n");
00888     printf("      <Iteration_hits>\n");
00889 }

Here is the caller graph for this function:


Generated on Wed Dec 19 20:50:55 2007 for fsa-blast by  doxygen 1.5.2