Esempio n. 1
0
void bigBedSummary(char *fileName, char *chrom, int start, int end, int dataPoints)
/* bigBedSummary - Extract summary information from a bigBed file.. */
{
    /* Make up values array initialized to not-a-number. */
    double nan0 = strtod("NaN", NULL);
    double summaryValues[dataPoints];
    int i;
    for (i=0; i<dataPoints; ++i)
        summaryValues[i] = nan0;

    struct bbiFile *bbi = bigBedFileOpen(fileName);
    if (bigBedSummaryArray(bbi, chrom, start, end, bbiSummaryTypeFromString(summaryType),
                           dataPoints, summaryValues))
    {
        for (i=0; i<dataPoints; ++i)
        {
            double val = summaryValues[i];
            if (i != 0)
                printf("\t");
            if (isnan(val))
                printf("n/a");
            else
                printf("%g", val);
        }
        printf("\n");
    }
    else
    {
        errAbort("no data in region %s:%d-%d in %s\n", chrom, start, end, fileName);
    }
    bbiFileClose(&bbi);
}
Esempio n. 2
0
/* --- .Call ENTRY POINT --- */
SEXP BWGFile_summary(SEXP r_filename, SEXP r_chrom, SEXP r_ranges,
                     SEXP r_size, SEXP r_type, SEXP r_default_value)
{
  pushRHandlers();
  struct bbiFile * file = bigWigFileOpen((char *)CHAR(asChar(r_filename)));
  enum bbiSummaryType type =
    bbiSummaryTypeFromString((char *)CHAR(asChar(r_type)));
  double default_value = asReal(r_default_value);
  int *start = INTEGER(get_IRanges_start(r_ranges));
  int *width = INTEGER(get_IRanges_width(r_ranges));
  SEXP ans;
  
  PROTECT(ans = allocVector(VECSXP, length(r_chrom)));
  for (int i = 0; i < length(r_chrom); i++) {
    int size = INTEGER(r_size)[i];
    char *chrom = (char *)CHAR(STRING_ELT(r_chrom, i));
    SEXP r_values = allocVector(REALSXP, size);
    double *values = REAL(r_values);
    for (int j = 0; j < size; j++)
      values[j] = default_value;
    SET_VECTOR_ELT(ans, i, r_values);
    bool success = bigWigSummaryArray(file, chrom, start[i] - 1,
                                      start[i] - 1 + width[i], type, size,
                                      values);
    if (!success)
      warning("Failed to summarize range %d (%s:%d-%d)", i, chrom, start[i],
            start[i] - 1 + width[i]);
  }
  bbiFileClose(&file);
  popRHandlers();
  UNPROTECT(1);
  return ans;
}
Esempio n. 3
0
enum bbiSummaryType I_bbiSummaryTypeFromString(const char *string)
{
    char c_string[256];
    strcpy(c_string, string);
    return bbiSummaryTypeFromString(c_string);
}