00001 
00002 #include <stdio.h>
00003 #include "pdf.h"
00004 
00005 
00006 void pdf::normalize( double *norm, const double *v, const size_t N )
00007 {
00008   double sum = 0;
00009   size_t i;
00010   for (i = 0; i < N; i++) {
00011     sum = sum + v[i];
00012   }
00013   double mean = 0;
00014   if (sum != 0) {
00015     double mean = sum / N;
00016   }
00017   for (i = 0; i < N; i++)
00018     norm[i] = v[i] - mean;
00019 } 
00020 
00021 
00022 
00023 double pdf::pdf_stddev( const double *v, const size_t N )
00024 {
00025   double pdf_sigma = 0.0;
00026   if (v != 0 && N != 0) {
00027     
00028     
00029     const size_t num_bins = 64;
00030     histogram::bin_vec binz( num_bins );
00031     histogram histo;
00032 
00033     histo.calculate( v, N, binz );
00034     double *freq = new double[ num_bins ];
00035 
00036     
00037     for (size_t i = 0; i < num_bins; i++) {
00038       freq[i] = 0.0;
00039       size_t count = static_cast<size_t>( binz[i] );
00040       double val = 0.0;
00041       if (count > 0) {
00042         freq[i] = static_cast<double>(count)/static_cast<double>(N);
00043         val = freq[i];
00044       }
00045       
00046     }
00047     
00048 
00049     double *norm = new double[ num_bins ];
00050 
00051     normalize(norm, freq, num_bins);
00052 
00053     stddev sd;
00054     pdf_sigma = sd.sd( norm, num_bins );
00055 
00056     delete [] norm;
00057     delete [] freq;
00058   }
00059   return pdf_sigma;
00060 }