/*****************************************************************************
Major portions of this software are copyrighted by the Medical College
of Wisconsin, 1994-2000, and are released under the Gnu General Public
License, Version 2. See the file README.Copyright for details.
******************************************************************************/
/*---------------------------------------------------------------------------*/
/*
Header file of general purpose routines for input, manipulation, and
output of probability density functions.
File: pdf.h
Author: B. Douglas Ward
Date: 28 January 2000
*/
/*---------------------------------------------------------------------------*/
/*
Define pdf data structure.
*/
typedef struct pdf
{
int nbin;
float * prob;
float lower_bnd;
float upper_bnd;
float width;
} pdf;
/*---------------------------------------------------------------------------*/
/*
Routine to print an error message and stop.
*/
void PDF_error (char * message);
/*---------------------------------------------------------------------------*/
/*
macro to test a malloc-ed pointer for validity
*/
#define PDF_MTEST(ptr) \
if((ptr)==NULL) \
( PDF_error ("Cannot allocate memory") )
/*---------------------------------------------------------------------------*/
/*
Initialize pdf data structure.
*/
void PDF_initialize (pdf * p);
/*---------------------------------------------------------------------------*/
/*
Destroy pdf data structure by deallocating memory.
*/
void PDF_destroy (pdf * p);
/*---------------------------------------------------------------------------*/
/*
Normalize pdf to have unity area.
*/
void PDF_normalize (pdf * p);
/*---------------------------------------------------------------------------*/
/*
Create pdf data structure by allocating memory and initializing values.
*/
void PDF_create (int nbin, float * prob, float lower_bnd, float upper_bnd,
pdf * p);
/*---------------------------------------------------------------------------*/
/*
Copy pdf data structure from p to pc.
*/
void PDF_copy (pdf p, pdf * pc);
/*---------------------------------------------------------------------------*/
/*
Convert bin number to value of independent variable at center of the bin.
*/
float PDF_ibin_to_xvalue (pdf p, int ibin);
/*---------------------------------------------------------------------------*/
/*
Convert value of independent variable to bin number.
*/
int PDF_xvalue_to_ibin (pdf p, float xvalue);
/*---------------------------------------------------------------------------*/
/*
Convert value of independent variable to probability.
*/
float PDF_xvalue_to_pvalue (pdf p, float xvalue);
/*---------------------------------------------------------------------------*/
/*
Print contents of pdf p to screen.
*/
void PDF_print (pdf p);
/*---------------------------------------------------------------------------*/
/*
Print contents of string str and pdf p to screen.
*/
void PDF_sprint (char * str, pdf p);
/*---------------------------------------------------------------------------*/
/*
Write contents of pdf p to specified file.
*/
void PDF_write_file (char * filename, pdf p);
/*---------------------------------------------------------------------------*/
/*
Simple smoothing of the pdf estimate.
*/
void PDF_smooth (pdf * p);
/*---------------------------------------------------------------------------*/
/*
Trim the pdf by removing the extreme lower and extreme upper values.
*/
void PDF_trim (float lower_per, float upper_per, pdf * p);
/*---------------------------------------------------------------------------*/
/*
Determine the range of values in the input short array.
*/
void PDF_short_range (int npts, short * sarray,
short * min_val, short * max_val);
/*---------------------------------------------------------------------------*/
/*
Determine the range of values in the input float array.
*/
void PDF_float_range (int npts, float * farray,
float * min_val, float * max_val);
/*---------------------------------------------------------------------------*/
/*
Estimate the pdf corresponding to the input short array.
*/
void PDF_short_to_pdf (int npts, short * sarray, pdf * p);
/*---------------------------------------------------------------------------*/
/*
Estimate the pdf corresponding to the input float array.
*/
void PDF_float_to_pdf (int npts, float * farray, int num_bins, pdf * p);
/*---------------------------------------------------------------------------*/
/*
Find extrema of pdf function.
*/
void PDF_find_extrema (pdf p, int * num_min, int * pdf_min,
int * num_max, int * pdf_max);
/*---------------------------------------------------------------------------*/
/*
Find bimodality of pdf function (if possible).
*/
int PDF_find_bimodal (pdf p, int * gmax, int * wmax);
/*---------------------------------------------------------------------------*/
syntax highlighted by Code2HTML, v. 0.9.1