packages feed

hstatistics-0.1.0.1: lib/Numeric/GSL/histogram-aux.c

#include <gsl/gsl_math.h>
#include <gsl/gsl_vector.h>

#include <gsl/gsl_histogram.h>
#include <gsl/gsl_histogram2d.h>

#include <stdio.h>


int to_vectors(gsl_histogram * H, int rs, double* r, int bs, double* b)
{
  int i;
  for (i = 0; i < rs; i++)
    r[i] = H->range[i];
  for (i = 0; i < bs; i++)
    b[i] = H->bin[i];
  return 0;
}

int increment_vector(gsl_histogram* H, int vs, const double* v)
{
  int i;
  for (i = 0; i < vs; i++)
    gsl_histogram_increment(H,v[i]);
  return 0;
}

int accumulate_vector(gsl_histogram* H, int vs, const double* v, int ws, const double* w)
{
  if (vs != ws) return 2000; // BAD_SIZE
  int i;
  for (i = 0; i < vs; i++)
    gsl_histogram_accumulate(H,v[i],w[i]);
  return 0;
}

int hist_fwrite(const char* filename, const gsl_histogram* h)
{
  int err;
  FILE* f = fopen(filename,"w");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram_fwrite(f,h);
  fclose(f);
  return err;
}

int hist_fread(const char* filename, gsl_histogram* h)
{
  int err;
  FILE* f = fopen(filename,"r");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram_fread(f,h);
  fclose(f);
  return err;
}

int hist_fprintf(const char* filename, const char* rfmt, const char* bfmt, const gsl_histogram* h)
{
  int err;
  FILE* f = fopen(filename,"w");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram_fprintf(f,h,rfmt,bfmt);
  fclose(f);
  return err;
}

int hist_fscanf(const char* filename, gsl_histogram* h)
{
  int err;
  FILE* f = fopen(filename,"r");
  if (!f) return 2003; //BAD_FILE
  err = gsl_histogram_fscanf(f,h);
  fclose(f);
  return err;
}

//////////////////////

int to_matrix(gsl_histogram2d * H, int rxs, double* rx, int rys, double* ry, int bx, int by, double* b)
{
  int bz = (rxs-1)*(rys-1); 
  if (bx*by != bz) return 2000; // BAD_SIZE
  int i,j;
  for (i = 0; i < rxs; i++)
    rx[i] = H->xrange[i];
  for (i = 0; i < rys; i++)
    ry[i] = H->yrange[i];
  for (i = 0; i < bz; i++)
    b[i] = H->bin[i];
  return 0;
}

int increment_matrix(gsl_histogram2d* H, int xs, const double* x, int ys, const double* y)
{
  if (xs != ys) return 2000; // BAD_SIZE
  int i;
  for (i = 0; i < xs; i++)
    gsl_histogram2d_increment(H,x[i],y[i]);
  return 0;
}

int accumulate_matrix(gsl_histogram2d* H, int xs, const double* x, int ys, const double* y, int ws, const double* w)
{
  if (xs != ys) return 2000; // BAD_SIZE
  if (xs != ws) return 2000; // BAD_SIZE
  int i;
  for (i = 0; i < xs; i++)
    gsl_histogram2d_accumulate(H,x[i],y[i],w[i]);
  return 0;
}

int hist2d_fwrite(const char* filename, const gsl_histogram2d* h)
{
  int err;
  FILE* f = fopen(filename,"w");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram2d_fwrite(f,h);
  fclose(f);
  return err;
}

int hist2d_fread(const char* filename, gsl_histogram2d* h)
{
  int err;
  FILE* f = fopen(filename,"r");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram2d_fread(f,h);
  fclose(f);
  return err;
}

int hist2d_fprintf(const char* filename, const char* rfmt, const char* bfmt, const gsl_histogram2d* h)
{
  int err;
  FILE* f = fopen(filename,"w");
  if (!f) return 2003; // BAD_FILE
  err = gsl_histogram2d_fprintf(f,h,rfmt,bfmt);
  fclose(f);
  return err;
}

int hist2d_fscanf(const char* filename, gsl_histogram2d* h)
{
  int err;
  FILE* f = fopen(filename,"r");
  if (!f) return 2003; //BAD_FILE
  err = gsl_histogram2d_fscanf(f,h);
  fclose(f);
  return err;
}